{"version":3,"sources":["vendor/ember-cli/app-prefix.js","zeppelin-architectes/app.js","zeppelin-architectes/components/cards/projet.js","zeppelin-architectes/components/content-container/index.js","zeppelin-architectes/components/ember-notify.js","zeppelin-architectes/components/ember-notify/message.js","zeppelin-architectes/components/footer/index.js","zeppelin-architectes/components/head-content.js","zeppelin-architectes/components/head-layout.js","zeppelin-architectes/components/header/index.js","zeppelin-architectes/components/pagination/index.js","zeppelin-architectes/components/pagination/page-numbers.js","zeppelin-architectes/components/projet-file/index.js","zeppelin-architectes/controllers/application.js","zeppelin-architectes/controllers/index.js","zeppelin-architectes/controllers/realisations.js","zeppelin-architectes/controllers/realisations/architecture/projet.js","zeppelin-architectes/controllers/realisations/index.js","zeppelin-architectes/data-adapter.js","zeppelin-architectes/deprecation-workflow.js","zeppelin-architectes/helpers/and.js","zeppelin-architectes/helpers/app-version.js","zeppelin-architectes/helpers/break-lines.js","zeppelin-architectes/helpers/camelize.js","zeppelin-architectes/helpers/capitalize.js","zeppelin-architectes/helpers/classify.js","zeppelin-architectes/helpers/dasherize.js","zeppelin-architectes/helpers/eq.js","zeppelin-architectes/helpers/gt.js","zeppelin-architectes/helpers/gte.js","zeppelin-architectes/helpers/html-safe.js","zeppelin-architectes/helpers/humanize.js","zeppelin-architectes/helpers/inline-svg.js","zeppelin-architectes/helpers/is-array.js","zeppelin-architectes/helpers/is-empty.js","zeppelin-architectes/helpers/is-equal.js","zeppelin-architectes/helpers/linkify.js","zeppelin-architectes/helpers/lowercase.js","zeppelin-architectes/helpers/lt.js","zeppelin-architectes/helpers/lte.js","zeppelin-architectes/helpers/not-eq.js","zeppelin-architectes/helpers/not.js","zeppelin-architectes/helpers/or.js","zeppelin-architectes/helpers/page-title.js","zeppelin-architectes/helpers/render-svg.js","zeppelin-architectes/helpers/titleize.js","zeppelin-architectes/helpers/trim.js","zeppelin-architectes/helpers/truncate.js","zeppelin-architectes/helpers/underscore.js","zeppelin-architectes/helpers/uppercase.js","zeppelin-architectes/helpers/w.js","zeppelin-architectes/helpers/xor.js","zeppelin-architectes/initializers/app-version.js","zeppelin-architectes/initializers/body-class.js","zeppelin-architectes/initializers/ember-data.js","zeppelin-architectes/instance-initializers/clear-double-boot.js","zeppelin-architectes/instance-initializers/head-browser.js","zeppelin-architectes/locations/none.js","zeppelin-architectes/modifiers/did-insert.js","zeppelin-architectes/modifiers/did-update.js","zeppelin-architectes/modifiers/will-destroy.js","zeppelin-architectes/router.js","zeppelin-architectes/routes/application.js","zeppelin-architectes/routes/index.js","zeppelin-architectes/routes/realisations.js","zeppelin-architectes/routes/realisations/architecture/projet.js","zeppelin-architectes/routes/realisations/index.js","zeppelin-architectes/routes/realisations/paysage/projet.js","zeppelin-architectes/routes/realisations/urbanisme/projet.js","zeppelin-architectes/routes/realisattions.js","zeppelin-architectes/services/cookies.js","zeppelin-architectes/services/debug.js","zeppelin-architectes/services/device.js","zeppelin-architectes/services/error-ember-consumer.js","zeppelin-architectes/services/error-ember-listener.js","zeppelin-architectes/services/fastboot.js","zeppelin-architectes/services/head-data.js","zeppelin-architectes/services/model-watcher.js","zeppelin-architectes/services/notify.js","zeppelin-architectes/services/page-title.js","zeppelin-architectes/services/phone.js","zeppelin-architectes/services/poll-service.js","zeppelin-architectes/services/popup.js","zeppelin-architectes/services/services-events-handler.js","zeppelin-architectes/services/store.js","zeppelin-architectes/services/toast.js","zeppelin-architectes/services/user.js","zeppelin-architectes/svgs.js","zeppelin-architectes/templates/actualites.js","zeppelin-architectes/templates/application.js","zeppelin-architectes/templates/equipe.js","zeppelin-architectes/templates/equipe/index.js","zeppelin-architectes/templates/head.js","zeppelin-architectes/templates/index.js","zeppelin-architectes/templates/realisations.js","zeppelin-architectes/templates/realisations/architecture.js","zeppelin-architectes/templates/realisations/architecture/index.js","zeppelin-architectes/templates/realisations/architecture/projet.js","zeppelin-architectes/templates/realisations/index.js","zeppelin-architectes/templates/realisations/paysage.js","zeppelin-architectes/templates/realisations/paysage/index.js","zeppelin-architectes/templates/realisations/paysage/projet.js","zeppelin-architectes/templates/realisations/urbanisme.js","zeppelin-architectes/templates/realisations/urbanisme/index.js","zeppelin-architectes/templates/realisations/urbanisme/projet.js","zeppelin-architectes/transforms/boolean.js","zeppelin-architectes/transforms/date.js","zeppelin-architectes/transforms/number.js","zeppelin-architectes/transforms/string.js","zeppelin-architectes/utils/titleize.js","zeppelin-architectes/utils/upload-file-progress-estimator.js","zeppelin-architectes/utils/url-regex.js","zeppelin-architectes/utils/wildcarded-string.js","vendor/ember-cli/app-suffix.js","vendor/ember-cli/app-config.js","vendor/ember-cli/app-boot.js"],"sourcesContent":["'use strict';\n\n\n","define(\"zeppelin-architectes/app\", [\"exports\", \"@ember/application\", \"ember-resolver\", \"ember-load-initializers\", \"zeppelin-architectes/config/environment\", \"@embroider/macros/es-compat2\", \"zeppelin-architectes/deprecation-workflow\"], function (_exports, _application, _emberResolver, _emberLoadInitializers, _environment, _esCompat, _importSync20) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/application\",0,\"ember-resolver\",0,\"ember-load-initializers\",0,\"zeppelin-architectes/config/environment\",0,\"@embroider/macros\",0,\"./deprecation-workflow\"eaimeta@70e063a35619d71f\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  {\n    (0, _esCompat.default)(_importSync20);\n  }\n  class App extends _application.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"modulePrefix\", _environment.default.modulePrefix);\n      _defineProperty(this, \"podModulePrefix\", _environment.default.podModulePrefix);\n      _defineProperty(this, \"Resolver\", _emberResolver.default);\n    }\n  }\n  _exports.default = App;\n  (0, _emberLoadInitializers.default)(App, _environment.default.modulePrefix);\n});","define(\"zeppelin-architectes/components/cards/projet\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n          <div class=\"realisations__item\">\n          <LinkTo\n  {{!--           class=\"anim faded underlined\" --}}\n            @route={{concat \"realisations.\" @category \".projet\"}}\n  {{!--           @model={{@projet}} --}}\n            @models={{array @projet.slug}}\n          >\n            <div class=\"realisations__item-projet\">\n              <img src=\"/{{if @projet.cover @projet.cover (get @projet.images 0)}}\" />\n              <div class=\"label__container\">\n  {{!-- a revoir/implémenter\n  <ContentContainer>\n                <div class=\"label\">\n                  <div class=\"nom\">{{@projet.nom}}</div>\n                  <div class=\"lieu\">{{@projet.lieu}}</div>\n                </div>\n  </ContentContainer>--}}\n                <div class=\"label\">\n  {{!-- idem               <div class=\"nom\"><ContentContainer @text={{@projet.nom}} @lines=1 /></div>\n  sinon simplement couper en nombre de lettres...\n  --}}\n                  <div class=\"nom\">{{@projet.nom}}</div>\n                  <div class=\"lieu\">{{@projet.lieu}}</div>\n                </div>\n  \n              </div>\n            </div>\n          </LinkTo>\n        </div>\n  */\n  {\n    \"id\": \"t+f+811v\",\n    \"block\": \"[[[1,\\\"      \\\"],[10,0],[14,0,\\\"realisations__item\\\"],[12],[1,\\\"\\\\n        \\\"],[8,[39,1],null,[[\\\"@route\\\",\\\"@models\\\"],[[28,[37,2],[\\\"realisations.\\\",[30,1],\\\".projet\\\"],null],[28,[37,3],[[30,2,[\\\"slug\\\"]]],null]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n          \\\"],[10,0],[14,0,\\\"realisations__item-projet\\\"],[12],[1,\\\"\\\\n            \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[29,[\\\"/\\\",[52,[30,2,[\\\"cover\\\"]],[30,2,[\\\"cover\\\"]],[28,[37,6],[[30,2,[\\\"images\\\"]],0],null]]]]],[12],[13],[1,\\\"\\\\n            \\\"],[10,0],[14,0,\\\"label__container\\\"],[12],[1,\\\"\\\\n\\\"],[1,\\\"              \\\"],[10,0],[14,0,\\\"label\\\"],[12],[1,\\\"\\\\n\\\"],[1,\\\"                \\\"],[10,0],[14,0,\\\"nom\\\"],[12],[1,[30,2,[\\\"nom\\\"]]],[13],[1,\\\"\\\\n                \\\"],[10,0],[14,0,\\\"lieu\\\"],[12],[1,[30,2,[\\\"lieu\\\"]]],[13],[1,\\\"\\\\n              \\\"],[13],[1,\\\"\\\\n\\\\n            \\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[13]],[\\\"@category\\\",\\\"@projet\\\"],false,[\\\"div\\\",\\\"link-to\\\",\\\"concat\\\",\\\"array\\\",\\\"img\\\",\\\"if\\\",\\\"get\\\"]]\",\n    \"moduleName\": \"zeppelin-architectes/components/cards/projet.hbs\",\n    \"isStrictMode\": false\n  });\n  var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"projet\"));\n});","define(\"zeppelin-architectes/components/content-container/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/service\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/template\", \"@ember/runloop\", \"zeppelin-architectes/helpers/linkify\", \"zeppelin-architectes/helpers/break-lines\", \"@ember/template-factory\"], function (_exports, _component, _component2, _service, _object, _tracking, _template, _runloop, _linkify, _breakLines, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/service\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/template\",0,\"@ember/runloop\",0,\"zeppelin-architectes/helpers/linkify\",0,\"zeppelin-architectes/helpers/break-lines\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <span class=\"content-container{{if this.expanded ' expanded'}}\" {{did-insert this.didInsert}}>\n  {{#if @isTranslatable}}\n  \t<Translations::TranslatableContent\n  \t\t@content={{this._computedContent}}\n  \t\t@baseClass={{@translatableBaseClass}}\n  \t\t@item={{@translatableItem}}\n  \t\t@onTranslate={{this.translatableOnTranslate}}\n  \t\t@onUntranslate={{this.translatableOnUntranslate}}\n  \t\t@onTranslated={{this.translatableOnTranslated}}\n  \t\t@onUntranslated={{this.translatableOnUntranslated}}\n  \t/>\n  {{else}}\n  \t{{this._computedContent}}\n  {{/if}}\n  </span>\n  <span id=\"testYield\" style=\"position:absolute;\">{{yield}}</span>\n  */\n  {\n    \"id\": \"Rp0LycDU\",\n    \"block\": \"[[[11,1],[16,0,[29,[\\\"content-container\\\",[52,[30,0,[\\\"expanded\\\"]],\\\" expanded\\\"]]]],[4,[38,2],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\"\\\\t\\\"],[8,[39,3],null,[[\\\"@content\\\",\\\"@baseClass\\\",\\\"@item\\\",\\\"@onTranslate\\\",\\\"@onUntranslate\\\",\\\"@onTranslated\\\",\\\"@onUntranslated\\\"],[[30,0,[\\\"_computedContent\\\"]],[30,2],[30,3],[30,0,[\\\"translatableOnTranslate\\\"]],[30,0,[\\\"translatableOnUntranslate\\\"]],[30,0,[\\\"translatableOnTranslated\\\"]],[30,0,[\\\"translatableOnUntranslated\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"\\\\t\\\"],[1,[30,0,[\\\"_computedContent\\\"]]],[1,\\\"\\\\n\\\"]],[]]],[13],[1,\\\"\\\\n\\\"],[10,1],[14,1,\\\"testYield\\\"],[14,5,\\\"position:absolute;\\\"],[12],[18,4,null],[13]],[\\\"@isTranslatable\\\",\\\"@translatableBaseClass\\\",\\\"@translatableItem\\\",\\\"&default\\\"],false,[\\\"span\\\",\\\"if\\\",\\\"did-insert\\\",\\\"translations/translatable-content\\\",\\\"yield\\\"]]\",\n    \"moduleName\": \"zeppelin-architectes/components/content-container/index.hbs\",\n    \"isStrictMode\": false\n  });\n\n  // import { linkify } from 'ember-linkify/helpers/linkify';\n\n  //\"../../\" is the same as \"civ/\" : we prefere this relative path for compliancy with \"civ-embed\" source-code\n\n  /*\n   * <ContentContainer\n   *\n  \t@html= set here the content to specify that it is to be handled as HTML (htmlSafe will be used automaticaly)\n  \n  \t@text= set here the content to specify that it is to be handled as PLAIN TEXT - Note that, by default, the text will be linkified and that any \\n will be changed for <br>.\n  \n  \t@noTextToHTML= in case of plain text content, forbid linkify and \\n to br to keep the content as plain text\n  \n  \t@noLinkify = in case of plain text content, forbid linkify only\n  \n  \t@lines= number of line to display for the less mode\n  \n  \t@stripText= true to truncate by char, false  by word.\n  \n  \t@ellipsis= eg \"[...]\" (default value) : value of the ellipsis if the content is truncated - will be combined with @showMoreButton if not null\n  \n  \t@showMoreButton= display the \"More...\" button or not\n  \n  \t@seeMoreText= label for the More button\n  \n  \t@showLessButton= display the \"More...\" button or not\n  \n  \t@seeLessText= label for the More button\n  \n  \t@expanded= dynamicaly settable -true to open the whole content\n  \n  \t@onToggleExpand= external callback to call after toggling the mode to (non) expanded. The next mode is passed as the first argument (boolean) to the callback. If the callback returns true the content will not be refreshed.\n  \n  \t@pollerTimer= default to 3000 : set the ms interval for the component to check if the container dimensions changed and retrunc if needed\n  \n  \t@isTranslatable= boolean : true to use the Translations::TranslatableContent\n  \t!WARNING: actually once the content is translated the number of lines are not checked (it could be but we don't want that as the translation is on the clamped version on the text).\n  \n  \t@translatableItem= Model : MANDATORY if isTranslatable. It is the model that provides the detectedLanguage for Translations::TranslatableContent.\n  \n  \t@translatableBaseClass= @baseClass argument for Translations::TranslatableContent\n  \n  \t@translatableOnTranslate= @onTranslate argument for Translations::TranslatableContent\n  \n  \t@translatableOnUntranslate= @onUntranslate argument for Translations::TranslatableContent\n  \n   * />\n   *\n   */\n  let ContentContainerComponent = _exports.default = (_dec = (0, _service.inject)(), _dec2 = (0, _service.inject)(), _class = class ContentContainerComponent extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"debug\", _descriptor, this);\n      _initializerDefineProperty(this, \"intl\", _descriptor2, this);\n      _initializerDefineProperty(this, \"targetWidth\", _descriptor3, this);\n      _initializerDefineProperty(this, \"element\", _descriptor4, this);\n      _initializerDefineProperty(this, \"isExpanded\", _descriptor5, this);\n      _initializerDefineProperty(this, \"ellipsisString\", _descriptor6, this);\n      _initializerDefineProperty(this, \"_translated\", _descriptor7, this);\n      _defineProperty(this, \"_debug\", true);\n      _defineProperty(this, \"_debugAlertOnEachStage\", true);\n      _defineProperty(this, \"_computedText\", '');\n      _defineProperty(this, \"_computedHTML\", '');\n      _defineProperty(this, \"_poller\", void 0);\n      _defineProperty(this, \"_pollerTimer\", 3000);\n      _defineProperty(this, \"__timer\", []);\n      _initializerDefineProperty(this, \"_contentToClamp\", _descriptor8, this);\n      _initializerDefineProperty(this, \"_computedContent\", _descriptor9, this);\n      /**\n       * Calculates target width for the text (i.e. parent elment width)\n       * @method _calculateTargetWidth\n       * @return {Void}\n       * @private\n       */\n      _defineProperty(this, \"_calculating\", false);\n    }\n    //dbg\n\n    get dbg_times() {\n      let lts = 0;\n      return this.__timer.map(ts => {\n        if (!lts) {\n          lts = ts;\n          return 0;\n        }\n        let diff = ts - lts;\n        lts = ts;\n        return diff;\n      });\n    }\n    willDestroy() {\n      if (this._poller) (0, _runloop.cancel)(this._poller);\n      if (this._passer) (0, _runloop.cancel)(this._passer);\n    }\n    didInsert(element) {\n      if (this._debug) this.__timer.push(Date.now());\n      this.element = element;\n      if (this.args.pollerTimer) this._pollerTimer = this.args.pollerTimer;\n      (0, _runloop.cancel)(this._poller);\n      this._poller = (0, _runloop.later)(this, this._calculateTargetWidth, 100);\n      // \t\tscheduleOnce('afterRender', this, '_calculateTargetWidth');\n\n      if (this.debug._debug_contentContainer) this._debug = true;\n    }\n    toggleExpand() {\n      this.isExpanded = !this.isExpanded;\n      if (this.args.onToggleExpand) if (this.args.onToggleExpand(this.isExpanded)) return; //we stop here if onToggleExpand returns true : no refresh of the content\n      (0, _runloop.cancel)(this._poller);\n      this._poller = (0, _runloop.later)(this, () => {\n        this._calculateTargetWidth(true);\n      }, 100);\n    }\n    translatableOnTranslate() {\n      if (this.args.translatableOnTranslate) this.args.translatableOnTranslate(...arguments);\n    }\n    translatableOnTranslated() {\n      if (this.args.translatableOnTranslated) this.args.translatableOnTranslated(...arguments);\n      (0, _runloop.later)(this, function () {\n        let translatableContainer = this.element.querySelector('.translatable-content');\n        this._contentToClamp = translatableContainer.innerHTML;\n        this._calculateTargetWidth(true);\n        translatableContainer.innerHTML = this._computedContent;\n        this._translated = true;\n      }.bind(this), 200);\n    }\n    translatableOnUntranslate() {\n      if (this.args.translatableOnUntranslate) this.args.translatableOnUntranslate(...arguments);\n    }\n    translatableOnUntranslated() {\n      if (this.args.translatableOnUntranslated) this.args.translatableOnUntranslated(...arguments);\n      this._contentToClamp = this.args.html || this.args.text;\n      this._calculateTargetWidth(true);\n    }\n    get isContentHTML() {\n      const\n        //content = this.args.html || this.args.text,\n        content = this._contentToClamp,\n        tester = document.createElement('div');\n      tester.innerHTML = content;\n      return tester.innerHTML != tester.innerText;\n    }\n    // \t@computed ('targetWidth', 'isExpanded', 'element.offsetWidth', 'element.parentElement.offsetWidth')\n    get formatedContent() {\n      //console.log('formatedContent S', this.args);\n\n      if (this._debug) this.__timer.push(Date.now());\n      //let content = this.args.html || this.args.text;\n      this._computedText = this.args.text;\n      this._computedHTML = this.args.html;\n      this._contentToClamp = this.args.html ?? this.args.text ?? document.getElementById('testYield').innerHTML;\n      // console.log('formatedContent E -0', this.args, this._contentToClamp);\n\n      let content = this._contentToClamp;\n      if ((0, _template.isHTMLSafe)(content)) content = content.string;\n      if (!content || !content.trim()) {\n        this._computedContent = '';\n        // console.log('formatedContent E -1', this.args, this._computedContent);\n        return this._computedContent;\n      }\n      const isHTML = this.isContentHTML; //this.args.html || isHTMLSafe(content);\n      if (this.isExpanded === null || this.isExpanded === undefined) this.isExpanded = this.args.expanded;\n      let ellipsis = '',\n        controlText = '',\n        classAdd = '',\n        appendEventOnEllipsis = false;\n      if (this.args.ellipsis === undefined || this.args.ellipsis === null) this.ellipsisString = \" [...]\";else this.ellipsisString = \" \" + this.args.ellipsis;\n      if (this._debug) this.__timer.push(Date.now());\n      if (!this.isExpanded && this.args.showMoreButton) {\n        if (this.args.seeMoreText === undefined || this.args.seeMoreText === null) this.args.seeMoreText = this.intl.t('truncatedContentsDefaults.seeMore');\n        controlText = this.args.seeMoreText;\n        classAdd = \" more lt-line-clamp__more\";\n        appendEventOnEllipsis = true;\n      } else if (this.isExpanded && this.args.showLessButton) {\n        if (this.args.seeMoreText === undefined || this.args.seeMoreText === null) this.args.seeMoreText = this.intl.t('truncatedContentsDefaults.seeLess');\n        controlText = this.args.seeLessText;\n        classAdd = \" less lt-line-clamp__less\";\n        appendEventOnEllipsis = true;\n      }\n      if (this._debug) this.__timer.push(Date.now());\n      // if coming from intl translation we need them to be plain string type :\n      controlText = controlText.toString();\n      this.ellipsisString = this.ellipsisString.toString();\n      if (controlText.trim && controlText.trim() || this.ellipsisString.trim && this.ellipsisString.trim()) {\n        if (controlText) {\n          ellipsis = '<span class=\"content-container__ellipsis' + classAdd + '\">' + this.ellipsisString + ' <span class=\"content-container__link\">' + controlText + '</span></span>';\n        } else {\n          ellipsis = '<span class=\"content-container__ellipsis' + classAdd + '\">' + this.ellipsisString + '</span>';\n        }\n      }\n      if (this._debug) console.log('formatedContent() - ellipsis:', ellipsis, '{this.ellipsisString:' + this.ellipsisString + '}', this.args.ellipsis, '\\ncontrolText:' + controlText);\n      if (this._debug) this.__timer.push(Date.now());\n      if (!isHTML) {\n        if (!this.args.noTextToHTML) {\n          // By default we provide some utils for plain text : hyperlinks and \"\\n\" => \"<br>\"\n          content = (0, _breakLines.breakLines)([content]);\n          if (!this.args.noLinkify) content = (0, _linkify.linkify)([content, {\n            target: '_blank',\n            class: 'external-link'\n          }]);\n        }\n      }\n      if (this._debug) this.__timer.push(Date.now());\n      if (this.isExpanded) {\n        const expandedHTML = this._placeEllipsis(content.toString(), ellipsis);\n        if (appendEventOnEllipsis) (0, _runloop.later)(this, this._addEllipsisOnClick, 100);\n        this._removeContainerContext();\n        this._computedContent = (0, _template.htmlSafe)(expandedHTML);\n        //console.log('formatedContent E 0', this.args, this._computedContent);\n        return this._computedContent;\n      }\n      if (this._debug) this.__timer.push(Date.now());\n      let targetH = this._measureHTML('<br>'.repeat(this.args.lines)).H;\n      const cstyle = window.getComputedStyle(this.containerContext.parentElement);\n      const lineHeight = cstyle.getPropertyValue('line-height') ? parseInt(cstyle.getPropertyValue('line-height')) : 0;\n      let msg = \"targetH=\" + targetH + \"+=\" + lineHeight + \"{\" + cstyle.getPropertyValue('line-height') + \"} / 4 =>\" + (targetH + lineHeight / 2);\n      targetH += lineHeight / 2; //a bit of margin to get the needed lines number\n      if (this._debug) this.__timer.push(Date.now());\n      const targetW = this._calculateTargetWidth();\n      if (this._debug) this.__timer.push(Date.now());\n      // \t\tconsole.log(msg + \"\\ntargetW=\" + targetW, '\\n', this.dbg_times);\n\n      if (this._debug && this._debugAlertOnEachStage) alert(msg + \"\\ntargetW=\" + targetW);\n      this.containerContext.style.width = targetW + 'px';\n      let contentDims = this._measureHTML(content);\n      if (this._debug) this.__timer.push(Date.now());\n      if (this._debug) console.log('Target H:' + targetH + ' - W:' + targetW + '\\nInitial contentDims:', contentDims, '\\n', this.dbg_times);\n      if (contentDims.H <= targetH && contentDims.W <= this.targetWidth) {\n        // No truncation needed\n        if (this._debug) {\n          this.containerContext.style.border = \"solid 1px green\";\n          this.containerContext.style.top = this.element.parentElement.offsetTop + this.containerContext.offsetHeight + 20 + 'px';\n          window.scrollTo(this.element.offsetLeft - 100, this.element.offsetTop - 100);\n          console.log('content-container NO truncation needed! \\ntarget:' + this.args.lines + 'lines\\nTarget H:' + targetH + ' - W:' + targetW + '\\ntruncated contentDims:', contentDims, '\\n\\ncontent:', content, '\\n\\ncontainerContext:', this.containerContext);\n          if (this._debugAlertOnEachStage) alert('NO truncation needed!:\\n' + content + '\\ntarget height:' + targetH + '\\ntruncated final height:' + contentDims.H);\n        } else this._removeContainerContext();\n        this._computedContent = (0, _template.htmlSafe)(content);\n        //console.log('formatedContent E 1', this.args, this._computedContent);\n        return this._computedContent;\n      }\n      let splice = this.splitHTMLIntoWords(this.containerContext);\n      let lastInner = splice.join(' ');\n      //! This is the \"Rough\"/quick truncation loop : it takes the whole content and remove last text or html nodes one by one to find an height lower than the targeted one\n      let lastH = contentDims.H,\n        tooShortContent = false,\n        _sameCount = 0,\n        _globCount = 0; //if anythings wrong : kill any infinite or too long loop !\n\n      while (contentDims.H > targetH) {\n        lastInner = splice.join(' ');\n        splice.splice(-1, 1);\n        contentDims = this._measureHTML(splice.join(' '));\n        _globCount++;\n        if (_globCount > 500) {\n          const error = 'Infinite Rough loop detected (A) !\\ntarget:' + this.args.lines + '\\ntarget height:' + targetH + 'lines\\ntruncated final height:' + contentDims.H + '\\n\\ntruncated content:' + this.containerContext.innerHTML + '\\n\\ninitial content:' + content;\n          if (this._debug) console.error(error);else throw error;\n          break;\n        }\n        if (lastH == Math.ceil(contentDims.H)) {\n          _sameCount++;\n          if (_sameCount > 100) {\n            tooShortContent = true;\n            break;\n          }\n        } else _sameCount = 0;\n        lastH = Math.ceil(contentDims.H);\n        if (this._debug) console.log('formatedContent()-Rough loop {_sameCount:' + _sameCount + '}\\ntarget height:' + targetH + '\\ntruncated current height:' + contentDims.H + '\\ncontent:', this.containerContext.innerHTML);\n      }\n      contentDims = this._measureHTML(this._placeEllipsis(lastInner, ellipsis));\n      //! Now we do the fine work : from the roughly truncated html we now remove the last word or letter (depending on this.args.stripText) until finding an height smaller than the targeted one\n      if (this.args.stripText || contentDims.H > targetH + 20) {\n        // The first fine loop truncs by words to be quicker and will then let the second one to trunc by char\n        const truncBy = Math.ceil(contentDims.H / targetH);\n        _sameCount = 0;\n        _globCount = 0;\n        while (contentDims.H > targetH) {\n          lastInner = this.containerContext.innerHTML; //for this loop we store the last content that was longer than the targetH : it will be user by the second fine loop to trunc by char\n          //console.log('_splitContainerContextLastWord call 1 S');\n          this._splitContainerContextLastWord(targetH, false, truncBy);\n          //console.log('_splitContainerContextLastWord call 1 E');\n          contentDims = this._measureHTML(this._placeEllipsis(this.containerContext.innerHTML, ellipsis));\n          _globCount++;\n          if (_globCount > 500) {\n            const error = 'Infinite Fine loop 1 detected (B) !\\ntarget:' + this.args.lines + 'lines\\ntarget height:' + targetH + '\\ntruncated final height:' + contentDims.H + '\\n\\ntruncated content:' + this.containerContext.innerHTML + '\\n\\ninitial content:' + content;\n            if (this._debug) console.error(error);else throw error;\n            break;\n          }\n          if (lastH == Math.ceil(contentDims.H)) {\n            _sameCount++;\n            if (_sameCount > 100) {\n              tooShortContent = true;\n              break;\n            }\n          } else _sameCount = 0;\n          lastH = Math.ceil(contentDims.H);\n          if (this._debug) console.log('formatedContent()-Fine loop 1 {_sameCount:' + _sameCount + '/_globCount:' + _globCount + '}\\ntarget height:' + targetH + '\\ntruncated current height:' + contentDims.H + '\\ncontent:', this.containerContext.innerHTML + '\\nlastInner:' + lastInner);\n        }\n        contentDims = this._measureHTML(this._placeEllipsis(lastInner, ellipsis));\n        if (this._debug) console.log('formatedContent()-Fine loop 1 ENDED {_sameCount:' + _sameCount + '/_globCount:' + _globCount + '}\\ntarget height:' + targetH + '\\ntruncated current height:' + contentDims.H + '\\ncontent:', this.containerContext.innerHTML);\n      }\n      _sameCount = 0;\n      _globCount = 0;\n      while (contentDims.H > targetH) {\n        //console.log('_splitContainerContextLastWord call 2 S', targetH, this.args.stripText);\n        this._splitContainerContextLastWord(targetH, this.args.stripText);\n        //console.log('_splitContainerContextLastWord call 2 E', targetH, this.args.stripText);\n        lastInner = this.containerContext.innerHTML;\n        contentDims = this._measureHTML(this._placeEllipsis(this.containerContext.innerHTML, ellipsis));\n        _globCount++;\n        if (_globCount > 500) {\n          const error = 'Infinite Fine loop 2 detected (C) !\\ntarget:' + this.args.lines + 'lines\\ntarget height:' + targetH + '\\ntruncated final height:' + contentDims.H + '\\n\\ntruncated content:' + this.containerContext.innerHTML + '\\n\\ninitial content:' + content;\n          if (this._debug) console.error(error);else throw error;\n          break;\n        }\n        if (lastH == Math.ceil(contentDims.H)) {\n          _sameCount++;\n          if (_sameCount > 100) {\n            tooShortContent = true;\n            break;\n          }\n        } else _sameCount = 0;\n        lastH = Math.ceil(contentDims.H);\n        if (this._debug) console.log('formatedContent()-Fine loop 2 {_sameCount:' + _sameCount + '/_globCount:' + _globCount + '}\\ntarget height:' + targetH + '\\ntruncated current height:' + contentDims.H + '\\ncontent:', this.containerContext.innerHTML);\n      }\n      const html = this.containerContext.innerHTML;\n      if (this._debug) {\n        this.containerContext.style.border = \"solid 1px green\";\n        this.containerContext.style.top = this.element.parentElement.offsetTop + this.containerContext.offsetHeight + 20 + 'px';\n        // \t\t\t$('html, body').animate({scrollTop: $(\".comment-item:last\").offset().top - 100}, 1000);\n        window.scrollTo(this.element.offsetLeft - 100, this.element.offsetTop - 100);\n        //console.log('content-container truncation FINISHED! \\ntarget:' + this.args.lines + 'lines\\nTarget H:' + targetH +' - W:' + targetW + '\\ntruncated contentDims:', contentDims, '\\n\\ntruncated content:', html, '\\n\\ninitial content:', content, '\\n\\ncontainerContext:', this.containerContext )\n        if (this._debugAlertOnEachStage) alert('FINISHED!:\\n' + html + '\\ntarget height:' + targetH + '\\ntruncated final height:' + contentDims.H);\n      } else this._removeContainerContext();\n      if (appendEventOnEllipsis) (0, _runloop.later)(this, this._addEllipsisOnClick, 100);\n      this.targetWidth = contentDims.W;\n      /**/\n      this._computedContent = (0, _template.htmlSafe)(html);\n      //console.log('formatedContent E 2', this.args, this._computedContent);\n      return this._computedContent;\n    }\n    _addEllipsisOnClick() {\n      const elipsNode = this.element.querySelector(\".content-container__link\");\n      if (!elipsNode) return;\n      elipsNode.addEventListener('click', function () {\n        this.toggleExpand();\n      }.bind(this));\n      if (elipsNode && !elipsNode.className) elipsNode.className = 'link';else if (elipsNode && !elipsNode?.className?.includes(' link')) elipsNode.className = elipsNode.className + ' link';\n    }\n    _placeEllipsis(innerHTML, ellipsis) {\n      if (innerHTML && innerHTML.toString) innerHTML = innerHTML.toString();\n      if (!ellipsis.trim() || innerHTML.includes(' class=\"content-container__ellipsis')) return innerHTML;\n      let tester = document.createElement('div');\n      tester.innerHTML = innerHTML;\n      if (tester.childNodes && tester.childNodes.length) {\n        for (let i = tester.childNodes.length - 1; i >= 0; i--) {\n          let child = tester.childNodes[i],\n            display = child.nodeType != Node.TEXT_NODE && window.getComputedStyle(child).getPropertyValue('display');\n          if (child.nodeType != Node.TEXT_NODE && (child.tagName == 'P' || child.tagName == 'DIV' || child.tagName == 'STRONG' || /^H[1-6]$/.test(child.tagName) || child.tagName == 'UL' || child.tagName == 'OL' || display == 'block' || display == 'flex' || display == 'table')) {\n            //Any block node\n            if (child.innerHTML.trim()) child.innerHTML += ellipsis;else tester.innerHTML += ellipsis;\n            innerHTML = tester.innerHTML;\n            break;\n          } else {\n            innerHTML += ellipsis;\n            break;\n          }\n        }\n      } else innerHTML += ellipsis;\n      return innerHTML;\n    }\n    _splitContainerContextLastWord(targetH, stripText, stripNumber, node, level) {\n      if (!level) level = 0;\n      if (!node) node = this.containerContext;\n      // console.log(\"_splitContainerContextLastWord\", node);\n      if (!node || node.nodeType != Node.TEXT_NODE && node.className && node.className?.includes(\"content-container__ellipsis\")) return false;\n      if (!stripNumber) stripNumber = 1; //number of words or chars to remove on each call\n      if (node.nodeType != Node.TEXT_NODE) {\n        if (node.childNodes && node.childNodes.length) {\n          let truncated = false;\n          for (let i = node.childNodes.length - 1; i >= 0 && node.childNodes[i]; i--) {\n            // console.log(\"0\", node, node.childNodes);\n            let child = node.childNodes[i];\n            if (!child || !child.parentElement) continue;\n            // console.log(\"1\", node, child, child.parentElement, node.childNodes);\n            // console.log(\"NODE{\"+i+\"}:\", child, '\\nctnt=', ( child.nodeType != Node.TEXT_NODE ? child.innerHTML : child.nodeValue ) );\n            if (child.nodeType != Node.TEXT_NODE && child.tagName === 'img') {\n              child.overflow = \"hidden\";\n              child.style.maxHeight = targetH;\n              child.style.maxWidth = this.targetWidth;\n            }\n            // console.log(\"2\", node, child, child.parentElement, node.childNodes);\n            // console.log(\"2a\", child.nodeType);\n            // if( child.nodeType != Node.TEXT_NODE )\n            // \tconsole.log(\"2b\", child.innerHTML.length);\n            // else\n            // \tconsole.log(\"2c\", child.nodeValue.length);\n\n            if (child.nodeType != Node.TEXT_NODE && !child.innerHTML.length || child.nodeType == Node.TEXT_NODE && !child.nodeValue.length) {\n              if (node && child && child.parentElement) {\n                // console.log(\"A\", node, child, child.parentElement, node.childNodes);\n                try {\n                  child.parentElement.removeChild(child);\n                } catch (e) {}\n                // console.log(\"A'\", node, child, child.parentElement, node.childNodes);\n              }\n              i++;\n              if (!node?.childNodes?.length) {\n                if (node && node.parentElement) {\n                  // console.log(\"B\", node, node.childNodes);\n                  try {\n                    node.parentElement.removeChild(node);\n                  } catch (e) {}\n                  // console.log(\"B'\", node, node.childNodes);\n                }\n                return true;\n              }\n              truncated = true;\n              // console.log(\"Done\", node, node.childNodes);\n\n              continue;\n            }\n            // console.log(\"3\");\n            if (!child || child.nodeType != Node.TEXT_NODE && child.className && child.className?.includes(\"content-container__ellipsis\")) {\n              // \t\t\t\t\t\ttruncated = true;\n              continue;\n            }\n            truncated = this._splitContainerContextLastWord(targetH, stripText, stripNumber, child, level + 1);\n            // console.log(\"4\", truncated);\n            if (truncated) break;\n            if (child.nodeType != child.TEXT_NODE && !child.innerHTML.length || child.nodeType == Node.TEXT_NODE && !child.nodeValue.length) {\n              if (node && child && child.parentElement) {\n                // console.log(\"C\", node, node.childNodes);\n                try {\n                  child.parentElement.removeChild(child);\n                } catch (e) {}\n                // console.log(\"C'\", node, node.childNodes);\n              }\n              i++;\n              if (child?.nodeType != child.TEXT_NODE && !node.childNodes.length) {\n                if (node && node.parentElement) {\n                  // console.log(\"D\", node, node.childNodes);\n                  try {\n                    node.parentElement.removeChild(node);\n                  } catch (e) {}\n                  // console.log(\"D'\", node, node.childNodes);\n                }\n                return true;\n              }\n            }\n            if (truncated) break;\n          }\n          // console.log(\"_splitContainerContextLastWord Return\", truncated);\n          return truncated;\n        }\n        // console.log(\"_splitContainerContextLastWord Done\", node, node.childNodes);\n      } else {\n        let trunc = [];\n        if (node && node.nodeValue) {\n          if (!stripText) {\n            let words = node.nodeValue.split(' ');\n            trunc = words.splice(-stripNumber, stripNumber);\n            node.nodeValue = words.join(' ');\n          } else {\n            let chars = node.nodeValue.split('');\n            trunc = chars.splice(-stripNumber, stripNumber);\n            node.nodeValue = chars.join('');\n          }\n        }\n        if (this._debug) console.log(\"_splitContainerContextLastWord(\" + targetH + \", \" + stripText + \", \" + stripNumber + \", node, \" + level + \") - A\\ntrunc:\" + trunc + \"\\nkept:\" + node.nodeValue);\n        return true; //truncated : return\n      }\n      return false; //no truncation so far\n    }\n\n    /**\n     * Returns the content of nodeElement as an array of words\n     * This is working only on level 0 : any childnode found is returned as a 'word', html and text content included (not splitted as words).\n     * ==> only split the first level (the TEXT_NODEs) in nodeElement\n     * @method splitHTMLIntoWords\n     * @param {html element} nodeElement\n     * @return {Array}\n     * @private\n     */\n    splitHTMLIntoWords(nodeElement) {\n      function removeEmptyStrings(k) {\n        return k !== '';\n      }\n      var rWordBoundary = /[\\s\\n\\t]+/; // Includes space, newline, tab\n      var output = [];\n      for (var i = 0; i < nodeElement.childNodes.length; ++i) {\n        // Iterate through all nodes\n        var node = nodeElement.childNodes[i];\n        if (node.nodeType === Node.TEXT_NODE) {\n          // The child is a text node\n          var words = node.nodeValue.replace(/[\\s\\n\\t]{2,}/gm, ' ').trim().split(rWordBoundary).filter(removeEmptyStrings);\n          if (words.length) {\n            output.push.apply(output, words);\n          }\n        } /*else if (node.nodeType === Node.COMMENT_NODE) {\n          // What to do here? You can do what you want\n          } */else {\n          output.push(node.outerHTML);\n        }\n      }\n      return output;\n    }\n    _calculateTargetWidth(forceRefresh) {\n      if (this._calculating || !this.element || !this.element.parentElement) return this.targetWidth;\n      this._calculating = true;\n      if (this._poller) (0, _runloop.cancel)(this._poller);\n      if (this._passer) (0, _runloop.cancel)(this._passer);\n      // console.log( '_calculateTargetWidth('+forceRefresh+') S', this.element.id, this.element);\n      // if(this._poller)cancel(this._poller);\n      // if(this._passer)cancel(this._passer);\n      let targetWidth = this.targetWidth;\n      if (!targetWidth) targetWidth = 0;\n      if (this.element && this.element.parentElement) {\n        //this.element.parentElement.style.border = \"solid 1px\";\n        // \t\tthis.targetWidth = Math.ceil(this.element.parentElement.getBoundingClientRect().width) ;\n        // if(this._debug && this._debugAlertOnEachStage)alert(\"w:\"+this.element.parentElement.clientWidth);\n        if (this.args.text !== this._computedText || this.args.html !== this._computedHTML)\n          //the content has changed! do refresh!\n          forceRefresh = true;\n        const cstyle = window.getComputedStyle(this.element.parentElement);\n        this.targetWidth = this.element.parentElement.clientWidth;\n        if (!this.targetWidth) {\n          this.element.parentElement.style.width = \"100%\";\n          this._calculating = false;\n          return window.requestAnimationFrame(this._calculateTargetWidth);\n        }\n        if (cstyle.getPropertyValue('padding-left')) this.targetWidth -= parseInt(cstyle.getPropertyValue('padding-left'));else if (cstyle.getPropertyValue('padding'))\n          //getting padding as default for each left and right padding\n          this.targetWidth -= parseInt(cstyle.getPropertyValue('padding'));\n        if (cstyle.getPropertyValue('padding-right')) this.targetWidth -= parseInt(cstyle.getPropertyValue('padding-right'));else if (cstyle.getPropertyValue('padding')) this.targetWidth -= parseInt(cstyle.getPropertyValue('padding'));\n        this.targetWidth = Math.floor(this.targetWidth) - 2; //-2 is quite arbitrary but seems to be safer...\n      }\n      // console.log(targetWidth+ '<>' +this.targetWidth, this.element.parentElement);\n      if (this.targetWidth && (forceRefresh || !this.isExpanded && (\n      //we skip changes within 5%\n      targetWidth > this.targetWidth * 1.1 || targetWidth < this.targetWidth * 0.9))) {\n        //  console.log(targetWidth+ '<'+forceRefresh+'>' +this.targetWidth, this.element.parentElement);\n        let fctnt = this.formatedContent; // we compute the clamped content for the translatable-content component or directly for our element.\n        // console.log(\"SET \"+this._passNum, fctnt, '\\n', this._computedContent);\n        if (!this.args.isTranslatable) {\n          // Not needed as our component already gets this._computedContent as innerHTML\n          //this.element.innerHTML = fctnt;\n        } else {\n          if (this._translated) {\n            this.element.querySelector('.translatable-content').innerHTML = fctnt;\n          }\n        }\n        //We do a second pass some seconds after the init to be sure the content will fill the constraints the best possible :\n        if (this._passNum == 1 && !this.args.noSecondPass) {\n          if (this._poller) (0, _runloop.cancel)(this._poller);\n          if (this._passer) (0, _runloop.cancel)(this._passer);\n          this._passNum++;\n          //  this._passer = later(this, ()=>{this._calculateTargetWidth(true);}, 9000);\n          this._passer = (0, _runloop.later)(this, () => {\n            this._calculateTargetWidth(/*true*/); //apr23, 2024: forcing a recomputing here causes a weird bug in Ember on the communities page that we were unable to fix => this may be more a workaround than a fix an may create wrong truncating in some other pages...\n          }, 9000);\n          // console.log( '_calculateTargetWidth('+forceRefresh+') E 1', this.element.id, this.element);\n          this._calculating = false;\n          return this.targetWidth;\n        }\n      }\n      if (this._poller) (0, _runloop.cancel)(this._poller);\n      if (this._passer) (0, _runloop.cancel)(this._passer);\n      // console.log('later(', this, ', ', this._calculateTargetWidth, ', ', this._pollerTimer, ')');\n      this._poller = (0, _runloop.later)(this, this._calculateTargetWidth, this._pollerTimer);\n      //console.log( '_calculateTargetWidth('+forceRefresh+') E 2', this.element.id, this.element);\n      this._calculating = false;\n      return this.targetWidth;\n    }\n    _removeContainerContext() {\n      if (!this.containerContext) {\n        return;\n      }\n      this.containerContext.style.border = \"solid 1px green\";\n      // if(this.containerContext.parentElement && this.containerContext)try{this.containerContext.parentElement.removeChild(this.containerContext);}catch(e){}\n      delete this.containerContext;\n    }\n    _measureHTML(html) {\n      if (!this.containerContext) {\n        this.containerContext = document.createElement(this.element.tagName);\n        this.containerContext.className = this.element.className + ' renderer '; //+ this.element.parentElement.className;\n\n        this.containerContext.setAttribute('style', this.element.getAttribute('style') + this.element.parentElement.getAttribute('style'));\n\n        // \t\t//We don't want  to inherit that :\n        // \t\tthis.containerContext.style.padding = \"0\";\n        // \t\tthis.containerContext.style.margin = \"0\";\n\n        //const cstyle = window.getComputedStyle(this.element.parentElement);\n\n        //important for the renderer ! : must not have height limit\n        this.containerContext.style.height = 'unset';\n        this.containerContext.style.maxHeight = 'unset';\n        this.containerContext.style.display = 'block';\n        this.containerContext.style.fontSize = '1em';\n        this.containerContext.style.position = 'absolute';\n        this.containerContext.style.top = '-10000px'; //offscreen !\n        this.element.parentElement.appendChild(this.containerContext); //to get the right context we make the renderer a brother of this.element (watch out when this.element.parentElement is in flex display...)\n\n        this.containerContext.style.width = this.targetWidth + 'px';\n        if (this._debug) {\n          this.containerContext.style.opacity = \".4\";\n          this.containerContext.style.zIndex = 99999;\n          //don't put border or it'll change the dimensions !\n          // \t\t\tthis.containerContext.style.border = \"solid 1px darkmagenta\";\n          this.containerContext.style.backgroundColor = \"#fff\";\n          this.containerContext.style.top = this.element.parentElement.offsetTop + this.element.parentElement.offsetHeight + 20 + 'px';\n        }\n      }\n      this.containerContext.innerHTML = html;\n\n      //if(this._debug && this._debugAlertOnEachStage)alert('LA{oW'+this.containerContext.offsetWidth+', sW'+this.containerContext.scrollWidth+'/oH'+this.containerContext.offsetHeight+', sH'+this.containerContext.scrollHeight+'}:' + html);\n      return {\n        W: Math.ceil(this.containerContext.offsetWidth),\n        H: Math.ceil(this.containerContext.offsetHeight)\n      };\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"debug\", [_dec], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"intl\", [_dec2], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"targetWidth\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"element\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"isExpanded\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"ellipsisString\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"_translated\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"willDestroy\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"willDestroy\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toggleExpand\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleExpand\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"translatableOnTranslate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"translatableOnTranslate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"translatableOnTranslated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"translatableOnTranslated\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"translatableOnUntranslate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"translatableOnUntranslate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"translatableOnUntranslated\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"translatableOnUntranslated\"), _class.prototype), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"_contentToClamp\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"_computedContent\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"_calculateTargetWidth\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"_calculateTargetWidth\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ContentContainerComponent);\n});","define(\"zeppelin-architectes/components/ember-notify\", [\"exports\", \"ember-notify/components/ember-notify\"], function (_exports, _emberNotify) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"ember-notify/components/ember-notify\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = _emberNotify.default;\n});","define(\"zeppelin-architectes/components/ember-notify/message\", [\"exports\", \"ember-notify/components/ember-notify/message\"], function (_exports, _message) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"ember-notify/components/ember-notify/message\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = _message.default;\n});","define(\"zeppelin-architectes/components/footer/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _service, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <footer id=\"footer\" class=\"footer shown\" {{!--{{did-insert this.didInsert}}--}}>\n    <div class=\"footer__zeppelin\">\n      {{inline-svg \"svg/zeppelin-footer.svg\" class=\"zeppelin\"}}\n    </div>\n    <div class=\"footer__top\">\n      <div class=\"footer__company\">\n        <div class=\"footer__company_left\">\n            {{!--<img src=\"images/logo-zeppelin.png\" class=\"logo\" />--}}\n            {{!--{{inline-svg \"svg/logo-zeppelin-opt-1.svg\" class=\"logo\"}}--}}\n            {{inline-svg \"svg/logo-zeppelin-opt-1white.svg\" class=\"logo\"}}\n  \n          <ul class=\"legal\">\n            <li>\n              <a href=\"https://zeppelin-aup.com/contact\" class=\"anim faded underlined\">Contacter l'agence</a>\n            </li>\n            <li>\n              <a href=\"https://zeppelin-aup.com/mentions-legales\" class=\"anim faded underlined\">Mentions légales</a>\n            </li>\n          </ul>\n        </div>\n        <div class=\"footer__company_coords\">\n          25, rue Paul Chenavard<br>\n          69001 LYON<br>\n          tél.: <a href=\"tel:0478309941\">04 78 30 99 41</a>\n        </div>\n      </div>\n  \n  \n      <div class=\"footer__zeppelin-sub\">\n  \n        <div class=\"zeppelin-text\">\n          <div class=\"title \">Zeppelin,</div>\n          <div class=\"text\">\n            invention géniale en 1900, qui bouleverse les codes de l’aviation civile.<br>\n            Il traverse le ciel par son intemporalité de forme et d’usage.\n          </div>\n        </div>\n  \n        <ul>\n          <li>\n            <a href=\"https://zeppelin-aup.com/competence/architecture\" class=\"anim faded underlined\">Architecture</a>\n          </li>\n          <li class=\"li-separ\">|</li>\n          <li>\n            <a href=\"https://zeppelin-aup.com/competence/urbanisme\" class=\"anim faded underlined\">Urbanisme</a>\n          </li>\n          <li class=\"li-separ\">|</li>\n          <li>\n            <a href=\"https://zeppelin-aup.com/competence/paysage\" class=\"anim faded underlined\">Paysage</a>\n          </li>\n        </ul>\n  \n      </div>\n    </div>\n  \n    <div class=\"footer__bottom\">Copyright Zeppelin Architectes {{this.year}}</div>\n  </footer>\n  */\n  {\n    \"id\": \"mahSCKjK\",\n    \"block\": \"[[[10,\\\"footer\\\"],[14,1,\\\"footer\\\"],[14,0,\\\"footer shown\\\"],[12],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"footer__zeppelin\\\"],[12],[1,\\\"\\\\n    \\\"],[1,[28,[35,2],[\\\"svg/zeppelin-footer.svg\\\"],[[\\\"class\\\"],[\\\"zeppelin\\\"]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"footer__top\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"footer__company\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"footer__company_left\\\"],[12],[1,\\\"\\\\n\\\"],[1,\\\"          \\\"],[1,[28,[35,2],[\\\"svg/logo-zeppelin-opt-1white.svg\\\"],[[\\\"class\\\"],[\\\"logo\\\"]]]],[1,\\\"\\\\n\\\\n        \\\"],[10,\\\"ul\\\"],[14,0,\\\"legal\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n            \\\"],[10,3],[14,6,\\\"https://zeppelin-aup.com/contact\\\"],[14,0,\\\"anim faded underlined\\\"],[12],[1,\\\"Contacter l'agence\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n            \\\"],[10,3],[14,6,\\\"https://zeppelin-aup.com/mentions-legales\\\"],[14,0,\\\"anim faded underlined\\\"],[12],[1,\\\"Mentions légales\\\"],[13],[1,\\\"\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"footer__company_coords\\\"],[12],[1,\\\"\\\\n        25, rue Paul Chenavard\\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n        69001 LYON\\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n        tél.: \\\"],[10,3],[14,6,\\\"tel:0478309941\\\"],[12],[1,\\\"04 78 30 99 41\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n\\\\n    \\\"],[10,0],[14,0,\\\"footer__zeppelin-sub\\\"],[12],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"zeppelin-text\\\"],[12],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"title \\\"],[12],[1,\\\"Zeppelin,\\\"],[13],[1,\\\"\\\\n        \\\"],[10,0],[14,0,\\\"text\\\"],[12],[1,\\\"\\\\n          invention géniale en 1900, qui bouleverse les codes de l’aviation civile.\\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n          Il traverse le ciel par son intemporalité de forme et d’usage.\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,\\\"ul\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n          \\\"],[10,3],[14,6,\\\"https://zeppelin-aup.com/competence/architecture\\\"],[14,0,\\\"anim faded underlined\\\"],[12],[1,\\\"Architecture\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"li\\\"],[14,0,\\\"li-separ\\\"],[12],[1,\\\"|\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n          \\\"],[10,3],[14,6,\\\"https://zeppelin-aup.com/competence/urbanisme\\\"],[14,0,\\\"anim faded underlined\\\"],[12],[1,\\\"Urbanisme\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"li\\\"],[14,0,\\\"li-separ\\\"],[12],[1,\\\"|\\\"],[13],[1,\\\"\\\\n        \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n          \\\"],[10,3],[14,6,\\\"https://zeppelin-aup.com/competence/paysage\\\"],[14,0,\\\"anim faded underlined\\\"],[12],[1,\\\"Paysage\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"footer__bottom\\\"],[12],[1,\\\"Copyright Zeppelin Architectes \\\"],[1,[30,0,[\\\"year\\\"]]],[13],[1,\\\"\\\\n\\\"],[13]],[],false,[\\\"footer\\\",\\\"div\\\",\\\"inline-svg\\\",\\\"ul\\\",\\\"li\\\",\\\"a\\\",\\\"br\\\"]]\",\n    \"moduleName\": \"zeppelin-architectes/components/footer/index.hbs\",\n    \"isStrictMode\": false\n  });\n\n  // import { registerDestructor } from '@ember/destroyable';\n\n  class FooterComponent extends _component2.default {\n    get year() {\n      return new Date().getFullYear();\n    }\n    get liSepar() {\n      return '<div class=\"li-separ\">|</div>';\n    }\n  }\n  _exports.default = FooterComponent;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, FooterComponent);\n});","define(\"zeppelin-architectes/components/head-content\", [\"exports\", \"@ember/service\", \"@glimmer/component\", \"zeppelin-architectes/templates/head\", \"@ember/component\"], function (_exports, _service, _component, _head, _component2) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@glimmer/component\",0,\"zeppelin-architectes/templates/head\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let HeadContent = _exports.default = (_dec = (0, _service.inject)('head-data'), _class = class HeadContent extends _component.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"model\", _descriptor, this);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"model\", [_dec], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n  (0, _component2.setComponentTemplate)(_head.default, HeadContent);\n});","define(\"zeppelin-architectes/components/head-layout\", [\"exports\", \"ember-cli-head/components/head-layout\"], function (_exports, _headLayout) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _headLayout.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-cli-head/components/head-layout\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/components/header/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/service\", \"@ember/destroyable\", \"zeppelin-architectes/config/environment\", \"@ember/runloop\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _service, _destroyable, _environment, _runloop, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@ember/destroyable\",0,\"zeppelin-architectes/config/environment\",0,\"@ember/runloop\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <header id=\"topHeader\" class=\"top-header shown\" {{!--{{did-insert this.didInsert}}--}}>\n  {{!--   <img src=\"images/zeppelin_logo_2025-1.png\" style=\"height: 9rem;margin-bottom: -1px;\" /> --}}\n    <div class=\"top-header__bg\">\n      <div class=\"top-header__logo\">\n        {{inline-svg \"svg/zeppelin_logo-opt-2_2.svg\" class=\"logo\"}}\n      </div>\n      <div class=\"top-header__middle\">\n        <LinkTo @route=\"index\" class=\"menu-item anim faded\">Accueil</LinkTo>\n        <LinkTo @route=\"realisations\" class=\"menu-item anim faded\">Nos réalisations</LinkTo>\n        <LinkTo @route=\"equipe\" class=\"menu-item anim faded\">L'équipe</LinkTo>\n        <LinkTo @route=\"actualites\" class=\"menu-item anim faded\">L'actualité</LinkTo>\n        <LinkTo @route=\"contact\" class=\"menu-item contact\">\n          {{inline-svg \"svg/contact-opt.svg\" class=\"icon-contact\"}}\n          <div>Contact</div>\n        </LinkTo>\n      </div>\n    </div>\n  </header>\n  */\n  {\n    \"id\": \"evU1EEit\",\n    \"block\": \"[[[10,\\\"header\\\"],[14,1,\\\"topHeader\\\"],[14,0,\\\"top-header shown\\\"],[12],[1,\\\"\\\\n\\\"],[1,\\\"  \\\"],[10,0],[14,0,\\\"top-header__bg\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"top-header__logo\\\"],[12],[1,\\\"\\\\n      \\\"],[1,[28,[35,2],[\\\"svg/zeppelin_logo-opt-2_2.svg\\\"],[[\\\"class\\\"],[\\\"logo\\\"]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"top-header__middle\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,3],[[24,0,\\\"menu-item anim faded\\\"]],[[\\\"@route\\\"],[\\\"index\\\"]],[[\\\"default\\\"],[[[[1,\\\"Accueil\\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[8,[39,3],[[24,0,\\\"menu-item anim faded\\\"]],[[\\\"@route\\\"],[\\\"realisations\\\"]],[[\\\"default\\\"],[[[[1,\\\"Nos réalisations\\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[8,[39,3],[[24,0,\\\"menu-item anim faded\\\"]],[[\\\"@route\\\"],[\\\"equipe\\\"]],[[\\\"default\\\"],[[[[1,\\\"L'équipe\\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[8,[39,3],[[24,0,\\\"menu-item anim faded\\\"]],[[\\\"@route\\\"],[\\\"actualites\\\"]],[[\\\"default\\\"],[[[[1,\\\"L'actualité\\\"]],[]]]]],[1,\\\"\\\\n      \\\"],[8,[39,3],[[24,0,\\\"menu-item contact\\\"]],[[\\\"@route\\\"],[\\\"contact\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[1,[28,[35,2],[\\\"svg/contact-opt.svg\\\"],[[\\\"class\\\"],[\\\"icon-contact\\\"]]]],[1,\\\"\\\\n        \\\"],[10,0],[12],[1,\\\"Contact\\\"],[13],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[],false,[\\\"header\\\",\\\"div\\\",\\\"inline-svg\\\",\\\"link-to\\\"]]\",\n    \"moduleName\": \"zeppelin-architectes/components/header/index.hbs\",\n    \"isStrictMode\": false\n  });\n  let HeaderComponent = _exports.default = (_class = class HeaderComponent extends _component2.default {\n    // !! s''il faut lancer fastboot server : pas possible sur web cloud OVH !\n    // => s'attendre' à utiliser ember pour mock-ups puis à tout passer sur twig...\n\n    /*  @action\n    \tdidInsert(topHeaderDiv){*/\n    constructor() {\n      super(...arguments);\n      _initializerDefineProperty(this, \"device\", _descriptor, this);\n      if (typeof FastBoot == 'undefined')\n        // don't call it in fastboot, call it only in js-enabled navigator context\n        this.initAnim();\n    }\n    initAnim() {\n      if (_environment.default.topHeaderFixed) return;\n      document.addEventListener('scroll', this._onScrollHandler.bind(this));\n      (0, _runloop.later)(this, this._onScrollHandler, 500);\n    }\n    _onScrollHandler() {\n      if (_environment.default.topHeaderFixed) return;\n      const topHeaderDiv = document.getElementById('topHeader');\n      if (topHeaderDiv) {\n        const currentScrollPos = window.pageYOffset;\n        if (currentScrollPos) this._contractHeader(topHeaderDiv);else this._expandHeader(topHeaderDiv);\n      }\n    }\n    _expandHeader(topHeaderDiv) {\n      topHeaderDiv.querySelector('.logo').style.height = \"9rem\";\n    }\n    _contractHeader(topHeaderDiv) {\n      topHeaderDiv.querySelector('.logo').style.height = \"4rem\";\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"device\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"initAnim\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"initAnim\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, HeaderComponent);\n});","define(\"zeppelin-architectes/components/pagination/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/service\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/runloop\", \"@ember/object/observers\", \"@ember/template-factory\"], function (_exports, _component, _component2, _service, _object, _tracking, _runloop, _observers, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/service\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/runloop\",0,\"@ember/object/observers\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"pagination-component\" {{did-insert this.didInsert}}>\n  {{#if this.showPagination}}\n  \t<Pagination::PageNumbers class=\"pagination-component\"\n  \t\t\t\t @pagedContent={{@pagedContent}}\n  \t\t\t\t @currentPage={{this.currentPage}}\n  \t\t\t\t @totalPages={{this.totalPages}}\n  \t\t\t\t @numPagesToShow={{this.numPagesToShow}}\n  \t\t\t\t @gotoPage={{this.gotoPage}}\n  \t\t\t\t @pageQueryparamName={{@pageQueryparamName}}\n  \t/>\n  {{/if}}\n  {{!--\n  {{this.currentPage}}/{{this.totalPages}}<br>\n  {{@pagedContent.currentPage}}/{{@pagedContent.totalPages}} - {{@pagedContent.totalPages}}<br>\n  {{@pagedContent}}\n  --}}\n  </div>\n  \n  */\n  {\n    \"id\": \"y+FxglJS\",\n    \"block\": \"[[[11,0],[24,0,\\\"pagination-component\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showPagination\\\"]],[[[1,\\\"\\\\t\\\"],[8,[39,3],[[24,0,\\\"pagination-component\\\"]],[[\\\"@pagedContent\\\",\\\"@currentPage\\\",\\\"@totalPages\\\",\\\"@numPagesToShow\\\",\\\"@gotoPage\\\",\\\"@pageQueryparamName\\\"],[[30,1],[30,0,[\\\"currentPage\\\"]],[30,0,[\\\"totalPages\\\"]],[30,0,[\\\"numPagesToShow\\\"]],[30,0,[\\\"gotoPage\\\"]],[30,2]]],null],[1,\\\"\\\\n\\\"]],[]],null],[13],[1,\\\"\\\\n\\\"]],[\\\"@pagedContent\\\",\\\"@pageQueryparamName\\\"],false,[\\\"div\\\",\\\"did-insert\\\",\\\"if\\\",\\\"pagination/page-numbers\\\"]]\",\n    \"moduleName\": \"zeppelin-architectes/components/pagination/index.hbs\",\n    \"isStrictMode\": false\n  });\n\n  // import config from '../../config/environment';\n  let Pagination = _exports.default = (_class = class Pagination extends _component2.default {\n    // @computed('args[]' ,'args.pagedContent',  'args.pagedContent.meta', 'args.pagedContent.meta[]', 'args.pagedContent.page', 'args.pagedContent.version')\n    get currentPage() {\n      if (false) {\n        this.debug.log('>> pagination currentPage()', this.args.model[this.args.paginatedPropertyName], this.args.model[this.args.paginatedPropertyName + '_pagination'], this.args.model[this.args.paginatedPropertyName + '_pagination']?.currentPage, this.args.model[this.args.paginatedPropertyName + '_pagination']?.version, this.args.model, this.args.paginatedPropertyName);\n        return this.args.model[this.args.paginatedPropertyName + '_pagination']?.currentPage ?? 1;\n      }\n      const foo = this.args.pagedContent?.version;\n      // this.debug.log('>> pagination currentPage()', this.args.currentPage, this.args.pagedContent?.currentPage, this.args.pagedContent?._currentPage, this.args.pagedContent?.version, this.args.pagedContent?.meta ? this.args.pagedContent?.meta['x-current-page'] : null, '\\n=>' + parseInt( this.args.currentPage ?? this.args.pagedContent?.currentPage ?? (this.args.pagedContent?.meta && this.args.pagedContent?.meta['x-current-page']) ?? 1 ), foo);\n\n      // const foo = this.args.pagedContent?.version;\n      return parseInt(this.args.currentPage ?? this.args.pagedContent?._currentPage ?? (this.args.pagedContent?.meta && this.args.pagedContent?.meta['x-current-page']) ?? 1);\n    }\n    get totalPages() {\n      // this.debug.log('pagination totalPages()', '\\npagedContent=', this.args.pagedContent, '\\nBERequest=', this.args.BERequest, '\\n',  this.args.totalPages, this.args.pagedContent?.totalPages, this.args.pagedContent?.meta ? this.args.pagedContent?.meta['x-total-pages'] : null, '\\n=>' + parseInt( this.args.totalPages ?? this.args.pagedContent?.totalPages ?? (this.args.pagedContent?.meta && this.args.pagedContent?.meta['x-total-pages']) ?? 1 ) );\n      return parseInt(this.args.totalPages ?? this.args.pagedContent?.totalPages ?? (this.args.pagedContent?.meta && this.args.pagedContent?.meta['x-total-pages']) ?? 1);\n    }\n    /*\n    @action _watchRequestUpdate(){\n    \tlater(this, this._watchRequestUpdate, 2000);\n    \t\tconsole.log(this.args.pagedContent.meta.xCurrentPage, ' ?? ', this.currentPage)\n    \tif( this.args.pagedContent.meta.xCurrentPage !=this.currentPage )\n    \t\tconsole.log(this.args.pagedContent.meta.xCurrentPage, ' != ', this.currentPage);\n    }*/\n\n    didInsert() {\n      // alert('cp:'+this.currentPage);\n      /**/\n      // console.log('pagination constructor', this.args.pagedContent, this.args.pagedContent?.meta, this.args.pagedContent?.meta?.xCurrentPage);\n      /*\n      \t\taddObserver(this, '@pagedContent.meta.xCurrentPage',()=>{\n      \t\t// addObserver(this, 'args.pagedContent.[meta.x-current-page]',()=>{\n      \t\t\t\talert('yup1 ' + this.args.pagedContent?.meta['x-current-page']);\n      \t\t});\n      \t\tlater(this, this._watchRequestUpdate, 2000);\n      */\n      if (this.currentPage > this.totalPages) this.gotoPage(this.totalPages);\n    }\n    constructor() {\n      super(...arguments);\n      /*\n      let defaultNumPagesToShow = 10;\n      if (window.innerWidth <= config.breakpoints.phone) {\n      \tdefaultNumPagesToShow = 5;\n      }\n      */\n      _initializerDefineProperty(this, \"store\", _descriptor, this);\n      _initializerDefineProperty(this, \"debug\", _descriptor2, this);\n      _initializerDefineProperty(this, \"device\", _descriptor3, this);\n      _initializerDefineProperty(this, \"numPagesToShow\", _descriptor4, this);\n      let defaultNumPagesToShow = this.device.isPhone ? 5 : 10,\n        pnum;\n      // default numPagesToShow is 10\n      this.numPagesToShow = this.args.numPagesToShow ?? defaultNumPagesToShow;\n      /* Seems like we don't need this and it may conflict or reload withe route/constructor handling page changing :\n      if( this.args.pagedContent?.meta?.xCurrentPage )\n      \tpnum = this.args.pagedContent?.meta?.xCurrentPage;\n      if( document.location.hash.includes('page=') )\n      \tpnum = document.location.hash.split(/page=([0-9])/g)[1];\n      if(!isNaN(pnum) && pnum != 1){\n      \t// this.args.pagedContent.currentPage = pnum;\n      \tlater(this, () => this.gotoPage(pnum), 200);\n      }\n      */\n    }\n    get showPagination() {\n      // console.log('pagination showPagination()', this.args.pagedContent, this.args.pagedContent.meta, this.totalPages, this.args.dontHideIfOnePage, this.currentPage);\n      const foo = this.args.pagedContent?.version;\n      if (!this.args.pagedContent && !this.args.BERequest && !this.args.totalPages) {\n        this.debug.error('component Pagination: no @pagedContent, @BERequest or @totalPages provided - we hide the component.'); // may be an error while passing the argument\n        return false;\n      }\n      if (this.args.dontHideIfOnePage) return true; // watchout: may seem buggy when not shown\n      if (\n      // this.args.pagedContent.totalPages > 1 || (this.args.pagedContent.meta && this.args.pagedContent.meta['x-total-pages'])\n      this.totalPages > 1) {\n        return true;\n      }\n      return false;\n    }\n    /*\n    \t@action\n    \tonPageChange() {\n    \t\tif (this.args.onPageChange)\n    \t\t\tthis.args.onPageChange();\n    \t\treturn true;\n    \t}*/\n\n    async gotoPage(pageNum) {\n      this.debug.log('pagination gotoPage(', pageNum, ')', this.args.BERequest);\n      if (this.args.BERequest) {\n        // A BERequest for which to set the pagination\n        // By not passing one the pagination component will do nothing but to set the query param page to pageNum by the a href in page-number.hbs\n        this.args.BERequest.setPagination(pageNum);\n        await this.store.requester(this.args.BERequest).then(async answer => {\n          if (this.args.onPageRequestAnswered) await this.args.onPageRequestAnswered(pageNum, answer);\n        });\n        // console.log('BERequest!', this.args.BERequest);\n        if (this.args.onPageChange) await this.args.onPageChange(pageNum);\n\n        // this.debug.log('pagination currentPage()', this.args.currentPage, this.args.pagedContent?.currentPage, this.args.pagedContent?.meta ? this.args.pagedContent?.meta['x-current-page'] : null, '\\n=>' + parseInt( this.args.currentPage ?? this.args.pagedContent?.currentPage ?? (this.args.pagedContent?.meta && this.args.pagedContent?.meta['x-current-page']) ?? 1 ));\n        // const p = parseInt( this.args.currentPage ?? this.args.pagedContent?.currentPage ?? (this.args.pagedContent?.meta && this.args.pagedContent?.meta['x-current-page']) ?? 1 );\n\n        // alert('currentPage:' + this.currentPage + '/'+p )\n        return true; // don't apply ?page=X to queryParams !\n      }\n      if (this.args.onPageChange) return this.args.onPageChange(pageNum);\n      console.log('gotoPage END currentPage:' + this.currentPage);\n      return false;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"store\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"debug\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"device\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"numPagesToShow\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"gotoPage\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"gotoPage\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, Pagination);\n});","define(\"zeppelin-architectes/components/pagination/page-numbers\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/service\", \"@ember/object\", \"@ember/runloop\", \"@ember/object/observers\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _service, _object, _runloop, _observers, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"@ember/object/observers\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"pagination-centered\" {{did-insert this.didInsert}} {{did-update this.pagedcontentUpdate @pagedContent}}>\n    <ul class=\"pagination\">\n      {{#if this.canStepBackward}}\n        <li class=\"arrow prev enabled-arrow\">\n          <a href=\"#{{this.pageParamName}}={{this.prevPage}}\" {{on \"click\" this.gotoPrevPage}}>&laquo;</a>\n        </li>\n      {{else}}\n        <li class=\"arrow prev disabled\">\n          <a href=\"#\">&laquo;</a>\n        </li>\n      {{/if}}\n  \n      {{#each this.pageItems as |item|}}\n        {{#if item.dots}}\n          <li class=\"dots disabled\">\n            <span>...</span>\n          </li>\n        {{/if}}\n        {{#if item.current}}\n          <li class=\"active page-number\">\n            <a>{{item.page}}</a>\n          </li>\n        {{else}}\n          <li class=\"page-number\">\n            <a href=\"#{{this.pageParamName}}={{item.page}}\" {{on \"click\" (fn this.pageClicked item.page)}}>{{item.page}}</a>\n          </li>\n        {{/if}}\n      {{/each}}\n  \n      {{#if this.canStepForward}}\n        <li class=\"arrow next enabled-arrow\">\n          <a href=\"#{{this.pageParamName}}={{this.nextPage}}\" {{on \"click\" this.gotoNextPage}}>&raquo;</a>\n        </li>\n      {{else}}\n        <li class=\"arrow next disabled\">\n          <a href=\"#\">&raquo;</a>\n        </li>\n      {{/if}}\n    </ul>\n  </div>\n  \n  */\n  {\n    \"id\": \"3eB7aX2Y\",\n    \"block\": \"[[[11,0],[24,0,\\\"pagination-centered\\\"],[4,[38,1],[[30,0,[\\\"didInsert\\\"]]],null],[4,[38,2],[[30,0,[\\\"pagedcontentUpdate\\\"]],[30,1]],null],[12],[1,\\\"\\\\n  \\\"],[10,\\\"ul\\\"],[14,0,\\\"pagination\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"canStepBackward\\\"]],[[[1,\\\"      \\\"],[10,\\\"li\\\"],[14,0,\\\"arrow prev enabled-arrow\\\"],[12],[1,\\\"\\\\n        \\\"],[11,3],[16,6,[29,[\\\"#\\\",[30,0,[\\\"pageParamName\\\"]],\\\"=\\\",[30,0,[\\\"prevPage\\\"]]]]],[4,[38,7],[\\\"click\\\",[30,0,[\\\"gotoPrevPage\\\"]]],null],[12],[1,\\\"«\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[10,\\\"li\\\"],[14,0,\\\"arrow prev disabled\\\"],[12],[1,\\\"\\\\n        \\\"],[10,3],[14,6,\\\"#\\\"],[12],[1,\\\"«\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n\\\"],[42,[28,[37,9],[[28,[37,9],[[30,0,[\\\"pageItems\\\"]]],null]],null],null,[[[41,[30,2,[\\\"dots\\\"]],[[[1,\\\"        \\\"],[10,\\\"li\\\"],[14,0,\\\"dots disabled\\\"],[12],[1,\\\"\\\\n          \\\"],[10,1],[12],[1,\\\"...\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,2,[\\\"current\\\"]],[[[1,\\\"        \\\"],[10,\\\"li\\\"],[14,0,\\\"active page-number\\\"],[12],[1,\\\"\\\\n          \\\"],[10,3],[12],[1,[30,2,[\\\"page\\\"]]],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,\\\"li\\\"],[14,0,\\\"page-number\\\"],[12],[1,\\\"\\\\n          \\\"],[11,3],[16,6,[29,[\\\"#\\\",[30,0,[\\\"pageParamName\\\"]],\\\"=\\\",[30,2,[\\\"page\\\"]]]]],[4,[38,7],[\\\"click\\\",[28,[37,11],[[30,0,[\\\"pageClicked\\\"]],[30,2,[\\\"page\\\"]]],null]],null],[12],[1,[30,2,[\\\"page\\\"]]],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[2]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"canStepForward\\\"]],[[[1,\\\"      \\\"],[10,\\\"li\\\"],[14,0,\\\"arrow next enabled-arrow\\\"],[12],[1,\\\"\\\\n        \\\"],[11,3],[16,6,[29,[\\\"#\\\",[30,0,[\\\"pageParamName\\\"]],\\\"=\\\",[30,0,[\\\"nextPage\\\"]]]]],[4,[38,7],[\\\"click\\\",[30,0,[\\\"gotoNextPage\\\"]]],null],[12],[1,\\\"»\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"      \\\"],[10,\\\"li\\\"],[14,0,\\\"arrow next disabled\\\"],[12],[1,\\\"\\\\n        \\\"],[10,3],[14,6,\\\"#\\\"],[12],[1,\\\"»\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@pagedContent\\\",\\\"item\\\"],false,[\\\"div\\\",\\\"did-insert\\\",\\\"did-update\\\",\\\"ul\\\",\\\"if\\\",\\\"li\\\",\\\"a\\\",\\\"on\\\",\\\"each\\\",\\\"-track-array\\\",\\\"span\\\",\\\"fn\\\"]]\",\n    \"moduleName\": \"zeppelin-architectes/components/pagination/page-numbers.hbs\",\n    \"isStrictMode\": false\n  });\n  let PageNumbers = _exports.default = (_class = class PageNumbers extends _component2.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"pageItems\", _descriptor, this);\n      _defineProperty(this, \"backMax\", 4);\n      _defineProperty(this, \"nextMax\", 4);\n    }\n    REMconstructor() {\n      // super(...arguments);\n      alert('init');\n      // console.log('constructor', this.args.pagedContent)\n      (0, _observers.addObserver)(\"args.pagedContent.meta['x-current-page']\", () => {\n        alert('yup1 ' + this.args.pagedContent?.meta['x-current-page']);\n      });\n      this.addObserver(\"args.pagedContent.meta['x-current-page']\", () => {\n        alert('yup2 ' + this.args.pagedContent?.meta['x-current-page']);\n      });\n    }\n    get currentPage() {\n      return parseInt(this?.args?.currentPage ?? this?.args?.pagedContent?.currentPage ?? this?.args?.pagedContent?.meta['x-current-page'] ?? 1);\n    }\n    get totalPages() {\n      // console.log('pagination totalPages()', this.args.totalPages, this.args.pagedContent?.totalPages, this.args.pagedContent?.meta['x-total-pages']);\n      return parseInt(this?.args?.totalPages ?? this?.args?.pagedContent?.totalPages ?? this?.args?.pagedContent?.meta['x-total-pages'] ?? 1);\n    }\n    get pageParamName() {\n      return this.args.pageQueryparamName ?? \"page\";\n    }\n    get nextPage() {\n      return this.currentPage + 1;\n    }\n    get lastPage() {\n      return this.totalPages;\n    }\n\n    // \t@computed(\"currentPage\")\n    get canStepBackward() {\n      return Number(this.currentPage) > 1;\n    }\n    get canStepForward() {\n      return Number(this.currentPage) < Number(this.lastPage);\n    }\n    didInsert(container) {\n      this._listPages();\n      (0, _observers.addObserver)(this, 'args.numPagesToShow', this._listPages);\n      (0, _observers.addObserver)(this, 'currentPage', this._listPages);\n      (0, _observers.addObserver)(this, 'totalPages', this._listPages);\n      (0, _observers.addObserver)(this, 'args.pagedContent._currentPage', this._listPages);\n      (0, _observers.addObserver)(this, 'args.pagedContent._totalPages', this._listPages);\n    }\n    pagedcontentUpdate(container) {\n      // not needed so far\n      console.log('pagedcontentUpdate', this.args.numPagesToShow, 'totalPages:', this.totalPages, 'currentPage:', this.currentPage, 'args.pagedContent:', this.args.pagedContent);\n    }\n    _listPages() {\n      // console.log('pagination compo A numPagesToShow:', this.args.numPagesToShow, 'totalPages:', this.totalPages, 'currentPage:', this.currentPage,'args.pagedContent:', this.args.pagedContent);\n      if (this.totalPages <= this.args.numPagesToShow) {\n        this.backMax = this.nextMax = 0;\n        for (let p = 1; p <= this.args.numPagesToShow && p <= this.totalPages; p++) if (p < this.currentPage) this.backMax++;else if (p > this.currentPage) this.nextMax++;\n        // console.log('pagination compo A', this.args.numPagesToShow, this.totalPages, this.args.pagedContent, this.currentPage, '\\n=>', this.backMax, '<', this.nextMax);\n      } else {\n        // console.log('pagination compo B', this.args.numPagesToShow, this.totalPages, this.args.pagedContent);\n        let target = Math.floor(this.args.numPagesToShow / 2);\n        this.backMax = this.nextMax = 0;\n        for (let p = this.currentPage + target; this.backMax + this.nextMax < this.args.numPagesToShow && p > 0; p--) if (p < this.currentPage) this.backMax++;else if (p > this.currentPage) this.nextMax++;\n        // console.log('pagination compo B', this.args.numPagesToShow, this.totalPages, this.currentPage, this.args.pagedContent.currentPage, this.args.pagedContent, '\\n=>', this.backMax, '<', this.nextMax);\n      }\n      /**/\n      this.pageItems = [];\n      let c = this.currentPage - this.backMax,\n        nexts = this.currentPage + this.nextMax;\n      if (c < 1) c = 1;\n      if (nexts > this.totalPages) nexts = this.totalPages;\n      /** /\n      console.log('pagination compo C numPagesToShow:', this.args.numPagesToShow,\n      '\\ntotalPages:', this.totalPages,\n      '\\ncurrentPage:', this.currentPage,\n      '\\nbackMax:', this.backMax,\n      '\\nnextMax:', this.nextMax,\n      '\\nc:', c,\n      '\\nnexts:', nexts\n      );\n      /**/\n\n      for (; c <= nexts; c++) this.pageItems.push({\n        page: c,\n        current: c == this.currentPage,\n        dots: false\n      });\n    }\n    gotoPrevPage() {\n      this.pageClicked(this.currentPage - 1);\n    }\n    gotoNextPage() {\n      this.pageClicked(this.currentPage + 1);\n    }\n    pageClicked(pageNum, evt) {\n      // console.log('pageClicked(', pageNum, ', ', evt ,')');\n      if (evt) evt.preventDefault();\n      // this._currentPage = pageNum;\n      const stopEvent = this.args.gotoPage(pageNum);\n      if (stopEvent && evt) {\n        evt.stopImmediatePropagation();\n        evt.stopPropagation();\n      }\n      (0, _runloop.later)(this, () => {\n        if (this) this._listPages();\n      }, 1000);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"pageItems\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"didInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"pagedcontentUpdate\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"pagedcontentUpdate\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"gotoPrevPage\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"gotoPrevPage\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"gotoNextPage\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"gotoNextPage\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"pageClicked\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"pageClicked\"), _class.prototype), _class);\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, PageNumbers);\n});","define(\"zeppelin-architectes/components/projet-file/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/service\", \"@ember/object\", \"@ember/runloop\", \"@ember/object/observers\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _service, _object, _runloop, _observers, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"@ember/object/observers\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n  const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"projet-file__container\">\n  \n    <div class=\"projet-file__titre\">\n      <h2 class=\"heading-5\">\n        {{html-safe @projet.nom}}\n      </h2>\n      <p>\n        {{html-safe @projet.lieu}}\n      </p>\n    </div>\n  \n    <div class=\"projet-file__image-main\">\n  {{!--     <img src=\"/{{get @projet.images 0}}\" /> --}}\n      <img src=\"/{{@projet.cover}}\" />\n    </div>\n    <div class=\"projet-file__text\">\n      <p>\n        {{html-safe (get @projet.texts 0)}}\n      </p>\n      <p>\n        {{html-safe (get @projet.texts 1)}}\n      </p>\n      <p>\n        <b>Compétences&nbsp;:</b>\n        {{html-safe @projet.mention}}\n      </p>\n    </div>\n  {{#if @projet.download}}\n    <div class=\"projet-file__download\">\n      <a href=\"/{{@projet.download}}\" target=\"_blank\" class=\"anim faded underlined\">\n        Téléchargez la fiche\n      </a>\n    </div>\n  {{/if}}\n  {{!--\n    <div class=\"projet-file__image-alt\">\n  {{#each this.altImages as |image|}}\n      <img src=\"/{{image}}\" />\n  {{/each}}\n    </div>\n  --}}\n  {{#if @projet.images}}\n    <div class=\"projet-file__image-alt\">\n  {{#each this.altImages as |image|}}\n      <img src=\"/{{image}}\" />\n  {{/each}}\n    </div>\n  {{/if}}\n  \n    <div class=\"projet-file__contents\">\n  {{#each @projet.contents as |content|}}\n      <div class=\"projet-file__contents-row {{get content 0}}_{{get content 1}}\">\n  {{!--   {{#if (eq (get content 1) 'col_3')}} --}}\n      {{#each (get content 2) as |entry idx|}}\n        {{#if (eq (get content 0) 'image')}}\n          <img src=\"/{{entry}}\" class=\"projet-file__contents-row-img {{if (eq (get (get content 2) 'length') 1) 'single'}}\" />\n        {{else}}\n          <div class=\"col col{{idx}}\">\n            <h3 class=\"heading-4\">{{entry.title}}</h3>\n            <h4 class=\"heading-5\">{{entry.subtitle}}</h4>\n            {{#if entry.text}}\n            <div class=\"text\">{{entry.text}}</div>\n            {{/if}}\n            {{#if entry.list}}\n            <ul class=\"list\">\n              {{#each entry.list as |line|}}\n              <li>{{line}}</li>\n              {{/each}}\n            </ul>\n            {{/if}}\n          </div>\n        {{/if}}\n      {{/each}}\n  {{!--   {{/if}} --}}\n      </div>\n  {{/each}}\n    </div>\n  </div>\n  */\n  {\n    \"id\": \"aGPUe24E\",\n    \"block\": \"[[[10,0],[14,0,\\\"projet-file__container\\\"],[12],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"projet-file__titre\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h2\\\"],[14,0,\\\"heading-5\\\"],[12],[1,\\\"\\\\n      \\\"],[1,[28,[35,2],[[30,1,[\\\"nom\\\"]]],null]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,2],[12],[1,\\\"\\\\n      \\\"],[1,[28,[35,2],[[30,1,[\\\"lieu\\\"]]],null]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"projet-file__image-main\\\"],[12],[1,\\\"\\\\n\\\"],[1,\\\"    \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[29,[\\\"/\\\",[30,1,[\\\"cover\\\"]]]]],[12],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"projet-file__text\\\"],[12],[1,\\\"\\\\n    \\\"],[10,2],[12],[1,\\\"\\\\n      \\\"],[1,[28,[35,2],[[28,[37,5],[[30,1,[\\\"texts\\\"]],0],null]],null]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,2],[12],[1,\\\"\\\\n      \\\"],[1,[28,[35,2],[[28,[37,5],[[30,1,[\\\"texts\\\"]],1],null]],null]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,2],[12],[1,\\\"\\\\n      \\\"],[10,\\\"b\\\"],[12],[1,\\\"Compétences :\\\"],[13],[1,\\\"\\\\n      \\\"],[1,[28,[35,2],[[30,1,[\\\"mention\\\"]]],null]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"download\\\"]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"projet-file__download\\\"],[12],[1,\\\"\\\\n    \\\"],[10,3],[15,6,[29,[\\\"/\\\",[30,1,[\\\"download\\\"]]]]],[14,\\\"target\\\",\\\"_blank\\\"],[14,0,\\\"anim faded underlined\\\"],[12],[1,\\\"\\\\n      Téléchargez la fiche\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,1,[\\\"images\\\"]],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"projet-file__image-alt\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,10],[[28,[37,10],[[30,0,[\\\"altImages\\\"]]],null]],null],null,[[[1,\\\"    \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[29,[\\\"/\\\",[30,2]]]],[12],[13],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"projet-file__contents\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,10],[[28,[37,10],[[30,1,[\\\"contents\\\"]]],null]],null],null,[[[1,\\\"    \\\"],[10,0],[15,0,[29,[\\\"projet-file__contents-row \\\",[28,[37,5],[[30,3],0],null],\\\"_\\\",[28,[37,5],[[30,3],1],null]]]],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,10],[[28,[37,10],[[28,[37,5],[[30,3],2],null]],null]],null],null,[[[41,[28,[37,11],[[28,[37,5],[[30,3],0],null],\\\"image\\\"],null],[[[1,\\\"        \\\"],[10,\\\"img\\\"],[15,\\\"src\\\",[29,[\\\"/\\\",[30,4]]]],[15,0,[29,[\\\"projet-file__contents-row-img \\\",[52,[28,[37,11],[[28,[37,5],[[28,[37,5],[[30,3],2],null],\\\"length\\\"],null],1],null],\\\"single\\\"]]]],[12],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\"        \\\"],[10,0],[15,0,[29,[\\\"col col\\\",[30,5]]]],[12],[1,\\\"\\\\n          \\\"],[10,\\\"h3\\\"],[14,0,\\\"heading-4\\\"],[12],[1,[30,4,[\\\"title\\\"]]],[13],[1,\\\"\\\\n          \\\"],[10,\\\"h4\\\"],[14,0,\\\"heading-5\\\"],[12],[1,[30,4,[\\\"subtitle\\\"]]],[13],[1,\\\"\\\\n\\\"],[41,[30,4,[\\\"text\\\"]],[[[1,\\\"          \\\"],[10,0],[14,0,\\\"text\\\"],[12],[1,[30,4,[\\\"text\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,4,[\\\"list\\\"]],[[[1,\\\"          \\\"],[10,\\\"ul\\\"],[14,0,\\\"list\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,10],[[28,[37,10],[[30,4,[\\\"list\\\"]]],null]],null],null,[[[1,\\\"            \\\"],[10,\\\"li\\\"],[12],[1,[30,6]],[13],[1,\\\"\\\\n\\\"]],[6]],null],[1,\\\"          \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"        \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[4,5]],null],[1,\\\"    \\\"],[13],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"  \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"@projet\\\",\\\"image\\\",\\\"content\\\",\\\"entry\\\",\\\"idx\\\",\\\"line\\\"],false,[\\\"div\\\",\\\"h2\\\",\\\"html-safe\\\",\\\"p\\\",\\\"img\\\",\\\"get\\\",\\\"b\\\",\\\"if\\\",\\\"a\\\",\\\"each\\\",\\\"-track-array\\\",\\\"eq\\\",\\\"h3\\\",\\\"h4\\\",\\\"ul\\\",\\\"li\\\"]]\",\n    \"moduleName\": \"zeppelin-architectes/components/projet-file/index.hbs\",\n    \"isStrictMode\": false\n  });\n  class ProjetFileComponent extends _component2.default {\n    get altImages() {\n      return this.args.projet.images.slice(1);\n    }\n  }\n  _exports.default = ProjetFileComponent;\n  (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ProjetFileComponent);\n});","define(\"zeppelin-architectes/controllers/application\", [\"exports\", \"@ember/service\", \"@ember/controller\", \"@ember/array\", \"@ember/object\"], function (_exports, _service, _controller, _array, _object) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@ember/controller\",0,\"@ember/array\",0,\"@ember/object\"eaimeta@70e063a35619d71f\n  // import config from '../config/environment';\n\n  class ApplicationController extends _controller.default {}\n  _exports.default = ApplicationController;\n});","define(\"zeppelin-architectes/controllers/index\", [\"exports\", \"@ember/controller\", \"@ember/service\"], function (_exports, _controller, _service) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/controller\",0,\"@ember/service\"eaimeta@70e063a35619d71f\n  // import { A } from '@ember/array';\n  // import { action } from '@ember/object';\n  // import { tracked } from '@glimmer/tracking';\n  // import config from '../config/environment';\n\n  class IndexController extends _controller.default {}\n  _exports.default = IndexController;\n});","define(\"zeppelin-architectes/controllers/realisations\", [\"exports\", \"@ember/controller\", \"@ember/service\", \"@ember/object\", \"@glimmer/tracking\"], function (_exports, _controller, _service, _object, _tracking) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/controller\",0,\"@ember/service\",0,\"@ember/object\",0,\"@glimmer/tracking\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  // import { A } from '@ember/array';\n  // import config from '../config/environment';\n  let RealisationController = _exports.default = (_class = class RealisationController extends _controller.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"device\", _descriptor, this);\n    }\n    openRealisation(label) {\n      this.device.scrollToTop(false); // optional if no other scroll is set through the device service\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"device\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"openRealisation\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"openRealisation\"), _class.prototype), _class);\n});","define(\"zeppelin-architectes/controllers/realisations/architecture/projet\", [\"exports\", \"@ember/controller\", \"@ember/service\"], function (_exports, _controller, _service) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/controller\",0,\"@ember/service\"eaimeta@70e063a35619d71f\n  // import { A } from '@ember/array';\n  // import { action } from '@ember/object';\n  // import { tracked } from '@glimmer/tracking';\n  // import config from '../config/environment';\n\n  class RealisationsArchitectureProjetController extends _controller.default {}\n  _exports.default = RealisationsArchitectureProjetController;\n});","define(\"zeppelin-architectes/controllers/realisations/index\", [\"exports\", \"@ember/controller\", \"@ember/service\"], function (_exports, _controller, _service) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/controller\",0,\"@ember/service\"eaimeta@70e063a35619d71f\n  // import { A } from '@ember/array';\n  // import { action } from '@ember/object';\n  // import { tracked } from '@glimmer/tracking';\n  // import config from '../config/environment';\n\n  class IndexController extends _controller.default {}\n  _exports.default = IndexController;\n});","define(\"zeppelin-architectes/data-adapter\", [\"exports\", \"@ember-data/debug/data-adapter\"], function (_exports, _dataAdapter) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _dataAdapter.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"@ember-data/debug/data-adapter\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/deprecation-workflow\", [\"ember-cli-deprecation-workflow\"], function (_emberCliDeprecationWorkflow) {\n  \"use strict\";\n\n  0; //eaimeta@70e063a35619d71f0,\"ember-cli-deprecation-workflow\"eaimeta@70e063a35619d71f\n  /**\n   * Docs: https://github.com/ember-cli/ember-cli-deprecation-workflow\n   */\n  (0, _emberCliDeprecationWorkflow.default)({\n    /**\n      false by default, but if a developer / team wants to be more aggressive about being proactive with\n      handling their deprecations, this should be set to \"true\"\n    */\n    throwOnUnhandled: false,\n    workflow: [\n      /* ... handlers ... */\n      /* to generate this list, run your app for a while (or run the test suite),\n       * and then run in the browser console:\n       *\n       *    deprecationWorkflow.flushDeprecations()\n       *\n       * And copy the handlers here\n       */\n      /* example: */\n      /* { handler: 'silence', matchId: 'template-action' }, */\n    ]\n  });\n});","define(\"zeppelin-architectes/helpers/and\", [\"exports\", \"ember-truth-helpers/helpers/and\"], function (_exports, _and) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _and.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-truth-helpers/helpers/and\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/app-version\", [\"exports\", \"@ember/component/helper\", \"zeppelin-architectes/config/environment\", \"ember-cli-app-version/utils/regexp\"], function (_exports, _helper, _environment, _regexp) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.appVersion = appVersion;\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"zeppelin-architectes/config/environment\",0,\"ember-cli-app-version/utils/regexp\"eaimeta@70e063a35619d71f\n  function appVersion(_, hash = {}) {\n    const version = _environment.default.APP.version;\n    // e.g. 1.0.0-alpha.1+4jds75hf\n\n    // Allow use of 'hideSha' and 'hideVersion' For backwards compatibility\n    let versionOnly = hash.versionOnly || hash.hideSha;\n    let shaOnly = hash.shaOnly || hash.hideVersion;\n    let match = null;\n    if (versionOnly) {\n      if (hash.showExtended) {\n        match = version.match(_regexp.versionExtendedRegExp); // 1.0.0-alpha.1\n      }\n      // Fallback to just version\n      if (!match) {\n        match = version.match(_regexp.versionRegExp); // 1.0.0\n      }\n    }\n    if (shaOnly) {\n      match = version.match(_regexp.shaRegExp); // 4jds75hf\n    }\n    return match ? match[0] : version;\n  }\n  var _default = _exports.default = (0, _helper.helper)(appVersion);\n});","define(\"zeppelin-architectes/helpers/break-lines\", [\"exports\", \"@ember/template\", \"@ember/component/helper\"], function (_exports, _template, _helper) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.breakLines = breakLines;\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/template\",0,\"@ember/component/helper\"eaimeta@70e063a35619d71f\n  /**\n   * Converts line-breaks to HTML <br> elements in a string.\n   *\n   * @param params A string containing '\\n\\r' line-breaks\n   * @returns A string containing '<br>' line-breaks\n   */\n  function breakLines(content) {\n    if (content.toString) content = content.toString();\n    if (typeof content == 'string' && content) {\n      content = content.replace(/\\n\\r?/g, '<br>');\n      return (0, _template.htmlSafe)(content);\n    }\n    return '';\n  }\n  var _default = _exports.default = _helper.default.helper(breakLines);\n});","define(\"zeppelin-architectes/helpers/camelize\", [\"exports\", \"ember-cli-string-helpers/helpers/camelize\"], function (_exports, _camelize) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"camelize\", {\n    enumerable: true,\n    get: function () {\n      return _camelize.camelize;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _camelize.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-cli-string-helpers/helpers/camelize\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/capitalize\", [\"exports\", \"ember-cli-string-helpers/helpers/capitalize\"], function (_exports, _capitalize) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"capitalize\", {\n    enumerable: true,\n    get: function () {\n      return _capitalize.capitalize;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _capitalize.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-cli-string-helpers/helpers/capitalize\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/classify\", [\"exports\", \"ember-cli-string-helpers/helpers/classify\"], function (_exports, _classify) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"classify\", {\n    enumerable: true,\n    get: function () {\n      return _classify.classify;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _classify.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-cli-string-helpers/helpers/classify\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/dasherize\", [\"exports\", \"ember-cli-string-helpers/helpers/dasherize\"], function (_exports, _dasherize) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"dasherize\", {\n    enumerable: true,\n    get: function () {\n      return _dasherize.dasherize;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _dasherize.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-cli-string-helpers/helpers/dasherize\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/eq\", [\"exports\", \"ember-truth-helpers/helpers/eq\"], function (_exports, _eq) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _eq.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-truth-helpers/helpers/eq\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/gt\", [\"exports\", \"ember-truth-helpers/helpers/gt\"], function (_exports, _gt) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _gt.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-truth-helpers/helpers/gt\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/gte\", [\"exports\", \"ember-truth-helpers/helpers/gte\"], function (_exports, _gte) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _gte.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-truth-helpers/helpers/gte\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/html-safe\", [\"exports\", \"ember-cli-string-helpers/helpers/html-safe\"], function (_exports, _htmlSafe) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _htmlSafe.default;\n    }\n  });\n  Object.defineProperty(_exports, \"htmlSafe\", {\n    enumerable: true,\n    get: function () {\n      return _htmlSafe.htmlSafe;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-cli-string-helpers/helpers/html-safe\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/humanize\", [\"exports\", \"ember-cli-string-helpers/helpers/humanize\"], function (_exports, _humanize) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _humanize.default;\n    }\n  });\n  Object.defineProperty(_exports, \"humanize\", {\n    enumerable: true,\n    get: function () {\n      return _humanize.humanize;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-cli-string-helpers/helpers/humanize\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/inline-svg\", [\"exports\", \"@ember/component/helper\", \"ember-inline-svg/helpers/inline-svg\", \"zeppelin-architectes/svgs\", \"ember\"], function (_exports, _helper, _inlineSvg, _svgs, _ember) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/component/helper\",0,\"ember-inline-svg/helpers/inline-svg\",0,\"zeppelin-architectes/svgs\",0,\"ember\"eaimeta@70e063a35619d71f\n  let helper;\n  if (_helper.default && _helper.helper) {\n    helper = (0, _helper.helper)(function ([path], options) {\n      return (0, _inlineSvg.inlineSvg)(_svgs.default, path, options);\n    });\n  } else {\n    helper = _ember.default.Handlebars.makeBoundHelper(function (path, options) {\n      return (0, _inlineSvg.inlineSvg)(_svgs.default, path, options.hash || {});\n    });\n  }\n  var _default = _exports.default = helper;\n});","define(\"zeppelin-architectes/helpers/is-array\", [\"exports\", \"ember-truth-helpers/helpers/is-array\"], function (_exports, _isArray) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _isArray.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-truth-helpers/helpers/is-array\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/is-empty\", [\"exports\", \"ember-truth-helpers/helpers/is-empty\"], function (_exports, _isEmpty) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _isEmpty.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-truth-helpers/helpers/is-empty\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/is-equal\", [\"exports\", \"ember-truth-helpers/helpers/is-equal\"], function (_exports, _isEqual) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _isEqual.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-truth-helpers/helpers/is-equal\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/linkify\", [\"exports\", \"@ember/utils\", \"@ember/component/helper\", \"@ember/template\", \"ember\", \"zeppelin-architectes/utils/url-regex\"], function (_exports, _utils, _helper, _template, _ember, _urlRegex) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.linkify = linkify;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/utils\",0,\"@ember/component/helper\",0,\"@ember/template\",0,\"ember\",0,\"zeppelin-architectes/utils/url-regex\"eaimeta@70e063a35619d71f\n  // Taken from the ember-linkify addon (not updated since long) that in dec22 was using deprecated dependances (notably raising a deprecation message about ember-cli-babel@^6.6.0)\n\n  const ALLOWED_ATTRIBUTE_NAMES = ['rel', 'class', 'target'];\n  function linkify(params, options) {\n    let textToLinkify = _ember.default.Handlebars.Utils.escapeExpression(params[0]);\n    const sharedAttributes = opts2attrs(options);\n    textToLinkify = textToLinkify.replace((0, _urlRegex.urlRegex)(), function (s) {\n      let url;\n      let displayText = s.trim();\n      if (s.trim().match(/^www\\./gi)) {\n        if (options && options.defaultScheme) {\n          url = options.defaultScheme + '://' + s.trim();\n        } else {\n          url = '//' + s.trim();\n        }\n      } else {\n        url = s.trim();\n      }\n      if (options && options.urlLength && options.urlLength > 0) {\n        displayText = (0, _urlRegex.shortenUrl)(displayText, options.urlLength);\n      }\n      return `<a href=\"${url}\"${sharedAttributes}>${displayText}</a>`;\n    });\n    return (0, _template.htmlSafe)(textToLinkify);\n  }\n  var _default = _exports.default = (0, _helper.helper)(linkify);\n  function opts2attrs(options) {\n    const stringOfAttributes = [''];\n    if ((0, _utils.typeOf)(options) === 'object') {\n      for (let i = 0; i < ALLOWED_ATTRIBUTE_NAMES.length; i++) {\n        const attributeName = ALLOWED_ATTRIBUTE_NAMES[i];\n        if (attributeName in options) {\n          stringOfAttributes.push(`${attributeName}=\"${options[attributeName]}\"`);\n        }\n      }\n    }\n    return stringOfAttributes.join(' ');\n  }\n});","define(\"zeppelin-architectes/helpers/lowercase\", [\"exports\", \"ember-cli-string-helpers/helpers/lowercase\"], function (_exports, _lowercase) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _lowercase.default;\n    }\n  });\n  Object.defineProperty(_exports, \"lowercase\", {\n    enumerable: true,\n    get: function () {\n      return _lowercase.lowercase;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-cli-string-helpers/helpers/lowercase\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/lt\", [\"exports\", \"ember-truth-helpers/helpers/lt\"], function (_exports, _lt) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _lt.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-truth-helpers/helpers/lt\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/lte\", [\"exports\", \"ember-truth-helpers/helpers/lte\"], function (_exports, _lte) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _lte.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-truth-helpers/helpers/lte\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/not-eq\", [\"exports\", \"ember-truth-helpers/helpers/not-eq\"], function (_exports, _notEq) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _notEq.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-truth-helpers/helpers/not-eq\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/not\", [\"exports\", \"ember-truth-helpers/helpers/not\"], function (_exports, _not) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _not.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-truth-helpers/helpers/not\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/or\", [\"exports\", \"ember-truth-helpers/helpers/or\"], function (_exports, _or) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _or.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-truth-helpers/helpers/or\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/page-title\", [\"exports\", \"ember-page-title/helpers/page-title\"], function (_exports, _pageTitle) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _pageTitle.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-page-title/helpers/page-title\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/render-svg\", [\"exports\", \"@ember/template\", \"@ember/component/helper\", \"ember-inline-svg/helpers/inline-svg\", \"zeppelin-architectes/svgs\"], function (_exports, _template, _helper, _inlineSvg, _svgs) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.renderSvg = renderSvg;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/template\",0,\"@ember/component/helper\",0,\"ember-inline-svg/helpers/inline-svg\",0,\"zeppelin-architectes/svgs\"eaimeta@70e063a35619d71f\n  /**\n   * Simple adapter to get the html code within a controller\n   * inspired by node_modules/ember-inline-svg/app/helpers/inline-svg.js\n   *\n   */\n  function renderSvg(svgPath, options = {}) {\n    return (0, _inlineSvg.inlineSvg)(_svgs.default, svgPath, options);\n  }\n  var _default = _exports.default = _helper.default.helper(renderSvg);\n});","define(\"zeppelin-architectes/helpers/titleize\", [\"exports\", \"ember-cli-string-helpers/helpers/titleize\"], function (_exports, _titleize) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _titleize.default;\n    }\n  });\n  Object.defineProperty(_exports, \"titleize\", {\n    enumerable: true,\n    get: function () {\n      return _titleize.titleize;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-cli-string-helpers/helpers/titleize\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/trim\", [\"exports\", \"ember-cli-string-helpers/helpers/trim\"], function (_exports, _trim) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _trim.default;\n    }\n  });\n  Object.defineProperty(_exports, \"trim\", {\n    enumerable: true,\n    get: function () {\n      return _trim.trim;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-cli-string-helpers/helpers/trim\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/truncate\", [\"exports\", \"ember-cli-string-helpers/helpers/truncate\"], function (_exports, _truncate) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _truncate.default;\n    }\n  });\n  Object.defineProperty(_exports, \"truncate\", {\n    enumerable: true,\n    get: function () {\n      return _truncate.truncate;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-cli-string-helpers/helpers/truncate\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/underscore\", [\"exports\", \"ember-cli-string-helpers/helpers/underscore\"], function (_exports, _underscore) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _underscore.default;\n    }\n  });\n  Object.defineProperty(_exports, \"underscore\", {\n    enumerable: true,\n    get: function () {\n      return _underscore.underscore;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-cli-string-helpers/helpers/underscore\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/uppercase\", [\"exports\", \"ember-cli-string-helpers/helpers/uppercase\"], function (_exports, _uppercase) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _uppercase.default;\n    }\n  });\n  Object.defineProperty(_exports, \"uppercase\", {\n    enumerable: true,\n    get: function () {\n      return _uppercase.uppercase;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-cli-string-helpers/helpers/uppercase\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/w\", [\"exports\", \"ember-cli-string-helpers/helpers/w\"], function (_exports, _w) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _w.default;\n    }\n  });\n  Object.defineProperty(_exports, \"w\", {\n    enumerable: true,\n    get: function () {\n      return _w.w;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-cli-string-helpers/helpers/w\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/helpers/xor\", [\"exports\", \"ember-truth-helpers/helpers/xor\"], function (_exports, _xor) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _xor.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-truth-helpers/helpers/xor\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/initializers/app-version\", [\"exports\", \"ember-cli-app-version/initializer-factory\", \"zeppelin-architectes/config/environment\"], function (_exports, _initializerFactory, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"ember-cli-app-version/initializer-factory\",0,\"zeppelin-architectes/config/environment\"eaimeta@70e063a35619d71f\n  let name, version;\n  if (_environment.default.APP) {\n    name = _environment.default.APP.name;\n    version = _environment.default.APP.version;\n  }\n  var _default = _exports.default = {\n    name: 'App Version',\n    initialize: (0, _initializerFactory.default)(name, version)\n  };\n});","define(\"zeppelin-architectes/initializers/body-class\", [\"exports\", \"ember\", \"@ember/runloop\"], function (_exports, _ember, _runloop) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.initialize = initialize;\n  0; //eaimeta@70e063a35619d71f0,\"ember\",0,\"@ember/runloop\"eaimeta@70e063a35619d71f\n  function initialize(/* application */\n  ) {\n    /*Automatically add aria labels to input type texts*/\n    /* @Matthias, is it still useful ? (coming from v6)\n      Ember.TextSupport.reopen({\n        attributeBindings: ['aria-label', 'aria-labelledby']\n      });\n    */\n    if (typeof FastBoot != 'undefined')\n      // don't call it in fastboot, call it only in js-enabled navigator context\n      return;\n\n    // application.inject('route', 'foo', 'service:foo');\n    /*Automatically add the route name as a class on the body tag - important to tweak some styles on some pages*/\n    _ember.default.Route.reopen({\n      activate() {\n        // alert('this.routeName:' + this.routeName);\n        // \t\tcontentLoading = false;//temp trigger fatal error test\n        var classes = this.genClasses();\n        // console.log('activate', classes);\n        // alert('this.routeName:' + this.routeName);\n        if (classes !== 'application') {\n          // if( classes )\n          document.body.classList.forEach(bclass => {\n            if (bclass.indexOf('route-') == 0) document.body.classList.remove(bclass);\n          });\n          classes.forEach(bclass => {\n            document.body.classList.add(bclass);\n          });\n        }\n        if (document.contentLoading) {\n          document.contentLoading = false; //global defined in index.html\n          document.getElementById('appLoading').classList.add('swing', 'hide-fade-out');\n          (0, _runloop.later)(this, () => document.getElementById('appLoading').remove(), 2000);\n          // document.getElementById('appLoadingCopyright').classList.add('swing', 'hide-fade-out');\n          // later(this, () => document.getElementById('appLoadingCopyright').remove(), 2000);\n        }\n      },\n      deactivate() {\n        document.body.classList.remove(this.genClasses());\n      },\n      genClasses() {\n        /*\n        const classes = this.routeName.split('.');\n        // add a \"route-\" prefix to the class name to avoid possible css clashes\n        const newClasses = classes.map(el => 'route-' + el);\n        if (this.classNames) {\n        \tfor (var name of this.classNames) {\n        console.log( 'genClasses sub', name );\n        \t\tnewClasses.push(name)\n        \t}\n        }\n        */\n        const newClasses = ['route-' + this.routeName.replaceAll('.', '_')];\n        // console.log( 'genClasses()', newClasses, '\\n', document.body.classList );\n        return newClasses;\n      }\n    });\n  }\n  var _default = _exports.default = {\n    name: 'body-class',\n    initialize\n    /*  after: 'i18n',\n      initialize: function() {\n    \t  document.body.classList.add(i18n.locale);\n      }*/\n  };\n});","define(\"zeppelin-architectes/initializers/ember-data\", [\"exports\", \"@ember-data/request-utils/deprecation-support\"], function (_exports, _deprecationSupport) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember-data/request-utils/deprecation-support\"eaimeta@70e063a35619d71f\n  /*\n    This code initializes EmberData in an Ember application.\n  */\n  var _default = _exports.default = {\n    name: 'ember-data',\n    initialize(application) {\n      application.registerOptionsForType('serializer', {\n        singleton: false\n      });\n      application.registerOptionsForType('adapter', {\n        singleton: false\n      });\n    }\n  };\n});","define(\"zeppelin-architectes/instance-initializers/clear-double-boot\", [\"exports\", \"ember-cli-fastboot/instance-initializers/clear-double-boot\"], function (_exports, _clearDoubleBoot) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _clearDoubleBoot.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-cli-fastboot/instance-initializers/clear-double-boot\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/instance-initializers/head-browser\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    name: 'head-browser',\n    initialize() {\n      // do nothing!\n      // this functionality has been moved into addon/components/head-layout.js\n      // This is only here in order to not break existing addons relying on this, e.g. ember-page-title.\n    }\n  };\n});","define(\"zeppelin-architectes/locations/none\", [\"exports\", \"ember-cli-fastboot/locations/none\"], function (_exports, _none) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _none.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-cli-fastboot/locations/none\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/modifiers/did-insert\", [\"exports\", \"@ember/render-modifiers/modifiers/did-insert\"], function (_exports, _didInsert) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _didInsert.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"@ember/render-modifiers/modifiers/did-insert\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/modifiers/did-update\", [\"exports\", \"@ember/render-modifiers/modifiers/did-update\"], function (_exports, _didUpdate) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _didUpdate.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"@ember/render-modifiers/modifiers/did-update\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/modifiers/will-destroy\", [\"exports\", \"@ember/render-modifiers/modifiers/will-destroy\"], function (_exports, _willDestroy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _willDestroy.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"@ember/render-modifiers/modifiers/will-destroy\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/router\", [\"exports\", \"@ember/routing/router\", \"zeppelin-architectes/config/environment\"], function (_exports, _router, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/routing/router\",0,\"zeppelin-architectes/config/environment\"eaimeta@70e063a35619d71f\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  class Router extends _router.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"location\", _environment.default.locationType);\n      _defineProperty(this, \"rootURL\", _environment.default.rootURL);\n    }\n  }\n  _exports.default = Router;\n  Router.map(function () {\n    this.route('realisations', {\n      path: '/realisations'\n    }, function () {\n      this.route('architecture', /*{path: '/:test'},*/\n      function () {\n        this.route('projet', {\n          path: '/projet/:projet_slug'\n        });\n      }), this.route('urbanisme', function () {\n        this.route('projet', {\n          path: '/:projet_slug'\n        });\n      }), this.route('paysage', function () {\n        this.route('projet', {\n          path: '/:projet_slug'\n        });\n      });\n    });\n    this.route('equipe', {\n      path: '/équipe'\n    });\n    this.route('actualites', {\n      path: '/actualités'\n    });\n    this.route('contact', {\n      path: '/contact'\n    });\n\n    // this.route('realisations', {path: '/realisations'},\n    //   function() {\n    //     this.route('other', {path: '/realisations/other'});\n    //   });\n  });\n});","define(\"zeppelin-architectes/routes/application\", [\"exports\", \"@ember/routing/route\", \"@ember/service\", \"@ember/object\", \"zeppelin-architectes/config/environment\"], function (_exports, _route, _service, _object, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3; // import RSVP from 'rsvp';\n  // import Ember from 'ember';\n  // import { debounce, later, cancel } from '@ember/runloop';\n  0; //eaimeta@70e063a35619d71f0,\"@ember/routing/route\",0,\"@ember/service\",0,\"@ember/object\",0,\"zeppelin-architectes/config/environment\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let ApplicationRoute = _exports.default = (_class = class ApplicationRoute extends _route.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"headData\", _descriptor, this);\n      _initializerDefineProperty(this, \"device\", _descriptor2, this);\n      _initializerDefineProperty(this, \"debug\", _descriptor3, this);\n    }\n    afterModel() {\n      // https://github.com/ember-fastboot/ember-cli-head#example\n      this.headData.title = 'Zeppelin Architectes';\n    }\n\n    /**\n     * from another route or controller, call this.send('skipNextScrollToTop'); if you don't want to trigger the normal scrollToTop of the application route.\n     */\n    skipNextScrollToTop() {\n      this._skipNextScrollToTop = true;\n    }\n    didTransition(transition) {\n      this.debug.error('application route didTransition()', arguments, transition);\n      if (!this._skipNextScrollToTop) {\n        this.device.scrollToTop(true); // optional if no other scroll is set through the device service\n      }\n      this._skipNextScrollToTop = false;\n      return true; // Bubble the didTransition event\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"headData\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"device\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"debug\", [_service.service], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"skipNextScrollToTop\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"skipNextScrollToTop\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"didTransition\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"didTransition\"), _class.prototype), _class);\n});","define(\"zeppelin-architectes/routes/index\", [\"exports\", \"@ember/routing/route\"], function (_exports, _route) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/routing/route\"eaimeta@70e063a35619d71f\n  class IndexRoute extends _route.default {}\n  _exports.default = IndexRoute;\n});","define(\"zeppelin-architectes/routes/realisations\", [\"exports\", \"@ember/routing/route\"], function (_exports, _route) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/routing/route\"eaimeta@70e063a35619d71f\n  class RealisationsRoute extends _route.default {\n    model() {\n      const projets = {\n        architecture: [{\n          cover: 'images/projets/architecture/zeppelin-aup-extension-station-epuration-saint-germain-au-mont-d-or-01-1024x640.jpg',\n          contents: [['image', 'col_2', ['images/projets/architecture/zeppelin-aup-extension-station-epuration-saint-germain-au-mont-d-or-02-1024x640.jpg', 'images/projets/architecture/zeppelin-aup-extension-station-epuration-saint-germain-au-mont-d-or-03-1024x640.jpg']], ['text', 'col_3', [{\n            title: 'RECONFIGURATION DE LA STATION',\n            subtitle: 'Le fonctionnement du site est repensé pour un meilleur fonctionnement d’ensemble :',\n            list: ['le local surpresseurs est déplacé devant à environ 2,00m de la rue ;', 'la limite est déplacée au delà des anciens regards ;', 'l’accès à l’armoire est conservé ;', 'le panneau de signalétique de la ville est déplacé ;', 'le silo à chaux est déplacé en arrière du nouveau bâtiment.']\n          }, {\n            title: 'INTÉGRATION DU SITE DANS SON PAYSAGE',\n            subtitle: 'Les abords et limite du site sont repensés pour qu’il se fonde dans son environnement urbain :',\n            list: ['une haie libre est plantée sur tout linéaire de rue. Accompagnée d’une clôture barreaudée fine, elle sécurise discrètement le site ;', '5 arbres sont plantés pour agrémenter la limite avec la rue et apporter de l’ombrage.']\n          }, {\n            title: 'UN NOUVEAU BÂTIMENT EN CONTINUITÉ DE L’EXISTANT',\n            subtitle: 'L’extension est réalisée dans la continuité du bâtiment déjà présent afin d’harmoniser le site :',\n            list: [' le vocabulaire architectural du bâtiment existant est appliqué sur le nouveau (casquette béton, façade polycarbonate, toiture végétalisée + tôles perforées, ...)', 'Le traitement de la façade se retourne sur le pignon est, pour une meilleure cohérence depuis l’entrée']\n          }]], ['image', 'col_2', ['images/projets/architecture/zeppelin-aup-extension-station-epuration-saint-germain-au-mont-d-or-04-1024x640.jpg', 'images/projets/architecture/zeppelin-aup-extension-station-epuration-saint-germain-au-mont-d-or-05-1024x640.jpg']], ['image', 'col_1', ['images/projets/architecture/zeppelin-aup-extension-station-epuration-saint-germain-au-mont-d-or-07-1024x640.jpg']]],\n          /*\n                    images: [\n                      'images/projets/architecture/zeppelin-aup-extension-station-epuration-saint-germain-au-mont-d-or-01-1024x640.jpg',\n                      'images/projets/architecture/zeppelin-aup-extension-station-epuration-saint-germain-au-mont-d-or-02-1024x640.jpg',\n                      'images/projets/architecture/zeppelin-aup-extension-station-epuration-saint-germain-au-mont-d-or-03-1024x640.jpg',\n                      'images/projets/architecture/zeppelin-aup-extension-station-epuration-saint-germain-au-mont-d-or-04-1024x640.jpg',\n                      'images/projets/architecture/zeppelin-aup-extension-station-epuration-saint-germain-au-mont-d-or-05-1024x640.jpg',\n                      'images/projets/architecture/zeppelin-aup-extension-station-epuration-saint-germain-au-mont-d-or-07-1024x640.jpg'\n                    ],\n          */\n\n          texts: [\n          // 'Extension de la station d’épuration<br>Saint-Germain-au Mont-d\\'Or, Rhône<br>',\n          'Construction d\\'une extension pour augmentation de capacité<b>', '<b>Maîtrise d\\'ouvrage&nbsp;:</b> Métropole de Lyon<b><br>Montant des travaux&nbsp;:</b> 3 400 000 €<br><b>Surface de plancher&nbsp;:</b> 1 300 m²<br><b>Calendrier&nbsp;:</b> 2018'],\n          nom: 'Extension de la station d’épuration',\n          lieu: 'Saint-Germain-au Mont-d\\'Or, Rhône',\n          mention: 'Architecte cotraitant',\n          slug: 'Saint-Germain-au-Mont-d-Or_Rhône_Extension-de-la-station-d-épuration',\n          download: 'pdf/projets/architecture/zeppelin-aup-extension-station-epuration-saint-germain-au-mont-d-or.pdf'\n        }, {\n          images: ['images/projets/architecture/zeppelin-aup-maison-du-chatelet-bourg-argental-01-1024x640.jpg', 'zeppelin-aup-maison-du-chatelet-bourg-argental-02-1024x640.jpg', 'zeppelin-aup-maison-du-chatelet-bourg-argental-03-1024x640.jpg', 'zeppelin-aup-maison-du-chatelet-bourg-argental-04-1024x640.jpg', 'zeppelin-aup-maison-du-chatelet-bourg-argental-05-1024x640.jpg', 'zeppelin-aup-maison-du-chatelet-bourg-argental-06-1024x640.jpg', 'zeppelin-aup-maison-du-chatelet-bourg-argental-07-1024x640.jpg', 'zeppelin-aup-maison-du-chatelet-bourg-argental-08-1024x640.jpg'],\n          texts: ['Réhabilitation, accessibilité et modernisation de la Maison du Châtelet et de l\\'espace muséographie', '<b>Maîtrise d\\'ouvrage&nbsp;:</b> Ville de Bourg-Argental & Parc Naturel du Pilat<br><b>Montant des travaux&nbsp;:</b> 500 000 €<br><b>Surface de plancher&nbsp;:</b> 480 m²<br><b>Calendrier&nbsp;:</b> 2019'],\n          nom: 'Maison du Châtelet',\n          lieu: 'Bourg-Argental, Loire',\n          mention: 'Architecte mandataire',\n          slug: 'Bourg-Argental_Loire_Maison-du-Châtelet'\n        }, {\n          images: ['images/projets/architecture/zeppelin-aup-residence-universitaire-alix-lyon-01-1024x640.jpg'],\n          nom: 'Résidence universitaire Alix',\n          lieu: 'Lyon 5<sup>è</sup>, Rhône',\n          mention: 'Architecte mandataire'\n        }, {\n          images: ['images/projets/architecture/zeppelin-aup-club-house-de-rugby-saint-priest_01-1024x640.jpg'],\n          nom: 'Club-house de rugby',\n          lieu: 'Saint-Priest, Rhône',\n          mention: 'Architecte mandataire'\n        }, {\n          images: ['images/projets/architecture/zeppelin-aup-faubourg-clermont-roanne_03-1024x640.jpg'],\n          nom: 'Faubourg Clermont',\n          lieu: 'Roanne, Loire',\n          mention: 'Architecte-urbaniste mandataire'\n        }, {\n          images: ['images/projets/architecture/zeppelin-aup-transformation-ecole-en-logements-sociaux-blanzat-01-1024x640.jpg'],\n          nom: 'Transformation d’une école en logements sociaux',\n          lieu: 'Blanzat, Puy-de-Dôme',\n          mention: 'Architecte-urbaniste mandataire'\n        }],\n        /**********************************************************/\n\n        urbanisme: [{\n          images: ['images/projets/urbanisme/zeppelin-aup-projet-coeur-de-ville-peronnas-01-1024x640.jpg'],\n          nom: 'Projet Coeur de ville',\n          lieu: 'Péronnas, Ain',\n          mention: 'Urbaniste mandataire',\n          slug: 'Péronnas_Ain_Projet-Coeur-de-ville'\n        }, {\n          images: ['images/projets/urbanisme/zeppelin-aup-ecoquartier-en-greffe-de-bourg-fourneaux-02-1024x640.jpg'],\n          nom: 'Ecoquartier en greffe de bourg',\n          lieu: 'Fourneaux, Loire',\n          mention: 'Architecte-urbaniste mandataire',\n          slug: 'Fourneaux_Loire_Ecoquartier-en-greffe-de-bourg'\n        }, {\n          images: ['images/projets/architecture/zeppelin-aup-faubourg-clermont-roanne_03-1024x640.jpg'],\n          nom: 'Faubourg Clermont',\n          lieu: 'Roanne, Loire',\n          mention: 'Architecte-urbaniste mandataire'\n        }, {\n          images: ['images/projets/architecture/zeppelin-aup-transformation-ecole-en-logements-sociaux-blanzat-01-1024x640.jpg'],\n          nom: 'Transformation d’une école en logements sociaux',\n          lieu: 'Blanzat, Puy-de-Dôme',\n          mention: 'Architecte-urbaniste mandataire'\n        }, {\n          images: ['images/projets/urbanisme/zeppelin-aup-maison-claret-vernoux-en-vivarais-01-1024x640.jpg'],\n          nom: 'Maison Claret',\n          lieu: 'Blanzat, Puy-de-Dôme',\n          mention: 'Vernoux-en-Vivarais, Ardèche'\n        }, {\n          images: ['images/projets/urbanisme/zeppelin-aup-amenagement-centre-bourg-genelard-01-1024x640.jpg'],\n          nom: 'Aménagement du Centre-bourg',\n          lieu: 'Génelard, Saône-et-Loire',\n          mention: 'Architecte-urbaniste mandataire'\n        }],\n        /**********************************************************/\n\n        paysage: [{\n          images: ['images/projets/paysage/zeppelin-aup-cheminement-berges-boen-sur-lignon-01-1024x640.jpg'],\n          nom: 'Cheminement sur les berges du Lignon',\n          lieu: 'Boën-sur-Lignon, Loire',\n          mention: 'Paysagiste mandataire',\n          slug: 'Boën-sur-Lignon_Loire_Cheminement-sur-les-berges-du-Lignon '\n        }, {\n          images: ['images/projets/paysage/zeppelin-aup-complexe-sportif-romain-tisserand-chassieu-01-1024x640.jpg'],\n          nom: 'Complexe sportif Romain Tisserand',\n          lieu: 'Chassieu, Rhône',\n          mention: 'Paysagiste mandataire',\n          slug: 'Chassieu_Rhône_Complexe-sportif-Romain-Tisserand'\n        }, {\n          images: ['images/projets/paysage/zeppelin-aup-pae-maison-blanche-vaugneray-02-1024x640.jpg'],\n          nom: 'PAE de Maison Blanche',\n          lieu: 'Vaugneray, Rhône',\n          mention: 'Paysagiste cotraitant'\n        }, {\n          images: ['images/projets/paysage/zeppelin-aup-sequence-centre-avenue-de-lyon-peronnas-01-1024x640.jpg'],\n          nom: 'Séquence centre de l’avenue de Lyon',\n          lieu: 'Péronnas, Ain',\n          mention: 'Paysagiste mandataire'\n        }, {\n          images: ['images/projets/paysage/zeppelin-aup-01.jpg'],\n          nom: 'Parking du Pavillon médical',\n          lieu: 'Boën-sur-Lignon, Loire',\n          mention: 'Paysagiste mandataire'\n        }, {\n          images: ['images/projets/paysage/zeppelin-aup-place-de-l-eglise-sanssac-03-1024x640.jpg'],\n          nom: 'Place de l’Eglise',\n          lieu: 'Sanssac-l’Eglise, Haute-Loire',\n          mention: 'Paysagiste mandataire'\n        }]\n      };\n      // console.log('projets:', projets)\n      Object.entries(projets).forEach(([type, data]) => {\n        let idx = -1;\n        data.forEach(projet => {\n          idx++;\n          if (!projet.slug) {\n            projet.slug = projet.lieu.replace(/[,\\s.]/gi, '_') + '_' + projet.nom.replace(/[,\\s.]/gi, '_');\n          }\n          projet.slug = projet.slug.replaceAll('__', '_').replaceAll('--', '-').replaceAll(/<.*?>/gi, '-');\n          if (!projet.cover) projet.cover = projet.images.shift();\n          // console.log('projet:', projet);\n          data[idx] = projet;\n        });\n      });\n      // console.log('projets:', projets);\n      return {\n        projets\n      };\n    }\n  }\n  _exports.default = RealisationsRoute;\n});","define(\"zeppelin-architectes/routes/realisations/architecture/projet\", [\"exports\", \"@ember/routing/route\"], function (_exports, _route) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/routing/route\"eaimeta@70e063a35619d71f\n  class ArchitectureProjetRoute extends _route.default {\n    model(params) {\n      // console.log(params, '=>', params.projet_slug, this.routeName)\n      const projet = this.modelFor('realisations').projets.architecture.find(projet => projet.slug == params.projet_slug);\n      // console.log(projet?.slug, '==', params.projet_slug)\n      return {\n        projet\n      };\n    }\n  }\n  _exports.default = ArchitectureProjetRoute;\n});","define(\"zeppelin-architectes/routes/realisations/index\", [\"exports\", \"@ember/routing/route\"], function (_exports, _route) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/routing/route\"eaimeta@70e063a35619d71f\n  class IndexRoute extends _route.default {}\n  _exports.default = IndexRoute;\n});","define(\"zeppelin-architectes/routes/realisations/paysage/projet\", [\"exports\", \"@ember/routing/route\"], function (_exports, _route) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/routing/route\"eaimeta@70e063a35619d71f\n  class PaysageProjetRoute extends _route.default {\n    model(params) {\n      // console.log(params, '=>', params.projet_slug, this.routeName)\n      const projet = this.modelFor('realisations').projets.paysage.find(projet => projet.slug == params.projet_slug);\n      // console.log(projet?.slug, '==', params.projet_slug)\n      return {\n        projet\n      };\n    }\n  }\n  _exports.default = PaysageProjetRoute;\n});","define(\"zeppelin-architectes/routes/realisations/urbanisme/projet\", [\"exports\", \"@ember/routing/route\"], function (_exports, _route) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/routing/route\"eaimeta@70e063a35619d71f\n  class UrbanismeProjetRoute extends _route.default {\n    model(params) {\n      // console.log(params, '=>', params.projet_slug, this.routeName)\n      const projet = this.modelFor('realisations').projets.urbanisme.find(projet => projet.slug == params.projet_slug);\n      // console.log(projet?.slug, '==', params.projet_slug)\n      return {\n        projet\n      };\n    }\n  }\n  _exports.default = UrbanismeProjetRoute;\n});","define(\"zeppelin-architectes/routes/realisattions\", [\"exports\", \"@ember/routing/route\"], function (_exports, _route) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/routing/route\"eaimeta@70e063a35619d71f\n  class RealisattionsRoute extends _route.default {}\n  _exports.default = RealisattionsRoute;\n});","define(\"zeppelin-architectes/services/cookies\", [\"exports\", \"ember-cookies/services/cookies\"], function (_exports, _cookies) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _cookies.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-cookies/services/cookies\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/services/debug\", [\"exports\", \"@ember/object/computed\", \"@ember/service\", \"@ember/object\", \"@ember/object/evented\", \"zeppelin-architectes/config/environment\"], function (_exports, _computed, _service, _object, _evented, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _dec3, _obj;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/object/computed\",0,\"@ember/service\",0,\"@ember/object\",0,\"@ember/object/evented\",0,\"zeppelin-architectes/config/environment\"eaimeta@70e063a35619d71f\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  const {\n    APP: {\n      USER\n    }\n  } = _environment.default;\n\n  /**\n   * This service is intended to centralize the debug outputs\n   *\n   * This is mainly for some debug messages to keep in the production code but with no effect on normal users.\n   * The intention is mainly to quicken debugging when it is temporarily needed or for crucial events and to provide a verbose mode on production not impacting users.\n   *\n   * One major advantage of the debug service (usually used in the \"@service debug;\" remapped name) is that you can turn it verbose mode on or off adding a \"&debugmode=1\" or \"&debugmode=0\" in the query, regardless of your current user's rights and regardless of the ENV running Ember (local, preprod, prod : all the same).\n   *\n   * Includes console log/warn/error messages but also alert(), confirm(), prompt() bindings that will not pop on normal users (simple ones or community admins)\n   *\n   * For simple code developing the console.log/warn/error keep being options at your convenience.\n   *\n   */\n  var _default = _exports.default = _service.default.extend((_dec = (0, _object.computed)('userService.isGlobalAdmin', '_force_debugger'), _dec2 = (0, _object.computed)('_force_v7StringsReport'), _dec3 = (0, _object.computed)('_force_v71StringsReport'), _obj = {\n    cookies: (0, _service.inject)(),\n    toast: (0, _service.inject)(),\n    userService: (0, _service.inject)('user'),\n    errorEmberConsumer: (0, _service.inject)('error-ember-consumer'),\n    _force_debugger: null,\n    _force_v7StringsReport: null,\n    _force_v71StringsReport: null,\n    _showEachAdaptersRequest: false,\n    _dontShowBubbles: false,\n    _dontPollNotifications: false,\n    _debug_contentContainer: false,\n    _messagesRecordMode: true,\n    //this is now enabled by default to complete the stack when an error occurs\n    _records: [],\n    /**/\n    infinityEnded: false,\n    //error-ember-listener util for ember-infinity\n    debug_showEachAdaptersRequest: (0, _computed.alias)('_showEachAdaptersRequest'),\n    initServices: (0, _evented.on)('init', function () {\n      if (typeof FastBoot != 'undefined')\n        // don't call it in fastboot, call it only in js-enabled navigator context\n        return;\n      // \t\tthis.get('userService');\n      this.set('_force_debugger', this.cookies.read('debug'));\n      this.set('_force_v7StringsReport', this.cookies.read('v7stringsreport'));\n      this.set('_force_v71StringsReport', this.cookies.read('v71stringsreport'));\n      // alert( \"_force_debugger \"+this.get('_force_debugger') );\n      this.set('_showEachAdaptersRequest', this.cookies.read('debug_showEachAdaptersRequest'));\n      if (this._force_debugger && this.cookies.read('debug_dontPollNotifications') === undefined) this.set('_dontPollNotifications', true);\n      //default if no cookie and user is a debugger\n      else this.set('_dontPollNotifications', this.cookies.read('debug_dontPollNotifications'));\n      this.set('_dontShowBubbles', this.cookies.read('debug_dontShowBubbles'));\n      this.set('_debug_contentContainer', this.cookies.read('debug_contentContainer')); //content-container verbose + alert breakpoints, step by step debug\n      if (this.cookies.read('debug_messagesRecordMode') != null) this._messagesRecordMode = this.cookies.read('debug_messagesRecordMode'); //this is an util mode for error-ember-listener : some browsers (mainly those for mobile) doesn't have a console and some of them are giving very little details when errors occurs. This mode is intended for debuggers to get the debug messages at least in case of errors\n\n      if (this._force_debugger === '0') this.set('_force_debugger', false);\n      if (this._showEachAdaptersRequest === '0') this.set('_showEachAdaptersRequest', false);\n      if (this._dontShowBubbles === '0') this.set('_dontShowBubbles', false);\n      if (this._dontPollNotifications === '0') this.set('_dontPollNotifications', false);\n      if (this._debug_contentContainer == '0') this.set('_debug_contentContainer', false);\n      if (this._messagesRecordMode == '0') this.set('_messagesRecordMode', false);\n      /**/\n      this.notify('service debug inited - config.environment:' + _environment.default.environment + ' - _force_debugger:' + this._force_debugger + ' -  _force_v7StringsReport :' + this.get('_force_v7StringsReport ') + ' -  _force_v71StringsReport :' + this.get('_force_v71StringsReport ') + ' -_showEachAdaptersRequest:' + this._showEachAdaptersRequest + ' - _dontPollNotifications:' + this._dontPollNotifications + ' - _dontShowBubbles:' + this._showEachAdaptersRequest);\n    }),\n    forceDebugMode(bool) {\n      //automatically called in application route beforeModel if query var ?debugmode=X\n      console.error('forceDebugMode(' + bool + ') - config.environment:' + _environment.default.environment);\n      let date = new Date();\n      date.setMonth(date.getMonth() + 1);\n      this.cookies.write('debug', bool, {\n        path: '/',\n        expires: date,\n        sameSite: 'Lax'\n      });\n      this.set('_force_debugger', bool);\n    },\n    forceV7StringsReport(bool) {\n      //automatically called in application route beforeModel if query var ?v7stringsreport=X\n      console.error('forceV7StringsReport(' + bool + ') - config.environment:' + _environment.default.environment);\n      let date = new Date();\n      date.setMonth(date.getMonth() + 1);\n      this.cookies.write('v7stringsreport', bool, {\n        path: '/',\n        expires: date,\n        sameSite: 'Lax'\n      });\n      this.set('_force_v7StringsReport', bool);\n    },\n    forceV71StringsReport(bool) {\n      console.error('forceV71StringsReport(' + bool + ') - config.environment:' + _environment.default.environment);\n      let date = new Date();\n      date.setMonth(date.getMonth() + 1);\n      this.cookies.write('v71stringsreport', bool, {\n        path: '/',\n        expires: date,\n        sameSite: 'Lax'\n      });\n      this.set('_force_v71StringsReport', bool);\n    },\n    forceDebugShowEachAdaptersRequest(bool) {\n      //automatically called in application route beforeModel if ?debug_showEachAdaptersRequest=X\n      let date = new Date();\n      date.setMonth(date.getMonth() + 1);\n      this.cookies.write('debug_showEachAdaptersRequest', bool, {\n        path: '/',\n        expires: date,\n        sameSite: 'Lax'\n      });\n      this.set('_showEachAdaptersRequest', bool);\n    },\n    forceDontPollNotifications(bool) {\n      //The notifications and current user datas are triggered by interval (application route), leading to more log - for debuging we may don't want this - set by query ?debug_forceDontPollNotifications=1|0\n      let date = new Date();\n      date.setMonth(date.getMonth() + 1);\n      this.cookies.write('debug_dontPollNotifications', bool, {\n        path: '/',\n        expires: date,\n        sameSite: 'Lax'\n      });\n      this.set('_dontPollNotifications', bool);\n    },\n    forceDebugDontShowBubbles(bool) {\n      //automatically called in application route beforeModel if ?debug_dontShowBubbles=X\n      let date = new Date();\n      date.setMonth(date.getMonth() + 1);\n      this.cookies.write('debug_dontShowBubbles', bool, {\n        path: '/',\n        expires: date,\n        sameSite: 'Lax'\n      });\n      this.set('_dontShowBubbles', bool);\n    },\n    forceDebugContentContainer(bool) {\n      //automatically called in application route beforeModel if ?debug_dontShowBubbles=X\n      let date = new Date();\n      date.setMonth(date.getMonth() + 1);\n      this.cookies.write('debug_contentContainer', bool, {\n        path: '/',\n        expires: date,\n        sameSite: 'Lax'\n      });\n      this.set('_debug_contentContainer', bool);\n      if (this._debug_contentContainer == '0') this.set('_debug_contentContainer', false);\n    },\n    forceDebugMessagesRecordMode(bool) {\n      //automatically called in application route beforeModel if ?debug_dontShowBubbles=X\n      let date = new Date();\n      date.setMonth(date.getMonth() + 1);\n      this.cookies.write('debug_messagesRecordMode', bool, {\n        path: '/',\n        expires: date,\n        sameSite: 'Lax',\n        sameSite: 'Lax'\n      });\n      this.set('_messagesRecordMode', bool);\n      if (this._messagesRecordMode == '0') this.set('_messagesRecordMode', false);\n    },\n    get isDebugger() {\n      if (this._force_debugger !== null) {\n        return this._force_debugger == 1;\n      }\n      /* Stop spamming the developers : now the ?debugmode=1 must be passed to enable dbgmode\n      if( config.environment !== 'production' || this.get('userService.isGlobalAdmin') ){\n      \treturn true;\n      }\n      */\n      return false;\n    },\n    get isDebugMode() {\n      return this.isDebugger;\n    },\n    get isV7StringsReporter() {\n      if (this._force_v7StringsReport !== null) {\n        return this._force_v7StringsReport == 1;\n      }\n      return false;\n    },\n    get isV71StringsReporter() {\n      if (this._force_v71StringsReport !== null) {\n        return this._force_v71StringsReport == 1;\n      }\n      return false;\n    },\n    /** Util to manually consume an error and eventually send it to the backend\n     *\n     */\n    throwError(errorDescriptor, stringMessage, forceSending, fatalBSOD) {\n      this.errorEmberConsumer.consume(errorDescriptor, stringMessage, fatalBSOD);\n      if (forceSending) this.errorEmberConsumer.sendErrorDescriptorToBackend(errorDescriptor, stringMessage, fatalBSOD);\n    },\n    /*!@@method sendErrorDescriptorToBackend(descriptor, errorMessage, is_fatal)\n     * @@descript: proxy for error-ember-consumer.sendErrorDescriptorToBackend();\n     * Manually report something in the backend exceptions logger\n     * An alternative is to call this.errorEmberConsumer.consume(error); but it implies much more code that may not send the report at the  end.\n     * @@example:\n     * <code>\n     * this.debugService.sendErrorDescriptorToBackend(new Error(), \"Just a test\")\n     * </code>\n     * @@args:\n     * @descriptor <Error>: new Error(); provides some context for the report\n     * @errorMessage <string>: free string to explain the error\n     * @is_fatal <bool>: wether or not this error is considered as a fatal one (or a simple notice/warning) : simple information for the backend\n     * @@return <void>\n     */\n    sendErrorDescriptorToBackend(descriptor, errorMessage, is_fatal) {\n      return this.errorEmberConsumer.sendErrorDescriptorToBackend(descriptor, errorMessage, is_fatal);\n    },\n    /**\n     * Get the previous reported dbg errors (used by error-ember-consumer to complete the stack when sending a JS error to the BE).\n     *\n     */\n    getDbgErrorsStack(forJson = true) {\n      // forJson : set it to true to avoid a \"cyclic value\" error if the returned value is meant to be passed to JSON.stringify() - this will only return a string dump for objects/arrays of the first level (no dangerous+/verbose deep introspection)\n      // here we check everything to be sure no to create an error\n      // console.log(\"getDbgErrorsStack()\", this._records, this._messagesRecordMode);\n      let stack = [];\n      if (!this._records || !this._records.forEach) return stack;\n      this._records.forEach(record => {\n        if (record && record.length > 1 && (record[0] == 'error' || record[0] == 'store')) {\n          // console.log(\"stack.push(\", record[1], \");\", record);\n          if (forJson) stack.push(this._shortInspect(record[1]));else stack.push(record[1]);\n        }\n      });\n      return stack;\n    },\n    _shortInspect(value, level = 0) {\n      if (typeof value == 'object') {\n        if (!level) return this._shortInspect(value, level + 1);\n        if (value.forEach) {\n          if (level > 1) return '[skipped Array]';else {\n            let str = \"\\n\";\n            value.forEach((v, k) => {\n              str += ' '.repeat(level) + k + ': ' + (v && typeof v == 'object' ? this._shortInspect(v, level + 1) : v) + '\\n';\n            });\n            return str;\n          }\n        } else {\n          if (level > 1) return '[skipped Object]';else {\n            let str = \"\\n\";\n            Object.entries(value).forEach(([k, v]) => {\n              str += ' '.repeat(level) + k + ': ' + (v && typeof v == 'object' ? this._shortInspect(v, level + 1) : v) + '\\n';\n            });\n            return str;\n          }\n        }\n      }\n      return value;\n    },\n    /** The 'store' reports are never displayed live even for debuggers but in the case an Ember error happens they will be joined in the BE error report in the stack.\n     *\n     */\n    store() {\n      if (this.isDebugger || this._messagesRecordMode) {\n        arguments[0] = 'debug store :' + arguments[0];\n        if (this._messagesRecordMode) this._records.push(['store', [...arguments]]);\n      }\n    },\n    /*!@@method notify(showBubble[, multiple arguments])\n     * @@descript:\n     * notify() should be used for normal debug messages ! It should use console.log() but may use console.error() just to make the reports more visible.\n     * the only other methods that should be used are error(), alert() and confirm()\n     * error() is then reserved for reel errors that we catch for debugging\n     * @@arguments:\n     *  @showBubble <boolean> : if true and the _dontShowBubbles flag is not true, an error bubble will be shown on the page through toast. Set this carefully to avoid too much bubbles...\n     *  @multiple_arguments : as for console.error() etc, an indefinite length of arguments is possible, combining strings and objects or arrays to introspect.\n     * If first argument is not boolean, showBubble will be set at false\n     *\n     */\n    notify() {\n      if (this.isDebugger || this._messagesRecordMode) {\n        var showBubble = arguments[0];\n        let args = arguments;\n        if (typeof args === 'object') {\n          let tp = new Array();\n          for (let d in args) {\n            if (!isNaN(d) && (d > 0 || args[d] !== true && args[d] !== false)) {\n              if (d == 0 && args[d] !== true && args[d] !== false) showBubble = false;\n              tp[tp.length] = args[d];\n            }\n          }\n          args = tp;\n        } else if (showBubble === true || showBubble === false) args.shift(); //we remove our or own first argument : <boolean> showBubble\n        else showBubble = false;\n        if (showBubble && !this._dontShowBubbles) {\n          let args2 = Array.prototype.slice.call(args);\n          args2 = args.join('<br>');\n          this.toast.error('Debugger notify<br>' + args2);\n        }\n        args[0] = 'debug notify :' + args[0];\n        if (this._messagesRecordMode) this._records.push(['notify', [...args]]);\n        if (this.isDebugger) console.log(...args);\n      }\n    },\n    /*To activate for route debugging (tracking models loading) ::*/\n    notifyBeforeModel(callerLabel) {\n      arguments[0] = 'notifyBeforeModel(' + arguments[0] + ');';\n      this.notify(...arguments);\n    },\n    notifyModel(callerLabel) {\n      arguments[0] = 'notifyModel(' + arguments[0] + ');';\n      this.notify(...arguments);\n    },\n    notifyAfterModel(callerLabel) {\n      arguments[0] = 'notifyAfterModel(' + arguments[0] + ');';\n      this.notify(...arguments);\n    },\n    /*:: To activate for route debugging (models loading)*/\n\n    errorBubble() {\n      if (this.isDebugger) this.toast.error(...arguments);\n    },\n    successBubble() {\n      if (this.isDebugger) this.toast.success(...arguments);\n    },\n    warningBubble() {\n      if (this.isDebugger) this.toast.warning(...arguments);\n    },\n    log() {\n      if (this.isDebugger || this._messagesRecordMode) {\n        /*let args = Array.prototype.slice.call(arguments);\n        args = args.join('<br>');\n        this.get('toast').error( 'Debugger log<br>'+args ) ;*/\n        arguments[0] = 'debug log :' + arguments[0];\n        if (this._messagesRecordMode) this._records.push(['log', [...arguments]]);\n        if (this.isDebugger) console.log(...arguments);\n      }\n    },\n    error() {\n      if (this.isDebugger || this._messagesRecordMode) {\n        arguments[0] = 'debug error :' + arguments[0];\n        if (this._messagesRecordMode) this._records.push(['error', [...arguments]]);\n        if (this.isDebugger) console.error(...arguments);\n      }\n    },\n    warn() {\n      if (this.isDebugger || this._messagesRecordMode) {\n        arguments[0] = 'debug warn :' + arguments[0];\n        if (this._messagesRecordMode) this._records.push(['warn', [...arguments]]);\n        if (this.isDebugger) console.warn(...arguments);\n      }\n    },\n    alert() {\n      if (this.isDebugger || this._messagesRecordMode) {\n        arguments[0] = 'debug alert :' + arguments[0];\n        this.notify(false, ...arguments);\n        if (this.isDebugger) alert(...arguments);\n      }\n    },\n    confirm() {\n      if (this.isDebugger) {\n        arguments[0] = 'debug confirm :' + arguments[0];\n        this.notify(false, ...arguments);\n        return confirm(...arguments);\n      }\n      return null;\n    },\n    dumpError(error /*, returnAsString=false*/) {\n      /*\n      const jsond = JSON.stringify(error),\n      \tr = JSON.parse( jsond );\n      console.log('JSON_dumpThat', jsond, r);\n      */\n      let r = '';\n      r += 'error.name:' + error.name + '\\n';\n      r += 'error.message:' + error.message + '\\n';\n      r += 'error.cause:' + error.cause + '\\n';\n      r += 'error.fileName:' + error.fileName + '\\n';\n      r += 'error.lineNumber:' + error.lineNumber + '\\n';\n      r += 'error.stack:' + error.stack + '\\n';\n      return r;\n    }\n  }, _applyDecoratedDescriptor(_obj, \"isDebugger\", [_dec], Object.getOwnPropertyDescriptor(_obj, \"isDebugger\"), _obj), _applyDecoratedDescriptor(_obj, \"isV7StringsReporter\", [_dec2], Object.getOwnPropertyDescriptor(_obj, \"isV7StringsReporter\"), _obj), _applyDecoratedDescriptor(_obj, \"isV71StringsReporter\", [_dec3], Object.getOwnPropertyDescriptor(_obj, \"isV71StringsReporter\"), _obj), _obj));\n});","define(\"zeppelin-architectes/services/device\", [\"exports\", \"@ember/service\", \"@glimmer/tracking\", \"zeppelin-architectes/config/environment\", \"@ember/runloop\", \"@ember/object\"], function (_exports, _service, _tracking, _environment, _runloop, _object) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12, _descriptor13; //import { action } from '@ember/object';\n  0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"zeppelin-architectes/config/environment\",0,\"@ember/runloop\",0,\"@ember/object\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let DeviceService = _exports.default = (_dec = (0, _object.computed)('isPhone', 'isTabPort', 'isTabLand', 'isNormalDesktop', 'isBigDesktop'), _class = class DeviceService extends _service.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"router\", _descriptor, this);\n      _initializerDefineProperty(this, \"debug\", _descriptor2, this);\n      _initializerDefineProperty(this, \"popup\", _descriptor3, this);\n      _initializerDefineProperty(this, \"phone\", _descriptor4, this);\n      _initializerDefineProperty(this, \"modelWatcher\", _descriptor5, this);\n      _initializerDefineProperty(this, \"cookies\", _descriptor6, this);\n      _initializerDefineProperty(this, \"pollService\", _descriptor7, this);\n      _initializerDefineProperty(this, \"CQ\", _descriptor8, this);\n      //!DEPRECATED\n      //This is the ContainerQuery object from the application template\n      //! Dec 22 we don't get anymore the CQ from the application.hbs... => we use directly the config breakpoints\n      //! Oct 24: the CQ is mostly to be considered as deprecated particularly for page contents but can still be used for \"widget\" components that needs to adapt to their container size.\n      _initializerDefineProperty(this, \"_windowWidth\", _descriptor9, this);\n      _initializerDefineProperty(this, \"_windowHeight\", _descriptor10, this);\n      _defineProperty(this, \"_pollId\", void 0);\n      /* COOKIES:: (react when changed)*/\n      _initializerDefineProperty(this, \"cookie_consent\", _descriptor11, this);\n      _initializerDefineProperty(this, \"cookie_allowStatistics\", _descriptor12, this);\n      _initializerDefineProperty(this, \"cookie_allowVideo\", _descriptor13, this);\n      /**\n       * scrollToTop() skipItIfAlreadyScrolling argument is meant to set optional default scrolling like the one in application's route : if some other part already set a scrolling the ones with skipItIfAlreadyScrolling == true will not be handled.\n       */\n      _defineProperty(this, \"_tout_sIV\", void 0);\n      /* popup-to-extend registers the popup contents it inserts to avoid bugs if a popup component is inserted more than 1 time: */\n      _defineProperty(this, \"_insertedPopupComponent\", []);\n    }\n    init() {\n      super.init(...arguments);\n      this._sizePoller();\n      if (typeof FastBoot == 'undefined')\n        // don't call it in fastboot, call it only in js-enabled navigator context\n        document.body.classList.add(...this.sizeClass);\n    }\n    willDestroy() {\n      if (!this._pollId) this.pollService.stopPoll(this.pollId);\n      super.willDestroy(...arguments);\n    }\n    async _sizePoller() {\n      // couldn't we use observers instead of a setInterval ?\n      const setS = () => {\n        this._windowHeight = window.innerHeight;\n        if (this._windowWidth != window.innerWidth) {\n          this._windowWidth = window.innerWidth;\n          document.body.classList.add(...this.sizeClass);\n        }\n      };\n      setS();\n      const foo = this.isPhone;\n      if (!this._pollId) {\n        this._pollId = this.pollService.addPoll({\n          interval: 2000,\n          callback: setS\n        });\n      }\n      /*\n      while(){\n      \tawait new Promise((resolve) => setTimeout(resolve, 1000));\n      }*/\n    }\n\n    /**\n     * Actually just a simple util to add 'px' at the end of a value if no unit is included\n     * but could be used in the future to change cssDim to any device-related value.\n     */\n    addUnit(cssDim) {\n      // console.error('LinkPreviewService.addUnit(', cssDim,')', cssDim + ((!cssDim.includes || !(cssDim=='auto' || cssDim.includes('px') || cssDim.includes('%') || cssDim.includes('em') || cssDim.includes('rem')) ) ? 'px' : ''));\n      return cssDim + (!cssDim.includes || !(cssDim == 'auto' || cssDim.includes('px') || cssDim.includes('%') || cssDim.includes('em') || cssDim.includes('rem')) ? 'px' : '');\n    }\n\n    /**\n     * Convert any dimension unit to a px size.\n     * Uses the actual CSS sizes.\n     *\n     * @param size: <string> any size with any unit rem, em, %, vw etc.\n     * @param containerOrient: <string> -default to 'W'- optional either 'W' or 'H' to get the container dimension to us for relative computing => though optional it is better to provide it based on the size param direction.\n     * @param container: <DOMElement> -default to document.body- optional html element to compute a relative size.\n     * @return <string> size ending with 'px'.\n     */\n    getPixelSize(size, containerOrient, container) {\n      /*\n      let targetH = this._measureHTML( '<br>'.repeat(this.args.lines) ).H;\n      const cstyle = window.getComputedStyle(this.containerContext.parentElement);\n      const lineHeight = cstyle.getPropertyValue('line-height') ? parseInt( cstyle.getPropertyValue('line-height') ) : 0;\n      */\n      size = (size + '').toLowerCase(); // must be string here\n      const units = ['auto', 'rem', 'em', '%', 'vw', 'vh', ''],\n        unit = units.find(u => size.endsWith(u)),\n        isContainerRelative = unit == 'em' || unit == '%' || unit == 'auto';\n      this.debug.error(\"getPixelSize(\", size, containerOrient, container, \")\\nunit=\", unit);\n      size = size.substr(0, size.length - unit.length);\n      // this.debug.log(\"getPixelSize(\", size, containerOrient, container,\")\\nunit=\", unit);\n      if (!unit || unit == 'px' || unit == 'auto')\n        // we don't bother to compute 'auto' : too complicated\n        return size;\n      // this.debug.log(\"2 getPixelSize(\", size, containerOrient, container,\")\\nunit=\", unit);\n      containerOrient = (unit == 'vw' || unit == 'vh' ? unit == 'vh' ? 'H' : 'W' : containerOrient ?? 'W').toUpperCase();\n      const useCtr = unit == 'vw' || unit == 'vh' ? document.body : isContainerRelative ? container ?? document.body : document.body,\n        cstyle = window.getComputedStyle(useCtr),\n        csize = unit == 'rem' || unit == 'em' ? cstyle.fontSize : containerOrient === 'H' ? useCtr.offsetHeight ?? parseInt(cstyle.height) : useCtr.offsetWidth ?? parseInt(cstyle.width);\n      if (unit == 'rem' || unit == 'em') {\n        const ret = !isNaN(size) && size && size > 0 ? size * (cstyle.fontSize.toLowerCase().endsWith('px') ? cstyle.fontSize.substr(0, cstyle.fontSize.length - 2) : cstyle.fontSize) : null;\n        // this.debug.error( \"getPixelSize \", cstyle.fontSize.toLowerCase().endsWith('px') ? cstyle.fontSize.substr(0, cstyle.fontSize.length - 2) : cstyle.fontSize );\n        this.debug.log(\"getPixelSize \", size, containerOrient, container, useCtr, unit, \"\\ncstyle=\", cstyle, '\\ncontainer size=' + csize, '\\nreturn ', ret);\n        return ret;\n      } else if (unit == '%') {\n        const ret = !isNaN(size) && size && size > 0 ? size * (csize / 100) : null;\n        // this.debug.error( \"getPixelSize \", cstyle.fontSize.toLowerCase().endsWith('px') ? cstyle.fontSize.substr(0, cstyle.fontSize.length - 2) : cstyle.fontSize );\n        this.debug.log(\"getPixelSize \", size, containerOrient, container, useCtr, unit, \"\\ncstyle=\", cstyle, '\\ncontainer size=' + csize, cstyle.width + \", \" + useCtr.offsetWidth + '\\nreturn ', ret);\n        return ret;\n      }\n      return size + unit;\n    }\n    updatedCookiesPreferences(cookieConsentStatistics, cookieConsentVideo) {\n      this.cookie_consent = true;\n      this.cookie_allowStatistics = cookieConsentStatistics;\n      this.cookie_allowVideo = cookieConsentVideo;\n    }\n    /* ::COOKIES */\n\n    /**\n     * This is a generic handler for redirecting from the queryParams\n     * either 'route' = 'my.route.to-follow' + r = [param1, param2...]\n     * or 'url' = document.location\n     * or 'route' = 'my.route.to-follow' + 'url'\n     *\n     * like http://www.civocracy.local:4201/resetPassword?uid=9133&token=BByaN3T-GSY0X9C8JPloyX69YgKs-5-SchhgudHfyeI&route=community.participation.resources.index&r%5B0%5D=civov7&r%5B1%5D=civov7\n     */\n    followRedirectParams() {\n      const tp = new URL(document.location.href),\n        searchParams = tp.searchParams,\n        route = searchParams.get('route'),\n        url = searchParams.get('url');\n      let segments = searchParams.get('r');\n      if (segments) segments = segments.split(',');\n      // const searchParams = document.location.search;\n      // console.log('ICI:', document.location.search, tp.searchParams);\n      // console.log('ICI:2', route, url, segments);\n      // for (const key of searchParams.keys()) {\n      // \tconsole.log(key);\n      // }\n      if (url && (!segments || !segments.length)) {\n        const urlO = new URL(url);\n        if (urlO.hostname.includes('civocracy.org')) {\n          const searchParams = urlO.searchParams,\n            queryParams = {};\n          for (const key of searchParams.keys()) {\n            // console.log(key);\n            queryParams[key] = searchParams.getAll(key); // gets an array of values if multiple\n          }\n          // params for segments of the route:\n          segments = urlO.pathname.split('/');\n          /* Redirect */\n          segments.shift(); // [0] is \"\" => remove it !\n          const params = [...segments];\n          if (queryParams && queryParams.length) params.push({\n            queryParams: queryParams\n          });\n          // this.router.transitionTo( route, segments, queryParams );\n          this.router.transitionTo(route, ...params);\n        } else {\n          /* Redirect */\n          document.location = url;\n        }\n        return;\n      } else if (route) {\n        if (!segments || !segments.length) this.router.transitionTo(route);\n        const params = [...segments];\n        // if(queryParams && queryParams.length)\n        // \tparams.push( { queryParams: queryParams } );\n        // this.router.transitionTo( route, segments, queryParams );\n        this.router.transitionTo(route, ...params);\n        return;\n      }\n      /* Redirect fallback */\n      this.router.transitionTo('communities');\n    }\n    get isTopHeaderShown() {\n      if (this.isPhone) return true;\n      return document.getElementById('topHeader').classList.contains('shown');\n    }\n    showTopHeader(removeForcedHide) {\n      if (this.isPhone) return false;\n      // document.getElementById('topHeader').style.top = \"0\";\n      if (!removeForcedHide && document.getElementById('topHeader').classList.contains('forced-hide')) this.debug.error('Top-header is forced hidden : device.showTopHeader() has no effect');\n      if (removeForcedHide) this.removeForcedHideTopHeader();\n      if (_environment.default.topHeaderFixed) return;\n      document.getElementById('topHeader').classList.replace('hidden', 'shown');\n      return true;\n    }\n    removeForcedHideTopHeader() {\n      if (this.isPhone) return false;\n      _environment.default.topHeaderFixed = 0;\n      document.getElementById('topHeader').classList.remove('forced-hide');\n    }\n    hideTopHeader(forcedHide) {\n      if (this.isPhone) return false;\n      // document.getElementById('topHeader').style.top = \"-9.8rem\";\n      document.getElementById('topHeader').classList.replace('shown', 'hidden');\n      if (forcedHide) {\n        document.getElementById('topHeader').classList.add('forced-hide');\n        _environment.default.topHeaderFixed = 1;\n      }\n      return true;\n    }\n    async scrollToTop(skipItIfAlreadyScrolling, redoDelay = 1000) {\n      if (typeof FastBoot != 'undefined')\n        // don't call it in fastboot, call it only in js-enabled navigator context\n        return;\n      // if( !document.body.scrollTop ){\n      // \treturn new Promise((resolve, reject) => reject);\n      // }\n      if (skipItIfAlreadyScrolling && this._tout_sIV) {\n        return;\n      }\n      (0, _runloop.cancel)(this._tout_sIV);\n      this._tout_sIV = null;\n      // trace who's calling: this.debug.error('device service : scrollToTop()');\n      window.scrollTo({\n        top: 0,\n        left: 0,\n        behavior: 'smooth'\n      });\n      // return new Promise((resolve, reject) => {\n      // \tlater(this, resolve, 1000); // give some time for the scroll to be done\n      // });\n      return new Promise((resolve, reject) => {\n        this._tout_sIV = (0, _runloop.later)(this, () => {\n          window.scrollTo({\n            top: 0,\n            left: 0,\n            behavior: 'smooth'\n          });\n          (0, _runloop.later)(this, resolve, 1000); // give some time for the scroll to be done\n        }, redoDelay);\n      }).then(() => {\n        this._tout_sIV = null;\n      });\n    }\n\n    /**\n     * device.scrollIntoView(element, block = \"start\", inline = \"nearest\", behavior = \"smooth\", redoDelay = 1000)\n     * This is the frontend for page scrolling.\n     * It provides:\n     * - a \"redo\" feature : this is because when the scroll happens if the page is not all loading the scroll would be misplaced\n     * - a Promise returned so that the redo can be awaited or thened to do some action.\n     *\n     * https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView\n     * eg: this.device.scrollIntoView(document.querySelector('.questionnaire__breadcrumbs'), \"start\", \"nearest\");\n     */\n    async scrollIntoView(element, block = \"center\", inline = \"nearest\", behavior = \"smooth\", redoDelay = 1000, noSecondChance = false) {\n      const svelement = element;\n      if (typeof element == 'string') element = element.startsWith('#') || element.startsWith('.') ? document.querySelector(element) : document.getElementById(element);\n      if (!element || !element.tagName) {\n        if (!noSecondChance) {\n          // maybe the element was not rendered yet ?\n          return new Promise((resolve, reject) => {\n            this._tout_sIV = (0, _runloop.later)(this, async () => {\n              arguments[5] = true;\n              await this.scrollIntoView(...arguments);\n              resolve();\n            }, 100);\n          });\n        } else {\n          this.debug.error(!element ? 'device service : scrollIntoView element arg {' + svelement + '} is null.' : 'device service : scrollIntoView element is not a DOMElement.', element);\n          return new Promise((resolve, reject) => reject);\n        }\n      }\n      (0, _runloop.cancel)(this._tout_sIV);\n      switch (block) {\n        case 'middle':\n          block = \"center\";\n          break;\n        case 'top':\n          block = \"start\";\n          break;\n        case 'bottom':\n          block = \"end\";\n          break;\n        case 'center':\n          break;\n        case 'start':\n          break;\n        case 'end':\n          break;\n        default:\n          block = \"center\";\n          break;\n      }\n      this.debug.error('device service : scrollIntoView(', element, ', ', block, ', ', inline, ', ', behavior, ', ', redoDelay, ')');\n      const opts = {\n        behavior: behavior,\n        block: block,\n        inline: inline\n      };\n      element.scrollIntoView(opts);\n      // this._tout_sIV = later(this, ()=>{element.scrollIntoView(opts);}, 1000);\n      // return this._tout_sIV;\n\n      return new Promise((resolve, reject) => {\n        this._tout_sIV = (0, _runloop.later)(this, () => {\n          element.scrollIntoView(opts);\n          (0, _runloop.later)(this, resolve, 1000); // give some time for the scroll to be done\n        }, redoDelay);\n      });\n    }\n\n    /**\n     * This is the device specific popup / side-panel opener !\n     *\n     * It works out-of-the-box with any component extended from app/components/popup-to-extend/popup-to-extend.js\n     *\n     * @popupLabel is the popupLabel declared by the specific popup component.\n     * @model is a free value (mostly used as an object) that the specific popup component uses for any specific internal usage.\n     *\n     * It automatically chooses to show either a phone side-panel or a desktop popup.\n     * It returns a promise that can be used with either await or .then() for chaining a behaviour that can be controlled by the value returned by the specific popup component.\n     * The resolving of the promise returns either null or any return value from the specific popup component.\n     */\n    openPopup(popupLabel, model, closeOnClickOutside) {\n      popupLabel = popupLabel.replaceAll('.', '-');\n      if (this.isPhone) return this.phone.openPhoneSlide(popupLabel, model, closeOnClickOutside ?? model?.closeOnClickOutside ?? true, true);else return this.popup.openPopup(\"popup_\" + popupLabel, model, closeOnClickOutside ?? model?.closeOnClickOutside ?? true, true);\n    }\n    openLoginPopup(isRegistration, closeOnClickOutside = true) {\n      if (this.isPhone) return this.popup.openLoginSlide(isRegistration);else return this.popup.openLoginPopup(isRegistration);\n    }\n    openConfirmExitSettings(model = {}, closeOnClickOutside = false) {\n      this.debug.error('openConfirmExitSettings() changes report:\\n', model.managedModels ? this.modelWatcher.getModelChangesDbgReport(model.managedModels) : null, '\\nmodelWatcher:', this.modelWatcher.getChangesDbgReport());\n      return this.openPopup('confirm-exit-settings', model, closeOnClickOutside);\n    }\n\n    /*\n     * v71 : SidePanel and PhonePage ar now merged in one logic (equivalent to the popup logic) : Phoneslide\n     * Note that device.openPopup(label, model); auto adapt the call to the device.\n     *\n     * Both are using phoneslide-to-extend component logic though rendered in #sidePanel or in #phonePage and the frontends to display them are in the device service.\n     * Wether one is a panel or a page is controlled by the phoneslide-XXXXX component implementation.\n     *\n     * The 2 are still different in their display :\n     *\n     * - The side-panel is an overlaying page above the actual page. It is mostly used as a replacement for drop-downs on phones. It's (dis)appearance may be animated.\n     *\n     * - The phone-page replaces the actual page (not overlaying it). It is part of the navigation flow and mostly removes the top-header to display features contents (like passing a questionnaire etc).\n     *\n     */\n    openPhoneSlide(phoneslideLabel, model, closeOnClickOutside) {\n      if (phoneslideLabel) phoneslideLabel = phoneslideLabel.replaceAll('.', '-');\n      this.scrollToTop();\n      return this.phone.openPhoneSlide(phoneslideLabel, model, closeOnClickOutside ?? model?.closeOnClickOutside ?? true, true);\n    }\n    openPhonePage(phoneslideLabel, model, closeOnClickOutside) {\n      if (phoneslideLabel) phoneslideLabel = phoneslideLabel.replaceAll('.', '-');\n      this.scrollToTop();\n      return this.phone.openPhonePage(/*\"popup_\" +*/phoneslideLabel, model, closeOnClickOutside ?? model?.closeOnClickOutside ?? true, true);\n    }\n    closeAndLaunchCallback(returnValue, clickEvt, thisType, thisLabel) {\n      if (thisLabel) thisLabel = thisLabel.replaceAll('.', '-');\n      return this.close(returnValue, clickEvt, thisType, thisLabel);\n    }\n\n    // disregarding the type : close the last opened overlaying content\n    closePopup(returnValue, clickEvt, thisType, thisLabel) {\n      if (thisLabel) thisLabel = thisLabel.replaceAll('.', '-');\n      return this.popup.close(returnValue, clickEvt, thisType, thisLabel);\n    }\n\n    // close the last opened popup content\n    closeLastPopup(returnValue, clickEvt, thisLabel) {\n      if (thisLabel) thisLabel = thisLabel.replaceAll('.', '-');\n      return this.popup.close(returnValue, clickEvt, 'popup', thisLabel);\n    }\n\n    // close the last opened Phoneslide content\n    closeLastPhoneslide(returnValue, clickEvt, thisLabel) {\n      if (thisLabel) if (thisLabel) thisLabel = thisLabel.replaceAll('.', '-');\n      return this.popup.close(returnValue, clickEvt, ['phone-page', 'side-panel'], thisLabel);\n    }\n\n    // close the last opened side-panel content\n    closeLastSidePanel(returnValue, clickEvt, thisLabel) {\n      if (thisLabel) thisLabel = thisLabel.replaceAll('.', '-');\n      return this.popup.close(returnValue, clickEvt, 'side-panel', thisLabel);\n    }\n\n    // close the last opened phone-page content\n    closeLastPhonePage(returnValue, clickEvt, thisLabel) {\n      if (thisLabel) thisLabel = thisLabel.replaceAll('.', '-');\n      return this.popup.close(returnValue, clickEvt, 'phone-page', thisLabel);\n    }\n    getModel(slideLabel, slideType) {\n      slideLabel = slideLabel.replaceAll('.', '-');\n      return this.popup.getModel(slideLabel, slideType);\n    }\n    clearInsertedPopups() {\n      // used by the device service when switching from a desktop/tab layout (using popups) to a phone one (using phoneslides).\n      this._insertedPopupComponent = [];\n    }\n    clearInsertedPhoneslides() {\n      // used by the device service when switching from a phone one (using phoneslides) to a desktop/tab layout (using popups).\n      return this.phone.clearInsertedPhoneslides();\n    }\n    _registerInsertedPopup(popupLabel) {\n      popupLabel = popupLabel.replaceAll('.', '-');\n      this._insertedPopupComponent.push(popupLabel);\n    }\n    isPopupOpened(label = null, modelType = null) {\n      return this.popup.isPopupOpened(label, modelType);\n    }\n    isPopupInserted(popupLabel) {\n      popupLabel = popupLabel.replaceAll('.', '-');\n      return this._insertedPopupComponent.includes(popupLabel);\n    }\n\n    /* phoneslide-to-extend registers the phoneslides contents it inserts to avoid bugs if a phoneslide component is inserted more than 1 time: */\n    _registerPhoneslide(label, type, container) {\n      return this.phone._registerPhoneslide(label, type, container);\n    }\n    isPhoneslideInserted(slideLabel) {\n      return this.phone.isPhoneslideInserted(slideLabel);\n    }\n\n    /* Informations about the current device/screen: */\n    get availableScreenWidth() {\n      return this._windowWidth;\n    }\n    get availableScreenHeight() {\n      return window.innerHeight;\n    }\n\n    // @computed('_windowWidth')\n    get isPhone() {\n      // console.log('isPhone', (this._windowWidth < config.breakpoints.phone), this._windowWidth,  '<', config.breakpoints.phone)\n      if (this._windowWidth < _environment.default.breakpoints.phone) {\n        this.clearInsertedPopups();\n        return true;\n      }\n      this.clearInsertedPhoneslides();\n      return false;\n      // console.log('device service isPhone ', this.CQ, this.CQ.features)\n      // if (!this.CQ || !this.CQ.features) -- we stopped using CQ...\n      return this._windowWidth < _environment.default.breakpoints.phone;\n      // console.log('device service isPhone ', this.CQ, this.CQ.features, 'return ' + this.CQ.features.glob_phone);\n      return this.CQ.features.glob_phone;\n    }\n    get isDesktop() {\n      return this._windowWidth >= _environment.default.breakpoints.tabLand;\n    }\n    get isTablet() {\n      // if (!this.CQ || !this.CQ.features) -- we stopped using CQ...\n      return this._windowWidth >= _environment.default.breakpoints.phone && this._windowWidth <= _environment.default.breakpoints.tabLand;\n      return this.CQ.features.glob_tablet;\n    }\n\n    // More format specs:\n    get isTabPort() {\n      // if (!this.CQ || !this.CQ.features) -- we stopped using CQ...\n      return this._windowWidth >= _environment.default.breakpoints.phone && this._windowWidth < _environment.default.breakpoints.tabPort;\n      return this.CQ.features.glob_tabPort;\n    }\n    get isTabLand() {\n      // if (!this.CQ || !this.CQ.features) -- we stopped using CQ...\n      return this._windowWidth >= _environment.default.breakpoints.tabPort && this._windowWidth < _environment.default.breakpoints.tabLand;\n      return this.CQ.features.glob_tabLand;\n    }\n    get isNormalDesktop() {\n      return this._windowWidth >= _environment.default.breakpoints.tabLand && this._windowWidth < _environment.default.breakpoints.bigDesktop;\n    }\n    get isBigDesktop() {\n      // if (!this.CQ || !this.CQ.features) -- we stopped using CQ...\n      return this._windowWidth >= _environment.default.breakpoints.bigDesktop;\n      return this.CQ.features.glob_bigDesktop;\n    }\n    get sizeClass() {\n      // alert(\"sizeClass():\" + this.isPhone);\n      if (this.isPhone) return ['layout-phone'];\n      if (this.isTabPort) return ['layout-tablet', 'layout-tablet-port'];\n      if (this.isTabLand) return ['layout-tablet', 'layout-tablet-land'];\n      if (this.isNormalDesktop) return ['layout-desktop', 'layout-normal-desktop'];\n      if (this.isBigDesktop) return ['layout-desktop', 'layout-big-desktop'];\n      return ['layout-desktop'];\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"debug\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"popup\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"phone\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"modelWatcher\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"cookies\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"pollService\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"CQ\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"_windowWidth\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"_windowHeight\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"cookie_consent\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.cookies.read('cookieConsent') == \"true\";\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"cookie_allowStatistics\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.cookies.read('cookieConsentStatistics') == \"true\";\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"cookie_allowVideo\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return this.cookies.read('cookieConsentVideo') == \"true\";\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"sizeClass\", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, \"sizeClass\"), _class.prototype), _class);\n});","define(\"zeppelin-architectes/services/error-ember-consumer\", [\"exports\", \"@ember/service\", \"@ember/application\", \"@ember/object\", \"@ember/object/evented\", \"zeppelin-architectes/config/environment\", \"rsvp\"], function (_exports, _service, _application, _object, _evented, _environment, _rsvp) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7; // import Ember from 'ember';\n  0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@ember/application\",0,\"@ember/object\",0,\"@ember/object/evented\",0,\"zeppelin-architectes/config/environment\",0,\"rsvp\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let ErrorConsumerService = _exports.default = (_dec = (0, _service.inject)('user'), _dec2 = (0, _service.inject)('error-ember-listener'), _class = class ErrorConsumerService extends _service.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"store\", _descriptor, this);\n      _initializerDefineProperty(this, \"intl\", _descriptor2, this);\n      _initializerDefineProperty(this, \"toast\", _descriptor3, this);\n      _initializerDefineProperty(this, \"userService\", _descriptor4, this);\n      _initializerDefineProperty(this, \"debug\", _descriptor5, this);\n      _initializerDefineProperty(this, \"errorEmberListener\", _descriptor6, this);\n      _initializerDefineProperty(this, \"router\", _descriptor7, this);\n      /*config:*/\n      _defineProperty(this, \"reportFacebookLoginErrors\", true);\n      _defineProperty(this, \"reportCloudinaryErrors\", true);\n      /*:config*/\n      _defineProperty(this, \"application_route\", null);\n      _defineProperty(this, \"is_sendingReport\", false);\n      _defineProperty(this, \"havePreviousRouteReopened\", false);\n      //this is to detect if backend is not available\n      _defineProperty(this, \"bsodIsRendered\", false);\n      //descriptors = computed(() => []);\n      _defineProperty(this, \"descriptors\", []);\n      _defineProperty(this, \"_errorReportsSent\", 0);\n      _defineProperty(this, \"_errorReportsSentMax\", 6);\n      _defineProperty(this, \"url_prev\", null);\n      _defineProperty(this, \"url_cur\", null);\n      _defineProperty(this, \"urlObs\", (0, _object.observer)('document', function () {\n        if (this.url_cur === document.location.toString()) return;\n        this.url_prev = this.url_cur;\n        this.url_cur = document.location.toString();\n      }));\n    }\n    init() {\n      //console.log('error-ember-consumer init()', trace());\n      super.init(...arguments);\n      // \t\tthis.wsodComponent = 'ember-error-handler/wsod-screen-'+config.environment;\n      this.set('url_cur', document.location.toString());\n      //console.log(\"document.location:\", document.location);\n      this.set('url_prev', document.referrer);\n      //console.log(\"document.referrer:\", document.referrer);\n      // this.errorEmberListener.init(...arguments);\n      // \t\tthis.errorEmberListener.listen();\n    }\n    _descriptorNormalize(descriptor, message, file, line, column) {\n      // console.log(\"_descriptorNormalize(\", descriptor, \", \", message, \", \", file, \", \", line, \", \", column, \")\");\n      //if descriptor is an array or string or object with no get() method, we ensure here the consume() method will not bug out...\n      if (descriptor.isNormalized) return descriptor;\n      if (descriptor.error && descriptor.error.isNormalized) return descriptor.error;\n      // console.log('_descriptorNormalize A :', descriptor, '\\n, message=', message, '\\n, file=', file, '\\n, line=', line, '\\n, column=', column);\n      let d2 = {\n        source: 'N/A Unknown',\n        isError: true,\n        plainText: '',\n        error: {\n          message: '',\n          stack: '',\n          name: '',\n          cause: '',\n          fileName: '',\n          lineNumber: '',\n          colNumber: ''\n        }\n        /*\n         *\tget:function(prop){return eval('this.'+prop+';');},\n         *\tset:function(prop, value){\n         *\t\tconsole.log('SET this.'+prop+' = \"'+value+'\";');\n         \t//eval('this.'+prop+' = \"'+value+'\";');\n        \tthis[prop] = value;\n        }\n        */\n      };\n      if (typeof descriptor === 'string') {\n        //For Ember 3 this is a send action bubbling normally, not an error (to be confirmed and mitigated if needed).\n        d2.error.message = descriptor;\n        d2.isError = false;\n      } else {\n        let elType = (typeof descriptor).toLowerCase();\n        if (elType === 'object' || descriptor.length !== undefined) {\n          //object or array\n          Object.entries(descriptor).forEach(([i, v]) => {\n            // console.log('_descriptorNormalize A - d2.'+i+'=', v, '{'+(typeof v)+'}');\n            if (i === 'error') {/*do nothing*/} else if (v && typeof v == 'object') {\n              d2[i] = \"[\\n\";\n              let entries = Array.from(v);\n              entries.forEach((item, idx) => {\n                // console.log('_descriptorNormalize A1', item, idx);\n                if (item && typeof item == 'object') {\n                  d2[i] += \" \" + idx + \" = [\\n\";\n                  // \t\t\t\t\t\t\t\tlet entries2 = Array.from(item);\n                  // \t\t\t\t\t\t\t\tentries2.forEach((item2, idx2) => {\n                  Object.entries(item).forEach(([idx2, item2]) => {\n                    // console.log('_descriptorNormalize A2', item2, idx2);\n                    d2[i] += \" \" + idx2 + \"=\" + item2.toString() + \"\\n\";\n                  });\n                  d2[i] += \"]\";\n                } else if (item) d2[i] += idx + \"=\" + item.toString();\n              });\n              d2[i] += \"]\";\n            } else if (v) d2[i] = v.toString();else d2[i] = v;\n          });\n          if (descriptor.message) d2.error.message = descriptor.message;\n          if (descriptor.stack) d2.error.stack = descriptor.stack;\n          if (descriptor.name) d2.error.name = descriptor.name;\n          if (descriptor.cause) d2.error.cause = descriptor.cause;\n          if (descriptor.fileName) d2.error.fileName = descriptor.fileName;\n          if (descriptor.lineNumber) d2.error.lineNumber = descriptor.lineNumber;\n          if (descriptor.colNumber) d2.error.colNumber = descriptor.colNumber;\n        } else if ((typeof descriptor).toLowerCase() === 'string') {\n          //error string\n          d2.error.stack = descriptor;\n        }\n      }\n      /*}else{\n      console.log('_descriptorNormalize B');\n      \td2 = descriptor;\n      \td2.error = descriptor;\n      }*/\n      d2.isNormalized = true;\n      // console.log('_descriptorNormalize C(', descriptor, '\\n, message=', message, '\\n, file=', file, '\\n, line=', line, '\\n, column=', column, ')\\nd2=', d2)\n      return d2;\n    }\n    consume(descriptor, errorMessage, is_fatal) {\n      // \t\tthis.debug.error(\"service ember-error-consumer CONSUME descriptor=\", descriptor);\n      // alert('LA');\n      if (!descriptor.isNormalized) descriptor = this._descriptorNormalize(descriptor);\n      //let errorMessage = descriptor;\n      // \t\tlet is_fatal = false; //set to true and reported to the backend when the BSOD has been displayed => should send an immediate mail notification to debuggers !\n      const isEarlyCatch = descriptor.earlyCatch; //special case to handle backend not responding to initial model store.query and display the maintenance page\n      // console.log(\"consume(\", descriptor, \")\");\n      if (descriptor) {\n        if (descriptor.message) {\n          errorMessage = descriptor.message;\n        } else if (descriptor.error.message) {\n          errorMessage = descriptor.error.message;\n        }\n        if (descriptor.errors && typeof descriptor.errors == 'string') {\n          errorMessage += '\\nerrors=' + descriptor.errors;\n        } else if (descriptor.errors && typeof descriptor.errors == 'object') {\n          //errors list\n          // console.log(\"descriptor.errors:\", descriptor.errors);\n          let errors = Array.from(descriptor.errors);\n          errors.forEach((item, idx) => {\n            // console.log(\"{\"+(typeof descriptor.errors)+\"} descriptor.errors[\"+idx+\"]:\", item);\n            errorMessage += '\\nerror[' + idx + ']:' + (item.title !== undefined ? '\\n&nbsp;&nbsp;title:&nbsp;' + item.title : '') + (item.detail !== undefined ? '\\n&nbsp;&nbsp;detail:&nbsp;' + item.detail : '') + (item.status !== undefined ? '\\n&nbsp;&nbsp;status:&nbsp;' + item.status : '') +\n            // \t\t\t\t\tnot interesting : ( (item.detail!==undefined) ? '\\n detail:'+item.detail : '' )+\n            '\\n';\n          });\n        }\n      }\n      if (!errorMessage) errorMessage = 'N/A';\n      errorMessage = errorMessage.toString();\n      if (this.debug.isDebugger)\n        //for normal users we still show the bubble (search for errorBubble below in the code) for strong errors as it helps us to find and fix bugs when they report them - for debuggers we show the bubble for any erros, early in the method\n        this.debug.errorBubble(errorMessage, 'Error');\n      /*\n      this.debug.notify(\n      \ttrue,\n      \t'Consuming error - havePreviousRouteReopened : ' +\n      \t\tthis.havePreviousRouteReopened +\n      \t\t'\\nmessage(s)=' +\n      \t\terrorMessage +\n      \t\t'\\ndescriptor=',\n      \tdescriptor\n      );\n      */\n\n      const retB = true; //set to true to let the original error pop in the console, to false for not\n      if (this.is_sendingReport) {\n        this.debug.error('Redondance! - service error-console-consumer -\\n', 'source:', descriptor.source, ' -\\nerror string:', descriptor.isError ? descriptor.plainText : descriptor.error);\n        return retB;\n      }\n      // this.debug.notify('is_sendingReport to true !');\n      this.is_sendingReport = true;\n      this.descriptors.pushObject(descriptor);\n      const descriptors = this.descriptors;\n      /*Skipping errors >>>>*/\n      let skipErrorSending = false; //pass it to true to not send the report through the backend (still allows the error to be reported in the console if debugmode is on)\n      let redirectAfterSendingError = null; // to redirect the route after sending the error (or not sending it depending on skipErrorSending) if not null this must be the array of arguments to pass as this.router.transitionTo( ...redirectAfterSendingError )\n      let toastErrorAfterSendingError = null; //error message or {title:\"\", message:\"\"} to show as a toast bubble\n      if (descriptor.error) {\n        /**/\n        if (this.errorEmberListener.hasRouteReopenAction && descriptor.error && errorMessage && errorMessage.includes('The adapter operation was aborted')) {\n          this.is_sendingReport = false;\n          return retB; //This is a too much generic error that can happen after a big bug (and this bug should be consumed before then we don't need to catch it here) or it can be a refresh from the browser at a bad moment for Ember and it should not be reported also\n        }\n        /**/\n\n        if (descriptor.error && descriptor.error.consoleMessage && !descriptor.error.consoleMessage.includes && !descriptor.error.consoleMessage.includes('back-end error')) {\n          this.is_sendingReport = false;\n          return retB; /*Here we dont report the authentication errors except if the string \"back-end error\" is present. Any other error is just a failed authentication handled normally (not exception)*/\n        }\n        if (errorMessage) {\n          if (!this.reportFacebookLoginErrors && errorMessage.includes('User canceled authorization') && !errorMessage.includes('Facebook Auth BUG !')) {\n            //OAuth2 - Facebook\n            skipErrorSending = true;\n            // \t\t\t\t\tdescriptor.set('error.message', 'Facebook user canceled auth ! Authentication failed.');\n          }\n          if (!this.reportFacebookLoginErrors && errorMessage.includes('not received before the window closed')) {\n            this.is_sendingReport = false;\n            return retB; /*This is a Torii error that can be related to the user closing the Keycloak popup window or that can be a real KC error => we actually skip them but if any problem : unskip it*/\n          }\n          if (errorMessage.includes('TransitionAborted')) {\n            //a lot of \"normal\" errors of this kind can happen => no report!\n            this.is_sendingReport = false;\n            return retB;\n          }\n          if (this.reportCloudinaryErrors && errorMessage.includes('Cloudinary: ')) {\n            //Cloudinary uploads (Cloudinary service) : should be about wrong file, we don't want to know about it\n            this.is_sendingReport = false;\n            return retB;\n          }\n        }\n      }\n      /*<<<< Skipping errors*/\n      this.havePreviousRouteReopened = descriptor.source === 'ember-ApplicationRoute.reopen' || isEarlyCatch;\n\n      //Detecting if a backend problem is the reason of this error and if one test is true display the BSOD (maintenance message for production, error display for development and local envs)\n      // console.log(\"errorMessage=\", errorMessage);\n\n      let\n        //err1 = (descriptor.source===\"ember-route\" && descriptor.isError && descriptor.plainText.indexOf('hash.error')>=0 && errorMessage.indexOf('The adapter operation was aborted')>=0),\n        //while contentLoading = true the page is not rendered, meaning any BE error will result in hanging loading anim\n        err1 = document.contentLoading,\n        //any error when ember is loading/rendering the initial content will anyway stop any further execution ! => we display BSOD\n        err2 = (this.havePreviousRouteReopened || document.contentLoading) && errorMessage && errorMessage.indexOf('The backend responded with an error') >= 0,\n        // \t\t\tToo noisy : err3 = (errorMessage && errorMessage.indexOf('The adapter operation was aborted')>=0 )\n        err3 = false;\n      if (errorMessage && (errorMessage.includes(' 404') || errorMessage.includes('404 ')) && errorMessage.toLowerCase().includes('backend')) {\n        // v71 : the BE now returns a 204 \"No Content\" and not anymore a 404 when a request get no hits\n        // => 404 is really an error !!\n\n        //eg: Ember Data Request GET http://admin.civocracy.local:8000/api/communities/165 returned a 404\n        err1 = err2 = err3 = false; //no BSOD !\n        skipErrorSending = false;\n        redirectAfterSendingError = [];\n        redirectAfterSendingError[0] = 'communities';\n        toastErrorAfterSendingError = this.intl.t('bubble.notfound.page').toString();\n      }\n      // this.debug.error(\"service ember-error-consumer consume()\\nerr1=\", err1, \"\\n- err2=\", err2, \"\\n- err3=\", err3, \"\\nerrorMessage=\", errorMessage);\n\n      if (err1 || err2 || err3) {\n        //backend is off at website init\n        //Rendering template to issue a maintenance page\n        //this section may not be reliable... see bellow for backend failure screen display\n        is_fatal = true;\n        if (false && !this.bsodIsRendered) {\n          //! @REMOVED ! the BSOD is now only shown when the BE is really off and for that see beyond : when reporting an error and the BE responds wrongly\n          setTimeout(function () {\n            window.location.reload();\n          }, 60000); //we reload automaticaly the page every 60secs\n          let lookupKey;\n          const owner = (0, _application.getOwner)(this);\n          lookupKey = 'component:' + this.component;\n          const component = owner.lookup(lookupKey);\n          if (!component) {\n            throw Error(`Cannot instantiate wsod component '${lookupKey}'`);\n          }\n          lookupKey = 'template:components/' + this.component;\n          const layout = owner.lookup(lookupKey);\n          /*\n          console.log(\"lookupKey:\", lookupKey);\n          console.log(\"layout:\", layout);\n          console.log(\"component:\", component);\n          console.log(\"component.layout:\", component.layout);\n          */\n          component.descriptors = descriptors;\n          //component.set('message', errorMessage.replace(/\\n/g, \"<br>\\n\"));\n          component.set('debugMessage', errorMessage.replace ? errorMessage.replace(/\\n/g, '<br>\\n') : errorMessage);\n          // \t\t\t\tcomponent.set('debugMessage', descriptor.error.stack);\n          if (layout) {\n            component.set('layout', layout);\n          }\n          component.append();\n          this.set('bsodIsRendered', true);\n        }\n      } else if (err2) {\n        /*TODO\n         * Here we want to redirect to previous route if available (this needs implementing user service or a new application service to store the previous route and for this the route files will have to register the current route to the service).\n         * + an error will be displayed in the bubble : \"Oups something went wrong...\"\n         */\n        //this.get('application_route').redirectToPreviousPage(\"Oups something went wrong\");\n      }\n\n      //if( config.environment !== 'production' )\n      if (/*false &&*/this.debug.isDebugger) {\n        //unactivated! ember-error-listener already sends the error in the console\n        //Issuing console log in dev environment\n        // eslint-disable-next-line no-console\n\n        this.debug.error('service error-console-consumer -\\n', 'source:', descriptor.source, ' -\\nerror string:', descriptor.isError ? descriptor.plainText : descriptor.error);\n        const additionalData = descriptor.additionalData;\n        if (additionalData) {\n          // eslint-disable-next-line no-console\n          this.debug.warn('Additional data', additionalData);\n        }\n      }\n\n      /*We don't anymore show the errors to users... only debuggers and global-admins*/\n      if (!this.debug.isDebugger && this.userService.isGlobalAdmin && !skipErrorSending) {\n        //DEPRECATED: for normal users we still show the bubble for strong errors as it helps us to find and fix bugs when they report them - for debuggers we show the bubble for any errors, earlier in the method\n        this.toast.error(errorMessage, 'Error');\n        console.error(errorMessage);\n      }\n      if (descriptor.error) descriptor.error.referrer = Document.referrer;else descriptor.referrer = Document.referrer;\n\n      /* this.debug.getDbgErrorsStack() now handled that\n      \t\tif (this.debug._messagesRecordMode) {\n      \t\t\tif (this.debug._records) {\n      \t\t\t\tif (descriptor.error)\n      \t\t\t\t\tthis.debug._records.forEach((msg) => {\n      \t\t\t\t\t\tdescriptor.error.stack += msg.toString() + '\\n';\n      \t\t\t\t\t});\n      \t\t\t\telse\n      \t\t\t\t\tthis.debug._records.forEach((msg) => {\n      \t\t\t\t\t\tdescriptor.stack += msg.toString() + '\\n';\n      \t\t\t\t\t});\n      \t\t\t}\n      \t\t}\n      */\n      if (this.debug.isDebugger) {\n        this.debug.error(errorMessage);\n        let content = '<a class=\"closer\" style=\"font-weight:bold;cursor:pointer;\">X CLOSE</a><br>\\n' + 'Error ! (skipErrorSending:' + skipErrorSending + ')\\nerrorMessage:' + errorMessage + '\\nStack:\\n';\n        if (descriptor.error) content += descriptor.error.stack.toString() + '\\n';else content += descriptor.stack.toString() + '\\n';\n        // alert(content);\n        const logger = document.createElement('div');\n        logger.id = \"errorEmberConsumerLogger\";\n        logger.className = \"error-ember-consumer__logger\";\n        logger.innerHTML = content.replace(/\\n|\\r/g, '<br>\\n');\n        //document.body.insertBefore(logger, document.body.firstChild);\n        document.body.appendChild(logger);\n        logger.querySelector('.closer').addEventListener('click', function () {\n          this.style.display = 'none';\n        }.bind(logger));\n      }\n\n      //Sending query to backend to register the bug :\n      if (!skipErrorSending && this._errorReportsSent <= this._errorReportsSentMax && (true || _environment.default.environment !== 'production')) {\n        //we are sending, even in production !\n        this.sendErrorDescriptorToBackend(descriptor, errorMessage, is_fatal);\n        this._errorReportsSent = this._errorReportsSent + 1;\n        return retB;\n      } else this.debug.error('NOT SENDING REPORT!');\n      this.is_sendingReport = false;\n      // Redirect and/or toast a bubble\n      if (false && typeof redirectAfterSendingError == 'object') {\n        this.router.transitionTo(...redirectAfterSendingError).promise.finally(() => {\n          if (typeof toastErrorAfterSendingError == 'string') this.toast.error(toastErrorAfterSendingError);else if (typeof toastErrorAfterSendingError == 'array') this.toast.error(...toastErrorAfterSendingError);else if (typeof toastErrorAfterSendingError == 'object') this.toast.error(toastErrorAfterSendingError.message, toastErrorAfterSendingError.title);\n        });\n      } else if (toastErrorAfterSendingError != null) {\n        if (typeof toastErrorAfterSendingError == 'string') this.toast.error(toastErrorAfterSendingError);else if (typeof toastErrorAfterSendingError == 'array') this.toast.error(...toastErrorAfterSendingError);else if (typeof toastErrorAfterSendingError == 'object') this.toast.error(toastErrorAfterSendingError.message, toastErrorAfterSendingError.title);\n      }\n      return retB;\n    }\n\n    /*\n    \t'component-preproduction' = computed(function () {\n    \t\tthis.debug.error('error-console-consumer.js component-development');\n    \t\tlet wsodComponent = config['wsod-component-development'];\n    \t\tif (!wsodComponent) {\n    \t\t\twsodComponent = 'ember-error-handler/wsod-screen-development';\n    \t\t}\n    \t\treturn wsodComponent;\n    \t}),\n    \n    \t'component-development': computed(function () {\n    \t\tthis.debug.error('error-console-consumer.js component-development');\n    \t\tlet component = config['wsod-wsodComponent-development'];\n    \t\tif (!wsodComponent) {\n    \t\t\twsodComponent = 'ember-error-handler/wsod-screen-development';\n    \t\t}\n    \t\treturn wsodComponent;\n    \t}),\n    \n    \t'component-production': computed(function () {\n    \t\tthis.debug.error('error-console-consumer.js component-production');\n    \t\tlet wsodComponent = config['wsod-component-production'];\n    \t\tif (!wsodComponent) {\n    \t\t\twsodComponent = 'ember-error-handler/wsod-screen-production';\n    \t\t}\n    \t\treturn wsodComponent;\n    \t}),\n    \n    \twsodComponent: computed('environment', function () {\n    \t\tthis.debug.error('error-console-consumer.js wsodComponent');\n    \t\tlet wsodComponent = config['wsod-component'];\n    \t\t//this.wsodComponent = 'ember-error-handler/wsod-screen-'+config.environment;\n    \t\tif (!wsodComponent) {\n    \t\t\tconst env = this.environment;\n    \t\t\twsodComponent = this.get('wsodComponent-' + env);\n    \t\t}\n    \t\treturn wsodComponent;\n    \t}),\n    */\n    sendErrorDescriptorToBackend(descriptor, errorMessage, is_fatal) {\n      // can be called by external scripts to send reports to the BE without throwing error\n      // See debug service sendErrorDescriptorToBackend()\n      const _this = this;\n      const _iserror = descriptor.isError,\n        error = descriptor.error || descriptor;\n      const errorString = errorMessage;\n      let stack = error.stack ? error.stack : error.normalizedStack ? error.normalizedStack : 'N/A';\n      // https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Errors/Cyclic_object_value\n      stack = JSON.stringify(this.debug.getDbgErrorsStack()) + \"\\nJS_STACK::\\n\" + stack; //adding the history of previous debugService.error()\n      let fileName = error.fileName ? error.fileName : 'N/A';\n      const lineNumber = error.lineNumber ? error.lineNumber : 'N/A';\n      const columnNumber = error.columnNumber ? error.columnNumber : 'N/A';\n\n      /** /\n      this.debug.notify(\"Sending errorT:\", errorT);\n      this.debug.notify(\"Sending errorString:\", errorString);\n      this.debug.notify(\"Sending stack:\", stack);\n      this.debug.notify(\"Sending fileName:\", fileName);\n      this.debug.notify(\"Sending lineNumber:\", lineNumber);\n      this.debug.notify(\"Sending columnNumber:\", columnNumber);\n      /**/\n\n      let errorReport = this.store.createRecord('debug/frontend-error', {\n        fatal: is_fatal,\n        useragent: window.navigator.userAgent,\n        urlPrev: this.url_prev,\n        urlCur: this.url_cur,\n        locale: this.intl.locale,\n        user: this.userService.currentUser,\n        isDebugger: this.debug.isDebugger,\n        source: descriptor.source,\n        report: errorString,\n        stack: stack,\n        fileName: fileName,\n        lineNumber: lineNumber,\n        columnNumber: columnNumber\n      });\n      // this.debug.log('errorReport=', errorReport);\n      errorReport.save().catch(error => {\n        _this.debug.notify(true, 'Error from backend when reporting error', error, '\\n- havePreviousRouteReopened=', _this.havePreviousRouteReopened, '\\n- bsodIsRendered=', _this.bsodIsRendered, '\\n', _this.havePreviousRouteReopened && !_this.bsodIsRendered);\n        if (_this.havePreviousRouteReopened && !_this.bsodIsRendered) {\n          //The backend is off or has a major problem : after a first \"ApplicationRoute.reopen\" the report query also failed => backend is not responding\n          setTimeout(function () {\n            window.location.reload();\n          }, 60000); //we reload automaticaly the page every 60secs\n          is_fatal = true; //! anyway we can't report to the backend as it fails for that too... -- we should have message on the BSOD asking the user to report by mail to support@civocracy.org - or not...\n          let lookupKey;\n          const owner = (0, _application.getOwner)(_this);\n          lookupKey = 'wsodComponent:' + _this.wsodComponent;\n          const wsodComponent = owner.lookup(lookupKey);\n          if (!wsodComponent) {\n            throw Error(`Cannot instantiate wsod component '${lookupKey}'`);\n          }\n          lookupKey = 'template:wsodComponents/' + _this.component;\n          const layout = owner.lookup(lookupKey);\n          wsodComponent.set('descriptors', this.descriptors);\n          wsodComponent.set('debugMessage', errorMessage.replace(/\\n/g, '<br>\\n'));\n          // \t\t\t\t\t\twsodComponent.set('message', errorMessage.replace(/\\n/g, \"<br>\\n\"));\n          // \t\t\t\t\t\twsodComponent.set('debugMessage', descriptor.error.stack);\n          if (layout) wsodComponent.set('layout', layout);\n          wsodComponent.append();\n          _this.bsodIsRendered = true;\n        }\n        this.is_sendingReport = false;\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"store\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"intl\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"toast\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"userService\", [_dec], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"debug\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"errorEmberListener\", [_dec2], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n});","define(\"zeppelin-architectes/services/error-ember-listener\", [\"exports\", \"ember\", \"@ember/runloop\", \"rsvp\", \"@ember/service\", \"@ember/application\", \"@ember/object/evented\", \"zeppelin-architectes/utils/error-descriptor\"], function (_exports, _ember, _runloop, _rsvp, _service, _application, _evented, _errorDescriptor) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7; //import config from '../config/environment' ;\n  // import BaseListener from 'ember-error-handler/listener/base-listener';\n  0; //eaimeta@70e063a35619d71f0,\"ember\",0,\"@ember/runloop\",0,\"rsvp\",0,\"@ember/service\",0,\"@ember/application\",0,\"@ember/object/evented\",0,\"zeppelin-architectes/utils/error-descriptor\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  // node_modules/ember-error-handler/addon/listener/base-listener.js\n  /* A failed try to get details on error not throwned (catched) by node_modules/ember-source/dist/dependencies/@glimmer/runtime.js\n   *\n  var conserror = console.error;\n  console.error = function(){\n  \tif( arguments[0].includes('Error occurred:') ){\n  console.log(\"arguments\", arguments);\n  console.log(\"wevt\", window.event);\n  console.log(\"werr\", window.error);\n  \t\talert('yup!');\n  \t}\n      conserror.apply(console, arguments);\n  }*/\n  /*TODO:\n   * We need a better handling for 40X http status returned from the back-end\n   * Sometime when logged and the token became outdated, the backend returns a 401 invalid_grant  and we have a white page...\n   *\n   * https://stackoverflow.com/questions/13349035/emberjs-handle-401-not-authorized\n  DS.reopen({\n      ajax: function(url, type, hash) {\n          var originalError = hash.error;\n          hash.error = function(xhr) {\n              if (xhr.status == 401) {\n                  var payload = JSON.parse(xhr.responseText);\n                  //Check for your API's errorCode, if applicable, or just remove this conditional entirely\n                  if (payload.errorCode === 'USER_LOGIN_REQUIRED') {\n                      //Show your login modal here\n                      App.YourModal.create({\n                          //Your modal's callback will process the original call\n                          callback: function() {\n                              hash.error = originalError;\n                              DS.ajax(url, type, hash);\n                          }\n                      }).show();\n                      return;\n                  }\n              }\n              originalError.call(hash.context, xhr);\n          };\n          //Let ember-data's ajax method handle the call\n          this._super(url, type, hash);\n      }\n  });\n  */\n  let ErrorListenerService = _exports.default = (_dec = (0, _service.inject)('popup'), _dec2 = (0, _service.inject)('error-ember-consumer'), _class = class ErrorListenerService extends _service.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"session\", _descriptor, this);\n      _initializerDefineProperty(this, \"router\", _descriptor2, this);\n      _initializerDefineProperty(this, \"toast\", _descriptor3, this);\n      _initializerDefineProperty(this, \"intl\", _descriptor4, this);\n      _initializerDefineProperty(this, \"debug\", _descriptor5, this);\n      // \ttoriiService:   service('torii'),\n      _initializerDefineProperty(this, \"popupService\", _descriptor6, this);\n      //we are only using it for now to get a hand on the main route to make a page refresh when an AccessToken bug appears.\n      _initializerDefineProperty(this, \"errorEmberConsumer\", _descriptor7, this);\n      _defineProperty(this, \"_handlerTimer\", null);\n      _defineProperty(this, \"_handlerConsecutives\", 0);\n      _defineProperty(this, \"_handlerConsecutives_max\", 4);\n      //We catch and report _handlerConsecutives_max consecutive errors if different (only one if similar) in the _handlerMinDelay, after that we wait the delay to be done (_handlerTimer's job) + there is a report counter in the consumer : no more report if _errorReportsSentMax sent reports. NB: the best would be to bufferize error reports and send them altogether but may create issues and heavy storage in browser memory and we don't want that...\n      _defineProperty(this, \"_handlerMinDelay\", 2000);\n      _defineProperty(this, \"hasRouteReopenAction\", false);\n      _defineProperty(this, \"_shouldCatch_lastError\", null);\n      _defineProperty(this, \"_listening\", false);\n    }\n    //set for a limited time to true to discriminate reloading from concrete backend failure and show the BSOD if needed\n    /*\n    initServices = on('init', function () {\n    \tthis.get('debug');\n    }),\n    */\n    init() {\n      //console.error('error-ember-listener init(', ...arguments, ')', trace());\n      //if (!window.trace) window.trace = function () {};\n      super.init(...arguments);\n      /*\n      $(window).on('hashchange', function(){\n      \t//Light weight, just a trigger\n      \t$(window).trigger('yourCustomEventName');\n      });\n      */\n\n      // \t\tsuper.apply(this, arguments);\n      // \t\tif (!getOwner(this)) {\n      // alert('LA!!!');\n      // \t\t\tthrow new Error(\n      // \t\t\t\t'Application container must be defined for ember-listener'\n      // \t\t\t);\n      // \t\t}\n      // \t\tthis.listen();\n    }\n    _shouldCatch(error) {\n      this.debug.log('error-ember-listener _shouldCatch()', error);\n      if (!error) return false;\n      if (!error.isNormalized) error = this.errorEmberConsumer._descriptorNormalize(error);\n      const _this = this;\n      let dbgLogReturnFalse = function (index) {\n        _this.get('debug').log('service error-ember-listener.js _shouldCatch(' + index + ') returned \"NO!\" : _handlerTimer:' + _this._handlerTimer + ' - _handlerConsecutives:' + _this._handlerConsecutives + '\\nerror.message=', error.error.message, '\\nerror=', error);\n      };\n      if (!error || !error.error || !error.isError) {\n        dbgLogReturnFalse('A');\n        return false;\n      }\n      if (this._shouldCatch_lastError && (this._shouldCatch_lastError.message && error.message == this._shouldCatch_lastError.message || this._shouldCatch_lastError.error.message && error.error.message == this._shouldCatch_lastError.error.message)) {\n        dbgLogReturnFalse('B');\n        return false;\n      }\n      this._shouldCatch_lastError = error;\n      if (!this._handlerTimer) {\n        //this.get('debug').error(\"service error-ember-listener.js _shouldCatch - _handlerTimer SET\");\n        this._handlerConsecutives = 1;\n        clearTimeout(this._handlerTimer);\n        this._handlerTimer = setTimeout(function () {\n          clearTimeout(_this._handlerTimer);\n          _this._handlerTimer = null; /*this.get('debug').error(\"service error-ember-listener.js _shouldCatch - _handlerTimer  RELEASED\");*/\n          this._handlerConsecutives = 0; //reset counter\n        }, this._handlerMinDelay);\n      } else {\n        this._handlerConsecutives++;\n      }\n      if (this._handlerConsecutives > this._handlerConsecutives_max) {\n        //this.get('debug').error(\"service error-ember-listener.js _shouldCatch - RETURN FALSE\");\n        dbgLogReturnFalse('C');\n        return false;\n      }\n      //this.get('debug').error(\"service ember-error-listener.js _shouldCatch - RETURN TRUE\");\n      /* Workarounds for specific not handable errors ::*/\n      if (error) {\n        let errorMsg = error.error ? error.error.message.toString().toLowerCase() : error.message ? error.message.toString().toLowerCase() : '';\n        if (errorMsg.includes('the play method is not allowed') || errorMsg.includes('transitionaborted')) {\n          //dbgLogReturnFalse(\"D\"); - don't bother...\n          return false;\n        }\n      }\n      /*:: Workarounds for specific errors */\n      this.debug.error('service error-ember-listener.js _shouldCatch() returned \"YES!\" : _handlerTimer:' + this._handlerTimer + ' - _handlerConsecutives:' + this._handlerConsecutives + '\\nerror.message=', error.error.message, '\\nerror=', error, '\\ntrace:', trace());\n      return true;\n    }\n    listen() {\n      if (this._listening) return;\n      this._listening = true;\n      // this.debug.log('error-ember-listener listen()');\n      // \t\tthis.get('debug').error(\"service error-ember-listener.js listen');\n      const owner = (0, _application.getOwner)(this),\n        listener = this,\n        errorEmberConsumer = this.errorEmberConsumer;\n      //Capturing errors within action events\n\n      _ember.default.ActionHandler.reopen({\n        send: function (actionName) {\n          listener.debug.store('error-ember-listener Ember.ActionHandler.reopen().send(', actionName, ')');\n          // super.send(...arguments);\n          // _super(...arguments);\n          try {\n            this._super(...arguments);\n            return false;\n          } catch (error) {\n            error = errorEmberConsumer._descriptorNormalize(error);\n            if (!listener._shouldCatch(error) || errorEmberConsumer.bsodIsRendered) return;\n            errorEmberConsumer.consume(new _errorDescriptor.default(`ember.ActionHandler:${actionName}`, listener, error));\n          }\n        }\n      });\n\n      //Capturing RSVP errors\n      _rsvp.default.onerror = function (error) {\n        listener.debug.store('error-ember-listener RSVP.onerror(', error, ')', error.stack);\n        // super.onerror(...arguments);\n        // _super(...arguments);\n        if (!error) error = \"Unknown error\";\n        if (errorEmberConsumer.bsodIsRendered) return;\n        if (!error.toString || !error.toString().includes('TransitionAborted')) {\n          //a lot of \"normal\" errors of this kind can happen => no report!\n          listener.get('debug').error('service error-ember-listener.js RSVP onerror', error);\n        }\n        error = errorEmberConsumer._descriptorNormalize(error);\n        if (!listener._shouldCatch(error)) return;\n        errorEmberConsumer.consume(new _errorDescriptor.default(`Ember.RSVP.onerror`, listener, error));\n      }.bind(this);\n      _rsvp.default.on('error', function (error) {\n        listener.debug.store('error-ember-listener RSVP.on(', error, ')', error?.stack ?? null, '\\ncurrentRoute' + this.router.currentRouteName);\n      }.bind(this));\n\n      //Capturing ember errors\n      // console.log('Ember.onerror=', Ember.onerror, Ember);\n      // const Ember_onerror = Ember.onerror;\n      _ember.default.onerror = function (error) {\n        listener.debug.store('error-ember-listener Ember.onerror(', error, ')');\n        // super.onerror(...arguments);\n        // _super(...arguments);\n        // Ember_onerror(...arguments);\n        if (errorEmberConsumer.bsodIsRendered) return;\n        listener.get('debug').error('service error-ember-listener.js Ember.onerror\\nerror=', error);\n        // \t\t\tlet errorOut = error;\n        error = errorEmberConsumer._descriptorNormalize(error);\n        error.source = \"Ember.onerror \" + (error.source ?? '');\n        /*\n        if (errorOut.stack) {\n        \terrorOut.stack.replace('\\\\n', '\\n');\n        }\n        listener.get('debug').error('service error-ember-listener.js Ember.onerror\\nerror=', error, '\\nerrorOut=', errorOut);\n        */\n        if (!!error.message && (error.message.indexOf('401') >= 0 && error.message.indexOf('/api/users/') >= 0 || error.message.indexOf('session is null') >= 0)) {\n          //AccessToken bug with cookie and expired session (payload={\"error\":\"invalid_grant\",\"error_description\":\"The access token provided is invalid.\"})\n          //We clean the session cookie and try reloading\n          //let route = ??\n          //route.refresh();\n          listener.debug.error('service error-ember-listener.js closing session');\n          listener.session.close().then(function () {\n            listener.get('debug').alert('service error-ember-listener.js : session closed, refreshing !');\n            //listener.get('target.router').refresh();\n            //listener.get('debug').alert( listener.controllerFor(\"application\") );\n            //tweaking...\n            listener.popupService.popup_renderer.refresh();\n          });\n        }\n        if (!listener._shouldCatch(error)) return;\n        errorEmberConsumer.consume(new _errorDescriptor.default(`Ember.onerror`, listener, error));\n      }.bind(this);\n      (0, _evented.on)('error', function (error) {\n        listener.debug.store('error-ember-listener on(\"error\")', error);\n        _ember.default.onerror(error);\n      }.bind(this));\n\n      // window listener\n      window.onerror = (message, file, line, column, error) => {\n        listener.debug.store('error-ember-listener window.onerror()', message, file, line, column, error);\n        // super.onerror(...arguments);\n        if (errorEmberConsumer.bsodIsRendered) return;\n        listener.get('debug').error('service error-ember-listener.js window.onerror', message, file, line, column, error);\n        if (!error) {\n          error = {\n            message: message,\n            name: String(error),\n            stack: message + ' at ' + '\\n' + file + ':' + line + ':' + column\n          };\n        }\n        error = errorEmberConsumer._descriptorNormalize(error, message, file, line, column);\n        if (!listener._shouldCatch(error)) return;\n        errorEmberConsumer.consume(new _errorDescriptor.default('window.onerror', listener, error));\n        return true;\n      };\n\n      // unhandled promise listener\n      window.addEventListener('unhandledrejection', function (event) {\n        listener.debug.store('error-ember-listener window.unhandledrejection()', event);\n        // alert(\"window.addEventListener('unhandledrejection') (\", event,\")\");\n        listener.get('debug').error('service error-ember-listener.js window.unhandledrejection', event);\n        let error = event.reason;\n        if (!error) {\n          listener.get('debug').error('service error-ember-listener.js window.unhandledrejection : no error in event ! SKIPPING', event);\n          /*\n                      error = {\n                          message: error.message,\n                          name: String(error),\n                          stack: ''\n                      };\n          */\n        } else {\n          if (errorEmberConsumer.bsodIsRendered) return;\n          error = errorEmberConsumer._descriptorNormalize(error);\n          if (!listener._shouldCatch(error)) return;\n          errorEmberConsumer.consume(new _errorDescriptor.default('window.listener.unhandledrejection', listener, error));\n        }\n\n        //event.preventDefault();\n      }.bind(this));\n\n      /**/\n      //Capturing errors during transitions:\n      let ApplicationRoute = owner.lookup('route:application');\n      // this.debug.log(owner);\n      // this.debug.log(owner.lookup);\n      ApplicationRoute.reopen({\n        actions: {\n          error: function (error) {\n            listener.debug.store('error-ember-listener ApplicationRoute.reopen()', error);\n            // super.onerror(...arguments);\n            // alert(\"ApplicationRoute.reopen\");\n            if (errorEmberConsumer.bsodIsRendered) return;\n            listener.hasRouteReopenAction = true; //set for a limited time to true to discriminate reloading from concrete backend failure and show the BSOD if needed\n            (0, _runloop.later)(listener, function () {\n              listener.hasRouteReopenAction = false;\n            }, 1000);\n            error = errorEmberConsumer._descriptorNormalize(error);\n            listener.get('debug').error('service error-ember-listener.js route.reopen actions', error);\n            if (!listener._shouldCatch(error)) return;\n            //\n            if (error.error && error.error.message && error.error.message.includes('object in path \"session\" could not be found')) {\n              // WATCH-OUT: \"this\" is the application route in this function !\n              if (this.communityService.currentProject && this.communityService.currentCommunity) {\n                this.router.transitionTo('community.participation.index', this.communityService.currentCommunity.slug, this.communityService.currentProject.slug).then(() => {\n                  setTimeout(\n                  //we need this timeout to let intl get the actual locale and it's translations\n                  function () {\n                    this.toast.error(this.intl.t('bubble.notfound.page').toString());\n                  }.bind(this), 5000);\n                });\n              } else if (this.communityService.currentCommunity) {\n                this.router.transitionTo('community.index', this.communityService.currentCommunity.slug).then(() => {\n                  setTimeout(\n                  //we need this timeout to let intl get the actual locale and it's translations\n                  function () {\n                    this.toast.error(this.intl.t('bubble.notfound.page').toString());\n                  }.bind(this), 5000);\n                });\n              } else {\n                this.router.transitionTo('communities').then(() => {\n                  setTimeout(function () {\n                    this.toast.error(this.intl.t('bubble.notfound.page').toString());\n                  }.bind(this), 5000);\n                });\n              }\n              return;\n            }\n            //\n            errorEmberConsumer.consume(new _errorDescriptor.default(`ember-ApplicationRoute.reopen`, listener, error));\n          }\n        }\n      });\n\n      /**/\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"session\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"toast\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"intl\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"debug\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"popupService\", [_dec], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"errorEmberConsumer\", [_dec2], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n});","define(\"zeppelin-architectes/services/fastboot\", [\"exports\", \"ember-cli-fastboot/services/fastboot\"], function (_exports, _fastboot) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _fastboot.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-cli-fastboot/services/fastboot\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/services/head-data\", [\"exports\", \"@ember/service\", \"@glimmer/tracking\"], function (_exports, _service, _tracking) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@glimmer/tracking\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let HeadDataService = _exports.default = (_class = class HeadDataService extends _service.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"title\", _descriptor, this);\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"title\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n});","define(\"zeppelin-architectes/services/model-watcher\", [\"exports\", \"@ember/service\", \"zeppelin-architectes/config/environment\", \"@ember/runloop\", \"@glimmer/tracking\", \"zeppelin-architectes/utils/wildcarded-string\"], function (_exports, _service, _environment, _runloop, _tracking, _wildcardedString) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"zeppelin-architectes/config/environment\",0,\"@ember/service\",0,\"@ember/runloop\",0,\"@glimmer/tracking\",0,\"zeppelin-architectes/utils/wildcarded-string\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  /* This service is to be used as a \"dirty model\" handler for the various setting pages and components :\n   *\n   * - lookup for model(s) and/or specific properties that are edited\n   * + exec external callbacks when new changes\n   * + helpers for routes to avoid quitting the page if one of the models are dirty (edited but not saved) without having a confirm from the admin\n   * - helpers for editing components (like setting-item) to rollback between the edited and the actual (DB's) model's values\n   * - helpers for save/discard buttons to be disabled if the model is untouched and to be activable if the model is dirty\n   *\n   * To monitor an entity here is an example for a component :\n   * <code>\n   * @service modelWatcher;\n   * constructor() {\n   * \tsuper(...arguments);\n   * \tthis.modelWatcher.watchModel( this.args.section );\n   * \tthis.args.section.attachments.forEach( attachment => {\n   *\t\tthis.modelWatcher.watchModel( attachment );\n   *\t});\n   * }\n   * </code>\n   *\n   * Code for the related route (or any of it parents : to be tested) :\n   * <code>\n   * @service modelWatcher;\n  \n  \t@action\n      willTransition(transition) {\n        var dirty = this.modelWatcher.hasDirtyModels();\n        if (dirty && !confirm(this.intl.t('settings.service.discardChangesOrStay'))) {\n          try{transition.abort();}catch(e){\n  \t\t\t\t//do nothing: don't throw error!\n  \t\t\t}\n        }else{\n  \t\tif(dirty)\n  \t\t\tthis.modelWatcher.rollbackChanges( this.router.routeName );\n  \t\tthis.modelWatcher.cleanWatches();//all good, no more watching needed in that example case\n          return true;\n        }\n      }\n   * </code>\n   *\n   */\n  let ModelWatcherService = _exports.default = (_class = class ModelWatcherService extends _service.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"pollService\", _descriptor, this);\n      _initializerDefineProperty(this, \"debug\", _descriptor2, this);\n      _initializerDefineProperty(this, \"router\", _descriptor3, this);\n      //! @private\n      _defineProperty(this, \"_addedCount\", 0);\n      // used to create unique keys\n      _initializerDefineProperty(this, \"_managedModelsData\", _descriptor4, this);\n    }\n    /**\n     * This is the method that the caller must use to start a watching.\n     * We allow for any duplicate watch to be added : a call using the same arguments will be added with no check and the keys returned will be different\n     * =>\n     * !important to not clog the navigator resources :\n     * - the caller must ensure it doesn't add a same watch more than once if not purposely ;\n     * - the caller must store the keys returned by watchData() to manage it's watches\n     * - the caller must stop it's watch(es) when not needed anymore (like when the component is destroyed, the route is quilted etc)\n     *\n     * Note 1: by default as a security ModelWatcherService watches for any route changes and automatically stops it's polling and clears it's watches when the route changes.\n     *\n     * onlyCurrentRoute = true || <string>: If a multi-route watch is really wanted (to be used as an event listener for a model onChange) the onlyCurrentRoute argument must be passed as false and the watcher must be correctly managed manually by the caller.\n     * A <string> value allows to specify a route name with wildcard '*' allowed\n     *\n     * isPersistentWatch: if true the watch will never be deleted automatically\n     *\n     * ==> if isPersistentWatch == false && onlyCurrentRoute == true (default) : if the route is leaved the watch will be deleted\n     * ==> if isPersistentWatch == false && onlyCurrentRoute == false : if the route is leaved the watch will be paused but stays available for a manual reactivation\n     * ==> if isPersistentWatch == true && onlyCurrentRoute == false : the watch will keep to be polled except if manually paused / stopped\n     * ==> if isPersistentWatch == true && onlyCurrentRoute == true : the polling will be active whenever the targetRoute match the router's actual one - meaning that the watch will be paused when the route is leaved and reactivated when back on targetRoute  (must be manually paused / stopped if needed).\n     *\n     * Note 2: if a model is deleted/destroyed any watch only targeting it will be deleted - if the key defines multiple models to watch the non-daleted ones will still be polled. If all are deleted the watch will be deleted.\n     *\n     * Note 3: passing multiple models in watchData groups the calls to the callback (one call will be done with all the changes in the group).\n     *\n     * Note 4: for allowed watchData types, see this.modelsToMap() comments.\n     */\n\n    watchData(callback, watchData, onlyCurrentRoute = true, isPersistentWatch) {\n      // this.debug.log( 'watchData(', callback, ', ', watchData, ', ', isPersistentWatch, ')' );\n      const watchMap = this.mergeWatchData(watchData);\n      // this.debug.log( 'watchMap:', watchMap );\n      // const\tkeys = [],\n      const specificRoute = onlyCurrentRoute === true ? this.router.currentRoute.name : onlyCurrentRoute // should be null or string\n      ;\n      /*\n      \t\twatchMap.forEach( watched => {\n      \t\t\t//{model: this.project, properties: ['name', 'status', 'image']}\n      this.debug.log( 'watchData watchModel( ',watched,', ',specificRoute,', ',callback,', ',onlyCurrentRoute,', ',isPersistentWatch,' )' );\n      \t\t\tkeys.push( this.watchModel( watched, specificRoute, callback, onlyCurrentRoute, isPersistentWatch ) );\n      \t\t});\n      */\n      // this.debug.log( 'watchData watchModel( ',watchMap,', ',specificRoute,', ',callback,', ',onlyCurrentRoute,', ',isPersistentWatch,' )' );\n      const key = this.watchModel(watchMap, specificRoute, callback, onlyCurrentRoute, isPersistentWatch);\n      this._start_watchData();\n      return key;\n    }\n\n    /**\n     * Util that take any number of arguments.\n     * Each argument can be :\n     * - a model\n     * - an array of models\n     * - an object containing a models and eventually properties eg: {model: this.project , properties: ['name', 'status', 'image']}\n     * - or a Map of models (a \"watchMap\") and eventually properties\n     * and returns a Map of models by lid with no duplicate.\n     *\n     * the returned Map is eg { '@lid:model1': {model: instance1}, '@lid:model2': {model: instance2, properties: ['onlyWatchThisOne', 'andThisOtherOne']} }\n     * @return <Map>\n     */\n    modelsToMap(/*...arguments*/\n    ) {\n      let arr = [];\n      Array.from(arguments).forEach(arg => {\n        if (!arg) return;\n        if (arg.concat) {\n          // Array of models or watchDatas : [ {model: this.project , properties: ['name', 'status', 'image']} ]\n          arr = arr.concat(arg);\n        } else if (arg.size != undefined && arg.has)\n          // Map\n          for (const [k, data] of arg) arr.push(data);else if (arg.toLocaleString)\n          // Object\n          arr = arr.push(arg);else if (args.changedAttributes)\n          // Ember Model\n          arr.push(arg);else throw new Error('An argument passed to modelsToMap() is of an unknown type! ' + arg);\n      });\n      // no duplicate !\n      const watchMap = new Map();\n      // this.debug.log('ModelWatcherService modelsToMap(', ...arguments,')\\narr=', arr, '\\nwatchMap=', watchMap)\n      arr.forEach(modelOrWatchData => {\n        if (modelOrWatchData.model && modelOrWatchData.properties) {\n          modelOrWatchData.forEach(modelAndProps => {\n            if (!watchMap.has(modelAndProps.model.lid)) watchMap.set(modelAndProps.model.lid, modelAndProps);else if (modelAndProps.properties?.length) {\n              let exists = watchMap.get(modelAndProps.model.lid);\n              exists = exists.concat(modelAndProps.properties);\n              watchMap.set(modelAndProps.model.lid, exists);\n            }\n          });\n        } else if (modelOrWatchData.model) {\n          if (!watchMap.has(modelOrWatchData.model.lid)) watchMap.set(modelOrWatchData.model.lid, modelOrWatchData);\n        } else {\n          if (!watchMap.has(modelOrWatchData.lid)) watchMap.set(modelOrWatchData.lid, {\n            model: modelOrWatchData\n          });\n        }\n      });\n      // this.debug.log('ModelWatcherService modelsToMap(', ...arguments,')\\narr=', arr, '\\nwatchMap=', watchMap)\n      return watchMap;\n    }\n    pauseWatchingKey(keyOrKeys) {\n      this.debug.log('pauseWatchingKey a', keyOrKeys);\n      if (typeof keyOrKeys != 'object') keyOrKeys = [keyOrKeys];\n      keyOrKeys.forEach(key => {\n        if (this._managedModelsData[key]) {\n          this._managedModelsData[key]._paused = true;\n          // this.debug.log('pauseWatchingKey b', key, this._managedModelsData[key]);\n        }\n      });\n    }\n    runWatchingKey(keyOrKeys) {\n      // un-pause\n      // this.debug.log('runWatchingKey a', keyOrKeys);\n      if (typeof keyOrKeys != 'object') keyOrKeys = [keyOrKeys];\n      keyOrKeys.forEach(key => {\n        if (this._managedModelsData[key]) this._managedModelsData[key]._paused = false;\n        // this.debug.log('runWatchingKey b', key);\n      });\n    }\n    stopWatchingKey(keyOrKeys) {\n      // this.debug.log('stopWatchingKey a', keyOrKeys, this._managedModelsData[keyOrKeys]);\n      if (typeof keyOrKeys != 'object') keyOrKeys = [keyOrKeys];\n      keyOrKeys.forEach(key => {\n        // this.debug.log('stopWatchingKey b', key, this._managedModelsData[key]);\n        if (this._managedModelsData[key]) delete this._managedModelsData[key];\n        // will we still have callbacks for watching ?\n        let letItRun = false;\n        Object.entries(this._managedModelsData).forEach(([k, data]) => {\n          // this.debug.log('stopWatchingKey c', k, data);\n          if (data && data.callbackIfChanges) letItRun = true;\n        });\n        // this.debug.log('stopWatchingKey d', letItRun, key, this._managedModelsData);\n        if (!letItRun) {\n          this.pollService.stopPoll(this._pollerId);\n          this._pollerId = null;\n        }\n      });\n    }\n    stopWatchingModel(model) {\n      const key = model.constructor.modelName + '_' + model.id;\n      // this.debug.log('stopWatchingModel(', model, ')\\nkey:', key);\n      delete this._managedModelsData[key];\n    }\n    cleanWatches() {\n      //to be called when transitioning or saving settings : reset all watches\n      // this.debug.log('cleanWatches()');\n      this._managedModelsData = {};\n    }\n    getWatchedData(key) {\n      return this._managedModelsData[key];\n    }\n    _start_watchData() {\n      // this.debug.log(\"_start_watchData()\", this._managedModelsData);\n      // will we still have callbacks for watching ?\n      let letItRun = false;\n      Object.entries(this._managedModelsData).forEach(([k, data]) => {\n        // this.debug.log('_start_watchData c', k, data);\n        if (data && !data._paused && data.callbackIfChanges) {\n          letItRun = true;\n          return true; // break !\n        }\n      });\n      // this.debug.log('_start_watchData b', letItRun, this._managedModelsData);\n      if (!letItRun) {\n        this.debug.log('_start_watchData aborted! nothing to watch');\n        if (this._pollerId) this.pollService.stopPoll(this._pollerId);\n        this._pollerId = null;\n      } else if (!this._pollerId) {\n        this._pollerId = this.pollService.addPoll({\n          interval: 1000,\n          callback: this._run_watchData.bind(this)\n        });\n      }\n    }\n\n    // called on each poll\n    _run_watchData() {\n      // this.debug.log(\"_run_watchData()\", this._managedModelsData);\n      const currentRouteName = this.router.currentRoute.name;\n      Object.entries(this._managedModelsData).forEach(([key, data]) => {\n        // this.debug.log(\"_run_watchData A \"+ key +\" data:\", data, data._paused);\n        if (!data.callbackIfChanges) {\n          delete this._managedModelsData[key];\n          return;\n        }\n        /*\n        \t\t\tif( !data || ( !data.isPersistentWatch && data.targetRoute && data.targetRoute != this.router.currentRoute ) ){\n        \t\t\t\tdelete this._managedModelsData[key];\n        \t\t\t\treturn;\n        \t\t\t}\n        */\n        /* See watchData comments, this is the implementation :*/\n        if (!data.isPersistentWatch) {\n          // this.debug.log( \"_run_watchData B \"+key+\" data:\", data, data.targetRoute, currentRouteName, isWildcardedPatternMatching(data.targetRoute, currentRouteName) );\n          if (!(0, _wildcardedString.isWildcardedPatternMatching)(data.targetRoute, currentRouteName)) {\n            if (data.onlyCurrentRoute) delete this._managedModelsData[key];else this._managedModelsData[key]._paused = true;\n            return;\n          }\n        } else {\n          if (data.onlyCurrentRoute) {\n            if (!(0, _wildcardedString.isWildcardedPatternMatching)(data.targetRoute, currentRouteName)) {\n              this._managedModelsData[key]._paused = true;\n              return;\n            } else this._managedModelsData[key]._paused = false;\n          }\n        }\n        /**/\n        // this.debug.log(\"_run_watchData C \"+key+\" data:\", data, data._paused);\n        if (data._paused) return;\n        /**/\n        const watchedChanges = new Map();\n        let hadChanges = false;\n        for (const [lid, watchMap] of data.watchMap) {\n          if (!watchMap.model || watchMap.model.isDeleted) continue;\n          const changes = watchMap.model.changedProperties;\n          // this.debug.log(\"_run_watchData data:\", data, \"\\nchanges=\", changes, \"\\ndata.models.changedProperties=\", data.models.changedProperties);\n          // this.debug.log(\"_watchedDataCback _run_watchData lid:\"+lid+\" watchMap=\", watchMap, \"\\nchanges A:\", changes);\n          if (data.lastChanges && (!changes || !changes.size)) {\n            // we notify the cback that no changes exists anymore (the model has been saved or rolledback) - here we don't need to check for watchMap.properties\n            data.lastChanges = null;\n            // data.callbackIfChanges(data, null, null); -- this is called once after the current loop\n            hadChanges = true;\n            continue;\n          }\n          if (changes && changes.size) {\n            // this.debug.log(\"_watchedDataCback _run_watchData changes B0:\", watchMap.properties?.length);\n\n            /**/\n            // if watchMap.properties : We filter changes to keep only those regarding this properties\n            if (watchMap.properties?.length) {\n              for (const [propertyName, change] of changes) {\n                if (!watchMap.properties.includes(propertyName)) changes.delete(propertyName);\n              }\n              if (data.lastChanges && (!changes || !changes.size)) {\n                // we notify the cback that no changes exists anymore (the model has been saved or rolledback) - here we don't need to check for watchMap.properties\n                data.lastChanges = null;\n                // data.callbackIfChanges(data, null, null);\n                hadChanges = true;\n                continue;\n              }\n            }\n            /**/\n\n            const curjson = JSON.stringify(Object.fromEntries(changes));\n            if (data.lastChanges && data.lastChanges === curjson) continue;\n            const lastChangesObject = !data.lastChanges ? '' : JSON.parse(data.lastChanges);\n\n            // this.debug.log(\"_watchedDataCback _run_watchData changes B1:\", changes, '\\n', data.lastChanges === curjson, data.lastChanges, '===', curjson, '\\n', changes.entries());\n            // changes.forEach( ([propertyName, change]) =>{\n            let reportIt = false;\n            for (const [propertyName, change] of changes) {\n              // this.debug.log(\"_run_watchData \", propertyName, \"change:\", change);\n              // if( data.propertiesToWatch && data.propertiesToWatch.includes(propertyName) ){// particular props are watched\n              if (watchMap.properties?.length && watchMap.properties.includes(propertyName)) {\n                // particular props are watched\n                // did we already noticed the callback for this change ? Either that the property changed or changed again\n                let hasPreviousChange = false,\n                  didChangedAgain = null;\n                lastChangesObject.forEach(([prop, previousChange]) => {\n                  hasPreviousChange = true;\n                  if (propertyName == prop && change[1] != previousChange[1]) didChangedAgain = previousChange;\n                });\n                /**/\n                if (!hasPreviousChange || hasPreviousChange && didChangedAgain) {\n                  reportIt = true;\n                  let report;\n                  if (watchedChanges.has(lid)) report = watchedChanges.get(lid);else report = {\n                    model: watchMap.model,\n                    changes: new Map()\n                  };\n                  report.changes.set(propertyName, change);\n                  watchedChanges.set(lid, report);\n                }\n              } else if (!watchMap.properties?.length) {\n                // no particular prop to watch => report any changes on the model\n                reportIt = true;\n                // watchedChanges.set(watchMap.model, change);\n                let report;\n                if (watchedChanges.has(lid)) {\n                  report = watchedChanges.get(lid);\n                  report.changes.set(propertyName, change);\n                } else {\n                  const propchanges = new Map();\n                  propchanges.set(propertyName, change);\n                  report = {\n                    model: watchMap.model,\n                    changes: propchanges\n                  };\n                }\n                watchedChanges.set(lid, report);\n              }\n              // else this.debug.log(\"_run_watchData DONT apply callback !\", data.lastChanges, JSON.stringify(changes), data.lastChanges != JSON.stringify(changes));\n            }\n            if (watchedChanges.size) {\n              data.lastChanges = curjson;\n              // dataWatchedChanges.push() ??\n            }\n          }\n        }\n        if (watchedChanges.size) {\n          // this.debug.log(\"_run_watchData apply callback !\", propertyName, \"change:\", change, data.model);\n          // old call: data.callbackIfChanges(data.models, watchedChanges, changes);\n          data.callbackIfChanges(watchedChanges); // watchedChanges = Map{ 'lid1': {model: instance1, changes: {propertyName: ['previousValue', 'actualValue']}} , 'lid2';... }\n        } else if (hadChanges) data.callbackIfChanges(new Map(), null, null);\n      });\n    }\n\n    /**\n     * Sorts the data in a Map so that :\n     * - one key : one instance (no duplicate of this instancemodel on another key)\n     * - if watchData repeats an already added instance the properties list will be concated or added if doesn't exists\n     * Meaning that if an instance is listed in models (watch any changes) but also exists in watchData (watch only specified properties) only the specified properties' changes will be reported.\n     * If you also want to watch the full instance then another watcher will need to be created.\n     */\n    mergeWatchData(watchData) {\n      // eg watchData : [ {model: this.project , properties: ['name', 'status', 'image']} ]\n      const watchMap = this.modelsToMap(watchData); // Map\n      return watchMap;\n    }\n    watchModel(watchMap, specificRoute, callbackIfChanges, onlyCurrentRoute, isPersistentWatch) {\n      /*\n       * See watchData() comments : we now use unique keys for any calls.\n       * This is the (imperfect) deprecated code intended to avoid having duplicate watchers :\n      \t\tlet route = specificRoute ? specificRoute : this.router.currentRoute;\n      \t\t// const key = crypto.createHash('sha1').update( model.constructor.modelName +'_'+ model.id +'_'+ specificRoute +'_'+ JSON.stringify(propertiesToWatch) +'_'+ callbackIfChanges ).digest('hex');\n      \t\tconst key = model.constructor.modelName +'_'+ model.id +'_'+ specificRoute +'_'+ JSON.stringify(propertiesToWatch) +'_'+ callbackIfChanges;\n      \t\tlet hash = 0;\n      \t\tfor (const char of key){\n      \t\t\thash ^= char.charCodeAt(0); // Bitwise XOR operation\n      // this.debug.log('watchModel - ', char, char.charCodeAt(0), hash);\n      \t\t}\n      // this.debug.log('watchModel', key, hash);\n      // this.debug.log('watchModel(', model, ')\\n', targetRoute, '\\nkey=' + key);\n      \t\twhile(this._managedModelsData[hash])\n      \t\t\thash += '_';\n      */\n      const hash = ++this._addedCount;\n      this._managedModelsData[hash] = {\n        watchMap,\n        targetRoute: specificRoute,\n        callbackIfChanges,\n        onlyCurrentRoute,\n        isPersistentWatch,\n        _paused: false\n      };\n      return hash;\n    }\n    hasDirtyModels(specificRoute) {\n      let currentRouteName = specificRoute ? specificRoute : this.router.currentRoute;\n      let ret = false;\n      Object.entries(this._managedModelsData).find(([key, data]) => {\n        if (!data || !data.targetRoute /* || data._paused -- we allow for manual checking even if the polling is paused for this watch*/) {\n          ret = false;\n          return true; // break !\n        }\n        if (!(0, _wildcardedString.isWildcardedPatternMatching)(data.targetRoute, currentRouteName)) {\n          ret = false;\n          return true; // break !\n        }\n        if (data.model.isDirty) {\n          this.debug.log('hasDirtyModels isDirty:true key=' + key + ':', data.model);\n          ret = true;\n          return true; // break !\n        } else this.debug.log('hasDirtyModels isDirty:false key=' + key + ':', data.model);\n      });\n      // this.debug.log('hasDirtyModels(', specificRoute, ')\\n', route, '\\nreturn ' + ret);\n      return ret;\n    }\n    getChangedAttributesList(modelInstance) {\n      // yeah there is no point for that... It's just a reminder of the model's method\n      return modelInstance.changedProperties;\n    }\n\n    /*\n    getChangedAttributesStringList(modelInstance){\n    \tlet dbg = modelInstance + ' changed attributes :\\n';\n    \tconst attribs = modelInstance.changedProperties;\n    \tattribs.forEach( attrib => {\n    \t\t// dbg +=\n    \t});\n    \treturn modelInstance.changedProperties;\n    }\n    */\n\n    getModelChangesDbgReport(modelInstance) {\n      if (modelInstance.length != undefined) {\n        // can be an array of models\n        const ret = [];\n        modelInstance.forEach(instance => {\n          ret.push({\n            instance: {\n              modelName: instance.constructor.modelName,\n              id: instance.id,\n              instance\n            },\n            isDirty: instance.isDirty,\n            hasDirtyRelationships: instance.hasDirtyRelationships,\n            changedProperties: instance.changedProperties\n          });\n        });\n        return ret;\n      }\n      return {\n        instance: {\n          modelName: modelInstance.constructor.modelName,\n          id: modelInstance.id,\n          modelInstance\n        },\n        isDirty: modelInstance.isDirty,\n        hasDirtyRelationships: modelInstance.hasDirtyRelationships,\n        changedProperties: modelInstance.changedProperties\n      };\n    }\n    getChangesDbgReport() {\n      let route = this.router.currentRoute,\n        report = {\n          managed: [],\n          notManaged: []\n        };\n      Object.entries(this._managedModelsData).find(([key, data]) => {\n        if (!data || !data.targetRoute /* || data._paused -- we allow for manual checking even if the polling is paused for this watch*/) {\n          ret = false;\n          return true; // break !\n        }\n        if (!(0, _wildcardedString.isWildcardedPatternMatching)(data.targetRoute, currentRouteName)) {\n          report.notManaged.push({\n            data,\n            key: this.getModelChangesDbgReport(data.model)\n          });\n          return;\n        }\n        report.managed.push({\n          data,\n          key: this.getModelChangesDbgReport(data.model)\n        });\n      });\n      return report;\n    }\n\n    /** @method rollbackAttribute\n    * Revert the changes on a specific instance's property.\n    * This can be called anytime without watching modelInstance instance.\n    *\n    * @return [restoredValue, discardedValue] if rolledback (then only if the value was changed).\n    *\n    * @note: the code is now integrated in models through civ-model.rollbackProperty(propertyToRoll)\n    */\n    rollbackAttribute(modelInstance, propertyToRoll) {\n      return modelInstance.rollbackProperty(propertyToRoll);\n    }\n\n    // this is to be reviewed : we should have rollbackChanges(key) and use this._managedModelsData to only roll the targeted properties (or the full model)\n    rollbackChanges(specificRoute) {\n      let route = specificRoute ? specificRoute : this.router.currentRoute;\n      Object.entries(this._managedModelsData).find(([key, data]) => {\n        if (!data || !data.targetRoute /* || data._paused -- we allow for manual checking even if the polling is paused for this watch*/) {\n          ret = false;\n          return true; // break !\n        }\n        if (!(0, _wildcardedString.isWildcardedPatternMatching)(data.targetRoute, currentRouteName)) return true; // break !\n        //if( data.model.isDirty )\n        this.debug.log('PRE rollbackChanges(', specificRoute, ')\\n', route, '\\nrolling back:', key, '\\ndata.model.isDirty:', data.model.isDirty, '\\ndata.model.changedAttributes:', data.model.changedProperties);\n        data.model.rollbackChanges();\n        // Some interesting alternatives :\n        /*\n        \t\tdata.model.eachAttribute(function(name, meta) {\n        \t\t\tthis.debug.log('attribute ' + data.model.constructor.modelName + \".\" + name + '=', meta);\n        \t\t});\n        */\n        /*\n        \t\tdata.model.eachRelationship(function(name, meta) {\n        \t\t\tthis.debug.log('relationship ' + data.model.constructor.modelName + \".\" + name + '=', meta);\n        \t\t\tdata.model[name].reload();//necessary to also rollback the relationships (like if one added or remove => revert to default). (model.rollbackAttributes would not reset them)\n        \t\t});\n        */\n        // \t\tdata.model.isDirty = false;\n        //\t\tdata.model.reload();\n        this.debug.log('POST rollbackChanges(', specificRoute, ')\\n', route, '\\nrolling back:', key, '\\ndata.model.isDirty:', data.model.isDirty, '\\ndata.model.changedAttributes:', data.model.changedProperties);\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"pollService\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"debug\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"_managedModelsData\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _class);\n});","define(\"zeppelin-architectes/services/notify\", [\"exports\", \"ember-notify\"], function (_exports, _emberNotify) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"ember-notify\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = _emberNotify.default;\n});","define(\"zeppelin-architectes/services/page-title\", [\"exports\", \"ember-page-title/services/page-title\"], function (_exports, _pageTitle) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _pageTitle.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-page-title/services/page-title\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/services/phone\", [\"exports\", \"@ember/service\", \"@glimmer/tracking\", \"zeppelin-architectes/config/environment\"], function (_exports, _service, _tracking, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"zeppelin-architectes/config/environment\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  let PhoneService = _exports.default = (_class = class PhoneService extends _service.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"debug\", _descriptor, this);\n      _initializerDefineProperty(this, \"device\", _descriptor2, this);\n      _initializerDefineProperty(this, \"popup\", _descriptor3, this);\n      // we use the popup common code to control panels, pages and popups\n      _initializerDefineProperty(this, \"phonePageClass\", _descriptor4, this);\n      _initializerDefineProperty(this, \"sidepanelPageClass\", _descriptor5, this);\n      /**/\n      _initializerDefineProperty(this, \"_registeredPhonesSlides\", _descriptor6, this);\n      _initializerDefineProperty(this, \"_registeredTypeByLabel\", _descriptor7, this);\n    }\n    get isPhone() {\n      // return (window.innerWidth <= config.breakpoints.phone);\n      return this.device.isPhone;\n    }\n    // get availablePhoneslidesList(){\n    availablePhoneslidesList() {\n      let available = '';\n      Object.entries(this._registeredPhonesSlides).forEach(([type, data]) => {\n        data.forEach(reg => {\n          available += type + '/' + reg.label + ', ';\n        });\n      });\n      /*Object.entries(this._registeredTypeByLabel).forEach( ([type, data]) => {\n      \tavailable += '\\n'+ type +'='+ data +', ';\n      });*/\n      return available;\n    }\n    _registerPhoneslide(label, type, container) {\n      // this.debug.error( \"registerPhoneSlide('\" +label+ \"', '\" +type+ \"', \", container, \")\", this._registeredPhonesSlides[type], this._registeredPhonesSlides );\n      if (!this._registeredPhonesSlides[type]) this._registeredPhonesSlides[type] = [];\n      this._registeredPhonesSlides[type].push({\n        label: label,\n        type: type,\n        container: container\n      });\n      this._registeredTypeByLabel[label] = type;\n    }\n    clearInsertedPhoneslides() {\n      // used by the device service when switching from a desktop/tab layout (using popups) to a phone one (using phoneslides).\n      this._registeredPhonesSlides = {\n        'side-panel': [],\n        'phone-page': []\n      };\n      this._registeredTypeByLabel = {};\n    }\n    isPhoneslideInserted(slideLabel) {\n      return this._registeredTypeByLabel[slideLabel];\n    }\n    isPhoneSidePanel(slideLabel) {\n      if (!this._registeredTypeByLabel[slideLabel]) {\n        throw new Error('PhoneService isPhoneSidePanel: \"' + slideLabel + '\" is not registered !\\navailable:' + this.availablePhoneslidesList());\n      }\n      let ps = this._registeredPhonesSlides['side-panel'].filter(data => data[0] === label);\n      return ps.length;\n    }\n    isPhonePage(slideLabel) {\n      if (!this._registeredTypeByLabel[slideLabel]) {\n        throw new Error('PhoneService.isPhonePage: \"' + slideLabel + '\" is not registered !\\navailable:' + this.availablePhoneslidesList());\n      }\n      let pp = this._registeredPhonesSlides['phone-page'].filter(data => data[0] === label);\n      return pp.length;\n    }\n    /**/\n\n    getTypeForLabel(slideLabel) {\n      if (slideLabel.startsWith('phoneslide_')) slideLabel = slideLabel.substr(11, slideLabel.length);\n      if (!this._registeredTypeByLabel[slideLabel]) {\n        throw new Error('PhoneService.getTypeForLabel: \"' + slideLabel + '\" is not registered !\\navailable:' + this.availablePhoneslidesList(), this._registeredTypeByLabel[slideLabel]);\n      }\n      return this._registeredTypeByLabel[slideLabel];\n    }\n    openPhoneSlide(slideLabel, model, closeOnClickOutside = true) {\n      if (!model) model = {};\n      model.type = this.getTypeForLabel(slideLabel);\n      if (!slideLabel.startsWith('phoneslide_')) slideLabel = 'phoneslide_' + slideLabel;\n      return this.popup.openPopup(slideLabel, model, closeOnClickOutside ?? model?.closeOnClickOutside ?? true, true);\n    }\n\n    // DEPRECATED ::\n    setPhoneRendererRoute(route) {\n      throw new Error('PhoneService.setPhoneRendererRoute is deprecated !');\n      this.route_renderer = route;\n    }\n    showPhonePage(templateName, model, controllerName) {\n      throw new Error('PhoneService.showPhonePage is deprecated !');\n      this.phonePageClass = 'phone-page--show';\n      this.route_renderer.phone_page_render(templateName, model, controllerName);\n    }\n    hidePhonePage() {\n      throw new Error('PhoneService.hidePhonePage is deprecated !');\n      this.phonePageClass = 'phone-page--hide';\n    }\n    // :: DEPRECATED\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"debug\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"device\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"popup\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"phonePageClass\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'phone-page--hide';\n    }\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"sidepanelPageClass\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return 'side-panel--hide';\n    }\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"_registeredPhonesSlides\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {\n        'side-panel': [],\n        'phone-page': []\n      };\n    }\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"_registeredTypeByLabel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return {};\n    }\n  }), _class);\n});","define(\"zeppelin-architectes/services/poll-service\", [\"exports\", \"@ember/service\", \"@ember/runloop\", \"@ember/array\"], function (_exports, _service, _runloop, _array) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@ember/runloop\",0,\"@ember/array\"eaimeta@70e063a35619d71f\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  /* This is a simple integration of setInterval() in Ember's runloop.\n   * Stolen from : https://github.com/nypublicradio/ember-poll\n   * <code>\n  <div {{did-insert this.didInsert}} {{will-destroy this.willDestroy}}>\n  \t...\n  </div>\n   * </code>\n   * <code>\n  import Component from '@glimmer/component';\n  \n  export default class MyComponent extends Component {\n  \t@service pollService;\n  \n  \t@action\n  \tdidInsert() {\n  \t\tthis.val = 0;\n  \t\tthis.pollId = this.pollService.addPoll({\n  \t\t\tinterval: 6000,\n  \t\t\tcallback: this.doIt.bind(this)\n  \t\t});\n  \t}\n  \n  \t@action\n  \tdoIt(){\n  \t\tconsole.log('i:' + (++this.val));\n  \t}\n  \n  \t@action\n  \twillDestroy() {\n  \t\tthis.pollService.stopPoll(this.pollId);\n  \t}\n  }\n   * </code>\n   */\n  class PollService extends _service.default {\n    constructor(...args) {\n      super(...args);\n      _defineProperty(this, \"_polls\", (0, _array.A)([]));\n    }\n    willDestroy() {\n      this.stopAll();\n    }\n    addPoll({\n      interval,\n      callback,\n      label\n    }) {\n      if (interval <= 1) {\n        throw new Error('Polling interval must be greater than 1');\n      }\n      let handle = this._schedule(callback, interval);\n      let poll = {\n        handle,\n        callback,\n        interval\n      };\n      if (label) {\n        poll.label = label;\n      }\n      this._polls.pushObject(poll);\n      return handle;\n    }\n    startPoll(oldHandle) {\n      let newHandle = this._startPoll('handle', oldHandle);\n      return newHandle;\n    }\n    startPollByLabel(label) {\n      let newHandle = this._startPoll('label', label);\n      return newHandle;\n    }\n    stopPoll(handle) {\n      if (handle && typeof clearInterval !== 'undefined') {\n        clearInterval(handle);\n      }\n    }\n    stopPollByLabel(label) {\n      let poll = this._polls.findBy('label', label);\n      if (poll) {\n        this.stopPoll(poll.handle);\n      }\n    }\n    stopAll() {\n      let handles = this._polls.mapBy('handle');\n      handles.forEach(this.stopPoll);\n    }\n    clearPoll(handle) {\n      let poll = this._polls.findBy('handle', handle);\n      this.stopPoll(poll.handle);\n      this._polls.removeObject(poll);\n    }\n    clearPollByLabel(label) {\n      let poll = this._polls.findBy('label', label);\n      if (poll) {\n        this.clearPoll(poll.handle);\n      }\n    }\n    clearAll() {\n      let handles = this._polls.mapBy('handle');\n      handles.forEach((0, _runloop.bind)(this, 'clearPoll'));\n    }\n    _schedule(fn, interval) {\n      // console.log(\"_schedule(\",fn,\", \",interval,\")\");\n      if (typeof setInterval !== 'undefined') {\n        return setInterval((0, _runloop.bind)(this, fn), interval);\n      }\n    }\n    _startPoll(key, value) {\n      let poll = this._polls.findBy(key, value);\n      if (poll) {\n        let {\n          callback,\n          interval\n        } = poll;\n        let newHandle = this._schedule(callback, interval);\n        return newHandle;\n      } else {\n        console.warn(`No poll was found for ${key} ${value}`); // eslint-disable-line\n      }\n    }\n  }\n  _exports.default = PollService;\n});","define(\"zeppelin-architectes/services/popup\", [\"exports\", \"zeppelin-architectes/services/services-events-handler\", \"@ember/service\", \"@glimmer/tracking\", \"@ember/runloop\", \"@ember/string\", \"@ember/object\"], function (_exports, _servicesEventsHandler, _service, _tracking, _runloop, _string, _object) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20;\n  0; //eaimeta@70e063a35619d71f0,\"zeppelin-architectes/services/services-events-handler\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@ember/runloop\",0,\"@ember/string\",0,\"@ember/object\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  /**\n   * This service handles desktop popup, mobile sidePanel and mobile phonePage display.\n   *\n   * See components/popup-to-extend and components/phoneslide-to-extend.\n   *\n   * The component to render in a popup or sidePanel must be added like this in a template :\n   * <code>\n  <Popups::File />\n   * </code>\n   *\n   * And the content of the (resource-popup) component needs to use the helper :\n   * <code>\n  {{#in-element this.destinationElement}}\n  \t<div class=\"popup__documents resource-popup\" role=\"dialog\" aria-labelledby=\"accessibility-title\">\n  \tMy pop-up body\n  \t</div>\n  {{/in-element}}\n   * </code>\n   *\n   * @class PopupService\n   * @extends Ember.Service\n   */\n  let PopupService = _exports.default = (_dec = (0, _service.inject)('user'), _class = class PopupService extends _servicesEventsHandler.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"router\", _descriptor, this);\n      _initializerDefineProperty(this, \"debug\", _descriptor2, this);\n      _initializerDefineProperty(this, \"analytics\", _descriptor3, this);\n      _initializerDefineProperty(this, \"phone\", _descriptor4, this);\n      _initializerDefineProperty(this, \"userService\", _descriptor5, this);\n      _initializerDefineProperty(this, \"communityService\", _descriptor6, this);\n      _initializerDefineProperty(this, \"cookies\", _descriptor7, this);\n      _initializerDefineProperty(this, \"modelsChanged\", _descriptor8, this);\n      /*\n      \t@tracked popupDisplayClass = 'hidden';\n      \t@tracked sidePanelDisplayClass = 'hidden';\n      \t@tracked phonePageDisplayClass = 'hidden';\n      */\n      _initializerDefineProperty(this, \"popupLabel\", _descriptor9, this);\n      _initializerDefineProperty(this, \"popupClass\", _descriptor10, this);\n      _initializerDefineProperty(this, \"sidePanelLabel\", _descriptor11, this);\n      _initializerDefineProperty(this, \"sidePanelClass\", _descriptor12, this);\n      // hidden';\n      _initializerDefineProperty(this, \"phonePageLabel\", _descriptor13, this);\n      _initializerDefineProperty(this, \"phonePageClass\", _descriptor14, this);\n      // hidden';\n      _initializerDefineProperty(this, \"_dbg_logAllCalls\", _descriptor15, this);\n      _initializerDefineProperty(this, \"_openedModels\", _descriptor16, this);\n      _initializerDefineProperty(this, \"_loginPopup_isRegistration\", _descriptor17, this);\n      _initializerDefineProperty(this, \"_recaptchaScriptReady\", _descriptor18, this);\n      _defineProperty(this, \"_hPCP\", null);\n      _defineProperty(this, \"_sPCP\", null);\n      _initializerDefineProperty(this, \"_forceCookieConsentOpening\", _descriptor19, this);\n      _defineProperty(this, \"_cookieConsentFocusRedirHandler\", null);\n      _defineProperty(this, \"_cookieConsentFocusRedirRedirector\", null);\n      _defineProperty(this, \"_topHeaderHeaderTopReady\", false);\n      _defineProperty(this, \"_cookiesConsentReady\", false);\n      _defineProperty(this, \"_cookiesPreferencesReady\", false);\n      _initializerDefineProperty(this, \"_forceHideFollowBanner\", _descriptor20, this);\n    }\n    /** The *Models store an array of objects. The array reflects the stack of opened layers if multiple.\n     * The grander index is the actually displayed popup and if closed it will be removed from the models and the new grander index will be reopened.\n     * \tThis is to be used through the promises returned by modalPopup() eg:\n     * <code>\n     * this.popupService.openPopup('my-first-page').then(\n     * \treturnedValue => {\n     *\t\tif(returnedValue)\n     * \t\t\tthis.popupService.openPopup('my-second-page').then( ... );\n     * \t\t\tthis.popupService.openPopup('my-second-page').then(\n     *\t\t\t\treturnedValue => {\n     *\t\t\t\t\tif(returnedValue)\n     * \t\t\t\t\t\tthis.popupService.openPopup('my-third-page').then( ... );\n     * \t\t\t\t\telse\n     * \t\t\t\t\t\tthis.popup.close(returnedValue); // will close the stack higher index ('my-second-page') and reopen 'my-first-page' with the model that was provided to it + the higherStackedReturn property set to returnedValue (model.higherStackedReturn = returnedValue)\n     *\t\t\t});\n     * \t\telse\n     * \t\t\tthis.popup.close(returnedValue, 'my-first-page'); // will close/remove from the stack the 'my-first-page' popup\n     *\t});\n     * </code>\n     *\n     * Models features handled by the opened popup :\n     * {\n    \t\tlabel: 'my-popup',\n    \t\tstatus: 'opening', // 'opening' || 'opened' || 'closing' || 'closed'\n    \t\t\tcloseOnClickOutside: true, // default\n    \t\tcallbacks: {\n    \t\t\tonOpened: function(){}, // ideal to focus on a popup element - called once the popup is opened - it is a replacement for the did-insert helper that is only fired when the route is handled\n    \t\t\t\tonClosing: function(){}, // called when the popup will close - it is the same moment when the closePopup() function is called but it can be set by the popup caller component\n    \t\t\t\tonClosed: function(){}, // called when the popup is closed\n    \t\t}\n     * }\n    */\n    get _openedSidePanelModels() {\n      return this._openedModels.filter(md => md.type == 'side-panel');\n    }\n    get _openedPhonePageModels() {\n      return this._openedModels.filter(md => md.type == 'phone-page');\n    }\n    get _openedPopupModels() {\n      return this._openedModels.filter(md => md.type == 'popup');\n    }\n    _extractType(label) {\n      if (label.startsWith('popup_')) return 'popup';\n      if (label.startsWith('side-panel_')) return 'side-panel';\n      if (label.startsWith('phone-page_')) return 'phone-page';\n      if (label.startsWith('phoneslide_')) {\n        return this.phone.getTypeForLabel(label);\n      }\n      let available = '';\n      this._openedModels.forEach(md => {\n        available += md.label + '/' + md.type + ', ';\n      });\n      available += this.phone.availablePhoneslidesList;\n      throw new Error('Undefined model type for label \"' + label + '\"\\navailable:' + available);\n    }\n    _setModel(model) {\n      if (!model.type) model.type = this._extractType(model.label);\n      if (!['popup', 'side-panel', 'phone-page'].includes(model.type)) throw new Error('Undefined model type \"' + model.type + '\" for label \"' + model.label + '\"', model);\n      this._dbgHandler('_setModel(', ...arguments, ')', this._openedPopupModels, this._openedSidePanelModels, this._openedPhonePageModels, this._openedModels);\n      /**/\n      model.label = model.label.replace(model.type + '_', '').replace('phoneslide_', '');\n      model.status = 'registered';\n      this._openedModels.push(model);\n      this.modelsChanged = Math.random();\n    }\n    _popModel(model) {\n      // used when the popup/slide is closed : we remove it from the open stack\n      if (model) {\n        const idx = this._openedModels.findLastIndex(md => md === model);\n        return this._openedModels.splice(idx, 1);\n      } else return this._openedModels.pop();\n    }\n    _reopenLastStackedPopup() {\n      if (this._openedModels.length) {\n        this._openedModels.findLastIndex(md => {\n          // console.log( '_reopenLastStackedPopup()', md );\n          if (md.status == 'opened') {\n            this._dbgHandler('_reopenLastStackedPopup()', md);\n            this._showPopup(md);\n            return true;\n          }\n        });\n      }\n    }\n    _setInCurrentModel(property, value, modelType = null, thisLabel = null) {\n      if (!this._openedModels || !this._openedModels.length) return null;\n      const idx = this._getModelIndex(null, modelType, thisLabel);\n      if (idx === null) {\n        // console.error( \"_setInCurrentModel(\", property, \", \", value, \", \", modelType, \")\", idx, null );\n        return null;\n      }\n      let model = this._openedModels[idx];\n      if (thisLabel && model.label != thisLabel) {\n        // console.error( \"_setInCurrentModel(\", property, \", \", value, \", \", modelType, \")\", idx, null );\n        return null;\n      }\n      // console.error( \"_setInCurrentModel(\", property, \", \", value, \", \", modelType, \")\", idx, model );\n      model[property] = value;\n      if (property === 'status') {\n        const cType = (0, _string.camelize)(model.type);\n        this['_' + value + cType + 'Label'] = model.label;\n        // console.error( \"_setInCurrentModel this.trigger(\", value, \", \", model, \", \", modelType, \", \", thisLabel, \") model idx:\", idx );\n        if (value == 'opened' || value == 'closed') (0, _runloop.later)(this, () => {\n          this.trigger(value, model);\n        }, 200); // a little to wait for the fade anim to finish\n        else this.trigger(value, model);\n        // console.log( '_setInCurrentModel() set', model, property, value );\n      }\n      return this._openedModels[idx];\n    }\n    _getModelIndex(label = null, modelType = null, modelLabel = null) {\n      // console.log('_getModelIndex(', label, ', ', modelType, ', ', modelLabel, ')')\n      if (!this._openedModels || !this._openedModels.length) return null;\n      if (modelType && typeof modelType !== 'object') modelType = [modelType];\n      if (modelLabel && typeof modelLabel !== 'object') modelLabel = [modelLabel];\n      return this._openedModels.findLastIndex(md => {\n        return (!modelType || modelType.includes(md.type)) && (!modelLabel || modelLabel.includes(md.label)) && (!label || md.label === label);\n      });\n    }\n\n    /*******************/\n\n    get _openedSidePanelModels() {\n      return this._openedModels.filter(md => md.type == 'side-panel');\n    }\n    get _openedPhonePageModels() {\n      return this._openedModels.filter(md => md.type == 'phone-page');\n    }\n    get _openedPopupModels() {\n      return this._openedModels.filter(md => md.type == 'popup');\n    }\n    isPopupOpened(label = null, modelType = null) {\n      return this._openedModels.filter(md => {\n        return (!label || md.label == label) && (!modelType || md.type == modelType);\n      }).length;\n    }\n    getModel(label = null, modelType = null) {\n      if (!this._openedModels.length) return null;\n      if (!label && !modelType)\n        // return the last added model\n        return this._openedModels[this._openedModels.length - 1];\n      const modelLabel = modelType ? label.replace(modelType + '_', '') : label;\n      const idx = this._getModelIndex(null, modelType, modelLabel);\n      // console.log('getModel(', label,', ', modelType, ')', this._getModelIndex(null, modelType, modelLabel) ?? null, this._openedModels[ idx ] ?? null, this._openedModels);\n      return this._openedModels[idx] ?? null;\n    }\n\n    /**/\n    getPopupModel(popupLabel = null) {\n      return this.getModel(popupLabel, 'popup');\n    }\n    getSidePanelModel(sidePanelLabel = null) {\n      return this.getModel(sidePanelLabel, 'side-panel');\n    }\n    getPhonePageModel(phonePageLabel = null) {\n      return this.getModel(phonePageLabel, 'phone-page');\n    }\n    /**/\n\n    openPopup(popupLabel, model, closeOnClickOutside = true, noDeprecationWarning = false) {\n      if (!noDeprecationWarning) this.debug.error('Calling directly the popup service openPopup() is deprecated ! Please switch to the device service openPopup(\"' + popupLabel + '\", model) method.');\n      model = model ?? {};\n      model.label = popupLabel;\n      model.status = 'opening';\n      model.closeOnClickOutside = model.closeOnClickOutside ?? closeOnClickOutside;\n      this.debug.log('popup.openPopup: opening ' + popupLabel, document.getElementById('popup-' + popupLabel + '-container'), '\\nwith model', model);\n      return this.modalPopup(model);\n    }\n    async openLoginPopup(isRegistration, closeOnClickOutside = true) {\n      this._insertRecaptchaScript();\n      this._loginPopup_isRegistration = isRegistration;\n      return this.openPopup('popup_login', {\n        isRegistration\n      }, closeOnClickOutside, true);\n    }\n    async openLoginSlide(isRegistration, closeOnClickOutside = true) {\n      this._insertRecaptchaScript();\n      this._loginPopup_isRegistration = isRegistration;\n      return this.openPopup('phoneslide_login', {\n        isRegistration\n      }, closeOnClickOutside, true);\n    }\n    async _insertRecaptchaScript() {\n      // https://www.google.com/recaptcha/api.js?render=explicit\n      // Here we load the GG Recaptcha script only if the login popup / phoneslide is opened\n      if (!document.head.querySelector(`script[src='https://www.google.com/recaptcha/api.js?render=explicit']`)) {\n        const script = document.createElement('script');\n        script.onload = () => {\n          this._recaptchaScriptReady = true;\n        };\n        script.src = 'https://www.google.com/recaptcha/api.js?render=explicit';\n        document.head.appendChild(script);\n        return new Promise((resolve, reject) => {\n          const timer = setInterval(() => {\n            if (this._recaptchaScriptReady) {\n              clearInterval(timer);\n              (0, _runloop.later)(this, resolve, 100); // give it some time to really be up\n            }\n          }, 100);\n        });\n      }\n      return new Promise((resolve, reject) => {\n        resolve();\n      });\n    }\n\n    /*A frontend to quickly enable/disable all console logs in the service\n     */\n    _dbgHandler() {\n      if (!this._dbg_logAllCalls) return;\n      let args = arguments;\n      args[0] = \"service popup \" + args[0];\n      this.debug.notify(...args);\n    }\n\n    /** modalPopup() is an async promised wrap-up for showPopup()\n     * it returns a promise allowing to await for the popup closing to continue the calling method (replacing the callback logic)\n     *\n     * eg:\n     * async myfunc(){\n    \t\tlet abort = false;\n    \t\t// note that the await is just as example, the .then() is enough : either one of them would be enough.\n    \t\t\tawait this.popupService.modalPopup(\"confirm-or-cancel-that-we-continue\").then(\n    \t\t\t(confirmed) => {\n    \t\t\t\tabort = !confirmed;  // this is enough for myfunc() to handle the value returned by the popup\n    \t\t\t\t// but we may still do any other stuff we want\n    \t\t\t\tif (confirmed) {\n    \t\t\t\t\talert(\" ok, we'll continue whatever we are doing ! Fire in the hole ! \");\n    \t\t\t\t} else { // false == click on cancel, null == click on the popup's close button\n    \t\t\t\t\talert(\" wooh we bail out then ! \");\n    \t\t\t\t}\n    \t\t\t}\n    \t\t);\n    \t\tif(abort)\n    \t\t\treturn;\n    \t\tthis.autoDestruct('now');\n    \t}\n        * }\n        *\n        * => though we can still also use the onCloseCallback argument for an async handler, the goal is for myfunc() to get the returned value synchronously in it's body.\n        *\n     **/\n    async modalPopup(model) {\n      this._dbgHandler('modalPopup', model);\n      const _this = this;\n      return new Promise((resolve, reject) => {\n        let _popupOpening = false;\n        if (!_popupOpening && (document.getElementById('popup') || document.getElementById('sidePanel') || document.getElementById('phonePage'))) {\n          // In some cases when loading a full page (direct url) we need to wait a bit for our popup container tag to be ready\n          _popupOpening = true;\n          this._showPopup(model);\n        }\n        const timer = setInterval(() => {\n          if (!_popupOpening && (document.getElementById('popup') || document.getElementById('sidePanel') || document.getElementById('phonePage'))) {\n            // In some cases when loading a full page (direct url) we need to wait a bit for our popup container tag to be ready\n            _popupOpening = true;\n            this._showPopup(model);\n          }\n          if ((document.getElementById('popup') || document.getElementById('sidePanel') || document.getElementById('phonePage')) && !_this._opened) {\n            clearInterval(timer);\n            resolve(..._this._lastClosingParamForPromise);\n          }\n        }, 400);\n      });\n    }\n\n    // This is the low level popup shower code :\n    _showPopup(model) {\n      if (!model.status || model.status != 'opened') this._setModel(model);\n      this.debug.error('_showPopup(', ...arguments, ')');\n      const cType = (0, _string.camelize)(model.type),\n        modelCat = cType == 'popup' ? model.type : 'phoneslide';\n      this[cType + 'Label'] = model.type + '-' + model.label;\n      const vdat = {};\n      vdat[model.type] = model.label;\n      this.analytics.sendEvent('view', vdat);\n      this._setInCurrentModel('status', 'opening');\n      (0, _runloop.cancel)(this._closeAnim);\n      this._opened = true;\n      /*\n      if (!model.keepSidePanel) {\n      \t// some mobile popups require the user to go back the original side panel\n      \tthis.device.closeSidePanel();//we don't want conflicts...\n      }\n      */\n      this._closeOnClickOutside = model.closeOnClickOutside ?? true;\n\n      /**/\n      //\n      // if( !document.getElementById(model.type).classList.contains('hidden') && !document.getElementById(model.type).classList.contains('shown') )\n      // \tdocument.getElementById(model.type).classList.add('hidden'); // this is to init the opacify anim\n      /**/\n      document.body.classList.replace(model.type + '_hidden', model.type + '_shown');\n      // fallback:\n      if (!document.body.classList.contains(model.type + '_shown')) document.body.classList.add(model.type + '_shown');\n      /**/\n      // this.popupClass = model.label + ' shown';\n      if (cType == 'popup') document.getElementById('popup-fader').classList.replace('hidden', 'shown');\n      this[cType + 'Class'] = model.type + '-' + model.label + ' shown';\n      this[cType + 'Label'] = model.type + '_' + model.label;\n      // document.getElementById(model.type).classList.replace('hidden', 'shown');\n      this._dbgHandler('_showPopup', cType, '\\nthis[' + cType + 'Class]=', this[cType + 'Class'], '\\nthis[' + cType + 'Label]=', this[cType + 'Label'], '\\npopup=', document.getElementById('popup'), '\\npopup-container=', document.getElementById('popup-container'), '\\nspecific popup-container {id:' + modelCat + '_' + model.label + '-' + '-container}=', document.getElementById(modelCat + '_' + model.label + '-container'), '\\nmodel=', model);\n      /**/\n      if (!document.getElementById(modelCat + '_' + model.label + '-container')) throw new Error('The specific component for the ' + cType + ' ' + model.label + ' is not available !\\n{' + modelCat + '_' + model.label + '-container}');\n      this._hidePageContentForScreenreaders_later = (0, _runloop.later)(this, this.hidePageContentForScreenreaders.bind(this), 100);\n      //! ACCESSIBILITY/UTIL HANDLER :: \tclose the popup when ESC is pushed\n      document.body.addEventListener(\"keydown\", this._escHandler.bind(this));\n      if (modelCat == 'phoneslide') this._hidePageContentForPhoneslide();\n      /**/\n      this._setInCurrentModel('status', 'opened');\n    }\n    _hidePageContentForPhoneslide() {\n      (0, _runloop.cancel)(this._sPCP);\n      (0, _runloop.cancel)(this._hPCP);\n      this._hPCP = (0, _runloop.later)(this, () => {\n        document.getElementById('page-content-accessibility').style.display = 'none';\n      }, 400);\n    }\n    _showPageContentForPhoneslide() {\n      (0, _runloop.cancel)(this._hPCP);\n      (0, _runloop.cancel)(this._sPCP);\n      this._sPCP = (0, _runloop.later)(this, () => {\n        document.getElementById('page-content-accessibility').style.display = 'initial';\n      }, 10);\n    }\n\n    /**\n     * Closes the popup modal - will fail silently if not opened\n     * @method close\n     */\n    close(paramForCBack, clickEvt, thisType, thisLabel) {\n      const model = this._setInCurrentModel('status', 'closing', thisType, thisLabel);\n      if (!model || /*model.status == \"closing\" ||*/model.status == \"closed\") {\n        this._dbgHandler('close(', ...arguments, ') - aborting already closed - model:', model);\n        return;\n      }\n      const cType = (0, _string.camelize)(model.type);\n      this._dbgHandler('close(', ...arguments, ')', model, cType);\n      /**/\n      /* if( typeof paramForCBack == 'object' && paramForCBack.target && paramForCBack.type ){\n      \t// if paramForCBack is an Event we considere it to be omitted then we pass it as null\n      \tclickEvt = null;\n      }*/\n      if (paramForCBack === undefined) paramForCBack = null;\n      if (clickEvt === undefined) clickEvt = null;\n      this._lastClosingParamForPromise = [paramForCBack, clickEvt];\n      this._dbgHandler(\"popup.close(\" + paramForCBack + \")\", model.type, document.getElementById(model.type));\n      /**/\n      if (document.getElementById('popup-fader')) document.getElementById('popup-fader').classList.replace('shown', 'hidden');\n      this[cType + 'Class'] = model.label + ' hidden';\n      this._closeAnim = (0, _runloop.later)(this, () => {\n        // document.getElementById('popup').classList.replace('shown', 'hidden-popup');\n        document.body.classList.replace(model.type + '_shown', model.type + '_hidden');\n        this[cType + 'Class'] = '_blank hidden';\n        this[cType + 'Label'] = '_blank';\n      }, 800);\n      this.showPageContentForScreenreaders();\n      this._showPageContentForPhoneslide();\n      if (this._popupCloseCallback && typeof this._popupCloseCallback == 'function') {\n        this._popupCloseCallback(paramForCBack, clickEvt);\n        this._popupCloseCallback = null;\n      }\n      // current popup has requested to go back to the previous popup\n      if (this.goBackPreviousPopup && this.previousPopupArguments.length) {\n        // call again showPopup with the previous saved popup arguments>\n        this.debug.log(\"popup service close(\", paramForCBack, clickEvt, \") - this.goBackPreviousPopup is true : call again showPopup with the previous saved popup arguments. this.previousPopupArguments{\" + this.previousPopupArguments.length + \"}=\", this.previousPopupArguments);\n        this.currentPopupArguments = null; //we close the current then we swipe this but showPopup will fill it again with the next call opening the previous popup ^^\n        this.showPopup(...this.previousPopupArguments.pop());\n      } else {\n        this.previousPopupArguments = [];\n        this.currentPopupArguments = null;\n        this._opened = false;\n        this.popupModel = null;\n      }\n      this._setInCurrentModel('status', 'closed');\n      this._popModel(model);\n      this._reopenLastStackedPopup(); // the initial use-case is for popup type : if one is opened and contains the share feature, once the share popup is closed this will reopen the initial one (if this tagged with an opened status)\n    }\n    hidePageContentForScreenreaders() {\n      // this.debug.log('hidePageContentForScreenreaders');\n      const afterRenderScreenreader = function () {\n        // hide and remove content from screenreader\n        if (document.getElementById(\"page-content-accessibility\")) {\n          document.getElementById(\"page-content-accessibility\").setAttribute('aria-hidden', true);\n          document.getElementById(\"page-content-accessibility\").setAttribute('tabindex', -1);\n        }\n        // focus on the accessibility Hook after the render\n        let acchook = null,\n          firstTofocus = acchook;\n        if (document.getElementById(\"accessibilityHook2\")) {\n          acchook = document.getElementById(\"accessibilityHook2\"); //a custom hook we can put anywhere to start the reading of the popup\n          firstTofocus = acchook;\n        } else {\n          acchook = document.getElementById(\"accessibilityHookDefault\"); //this is the id of app/components/popup-close-button\n          if (acchook) {\n            firstTofocus = acchook;\n            if (acchook.parentNode.nextElementSibling) {\n              //if possible we focus on the title of the popup's body (then tabnav will get back to the close button)\n              // \t\t\t\t\t\tthis.debug.log('hidePageContentForScreenreaders: B firstTofocus=', firstTofocus);\n              firstTofocus = acchook.parentNode.nextElementSibling;\n            }\n          }\n        }\n        if (firstTofocus) {\n          firstTofocus.focus();\n          //To keep captive the tabnav in the modal popup (looping the focus \tin the popup while it is open) we need to go programmatic : on tab down on the last focusable element we focus back on the firstTofocus element at the top of the popup\n          const lastElement = document.querySelector('#popup *[tabindex],  #popup button, #popup a');\n          if (!lastElement) return;\n          this.debug.log(\"lastElement:\", lastElement);\n          const _this = this,\n            _firstTofocus = firstTofocus,\n            goBackUpHook = document.getElementById(\"accessibilityHookDefault\"),\n            onflyHandler = function (evt) {\n              _this.debug.log('keydown:', evt);\n              if (evt.originalEvent) evt = evt.originalEvent;\n              /*Checking if anything new (for resource-popup attachments are loaded as promises and may appear later)*/\n              if (evt.keyCode === 9) {\n                const popupFocusableElements = document.querySelector('#popup *[tabindex],  #popup button, #popup a');\n                _this.debug.log(\"popupFocusableElements:\", popupFocusableElements);\n                //const lastElement = popupFocusableElements.pop();\n                const lastElement = popupFocusableElements[popupFocusableElements.length - 1];\n                if (lastElement !== evt.target) {\n                  //we forward the return to _firstTofocus to the actual last focusable element of the popup (but we also keep watching and being ready to send the focus to _firstTofocus if we get to be the last element)\n                  lastElement.addEventListener('keydown', onflyHandler);\n                  return;\n                }\n                /**/\n                // _this.debug.log(\"_firstTofocus:\", _firstTofocus);\n                //_firstTofocus.focus();\n                evt.preventDefault();\n                if (goBackUpHook) goBackUpHook.focus();else _firstTofocus.focus();\n              }\n            };\n          lastElement.addEventListener('keydown', onflyHandler);\n        }\n      };\n      (0, _runloop.scheduleOnce)('afterRender', afterRenderScreenreader.bind(this));\n    }\n    showPageContentForScreenreaders() {\n      // check first, this element is undefined when navigating directly to some deep mobile sidepanel\n      if (document.getElementById(\"page-content-accessibility\")) {\n        document.getElementById(\"page-content-accessibility\").setAttribute('aria-hidden', false);\n        document.getElementById(\"page-content-accessibility\").setAttribute('tab-index', null);\n      }\n    }\n    _escHandler(evt) {\n      //close the popup on ESC pressed\n      if (evt.originalEvent) evt = evt.originalEvent;\n      if (evt.keyCode === 27) this.close();\n    }\n    clickOutsideHandler(evt) {\n      const model = this.getModel();\n      if (!model) return;\n      // console.log('clickOutsideHandler(', evt, ')');\n      if (!this._closeOnClickOutside && !model.closeOnClickOutside) return;\n      let target = evt.target,\n        skip = false;\n      if (!target.parentNode) return;\n      // console.log('target.parentNode:', target.parentNode)\n      while (target.parentNode) {\n        target = target.parentNode;\n        // console.log('target.parentNode:', target.parentNode)\n        if (target.className && target.className.includes && (target.className.includes('popup__content') || target.className.includes('popup__mail-container'))) {\n          skip = true;\n          break;\n        }\n        // if( !target.parentNode )return;//skip!\n      }\n      // console.log('clickOutsideHandler skip=', skip);\n      if (skip) return;\n      this.close();\n    }\n    forceCookieConsentOpening() {\n      // this is called to open the cookies settings panel\n      this._forceCookieConsentOpening = true;\n    }\n    removeCookieConsentFocus() {\n      if (this._cookieConsentFocusRedirRedirector) {\n        this._cookieConsentFocusRedirRedirector.off('focus', this._cookieConsentFocusRedirHandler);\n        this._cookieConsentFocusRedirRedirector.focus();\n      }\n      this._topHeaderHeaderTopReady = false;\n      this._cookiesConsentReady = false;\n      this._cookiesPreferencesReady = false;\n    }\n    setCookieConsentFocus(topHeaderHeaderTopReady, cookiesConsentReady, cookiesPreferencesReady) {\n      //the focus will be sent only if cookie-consent calls the same method with the 2nd arg as true\n      if (topHeaderHeaderTopReady) this._topHeaderHeaderTopReady = true;\n      if (cookiesConsentReady) {\n        this._cookiesPreferencesReady = false;\n        this._cookiesConsentReady = true;\n      }\n      if (cookiesPreferencesReady) {\n        this._cookiesPreferencesReady = true;\n        this._cookiesConsentReady = false;\n      }\n      if (this._topHeaderHeaderTopReady && (this._cookiesConsentReady || this._cookiesPreferencesReady)) {\n        let goBackUpHook = null;\n        if (this._cookiesPreferencesReady) goBackUpHook = document.querySelector('.cookie-consent__preferences-main-title');else goBackUpHook = document.querySelector('.cookie-consent__text');\n        const focuser = document.querySelector(\"#topHeader .top-header__tabs-item\"),\n          focusableElements = document.querySelector('#cookieConsentPanel *[tabindex], #cookieConsentPanel button, #cookieConsentPanel a'),\n          lastElement = focusableElements[focusableElements.length - 1],\n          _this = this,\n          onflyHandler = function (evt) {\n            _this.debug.log(\"FOCUS CC goBackUpHook:\", goBackUpHook);\n            //_firstTofocus.focus();\n            evt.preventDefault();\n            goBackUpHook.focus({\n              focusVisible: true\n            });\n          },\n          lastElementToUp = function (evt) {\n            //we keep captive the focus on the CC panel : the user must choose on choice\n            if (evt.keyCode === 9) {\n              _this.debug.log(\"FOCUS CC BACK goBackUpHook:\", goBackUpHook);\n              //_firstTofocus.focus();\n              evt.preventDefault();\n              goBackUpHook.focus({\n                focusVisible: true\n              });\n            }\n          };\n        this._cookieConsentFocusRedirHandler = onflyHandler;\n        this._cookieConsentFocusRedirRedirector = focuser;\n        // \t\t\tthis.debug.log(\"goBackUpHook:\", goBackUpHook);\n        // \t\t\tthis.debug.log(\"lastElement:\", lastElement);\n        if (this._cookieConsentFocusRedirRedirector) this._cookieConsentFocusRedirRedirector.addEventListener('focus', this._cookieConsentFocusRedirHandler);\n        if (lastElement) lastElement.addEventListener('keydown', lastElementToUp);\n      }\n    }\n    set hideFollowBanner(bool) {\n      this._forceHideFollowBanner = bool;\n    }\n    get hideFollowBanner() {\n      const hide = this.router.currentRouteName != 'community.participation.index' && this.router.currentRouteName != 'community.participation.get-involved' || this._forceHideFollowBanner || this.cookies.exists('hideFollowBanner') || this.cookies.exists('subscribed') || !this.userService.isAuthenticated && this.userService.isAnonymousFollower || this.userService.isAuthenticated && this.communityService.userFollowsCurrentProject;\n      const c = document.body.classList.contains('has-follow-banner');\n      if (hide) document.body.classList.remove('has-follow-banner');else document.body.classList.add('has-follow-banner');\n      return hide;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"debug\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"analytics\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"phone\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"userService\", [_dec], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"communityService\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"cookies\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"modelsChanged\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return -1;\n    }\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"popupLabel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '_blank';\n    }\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"popupClass\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '_blank hidden';\n    }\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"sidePanelLabel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '_blank';\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"sidePanelClass\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '_blank';\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"phonePageLabel\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '_blank';\n    }\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"phonePageClass\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return '_blank';\n    }\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"_dbg_logAllCalls\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return true;\n    }\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"_openedModels\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"_loginPopup_isRegistration\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"_recaptchaScriptReady\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"_forceCookieConsentOpening\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor20 = _applyDecoratedDescriptor(_class.prototype, \"_forceHideFollowBanner\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"hideFollowBanner\", [_tracking.cached], Object.getOwnPropertyDescriptor(_class.prototype, \"hideFollowBanner\"), _class.prototype), _class);\n});","define(\"zeppelin-architectes/services/services-events-handler\", [\"exports\", \"@ember/service\", \"@ember/utils\", \"@glimmer/tracking\", \"@ember/runloop\", \"@ember/object\"], function (_exports, _service, _utils, _tracking, _runloop, _object) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@ember/utils\",0,\"@glimmer/tracking\",0,\"@ember/runloop\",0,\"@ember/object\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  /**\n   * More and more services provide an on() and a trigger() methods to trigger callbacks on specific events\n   *\n   * This ServicesEventsHandlerService is made to centralize the complete and advanced logic that was provided originally by the ServicesEventsHandlerService to any other ones (community, intl...)\n   *\n   * The events logics can be used either internally by the services or externally by any components, routes and controller to react to an even triggered by a service (or by any other parts actually)\n   *\n   *\n   * WARNING: the events names are used as they are ==> take care to use unique events name for specific services or features ! though a same event name can be shared by multiple services\n   *\n   * WARNING: @ember/object/evented already provides an event handler mixin that is used in some original ember services (like intl) => the methods name on(), off() etc are  not to be used in this services.\n   * node_modules/ember-source/dist/packages/@ember/-internals/runtime/lib/mixins/\n   *\n   * The advantages with our solution are:\n   *\n   * - to provide debouncing (1sec) for events that may be triggered too often by multiple parties (thus we don't need to bother too much if trigger is called by multiple methods) ;\n   *\n   * - the debouncing handles all the arguments provided to trigger : eg if intl triggers 2 'localeChanged' in the same second but with locales that are not the same, the listeners will still be called twice ;\n   *\n   * - dontLaunchIfEventTriggered argument when setting the event handler : false by default means that if an event was triggered before the event handler was set the handler will be called when it is set.\n   *\n   * - partial arguments support : the trigger of an event can take arguments to be passed to the callbacks BUT beware that when dontLaunchIfEventTriggered=false the callbacks may be triggered some time after the trigger() func was called and that in this case the arguments will not be passed => if you set an event handler late, possibly after the event occurred, don't rely on the passed argument (just never rely on them, it would be safer for now...)\n   *\n   * Examples of use in services\n   * As an extend :\n   * <code>\n  \timport ServicesEventsHandlerService from \"./services-events-handler\"\n  \n  \texport default class MyService extends ServicesEventsHandlerService {\n  \t\tfoo(){\n  \t\t\tthis.trigger('foo-event');\n  \t\t}\n  \t}\n   * </code>\n   *\n   * As a service :\n   * <code>\n  \texport default class MyService extends Service {\n  \t\t// eventsHandler: service('services-events-handler'),\n  \t\t@service('services-events-handler') eventsHandler;\n  \n  \t\t// Events handler proxies :\n  \t\ton(eventName, callback, dontLaunchIfEventTriggered, once){\n  \t\t\tthis.eventsHandler.on(eventName, callback, dontLaunchIfEventTriggered, once);\n  \t\t}\n  \n  \t\tonce(eventName, callback, dontLaunchIfEventTriggered){\n  \t\t\tthis.eventsHandler.once(eventName, callback, dontLaunchIfEventTriggered);\n  \t\t}\n  \n  \t\toff(eventName, callback){\n  \t\t\tthis.eventsHandler.off(eventName, callback);\n  \t\t}\n  \n  \t\ttrigger(){\n  \t\t\tthis.eventsHandler.trigger(...arguments);\n  \t\t}\n  \n  \t\tsomeMethodInMyService(){\n  \t\t\tthis.on(['myservice_anEventName', 'myservice_anotherEventName'], eventName => {alert('Event triggered : ' + eventName);});\n  \t\t\tthis.trigger('myservice_eventCreated');\n  \t\t}\n  \t}\n   * </code>\n   */\n  let ServicesEventsHandlerService = _exports.default = (_class = class ServicesEventsHandlerService extends _service.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"debug\", _descriptor, this);\n      _defineProperty(this, \"_eventsTriggered\", []);\n      //this stores what event has already been triggered and by default on() will call the callback if the event was already called\n      _defineProperty(this, \"_eventsHandlersCallbacks\", {});\n      _defineProperty(this, \"_eventsHandlersCallbacksOnce\", {});\n      _defineProperty(this, \"_blockedEvents\", []);\n    }\n    once(eventName, callback, dontLaunchIfEventTriggered) {\n      this.on(eventName, callback, dontLaunchIfEventTriggered, true);\n    }\n    on(eventName, callback, dontLaunchIfEventTriggered, once) {\n      if (typeof eventName == 'string') {\n        let evtName = eventName;\n        eventName = [];\n        eventName.push(evtName);\n      }\n      // this.debug.log( \"ServicesEventsHandlerService on(\", eventName, \", \", callback, \", \", dontLaunchIfEventTriggered, \", \", once, \")\", trace() );\n      eventName.forEach(evtnm => {\n        // this.debug.log( \"on(\" + evtnm + \", \", callback, \")\", this._eventsTriggered, this._eventsHandlersCallbacksOnce );\n        if (!dontLaunchIfEventTriggered && this._eventsTriggered.includes(evtnm)) {\n          callback();\n          if (once) return; // launched once : no need to add it\n        }\n        if (!this._eventsHandlersCallbacks[evtnm]) this._eventsHandlersCallbacks[evtnm] = [];\n        if (!this._eventsHandlersCallbacks[evtnm].includes(callback)) {\n          this._eventsHandlersCallbacks[evtnm].push(callback);\n          if (once) {\n            if (!this._eventsHandlersCallbacksOnce[evtnm]) this._eventsHandlersCallbacksOnce[evtnm] = [];\n            this._eventsHandlersCallbacksOnce[evtnm][this._eventsHandlersCallbacksOnce[evtnm].length - 1] = true;\n          }\n        }\n      });\n    }\n    off(eventName, callback) {\n      if (typeof eventName == 'string') eventName = [eventName];\n      eventName.forEach((evtnm, idx) => {\n        if (this._eventsHandlersCallbacks[evtnm]) {\n          if (callback === undefined) this._eventsHandlersCallbacks[evtnm] = [];else {\n            this._eventsHandlersCallbacks[evtnm] = this._eventsHandlersCallbacks[evtnm].filter(cback => {\n              if (cback === callback) {\n                if (this._eventsHandlersCallbacksOnce[evtnm] && this._eventsHandlersCallbacksOnce[evtnm][idx]) delete this._eventsHandlersCallbacksOnce[evtnm][idx];\n                return false;\n              }\n              return true;\n            });\n          }\n        }\n      });\n    }\n    trigger() {\n      // this.debug.log('ServicesEventsHandlerService trigger(', ...arguments, ')');\n      // if(arguments[0]=='localeSet')\n      // \talert('ServicesEventsHandlerService trigger('+arguments[0]+')');\n      //debounce(this, this.debouncedTrigger, eventName, 1000, true);\n      // we need a debouncing per eventName (a particular event should be triggered now only if it wasn't triggered since 1sec but not blocking other events to be triggered) => a simple debounce would not discriminate the eventName and would applied on debouncedTrigger whatever is the eventName\n      // + same for the arguments as we consider as another trigger a same event name with different arguments\n      this._checkDebouncedEvent(...arguments);\n    }\n    _checkDebouncedEvent() {\n      // the event is triggered right now but then other events (same event name + same arguments) will not be triggered in the next 1sec\n      const eventName = arguments[0];\n      const hash = Array.from(arguments).join('_//_'); //the glue must be the most unique string !\n      if (!this._blockedEvents.includes(eventName)) {\n        (0, _runloop.later)(this, function () {\n          this._blockedEvents = this._blockedEvents.filter(shash => shash != hash);\n        }.bind(this), 1000);\n        this.debouncedTrigger(...arguments);\n        this._blockedEvents.push(hash);\n      }\n    }\n    debouncedTrigger() {\n      const args = arguments;\n      const eventName = args[0];\n      //this.debug.log('ServicesEventsHandlerService debouncedTrigger trigger(', ...arguments,')\\n', this._eventsHandlersCallbacks);\n      if (!eventName) return;\n      if (!this._eventsTriggered.includes(eventName)) this._eventsTriggered.push(eventName);\n      if (!this._eventsHandlersCallbacks[eventName]) return;\n      Object.entries(this._eventsHandlersCallbacks[eventName]).forEach(([idx, cb]) => {\n        if (!cb) return;\n        try {\n          // this.debug.log('ServicesEventsHandlerService debouncedTrigger trigger '+eventName+' calling', cb, '(', args,');');\n          if (this._eventsHandlersCallbacksOnce[eventName] && this._eventsHandlersCallbacksOnce[eventName][idx]) this.off(eventName, cb);\n          cb(...args);\n        } catch (error) {\n          this.debug.error('ServicesEventsHandlerService trigger(' + eventName + '): _eventsHandlersCallbacks cback error :', this.debug.dumpError(error));\n        }\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"debug\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n});","define(\"zeppelin-architectes/services/store\", [\"exports\", \"@ember/debug\", \"ember-data/store\"], function (_exports, _debug, _store) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _store.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"@ember/debug\",0,\"ember-data/store\"eaimeta@70e063a35619d71f\n  (true && !(false) && (0, _debug.deprecate)(\"You are relying on ember-data auto-magically installing the store service. Use `export { default } from 'ember-data/store';` in app/services/store.js instead\", false, {\n    id: 'ember-data:deprecate-legacy-imports',\n    for: 'ember-data',\n    until: '6.0',\n    since: {\n      enabled: '5.2',\n      available: '4.13'\n    }\n  }));\n});","define(\"zeppelin-architectes/services/toast\", [\"exports\", \"@ember/service\", \"zeppelin-architectes/helpers/render-svg\"], function (_exports, _service, _renderSvg) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _class, _descriptor, _descriptor2, _descriptor3;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"zeppelin-architectes/helpers/render-svg\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  //!@NOTICE: This is an helper to ease migrating from ember-toastr (dependent of jquery) to ember-notify\n  // it just bridges the toastr funcs to the notify ones\n  // https://www.npmjs.com/package/ember-notify\n  // positioning : https://github.com/adopted-ember-addons/ember-notify/blob/HEAD/examples/custom-position-animations.css\n  let ToastService = _exports.default = (_class = class ToastService extends _service.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"notify\", _descriptor, this);\n      _initializerDefineProperty(this, \"intl\", _descriptor2, this);\n      _initializerDefineProperty(this, \"debug\", _descriptor3, this);\n      _defineProperty(this, \"_tempToastDefaultOptions\", {\n        closeAfter: 8000\n      });\n      _defineProperty(this, \"_messages\", []);\n      _defineProperty(this, \"_pinedInformTranslation\", null);\n    }\n    //we may need to close it\n    closeInformTranslation() {\n      this.debug.log(\"closeInformTranslation()\");\n      if (this._pinedInformTranslation) {\n        this._pinedInformTranslation.removeAfter = null;\n        this._pinedInformTranslation.closeAfter = null;\n        this._pinedInformTranslation.close();\n      }\n      this._pinedInformTranslation = null;\n    }\n\n    /**\n     * a pinned toast is pre-setup opaque toast that doesn't disappear unless the user closes it\n     * the type argument allows to set the warning, info, success etc specific layout for the toast to pin\n     */\n    pin(type, body, title, icon, options = {}) {\n      let optsDefaults = {\n        closeAfter: null,\n        classNames: ['pinned'] //civ-toast\n        //removeAfter: 10000\n      };\n      Object.entries(options).forEach(([prop, val]) => {\n        optsDefaults[prop] = val;\n      });\n      optsDefaults.id = type + '_' + body.length + '_' + title.length + '_' + icon?.length; //don't display twice\n      switch (type) {\n        case 'informTranslation':\n          this.closeInformTranslation();\n          this._pinedInformTranslation = this.info(body, title, icon, optsDefaults);\n          return this._pinedInformTranslation;\n        case 'success':\n          return this.success(body, title, icon, optsDefaults);\n          break;\n        case 'info':\n          return this.info(body, title, icon, optsDefaults);\n          break;\n        case 'alert':\n          return this.alert(body, title, icon, optsDefaults);\n          break;\n        case 'warning':\n          return this.warning(body, title, icon, optsDefaults);\n          break;\n        case 'error':\n          return this.error(body, title, icon, optsDefaults);\n          break;\n      }\n    }\n    unpin(notifyMessageObject) {\n      this.close(notifyMessageObject);\n    }\n    close(notifyMessageObject) {\n      // notifyMessageObject.close();\n      this._messages = this._messages.filter(message => {\n        if (notifyMessageObject === message) {\n          message.close();\n          return false;\n        }\n        return true;\n      });\n    }\n    closeAll(notifyMessageObject) {\n      this._messages.forEach(message => {\n        message.close();\n      });\n      this._messages = [];\n    }\n    unknownError() {\n      this.error();\n    }\n    tryAgainError() {\n      this.error(this.intl.t('bubble.error.tryAgain'));\n    }\n    refreshPageError() {\n      this.error(this.intl.t('bubble.error.refreshPage'));\n    }\n    info(body, title, icon, options = {}) {\n      if (!icon) icon = '/images/toasts/icon_info.svg';\n      this._messages.push(this.notify.info(this._prepareContent('info', body, title, icon, this._tempToastDefaultOptions, options)));\n      return this._messages[this._messages.length - 1];\n    }\n    success(body, title, icon, options = {}) {\n      if (!body && !title) {\n        // simple usable call: this.toast.success();\n        body = this.intl.t('bubble.success');\n        title = '';\n      }\n      if (!icon) icon = '/images/toasts/icon_success.svg';\n      this._messages.push(this.notify.success(this._prepareContent('success', body, title, icon, this._tempToastDefaultOptions, options)));\n      return this._messages[this._messages.length - 1];\n    }\n    warning(body, title, icon, options = {}) {\n      if (!icon) icon = '/images/toasts/icon_warning.svg';\n      this._messages.push(this.notify.warning(this._prepareContent('warning', body, title, icon, this._tempToastDefaultOptions, options)));\n      return this._messages[this._messages.length - 1];\n    }\n    alert(body, title, icon, options = {}) {\n      if (!icon) icon = '/images/toasts/icon_error.svg';\n      this._messages.push(this.notify.alert(this._prepareContent('alert', body, title, icon, this._tempToastDefaultOptions, options)));\n      return this._messages[this._messages.length - 1];\n    }\n    error(body, title, icon, options = {}) {\n      if (!body && !title) {\n        // simple usable call: this.toast.error();\n        body = this.intl.t('bubble.error.unknown');\n        title = '';\n      }\n      if (!icon) icon = '/images/toasts/icon_error.svg';\n      this._messages.push(this.notify.error(this._prepareContent('error', body, title, icon, this._tempToastDefaultOptions, options)));\n      // console.log(\"error \", this._messages, this._messages[this._messages.length - 1]);\n      return this._messages[this._messages.length - 1];\n    }\n\n    /**/\n    _prepareContent(type, body, title, icon, optsDefaults = {}, options = {}) {\n      let opts = {}; //for not crushing the optsDefaults values (that may come from this._tempToastDefaultOptions) we use a copy :\n      Object.entries(optsDefaults).forEach(([prop, val]) => {\n        opts[prop] = val;\n      });\n      Object.entries(options).forEach(([prop, val]) => {\n        opts[prop] = val;\n      });\n\n      /* TODO : the format depends on the text length on mock-ups - do we implement that ??\n       */\n      const content = {\n        title: '',\n        html: ''\n      };\n      content.html = '<div class=\"civ-toast-container ' + type + '\">' + '<div class=\"toast-icon\">' + (icon.endsWith('.svg') ? (0, _renderSvg.renderSvg)(icon) : icon) +\n      /* Test 'hem :\n      renderSvg('/images/toasts/icon_info.svg')+\n      renderSvg('/images/toasts/icon_error.svg')+\n      renderSvg('/images/toasts/icon_success.svg')+\n      renderSvg('/images/toasts/icon_warning.svg')+\n      */\n      '</div>' + '<div>' + (title ? '<div class=\"toast-title\">' + title + '</div>' : '') + '<div class=\"toast-body\">' + body + '</div>' + '</div>' + '</div>';\n      Object.entries(opts).forEach(([prop, val]) => {\n        if (prop == 'title' || prop == 'title') throw new Error(prop + ' is a reserved property in toast service');\n        content[prop] = val;\n      });\n      return content;\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"notify\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"intl\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"debug\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _class);\n});","define(\"zeppelin-architectes/services/user\", [\"exports\", \"@ember/service\", \"@ember/utils\", \"zeppelin-architectes/config/environment\", \"@glimmer/tracking\", \"@ember/runloop\", \"@ember/object\", \"rsvp\", \"@ember/array/mutable\"], function (_exports, _service, _utils, _environment, _tracking, _runloop, _object, _rsvp, _mutable) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@ember/utils\",0,\"zeppelin-architectes/config/environment\",0,\"@glimmer/tracking\",0,\"@ember/runloop\",0,\"@ember/object\",0,\"rsvp\",0,\"@ember/array/mutable\"eaimeta@70e063a35619d71f\n  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n  function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n  const {\n    APP: {\n      USER\n    }\n  } = _environment.default;\n\n  /**\n   * This service is made to centralize user datas for components\n  \n   * If you need to react to specific events login/unlogin etc. :\n   2 base events you can use (search for \"trigger\" in the service to find more or implement your own - very easy to do : just put a trigger(\"myOwnEvent\"); wherever you need !) :\n   <code>\n  \tconstructor(){\n  \t\tsuper(...arguments);\n  \t\tconst _this = this;\n  \t\tthis.userService.on(\"userResolved\", this._userRightsChanged.bind(this));\n  \t\tthis.userService.on(\"userRightsChanged\", this._userRightsChanged.bind(this));\n  \t}\n  \n  \t_userRightsChanged(){\n  \t\tif( !this.userService.isTranslator )\n  \t\t\talert('You don't have translator rights...');\n  \t}\n   </code>\n  \n   * Usages for community admins :\n  \n   **** Is the user an owner for the current community :\n   * Inject the user service <code>@service('user') userService;</code> then test directly userService.hasAdminRights in your template :\n   * <code>\n        {{#if this.userService.hasCommunityOwnerRights}}\n          You are an owner for the community !\n        {{/if}}\n   * </code>\n  \n   **** Is the user an admin for the current project :\n   * Inject the user service <code>@service('user') userService;</code> then test directly userService.hasProjectAdminRights in your template :\n   * <code>\n        {{#if this.userService.hasProjectAdminRights}}\n          You are an admin for the project !\n        {{/if}}\n   * </code>\n  \n   **** Can the user edit the current project :\n   * Here we need to check both hasProjectAdminRights and hasCommunityOwnerRights to enforce the intended behavior : community owers always can edit all the community's projects\n   * <code>\n  \t{{#if (or this.userService.hasProjectAdminRights this.userService.hasCommunityOwnerRights)}}\n  \t\tYou can edit the project !\n  \t{{/if}}\n   * </code>\n   *\n   * OR use the merged test :\n   * <code>\n  \t{{#if this.userService.hasAdminRights}}\n  \t\tYou can edit the project !\n  \t{{/if}}\n   * </code>\n   */\n  let UserService = _exports.default = (_dec = (0, _service.inject)('popup'), _dec2 = (0, _object.computed)('_intern_currentUser', '_intern_currentUser.emailConfirmed', '_randomUserLoad' /*, 'showActivationBanner'*/), _dec3 = (0, _object.computed)('_currentCommunity.{id,url}', 'communityService.currentCommunity'), _dec4 = (0, _object.computed)('communityService._currentProject'), _dec5 = (0, _object.computed)('_intern_currentUser.isGlobalAdmin'), _dec6 = (0, _object.computed)('_intern_currentUser.isDeveloper'), _dec7 = (0, _object.computed)('_intern_currentUser.isTester'), _dec8 = (0, _object.computed)('_intern_currentUser.isWebmaster'), _dec9 = (0, _object.computed)('_intern_currentUser', 'intl.supportedLocales'), _class = class UserService extends _service.default {\n    constructor(...args) {\n      super(...args);\n      _initializerDefineProperty(this, \"store\", _descriptor, this);\n      _initializerDefineProperty(this, \"debug\", _descriptor2, this);\n      _initializerDefineProperty(this, \"intl\", _descriptor3, this);\n      _initializerDefineProperty(this, \"router\", _descriptor4, this);\n      _initializerDefineProperty(this, \"session\", _descriptor5, this);\n      _initializerDefineProperty(this, \"analytics\", _descriptor6, this);\n      _initializerDefineProperty(this, \"toast\", _descriptor7, this);\n      _initializerDefineProperty(this, \"popupService\", _descriptor8, this);\n      _initializerDefineProperty(this, \"communityService\", _descriptor9, this);\n      _initializerDefineProperty(this, \"loginRender\", _descriptor10, this);\n      _initializerDefineProperty(this, \"currentUser\", _descriptor11, this);\n      _initializerDefineProperty(this, \"pendingAuthentication\", _descriptor12, this);\n      //! the pending will become false only after full handling, success/failure callbacks calls included.\n      _defineProperty(this, \"_pendingAuthentication_mail\", null);\n      _defineProperty(this, \"_pendingAuthentication_id\", null);\n      _defineProperty(this, \"_pendingAuthentication_FacebookLogin\", null);\n      _defineProperty(this, \"_pendingAuthentication_FacebookRegistration\", null);\n      //\t_sessionisAuthenticated = computed.readOnly('session.isAuthenticated');\n      /*@tracked*/\n      _defineProperty(this, \"_intern_currentUser\", false);\n      //beware of @tracked ! to avoid some magic that may forever loop our service\n      _initializerDefineProperty(this, \"_isStarted\", _descriptor13, this);\n      _initializerDefineProperty(this, \"_bearerToken\", _descriptor14, this);\n      _initializerDefineProperty(this, \"_hasCommunityOwnerRights\", _descriptor15, this);\n      _initializerDefineProperty(this, \"_hasProjectAdminRights\", _descriptor16, this);\n      _initializerDefineProperty(this, \"anonymousProjectFollowings\", _descriptor17, this);\n      _defineProperty(this, \"_verboseDebug\", false);\n      _initializerDefineProperty(this, \"_randomUserLoad\", _descriptor18, this);\n      /**\n       * !awaiting for reloadUser() (without noDebouncing=true) to return may pause the caller up to 5 secs.\n       * The debouncing is meant for auto-polling email validation of the account for activation-mail-banner or the activation popup ==> it doesn't need to be called to often as anyway the user should need some time to do the email activation.\n       * Calling it debounce-less is meant for other cases when we need to reload the user asap.\n       */\n      _defineProperty(this, \"_debounce_reloadUser_timer\", void 0);\n      _initializerDefineProperty(this, \"_currentCommunity\", _descriptor19, this);\n      _defineProperty(this, \"_currentProject\", null);\n      // \t@computed('session.isAuthenticated')\n      _defineProperty(this, \"_flawedSessionCleaned\", false);\n      /** @@method getCurrentUser( callbackWhenUserResolved )\n       * @@descript: This is the frontend to get the user object. If it is not already loaded it will be in a promise and we can't await the loading without drawbacks => the callbackWhenUserResolved argument allows the caller to be notified and execute other things when the user will be available. Of course an other approach is still possible by using the tracked currentUser property.\n       * @@arguments:\n       * @callbackWhenUserResolved : if the user is not already loaded we store this callbacks in an array and they will be called (and removed) once the user is resolved.\n       */\n      _defineProperty(this, \"_userResolvedCallbacks\", []);\n      _defineProperty(this, \"_isInvalidating\", false);\n      _defineProperty(this, \"_handlingLocaleStorageChanges\", false);\n      /*AUTH LOGIC :*/\n      //If the auth process doesn't answer quickly, we'll stop it and throw an error\n      _defineProperty(this, \"_waitForAuth_tout\", null);\n      //In case of multiple calls to authenticate (should not an usual case), we are prepared to notify each callers\n      _defineProperty(this, \"_authSuccessCallbacks\", []);\n      _defineProperty(this, \"_authFailureCallbacks\", []);\n      /*Ember-simple-auth events handlers (no need for route or login components handling) ::*/\n      _defineProperty(this, \"_hAS_running\", false);\n      _defineProperty(this, \"_hAS_running_timeout\", null);\n      /*:: Ember-simple-auth events handlers*/\n      _defineProperty(this, \"_pendingAuthentication_id\", false);\n      _defineProperty(this, \"_loadCurrentUserByEmail_pending\", false);\n      _defineProperty(this, \"_rights_handled\", []);\n      _defineProperty(this, \"_userProjects\", null);\n      //don't use directly ! use this.loadProjectFollowingsAndProjects()\n      _defineProperty(this, \"_userProjectsFollowing\", []);\n      //don't use directly !\n      _defineProperty(this, \"_userCommunities\", []);\n      //don't use directly ! use this.loadUserCommunityFollowings\n      _defineProperty(this, \"_loadProjectFollowingsAndProjects_running\", false);\n      _defineProperty(this, \"_loadProjectFollowingsAndProjects_done\", false);\n      // can be used directly to refresh the store\n      _defineProperty(this, \"_loadUserCommunityFollowings_running\", false);\n      /* EVENTS : */\n      _defineProperty(this, \"_eventsTriggered\", []);\n      //this stores what event has already been triggered and by default on() will call the callback if the event was already called\n      _defineProperty(this, \"_eventsHandlersCallbacks\", {});\n      _defineProperty(this, \"_eventsHandlersCallbacksOnce\", {});\n      _defineProperty(this, \"_blockedEvents\", []);\n    }\n    //This is to be used in internal debugging : if true it means an OAuth2 is currently processed - As a tracked it may also be used in external like for an animation running while an auth is processed (only in read mode, no direct value changes should be done externally !).\n    set pendingAuthentication(val) {\n      throw new Error('userService.pendingAuthentication can\\'t be set externally');\n    }\n    _dbgLog() {\n      if (!this._verboseDebug) return;\n      if (!arguments[0].startsWith('UserService')) arguments[0] = 'UserService ' + arguments[0];\n      this.debug.log(...arguments);\n    }\n    _dbgNotify() {\n      if (!this._verboseDebug) return;\n      if (!arguments[0].startsWith('UserService')) arguments[0] = 'UserService ' + arguments[0];\n      this.debug.notify(...arguments);\n    }\n    _dbgError() {\n      if (!this._verboseDebug) return;\n      if (!arguments[0].startsWith('UserService')) arguments[0] = 'UserService ' + arguments[0];\n      this.debug.error(...arguments);\n    }\n\n    // Individual tests : (we usually grant project admin rights to community owners, therefore testing userService.hasAdminRights is the simpler for any project rights related but still hasCommunityOwnerRights and hasProjectAdminRights can be tested individually and particularly util to test the community owers right as project admin doesn't have this right)\n    get hasCommunityOwnerRights() {\n      return this._hasCommunityOwnerRights;\n    }\n    get hasProjectAdminRights() {\n      return this._hasProjectAdminRights;\n    }\n    // Merged test for projects rights :\n    get hasAdminRights() {\n      return this.hasCommunityOwnerRights || this.hasProjectAdminRights;\n    }\n    get showActivationBanner() {\n      this._dbgLog('userService showActivationBanner() return ' + (this._intern_currentUser && !this._intern_currentUser.emailConfirmed), '\\nthis._intern_currentUser=', this._intern_currentUser);\n      return this._intern_currentUser && !this._intern_currentUser.emailConfirmed;\n    }\n\n    /**! this.session is not available when the code is started\n     * In some cases like forging requests headers we need at least the Bearer token early.\n     * getStoredSession() and getEarlySessionToken() use the browser's storage to get the stored session the earlier possible.\n     * Take care that the session/token may be quickly invalidated by ember_simple_auth session or the BE after that.\n     * Though we check for the expires_at to ensure it should still be valid.\n     */\n    getStoredSession() {\n      let auth = window.localStorage.getItem('ember_simple_auth-session');\n      // We may have false positive here : we double-check...\n      if (auth) {\n        const session = JSON.parse(auth),\n          userId = window.localStorage.getItem('userId');\n        // this._dbgLog('userService getStoredSession:' , session, session.authenticated.expires_at, Date.now());\n        if (session && session.authenticated && session.authenticated.expires_at > Date.now()) {\n          return {\n            access_token: session.authenticated.access_token,\n            refresh_token: session.authenticated.refresh_token,\n            expires_at: session.authenticated.expires_at,\n            userId: userId\n          };\n        }\n      }\n      return null;\n    }\n    getEarlySessionToken() {\n      const session = this.getStoredSession();\n      return session ? session.access_token : null;\n    }\n    checkEmailConformity(email) {\n      return !(0, _utils.isEmpty)(email) && /^[a-z0-9\\-_\\.]+@[a-z0-9\\-_\\.]+\\.[\\-_a-z0-9]{2,10}?$/i.test(email);\n    }\n    addRedirectQueryParam(url) {\n      // for any compliant BE controller : adds the redirectR query param to the url based on the current route and it's parameters => can be used in notifications to forge an url to a specific tool route (like the confirm-email route) that once it's job's done will then use the router.transitionTo() method to redirect the user to the initial URL (see also the registration workflow)\n      // this._dbgLog(\"userService router:\", this.router, this.router.currentRouteName);\n      this.router; //start it (?)\n      try {\n        let routeName = this.router.currentRouteName ?? '';\n        let add = 'route=' + routeName;\n        let pidx = 0;\n        let parent = this.router.currentRoute;\n        let orderedParams = [];\n        while (parent) {\n          let curParams = []; //if multiple params for a same route we need to reverse them to have them in the needed sens\n          Object.entries(parent.params).forEach(([name, value]) => {\n            // this._dbgLog( \"userService parent:\" + parent.name + \"-param \"+name+\"=\"+value );\n            curParams.push(value);\n          });\n          orderedParams = orderedParams.concat(curParams.reverse());\n          parent = parent.parent;\n        }\n        // orderedParams.reverse().forEach( value => {\n        // \tadd += `&r[${pidx}]=${value}`;\n        // \tpidx++;\n        // });\n        add += '&r=' + orderedParams.reverse().join(',');\n        // alert(url+'--'+add+'//'+encodeURIComponent(add));\n        // this.debug.alert(\"userService url:\" + url + '&redirectR=' + add);\n        url += (url.includes('?') ? '&' : '?') + /*'redirectR=' +*/ /*encodeURIComponent(add)*/add;\n      } catch (e) {/*do nothing*/}\n      return url;\n    }\n    async sendEmailConfirmation() {\n      //used in multiple cases by different components/controllers\n      // const token = this.session.data.authenticated.access_token;\n      // const token = this._intern_currentUser.confirmationToken;\n      let url = this.addRedirectQueryParam(\n      // `${config.APP.API_HOST}/api-priv/sendEmailConfirmation/${token}`\n      `${_environment.default.APP.API_HOST}/api-priv/sendEmailConfirmation`);\n      //local sample:  url=http://admin.civocracy.local:8000/api/sendEmailConfirmation?access_token=ODBkOTc2NzRmOTczMzk4NDFjYmQzZWFjOTg1ZTUxZjBmZDhhNTcxYTAyNDUzYmNkZjkyMzViZDJmZjVjZjFlZA&v7=true&redirectR=&route=community.participation.settings.administrator&r[1]=civov7&r[2]=civov7p2\n      try {\n        await fetch(url, {\n          method: 'POST',\n          headers: this.store.getUserHeaders()\n        });\n      } catch (error) {\n        this.toast.error(this.intl.t('bubble.error.unknown'));\n      }\n    }\n    async sendEmailResetPassword(email) {\n      //used in multiple cases by different components/controllers\n      // const token = this.session.data.authenticated.access_token;\n      // const token = this._intern_currentUser.confirmationToken;\n      let url = this.addRedirectQueryParam(\n      // `${config.APP.API_HOST}/api-priv/sendEmailConfirmation/${token}`\n      `${_environment.default.APP.API_HOST}/api-priv/passwordrequest/` + email);\n      //local sample:  url=http://admin.civocracy.local:8000/api/passwordrequest/name@email.com?access_token=ODBkOTc2NzRmOTczMzk4NDFjYmQzZWFjOTg1ZTUxZjBmZDhhNTcxYTAyNDUzYmNkZjkyMzViZDJmZjVjZjFlZA&v7=true&redirectR=&route=community.participation.settings.administrator&r[1]=civov7&r[2]=civov7p2\n      try {\n        return fetch(url, {\n          method: 'POST',\n          headers: this.store.getUserHeaders()\n        });\n      } catch (error) {\n        this.toast.error(this.intl.t('bubble.error.unknown'));\n      }\n    }\n    async reloadUser(noDebouncing) {\n      if (!this._intern_currentUser) return new Promise((resolve, reject) => {\n        reject(\"not_auth\");\n      });\n      if (noDebouncing && this._debounce_reloadUser_timer) {\n        (0, _runloop.cancel)(this._debounce_reloadUser_timer);\n        this._debounce_reloadUser_timer = null;\n      } else while (this._debounce_reloadUser_timer) {\n        await new Promise(async (resolve, reject) => {\n          setTimeout(resolve, 100);\n        });\n      }\n      await this._intern_currentUser.reload();\n      this.trigger('userReloaded');\n      this._debounce_reloadUser_timer = (0, _runloop.later)(this, () => {\n        this._debounce_reloadUser_timer = null;\n      }, 5000);\n      return this._intern_currentUser;\n    }\n    changeUserLocale(newLocale) {\n      //saving the language for the logged-in user :\n      if (this.getCurrentUser() /* && this._intern_currentUser*/) {\n        this._intern_currentUser.locale = arguments[0];\n        this._intern_currentUser.save();\n      }\n    }\n\n    /* Global utils, not \"current user\" related :*/\n    async searchUsersAPICall(searchString, filterOutUsersList, targetNumber = 10, requestOptions) {\n      //This func is used by add-an-admin components (3 of them actually = > we use this common code)\n      //filterOutUsersList is used to list already known users we don't want in the return.usersSuggestions\n      //targetNumber=20 either cut the numbers of matches or if the first request (LIKE \"searchString*\") returns less matches a second request is emitted (LIKE \"*searchString*\")\n      let users = [],\n        usersSuggestions = [];\n      if (!filterOutUsersList) filterOutUsersList = [];\n      if (searchString && searchString.length > 3) {\n        /*\n        let params = {\n        \tfetch_method: 'nameLike',\n        \tname_like: searchString,\n        \t'order_by[best]': 'DESC',\n        \t'filters[enabled]': 1,\n        \tlimit: 10,\n        };\n        */\n        const users_request = this.store.getRequestBuilder('user/registered-user').addSpecial('search', searchString)\n        // .addFilter( \"enabled\", 1 )\n        .setPagination(1, targetNumber);\n        if (requestOptions) users_request.addParameters(requestOptions);\n        //userSuggestions = this.store.query('user/registered-user', params);\n        // Now we filter out the existing project admins from the suggestions\n        //! We don't filter using communityAdmins as it is allow to add a community owner as a project admin (even if it would actually change no right for this user because he's already has the project admin rights being a community owner)\n        //users = await this.store.query('user/registered-user', params);\n        await this.store.requester(users_request);\n        users = users_request.pageItemsArray;\n        if (filterOutUsersList) usersSuggestions = users.filter(user => {\n          let found = false;\n          filterOutUsersList.forEach(skipU => {\n            if (skipU && skipU.id === user.id) {\n              found = true;\n            }\n          });\n          return !found;\n        });\n      }\n      return {\n        users: users,\n        usersSuggestions: usersSuggestions\n      };\n    }\n\n    /* Main frontend methods ::*/\n    get currentCommunity() {\n      this._dbgLog('userService currentCommunity:\\ncommunityService.currentCommunity=', this.communityService.currentCommunity, '\\n_currentCommunity=', this._currentCommunity, '\\n', this._currentCommunity ? this._currentCommunity.id : 'undefined', this._currentCommunity ? this._currentCommunity.slug : 'undefined');\n      return this._currentCommunity;\n    }\n    async setCurrentCommunity(community) {\n      this._dbgLog('userService setCurrentCommunity(', community, ');'); //, trace());\n      //called by routes/community.js and/or communityService to warn for changes as tracked/computed seems not to work fine in services (?)\n      this.computeCommunityAndProjects(community != this._currentCommunity);\n      this._currentCommunity = community;\n      //we set this handlers here to avoid a double query to  get projectFollowings\n      this.on(['userResolved', 'userLogout'], this.computeCommunityAndProjects.bind(this), true);\n      // \t\tthis.on( 'userLogout', this.computeCommunityAndProjects.bind(this), true );\n    }\n    get currentProject() {\n      this._dbgLog('userService currentProject:', this.communityService._currentProject);\n      // this._dbgLog(\"userService currentProject:\", this.communityService._currentProject);\n      return this.communityService._currentProject;\n    }\n    setCurrentProject(project) {\n      // this._dbgLog('userService setCurrentProject(', project, ');');\n      //called by routes/community/participation.js to warn for changes as tracked/computed seems not to work fine in services (?)\n      this.computeCommunityAndProjects(); //no need to force refresh : it has been done through this.setCurrentCommunity() if needed\n    }\n    async computeCommunityAndProjects(force) {\n      this.loadUserCommunityFollowings(this._loadUserCommunityFollowings_running ? false : force).then(() => {\n        this.loadProjectFollowingsAndProjects(this._loadProjectFollowingsAndProjects_running ? false : force).then(() => {\n          this._computeAdminRights();\n        });\n      });\n    }\n    get isAuthenticated() {\n      if (window.localStorage.getItem('userId') && !this._intern_currentUser) {\n        this._dbgLog('userService get isAuthenticated session=', this.session, '\\nisAuthenticated:', this.session.isAuthenticated);\n        if (!this.session.isAuthenticated /*&&\n                                          (!window.localStorage.getItem('ember_simple_auth-session') ||\n                                          !window.localStorage\n                                          .getItem('ember_simple_auth-session')\n                                          .includes('authenticator:oauth2'))\n                                          */) {\n          // this._dbgLog('userService get isAuthenticated session=', this.session, '\\nisAuthenticated:', this.session.isAuthenticated);\n          let auth = window.localStorage.getItem('ember_simple_auth-session');\n          // We may have false positive here : we double-check...\n          if (auth) {\n            auth = JSON.parse(auth);\n            this._dbgLog('userService get isAuthenticated ', \"isAuthenticated:\", auth, auth.authenticated.expires_at, Date.now());\n            if (auth.authenticated.expires_at > Date.now()) {\n              this._dbgLog('userService get isAuthenticated :: OK');\n              this.session.session.restore(auth);\n              this.loadCurrentUserById(window.localStorage.getItem('userId'));\n              // if(this._intern_currentUser)\n              // \tthis._intern_currentUser.isAuthenticated = true;\n              // if( auth.authenticated.expires_at - Date.now() < 30000 ){\n              // we refresh the token once the app launched to avoid a random expiration\n              // this.session.delayedRefreshAccessToken(10000);\n              // }\n              return true;\n            }\n          }\n          // if(false){\n          this._dbgLog('userService get isAuthenticated :: BURP');\n          window.localStorage.removeItem('ember_simple_auth-session');\n          window.localStorage.removeItem('userId');\n          if (this.session.isAuthenticated) this.session.invalidate();\n          // \t\t\t\tif(this._intern_currentUser)\n          // \t\t\t\t\tthis._intern_currentUser.isAuthenticated\n          // \t\t\t\t\t= false;\n          // }\n        } else {\n          this.loadCurrentUserById(window.localStorage.getItem('userId'));\n        }\n      }\n      // if(this._intern_currentUser)\n      // \tthis._intern_currentUser.isAuthenticated = this.session.isAuthenticated;\n      return this.session.isAuthenticated;\n    }\n    async isAuthenticatedAsync() {\n      return new Promise((resolve, reject) => {\n        // console.log('views isAuthenticatedAsync()', this._isStarted, this.pendingAuthentication, this._intern_currentUser);\n        if (this._isStarted && !this.pendingAuthentication) {\n          resolve(this._intern_currentUser);\n        }\n        const timer = setInterval(() => {\n          if (this._isStarted && !this.pendingAuthentication) {\n            clearInterval(timer);\n            resolve(this._intern_currentUser);\n          }\n        }, 100);\n      });\n    }\n\n    /** @@method getCurrentUserAsync( callbackWhenUserResolved )\n    \tDEPRECATED REMOVED @@method isAuthenticated( callbackWhenUserResolved )\n     * @@descript: This is the frontend to get the user object. If it is not already loaded it will be in a promise and we can't await the loading without drawbacks => the callbackWhenUserResolved argument allows the caller to be notified and execute other things when the user will be available. Of course an other approach is still possible by using the tracked currentUser property.\n     * @@NOTE: Take care that the promise would not resolve until the user is authenticated ! Meaning that if the user is not a registered one and doesn't log-in you will never have a result for an await or a then().\n     * => use isAuthenticatedAsync() to get an answer once any auth checking resolved => userService.isAuthenticatedAsync().then( isAuth => {return this.getCurrentUserAsync();} );\n     * @@arguments:\n     * @callbackWhenUserResolved : !DEPRECATED use getCurrentUserAsync().then(user=>{alert('user is logged-in')}.catch(()=>alert('The user failed to log in')))! if the user is not already loaded we store this callbacks in an array and they will be called (and removed) once the user is resolved. The callback can optionnaly take 2 arguments : (user, error) - NB: this logic is similar than the userService.on('userResolved', callback) but the difference is that the callbackWhenUserResolved will be called only once and will then been removed from the stack. As for on() the event callback will be called each time the user is resolved if it is multiple times.\n     * @noEmailConfirm: if false (default) continue to wait and poll for email confirmation once the user is logged in.\n     */\n    // async isAuthenticated(callbackWhenUserResolved, noEmailConfirm) {return this.getCurrentUserAsync(callbackWhenUserResolved, noEmailConfirm)}\n\n    async getCurrentUserAsync(callbackWhenUserResolved, noEmailConfirm) {\n      let uid = window.localStorage.getItem('userId');\n      if (this._intern_currentUser) uid = this._intern_currentUser.id;\n      this._dbgNotify('userService getCurrentUserAsync() : start', this._intern_currentUser, uid, this._intern_currentUser?.email, this._intern_currentUser?.emailConfirmed, this.store.getUserHeaders());\n      if (uid && !this._intern_currentUser) {\n        if (!this.session.isAuthenticated && (!window.localStorage.getItem('ember_simple_auth-session') || !window.localStorage.getItem('ember_simple_auth-session').includes('authenticator:oauth2'))) {\n          window.localStorage.removeItem('userId');\n          uid = null;\n        } else {\n          this._dbgLog('userService getCurrentUserAsync() loading:' + uid);\n          await this.loadCurrentUserById(uid, callbackWhenUserResolved);\n          if (this._intern_currentUser) uid = this._intern_currentUser.id;\n        }\n      }\n      const _this = this,\n        _noEmailConfirm = noEmailConfirm;\n      return new Promise((resolve, reject) => {\n        if (!uid) {\n          this._dbgNotify('userService getCurrentUserAsync() : reject(not_auth);', _this._intern_currentUser);\n          reject('not_auth');\n          return;\n        }\n        /**/\n        const timer = setInterval(() => {\n          if (_this._intern_currentUser) {\n            clearInterval(timer);\n            // _this._intern_currentUser.isAuthenticated = true;\n            // this._dbgNotify('userService getCurrentUserAsync() : already auth resolve( ', _this._intern_currentUser,  ');');\n            resolve(_this._intern_currentUser);\n          }\n        }, 100);\n        /**/\n      });\n    }\n    getCurrentUser(callbackWhenUserResolved) {\n      // return;//temp test async\n      if (this._intern_currentUser) {\n        this._dbgLog('userService getCurrentUser() return A :', this._intern_currentUser);\n        if (!this.currentUser) this.currentUser = this._intern_currentUser;\n        return this._intern_currentUser;\n      }\n      let uid = window.localStorage.getItem('userId');\n      /** /\n      if( !this._userResolvedCallbacks.includes( function(){this.trigger('userResolved');}.bind(this) ) ){\n      \t//trigger the userResolved event\n      \tthis._userResolvedCallbacks.push(function(){this.trigger('userResolved');}.bind(this));\n      }\n      */\n      // this.debug.warn(\"userService getCurrentUser() - uid:\"+uid+\" - \", callbackWhenUserResolved);\n      if (callbackWhenUserResolved && this._userResolvedCallbacks.indexOf(callbackWhenUserResolved) < 0) {\n        // this._dbgLog(\"userService getCurrentUser() - uid:\"+uid+\" - ADDING CBACK callbackWhenUserResolved=\\n\", callbackWhenUserResolved, \"\\n_userResolvedCallbacks{\" + this._userResolvedCallbacks.length + \"}=\", this._userResolvedCallbacks);\n        this._userResolvedCallbacks.push(callbackWhenUserResolved);\n      }\n      /**/\n      /*this._dbgLog( \"userService getCurrentUser() uid:\" + uid );\n      this._dbgLog( \"userService getCurrentUser session:\" + this.session );\n      this._dbgLog( \"userService getCurrentUser session.isAuthenticated:\" + this.session.isAuthenticated );\n      this._dbgLog( \"userService getCurrentUser isAuthenticated:\" + this.isAuthenticated );\n      this._dbgLog( \"userService getCurrentUser _intern_currentUser:\" + this._intern_currentUser );\n      */\n\n      /**/\n      const session = this.getStoredSession();\n      if (!this.session.isAuthenticated && (!session || session.expires_at < Date.now())) {\n        this.invalidateCurrentUser();\n      }\n      /**/\n\n      if (!this._intern_currentUser && uid) {\n        this._dbgLog('userService getCurrentUser() loading:' + uid);\n        if (!this.session.isAuthenticated && (!window.localStorage.getItem('ember_simple_auth-session') || !window.localStorage.getItem('ember_simple_auth-session').includes('authenticator:oauth2'))) {\n          // window.localStorage.removeItem('userId');\n          this.invalidateCurrentUser();\n        } else {\n          this.loadCurrentUserById(window.localStorage.getItem('userId'), callbackWhenUserResolved);\n        }\n      } /*else if( !uid || (this.session && !this.isAuthenticated) ){\n        this._dbgLog( \"userService getCurrentUser() - invalidateCurrentUser() -> ( \" + (!uid) + \" || (\"+(this.session)+\" && !\"+(this.isAuthenticated)+\")\" );\n        this.invalidateCurrentUser();\n        }*/\n      this._dbgLog('userService getCurrentUser() return B :', this._intern_currentUser);\n      /*\n      if( !this._pendingAuthentication_id && !this._loadCurrentUserByEmail_pending && !this.pendingAuthentication && !this._pendingAuthentication_mail){\n      \tthis.trigger('userResolved');\n      }\n      */\n      if (this._intern_currentUser) {\n        return this._intern_currentUser;\n      } else {\n        return null;\n      }\n    }\n    logout() {\n      //alias\n      this._dbgLog('userService.logout()');\n      this.invalidateCurrentUser();\n    }\n\n    /**\n     * sync login session data to the formal v6 version of the platform, so the user is authenticated in both places at once\n     */\n    syncLogin() {\n      // check if feature is enabled in the current environment\n      if (!_environment.default.APP.LOGIN_SYNC_HOST) {\n        return;\n      }\n      const url = _environment.default.APP.LOGIN_SYNC_HOST + '/sync-login.html';\n      const iframeId = 'ifr_sync';\n\n      // did we insert an iframe previously?\n      let iframe = document.getElementById(iframeId);\n      if (iframe) {\n        this._iframeSendLoginData(iframe);\n        return;\n      }\n\n      // insert an iframe to the target platform\n      iframe = document.createElement('iframe');\n      iframe.id = iframeId;\n      iframe.style.display = 'none';\n      iframe.src = url;\n      document.body.appendChild(iframe);\n      // wait for the iframe to load, then send data\n      iframe.onload = () => {\n        this._iframeSendLoginData(iframe);\n      };\n    }\n    async createNewUser(newUser) {\n      const user = this.store.createRecord('user/registered-user', newUser);\n      await user.save();\n      this.currentUser = this._intern_currentUser = user;\n      /*return (this.currentUser = this.set(\n      \t'_intern_currentUser',\n      \tawait user.save()\n      ));*/\n    }\n    async session_invalidate() {\n      if (this._isInvalidating) return;\n      this._isInvalidating = true;\n      if (this.session.isAuthenticated) await this.session.invalidate();\n      this._isInvalidating = false;\n    }\n    async invalidateCurrentUser() {\n      if (!this.session.isAuthenticated) return;\n      this.pendingAuthentication = true;\n      this._dbgLog('userService invalidateCurrentUser()', trace());\n      let invalidating = false;\n      if (window.localStorage.getItem('ember_simple_auth-session')) {\n        invalidating = true;\n        await this.session_invalidate();\n      }\n      window.localStorage.removeItem('userId');\n      window.localStorage.removeItem('ember_simple_auth-session');\n      //this.session.isAuthenticated = false;\n      this.set('currentUser', undefined);\n      this.set('_intern_currentUser', undefined);\n      this._pendingAuthentication_id = false;\n      this._userProjects = [];\n      this._loadProjectFollowingsAndProjects_done = false;\n      this._userCommunities = [];\n      this._pendingAuthentication_mail = null;\n      //window.localStorage.getItem('userId')\n      if (invalidating) {\n        this.trigger('userLogout');\n        this.syncLogin();\n      }\n      this.trigger('userResolved');\n    }\n    /*:: Main frontend methods*/\n\n    /**\n     * v71 : this is the actual method to use.\n     * It checks if this.isAuthenticated and shows the login popup if not\n     * + it returns a promise to be used to chain events (like login is mandatory to participate) eg:\n     * this.user.promisedLogin()\n     * .then( popupReturnedValue => { this.popup.openWhateverPopupIfAuthenticated() })\n     * .catch( popupReturnedValue => {alert('Not authenticated !\\nThe popup returned :' + popupReturnedValue)} );\n     *\n     */\n    promisedLogin() {\n      /*\n      \t\tif ( !this.isAuthenticated )\n      \t\t\treturn this.loginRender.renderPromisedDeviceSpecificLogin();\n      \t\treturn new Promise((resolve, reject) => {\n      \t\t\tresolve();\n      \t\t});\n      */\n      /*\n      return new Promise( async (resolve, reject) => {\n      \tif ( this.isAuthenticated )\n      \t\tresolve();\n      \tawait this.loginRender.renderPromisedDeviceSpecificLogin();\n      \tconst loginRet = await this.getCurrentUserAsync();\n      \tif(!loginRet)\n      \t\treject();\n      });\n      */\n      return this.loginRender.renderPromisedDeviceSpecificLogin();\n    }\n\n    /*DEPRECATED but still used:*/\n    showLogin(redirectToRouteData, callbackAfterClose) {\n      this.loginRender.renderDeviceSpecificLogin(redirectToRouteData, callbackAfterClose);\n    }\n    // to avoid an infinite loop (a trigger of such a loop is to remove all the localStorage from the browser) : forbid handling a change while handling an initial change\n\n    /**  @private */\n\n    init() {\n      this._dbgLog('userService.init()');\n      super.init(...arguments);\n      // The code that restores the user session must be launched a bit later after the user service is ready to avoid infinite loop mostly with store.getUserHeaders()\n      (0, _runloop.later)(this, this.start, 1);\n    }\n    start() {\n      this._dbgLog('userService.start()');\n\n      /* SESSION SETUP AND RESTORE :::: */\n      this.session.setup();\n      // this._dbgLog(\"userService.start() isAuthenticated this.session.setup();\", this.session, '\\nisAuthenticated:', this.session.isAuthenticated);\n      // let foo = this.isAuthenticated;//will trigger loading the sooner to reload an existing session\n      this.on('authError', error => {\n        this.toast.error(this.intl.t('bubble.error.unknown'));\n        throw error;\n      });\n      const _this = this;\n      /**/\n      this.on(['userLogin', 'userLogout', 'userResolved', 'userRightsChanged', 'userReloaded'], eventLabel => {\n        if (eventLabel != 'userLogin') {\n          // we want to react to the more specific userResolved (and other) : no need to react to userLogin\n          this.set('currentUser', this._intern_currentUser);\n          this._randomUserLoad = Math.random(); //force computing!\n          let foo = this.showActivationBanner; //force computing!\n        }\n        if (eventLabel == 'userLogin' || eventLabel == 'userLogout') this.analytics.sendEvent('event', {\n          us: eventLabel\n        });\n      });\n      // \t\tthis.currentCommunity = this.currentCommunity;//sync with the community service changes\n      /*Handling sessions events to update currentUser*/\n      /*Syncing localStorage between tabs :*/\n      window.addEventListener('storage', e => {\n        if (this._handlingLocaleStorageChanges) return;\n        if (!e.key || e.key.indexOf('test') > 0) return;\n        this._handlingLocaleStorageChanges = true;\n        (0, _runloop.later)(this, function () {\n          this._handlingLocaleStorageChanges = false;\n        }.bind(this), 2000); //if anything goes wrong, we release\n        // \t\t\tthis._dbgLog( 'userService ', e, 'e.key:', e.key, '--', window.localStorage.getItem(e.key), '!==', e.newValue );\n        if (e.key === 'userId' && e.newValue && (!this._intern_currentUser || this._intern_currentUser.id !== e.newValue)) {\n          //user logged-in from another tab : we need to load the user from it's id in the actual one :\n          this._dbgLog('userService window.addEventListener(\\'storage\\') handling - A', e, e.key + '=>' + e.newValue + ' - loadCurrentUserById( ' + e.newValue + ' )!');\n          window.localStorage.setItem(e.key, e.newValue);\n          this.loadCurrentUserById(e.newValue);\n          // if user is logged in from other tabs, trigger the userRightsChanged event\n          // this.trigger('userRightsChanged');\n          // this._handlingLocaleStorageChanges = false;\n          return;\n        }\n        if (window.localStorage.getItem(e.key) != e.newValue && (\n        // \t\t\t\t!e.key.toLowerCase().includes('jodit') &&\n        // \t\t\t\t( e.key!='ember_simple_auth-session' || e.newValue!==null )\n        e.key === 'userId' || e.key === 'ember_simple_auth-session')) {\n          this._dbgLog('userService window.addEventListener(\\'storage\\') handling - B', e, e.key + '=>' + e.newValue, window.localStorage.getItem(e.key), '!==', e.newValue);\n          this._dbgLog(`userService window.addEventListener(\\'storage\\') handling - C`, e, ` - Key Changed: ${e.key}\\nNew Value: ${e.newValue}\\nuid:` + window.localStorage.getItem('userId'));\n          this._dbgLog('userService window.addEventListener(\\'storage\\') handling - D', e, e.key + '=>' + e.newValue + ' - typeof window.localStorage.getItem(e.key)=', typeof window.localStorage.getItem(e.key), '\\ntypeof e.newValue=', typeof e.newValue);\n          window.localStorage.setItem(e.key, e.newValue);\n          if (e.key === 'userId') {\n            if (!e.newValue) {\n              this._dbgLog('userService window.addEventListener(\\'storage\\') handling - E', e, e.key + '=>' + e.newValue + ' - invalidateCurrentUser() : userId is null {a} !');\n              this.invalidateCurrentUser();\n            } else {\n              this._dbgLog('userService window.addEventListener(\\'storage\\') handling - F', e, e.key + '=>' + e.newValue + ' - loadCurrentUserById( ' + e.newValue + ' )!');\n              this.loadCurrentUserById(e.newValue);\n            }\n          } else if (e.key === 'ember_simple_auth-session' && !window.localStorage.getItem('userId')) {\n            this._dbgLog('userService window.addEventListener(\\'storage\\') handling - G', e, e.key + '=>' + e.newValue + ' - invalidateCurrentUser() : userId is null {b} !');\n            this.invalidateCurrentUser();\n          }\n        } //else this._dbgLog( 'userService SKIP:', window.localStorage.getItem(e.key), '!==', e.newValue );\n        // this._handlingLocaleStorageChanges = false;\n      });\n      /**/\n      if (_environment.default.modulePrefix !== 'civ-bo') {\n        //the backoffice version is only using EN : we don't want to force the global-admin to use this language for the public frontends\n        this.on('userResolved', () => {\n          (0, _runloop.debounce)(this, () => {\n            if (this._intern_currentUser) {\n              // Here we set the user's account to the actual locale (and not the inverse : getting the account locale and setting it for the frontend) the goal is to not change the actual browsing locale if the user doesn't act to do it but to set the account's locale so that all next notifications uses it\n              if (!this._intern_currentUser.locale) this._intern_currentUser.locale = 'en';\n              let curloc = this.intl.locale && this.intl.locale != 'blank' && this.intl.locale != 'placeholders' ? this.intl.locale : 'en';\n              if (curloc.toString() !== this._intern_currentUser.locale.toString()) {\n                // this._dbgLog( \"userService is saving the locale\", curloc.toString(), this._intern_currentUser.locale.toString(), curloc.toString() !== this._intern_currentUser.locale.toString() )\n                this._intern_currentUser.locale = curloc;\n                this._intern_currentUser.save();\n              }\n            }\n          }, null, 2000, true);\n        }, true);\n      }\n      /**/\n      this.session.init();\n      this.session.handleInvalidation = function () {\n        //do nothing : don't redirect to the root URl !\n        this.debug.alert('userService.session.handleInvalidation !');\n      }.bind(this);\n\n      /*Ember session events handlers :*/\n      if (this.session.handleAuthentication) {\n        //ember-simple-auth >= 4.0.0\n        this.session.handleAuthentication = function () {\n          _this._handlerAuthenticationSucceeded(...arguments);\n        };\n      } else {\n        this.session.on('authenticationSucceeded', function () {\n          _this._handlerAuthenticationSucceeded(...arguments);\n        });\n      }\n      if (this.session.handleInvalidation) {\n        //ember-simple-auth >= 4.0.0\n        this.session.handleInvalidation = function () {\n          _this._handlerInvalidationSucceeded(...arguments);\n        };\n      } else {\n        this.session.on('invalidationSucceeded', function () {\n          _this._handlerInvalidationSucceeded(...arguments);\n        });\n      }\n      /**/\n\n      this._dbgLog('userService.start() - this.session {isAuthenticated=' + this.isAuthenticated + '}:', this.session);\n      if (this.isAuthenticated) {\n        this._dbgLog(\"userService window.localStorage.getItem('userId'):\", window.localStorage.getItem('userId'));\n        //Preloading when user is ready\n        this.computeCommunityAndProjects();\n      } else {\n        this._dbgLog('userService.start() - NOT AUTHENTICATED');\n        if (window.localStorage.getItem('ember_simple_auth-session') && !window.localStorage.getItem('userId')) window.localStorage.setItem('ember_simple_auth-session', '{\"authenticated\":{}}');\n      }\n      this._isStarted = true;\n      /* :::: SESSION SETUP AND RESTORE */\n\n      /* the route sends a pageView, we don't need that\n      //send the event to Analytics (neutral event : at this point we only know the user arrived on the page) :\n      debounce(\n      \tthis.analytics,\n      \tthis.analytics.sendEvent,\n      \t'userService:user_init',\n      \t2000,\n      \ttrue\n      );\n      */\n\n      // let foo = this.isAuthenticated;\n      this._dbgLog('userService.init() - this.session {isAuthenticated=' + this.isAuthenticated + '}:', this.session);\n      if (this.isAuthenticated && !window.localStorage.getItem('userId')) {\n        //buggy session! we clean the session\n        // console.log('INV');\n        if (this.session.isAuthenticated) this.session.invalidate();\n      }\n      if (this.isAuthenticated) {\n        this._dbgLog(\"userService window.localStorage.getItem('userId'):\", window.localStorage.getItem('userId'));\n      } else this._dbgLog('userService.init() - NOT AUTHENTICATED');\n    }\n    initFacebookRegistration() {\n      //flag checked by _handlerAuthenticationSucceeded\n      this.pendingAuthentication = true;\n      this._pendingAuthentication_FacebookRegistration = true;\n    }\n    initFacebookLogin() {\n      //flag checked by _handlerAuthenticationSucceeded\n      this.pendingAuthentication = true;\n      this._pendingAuthentication_FacebookLogin = true;\n    }\n\n    /**\n     * use the postMessage API to send data to the v6 platform\n     * @param iframe\n     */\n    _iframeSendLoginData(iframe) {\n      var win = iframe.contentWindow;\n      const userId = window.localStorage.getItem('userId');\n      let data = null;\n      if (userId) {\n        /*\n        const session = JSON.parse(\n        \twindow.localStorage.getItem('ember_simple_auth-session')\n        );\n        if (!session || !session.authenticated) return;\n        data = {\n        \taccess_token: session.authenticated.access_token,\n        \trefresh_token: session.authenticated.refresh_token,\n        \texpires_at: session.authenticated.expires_at,\n        \tuserId: userId,\n        };\n        */\n        data = this.getStoredSession();\n      }\n      this._dbgLog('userService sending data', data);\n      win.postMessage(data, _environment.default.APP.LOGIN_SYNC_HOST);\n    }\n    // authenticate() is async only for the initialisation of session.authenticate() - this method will return once session sends the OAuth query to the back-end or if session fails before that (in that case of failure a try block can be used for the caller script to catch the error and anyway the failureCallback will be also called).\n    // The following of the auth process is done through the authenticationSucceeded and invalidationSucceeded events are fired by ember-simple-auth therefore. Meanwhile there is no automatic awaiting from any part.\n    async authenticate(identification, password, rememberMe = true, successCallback, failureCallback) {\n      if (this.pendingAuthentication) {\n        //no error for that as the caller will be informed of user's authentication when resolve : throw new Error(\"An auth is already pending\");\n        return;\n      }\n      this.pendingAuthentication = true;\n      this._dbgLog('userService authenticate START ' + new Date(), '\\nthis.pendingAuthentication:', this.pendingAuthentication);\n      if (this._authSuccessCallbacks.indexOf(successCallback) < 0) this._authSuccessCallbacks.push(successCallback);\n      if (this._authFailureCallbacks.indexOf(failureCallback) < 0) this._authFailureCallbacks.push(failureCallback);\n      if (identification === 'facebook' && (password === 'login' || password === 'registration')) {\n        if (password === 'login') this.initFacebookLogin();else this.initFacebookRegistration();\n        const _this = this;\n        await this.session\n        // .authenticate('authenticator:torii', 'facebook-oauth2-bearer')\n        .authenticate('authenticator:facebook-bearer', 'facebook-oauth2-bearer').then(cred => {\n          _this._dbgLog('userService authenticate FB THEN - cred=', cred);\n          _this.pendingAuthentication = false;\n        }).catch(error => {\n          _this.pendingAuthentication = false;\n          while (this._authFailureCallbacks.length > 0) {\n            if (!this._authFailureCallbacks.shift) {\n              this._authFailureCallbacks = [];\n              break;\n            }\n            let cb = this._authFailureCallbacks.shift();\n            if (cb) cb(error);\n          }\n          throw error;\n        });\n        return;\n      }\n      this.lastAuthMethod = 'civocracy';\n      // this._pendingAuthentication_mail = identification;\n\n      //When the user's datas are fully loaded, in the case of authenticate we need to call this._authEnded through a callback here\n      const cbackAuthEnded = this._authEnded.bind(this);\n      if (this._userResolvedCallbacks.indexOf(cbackAuthEnded) < 0) this._userResolvedCallbacks.unshift(cbackAuthEnded);\n\n      // \t\tconst _this = this;\n      //As a security we set a maximum 60 secs timeout for the OAuth process to end or we will cancel it anyway and notify the initiator component of a failure\n      this._waitForAuth_tout = (0, _runloop.later)(this, function () {\n        /*this.pendingAuthentication = false;\n        this._pendingAuthentication_mail = null;\n        this._handlerAuthenticationFailure(new Error(\"Timeout for the current auth process!\"));*/\n        this._dbgError('userService authenticate : session took too long to start - this.invalidateCurrentUser()');\n        if (this.isAuthenticated) return;\n        this.invalidateCurrentUser();\n        this.s(null, new Error('Timeout for the current auth process!'));\n      }, 60000);\n      try {\n        this._dbgLog('userService authenticate PENDING ' + new Date());\n        this.set('_intern_currentUser', undefined);\n        await this.session.authenticate('authenticator:oauth2', identification, password, rememberMe);\n        const user = this.session.data.authenticated.user;\n        const objectForCache = {\n          // \tcontent:{\n          data: {\n            type: 'user/registered-user',\n            id: user.id,\n            attributes: user\n          },\n          type: 'user/registered-user'\n          // \t}\n        };\n\n        // The user's data are returned with the token => we push it in the store to make it available right now\n        // But it will anyway a request will be sent to load again the user and it's side-loads (mostly user-rights)\n        this.store.push(objectForCache);\n\n        /* * Do we keep the user in the local storage ? (it is there because we use the grant access process to retrieve the use in the same fly) :\n         If we reload the user we could use this version meanwhile but it is a bit unsecured for the user and will not save him real loading time.\n         */\n        delete this.session.data.authenticated.user;\n        let auth = JSON.parse(window.localStorage.getItem('ember_simple_auth-session'));\n        delete auth.authenticated.user;\n        this._dbgLog('userService auth::', auth);\n        window.localStorage.setItem('ember_simple_auth-session', JSON.stringify(auth));\n        /**/\n\n        // const storeUser = user;\n        const storeUser = this.store.peekRecord('user/registered-user', user.id);\n        //this._dbgError('userService storeUser:', storeUser, storeUser.email, storeUser.emailConfirmed );\n        // this.set('_intern_currentUser', user);this.set('_intern_currentUser', undefined);\n        // this._intern_currentUser = undefined;\n        // this._intern_currentUser = storeUser;\n        this._dbgLog('userService storeUser:', storeUser, this.session.isAuthenticated);\n        this.set('_intern_currentUser', storeUser);\n        this._authEnded(storeUser);\n        this._intern_currentUser_isloaded = true;\n        if (storeUser) {\n          this._dbgLog('userService loadCurrentUserById RESOLVED - storeUser.id=' + storeUser.id, storeUser);\n          window.localStorage.setItem('userId', storeUser.id);\n          this.set('_intern_currentUser', storeUser);\n          this.set('currentUser', storeUser);\n          await this.loadCurrentUserById(user.id, true);\n          await this._userResolved();\n        }\n        //this._pendingAuthentication_id = false;\n        this.trigger('userResolved');\n        if (this._currentCommunity)\n          // \t\t\tthis.trigger('userRightsChanged');\n          this._computeAdminRights();\n        this._dbgLog('userService loadCurrentUserById - func end :', this._intern_currentUser);\n      } catch (error) {\n        this._dbgError('userService authenticate ERROR ' + error);\n        await this._handlerAuthenticationFailure(error);\n      }\n      this._dbgLog('userService authenticate RETURN ' + new Date());\n    }\n    async _handlerAuthenticationSucceeded() {\n      this._dbgLog('userService _handlerAuthenticationSucceeded:', this._hAS_running, this._hAS_running_timeout, '\\nthis._pendingAuthentication_mail=', this._pendingAuthentication_mail);\n      (0, _runloop.cancel)(this._waitForAuth_tout);\n      /*5 seconds timeout to avoid repeated calls*/\n      if (this._hAS_running) return;\n      this._hAS_running = true;\n      this._hAS_running_timeout = (0, _runloop.later)(this, function () {\n        this._hAS_running = false;\n      }, 5000);\n      /**/\n      this._dbgLog('userService _handlerAuthenticationSucceeded(', arguments, ')\\nlocalStorage.getItem(userId)=', window.localStorage.getItem('userId'), '\\nthis.isAuthenticated=', this.isAuthenticated, '\\nthis.session=', this.session);\n      if (this._pendingAuthentication_mail) {\n        this._dbgLog('userService _handlerAuthenticationSucceeded A');\n        try {\n          this.loadCurrentUserByEmail(this._pendingAuthentication_mail).then(this._computeAdminRights.bind(this));\n          this._pendingAuthentication_mail = null;\n        } catch (error) {\n          this._dbgError('userService _handlerAuthenticationSucceeded error', error);\n          this._handlerAuthenticationFailure(error);\n        }\n      } else if (this._pendingAuthentication_FacebookLogin || this._pendingAuthentication_FacebookRegistration) {\n        this._dbgLog('userService _handlerAuthenticationSucceeded B : Facebook ' + (this._pendingAuthentication_FacebookLogin ? 'login' : 'registration'));\n        try {\n          //this.session.on('didLoad', this._thirdPartyTokenAuth.bind(this));\n          await this._thirdPartyTokenAuth() /*.then( foo => {this._computeAdminRights()} )*/;\n        } catch (error) {\n          this._dbgError('userService _handlerAuthenticationSucceeded error', error);\n          this._handlerAuthenticationFailure(error);\n        }\n      } else {\n        //No pending...\n        /*\n        this._dbgLog('userService _handlerAuthenticationSucceeded C :', window.localStorage.getItem('userId'));\n        try {\n        \tthis._pendingAuthentication_id = false;\n        \tthis.loadCurrentUserById(window.localStorage.getItem('userId'));\n        \tthis._computeAdminRights();\n        } catch( error ) {\n        this._dbgError('userService _handlerAuthenticationSucceeded error', error);\n        \tthis._handlerAuthenticationFailure(error);\n        }\n        */\n      }\n      this._dbgError('userService _handlerAuthenticationSucceeded END', arguments);\n    }\n    async _thirdPartyTokenAuth() {\n      //used for facebook login/register : Get username and password from the backend then resume on this.authenticate(email, pass, ...) flow\n      const authorization = this.session.get('session.content.authenticated');\n      let url = null,\n        postData = {};\n      this.get('debug').notify('user._thirdPartyTokenAuth() authorization =', authorization);\n      url = _environment.default.APP.API_HOST + '/api/connexionFacebook';\n      postData = {\n        facebookToken: authorization.authorizationToken\n        //community: this.get('customer.currentCommunity.id')//outdated, needs refactoring:this is for automatic following\n      };\n      return new _rsvp.default.Promise((resolve, reject) => {\n        // Extract token from authorization\n        //const token = authorization.authorizationToken ;\n        this.get('debug').notify('user._thirdPartyTokenAuth() : requestTokenAuth 1 :', authorization);\n        // Create session on back-end\n        return fetch(url + '/' + postData.facebookToken /*, {\n                                                        method: 'POST',\n                                                        body: postData,\n                                                        }*/, {\n          headers: this.store.getUserHeaders()\n        }).then(response => {\n          // response.json();\n          this.get('debug').notify('user._thirdPartyTokenAuth() : requestTokenAuth success a :', authorization);\n          response.provider = authorization.provider;\n          resolve(response);\n          this.set('popupService.lastLoginWasSuccess', true);\n          this.set('popupService.lastLoginWasFailure', false);\n        }).catch(e => {\n          // run.bind(null, reject);\n          reject(e);\n        });\n      }).then(authorization => {\n        this.get('debug').notify('user._thirdPartyTokenAuth() : requestTokenAuth 2 :', authorization);\n        let url = authorization.users.slug,\n          pospw = url.indexOf('password=') + 9,\n          password = url.substr(pospw, url.indexOf('&', pospw) - pospw),\n          posmail = url.indexOf('username=') + 9,\n          email = url.substr(posmail, url.length - posmail).replace('%40', '@');\n        this.get('debug').notify('user._thirdPartyTokenAuth() : requestTokenAuth 2b :\"' + email + '\",\"' + password + '\"');\n        (0, _runloop.cancel)(this._hAS_running_timeout);\n        this._hAS_running = false;\n        this._authSuccessCallbacks.push(function () {\n          this._pendingAuthentication_FacebookLogin = false;\n          this._pendingAuthentication_FacebookRegistration = false;\n          this.popupService.close();\n        });\n        this._authFailureCallbacks.push(function () {\n          this._pendingAuthentication_FacebookLogin = false;\n          this._pendingAuthentication_FacebookRegistration = false;\n        });\n        this.pendingAuthentication = false; //make authenticate available again\n        this.authenticate(email, password).then(this._handlerAuthenticationSucceeded.bind(this));\n      });\n    }\n    _handlerInvalidationSucceeded() {\n      (0, _runloop.cancel)(this._waitForAuth_tout);\n      this._dbgLog('userService _handlerInvalidationSucceeded', arguments);\n      window.localStorage.removeItem('userId');\n      this.set('currentUser', undefined);\n      this.set('_intern_currentUser', undefined);\n      try {\n        // \t\t\tthis.invalidateCurrentUser();\n        this._authEnded();\n      } catch (error) {\n        this._handlerInvalidationFailure(error);\n      }\n      //this._computeAdminRights(); -- already called in _authEnded()\n    }\n\n    /* Addons not Ember-simple-auth :*/\n    _handlerAuthenticationFailure(error) {\n      this._authEnded(null, error);\n    }\n    _handlerInvalidationFailure(error) {\n      this._authEnded(null, error);\n    }\n    _authEnded(user, failureError) {\n      //common code to be called for all internal methods after the OAuth process succeeds or fails : call the callbacks and reset the props.\n      //! This is called on login but also on logout ! (called for each OAuth API call)\n      this._dbgLog('userService _authEnded(', arguments, ')\\nthis.session.isAuthenticated=' + this.session.isAuthenticated, '\\nthis.session=', this.session);\n      (0, _runloop.cancel)(this._waitForAuth_tout);\n      if (!failureError && !this.session.isAuthenticated) {\n        // do nothing here but trigger the 'user_logout' event, this is called by _handlerInvalidationSucceeded()\n        this.trigger('user_logout');\n      } else if (failureError || !this.session.isAuthenticated) {\n        this.pendingAuthentication = false;\n        if (failureError) this._dbgError('userService _authEnded with failureError or with session not authenticated {' + (failureError ? typeof failureError : 'undefined') + '}=', failureError);\n        let error;\n        if (failureError && typeof failureError === 'object') error = failureError;else error = new Error();\n        if (!error.responseJSON) error.responseJSON = {};\n        if (failureError && !error.responseJSON.error_description) error.responseJSON.error_description = failureError;\n        while (this._authFailureCallbacks.length > 0) {\n          if (!this._authFailureCallbacks.shift) {\n            this._authFailureCallbacks = [];\n            break;\n          }\n          let cb = this._authFailureCallbacks.shift();\n          if (cb) cb(error);\n        }\n        this.trigger('authError', error);\n        /**/\n        const cbackAuthEnded = this._authEnded.bind(this),\n          idx = this._userResolvedCallbacks.indexOf(cbackAuthEnded);\n        if (idx >= 0) delete this._userResolvedCallbacks[idx];\n        while (this._userResolvedCallbacks.length) {\n          if (!this._userResolvedCallbacks.shift) {\n            this._userResolvedCallbacks = [];\n            break;\n          }\n          try {\n            let cb = this._userResolvedCallbacks.shift();\n            if (cb) cb(null);\n          } catch (e) {\n            this._dbgError('userService getCurrentUser() cback error :', e);\n            throw e;\n          }\n        }\n        this._userResolvedCallbacks = [];\n        this._dbgLog('userService getCurrentUser() A');\n        if (!this.session.isAuthenticated) {\n          this.trigger('userLogout');\n        } else this.trigger('userResolved');\n        this.trigger('userRightsChanged');\n      } else {\n        this.currentUser = this._intern_currentUser;\n        const cbackAuthEnded = this._authEnded.bind(this),\n          idx = this._authSuccessCallbacks.indexOf(cbackAuthEnded);\n        if (idx >= 0) delete this._authSuccessCallbacks[idx];\n        while (this._authSuccessCallbacks.length > 0) {\n          if (!this._authSuccessCallbacks.shift) {\n            this._authSuccessCallbacks = [];\n            break;\n          }\n          let cb = this._authSuccessCallbacks.shift();\n          if (cb) cb(this._intern_currentUser);\n        }\n        this._dbgLog('userService getCurrentUser() B');\n        if (this.session.isAuthenticated) {\n          this.trigger('userResolved');\n          this.trigger('userRightsChanged');\n          this.trigger('userLogin');\n        }\n      }\n      this._userResolvedCallbacks = [];\n      this._authSuccessCallbacks = [];\n      this._authFailureCallbacks = [];\n      this._pendingAuthentication_id = false;\n      this._loadCurrentUserByEmail_pending = false;\n      this.pendingAuthentication = false;\n      this._pendingAuthentication_mail = null;\n      this._computeAdminRights();\n      this._dbgLog('userService _authEnded(', failureError, ') - END');\n    }\n    async loadCurrentUserById(userId, forceReload) {\n      if (!userId || userId === null || userId === 'null')\n        //it happens when multiple tabs are opened in the other tabs than the actual used for logging in\n        return null;\n      if (this._pendingAuthentication_id) {\n        this._dbgLog('userService loadCurrentUserById(', userId, ') - previous one pending (' + this._pendingAuthentication_id + ') : ABORT 1');\n        return null;\n      }\n      this._pendingAuthentication_id = userId;\n      if (!forceReload && this._intern_currentUser && this._intern_currentUser.get('id') == userId) {\n        this._dbgError('userService loadCurrentUserById(' + userId + ') - ABORT 2');\n        this.currentUser = this._intern_currentUser;\n        this._userResolved();\n        return true;\n      }\n      this._dbgLog('userService loadCurrentUserById DOING', userId);\n      const headers = this.store.getUserHeaders();\n      if (!headers.Authorization) {\n        this._dbgLog('userService loadCurrentUserById :: invalid session ! 1');\n        this.invalidateCurrentUser();\n        return false;\n      }\n      let user = await this.store.findRecord('user/registered-user', userId).catch(error => {\n        // console.error(error);\n        // alert('error!')\n        this._dbgLog('userService loadCurrentUserById ERROR - this.invalidateCurrentUser();', this.session, this.session?.data, '\\nerror=', error);\n        this.invalidateCurrentUser();\n        document.location.reload();\n      });\n      if (user) {\n        this._dbgLog('userService loadCurrentUserById RESOLVED - user.id=' + user.id, user);\n        if (!user.email || !this._pendingAuthentication_id) {\n          // Fallback for early auth : the session has been invalidated while we were querying the BE or something is wrong => invalidate !\n          this._dbgLog('userService loadCurrentUserById :: invalid session ! 2');\n          this.invalidateCurrentUser();\n          return false;\n        }\n        window.localStorage.setItem('userId', user.id);\n        this.set('_intern_currentUser', user);\n        this.currentUser = this._intern_currentUser;\n        await this._userResolved();\n      } else {\n        this.invalidateCurrentUser();\n        return false;\n      }\n      this._pendingAuthentication_id = false;\n      this.trigger('userResolved');\n      if (this._currentCommunity)\n        // \t\t\tthis.trigger('userRightsChanged');\n        this._computeAdminRights();\n      this._dbgLog('userService loadCurrentUserById - func end :', this._intern_currentUser);\n      return true;\n    }\n    async loadCurrentUserByEmail(email) {\n      // \t\tif( this._loadCurrentUserByEmail_pending )\n      // \t\t\treturn;\n      if (!email)\n        //it happens when multiple tabs are opened\n        return;\n      if (this._loadCurrentUserByEmail_pending) {\n        this._dbgLog('userService loadCurrentUserByEmail - ABORT 1');\n        return;\n      }\n      this._loadCurrentUserByEmail_pending = true;\n      this._dbgLog('userService loadCurrentUserByEmail(' + email + ')');\n      // \t\tthis._loadCurrentUserByEmail_pending = true;\n      try {\n        const token = this.session.data.authenticated.access_token;\n        /*this._intern_currentUser = await this.store.queryRecord('user/registered-user', {\n        \t'filters[email]': email\n        }).*/\n        console.log('userService loadCurrentUserByEmail', token);\n        await this.store.queryRecord('user/registered-user', {\n          'filters[email]': email,\n          login: 1,\n          token: token,\n          headers: this.store.getUserHeaders()\n          // headers: this.headers\n        }).then(user => {\n          this._dbgLog('userService loadCurrentUserByEmail RESOLVED - user.id=' + user.id, user);\n          window.localStorage.setItem('userId', user.id);\n          this.set('_intern_currentUser', user);\n          this.set('currentUser', user);\n          this._userResolved();\n          this._loadCurrentUserByEmail_pending = false;\n        }).catch(error => {\n          this._dbgError(\"userService loadCurrentUserByEmail failed to get user's informations\");\n          this.invalidateCurrentUser();\n          this._loadCurrentUserByEmail_pending = false;\n          throw error;\n        });\n      } catch (error) {\n        this._dbgError(\"userService loadCurrentUserByEmail failed to get user's informations\");\n        this.invalidateCurrentUser();\n        this._loadCurrentUserByEmail_pending = false;\n        throw error;\n      }\n      this._dbgLog('userService loadCurrentUserByEmail(' + email + ') - END isAuthenticated=' + this.isAuthenticated);\n    }\n    isOlderUser() {\n      const today = moment(new Date());\n      const dateRegister = moment(this._intern_currentUser.dateRegister);\n      return today.diff(dateRegister, 'days') > 2;\n    }\n\n    /**\n     * _userResolved() loads the user's rights separatly : can be considered as DEPRECATED for now as we load the rights for the current user directly through the user's model\n     */\n    async _userResolved() {\n      //async to avoid catching external errors in callbacks in our try blocks\n      /**/\n      await this._rightsResolved();\n      return;\n      /**/\n      this._dbgLog('userService _userResolved - user-right : ', this.store.peekAll('user-right'));\n      const _user = this._intern_currentUser;\n      try {\n        const token = this.session.data.authenticated.access_token;\n        /*await this.store.queryRecord('user-rights', {\n        \t'filters[userId]': _user.id\n        })*/\n        await this.store.queryRecord('user-right', {\n          'filters[uid]': _user.id,\n          token: token\n        }).then(rights => {\n          this._dbgLog('userService _userResolved user-rights RESOLVED - rights=', rights);\n          // \t\t\t\t\twindow.localStorage.setItem('userId', _user.id);\n          this._rightsResolved();\n        }).catch(error => {\n          this._dbgError(\"userService _userResolved failed to get the user's informations\");\n          this.invalidateCurrentUser();\n          throw error;\n        });\n      } catch (error) {\n        this._dbgError(\"userService _userResolved failed to get the user's informations\");\n        this.invalidateCurrentUser();\n        throw error;\n      }\n    }\n    async _rightsResolved() {\n      //async to avoid catching external errors in callbacks in our try blocks\n      if (!this._intern_currentUser) return false;\n      const _user = this._intern_currentUser,\n        _this = this;\n      if (_user.userRightsDats) {\n        Object.entries(_user.userRightsDats).forEach(([label, item]) => {\n          const _label = label;\n          if (!Object.keys(item).length) {\n            this._dbgLog('userService DEFINING _this.' + label + 'It()');\n            if (this._rights_handled.indexOf(label) < 0) this._rights_handled.push(label);\n            eval('_this.' + label + 'It = function(){' + ' if( this._intern_currentUser && this._intern_currentUser.userRightsDats && _this._intern_currentUser.userRightsDats[\"' + label + '\"] )' + '\treturn true;' + ' return false;' + '};');\n            if (!_this.hasOwnProperty(label)) {\n              //the method is now set : create  a direct get access for userService.label property\n              Object.defineProperty(_this, label, {\n                get: function () {\n                  this._dbgLog('userService {A}_this.' + _label + ' callée');\n                  if (_user && _user.userRightsDats[_label]) return true;\n                  return false;\n                }\n              });\n            }\n          } else {\n            // \t\t\tObject.entries( item ).forEach( ([prop, value]) => {\n            // \t\t\t\tthis.prototype[item.label] = function( modelId ){\n            // \t\t\t\t};\n            if (this._rights_handled.indexOf(label) < 0) this._rights_handled.push(label);\n            this._dbgLog('userService DEFINING _this.' + label + 'It(model)');\n            eval('_this.' + label + 'It = function( model ){' + '\t_this._dbgLog( \"userService.' + label + 'It(\", model, \"); => model.modelName:\"+model.modelName+\"\\\\nmodel.constructor.modelName:\"+model.constructor.modelName+\"\\\\nmodel.type:\"+model.type+\"\\\\nmodel.id:\"+model.id+\"\\\\nmodel=\", model, \"\\\\nthis._intern_currentUser.userRightsDats[' + label + ']:\", this._intern_currentUser.userRightsDats[\"' + label + '\"], \"\\\\nthis._intern_currentUser.userRightsDats[' + label + '][model.constructor.modelName{\"+model.constructor.modelName+\"}]:\", this._intern_currentUser.userRightsDats[\"' + label + '\"][model.constructor.modelName] );' + ' if( this._intern_currentUser && this._intern_currentUser.userRightsDats &&  this._intern_currentUser.userRightsDats[\"' + label + '\"] && this._intern_currentUser.userRightsDats[\"' + label + '\"][model.constructor.modelName] && this._intern_currentUser.userRightsDats[\"' + label + '\"][model.constructor.modelName] == model.id ){' + '\t_this._dbgLog(\"userService return true!\");' + '\treturn true;' + ' }' + ' _this._dbgLog(\"userService return false!\");' + ' return false' + '};');\n            if (!_this.hasOwnProperty(label)) {\n              //the method is now set : create  a direct get access for userService.label property\n              Object.defineProperty(_this, label, {\n                get: function /*test = _label*/\n                () {\n                  this._dbgLog('userService {B}_this.' + _label + '(', /*test, */') callée');\n                  //return _this.??? What entity ?? this.currentCommunity etc\n\n                  return false;\n                }\n              });\n            }\n            // \t\t\t});\n          }\n        });\n      }\n      while (this._userResolvedCallbacks.length) {\n        if (!this._userResolvedCallbacks.shift) {\n          this._userResolvedCallbacks = [];\n          break;\n        }\n        let cb = this._userResolvedCallbacks.shift();\n        if (cb) cb(_user);\n      }\n      this._userResolvedCallbacks = [];\n      await this._computeAdminRights();\n    }\n\n    /* Common admins rights and status - January 2021\n     *\n     * We have 2 admins main levels : global admins (Civocracy employees only) and community admins\n     *\n     * The global admins has every rights on every communities.\n     * Community admins has more or less the same rights but only on one specific community and still all the specific rights may be settable : this service is listing methods to retrieve specific edit/manage rights. Some of them are really settable through the backoffice for an user, some of them are just universal and the service is just ensuring the user has an admin status to give this rights.\n     *\n     * ==> most of the time in components you will NOT USE isAdmin() to test an allowance to an admin feature but the specific method you'll have to implement if it doesn't exist !\n     * ==> Example of a specific method needed for idea box :\n     * \t\t<code>\n     * \t\tcanModerateIdeaBox(){\n     * \t\t\treturn this.isAdmin() && ;\n     * \t\t}\n     * \t\t</code>\n     *\n     *\n     * We also have a specific right : translator for all languages and translator for specific languages.\n     * The translator right apply on all communities as the editing tools impact the whole platform wording (no custom wording for specific communities at the moment).\n     *\n     */\n\n    //TODO: Move frontend methods at the start of the file\n\n    // \t@computed('_intern_currentUser', 'currentCommunity')\n    // \tget\n\n    async _computeAdminRights() {\n      // computed/tracked property using the actual community model if loaded\n      // this._dbgLog(\"userService _computeAdminRights :: this._intern_currentUser\", this._intern_currentUser);\n      let foo = this.isDeveloper; //force computing\n      let dbgv = '';\n      const community = this.currentCommunity,\n        project = this.currentProject,\n        _this = this,\n        sv_hasCommunityOwnerRights = this._hasCommunityOwnerRights,\n        sv_hasProjectAdminRights = this._hasProjectAdminRights;\n      if (!this._intern_currentUser) {\n        dbgv = 'A';\n        this._hasCommunityOwnerRights = false;\n        this._hasProjectAdminRights = false;\n        // \t\t\tthis.trigger('userRightsChanged');\n      } else if (this._intern_currentUser.isGlobalAdmin) {\n        dbgv = 'B';\n        this._hasCommunityOwnerRights = true;\n        this._hasProjectAdminRights = true;\n        // \t\t\tthis.trigger('userRightsChanged');\n      } else {\n        dbgv = 'C0';\n        if (!community) {\n          dbgv = 'C1';\n          this._hasCommunityOwnerRights = false;\n          this._hasProjectAdminRights = false;\n        } else {\n          dbgv = 'C2';\n          // this._dbgLog(\"userService _computeAdminRights :: D await hasAdminRightsForCommunity(\", community,\")\");\n          let a = this._hasCommunityOwnerRights;\n          await this.loadUserCommunityFollowings().then(() => {\n            this._hasAdminRightsForCommunity(community).then(boolRight => {\n              this._hasCommunityOwnerRights = boolRight;\n            });\n          });\n        }\n        if (!project) {\n          dbgv += 'a';\n          this._hasProjectAdminRights = false;\n        } else {\n          dbgv += 'b';\n          let b = this._hasCommunityOwnerRights;\n          this._hasProjectAdminRights = await this._hasAdminRightsForProject(project);\n        }\n      }\n      if ((community !== undefined || project !== undefined) && (sv_hasCommunityOwnerRights != this._hasCommunityOwnerRights || sv_hasProjectAdminRights != this._hasProjectAdminRights)) {\n        //If they are not defined it's then too early to trigger the event, let's wait for the parents routes to load\n        this.trigger('userRightsChanged');\n      }\n      // \t\t this._dbgLog(\"userService _computeAdminRights {\"+dbgv+\"} :: this._intern_currentUser=\", this._intern_currentUser, '\\nthis._hasProjectAdminRights=', this._hasProjectAdminRights, '\\nthis._hasCommunityOwnerRights=', this._hasCommunityOwnerRights, '\\nthis.currentCommunity=', this.currentCommunity, '\\nthis.currentProject=', this.currentProject);\n      /**/\n    }\n    async _hasAdminRightsForCommunity(communityOrId) {\n      let ret = false;\n      if (!this._intern_currentUser) {\n        ret = false;\n      } else if (this._intern_currentUser.isGlobalAdmin) {\n        ret = true;\n      } else {\n        const communityId = communityOrId.id ? communityOrId.id : communityOrId,\n          followings = await this.store.peekAll('community-following');\n        let filtered = [];\n        if (followings.length) {\n          filtered = followings.filter(cf => {\n            return cf.get('user.id') == this._intern_currentUser.get('id') && cf.get('community.id') == communityId && cf.isCommunityAdmin;\n          });\n        }\n        ret = filtered.length > 0;\n      }\n      return ret;\n    }\n    async asyncIsAdminForProject(project) {\n      if (await this._hasAdminRightsForCommunity(project.get('community.id'))) {\n        return true;\n      }\n      return await this._hasAdminRightsForProject(project.id);\n    }\n    async _hasAdminRightsForProject(projectOrId) {\n      // this._dbgLog(\"userService _hasAdminRightsForProject(\", projectOrId,\"{\"+ typeof projectOrId +\"}) init on _hasCommunityOwnerRights:\", this._hasCommunityOwnerRights, \"\\n_hasProjectAdminRights:\", this._hasProjectAdminRights);\n      if (!projectOrId || typeof projectOrId === 'object' && (!projectOrId.get || !projectOrId.id)) {\n        // this._dbgLog(\"userService _hasAdminRightsForProject(\", projectOrId,\") return false A\");\n        return false;\n      }\n      if (!this._intern_currentUser) {\n        // this._dbgLog(\"userService _hasAdminRightsForProject(\", projectOrId,\") return false B\");\n        return false;\n      }\n      //if user is a community admin he is also a project admin!\n      /* UPDT : No! he is not as he can follow some projects voluntarily and don't follow other\n       => in components we need to test userService.hasCommunityOwnerRights AND userService.hasProjectAdminRights if we want to check the rights to edit something but the two of them are not dependant to implement the needed behavior\n      if (this.hasAdminRightsForCommunity(projectOrId.get('community.id'))) {\n      \treturn true;\n      }\n      */\n      return this.loadProjectFollowingsAndProjects().then(userProjects => {\n        const pid = projectOrId.id ? projectOrId.id : projectOrId;\n        const matches = this._userProjectsFollowing.filter(projectFollowing => pid == projectFollowing.project.get('id') && projectFollowing.adminLevel > 0);\n        if (!matches.length) return false;\n        return true;\n      });\n    }\n\n    /**\n     * Does the user have access to project if it is private?\n     * @param project\n     * @returns {boolean}\n     */\n    hasAccessToProject(projectOrId) {\n      //! See components/project-card/index.js for a dynamic use of this func\n      if (!projectOrId.private) {\n        // public projectOrId, doesn't matter\n        return true;\n      }\n      if (!this._intern_currentUser) {\n        // not logged in, no access\n        return false;\n      }\n      return this.loadProjectFollowingsAndProjects(true).then(userProjects => {\n        const pid = projectOrId.id ? projectOrId.id : projectOrId;\n        return userProjects.filter(project => pid == project.id).length;\n      });\n    }\n    get isGlobalAdmin() {\n      if (!this._intern_currentUser) {\n        return false;\n      }\n      return this._intern_currentUser.isGlobalAdmin;\n    }\n    get isDeveloper() {\n      if (!this._intern_currentUser) {\n        return false;\n      }\n      return this._intern_currentUser.isDeveloper;\n    }\n    get isTester() {\n      if (!this._intern_currentUser) {\n        return false;\n      }\n      return this._intern_currentUser.isTester;\n    }\n    get isWebmaster() {\n      if (!this._intern_currentUser) {\n        return false;\n      }\n      return this._intern_currentUser.isWebmaster;\n    }\n    get isTranslator() {\n      let isTranslator = false;\n      this.intl.supportedLocales.forEach(locale => {\n        if (this.get('isTranslator' + locale.toUpperCase())) isTranslator = true;\n      });\n      // \t\t\treturn ( this.get('isTranslatorDE') || this.get('isTranslatorEN') || this.get('isTranslatorES') || this.get('isTranslatorFR') || this.get('isTranslatorHR') || this.get('isTranslatorNL') || this.get('isTranslatorCA') || this.get('isTranslatorIT') );\n      return isTranslator;\n      // \t\treturn ( this.get('isTranslatorDE') || this.get('isTranslatorEN') || this.get('isTranslatorES') || this.get('isTranslatorFR') || this.get('isTranslatorHR') || this.get('isTranslatorNL') || this.get('isTranslatorCA') || this.get('isTranslatorIT') );\n    }\n\n    /*Get translator status by locale ::* /\n     * Automatised in unknownProperty !\n    @computed('_intern_currentUser')\n    get isTranslatorDE(){\n    \tif( !this._intern_currentUser ){\n    \t\treturn false;\n    \t}\n    \treturn this._intern_currentUser.isTranslatorDE;\n    };\n    \t@computed('_intern_currentUser')\n    get isTranslatorEN(){\n    \tif( !this._intern_currentUser ){\n    \t\treturn false;\n    \t}\n    \treturn this._intern_currentUser.isTranslatorEN;\n    };\n    \t@computed('_intern_currentUser')\n    get isTranslatorES(){\n    \tif( !this._intern_currentUser ){\n    \t\treturn false;\n    \t}\n    \treturn this._intern_currentUser.isTranslatorES;\n    };\n    \t@computed('_intern_currentUser')\n    get isTranslatorFR(){\n    \tif( !this._intern_currentUser ){\n    \t\treturn false;\n    \t}\n    \treturn this._intern_currentUser.isTranslatorFR;\n    };\n    \t@computed('_intern_currentUser')\n    get isTranslatorHR(){\n    \tif( !this._intern_currentUser ){\n    \t\treturn false;\n    \t}\n    \treturn this._intern_currentUser.isTranslatorHR;\n    };\n    \t@computed('_intern_currentUser')\n    get isTranslatorNL(){\n    \tif( !this._intern_currentUser ){\n    \t\treturn false;\n    \t}\n    \treturn this._intern_currentUser.isTranslatorNL;\n    };\n    \t@computed('_intern_currentUser')\n    get isTranslatorCA(){\n    \tif( !this._intern_currentUser ){\n    \t\treturn false;\n    \t}\n    \treturn this._intern_currentUser.isTranslatorCA;\n    };\n    \t@computed('_intern_currentUser')\n    get isTranslatorIT(){\n    \tif( !this._intern_currentUser ){\n    \t\treturn false;\n    \t}\n    \treturn this._intern_currentUser.isTranslatorIT;\n    };\n    */\n\n    /*::Get translator status by locale*/\n\n    hasTranslatorRights(language) {\n      if (!this._intern_currentUser) return false;\n      if (!language) {\n        // this._dbgLog(\"userService hasTranslatorRights(\"+language+\") : \" + this._intern_currentUser.isGlobalAdmin);\n        let isTranslator = false;\n        this.intl.supportedLocales.forEach(locale => {\n          if (this.get('isTranslator' + locale.toUpperCase())) isTranslator = true;\n        });\n        // \t\t\treturn ( this.get('isTranslatorDE') || this.get('isTranslatorEN') || this.get('isTranslatorES') || this.get('isTranslatorFR') || this.get('isTranslatorHR') || this.get('isTranslatorNL') || this.get('isTranslatorCA') || this.get('isTranslatorIT') );\n        return isTranslator;\n      }\n      // this._dbgLog(\"userService hasTranslatorRights(\"+language+\") : \" + ( language ? this._intern_currentUser[language.toUpperCase()] : \"\" ));\n      return this._intern_currentUser[language.toUpperCase()];\n    }\n    /* Common admins rights */\n\n    /* Community admins and rights*/\n\n    /**/\n    /* Global-admins and rights*/\n\n    /**/\n\n    /**\n     * unknownProperty()\n     *\n     * This is used by any caller to retrieve a right from the user.\n     * The unknownProperty() is a basic Ember handler that we use to compute a particular right for the user without having to implement the UserService for each right.\n     * See : https://api.emberjs.com/ember/release/functions/@ember%2Fobject/get\n     * To use in a route, controller or component, the code would be :\n     * <code>\n     * \timport { get } from '@ember/object';\n     * \talert( \"user.canTest ? => \" + get( this.userService , \"canTest\") );\n     * </code>\n     * if this.currentUser.userRights.canTest is true the return value will be true.\n     *\n     * Note that, as it is a property, it always refer to the current context.\n     *\n     */\n    unknownProperty(rightLabel) {\n      // For non allowed rights, either by accessing by property (eg: this.userService.canTest) or by method (this.userService.canTestIt(aCommunity)) the following condition will return false. If the right is defined only the access by property will use the unknownProperty handler, the access by method will use a automaticaly defined method\n      if (!this._intern_currentUser || !this._intern_currentUser.userRightsDats) {\n        // \t\t\tthis._dbgLog('userService (not a bug - a magic handler for undeclared properties)\\nuserService.unknownProperty(', arguments,'); - rightLabel=', rightLabel, '\\nthis=', this, '\\nresolved to \"false\" (not a logged user)');\n        return false;\n      }\n      let ret = false;\n      let trpos = rightLabel.toLowerCase().indexOf('istranslator');\n      if (trpos >= 0) {\n        let locale = rightLabel.substr(trpos + 12, 2);\n        ret = this._intern_currentUser.get('isTranslator' + locale.toUpperCase());\n        // \t\t\tthis._dbgLog('userService (not a bug - a magic handler for undeclared properties)\\nuserService.unknownProperty(', arguments,'); - rightLabel=', rightLabel, '\\nthis=', this, '\\nresolved to \"'+ret+'\" (this._intern_currentUser.get(isTranslator'+locale.toUpperCase()+'))');\n        return ret;\n      }\n      Object.entries(this._intern_currentUser.userRightsDats).forEach(([label, item]) => {\n        if (rightLabel === label) {\n          //\n          if (!Object.keys(item).length) {\n            // \t\t\t\t\tthis._dbgLog('userService (not a bug - a magic handler for undeclared properties)\\nuserService.unknownProperty(', arguments,'); - rightLabel=', rightLabel, '\\nthis=', this, '\\nresolved to \"true\" (this._intern_currentUser.userRightsDats['+rightLabel+'] is defined)');\n            return true;\n          }\n          Object.entries(item).forEach(([modelName, value]) => {\n            // Here we specificaly check the context :\n            // For now we are only supporting communityService.currentCommunity but other cases will need to be implemented (issue, comments etc)\n            if (modelName === 'community') {\n              if (value && this.currentCommunity && value === this.currentCommunity.id) {\n                // We may allow here for cases where a modelName is given by the backend with a null value. That would allow any id given the modelName (meaning that for the right \"canTest\" referencing a null id for community the right would be true whenever this.currentCommunity is not null, regardless of it's actual id)\n                // => For now we don't handle this case as it may be confusing...\n                // \t\t\t\t\t\t\tthis._dbgLog('userService (not a bug - a magic handler for undeclared properties)\\nuserService.unknownProperty(', arguments,'); - rightLabel=', rightLabel, '\\nthis=', this, '\\nresolved to \"true\" (this._intern_currentUser.userRightsDats['+rightLabel+'] contains a matching model for \"'+modelName+'\")');\n                return true;\n              }\n            }\n          });\n          //same for \"proposition\", \"issue\", \"comment\" etc.\n        }\n      });\n      // \t\tthis._dbgLog('userService (not a bug - a magic handler for undeclared properties)\\nuserService.unknownProperty(', arguments,'); - rightLabel=', rightLabel, '\\nthis=', this, '\\nresolved to \"'+ret+'\" (by default when no match)');\n      return ret;\n    }\n\n    /*\n    BE implementation:\n    Challenges :\n    1) avoir un nombre de droits potentiellement infini, dont certains globaux et d''autres liés à une communauté précise ou encore à un module précis (par exemple PB mais il y en aura d''autres)\n    \t- entité Right linkée à un utilisateur, avec une valeur boolean + linkée optionnelement à tout autre entité => soit une colonne par entité, mais bof, soit plutôt une colonne `entity_relation` qui peut contenir n''importe quel type d''entité (==> champ string avec type de l''entité + son id)\n    \t- comment récupérer ça dans Ember ?\n     2) ne pas faciliter le hacking en listant facilement ces droits...\n    \t- pas simple mais du coup ça pourrait être d''utiliser le load à la demande de Ember avec uniquement une computed renvoyée par le BE : hasAdminRights / hasTranslatorRights / isGlobalAdmin ? pour charger la liste des droits...\n    \t- autre solution plus simple : le BE ne renvoie que le strict nécessaire : la computed hasAdminRights / hasTranslatorRights / isGlobalAdmin + les droits qui sont true et cache tous les autres droits\n    \t\t==> seule une requête admin permet de connaitre une partie des droits possible (seuls ceux qui sont true pour cet admin donc)\n    \t(de toute manière tout système fera transiter les infos donc tout man-in-the-middle créé une faille mais le backend vérifiera les droits avant d''appliquer les actions protégées)\n     3) avoir un système que les devs peuvent implémenter sans trop de complication\n    \t- une simple requête permettra de créer de nouveaux droits ?\n    \ten gros userService.recRight('canDoSomething', model|null, \"same\" | \"allChilds\" | \"allPropositions\" etc) sera utilisée par le backend pour créer des droits sans avoir besoin d''un user particulier\n    \t\t=> il nous faudra un log détaillé de ces requetes mais à part ça ça ne devrait pas poser de problème de sécurité puisque créer un nouveau droit ne permettra rien de nouveau\n    \t\t=> on aura aussi un paramètre de controle de propagation : certains droits seront applicables uniquement à l''entité en cours (model), d''autres à toutes ses sub-entities etc\n     4) pour ajouter des droits aux utilisateurs ?\n    \t- interface backoffice pratique sur le BE\n    \t- pour le FE : droit genre \"canAdministrateRights\" (si true ce sera possible uniquement sur un set particulier d''entités - en gros un admin de level \"owner\" ne peut pas ajouter des droits sur une autre communauté par contre il peut sur des sous-entités de cette communauté)\n    ==> Ok\n    ==>\n    a) entité `UserRight` en manyToMany sur l''entité `User` + pas de value boolean ! si l''entité de label 'canDoSomething' existe pour cet utilisateur et ce contexte le droit est true, sinon il est false\n    b) pour les utilisateurs qui ne sont pas \"self\" le BE renvoie 3 propriétés boolean : isAdmin, isTranslator, isGlobalAdmin\n    c) les nouveaux droits implémentés seront créables via des outils type FE backoffice au moment du set en callant genre \"grantCanDoSomething( model )\"\n    \n    d) pour la question traduction : set de méthodes particulières :\n    grantTranslations( locale|null )\n    isTranslator(locale)\n    et c''est tout\n    du côté model/entity on aura\n    `canTranslateDe`\n    `canTranslateEn`\n    `canTranslateEs`\n    `canTranslateFr`\n    `canTranslateHr`\n    `canTranslateNl`\n    \n    e) pour tout ce qui est \"ownership\" comme Comment ou autre, il nous faut aussi une logique particulière : frontend only ou backend ?\n    `canComment` peut être computé par le FE lui-même et ça évite de peupler la database, voir de devoir modifier ces droits si l''owner change (peu probable mais pourrait arriver pour une raison ou une autre)\n    + avoir un right BE obligera aussi à discréminer les droits considérés comme faisant de l''user un admin ou non ce qui compliquera l''ensemble des logiques FE, BE et implémentation de nouveaux droits.\n    */\n\n    /*Get communities / projects >>>>*/\n    async getUserCommunities() {\n      if (!this.getCurrentUser() || !this.isAuthenticated) return [];\n      await this.loadUserCommunityFollowings();\n      if (!this.getCurrentUser() || !this.isAuthenticated)\n        //to check again!\n        return [];\n      const userId = this.getCurrentUser().id,\n        communityFollowings = this.store.peekAll('community-following').filter(communityFollowing => {\n          //now that we have all the followings from the store, we still need to filter out the one for the current user !\n          if (communityFollowing.statusString == 'active' && communityFollowing.get('user.id') == userId) {\n            // this._dbgLog(\"userService ADDING communityFollowing{\"+communityFollowing.get('id')+\"/\"+communityFollowing.get('statusString')+\"/\"+communityFollowing.get('community.id')+\"/\"+communityFollowing.get('community.slug')+\"/\"+communityFollowing.get('user.id')+\"<>\"+userId+\"}=\", communityFollowing, \"\\n\", communityFollowing.community);\n            return true;\n          } /*else{\n            // this._dbgLog(\"userService SKIPPING communityFollowing{\"+communityFollowing.get('id')+\"/\"+communityFollowing.get('statusString')+\"/\"+communityFollowing.get('community.id')+\"/\"+communityFollowing.get('community.slug')+\"/\"+communityFollowing.get('user.id')+\"<>\"+userId+\"}=\", communityFollowing, \"\\n\", communityFollowing.community);\n            }*/\n        });\n      const promises = communityFollowings.map(async communityFollowing => await communityFollowing.community);\n      let userCommunities = await _rsvp.default.all(promises);\n      if (!userCommunities.length) return [];\n      userCommunities = userCommunities.filter(community => {\n        //ensure we get active/private/admin communities only !\n        if (community.statusString != 'deleted' && community.statusString != 'duplicate' && community.statusString != 'unactivated' && community.statusString != 'disabled') return true;\n      });\n      if (!userCommunities.length) return [];\n      return userCommunities;\n    }\n    async getUserProjects() {\n      return this.loadProjectFollowingsAndProjects();\n    }\n    async loadProjectFollowingsAndProjects(forceRefresh) {\n      if (this._loadProjectFollowingsAndProjects_running) {\n        //previous call is running ? we wait for it to end and keep the caller waiting\n        const sleep = delay => new Promise(resolve => setTimeout(resolve, delay));\n        while (this._loadProjectFollowingsAndProjects_running) await sleep(100);\n        return this._userProjects;\n      } else if (forceRefresh) {\n        this._userProjects = [];\n        this._loadProjectFollowingsAndProjects_done = false;\n      }\n\n      // _loadProjectFollowingsAndProjects_done=false means we don't have any data at all yet,\n      // an empty this._userProjects array is valid as may come from previous request for user with no followings\n      if (!this._loadProjectFollowingsAndProjects_done && this._intern_currentUser) {\n        this._loadProjectFollowingsAndProjects_running = true;\n        /*\n        this._userProjectsFollowing = await this.store.query(\n        \t'project-following',\n        \t{\n        \t\t'filters[user]': this._intern_currentUser.id,\n        \t\t'filters[statusString]': 'active',\n        \t\t'include': 'user,project.participationPacks'\n        \t}, {headers: this.store.getUserHeaders()}\n        );\n        */\n\n        this._userProjectsFollowing = await this.store.requester(this.store.getRequestBuilder('project-following').addFilter('user', this._intern_currentUser.id).addInclude(['user', 'project.participationPacks.questionnaire', 'project.participationPacks.ideaBox', 'project.participationPacks.issue']));\n\n        /*Now load projects*/\n        const promises = this._userProjectsFollowing.map(async projectFollowing => await projectFollowing.project);\n        this._userProjects = await _rsvp.default.all(promises);\n        // this._dbgLog(\"userService this._userProjects\", this._userProjects);\n        if (!this._userProjects.length) {\n          this._userProjects = [];\n        } else {\n          this._userProjects = this._userProjects.filter(project => {\n            //ensure we get active/private/admin communities only !\n            // this._dbgLog(\"userService project=\", project);\n            if (project.statusString != 'deleted' && project.statusString != 'duplicate' && project.statusString != 'unactivated' && project.statusString != 'disabled') return true;\n          });\n        }\n        this._loadProjectFollowingsAndProjects_running = false;\n        this._loadProjectFollowingsAndProjects_done = true;\n        this.trigger('projectFollowingsLoaded');\n      }\n      return this._userProjects;\n    }\n    async loadUserCommunityFollowings(forceRefresh) {\n      // this._dbgLog('userService loadUserCommunityFollowings('+forceRefresh+')');\n      if (this._loadUserCommunityFollowings_running) {\n        //previous call is running ? we wait for it to end and keep the caller waiting\n        const sleep = delay => new Promise(resolve => setTimeout(resolve, delay));\n        while (this._loadUserCommunityFollowings_running) await sleep(100);\n        return this._userCommunities;\n      } else if (forceRefresh) this._userCommunities = [];\n      if (!this._userCommunities.length) {\n        if (this._intern_currentUser) {\n          this._loadUserCommunityFollowings_running = true;\n\n          /*\n          const communityFollowings = await this.store.query(\n          \t'community-following',\n          \t{\n          \t\t'filters[user]': this._intern_currentUser.id,\n          \t}\n          );\n          */\n\n          const communityFollowings = await this.store.requester(this.store.getRequestBuilder('community-following').addFilter('user', this._intern_currentUser.id).addInclude(['user', 'projects']));\n          const promises = communityFollowings.map(async communityFollowing => await communityFollowing.community);\n          this._userCommunities = await _rsvp.default.all(promises);\n          if (!this._userCommunities.length) {\n            this._userCommunities = [];\n          } else {\n            this._userCommunities = this._userCommunities.filter(community => {\n              //ensure we get active/private/admin communities only !\n              if (community.statusString != 'deleted' && community.statusString != 'duplicate' && community.statusString != 'unactivated' && community.statusString != 'disabled') return true;\n            });\n          }\n          this._loadUserCommunityFollowings_running = false;\n        }\n      }\n      return this._userCommunities;\n    }\n\n    /*:: Preload user's datas*/\n    /*<<<< Get communities / projects*/\n\n    get isAnonymousFollower() {\n      return this.anonymousProjectFollowings.includes(this.currentProject.id);\n    }\n    addAnonymousFollowing() {\n      this.anonymousProjectFollowings.pushObject(this.currentProject.id);\n    }\n    once(eventName, callback, dontLaunchIfEventTriggered) {\n      this.on(eventName, callback, dontLaunchIfEventTriggered, true);\n    }\n    on(eventName, callback, dontLaunchIfEventTriggered, once) {\n      this._dbgError(\"userService.on(\", eventName, \", \", callback, \", \", dontLaunchIfEventTriggered, \", \", once, \")\");\n      if (typeof eventName == 'string') eventName = [eventName];\n      eventName.forEach(evtnm => {\n        //this._dbgLog( \"userService.on(\" + evtnm + \", \", callback, \")\", this._eventsTriggered, this._eventsHandlersCallbacksOnce );\n        if (!dontLaunchIfEventTriggered && this._eventsTriggered.includes(evtnm)) {\n          callback();\n          if (once) return; // launched once : no need to add it\n        }\n        if (!this._eventsHandlersCallbacks[evtnm]) this._eventsHandlersCallbacks[evtnm] = [];\n        if (!this._eventsHandlersCallbacks[evtnm].includes(callback)) {\n          this._eventsHandlersCallbacks[evtnm].push(callback);\n          if (once) {\n            if (!this._eventsHandlersCallbacksOnce[evtnm]) this._eventsHandlersCallbacksOnce[evtnm] = [];\n            this._eventsHandlersCallbacksOnce[evtnm][this._eventsHandlersCallbacks[evtnm].length - 1] = true;\n          }\n        }\n      });\n    }\n    off(eventName, callback) {\n      if (typeof eventName == 'string') eventName = [eventName];\n      eventName.forEach((evtnm, idx) => {\n        if (this._eventsHandlersCallbacks[evtnm]) {\n          if (callback === undefined) this._eventsHandlersCallbacks[evtnm] = [];else {\n            this._eventsHandlersCallbacks[evtnm] = this._eventsHandlersCallbacks[evtnm].filter(cback => {\n              if (cback === callback) {\n                if (this._eventsHandlersCallbacksOnce[evtnm] && this._eventsHandlersCallbacksOnce[evtnm][idx]) delete this._eventsHandlersCallbacksOnce[evtnm][idx];\n                return false;\n              }\n              return true;\n            });\n          }\n        }\n      });\n    }\n    trigger(eventName, argument) {\n      // \t\tdebounce(this, this.debouncedTrigger, eventName, 1000, true);\n      // we need a debouncing per eventName (a particular event should be triggered now only if it wasn't triggered since 1sec but not blocking other events to be triggered) => a simple debounce would not discriminate the eventName and would applied on debouncedTrigger whatever is the eventName\n      this._checkDebouncedEvent(...arguments);\n    }\n    _checkDebouncedEvent(eventName, argument) {\n      if (!this._blockedEvents.includes(eventName)) {\n        (0, _runloop.later)(this, function () {\n          this._blockedEvents = this._blockedEvents.filter(evtname => evtname != eventName);\n        }.bind(this), 1000);\n        this.debouncedTrigger(...arguments);\n        this._blockedEvents.push(eventName);\n      }\n    }\n    debouncedTrigger(eventName, argument) {\n      this._dbgLog('userService.debouncedTrigger(' + eventName + ')\\n', this._eventsHandlersCallbacks);\n      if (!eventName) return;\n      //send the event to Analytics :\n      /*\n      debounce(\n      \tthis.analytics,\n      \tthis.analytics.sendEvent,\n      \t'userService:' + eventName,\n      \t2000,\n      \ttrue\n      );\n      */\n      if (!this._eventsTriggered[eventName]) this._eventsTriggered.push(eventName);\n      if (!this._eventsHandlersCallbacks[eventName]) return;\n      // \t\tthis._dbgLog('userService.trigger('+eventName+')');\n      Object.entries(this._eventsHandlersCallbacks[eventName]).forEach(([idx, cb]) => {\n        if (!cb) return;\n        try {\n          // this._dbgLog('userService.trigger('+eventName+') calling', cb);\n          if (this._eventsHandlersCallbacksOnce[eventName] && this._eventsHandlersCallbacksOnce[eventName][idx]) this.off(eventName, cb);\n          cb(...arguments);\n        } catch (e) {\n          this._dbgError('userService.trigger(' + eventName + '): _eventsHandlersCallbacks cback error :', e);\n        }\n      });\n    }\n  }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"store\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"debug\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"intl\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"session\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"analytics\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"toast\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"popupService\", [_dec], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"communityService\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"loginRender\", [_service.inject], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"currentUser\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"pendingAuthentication\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"_isStarted\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return false;\n    }\n  }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"_bearerToken\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"_hasCommunityOwnerRights\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"_hasProjectAdminRights\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"anonymousProjectFollowings\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return [];\n    }\n  }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"_randomUserLoad\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null\n  }), _applyDecoratedDescriptor(_class.prototype, \"showActivationBanner\", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, \"showActivationBanner\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"currentCommunity\", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, \"currentCommunity\"), _class.prototype), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"_currentCommunity\", [_tracking.tracked], {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: function () {\n      return null;\n    }\n  }), _applyDecoratedDescriptor(_class.prototype, \"currentProject\", [_dec4], Object.getOwnPropertyDescriptor(_class.prototype, \"currentProject\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isGlobalAdmin\", [_dec5], Object.getOwnPropertyDescriptor(_class.prototype, \"isGlobalAdmin\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isDeveloper\", [_dec6], Object.getOwnPropertyDescriptor(_class.prototype, \"isDeveloper\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isTester\", [_dec7], Object.getOwnPropertyDescriptor(_class.prototype, \"isTester\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isWebmaster\", [_dec8], Object.getOwnPropertyDescriptor(_class.prototype, \"isWebmaster\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isTranslator\", [_dec9], Object.getOwnPropertyDescriptor(_class.prototype, \"isTranslator\"), _class.prototype), _class);\n});","define(\"zeppelin-architectes/svgs\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  var _default = _exports.default = {\n    \"svg\": {\n      \"contact-opt\": \"<svg width=\\\"41.038\\\" height=\\\"30.39\\\" viewBox=\\\"0 0 10.858 8.041\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><g stroke=\\\"#20a4c3\\\" stroke-width=\\\".265\\\"><g fill=\\\"#fff\\\"><path d=\\\"M.135 1.17L.828.478h9.426l.462.462\\\"/><path d=\\\"M10.725.963v5.983l-.555.962H.5L.133 7.23l.001-6.06\\\"/></g><g fill=\\\"none\\\"><path d=\\\"M.324 7.578l3.642-3.643M10.468 7.599L6.826 3.956M.37.138l5.036 5.036L10.487.093\\\"/></g></g></svg>\",\n      \"link-opt\": \"<svg width=\\\"139.359\\\" height=\\\"140.5\\\" viewBox=\\\"0 0 139.36 140.5\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M89.489 57.539l-6.569 6.556c-3.612 3.606-6.568 6.635-6.568 6.73 0 .097.692 1.018 1.537 2.05 1.973 2.407 2.522 3.51 2.889 5.806.408 2.554-.136 6.51-1.178 8.567-1.24 2.447-28.256 28.399-36.154 34.73-2.292 1.837-2.989 2.118-6.17 2.472-4.571.51-8.637-.798-11.62-3.734-1.996-1.964-2.83-3.432-3.542-6.25-.645-2.55-.596-4.537.174-7.094.522-1.733 2.63-4.476 6.754-8.787 1.6-1.673 3.558-3.726 4.351-4.562l1.442-1.522-.963-2.35c-1.385-3.379-2.482-7.863-3.01-12.31-.252-2.128-.54-4.33-.642-4.893l-.186-1.026-8.434 8.112C10.074 91.12 7.156 94.604 4.905 99.97c-1.779 4.24-2.21 6.537-2.19 11.613.017 3.82.116 4.794.727 7.127.765 2.918 2.39 6.478 4.598 10.062 1.802 2.925 5.51 6.417 9.936 9.357 1.75 1.162 3.184 2.198 3.314 2.389h31.656l-.842-.04-2.99-.138 2.769-1.088c2.38-1.34 3.825-3.164 10.202-8.85 13.2-11.768 28.399-26.591 31.492-30.712 3.412-4.547 5.761-9.876 6.308-14.311.37-2.996.149-8.225-.476-11.268-.89-4.331-3.434-8.973-7.573-13.822z\\\" fill=\\\"#fff\\\" stroke=\\\"#fff\\\" stroke-width=\\\".4\\\"/><path d=\\\"M47.896 85.784c-2.857-2.942-6.263-8.242-7.284-11.336-.88-2.664-1.07-4.921-.964-11.429.1-6.098.25-7.16 1.424-10.024 2.02-4.926 3.95-7.386 12.599-16.056C65.955 24.627 78.762 12.89 85.45 7.818c5.082-3.855 9.426-4.96 19.554-4.975 4.914-.007 5.406.024 7.109.453 6.451 1.627 11.116 4.382 15.916 9.404 4.481 4.69 6.74 8.987 8.108 15.428.456 2.146.525 2.927.525 5.896s-.07 3.749-.525 5.895c-.943 4.442-2.273 7.77-4.23 10.582-1.671 2.404-5.033 5.922-13.8 14.441l-8.602 8.36-.713-4.172c-1.056-6.178-2.055-9.823-3.898-14.221l-.958-2.287 4.321-4.264c4.78-4.717 7.168-7.527 8.31-9.779l.756-1.492-.013-2.851c-.012-2.585-.064-2.998-.552-4.414-1.018-2.95-2.525-4.942-5.008-6.618-3.685-2.489-8.05-3.324-11.446-2.19-2.83.945-3.962 1.732-9.27 6.446-9.265 8.23-23.41 21.933-28.27 27.39-1.838 2.064-3.233 3.854-3.683 4.73-.81 1.576-1.156 5.084-.7 7.099.339 1.497 1.838 4.315 3.301 6.205l1.398 1.805-5.045 5.052c-4.88 4.888-7.905 7.665-8.35 7.665-.117 0-.923-.73-1.79-1.622z\\\" fill=\\\"#fff\\\" stroke=\\\"#fff\\\" stroke-width=\\\".192\\\"/><path d=\\\"M18.016 140.498c-2.574 0-4.319-1.082-8.518-5.281-3.675-3.675-5.965-7.097-7.53-11.25-1.86-4.934-2.182-7.443-1.856-14.47.327-7.054.892-9.414 3.323-13.875 1.917-3.519 7.23-9.487 15.377-17.275 6.847-6.545 12.91-11.745 13.473-11.557.564.188 1.142 3.34 1.285 7.004.17 4.356 1.17 8.94 2.89 13.24l2.63 6.575-7.09 6.802c-5.797 5.56-7.091 7.366-7.091 9.897 0 1.703.537 4.276 1.194 5.718.657 1.442 2.435 3.263 3.95 4.047 1.516.784 4.365 1.425 6.331 1.425 2.985 0 4.684-1.016 10.3-6.16 3.699-3.389 12.237-11.536 18.975-18.107l12.25-11.947v-3.817c0-2.611-.789-4.753-2.5-6.787-1.375-1.634-2.5-3.422-2.5-3.973 0-.551 3.405-4.311 7.566-8.356s8.165-7.49 8.9-7.657c.733-.167 2.94 1.35 4.904 3.373s4.477 5.55 5.585 7.839 2.476 6.593 3.04 9.565c.716 3.775.696 7.23-.067 11.465-.601 3.334-2.256 8.206-3.677 10.826-1.71 3.154-9.328 11.184-22.526 23.75l-19.941 18.985-3.642-.005-3.605.007 3.256-1.841c1.786-1.01 11.842-9.835 22.29-19.708 16.316-15.417 19.452-18.868 22.208-24.433 2.726-5.505 3.2-7.538 3.146-13.5-.044-4.804-.708-8.455-2.106-11.57-1.123-2.503-3.53-6.245-5.347-8.314l-3.304-3.764-13.572 13.468 2.446 2.907c1.76 2.092 2.436 4.077 2.41 7.08-.019 2.296-.598 5.187-1.286 6.425-.687 1.239-9.109 9.725-18.715 18.86-9.605 9.133-18.506 17.007-19.779 17.497-1.273.49-3.973.89-6 .888-2.026-.002-5.125-.882-6.886-1.956-1.76-1.073-3.898-3.3-4.75-4.946s-1.548-4.397-1.548-6.11.5-4.099 1.113-5.3 3.601-4.736 6.64-7.855l5.527-5.67-1.74-4.33c-.957-2.381-2.033-7.155-2.39-10.61l-.65-6.28-11.232 10.78c-8.94 8.581-11.786 12.005-13.948 16.78-2.07 4.572-2.713 7.548-2.702 12.5.01 4.53.685 8 2.228 11.446 1.217 2.72 3.306 6.377 4.641 8.127s4.549 4.588 7.142 6.305l4.713 3.123zm31.75-49c-.33 0-2.5-2.059-4.819-4.575s-5.186-6.678-6.372-9.25c-1.703-3.693-2.155-6.566-2.152-13.676.003-7.814.37-9.75 2.79-14.69 2.256-4.61 6.596-9.33 22.846-24.855C77.27 9.923 83.485 4.65 87.764 2.643 92.69.334 94.684-.003 103.408-.003c8.908 0 10.681.314 16.234 2.88 3.86 1.782 7.982 4.747 10.821 7.782 2.523 2.697 5.567 7.026 6.766 9.62 1.747 3.782 2.169 6.505 2.127 13.718-.042 7.266-.503 9.963-2.39 14-1.686 3.606-6.266 8.832-16.43 18.75-7.75 7.562-12.678 11.746-12.678 11.746-.353-1.587-.617-2.021-1.499-6.75-1.4-7.51-2.49-10.615-3.658-14.487l-2.673-5.741 6.463-5.76c4.317-3.846 6.824-6.95 7.55-9.346.883-2.915.777-4.188-.568-6.788-.91-1.76-3.16-3.917-4.998-4.794-2.196-1.047-4.519-1.374-6.767-.952-2.658.498-7.326 4.353-20.861 17.227-9.591 9.121-18.06 17.847-18.821 19.389-.842 1.706-1.113 3.883-.693 5.558.38 1.514 1.985 3.961 3.566 5.438l2.875 2.686-8.702 8.662c-4.786 4.764-8.973 8.662-9.305 8.662zm.01-4c.38 0 3.553-2.888 7.05-6.417l6.36-6.416-2.07-2.63c-1.138-1.447-2.36-3.958-2.717-5.58-.356-1.623-.163-4.414.428-6.204.719-2.172 6.67-8.625 17.906-19.413C85.99 31.95 95.104 23.74 96.986 22.592s4.631-2.088 6.108-2.09 3.952.476 5.5 1.063 3.828 2.016 5.066 3.176 2.68 3.657 3.202 5.55c.523 1.892.67 4.85.33 6.574-.4 2.015-2.859 5.375-6.889 9.413l-6.475 6.279 1.565 3.72c.86 2.047 2.287 6.75 2.916 10.452l1.143 6.73 11.58-11.23c9.906-9.607 11.89-12.066 13.729-17.017 1.222-3.294 2.148-8.126 2.148-11.212 0-3.106-.92-7.886-2.154-11.181-1.46-3.902-3.806-7.409-7.28-10.884-3.526-3.525-6.993-5.83-11.097-7.377-4.959-1.87-7.407-2.179-14.469-1.831-6.619.326-9.616.992-13.543 3.008-3.156 1.62-12.247 9.449-24.298 20.926C48.821 41.18 44.25 46.144 42.111 50.499c-2.3 4.684-2.698 6.762-2.68 14 .018 6.78.464 9.334 2.203 12.617 1.199 2.264 3.367 5.526 4.817 7.25s2.947 3.133 3.326 3.133z\\\" fill=\\\"#2ea9c7\\\"/></svg>\",\n      \"logo-zeppelin-opt-1\": \"<svg width=\\\"352.331\\\" height=\\\"9.234cm\\\" viewBox=\\\"0 0 352.33 349\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><defs><linearGradient id=\\\"a\\\" x1=\\\"188.54\\\" x2=\\\"189.52\\\" y1=\\\"4\\\" y2=\\\"352.9\\\" gradientUnits=\\\"userSpaceOnUse\\\"><stop stop-color=\\\"#006cb8\\\" offset=\\\".093\\\"/><stop stop-color=\\\"#439ec4\\\" offset=\\\".569\\\"/><stop stop-color=\\\"#87d1d1\\\" offset=\\\".838\\\"/></linearGradient></defs><path d=\\\"M117.91 338.15l-32.594-14.651-49.032-54.244-21.564-65.756-.882-9 7.335-69 35.17-61 3.16-3.709 57.922-42.01L187.085 4h5.84l69.66 14.78 57.922 42.01 3.16 3.709 35.17 61 7.335 69-.882 9-21.564 65.756-49.034 54.244-66.141 29.5-78.045-.197z\\\" fill=\\\"url(#a)\\\" transform=\\\"translate(-13.834 -4)\\\"/><g aria-label=\\\"zeppelin\\\"><path d=\\\"M22.12 182.12v-4.776l27.745-25.484q-4.7.219-8.305.219H23.763v-4.813h35.638v3.901l-28.154 26.177q4.973-.291 9.308-.291h20.17v5.067zM97.959 170.89l7.62.766q-3.787 11.266-19.166 11.266-10.039 0-15.56-5.032-5.247-4.776-5.247-12.906 0-8.093 5.065-13.089 5.476-5.395 15.332-5.395 9.628 0 14.921 5.323 4.929 4.921 4.929 12.797 0 .546-.046 1.604H73.272q.365 5.104 3.513 8.276 3.514 3.536 9.674 3.536 8.26 0 11.5-7.146zm-24.276-9.552H98.05q-.502-4.375-2.83-6.6-3.513-3.39-9.125-3.39-5.385 0-8.807 2.88-3.24 2.771-3.605 7.11zM114.843 195.46v-48.198h6.753v4.52q4.746-5.286 12.64-5.286 11.773 0 16.336 8.75 2.144 4.193 2.144 9.188 0 11.52-9.354 16.188-4.609 2.297-9.628 2.297-7.119 0-11.5-4.412v16.953zm6.707-30.552q0 5.287 2.465 8.787 3.057 4.338 9.217 4.338 6.297 0 9.446-4.557 2.51-3.61 2.51-9.078 0-5.214-2.51-8.823-3.103-4.448-9.126-4.448-6.07 0-9.355 4.703-2.647 3.828-2.647 9.078zM161.615 195.46v-48.198h6.753v4.52q4.746-5.286 12.64-5.286 11.773 0 16.336 8.75 2.145 4.193 2.145 9.188 0 11.52-9.355 16.188-4.609 2.297-9.628 2.297-7.118 0-11.499-4.412v16.953zm6.708-30.552q0 5.287 2.464 8.787 3.057 4.338 9.217 4.338 6.297 0 9.446-4.557 2.51-3.61 2.51-9.078 0-5.214-2.51-8.823-3.103-4.448-9.126-4.448-6.07 0-9.355 4.703-2.646 3.828-2.646 9.078zM238.275 170.89l7.62.766q-3.786 11.266-19.165 11.266-10.039 0-15.56-5.032-5.247-4.776-5.247-12.906 0-8.093 5.065-13.089 5.476-5.395 15.332-5.395 9.628 0 14.921 5.323 4.929 4.921 4.929 12.797 0 .546-.046 1.604h-32.535q.365 5.104 3.513 8.276 3.514 3.536 9.674 3.536 8.26 0 11.5-7.146zM214 161.338h24.368q-.502-4.375-2.83-6.6-3.513-3.39-9.126-3.39-5.384 0-8.806 2.88-3.24 2.771-3.605 7.11zM255.022 182.12v-48.089h7.392v48.089zM273.87 140.81v-6.781h7.393v6.781zm0 41.307v-34.854h7.393v34.854zM292.532 182.12v-34.854h6.662v4.958q4.837-5.724 13.872-5.724 8.533 0 12.229 4.084 1.643 1.859 2.282 4.375.41 1.604.41 5.724v21.438h-7.392v-21.182q0-6.38-3.924-8.276-2.19-1.058-5.157-1.058-11.59 0-11.59 11.484v19.031z\\\"/></g><g aria-label=\\\"ARCHITECTES\\\"><path d=\\\"M74.092 250.13l7.922-20.609h2.937l8.438 20.609h-3.11l-2.406-6.25h-8.61l-2.265 6.25zm5.953-8.469h6.985l-2.141-5.703q-1-2.64-1.469-4.281-.406 2.062-1.11 3.937zM95.606 250.13v-20.609h9.14q2.391 0 3.641.375 1.875.547 2.844 2.14.86 1.407.86 3.11 0 4.813-5.813 5.61 1.094.515 1.64 1.015 1.235 1.125 2.266 2.75l3.594 5.61h-3.438l-2.734-4.282q-.906-1.453-1.516-2.265-1.093-1.485-1.828-1.954-.64-.421-1.25-.562-.422-.094-1.515-.094h-3.172v9.156zm2.719-11.516h5.875q3.484 0 4.531-1.625.547-.844.547-1.844 0-3.36-4.422-3.36h-6.531zM131.076 242.9l2.719.703q-.828 3.266-2.985 5.047-2.234 1.844-5.547 1.844-6.359 0-8.593-5.297-1.094-2.578-1.094-5.531 0-6.656 4.734-9.25 2.266-1.25 5-1.25 3.047 0 5.172 1.547 2.125 1.547 2.969 4.453l-2.688.64q-1.375-4.297-5.515-4.297-4.797 0-6.219 4.188-.64 1.922-.64 3.969 0 5.625 3.14 7.515 1.625.97 3.5.97 4.906 0 6.047-5.25zM137.246 250.13v-20.609h2.719v8.453h10.719v-8.453h2.734v20.609h-2.734v-9.719h-10.72v9.719zM158.416 250.13v-20.609h2.719v20.609zM171.206 250.13v-18.188h-6.797v-2.422h16.344v2.422h-6.828v18.188zM183.606 250.13v-20.609h14.906v2.422h-12.188v6.312h11.406v2.422h-11.406v7.016h12.656v2.437zM217.466 242.9l2.719.703q-.828 3.266-2.985 5.047-2.234 1.844-5.546 1.844-6.36 0-8.594-5.297-1.094-2.578-1.094-5.531 0-6.656 4.734-9.25 2.266-1.25 5-1.25 3.047 0 5.172 1.547 2.125 1.547 2.969 4.453l-2.688.64q-1.374-4.297-5.515-4.297-4.797 0-6.219 4.188-.64 1.922-.64 3.969 0 5.625 3.14 7.515 1.625.97 3.5.97 4.906 0 6.047-5.25zM228.796 250.13v-18.188h-6.797v-2.422h16.344v2.422h-6.828v18.188zM241.206 250.13v-20.609h14.906v2.422h-12.188v6.312h11.406v2.422h-11.406v7.016h12.656v2.437zM259.416 243.51l2.563-.219q.359 3.016 2.937 4.14 1.406.61 3.156.61 3.281 0 4.531-1.734.594-.813.594-1.766 0-1.984-2.422-2.906-.968-.375-3.875-1.047-2.5-.578-3.78-1.25-2.923-1.547-2.923-4.484 0-1.688.953-3.031.938-1.297 2.516-1.954 1.703-.703 3.797-.703 4.812 0 6.734 2.906.938 1.438 1 3.25l-2.61.204q-.421-3.953-5.015-3.953-1.875 0-3.11.609-1.64.797-1.64 2.484 0 1.578 1.781 2.406.735.344 3.141.891 3.344.75 4.562 1.313 3.516 1.609 3.516 5.03 0 1.766-1.016 3.22-.984 1.39-2.625 2.156-1.765.812-3.984.812-5.5 0-7.656-3.28-1.078-1.641-1.125-3.704z\\\"/></g></svg>\",\n      \"logo-zeppelin-opt-1white\": \"<svg width=\\\"352.331\\\" height=\\\"9.234cm\\\" viewBox=\\\"0 0 352.33 349\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><defs><linearGradient id=\\\"a\\\" x1=\\\"188.54\\\" x2=\\\"189.52\\\" y1=\\\"4\\\" y2=\\\"352.9\\\" gradientUnits=\\\"userSpaceOnUse\\\"><stop stop-color=\\\"#006cb8\\\" offset=\\\".093\\\"/><stop stop-color=\\\"#439ec4\\\" offset=\\\".569\\\"/><stop stop-color=\\\"#87d1d1\\\" offset=\\\".838\\\"/></linearGradient></defs><path d=\\\"M117.91 338.15l-32.594-14.651-49.032-54.244-21.564-65.756-.882-9 7.335-69 35.17-61 3.16-3.709 57.922-42.01L187.085 4h5.84l69.66 14.78 57.922 42.01 3.16 3.709 35.17 61 7.335 69-.882 9-21.564 65.756-49.034 54.244-66.141 29.5-78.045-.197z\\\" fill=\\\"url(#a)\\\" transform=\\\"translate(-13.834 -4)\\\"/><g aria-label=\\\"zeppelin\\\" fill=\\\"#fff\\\"><path d=\\\"M22.12 182.12v-4.776l27.745-25.484q-4.7.219-8.305.219H23.763v-4.813h35.638v3.901l-28.154 26.177q4.973-.291 9.308-.291h20.17v5.067zM97.959 170.89l7.62.766q-3.787 11.266-19.166 11.266-10.039 0-15.56-5.032-5.247-4.776-5.247-12.906 0-8.093 5.065-13.089 5.476-5.395 15.332-5.395 9.628 0 14.921 5.323 4.929 4.921 4.929 12.797 0 .546-.046 1.604H73.272q.365 5.104 3.513 8.276 3.514 3.536 9.674 3.536 8.26 0 11.5-7.146zm-24.276-9.552H98.05q-.502-4.375-2.83-6.6-3.513-3.39-9.125-3.39-5.385 0-8.807 2.88-3.24 2.771-3.605 7.11zM114.843 195.46v-48.198h6.753v4.52q4.746-5.286 12.64-5.286 11.773 0 16.336 8.75 2.144 4.193 2.144 9.188 0 11.52-9.354 16.188-4.609 2.297-9.628 2.297-7.119 0-11.5-4.412v16.953zm6.707-30.552q0 5.287 2.465 8.787 3.057 4.338 9.217 4.338 6.297 0 9.446-4.557 2.51-3.61 2.51-9.078 0-5.214-2.51-8.823-3.103-4.448-9.126-4.448-6.07 0-9.355 4.703-2.647 3.828-2.647 9.078zM161.615 195.46v-48.198h6.753v4.52q4.746-5.286 12.64-5.286 11.773 0 16.336 8.75 2.145 4.193 2.145 9.188 0 11.52-9.355 16.188-4.609 2.297-9.628 2.297-7.118 0-11.499-4.412v16.953zm6.708-30.552q0 5.287 2.464 8.787 3.057 4.338 9.217 4.338 6.297 0 9.446-4.557 2.51-3.61 2.51-9.078 0-5.214-2.51-8.823-3.103-4.448-9.126-4.448-6.07 0-9.355 4.703-2.646 3.828-2.646 9.078zM238.275 170.89l7.62.766q-3.786 11.266-19.165 11.266-10.039 0-15.56-5.032-5.247-4.776-5.247-12.906 0-8.093 5.065-13.089 5.476-5.395 15.332-5.395 9.628 0 14.921 5.323 4.929 4.921 4.929 12.797 0 .546-.046 1.604h-32.535q.365 5.104 3.513 8.276 3.514 3.536 9.674 3.536 8.26 0 11.5-7.146zM214 161.338h24.368q-.502-4.375-2.83-6.6-3.513-3.39-9.126-3.39-5.384 0-8.806 2.88-3.24 2.771-3.605 7.11zM255.022 182.12v-48.089h7.392v48.089zM273.87 140.81v-6.781h7.393v6.781zm0 41.307v-34.854h7.393v34.854zM292.532 182.12v-34.854h6.662v4.958q4.837-5.724 13.872-5.724 8.533 0 12.229 4.084 1.643 1.859 2.282 4.375.41 1.604.41 5.724v21.438h-7.392v-21.182q0-6.38-3.924-8.276-2.19-1.058-5.157-1.058-11.59 0-11.59 11.484v19.031z\\\"/></g><g aria-label=\\\"ARCHITECTES\\\" stroke=\\\"#fff\\\" fill=\\\"#fff\\\"><path d=\\\"M74.092 250.13l7.922-20.609h2.937l8.438 20.609h-3.11l-2.406-6.25h-8.61l-2.265 6.25zm5.953-8.469h6.985l-2.141-5.703q-1-2.64-1.469-4.281-.406 2.062-1.11 3.937zM95.606 250.13v-20.609h9.14q2.391 0 3.641.375 1.875.547 2.844 2.14.86 1.407.86 3.11 0 4.813-5.813 5.61 1.094.515 1.64 1.015 1.235 1.125 2.266 2.75l3.594 5.61h-3.438l-2.734-4.282q-.906-1.453-1.516-2.265-1.093-1.485-1.828-1.954-.64-.421-1.25-.562-.422-.094-1.515-.094h-3.172v9.156zm2.719-11.516h5.875q3.484 0 4.531-1.625.547-.844.547-1.844 0-3.36-4.422-3.36h-6.531zM131.076 242.9l2.719.703q-.828 3.266-2.985 5.047-2.234 1.844-5.547 1.844-6.359 0-8.593-5.297-1.094-2.578-1.094-5.531 0-6.656 4.734-9.25 2.266-1.25 5-1.25 3.047 0 5.172 1.547 2.125 1.547 2.969 4.453l-2.688.64q-1.375-4.297-5.515-4.297-4.797 0-6.219 4.188-.64 1.922-.64 3.969 0 5.625 3.14 7.515 1.625.97 3.5.97 4.906 0 6.047-5.25zM137.246 250.13v-20.609h2.719v8.453h10.719v-8.453h2.734v20.609h-2.734v-9.719h-10.72v9.719zM158.416 250.13v-20.609h2.719v20.609zM171.206 250.13v-18.188h-6.797v-2.422h16.344v2.422h-6.828v18.188zM183.606 250.13v-20.609h14.906v2.422h-12.188v6.312h11.406v2.422h-11.406v7.016h12.656v2.437zM217.466 242.9l2.719.703q-.828 3.266-2.985 5.047-2.234 1.844-5.546 1.844-6.36 0-8.594-5.297-1.094-2.578-1.094-5.531 0-6.656 4.734-9.25 2.266-1.25 5-1.25 3.047 0 5.172 1.547 2.125 1.547 2.969 4.453l-2.688.64q-1.374-4.297-5.515-4.297-4.797 0-6.219 4.188-.64 1.922-.64 3.969 0 5.625 3.14 7.515 1.625.97 3.5.97 4.906 0 6.047-5.25zM228.796 250.13v-18.188h-6.797v-2.422h16.344v2.422h-6.828v18.188zM241.206 250.13v-20.609h14.906v2.422h-12.188v6.312h11.406v2.422h-11.406v7.016h12.656v2.437zM259.416 243.51l2.563-.219q.359 3.016 2.937 4.14 1.406.61 3.156.61 3.281 0 4.531-1.734.594-.813.594-1.766 0-1.984-2.422-2.906-.968-.375-3.875-1.047-2.5-.578-3.78-1.25-2.923-1.547-2.923-4.484 0-1.688.953-3.031.938-1.297 2.516-1.954 1.703-.703 3.797-.703 4.812 0 6.734 2.906.938 1.438 1 3.25l-2.61.204q-.421-3.953-5.015-3.953-1.875 0-3.11.609-1.64.797-1.64 2.484 0 1.578 1.781 2.406.735.344 3.141.891 3.344.75 4.562 1.313 3.516 1.609 3.516 5.03 0 1.766-1.016 3.22-.984 1.39-2.625 2.156-1.765.812-3.984.812-5.5 0-7.656-3.28-1.078-1.641-1.125-3.704z\\\"/></g></svg>\",\n      \"skills_architecture-preSVG-opt\": \"<svg width=\\\"562.129\\\" height=\\\"262.001\\\" viewBox=\\\"0 0 562.13 262\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M16.494 258.75c.321-1.788 2.635-18.325 5.143-36.75l4.558-33.5 16.937-16.415v-2.718l-20.38-11.3c-11.209-6.215-20.913-11.63-21.566-12.033L0 145.3 14.432 27.71l-1.15-1.841c-.633-1.013-1.15-2.758-1.15-3.877v-2.035l4.991-2.274 2.004 1.813c2.527 2.287 2.533 3.976.023 6.486l-1.982 1.981-14.17 115.3.817.796c.45.437 9.692 5.769 20.54 11.847l19.723 11.052 5.905-1.181 22.062-20.868 233.42 33.692 15.082-1.753c8.295-.965 16.994-2.028 19.332-2.363l4.25-.61V98.319l-5.125-2.336.313-3.242.312-3.243 4.785-.677-.53-14.967c-.293-8.231-.766-15.202-1.054-15.489s-56.863-5.612-125.72-11.834l-125.2-11.31-5.716 3.277-4.268-4.265.671-2.115.672-2.115 4.977-1.25 4.39 3.925 125.5 11.202c69.024 6.161 126.06 11.183 126.75 11.16l1.25-.042v35l1.25-.021c.687-.011 25.032-7.62 54.1-16.909l52.85-16.888 38.15 26.471c20.981 14.559 38.871 27.23 39.753 28.159l1.605 1.688 10.769 75.356-1.323 1.323-33.327-11.53c-18.33-6.341-35.24-12.212-37.577-13.045s-4.25-1.335-4.25-1.115 12.825 8.1 28.5 17.511 28.502 17.424 28.504 17.806c.01 1.612 5 52.063 5.534 55.944l.584 4.25h30.877v3h-33.063l-.43-1.25c-.237-.687-1.575-13.4-2.974-28.25s-2.77-28.35-3.046-30l-.502-3-55.553-33.5h-1.887c-1.038 0-2.598-.64-3.466-1.423l-1.579-1.422-154.5 18.258v68.372l49 9.492V262h-126v-3h1.39c.764 0 16.733-1.8 35.487-4s34.778-4 35.61-4h1.513v-69.841l-2.75-.566c-1.512-.31-53.037-7.804-114.5-16.654L73.135 147.85 52.16 167.498l-.012 2.628-.013 2.628-2.989 2.48-4.072-1.064-16.13 15.329-4.874 35c-2.68 19.25-4.888 35.562-4.905 36.25l-.03 1.25H15.91zm305.64-2.874l-14.5-2.977-23.5 2.624c-12.925 1.442-23.95 2.78-24.5 2.97-.55.192 16.55.352 38 .355l39 .005-14.5-2.977zm219-72.169c0-2.561-10.046-69.972-10.549-70.785-.423-.684-72.293-50.957-75.862-53.065l-1.09-.643-104.89 33.493-1.33 2.005-1.332 2.005 1.378 77.316 1.589-.44c.874-.244 25.889-3.25 55.589-6.681l54-6.239 2.744-3.672h4.642l2.614 3.6 35 12.13c19.25 6.672 35.562 12.161 36.25 12.2l1.25.07zm-128.39-25.904c-.278-1.816-1.447-19.46-2.6-39.209l-2.094-35.906.794-.754c1.208-1.147 22.344-7.218 22.965-6.597.48.48 5.698 61.71 6.456 75.76l.292 5.403-8.46 1.663c-4.652.915-10.347 1.951-12.654 2.303l-4.194.64zm15.894-2.163l7-1.279-.228-3.43c-.688-10.372-5.536-72.461-5.67-72.626-.089-.108-4.309 1.017-9.38 2.5l-9.218 2.696.011 3c.006 1.65.9 16.95 1.985 34s1.98 32.483 1.987 34.295l.013 3.295 3.25-.586c1.787-.322 6.4-1.162 10.25-1.865zm-252.5-13.351c-80.575-4.662-146.63-8.6-146.78-8.75-.57-.55 8.144-83.064 8.86-83.895l.736-.856L180.794 60.4c78.014 6.387 143.98 11.876 146.59 12.2l4.75.588V151l-4.75-.117c-2.612-.065-70.675-3.932-151.25-8.594zm153-30.79V75l-2.25.016c-1.237.008-66.052-5.227-144.03-11.634S40.878 51.929 40.638 52.169c-.663.662-8.616 78.045-8.077 78.584.44.44 279.96 16.875 291.33 17.129l5.25.117zm48.701-80.18C353.75 16.165 333.921 3.93 333.774 4.133c-.146.202.076 10.268.494 22.368l.76 22-1.825 1.834-.504-1.417c-.277-.78-.854-11.39-1.283-23.579l-.779-22.162-37 20.038c-20.35 11.021-37.562 20.255-38.25 20.52l-1.25.48.005-1.357.005-1.357 38.426-20.75C313.707 9.338 331.476 0 332.06 0c1.653 0 91.416 56.513 91.855 57.83l.39 1.17-1.333-.062c-.734-.034-21.043-12.462-45.132-27.618z\\\" fill=\\\"#2ea9c7\\\"/></svg>\",\n      \"skills_paysage-preSVG-opt\": \"<svg width=\\\"262.998\\\" height=\\\"237.868\\\" viewBox=\\\"0 0 263 237.87\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M0 236.791c0-.65 13.603-1 38.809-1 29.526 0 39.192-.299 40.412-1.25 1.254-.978 1.754-4.104 2.295-14.358l.692-13.108-2.954-2.103c-2.933-2.088-2.987-2.09-7.883-.23-3.926 1.492-5.893 1.694-9.664.989-2.605-.487-5.519-1.304-6.477-1.817-.958-.513-3.764-.75-6.236-.528-4.014.36-5.401-.157-12.994-4.846l-8.5-5.249-.22-8c-.12-4.4-.718-11.902-1.327-16.672-1.261-9.878-.548-12.377 3.987-13.957 3.465-1.208 4.887-4.242 4.291-9.16-.252-2.083-.14-7.188.25-11.344l.708-7.557 4.655-1.947c3.604-1.507 5.715-3.42 9.34-8.465 5.554-7.726 11.696-12.655 17.617-14.136 4.067-1.017 4.717-.855 12.012 3.004l7.711 4.08 4.989-1.862c3.54-1.322 6.906-3.84 11.596-8.674 3.634-3.746 7.009-6.785 7.5-6.754.49.032 2.805 2.372 5.142 5.2 3.63 4.391 4.25 5.81 4.25 9.71v4.568l5.75 2.284c3.163 1.256 9.013 4.997 13 8.312l7.25 6.028v8.053c0 6.457.42 8.731 2.119 11.48l2.118 3.427-4.38 4.662 4.536 3.791c2.495 2.086 5.227 5.519 6.072 7.63 1.786 4.464 2.025 10.468.437 10.997-.604.201-1.336 2.474-1.626 5.051-.388 3.444-1.145 5.09-2.857 6.211-1.28.84-5.161 4.061-8.624 7.16-7.362 6.588-9 7.736-14.069 9.85-3.672 1.533-3.795 1.515-4.6-.662-.783-2.113-1.306-2.22-9.437-1.94-8.525.295-8.615.273-9.257-2.286-.667-2.655-2.574-3.189-7.08-1.98-3.21.862-6.7 16.535-5.75 25.817.666 6.5.791 6.74 4.521 8.643 3.668 1.87 5.867 1.945 50.106 1.697l46.27-.26.305-3.659c.338-4.05.437-3.997-10.305-5.435-2.75-.368-7.745-1.507-11.1-2.532l-6.102-1.863-.643-13.756-.643-13.756 18.312-96.939C195.039 40.628 203.11.252 203.78.03c.63-.21 1.392.662 1.693 1.939.3 1.276 8.199 47.996 17.55 103.82s17.23 102.51 17.507 103.74c.39 1.741-1.001 3.81-6.265 9.315l-6.766 7.076-22.6 1.174.6 8.195 28.75.266c18.314.169 28.75.628 28.75 1.265 0 .65-10.416.907-29.75.734l-29.75-.265-.59-12.274 23.767-1.428 11.587-12.955-16.802-100.17c-9.241-55.095-17.068-100.49-17.392-100.88-.324-.39-8.53 41.91-18.238 94-17.589 94.394-17.646 94.744-16.967 104.71.375 5.5.996 10.5 1.381 11.111.938 1.487 10.778 4.131 18.487 4.968 8.318.902 9.168 1.706 8.392 7.922l-.625 5-47.5.28c-46.758.275-47.572.246-52.13-1.865-4.297-1.99-4.674-2.469-5.25-6.67-1.054-7.694-.7-13.157 1.447-22.303l2.068-8.806 4.982-1.068c6.814-1.461 6.854-1.452 8.014 1.877l1.027 2.946 8.399-.593c7.844-.553 8.45-.456 9.171 1.467l.772 2.06 4.162-2.163c2.288-1.19 7.8-5.313 12.248-9.163 6.47-5.6 8.21-7.699 8.7-10.5.338-1.925 1.254-4.52 2.036-5.766 2.27-3.618.108-9.556-5.723-15.721-2.708-2.864-4.923-5.577-4.923-6.03s.725-1.627 1.611-2.606c1.488-1.644 1.45-2.042-.5-5.197-1.678-2.716-2.113-5.033-2.12-11.298l-.007-7.882-6.074-4.843c-3.34-2.664-9.186-6.218-12.992-7.899L117 112.494l-.038-5.1c-.032-4.319-.555-5.706-3.407-9.039l-3.37-3.937-2.842 3.36a5489.58 5489.58 0 0 1-3.843 4.538c-1.957 2.304-8.065 6.2-12.271 7.826l-4.272 1.651-8.073-4.059c-6.407-3.222-8.724-3.924-11.229-3.406-5.132 1.061-10.625 5.487-16.502 13.295-3.911 5.196-6.618 7.771-9.298 8.843-2.132.854-4.091 2.453-4.493 3.67-.392 1.185-.75 6.656-.796 12.156-.046 5.5-.472 10.608-.947 11.352-.475.744-2.448 2.014-4.384 2.823l-3.52 1.471.636 8.177c.35 4.498.64 12.007.643 16.688l.006 8.511 8.181 4.903c7.246 4.343 8.768 4.88 13.302 4.696 3.045-.123 6.316.416 8.069 1.33 3.727 1.944 7.53 1.96 12.102.05 5.058-2.114 7.38-1.845 11.022 1.277l3.176 2.723-1.015 14.5c-.787 11.253-1.373 14.78-2.617 15.75-2.047 1.596-81.221 1.84-81.221.25z\\\" fill=\\\"#2ea9c7\\\"/></svg>\",\n      \"skills_urbanisme-preSVG-opt\": \"<svg width=\\\"166.843\\\" height=\\\"159.999\\\" viewBox=\\\"0 0 166.84 160\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M0 158.52v-1.482l46.57-.536-16.206-68c-8.913-37.4-15.904-68.31-15.535-68.688.369-.378 14.371-4.116 31.115-8.305l30.444-7.617 2.725-3.89h4.816l2.063 3.855-.614 1.6c-.338.88-1.399 2.02-2.358 2.534l-1.744.933-3.516-2.57-30.13 7.437c-16.572 4.09-30.218 7.51-30.325 7.602-.107.09 7.15 30.977 16.127 68.637s16.126 68.81 15.886 69.222l-.436.75H0zm66.5.963c.55-.198 22.6-5.606 49-12.017s48.087-11.738 48.194-11.838c.15-.14-21.028-89.868-24.086-102.06l-.645-2.57-2.731-.028c-1.502-.015-9.815 1.639-18.473 3.675-8.658 2.036-15.994 3.45-16.303 3.14-.61-.608-8.39-32.487-8.43-34.538-.047-2.332 2.45-1.252 21.306 9.214l18.831 10.453 5.45-1.09 1.253 1.512c.69.83 1.443 3.232 1.674 5.336.23 2.104 6.019 27.225 12.862 55.825l12.443 52-.71.737c-.39.405-20.942 5.69-45.671 11.745L75.5 159.987l-5-.074c-2.75-.04-4.55-.236-4-.434zM119 31.703l13.5-3.25v-2.904l-17.805-9.887C93.74 4.025 95.545 3.697 99.108 18.498a3442.25 3442.25 0 0 1 3.41 14.25l.52 2.25 1.231-.022c.677-.012 7.306-1.485 14.731-3.273zm-50.58 103.47l-3.08-1.936-2.597-6.27.589-3.627.589-3.627 2.215-2.358c2.596-2.763 7.51-4.336 11.289-3.614l2.673.511 5.628 5.628 1.249 6.245-1.35 3.188c-.742 1.753-2.293 4.028-3.446 5.056l-2.098 1.868-8.581.873zm11.035-1.794c2.112-.81 4.545-5.578 4.545-8.906v-2.627L78.154 116h-2.627c-6.22 0-9.527 3.39-9.527 9.768v3.603l4.348 4.63h3.744c2.06 0 4.473-.28 5.363-.622zm14.911-9.596c-.887-1.435-.822-1.456 19.036-6.246 20.79-5.015 20.932-5.038 20.368-3.347l-.397 1.19-38.442 9.319zM60.4 107.6l-3.4-3.4v-9.4l6.8-6.8h9.046l6.14 5.166.843 3.167.843 3.167-1.634 6-6.07 5.5H63.8zm11.481.292l3.18-1.109 1.47-2.842c1.843-3.565 1.846-5.31.016-8.85l-1.453-2.81-5.977-2.475-6.934 2.289-3.313 6.981 2.292 6.945 2.669 1.45c3.276 1.779 4.04 1.819 8.05.42zm15.652-13.838l-.585-.946 3.718-1.027c15.376-4.245 25.339-5.753 23.079-3.493-1.985 1.985-25.351 6.857-26.211 5.466zM58.5 84.589c-3.784-1.66-6.333-4.499-7.366-8.202l-.806-2.887.814-3.056c.448-1.68 1.985-4.155 3.417-5.5L57.16 62.5h11.003L74 69.03v8.815l-2.544 3.023c-2.298 2.732-3.615 3.458-8.456 4.663-.825.205-2.85-.22-4.5-.943zm8.409-3.042l2.81-1.453 2.396-5.787-.642-2.559c-.353-1.407-1.694-3.546-2.978-4.753L66.158 64.8h-7.59l-5.785 6.474 1.15 7.226 5.179 4.5h2.493c1.372 0 3.759-.654 5.304-1.453zm13.64-16.467l-.675-1.094 1.313-.477c.722-.262 8.963-2.296 18.313-4.52 9.35-2.224 17.788-4.286 18.75-4.584l1.75-.54v2.921l-17.25 4.13c-9.488 2.272-18.212 4.384-19.387 4.694l-2.137.564z\\\" fill=\\\"#2ea9c7\\\"/></svg>\",\n      \"zeppelin-footer\": \"<svg width=\\\"275.792\\\" height=\\\"3.54cm\\\" viewBox=\\\"0 0 275.79 133.791\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M159.76 133.73l.42-1.25 5.031-18.766.927-.927L221.73 90.98h17.752l-6.61 3.602c.415.333.53.497-.716 1.29l3.295-1.881 5.202-3.03 15.614.019h13.245l-1.01-3.5-1.362-4.916-1.36-5.453 2.5-.835v-.947c0 .947.073.13 0 .947v-.947l-4.8-4.046-1.142-3.722 2.441-1.523 4.262-.644 4.263-.96c.966-.677 0 0 1.014-.75l-4.52-1.254-4.519-.677.012-.637.012-.636 4.84-8.466-1.902-1.176-4.994-9.856 6.175-28.193-.9-.899-38.165 9.154L167.805.98 74.778.946 19.328 23.48 1.104 59.083l.572 1.492.573 1.491 20.47 28.636 51.667 24.703 1.62 2.075 6.537 17.5h76.797z\\\" fill=\\\"#f9fafb\\\" stroke=\\\"#2ea9c7\\\" stroke-width=\\\"1.89\\\"/><path d=\\\"M240.167 92.288L261.38 80.62c5.91-3.812 8.547-3.272 5.303-6.426l-5.017 3.092-8.5 4.972c-14.256 8.33 0 0-14.174 8.04l-7.451 4.107.483.781.483.782 1.382-.024zM268 50.367l-.333-1.665-23.926-14.624-1.766 1.09 2.692 2.454 23.666 14.41z\\\" fill=\\\"#2ea9c7\\\"/><path d=\\\"M272.648 63.832l-7.696-1.885-.026 3.979z\\\" fill=\\\"#2ea9c7\\\" stroke=\\\"#2ea9c7\\\"/><path d=\\\"M223.313 75.947l41.2-8.827 2.1-1.298v-4.495l-85.5-15.887-61.814-.556-75.686 23.394.002.581.002.582 74.495 15.517 64-.184 41.2-8.827zm-139.44-.67l-32.241-6.689.481-.383 32.684-10.132 33.312-10.656 60.376-.043 43.378 8.295 42.75 7.771v1.138l-40.25 8.602-42.84 9.194-31.41.092-31.038.092-35.202-7.28z\\\" fill=\\\"#2ea9c7\\\"/></svg>\",\n      \"zeppelin_logo-icon-opt\": \"<svg width=\\\"276\\\" height=\\\"276\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M117 139h74.113M106.748 5L43.846 25.129 5.741 15.926l-.412.414-.414.412 6.262 28.59-2.225 4.078-2.227 4.08-2.496 2.7 2.375 4.15 2.373 4.15.024 1.274-9.04 1.355.522.842.52.842 9.996 1.375.457.74.459.742-2.258 7.356L6 77.866v2.92l1.463.562 1.46.56-1.96 5.704L5 93.312V95h26.338l5.283 2.983 5.283 2.98.725-1.172.724-1.174-1.035-.343-1.035-.346-1.89-1.432-1.893-1.431 7.648-.033L52.798 95l54.703 21.31 1.125 1.095 1.123 1.096 4.53 19 .42.75h-.001l.42.75h.94c27.985-.156 52.605 0 75.646 0l6.797-18.5 12.5-6.262 12.5-6.264 28-13.609 21.945-30.707-8.973-17.398-8.972-17.396-1.092-.923-1.092-.922-53.682-22.018h-46.443z\\\" fill=\\\"#fff\\\" stroke=\\\"#fff\\\"/><path d=\\\"M114.7 138.25l-.42-.75-4.53-19-2.249-2.19L52.8 95l-15.298.064 3.784 2.864 2.07.69-1.45 2.346L31.34 95H5.002v-1.687l3.924-11.405-2.924-1.122v-2.92l3.656 1.16 2.258-7.356L11 70.188l-9.996-1.375-1.04-1.684 9.038-1.356-.024-1.273-4.747-8.3 2.496-2.7 4.451-8.158-6.262-28.589.827-.826 38.106 9.203L106.75 5.001h92.885l53.68 22.017 2.185 1.847 17.944 34.794-21.944 30.709-28 13.61-25 12.524-6.797 18.5h-2.703v-.8l7.201-18.7 1.735-2.128 51.754-24.834 20.694-28.947-16.67-32.584-2.324-1.93-53.77-22.077h-88.746l-64.835 20.8L8.5 19.243l-.38.307 5.895 26.5-3.285 5.014.781.78 20.99-12.78 1.5-.063-.048 2.5-18.452 10.838-7.415 4.633 6.959 14.653-3.044 8.627v.585L33.201 93h21.63l54.67 21.27 2.194 2.23 5.322 21L117 139h-1.882l-.42-.75zM25.474 91.67l-1.972-1.33-11.661-6.58-1.566 1.74-2.142 6.421 16.369.672 2.945.407z\\\" fill=\\\"#20a4c3\\\" stroke=\\\"#20a4c3\\\"/></svg>\",\n      \"zeppelin_logo-opt-2\": \"<svg width=\\\"276\\\" height=\\\"35.8mm\\\" viewBox=\\\"0 0 276 135.31\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M118.466 135.744h74.113m-84.365-134L45.312 21.873 7.207 12.669l-.412.415-.414.412 6.261 28.59-2.224 4.078-2.227 4.08-2.496 2.7 2.375 4.15 2.373 4.15.012.637.012.636-9.04 1.356.522.842.52.841 9.996 1.375.457.74.459.743-2.258 7.355-3.656-1.16v2.92l1.462.563 1.461.56-1.96 5.703-1.963 5.701v1.688h26.338l5.283 2.982 5.283 2.98.725-1.171.724-1.174-1.035-.344-1.035-.345-1.89-1.432-1.893-1.432 7.648-.033 7.648-.031 54.703 21.309 1.125 1.096 1.123 1.095 4.532 19 .42.75h-.002l.42.75h.94c27.985-.155 52.605 0 75.646 0l6.797-18.5 12.5-6.261 12.5-6.264 28-13.609 21.945-30.707-8.973-17.398-8.973-17.396-1.091-.924-1.092-.922L201.1 1.745h-46.443z\\\" fill=\\\"#fff\\\" stroke=\\\"#2ea9c7\\\" stroke-width=\\\"2.268\\\"/><g transform=\\\"translate(-10.534 -3.256)\\\" style=\\\"shape-inside:url(#rect535);white-space:pre\\\" aria-label=\\\"zeppelin architectes\\\"><path d=\\\"M66.531 57.475v-3.248l11.461-14.299-.112.635-.523-.822.411.224H66.419v-2.24h13.925v3.248L68.845 55.234l.112-.56.56.822-.41-.262h11.796v2.24zM94.108 58.109q-2.539 0-4.405-.859-1.867-.896-3.062-2.352-1.194-1.493-1.792-3.322-.56-1.83-.56-3.771v-.523q0-1.904.56-3.733.598-1.83 1.792-3.285 1.195-1.456 2.987-2.315 1.83-.896 4.256-.896 3.099 0 5.152 1.381 2.09 1.382 3.136 3.547 1.045 2.128 1.045 4.592v1.456H85.558v-2.165h15.717l-.709 1.082q0-2.202-.784-3.845-.747-1.68-2.24-2.613-1.456-.97-3.659-.97-2.314 0-3.845 1.082-1.53 1.082-2.315 2.874-.746 1.792-.746 4.07 0 2.24.746 4.106.784 1.83 2.352 2.912 1.606 1.083 4.032 1.083 2.576 0 4.182-1.157 1.605-1.195 1.978-2.8h2.614q-.374 1.979-1.568 3.435-1.195 1.418-3.024 2.202-1.83.784-4.182.784zM108.59 64.941V37.725h2.24V46.2l-.672.074q.15-2.986 1.27-5.04 1.157-2.053 3.098-3.098 1.979-1.083 4.405-1.083 2.166 0 3.92.859 1.792.821 3.024 2.277 1.27 1.419 1.904 3.285.672 1.83.672 3.846v.522q0 2.016-.672 3.883-.672 1.83-1.941 3.285-1.232 1.419-3.024 2.278-1.755.82-3.957.82-2.352 0-4.331-1.044-1.941-1.083-3.173-3.174-1.195-2.09-1.307-5.152l1.344 2.8v13.403zm9.893-9.296q2.24 0 3.846-1.045 1.605-1.083 2.464-2.912.858-1.867.858-4.107 0-2.315-.896-4.107-.858-1.829-2.464-2.874-1.605-1.083-3.808-1.083-2.016 0-3.658.896-1.643.896-2.614 2.539-.933 1.605-.933 3.808v1.829q0 2.09.933 3.696.97 1.568 2.614 2.464 1.642.896 3.658.896zM134.13 64.941V37.725h2.24V46.2l-.672.074q.15-2.986 1.27-5.04 1.157-2.053 3.098-3.098 1.979-1.083 4.405-1.083 2.166 0 3.92.859 1.792.821 3.024 2.277 1.27 1.419 1.904 3.285.672 1.83.672 3.846v.522q0 2.016-.672 3.883-.672 1.83-1.941 3.285-1.232 1.419-3.024 2.278-1.755.82-3.957.82-2.352 0-4.331-1.044-1.941-1.083-3.173-3.174-1.195-2.09-1.307-5.152l1.344 2.8v13.403zm9.893-9.296q2.24 0 3.846-1.045 1.605-1.083 2.464-2.912.858-1.867.858-4.107 0-2.315-.896-4.107-.858-1.829-2.464-2.874-1.605-1.083-3.808-1.083-2.016 0-3.658.896-1.643.896-2.614 2.539-.933 1.605-.933 3.808v1.829q0 2.09.933 3.696.97 1.568 2.614 2.464 1.642.896 3.658.896zM167.92 58.109q-2.539 0-4.405-.859-1.867-.896-3.062-2.352-1.194-1.493-1.792-3.322-.56-1.83-.56-3.771v-.523q0-1.904.56-3.733.598-1.83 1.792-3.285 1.195-1.456 2.987-2.315 1.83-.896 4.256-.896 3.099 0 5.152 1.381 2.09 1.382 3.136 3.547 1.045 2.128 1.045 4.592v1.456H159.37v-2.165h15.717l-.709 1.082q0-2.202-.784-3.845-.747-1.68-2.24-2.613-1.456-.97-3.659-.97-2.314 0-3.845 1.082-1.53 1.082-2.315 2.874-.746 1.792-.746 4.07 0 2.24.746 4.106.784 1.83 2.352 2.912 1.606 1.083 4.032 1.083 2.576 0 4.182-1.157 1.605-1.195 1.978-2.8h2.614q-.374 1.979-1.568 3.435-1.195 1.418-3.024 2.202t-4.182.784zM182.59 57.475V30.222h2.8v27.253zm-2.875-24.976v-2.277h5.675v2.277zM193.68 57.475V37.726h2.763v19.749zm-3.173-17.509v-2.24h5.936v2.24zm3.77-5.899q-1.008 0-1.53-.522-.486-.56-.486-1.382 0-.821.486-1.344.522-.56 1.53-.56t1.494.56q.485.523.485 1.344 0 .822-.485 1.382-.486.522-1.494.522zM203.79 57.475V37.726h2.24v8.288h-.448q0-2.763.821-4.741.822-1.979 2.464-3.062 1.643-1.082 4.144-1.082h.112q3.734 0 5.563 2.352 1.83 2.314 1.83 6.533v11.461h-2.763V45.416q0-2.576-1.42-4.144-1.418-1.568-3.956-1.568-2.614 0-4.22 1.643-1.567 1.605-1.567 4.256v11.872zM137.59 88.197v-3.392h-.256v-4.01q0-1.26-.661-1.92-.662-.683-2.048-.683-.64 0-1.302.021-.64.021-1.237.064-.576.021-1.024.064v-1.408q.47-.043.96-.085.49-.043 1.003-.043.533-.021 1.024-.021 1.728 0 2.773.426 1.067.427 1.557 1.344.491.896.491 2.39v7.253zm-3.819.299q-1.194 0-2.112-.427-.917-.427-1.429-1.237-.49-.811-.49-1.963 0-1.13.511-1.92.534-.79 1.515-1.195 1.003-.426 2.41-.426h3.307v1.216h-3.413q-1.344 0-2.07.661-.703.64-.703 1.685 0 1.067.747 1.707.746.619 2.026.619.79 0 1.515-.278.725-.298 1.216-.981.49-.704.533-1.92l.47.661q-.086 1.259-.598 2.112-.512.832-1.386 1.259-.875.427-2.048.427zM142.86 88.197V76.912h1.28v4.715h-.128q0-2.475 1.088-3.648 1.088-1.195 3.413-1.195h.363v1.45h-.661q-1.835 0-2.795.96-.96.94-.96 2.774v6.23zM156.07 88.559q-1.43 0-2.496-.49-1.045-.513-1.75-1.366-.703-.875-1.066-1.92-.341-1.045-.341-2.112v-.299q0-1.088.341-2.112.363-1.045 1.067-1.877.704-.853 1.749-1.344 1.067-.512 2.453-.512 1.408 0 2.496.512 1.11.512 1.792 1.45.683.94.811 2.22h-1.536q-.192-1.174-1.11-1.942-.895-.79-2.453-.79-1.344 0-2.24.62-.874.597-1.322 1.642-.448 1.024-.448 2.283 0 1.237.448 2.304.448 1.045 1.344 1.685.896.619 2.261.619 1.045 0 1.813-.363.79-.384 1.259-1.024.49-.64.576-1.408h1.536q-.085 1.28-.81 2.24-.705.939-1.835 1.472-1.131.512-2.54.512zM164.2 88.197V72.624h1.6v8.81l-.47.363q0-1.578.449-2.752.469-1.173 1.386-1.813.939-.661 2.347-.661h.085q2.048 0 3.094 1.344 1.066 1.344 1.066 3.733v6.55h-1.578v-6.891q0-1.515-.832-2.39-.832-.874-2.24-.874-1.515 0-2.411.981-.896.96-.896 2.539v6.634zM178.34 88.197V76.912h1.579v11.285zm-1.813-10.005v-1.28h3.392v1.28zm2.154-3.37q-.576 0-.874-.3-.278-.32-.278-.789 0-.469.278-.768.298-.32.874-.32t.854.32q.277.299.277.768 0 .47-.277.79-.278.298-.854.298zM188.22 88.325q-1.173 0-2.027-.341-.853-.342-1.322-1.152-.47-.832-.47-2.219V73.349h1.536v11.499q0 .981.534 1.515.533.512 1.514.512h2.027v1.45zm-5.845-10.197v-1.216h7.637v1.216zM197.72 88.559q-1.45 0-2.517-.49-1.067-.513-1.75-1.345-.682-.853-1.024-1.898-.32-1.046-.32-2.155v-.299q0-1.088.32-2.133.342-1.045 1.024-1.877.683-.832 1.707-1.323 1.045-.512 2.432-.512 1.77 0 2.944.79 1.195.789 1.792 2.026.597 1.216.597 2.624v.832h-10.09v-1.237h8.98l-.405.618q0-1.258-.448-2.197-.426-.96-1.28-1.493-.832-.555-2.09-.555-1.323 0-2.198.619-.874.618-1.322 1.642-.427 1.024-.427 2.326 0 1.28.427 2.346.448 1.046 1.344 1.664.917.62 2.304.62 1.472 0 2.389-.662.917-.683 1.13-1.6h1.494q-.213 1.13-.896 1.962-.683.811-1.728 1.26-1.045.447-2.39.447zM210.76 88.559q-1.43 0-2.496-.49-1.045-.513-1.75-1.366-.703-.875-1.066-1.92-.341-1.045-.341-2.112v-.299q0-1.088.341-2.112.363-1.045 1.067-1.877.704-.853 1.749-1.344 1.067-.512 2.453-.512 1.408 0 2.496.512 1.11.512 1.792 1.45.683.94.811 2.22h-1.536q-.192-1.174-1.11-1.942-.895-.79-2.453-.79-1.344 0-2.24.62-.874.597-1.322 1.642-.448 1.024-.448 2.283 0 1.237.448 2.304.448 1.045 1.344 1.685.896.619 2.261.619 1.045 0 1.813-.363.79-.384 1.259-1.024.49-.64.576-1.408h1.536q-.085 1.28-.81 2.24-.705.939-1.835 1.472-1.131.512-2.54.512zM222.98 88.325q-1.173 0-2.027-.341-.853-.342-1.322-1.152-.47-.832-.47-2.219V73.349h1.536v11.499q0 .981.534 1.515.533.512 1.514.512h2.027v1.45zm-5.845-10.197v-1.216h7.637v1.216zM232.48 88.559q-1.45 0-2.517-.49-1.067-.513-1.75-1.345-.682-.853-1.024-1.898-.32-1.046-.32-2.155v-.299q0-1.088.32-2.133.342-1.045 1.024-1.877.683-.832 1.707-1.323 1.045-.512 2.432-.512 1.77 0 2.944.79 1.195.789 1.792 2.026.597 1.216.597 2.624v.832h-10.09v-1.237h8.98l-.405.618q0-1.258-.448-2.197-.426-.96-1.28-1.493-.832-.555-2.09-.555-1.323 0-2.198.619-.874.618-1.322 1.642-.427 1.024-.427 2.326 0 1.28.427 2.346.448 1.046 1.344 1.664.917.62 2.304.62 1.472 0 2.389-.662.917-.683 1.13-1.6h1.494q-.213 1.13-.896 1.962-.683.811-1.728 1.26t-2.39.447zM244.32 88.517q-2.176 0-3.35-.939-1.173-.96-1.194-2.56h1.493q.043.811.726 1.472.704.662 2.325.662 1.515 0 2.261-.619.768-.64.768-1.536 0-.832-.64-1.28-.618-.47-1.813-.597l-1.28-.128q-1.536-.171-2.496-.939-.939-.79-.939-2.155 0-1.002.512-1.749.512-.747 1.43-1.152.938-.427 2.197-.427 1.813 0 2.944.854 1.152.853 1.173 2.432h-1.493q-.021-.811-.683-1.366-.661-.554-1.941-.554-1.323 0-1.984.576-.64.576-.64 1.408 0 .704.49 1.173.491.448 1.537.555l1.28.128q1.706.192 2.773.981 1.088.79 1.088 2.261 0 1.003-.576 1.814-.555.789-1.579 1.237-1.024.448-2.39.448z\\\"/></g></svg>\",\n      \"zeppelin_logo-opt-2_1\": \"<svg width=\\\"276\\\" height=\\\"35.5mm\\\" viewBox=\\\"0 0 276 134.18\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M118.466 135.744h74.113m-84.365-134L45.312 21.873 7.207 12.669l-.412.415-.414.412 6.261 28.59-2.224 4.078-2.227 4.08-2.496 2.7 2.375 4.15 2.373 4.15.024 1.273-9.04 1.356.522.842.52.841 9.996 1.375.457.74.459.743-2.258 7.355-3.656-1.16v2.92l1.462.562 1.461.561-1.96 5.703-1.963 5.701v1.688h26.338l5.283 2.982 5.283 2.98.725-1.171.724-1.174-1.035-.344-1.035-.345-1.89-1.432-1.893-1.432 7.648-.033 7.648-.031 54.703 21.309 1.125 1.096 1.123 1.095 4.532 19 .42.75h-.002l.42.75h.94c27.985-.155 52.605 0 75.646 0l6.797-18.5 12.5-6.261 12.5-6.264 28-13.61 21.945-30.706-8.973-17.398-8.973-17.396-1.091-.924-1.092-.922L201.1 1.745h-46.443z\\\" fill=\\\"#fff\\\" stroke=\\\"#2ea9c7\\\" stroke-width=\\\"2.268\\\"/><g transform=\\\"translate(-10.534 -3.256)\\\" style=\\\"shape-inside:url(#rect535);white-space:pre\\\" aria-label=\\\"zeppelin architectes\\\"><path d=\\\"M66.531 57.475v-3.248l11.461-14.299-.112.635-.523-.822.411.224H66.419v-2.24h13.925v3.248L68.845 55.234l.112-.56.56.822-.41-.262h11.796v2.24zM94.108 58.109q-2.539 0-4.405-.859-1.867-.896-3.062-2.352-1.194-1.493-1.792-3.322-.56-1.83-.56-3.771v-.523q0-1.904.56-3.733.598-1.83 1.792-3.285 1.195-1.456 2.987-2.315 1.83-.896 4.256-.896 3.099 0 5.152 1.381 2.09 1.382 3.136 3.547 1.045 2.128 1.045 4.592v1.456H85.558v-2.165h15.717l-.709 1.082q0-2.202-.784-3.845-.747-1.68-2.24-2.613-1.456-.97-3.659-.97-2.314 0-3.845 1.082-1.53 1.082-2.315 2.874-.746 1.792-.746 4.07 0 2.24.746 4.106.784 1.83 2.352 2.912 1.606 1.083 4.032 1.083 2.576 0 4.182-1.157 1.605-1.195 1.978-2.8h2.614q-.374 1.979-1.568 3.435-1.195 1.418-3.024 2.202t-4.182.784zM108.59 64.941V37.725h2.24V46.2l-.672.074q.15-2.986 1.27-5.04 1.157-2.053 3.098-3.098 1.979-1.083 4.405-1.083 2.166 0 3.92.859 1.792.821 3.024 2.277 1.27 1.419 1.904 3.285.672 1.83.672 3.846v.522q0 2.016-.672 3.883-.672 1.83-1.941 3.285-1.232 1.419-3.024 2.278-1.755.82-3.957.82-2.352 0-4.331-1.044-1.941-1.083-3.173-3.174-1.195-2.09-1.307-5.152l1.344 2.8v13.403zm9.893-9.296q2.24 0 3.846-1.045 1.605-1.083 2.464-2.912.858-1.867.858-4.107 0-2.315-.896-4.107-.858-1.829-2.464-2.874-1.605-1.083-3.808-1.083-2.016 0-3.658.896t-2.614 2.539q-.933 1.605-.933 3.808v1.829q0 2.09.933 3.696.97 1.568 2.614 2.464 1.642.896 3.658.896zM134.13 64.941V37.725h2.24V46.2l-.672.074q.15-2.986 1.27-5.04 1.157-2.053 3.098-3.098 1.979-1.083 4.405-1.083 2.166 0 3.92.859 1.792.821 3.024 2.277 1.27 1.419 1.904 3.285.672 1.83.672 3.846v.522q0 2.016-.672 3.883-.672 1.83-1.941 3.285-1.232 1.419-3.024 2.278-1.755.82-3.957.82-2.352 0-4.331-1.044-1.941-1.083-3.173-3.174-1.195-2.09-1.307-5.152l1.344 2.8v13.403zm9.893-9.296q2.24 0 3.846-1.045 1.605-1.083 2.464-2.912.858-1.867.858-4.107 0-2.315-.896-4.107-.858-1.829-2.464-2.874-1.605-1.083-3.808-1.083-2.016 0-3.658.896t-2.614 2.539q-.933 1.605-.933 3.808v1.829q0 2.09.933 3.696.97 1.568 2.614 2.464 1.642.896 3.658.896zM167.92 58.109q-2.539 0-4.405-.859-1.867-.896-3.062-2.352-1.194-1.493-1.792-3.322-.56-1.83-.56-3.771v-.523q0-1.904.56-3.733.598-1.83 1.792-3.285 1.195-1.456 2.987-2.315 1.83-.896 4.256-.896 3.099 0 5.152 1.381 2.09 1.382 3.136 3.547 1.045 2.128 1.045 4.592v1.456H159.37v-2.165h15.717l-.709 1.082q0-2.202-.784-3.845-.747-1.68-2.24-2.613-1.456-.97-3.659-.97-2.314 0-3.845 1.082-1.53 1.082-2.315 2.874-.746 1.792-.746 4.07 0 2.24.746 4.106.784 1.83 2.352 2.912 1.606 1.083 4.032 1.083 2.576 0 4.182-1.157 1.605-1.195 1.978-2.8h2.614q-.374 1.979-1.568 3.435-1.195 1.418-3.024 2.202t-4.182.784zM182.59 57.475V30.222h2.8v27.253zm-2.875-24.976v-2.277h5.675v2.277zM193.68 57.475V37.726h2.763v19.749zm-3.173-17.509v-2.24h5.936v2.24zm3.77-5.899q-1.008 0-1.53-.522-.486-.56-.486-1.382 0-.821.486-1.344.522-.56 1.53-.56t1.494.56q.485.523.485 1.344t-.485 1.382q-.486.522-1.494.522zM203.79 57.475V37.726h2.24v8.288h-.448q0-2.763.821-4.741.822-1.979 2.464-3.062 1.643-1.082 4.144-1.082h.112q3.734 0 5.563 2.352 1.83 2.314 1.83 6.533v11.461h-2.763V45.416q0-2.576-1.42-4.144t-3.956-1.568q-2.614 0-4.22 1.643-1.567 1.605-1.567 4.256v11.872zM137.59 88.197v-3.392h-.256v-4.01q0-1.26-.661-1.92-.662-.683-2.048-.683-.64 0-1.302.021-.64.021-1.237.064-.576.021-1.024.064v-1.408q.47-.043.96-.085.49-.043 1.003-.043.533-.021 1.024-.021 1.728 0 2.773.426 1.067.427 1.557 1.344.491.896.491 2.39v7.253zm-3.819.299q-1.194 0-2.112-.427-.917-.427-1.429-1.237-.49-.811-.49-1.963 0-1.13.511-1.92.534-.79 1.515-1.195 1.003-.426 2.41-.426h3.307v1.216h-3.413q-1.344 0-2.07.661-.703.64-.703 1.685 0 1.067.747 1.707.746.619 2.026.619.79 0 1.515-.278.725-.298 1.216-.981.49-.704.533-1.92l.47.661q-.086 1.259-.598 2.112-.512.832-1.386 1.259-.875.427-2.048.427zM142.86 88.197V76.912h1.28v4.715h-.128q0-2.475 1.088-3.648 1.088-1.195 3.413-1.195h.363v1.45h-.661q-1.835 0-2.795.96-.96.94-.96 2.774v6.23zM156.07 88.559q-1.43 0-2.496-.49-1.045-.513-1.75-1.366-.703-.875-1.066-1.92-.341-1.045-.341-2.112v-.299q0-1.088.341-2.112.363-1.045 1.067-1.877.704-.853 1.749-1.344 1.067-.512 2.453-.512 1.408 0 2.496.512 1.11.512 1.792 1.45.683.94.811 2.22h-1.536q-.192-1.174-1.11-1.942-.895-.79-2.453-.79-1.344 0-2.24.62-.874.597-1.322 1.642-.448 1.024-.448 2.283 0 1.237.448 2.304.448 1.045 1.344 1.685.896.619 2.261.619 1.045 0 1.813-.363.79-.384 1.259-1.024.49-.64.576-1.408h1.536q-.085 1.28-.81 2.24-.705.939-1.835 1.472-1.131.512-2.54.512zM164.2 88.197V72.624h1.6v8.81l-.47.363q0-1.578.449-2.752.469-1.173 1.386-1.813.939-.661 2.347-.661h.085q2.048 0 3.094 1.344 1.066 1.344 1.066 3.733v6.55h-1.578v-6.891q0-1.515-.832-2.39-.832-.874-2.24-.874-1.515 0-2.411.981-.896.96-.896 2.539v6.634zM178.34 88.197V76.912h1.579v11.285zm-1.813-10.005v-1.28h3.392v1.28zm2.154-3.37q-.576 0-.874-.3-.278-.32-.278-.789t.278-.768q.298-.32.874-.32t.854.32q.277.299.277.768t-.277.79q-.278.298-.854.298zM188.22 88.325q-1.173 0-2.027-.341-.853-.342-1.322-1.152-.47-.832-.47-2.219V73.349h1.536v11.499q0 .981.534 1.515.533.512 1.514.512h2.027v1.45zm-5.845-10.197v-1.216h7.637v1.216zM197.72 88.559q-1.45 0-2.517-.49-1.067-.513-1.75-1.345-.682-.853-1.024-1.898-.32-1.046-.32-2.155v-.299q0-1.088.32-2.133.342-1.045 1.024-1.877.683-.832 1.707-1.323 1.045-.512 2.432-.512 1.77 0 2.944.79 1.195.789 1.792 2.026.597 1.216.597 2.624v.832h-10.09v-1.237h8.98l-.405.618q0-1.258-.448-2.197-.426-.96-1.28-1.493-.832-.555-2.09-.555-1.323 0-2.198.619-.874.618-1.322 1.642-.427 1.024-.427 2.326 0 1.28.427 2.346.448 1.046 1.344 1.664.917.62 2.304.62 1.472 0 2.389-.662.917-.683 1.13-1.6h1.494q-.213 1.13-.896 1.962-.683.811-1.728 1.26-1.045.447-2.39.447zM210.76 88.559q-1.43 0-2.496-.49-1.045-.513-1.75-1.366-.703-.875-1.066-1.92-.341-1.045-.341-2.112v-.299q0-1.088.341-2.112.363-1.045 1.067-1.877.704-.853 1.749-1.344 1.067-.512 2.453-.512 1.408 0 2.496.512 1.11.512 1.792 1.45.683.94.811 2.22h-1.536q-.192-1.174-1.11-1.942-.895-.79-2.453-.79-1.344 0-2.24.62-.874.597-1.322 1.642-.448 1.024-.448 2.283 0 1.237.448 2.304.448 1.045 1.344 1.685.896.619 2.261.619 1.045 0 1.813-.363.79-.384 1.259-1.024.49-.64.576-1.408h1.536q-.085 1.28-.81 2.24-.705.939-1.835 1.472-1.131.512-2.54.512zM222.98 88.325q-1.173 0-2.027-.341-.853-.342-1.322-1.152-.47-.832-.47-2.219V73.349h1.536v11.499q0 .981.534 1.515.533.512 1.514.512h2.027v1.45zm-5.845-10.197v-1.216h7.637v1.216zM232.48 88.559q-1.45 0-2.517-.49-1.067-.513-1.75-1.345-.682-.853-1.024-1.898-.32-1.046-.32-2.155v-.299q0-1.088.32-2.133.342-1.045 1.024-1.877.683-.832 1.707-1.323 1.045-.512 2.432-.512 1.77 0 2.944.79 1.195.789 1.792 2.026.597 1.216.597 2.624v.832h-10.09v-1.237h8.98l-.405.618q0-1.258-.448-2.197-.426-.96-1.28-1.493-.832-.555-2.09-.555-1.323 0-2.198.619-.874.618-1.322 1.642-.427 1.024-.427 2.326 0 1.28.427 2.346.448 1.046 1.344 1.664.917.62 2.304.62 1.472 0 2.389-.662.917-.683 1.13-1.6h1.494q-.213 1.13-.896 1.962-.683.811-1.728 1.26t-2.39.447zM244.32 88.517q-2.176 0-3.35-.939-1.173-.96-1.194-2.56h1.493q.043.811.726 1.472.704.662 2.325.662 1.515 0 2.261-.619.768-.64.768-1.536 0-.832-.64-1.28-.618-.47-1.813-.597l-1.28-.128q-1.536-.171-2.496-.939-.939-.79-.939-2.155 0-1.002.512-1.749.512-.747 1.43-1.152.938-.427 2.197-.427 1.813 0 2.944.854 1.152.853 1.173 2.432h-1.493q-.021-.811-.683-1.366-.661-.554-1.941-.554-1.323 0-1.984.576-.64.576-.64 1.408 0 .704.49 1.173.491.448 1.537.555l1.28.128q1.706.192 2.773.981 1.088.79 1.088 2.261 0 1.003-.576 1.814-.555.789-1.579 1.237-1.024.448-2.39.448z\\\"/></g><g fill=\\\"none\\\" stroke=\\\"#2ea9c7\\\"><path d=\\\"M35.454 38.073L5.694 54.647\\\" stroke-width=\\\"3.609\\\"/><path d=\\\"M7.466 76.07l36.629 20.465\\\" stroke-width=\\\"4.743\\\"/></g></svg>\",\n      \"zeppelin_logo-opt-2_2\": \"<svg width=\\\"7.297cm\\\" height=\\\"3.545cm\\\" viewBox=\\\"0 0 275.79 133.98\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M116.117 133.73l-.42-1.25-5.03-18.766-.927-.927L54.15 90.98H36.396l6.61 3.602c-.414.333-.53.497.716 1.29l-3.295-1.881-5.202-3.03-15.614.019H6.367l1.01-3.5 1.362-4.916L10.1 77.11l-2.5-.835v-.947c0 .947-.074.13 0 .947v-.947l4.799-4.046 1.142-3.722-2.44-1.523-4.263-.644-4.263-.96c-.966-.677 0 0-1.014-.75l4.52-1.254 4.52-.677-.025-1.273-4.84-8.466 1.902-1.176 4.994-9.856L6.457 12.79l.9-.899 38.165 9.154L108.073.98 201.1.946l55.45 22.534 18.224 35.603-.572 1.492-.573 1.491-20.47 28.636-51.667 24.703-1.62 2.075-6.537 17.5h-76.797z\\\" fill=\\\"#fff\\\" stroke=\\\"#2ea9c7\\\" stroke-width=\\\"1.89\\\"/><path d=\\\"M35.711 92.288L14.497 80.62c-5.91-3.812-8.547-3.272-5.303-6.426l5.018 3.092 8.5 4.972c14.256 8.33 0 0 14.174 8.04l7.45 4.107-.966 1.563-1.382-.024zM7.878 50.367l.333-1.665 23.926-14.624 1.766 1.09-2.692 2.454-23.666 14.41z\\\" fill=\\\"#2ea9c7\\\"/><path d=\\\"M3.23 63.832l7.696-1.885.026 3.979z\\\" fill=\\\"#2ea9c7\\\" stroke=\\\"#2ea9c7\\\"/><g transform=\\\"translate(-4.534 -2.113)\\\" style=\\\"shape-inside:url(#rect535);white-space:pre\\\" aria-label=\\\"zeppelin architectes\\\"><path d=\\\"M66.531 57.475v-3.248l11.461-14.299-.112.635-.523-.822.411.224H66.419v-2.24h13.925v3.248L68.845 55.234l.112-.56.56.822-.41-.262h11.796v2.24zM94.108 58.109q-2.539 0-4.405-.859-1.867-.896-3.062-2.352-1.194-1.493-1.792-3.322-.56-1.83-.56-3.771v-.523q0-1.904.56-3.733.598-1.83 1.792-3.285 1.195-1.456 2.987-2.315 1.83-.896 4.256-.896 3.099 0 5.152 1.381 2.09 1.382 3.136 3.547 1.045 2.128 1.045 4.592v1.456H85.558v-2.165h15.717l-.709 1.082q0-2.202-.784-3.845-.747-1.68-2.24-2.613-1.456-.97-3.659-.97-2.314 0-3.845 1.082-1.53 1.082-2.315 2.874-.746 1.792-.746 4.07 0 2.24.746 4.106.784 1.83 2.352 2.912 1.606 1.083 4.032 1.083 2.576 0 4.182-1.157 1.605-1.195 1.978-2.8h2.614q-.374 1.979-1.568 3.435-1.195 1.418-3.024 2.202t-4.182.784zM108.59 64.941V37.725h2.24V46.2l-.672.074q.15-2.986 1.27-5.04 1.157-2.053 3.098-3.098 1.979-1.083 4.405-1.083 2.166 0 3.92.859 1.792.821 3.024 2.277 1.27 1.419 1.904 3.285.672 1.83.672 3.846v.522q0 2.016-.672 3.883-.672 1.83-1.941 3.285-1.232 1.419-3.024 2.278-1.755.82-3.957.82-2.352 0-4.331-1.044-1.941-1.083-3.173-3.174-1.195-2.09-1.307-5.152l1.344 2.8v13.403zm9.893-9.296q2.24 0 3.846-1.045 1.605-1.083 2.464-2.912.858-1.867.858-4.107 0-2.315-.896-4.107-.858-1.829-2.464-2.874-1.605-1.083-3.808-1.083-2.016 0-3.658.896t-2.614 2.539q-.933 1.605-.933 3.808v1.829q0 2.09.933 3.696.97 1.568 2.614 2.464 1.642.896 3.658.896zM134.13 64.941V37.725h2.24V46.2l-.672.074q.15-2.986 1.27-5.04 1.157-2.053 3.098-3.098 1.979-1.083 4.405-1.083 2.166 0 3.92.859 1.792.821 3.024 2.277 1.27 1.419 1.904 3.285.672 1.83.672 3.846v.522q0 2.016-.672 3.883-.672 1.83-1.941 3.285-1.232 1.419-3.024 2.278-1.755.82-3.957.82-2.352 0-4.331-1.044-1.941-1.083-3.173-3.174-1.195-2.09-1.307-5.152l1.344 2.8v13.403zm9.893-9.296q2.24 0 3.846-1.045 1.605-1.083 2.464-2.912.858-1.867.858-4.107 0-2.315-.896-4.107-.858-1.829-2.464-2.874-1.605-1.083-3.808-1.083-2.016 0-3.658.896t-2.614 2.539q-.933 1.605-.933 3.808v1.829q0 2.09.933 3.696.97 1.568 2.614 2.464 1.642.896 3.658.896zM167.92 58.109q-2.539 0-4.405-.859-1.867-.896-3.062-2.352-1.194-1.493-1.792-3.322-.56-1.83-.56-3.771v-.523q0-1.904.56-3.733.598-1.83 1.792-3.285 1.195-1.456 2.987-2.315 1.83-.896 4.256-.896 3.099 0 5.152 1.381 2.09 1.382 3.136 3.547 1.045 2.128 1.045 4.592v1.456H159.37v-2.165h15.717l-.709 1.082q0-2.202-.784-3.845-.747-1.68-2.24-2.613-1.456-.97-3.659-.97-2.314 0-3.845 1.082-1.53 1.082-2.315 2.874-.746 1.792-.746 4.07 0 2.24.746 4.106.784 1.83 2.352 2.912 1.606 1.083 4.032 1.083 2.576 0 4.182-1.157 1.605-1.195 1.978-2.8h2.614q-.374 1.979-1.568 3.435-1.195 1.418-3.024 2.202t-4.182.784zM182.59 57.475V30.222h2.8v27.253zm-2.875-24.976v-2.277h5.675v2.277zM193.68 57.475V37.726h2.763v19.749zm-3.173-17.509v-2.24h5.936v2.24zm3.77-5.899q-1.008 0-1.53-.522-.486-.56-.486-1.382 0-.821.486-1.344.522-.56 1.53-.56t1.494.56q.485.523.485 1.344t-.485 1.382q-.486.522-1.494.522zM203.79 57.475V37.726h2.24v8.288h-.448q0-2.763.821-4.741.822-1.979 2.464-3.062 1.643-1.082 4.144-1.082h.112q3.734 0 5.563 2.352 1.83 2.314 1.83 6.533v11.461h-2.763V45.416q0-2.576-1.42-4.144t-3.956-1.568q-2.614 0-4.22 1.643-1.567 1.605-1.567 4.256v11.872zM137.59 88.197v-3.392h-.256v-4.01q0-1.26-.661-1.92-.662-.683-2.048-.683-.64 0-1.302.021-.64.021-1.237.064-.576.021-1.024.064v-1.408q.47-.043.96-.085.49-.043 1.003-.043.533-.021 1.024-.021 1.728 0 2.773.426 1.067.427 1.557 1.344.491.896.491 2.39v7.253zm-3.819.299q-1.194 0-2.112-.427-.917-.427-1.429-1.237-.49-.811-.49-1.963 0-1.13.511-1.92.534-.79 1.515-1.195 1.003-.426 2.41-.426h3.307v1.216h-3.413q-1.344 0-2.07.661-.703.64-.703 1.685 0 1.067.747 1.707.746.619 2.026.619.79 0 1.515-.278.725-.298 1.216-.981.49-.704.533-1.92l.47.661q-.086 1.259-.598 2.112-.512.832-1.386 1.259-.875.427-2.048.427zM142.86 88.197V76.912h1.28v4.715h-.128q0-2.475 1.088-3.648 1.088-1.195 3.413-1.195h.363v1.45h-.661q-1.835 0-2.795.96-.96.94-.96 2.774v6.23zM156.07 88.559q-1.43 0-2.496-.49-1.045-.513-1.75-1.366-.703-.875-1.066-1.92-.341-1.045-.341-2.112v-.299q0-1.088.341-2.112.363-1.045 1.067-1.877.704-.853 1.749-1.344 1.067-.512 2.453-.512 1.408 0 2.496.512 1.11.512 1.792 1.45.683.94.811 2.22h-1.536q-.192-1.174-1.11-1.942-.895-.79-2.453-.79-1.344 0-2.24.62-.874.597-1.322 1.642-.448 1.024-.448 2.283 0 1.237.448 2.304.448 1.045 1.344 1.685.896.619 2.261.619 1.045 0 1.813-.363.79-.384 1.259-1.024.49-.64.576-1.408h1.536q-.085 1.28-.81 2.24-.705.939-1.835 1.472-1.131.512-2.54.512zM164.2 88.197V72.624h1.6v8.81l-.47.363q0-1.578.449-2.752.469-1.173 1.386-1.813.939-.661 2.347-.661h.085q2.048 0 3.094 1.344 1.066 1.344 1.066 3.733v6.55h-1.578v-6.891q0-1.515-.832-2.39-.832-.874-2.24-.874-1.515 0-2.411.981-.896.96-.896 2.539v6.634zM178.34 88.197V76.912h1.579v11.285zm-1.813-10.005v-1.28h3.392v1.28zm2.154-3.37q-.576 0-.874-.3-.278-.32-.278-.789t.278-.768q.298-.32.874-.32t.854.32q.277.299.277.768t-.277.79q-.278.298-.854.298zM188.22 88.325q-1.173 0-2.027-.341-.853-.342-1.322-1.152-.47-.832-.47-2.219V73.349h1.536v11.499q0 .981.534 1.515.533.512 1.514.512h2.027v1.45zm-5.845-10.197v-1.216h7.637v1.216zM197.72 88.559q-1.45 0-2.517-.49-1.067-.513-1.75-1.345-.682-.853-1.024-1.898-.32-1.046-.32-2.155v-.299q0-1.088.32-2.133.342-1.045 1.024-1.877.683-.832 1.707-1.323 1.045-.512 2.432-.512 1.77 0 2.944.79 1.195.789 1.792 2.026.597 1.216.597 2.624v.832h-10.09v-1.237h8.98l-.405.618q0-1.258-.448-2.197-.426-.96-1.28-1.493-.832-.555-2.09-.555-1.323 0-2.198.619-.874.618-1.322 1.642-.427 1.024-.427 2.326 0 1.28.427 2.346.448 1.046 1.344 1.664.917.62 2.304.62 1.472 0 2.389-.662.917-.683 1.13-1.6h1.494q-.213 1.13-.896 1.962-.683.811-1.728 1.26-1.045.447-2.39.447zM210.76 88.559q-1.43 0-2.496-.49-1.045-.513-1.75-1.366-.703-.875-1.066-1.92-.341-1.045-.341-2.112v-.299q0-1.088.341-2.112.363-1.045 1.067-1.877.704-.853 1.749-1.344 1.067-.512 2.453-.512 1.408 0 2.496.512 1.11.512 1.792 1.45.683.94.811 2.22h-1.536q-.192-1.174-1.11-1.942-.895-.79-2.453-.79-1.344 0-2.24.62-.874.597-1.322 1.642-.448 1.024-.448 2.283 0 1.237.448 2.304.448 1.045 1.344 1.685.896.619 2.261.619 1.045 0 1.813-.363.79-.384 1.259-1.024.49-.64.576-1.408h1.536q-.085 1.28-.81 2.24-.705.939-1.835 1.472-1.131.512-2.54.512zM222.98 88.325q-1.173 0-2.027-.341-.853-.342-1.322-1.152-.47-.832-.47-2.219V73.349h1.536v11.499q0 .981.534 1.515.533.512 1.514.512h2.027v1.45zm-5.845-10.197v-1.216h7.637v1.216zM232.48 88.559q-1.45 0-2.517-.49-1.067-.513-1.75-1.345-.682-.853-1.024-1.898-.32-1.046-.32-2.155v-.299q0-1.088.32-2.133.342-1.045 1.024-1.877.683-.832 1.707-1.323 1.045-.512 2.432-.512 1.77 0 2.944.79 1.195.789 1.792 2.026.597 1.216.597 2.624v.832h-10.09v-1.237h8.98l-.405.618q0-1.258-.448-2.197-.426-.96-1.28-1.493-.832-.555-2.09-.555-1.323 0-2.198.619-.874.618-1.322 1.642-.427 1.024-.427 2.326 0 1.28.427 2.346.448 1.046 1.344 1.664.917.62 2.304.62 1.472 0 2.389-.662.917-.683 1.13-1.6h1.494q-.213 1.13-.896 1.962-.683.811-1.728 1.26t-2.39.447zM244.32 88.517q-2.176 0-3.35-.939-1.173-.96-1.194-2.56h1.493q.043.811.726 1.472.704.662 2.325.662 1.515 0 2.261-.619.768-.64.768-1.536 0-.832-.64-1.28-.618-.47-1.813-.597l-1.28-.128q-1.536-.171-2.496-.939-.939-.79-.939-2.155 0-1.002.512-1.749.512-.747 1.43-1.152.938-.427 2.197-.427 1.813 0 2.944.854 1.152.853 1.173 2.432h-1.493q-.021-.811-.683-1.366-.661-.554-1.941-.554-1.323 0-1.984.576-.64.576-.64 1.408 0 .704.49 1.173.491.448 1.537.555l1.28.128q1.706.192 2.773.981 1.088.79 1.088 2.261 0 1.003-.576 1.814-.555.789-1.579 1.237-1.024.448-2.39.448z\\\"/></g></svg>\",\n      \"zeppelin_logo-opt\": \"<svg width=\\\"276\\\" height=\\\"35.8mm\\\" viewBox=\\\"0 0 276 135.31\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M118.466 135.744h74.113m-84.365-134L45.312 21.873 7.207 12.669l-.412.415-.414.412 6.261 28.59-2.224 4.078-2.227 4.08-2.496 2.7 2.375 4.15 2.373 4.15.012.637.012.636-9.04 1.356.522.842.52.841 9.996 1.375.457.74.459.743-2.258 7.355-3.656-1.16v2.92l1.462.563 1.461.56-1.96 5.703-1.963 5.701v1.688h26.338l5.283 2.982 5.283 2.98.725-1.171.724-1.174-1.035-.344-1.035-.345-1.89-1.432-1.893-1.432 7.648-.033 7.648-.031 54.703 21.309 1.125 1.096 1.123 1.095 4.532 19 .42.75h-.002l.42.75h.94c27.985-.155 52.605 0 75.646 0l6.797-18.5 12.5-6.261 12.5-6.264 28-13.609 21.945-30.707-8.973-17.398-8.973-17.396-1.091-.924-1.092-.922L201.1 1.745h-46.443z\\\" fill=\\\"#fff\\\" stroke=\\\"#fff\\\"/><path d=\\\"M116.166 134.994l-.42-.75-2.265-9.5-2.266-9.5-2.248-2.191-54.702-21.31-15.298.064 3.784 2.865 2.07.69-1.45 2.345-10.565-5.963H6.468v-1.687l3.924-11.405-2.924-1.122v-2.92l3.656 1.16 2.258-7.356-.917-1.483-9.995-1.374-1.04-1.685 9.038-1.355-.012-.637-.012-.636-4.747-8.3 2.496-2.7 4.451-8.158-6.262-28.59.826-.826 38.106 9.204 62.902-20.13h92.886l53.68 22.018 1.093.923 1.092.923 17.944 34.794-21.944 30.71-28 13.61-25 12.523-6.797 18.5h-2.703v-.799l7.201-18.7 1.735-2.129 51.754-24.834 20.694-28.947-16.67-32.584-2.324-1.929-53.77-22.078h-88.746l-64.835 20.8-35.54-8.558-.38.306 5.895 26.5-3.285 5.014.78.781 20.99-12.78 1.5-.063-.047 2.5-18.452 10.838-7.415 4.633 6.959 14.653-3.044 8.627v.584l21.2 12.164h21.63l54.67 21.27 2.194 2.23 5.321 21-.016 1.5h-1.882l-.419-.75zM26.94 88.414l-1.973-1.33-11.66-6.58-1.567 1.74-2.141 6.42 16.369.672 2.945.407z\\\" fill=\\\"#20a4c3\\\" stroke=\\\"#20a4c3\\\"/><g transform=\\\"translate(-10.534 -3.256)\\\" style=\\\"shape-inside:url(#rect535);white-space:pre\\\" aria-label=\\\"zeppelin architectes\\\"><path d=\\\"M66.531 57.475v-3.248l11.461-14.299-.112.635-.523-.822.411.224H66.419v-2.24h13.925v3.248L68.845 55.234l.112-.56.56.822-.41-.262h11.796v2.24zM94.108 58.109q-2.539 0-4.405-.859-1.867-.896-3.062-2.352-1.194-1.493-1.792-3.322-.56-1.83-.56-3.771v-.523q0-1.904.56-3.733.598-1.83 1.792-3.285 1.195-1.456 2.987-2.315 1.83-.896 4.256-.896 3.099 0 5.152 1.381 2.09 1.382 3.136 3.547 1.045 2.128 1.045 4.592v1.456H85.558v-2.165h15.717l-.709 1.082q0-2.202-.784-3.845-.747-1.68-2.24-2.613-1.456-.97-3.659-.97-2.314 0-3.845 1.082-1.53 1.082-2.315 2.874-.746 1.792-.746 4.07 0 2.24.746 4.106.784 1.83 2.352 2.912 1.606 1.083 4.032 1.083 2.576 0 4.182-1.157 1.605-1.195 1.978-2.8h2.614q-.374 1.979-1.568 3.435-1.195 1.418-3.024 2.202-1.83.784-4.182.784zM108.59 64.941V37.725h2.24V46.2l-.672.074q.15-2.986 1.27-5.04 1.157-2.053 3.098-3.098 1.979-1.083 4.405-1.083 2.166 0 3.92.859 1.792.821 3.024 2.277 1.27 1.419 1.904 3.285.672 1.83.672 3.846v.522q0 2.016-.672 3.883-.672 1.83-1.941 3.285-1.232 1.419-3.024 2.278-1.755.82-3.957.82-2.352 0-4.331-1.044-1.941-1.083-3.173-3.174-1.195-2.09-1.307-5.152l1.344 2.8v13.403zm9.893-9.296q2.24 0 3.846-1.045 1.605-1.083 2.464-2.912.858-1.867.858-4.107 0-2.315-.896-4.107-.858-1.829-2.464-2.874-1.605-1.083-3.808-1.083-2.016 0-3.658.896-1.643.896-2.614 2.539-.933 1.605-.933 3.808v1.829q0 2.09.933 3.696.97 1.568 2.614 2.464 1.642.896 3.658.896zM134.13 64.941V37.725h2.24V46.2l-.672.074q.15-2.986 1.27-5.04 1.157-2.053 3.098-3.098 1.979-1.083 4.405-1.083 2.166 0 3.92.859 1.792.821 3.024 2.277 1.27 1.419 1.904 3.285.672 1.83.672 3.846v.522q0 2.016-.672 3.883-.672 1.83-1.941 3.285-1.232 1.419-3.024 2.278-1.755.82-3.957.82-2.352 0-4.331-1.044-1.941-1.083-3.173-3.174-1.195-2.09-1.307-5.152l1.344 2.8v13.403zm9.893-9.296q2.24 0 3.846-1.045 1.605-1.083 2.464-2.912.858-1.867.858-4.107 0-2.315-.896-4.107-.858-1.829-2.464-2.874-1.605-1.083-3.808-1.083-2.016 0-3.658.896-1.643.896-2.614 2.539-.933 1.605-.933 3.808v1.829q0 2.09.933 3.696.97 1.568 2.614 2.464 1.642.896 3.658.896zM167.92 58.109q-2.539 0-4.405-.859-1.867-.896-3.062-2.352-1.194-1.493-1.792-3.322-.56-1.83-.56-3.771v-.523q0-1.904.56-3.733.598-1.83 1.792-3.285 1.195-1.456 2.987-2.315 1.83-.896 4.256-.896 3.099 0 5.152 1.381 2.09 1.382 3.136 3.547 1.045 2.128 1.045 4.592v1.456H159.37v-2.165h15.717l-.709 1.082q0-2.202-.784-3.845-.747-1.68-2.24-2.613-1.456-.97-3.659-.97-2.314 0-3.845 1.082-1.53 1.082-2.315 2.874-.746 1.792-.746 4.07 0 2.24.746 4.106.784 1.83 2.352 2.912 1.606 1.083 4.032 1.083 2.576 0 4.182-1.157 1.605-1.195 1.978-2.8h2.614q-.374 1.979-1.568 3.435-1.195 1.418-3.024 2.202t-4.182.784zM182.59 57.475V30.222h2.8v27.253zm-2.875-24.976v-2.277h5.675v2.277zM193.68 57.475V37.726h2.763v19.749zm-3.173-17.509v-2.24h5.936v2.24zm3.77-5.899q-1.008 0-1.53-.522-.486-.56-.486-1.382 0-.821.486-1.344.522-.56 1.53-.56t1.494.56q.485.523.485 1.344 0 .822-.485 1.382-.486.522-1.494.522zM203.79 57.475V37.726h2.24v8.288h-.448q0-2.763.821-4.741.822-1.979 2.464-3.062 1.643-1.082 4.144-1.082h.112q3.734 0 5.563 2.352 1.83 2.314 1.83 6.533v11.461h-2.763V45.416q0-2.576-1.42-4.144-1.418-1.568-3.956-1.568-2.614 0-4.22 1.643-1.567 1.605-1.567 4.256v11.872zM137.59 88.197v-3.392h-.256v-4.01q0-1.26-.661-1.92-.662-.683-2.048-.683-.64 0-1.302.021-.64.021-1.237.064-.576.021-1.024.064v-1.408q.47-.043.96-.085.49-.043 1.003-.043.533-.021 1.024-.021 1.728 0 2.773.426 1.067.427 1.557 1.344.491.896.491 2.39v7.253zm-3.819.299q-1.194 0-2.112-.427-.917-.427-1.429-1.237-.49-.811-.49-1.963 0-1.13.511-1.92.534-.79 1.515-1.195 1.003-.426 2.41-.426h3.307v1.216h-3.413q-1.344 0-2.07.661-.703.64-.703 1.685 0 1.067.747 1.707.746.619 2.026.619.79 0 1.515-.278.725-.298 1.216-.981.49-.704.533-1.92l.47.661q-.086 1.259-.598 2.112-.512.832-1.386 1.259-.875.427-2.048.427zM142.86 88.197V76.912h1.28v4.715h-.128q0-2.475 1.088-3.648 1.088-1.195 3.413-1.195h.363v1.45h-.661q-1.835 0-2.795.96-.96.94-.96 2.774v6.23zM156.07 88.559q-1.43 0-2.496-.49-1.045-.513-1.75-1.366-.703-.875-1.066-1.92-.341-1.045-.341-2.112v-.299q0-1.088.341-2.112.363-1.045 1.067-1.877.704-.853 1.749-1.344 1.067-.512 2.453-.512 1.408 0 2.496.512 1.11.512 1.792 1.45.683.94.811 2.22h-1.536q-.192-1.174-1.11-1.942-.895-.79-2.453-.79-1.344 0-2.24.62-.874.597-1.322 1.642-.448 1.024-.448 2.283 0 1.237.448 2.304.448 1.045 1.344 1.685.896.619 2.261.619 1.045 0 1.813-.363.79-.384 1.259-1.024.49-.64.576-1.408h1.536q-.085 1.28-.81 2.24-.705.939-1.835 1.472-1.131.512-2.54.512zM164.2 88.197V72.624h1.6v8.81l-.47.363q0-1.578.449-2.752.469-1.173 1.386-1.813.939-.661 2.347-.661h.085q2.048 0 3.094 1.344 1.066 1.344 1.066 3.733v6.55h-1.578v-6.891q0-1.515-.832-2.39-.832-.874-2.24-.874-1.515 0-2.411.981-.896.96-.896 2.539v6.634zM178.34 88.197V76.912h1.579v11.285zm-1.813-10.005v-1.28h3.392v1.28zm2.154-3.37q-.576 0-.874-.3-.278-.32-.278-.789 0-.469.278-.768.298-.32.874-.32t.854.32q.277.299.277.768 0 .47-.277.79-.278.298-.854.298zM188.22 88.325q-1.173 0-2.027-.341-.853-.342-1.322-1.152-.47-.832-.47-2.219V73.349h1.536v11.499q0 .981.534 1.515.533.512 1.514.512h2.027v1.45zm-5.845-10.197v-1.216h7.637v1.216zM197.72 88.559q-1.45 0-2.517-.49-1.067-.513-1.75-1.345-.682-.853-1.024-1.898-.32-1.046-.32-2.155v-.299q0-1.088.32-2.133.342-1.045 1.024-1.877.683-.832 1.707-1.323 1.045-.512 2.432-.512 1.77 0 2.944.79 1.195.789 1.792 2.026.597 1.216.597 2.624v.832h-10.09v-1.237h8.98l-.405.618q0-1.258-.448-2.197-.426-.96-1.28-1.493-.832-.555-2.09-.555-1.323 0-2.198.619-.874.618-1.322 1.642-.427 1.024-.427 2.326 0 1.28.427 2.346.448 1.046 1.344 1.664.917.62 2.304.62 1.472 0 2.389-.662.917-.683 1.13-1.6h1.494q-.213 1.13-.896 1.962-.683.811-1.728 1.26-1.045.447-2.39.447zM210.76 88.559q-1.43 0-2.496-.49-1.045-.513-1.75-1.366-.703-.875-1.066-1.92-.341-1.045-.341-2.112v-.299q0-1.088.341-2.112.363-1.045 1.067-1.877.704-.853 1.749-1.344 1.067-.512 2.453-.512 1.408 0 2.496.512 1.11.512 1.792 1.45.683.94.811 2.22h-1.536q-.192-1.174-1.11-1.942-.895-.79-2.453-.79-1.344 0-2.24.62-.874.597-1.322 1.642-.448 1.024-.448 2.283 0 1.237.448 2.304.448 1.045 1.344 1.685.896.619 2.261.619 1.045 0 1.813-.363.79-.384 1.259-1.024.49-.64.576-1.408h1.536q-.085 1.28-.81 2.24-.705.939-1.835 1.472-1.131.512-2.54.512zM222.98 88.325q-1.173 0-2.027-.341-.853-.342-1.322-1.152-.47-.832-.47-2.219V73.349h1.536v11.499q0 .981.534 1.515.533.512 1.514.512h2.027v1.45zm-5.845-10.197v-1.216h7.637v1.216zM232.48 88.559q-1.45 0-2.517-.49-1.067-.513-1.75-1.345-.682-.853-1.024-1.898-.32-1.046-.32-2.155v-.299q0-1.088.32-2.133.342-1.045 1.024-1.877.683-.832 1.707-1.323 1.045-.512 2.432-.512 1.77 0 2.944.79 1.195.789 1.792 2.026.597 1.216.597 2.624v.832h-10.09v-1.237h8.98l-.405.618q0-1.258-.448-2.197-.426-.96-1.28-1.493-.832-.555-2.09-.555-1.323 0-2.198.619-.874.618-1.322 1.642-.427 1.024-.427 2.326 0 1.28.427 2.346.448 1.046 1.344 1.664.917.62 2.304.62 1.472 0 2.389-.662.917-.683 1.13-1.6h1.494q-.213 1.13-.896 1.962-.683.811-1.728 1.26t-2.39.447zM244.32 88.517q-2.176 0-3.35-.939-1.173-.96-1.194-2.56h1.493q.043.811.726 1.472.704.662 2.325.662 1.515 0 2.261-.619.768-.64.768-1.536 0-.832-.64-1.28-.618-.47-1.813-.597l-1.28-.128q-1.536-.171-2.496-.939-.939-.79-.939-2.155 0-1.002.512-1.749.512-.747 1.43-1.152.938-.427 2.197-.427 1.813 0 2.944.854 1.152.853 1.173 2.432h-1.493q-.021-.811-.683-1.366-.661-.554-1.941-.554-1.323 0-1.984.576-.64.576-.64 1.408 0 .704.49 1.173.491.448 1.537.555l1.28.128q1.706.192 2.773.981 1.088.79 1.088 2.261 0 1.003-.576 1.814-.555.789-1.579 1.237-1.024.448-2.39.448z\\\"/></g></svg>\"\n    }\n  };\n});","define(\"zeppelin-architectes/templates/actualites\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{!-- {{page-title \"Zeppelin Architectes\"}} --}}\n  L'actualité\n  {{outlet}}\n  */\n  {\n    \"id\": \"GhtIUab6\",\n    \"block\": \"[[[1,\\\"L'actualité\\\\n\\\"],[46,[28,[37,1],null,null],null,null,null]],[],false,[\\\"component\\\",\\\"-outlet\\\"]]\",\n    \"moduleName\": \"zeppelin-architectes/templates/actualites.hbs\",\n    \"isStrictMode\": false\n  });\n});","define(\"zeppelin-architectes/templates/application\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{!-- {{head-layout}} --}}\n  {{!-- {{page-title \"Zeppelin Architectes\"}} --}}\n  <HeadLayout />\n  <Header />\n  <div class=\"page-container\">\n  {{outlet}}\n  </div>\n  <Footer />\n  */\n  {\n    \"id\": \"otimon5r\",\n    \"block\": \"[[[8,[39,0],null,null,null],[1,\\\"\\\\n\\\"],[8,[39,1],null,null,null],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"page-container\\\"],[12],[1,\\\"\\\\n\\\"],[46,[28,[37,4],null,null],null,null,null],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[8,[39,5],null,null,null]],[],false,[\\\"head-layout\\\",\\\"header\\\",\\\"div\\\",\\\"component\\\",\\\"-outlet\\\",\\\"footer\\\"]]\",\n    \"moduleName\": \"zeppelin-architectes/templates/application.hbs\",\n    \"isStrictMode\": false\n  });\n});","define(\"zeppelin-architectes/templates/equipe\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{!-- {{page-title \"Zeppelin Architectes\"}} --}}\n  L'équipe\n  {{outlet}}\n  */\n  {\n    \"id\": \"qEqkLfIm\",\n    \"block\": \"[[[1,\\\"L'équipe\\\\n\\\"],[46,[28,[37,1],null,null],null,null,null]],[],false,[\\\"component\\\",\\\"-outlet\\\"]]\",\n    \"moduleName\": \"zeppelin-architectes/templates/equipe.hbs\",\n    \"isStrictMode\": false\n  });\n});","define(\"zeppelin-architectes/templates/equipe/index\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{!-- {{page-title \"Zeppelin Architectes\"}} --}}\n  sfv\n  <div class=\"realisations__container\">\n  \n    <h1 class=\"realisations__title\">\n      La concertation pour la construction\n    </h1>\n  \n    <div class=\"realisations__intro\">\n      Les lieux de vie sont animés par les habitants et sont dynamisés par les maîtrises d’ouvrage.<br />\n      Le dialogue révèle les aspirations et les contraintes.<br />\n      Zeppelin orchestre toutes les appétences et fédère l’ensemble des intervenants pour des solutions ergonomiques, une qualité de vie et le respect de l’environnement.\n    </div>\n  \n    <div class=\"realisations__highlights\">\n      <div class=\"realisations__architecture\">\n  \n        <div class=\"realisations__column-header\">\n          {{inline-svg \"svg/skills_paysage-preSVG-opt.svg\" class=\"title-icon\"}}\n          <h2>Architecture</h2>\n        </div>\n  \n        <div class=\"realisations__column-item\">\n        </div>\n      </div>\n  \n      <div class=\"realisations__urbanisme\">\n        <div class=\"realisations__column-header\">\n          {{inline-svg \"svg/skills_urbanisme-preSVG-opt.svg\" class=\"title-icon\"}}\n          <h2>Urbanisme</h2>\n        </div>\n  \n        <div class=\"realisations__column-item\">\n        </div>\n      </div>\n  \n      <div class=\"realisations__paysage\">\n        <div class=\"realisations__column-header\">\n          {{inline-svg \"svg/skills_paysage-preSVG-opt.svg\" class=\"title-icon\"}}\n          <h2>Paysage</h2>\n        </div>\n  \n        <div class=\"realisations__column-item\">\n        </div>\n      </div>\n  \n    </div>\n  \n  </div>\n  */\n  {\n    \"id\": \"4PEgOH5K\",\n    \"block\": \"[[[1,\\\"sfv\\\\n\\\"],[10,0],[14,0,\\\"realisations__container\\\"],[12],[1,\\\"\\\\n\\\\n  \\\"],[10,\\\"h1\\\"],[14,0,\\\"realisations__title\\\"],[12],[1,\\\"\\\\n    La concertation pour la construction\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"realisations__intro\\\"],[12],[1,\\\"\\\\n    Les lieux de vie sont animés par les habitants et sont dynamisés par les maîtrises d’ouvrage.\\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n    Le dialogue révèle les aspirations et les contraintes.\\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n    Zeppelin orchestre toutes les appétences et fédère l’ensemble des intervenants pour des solutions ergonomiques, une qualité de vie et le respect de l’environnement.\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"realisations__highlights\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"realisations__architecture\\\"],[12],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"realisations__column-header\\\"],[12],[1,\\\"\\\\n        \\\"],[1,[28,[35,3],[\\\"svg/skills_paysage-preSVG-opt.svg\\\"],[[\\\"class\\\"],[\\\"title-icon\\\"]]]],[1,\\\"\\\\n        \\\"],[10,\\\"h2\\\"],[12],[1,\\\"Architecture\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"realisations__column-item\\\"],[12],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[14,0,\\\"realisations__urbanisme\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"realisations__column-header\\\"],[12],[1,\\\"\\\\n        \\\"],[1,[28,[35,3],[\\\"svg/skills_urbanisme-preSVG-opt.svg\\\"],[[\\\"class\\\"],[\\\"title-icon\\\"]]]],[1,\\\"\\\\n        \\\"],[10,\\\"h2\\\"],[12],[1,\\\"Urbanisme\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"realisations__column-item\\\"],[12],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[14,0,\\\"realisations__paysage\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"realisations__column-header\\\"],[12],[1,\\\"\\\\n        \\\"],[1,[28,[35,3],[\\\"svg/skills_paysage-preSVG-opt.svg\\\"],[[\\\"class\\\"],[\\\"title-icon\\\"]]]],[1,\\\"\\\\n        \\\"],[10,\\\"h2\\\"],[12],[1,\\\"Paysage\\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,0],[14,0,\\\"realisations__column-item\\\"],[12],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[13]],[],false,[\\\"div\\\",\\\"h1\\\",\\\"br\\\",\\\"inline-svg\\\",\\\"h2\\\"]]\",\n    \"moduleName\": \"zeppelin-architectes/templates/equipe/index.hbs\",\n    \"isStrictMode\": false\n  });\n});","define(\"zeppelin-architectes/templates/head\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{!--\n    Add content you wish automatically added to the documents head\n    here. The 'model' available in this template can be populated by\n    setting values on the 'head-data' service.\n  \n    ?? https://github.com/ember-fastboot/ember-cli-head\n  --}}\n  {{#if this.model.title}}\n  <title>{{this.model.title}}</title>\n  <meta property=\"og:title\" content={{this.model.title}} />\n  {{/if}}\n  */\n  {\n    \"id\": \"DutW+XeG\",\n    \"block\": \"[[[41,[30,0,[\\\"model\\\",\\\"title\\\"]],[[[10,\\\"title\\\"],[12],[1,[30,0,[\\\"model\\\",\\\"title\\\"]]],[13],[1,\\\"\\\\n\\\"],[10,\\\"meta\\\"],[14,\\\"property\\\",\\\"og:title\\\"],[15,\\\"content\\\",[30,0,[\\\"model\\\",\\\"title\\\"]]],[12],[13],[1,\\\"\\\\n\\\"]],[]],null]],[],false,[\\\"if\\\",\\\"title\\\",\\\"meta\\\"]]\",\n    \"moduleName\": \"zeppelin-architectes/templates/head.hbs\",\n    \"isStrictMode\": false\n  });\n});","define(\"zeppelin-architectes/templates/index\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{!-- {{page-title \"Zeppelin Architectes\"}} --}}\n  \n  <div class=\"accueil__container\">\n  \n    <div class=\"accueil__sub left-text sub1\">\n      <h2>\n        {{inline-svg \"svg/link-opt.svg\" class=\"title-icon\"}}\n        Des architectes associés autour de l’espace à vivre\n      </h2>\n      <div class=\"accueil__sub_content main\">\n        <div class=\"accueil__sub_content-text\">\n  \n          <p>\n            Trois architectes associés se complètent pour mener des projets d’architectures, d’urbanisme et de paysage.\n          </p>\n  \n          <p>\n            L’interdisciplinarité affûte des solutions transversales, impulsées par les visions et les expertises de chacun.<br>\n          </p>\n  \n          <p style=\"text-align: center;\">\n            <br>\n            <LinkTo @route=\"equipe\" class=\"anim faded underlined\">\n              Faisons connaissance\n            </LinkTo>\n          </p>\n  \n        </div>\n        <div class=\"accueil__sub_content-image\">\n          <img src=\"images/index-equipe.jpg\" />\n        </div>\n      </div>\n    </div>\n  \n    <div class=\"accueil__sub separator\">\n      <h1 {{!--class=\"heading-3\"--}}>\n        3 pôles de compétence<br>\n        pour accompagner toutes les étapes de vie du projet\n      </h1>\n    </div>\n  \n    <div class=\"accueil__sub right-text sub1\">\n      <h2>\n        Architecture\n        {{inline-svg \"svg/skills_architecture-preSVG-opt.svg\" class=\"title-icon\"}}\n      </h2>\n      <div class=\"accueil__sub_content\">\n        <div class=\"accueil__sub_content-image\">\n          <img src=\"images/index-architecture.jpg\" />\n        </div>\n        <div class=\"accueil__sub_content-text\">\n          <ul>\n            <li>\n              Création, rénovation, réhabilitation dans les secteurs privés, public pour particuliers et professionnels,\n            </li>\n  \n            <li>\n              Étude de faisabilité, programmation architecturale,\n            </li>\n  \n            <li>\n              Réalisation et suivi des chantiers.\n            </li>\n          </ul>\n  \n          <p style=\"text-align: center;\">\n            <br>\n            <LinkTo @route=\"realisations.architecture\" class=\"anim faded underlined\">\n              Découvrez nos dossiers architecture\n            </LinkTo>\n          </p>\n  \n        </div>\n      </div>\n    </div>\n  \n    <div class=\"accueil__sub left-text sub1\">\n      <h2>\n        {{inline-svg \"svg/skills_urbanisme-preSVG-opt.svg\" class=\"title-icon\"}}\n        Urbanisme\n      </h2>\n      <div class=\"accueil__sub_content\">\n        <div class=\"accueil__sub_content-text\">\n  \n          <ul>\n            <li>\n              Conseil de la stratégie à la conception de programmes d’aménagement,\n            </li>\n  \n            <li>\n              Étude de requalification ou de développement urbains,\n            </li>\n  \n            <li>\n              Assistance et suivi opérationnel des évolutions urbaines pour la qualité et la pérennité.\n            </li>\n          </ul>\n  \n          <p style=\"text-align: center;\">\n            <br>\n            <LinkTo @route=\"realisations.urbanisme\" class=\"anim faded underlined\">\n              Découvrez nos dossiers urbanisme\n            </LinkTo>\n          </p>\n  \n        </div>\n        <div class=\"accueil__sub_content-image\">\n          <img src=\"images/index-urbanisme.jpg\" />\n        </div>\n      </div>\n    </div>\n  \n    <div class=\"accueil__sub right-text sub1\">\n      <h2>\n        Paysage\n        {{inline-svg \"svg/skills_paysage-preSVG-opt.svg\" class=\"title-icon\"}}\n      </h2>\n      <div class=\"accueil__sub_content\">\n        <div class=\"accueil__sub_content-image\">\n          <img src=\"images/index-paysage.jpg\" />\n        </div>\n        <div class=\"accueil__sub_content-text\">\n          <ul>\n            <li>\n               Conseil, préconisation et réalisation d’études paysagères et environnementales,\n            </li>\n  \n            <li>\n              Étude de programmation et de stratégie d’aménagement,\n            </li>\n  \n            <li>\n              Aménagement d’espaces et de jardins publics.\n            </li>\n          </ul>\n  \n          <p style=\"text-align: center;\">\n            <br>\n            <LinkTo @route=\"realisations.paysage\" class=\"anim faded underlined\">\n              Découvrez nos dossiers paysage\n            </LinkTo>\n          </p>\n  \n        </div>\n      </div>\n    </div>\n  \n  </div>\n  */\n  {\n    \"id\": \"S2wr5GD9\",\n    \"block\": \"[[[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"accueil__container\\\"],[12],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"accueil__sub left-text sub1\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h2\\\"],[12],[1,\\\"\\\\n      \\\"],[1,[28,[35,2],[\\\"svg/link-opt.svg\\\"],[[\\\"class\\\"],[\\\"title-icon\\\"]]]],[1,\\\"\\\\n      Des architectes associés autour de l’espace à vivre\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"accueil__sub_content main\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"accueil__sub_content-text\\\"],[12],[1,\\\"\\\\n\\\\n        \\\"],[10,2],[12],[1,\\\"\\\\n          Trois architectes associés se complètent pour mener des projets d’architectures, d’urbanisme et de paysage.\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,2],[12],[1,\\\"\\\\n          L’interdisciplinarité affûte des solutions transversales, impulsées par les visions et les expertises de chacun.\\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,2],[14,5,\\\"text-align: center;\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n          \\\"],[8,[39,5],[[24,0,\\\"anim faded underlined\\\"]],[[\\\"@route\\\"],[\\\"equipe\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            Faisons connaissance\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"accueil__sub_content-image\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"img\\\"],[14,\\\"src\\\",\\\"images/index-equipe.jpg\\\"],[12],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"accueil__sub separator\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h1\\\"],[12],[1,\\\"\\\\n      3 pôles de compétence\\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n      pour accompagner toutes les étapes de vie du projet\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"accueil__sub right-text sub1\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h2\\\"],[12],[1,\\\"\\\\n      Architecture\\\\n      \\\"],[1,[28,[35,2],[\\\"svg/skills_architecture-preSVG-opt.svg\\\"],[[\\\"class\\\"],[\\\"title-icon\\\"]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"accueil__sub_content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"accueil__sub_content-image\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"img\\\"],[14,\\\"src\\\",\\\"images/index-architecture.jpg\\\"],[12],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"accueil__sub_content-text\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"ul\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n            Création, rénovation, réhabilitation dans les secteurs privés, public pour particuliers et professionnels,\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n          \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n            Étude de faisabilité, programmation architecturale,\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n          \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n            Réalisation et suivi des chantiers.\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,2],[14,5,\\\"text-align: center;\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n          \\\"],[8,[39,5],[[24,0,\\\"anim faded underlined\\\"]],[[\\\"@route\\\"],[\\\"realisations.architecture\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            Découvrez nos dossiers architecture\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"accueil__sub left-text sub1\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h2\\\"],[12],[1,\\\"\\\\n      \\\"],[1,[28,[35,2],[\\\"svg/skills_urbanisme-preSVG-opt.svg\\\"],[[\\\"class\\\"],[\\\"title-icon\\\"]]]],[1,\\\"\\\\n      Urbanisme\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"accueil__sub_content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"accueil__sub_content-text\\\"],[12],[1,\\\"\\\\n\\\\n        \\\"],[10,\\\"ul\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n            Conseil de la stratégie à la conception de programmes d’aménagement,\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n          \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n            Étude de requalification ou de développement urbains,\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n          \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n            Assistance et suivi opérationnel des évolutions urbaines pour la qualité et la pérennité.\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,2],[14,5,\\\"text-align: center;\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n          \\\"],[8,[39,5],[[24,0,\\\"anim faded underlined\\\"]],[[\\\"@route\\\"],[\\\"realisations.urbanisme\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            Découvrez nos dossiers urbanisme\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"accueil__sub_content-image\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"img\\\"],[14,\\\"src\\\",\\\"images/index-urbanisme.jpg\\\"],[12],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"accueil__sub right-text sub1\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h2\\\"],[12],[1,\\\"\\\\n      Paysage\\\\n      \\\"],[1,[28,[35,2],[\\\"svg/skills_paysage-preSVG-opt.svg\\\"],[[\\\"class\\\"],[\\\"title-icon\\\"]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"accueil__sub_content\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"accueil__sub_content-image\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"img\\\"],[14,\\\"src\\\",\\\"images/index-paysage.jpg\\\"],[12],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"accueil__sub_content-text\\\"],[12],[1,\\\"\\\\n        \\\"],[10,\\\"ul\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n             Conseil, préconisation et réalisation d’études paysagères et environnementales,\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n          \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n            Étude de programmation et de stratégie d’aménagement,\\\\n          \\\"],[13],[1,\\\"\\\\n\\\\n          \\\"],[10,\\\"li\\\"],[12],[1,\\\"\\\\n            Aménagement d’espaces et de jardins publics.\\\\n          \\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n        \\\"],[10,2],[14,5,\\\"text-align: center;\\\"],[12],[1,\\\"\\\\n          \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n          \\\"],[8,[39,5],[[24,0,\\\"anim faded underlined\\\"]],[[\\\"@route\\\"],[\\\"realisations.paysage\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            Découvrez nos dossiers paysage\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[13]],[],false,[\\\"div\\\",\\\"h2\\\",\\\"inline-svg\\\",\\\"p\\\",\\\"br\\\",\\\"link-to\\\",\\\"img\\\",\\\"h1\\\",\\\"ul\\\",\\\"li\\\"]]\",\n    \"moduleName\": \"zeppelin-architectes/templates/index.hbs\",\n    \"isStrictMode\": false\n  });\n});","define(\"zeppelin-architectes/templates/realisations\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{!-- {{page-title \"Zeppelin Architectes\"}} --}}\n  <div class=\"realisations__container {{this.classPage}}\">\n  {{#if (not (eq this.router.routeName 'realisations.architecture.projet'))}}\n    <div class=\"realisations__intro\">\n      <h1 class=\"rubrique__title\">\n        La concertation pour la construction\n      </h1>\n  \n      <div class=\"rubrique__intro\">\n        Les lieux de vie sont animés par les habitants et sont dynamisés par les maîtrises d’ouvrage.<br />\n        Le dialogue révèle les aspirations et les contraintes.<br />\n        Zeppelin orchestre toutes les appétences et fédère l’ensemble des intervenants pour des solutions ergonomiques, une qualité de vie et le respect de l’environnement.\n      </div>\n    </div>\n  \n    <div class=\"realisations__back\">\n        <LinkTo class=\"anim faded underlined\"\n          @route=\"realisations.index\"\n          {{on 'click' (fn this.openRealisation '')}}\n        >\n         &lt;&nbsp;Toutes nos compétences\n       </LinkTo>\n    </div>\n  \n    <div class=\"aup_banner {{this.classBanner}}\">\n      <div class=\"aup_banner__column column-1 {{this.classColumnn1}}\">\n        <LinkTo\n          @route=\"realisations.architecture\"\n          {{on 'click' (fn this.openRealisation 'architecture')}}\n        >\n          <h2>\n            {{inline-svg \"svg/skills_architecture-preSVG-opt.svg\" class=\"title-icon\"}}\n            Architecture\n          </h2>\n       </LinkTo>\n      </div>\n  \n      <div class=\"aup_banner__column column-2 {{this.classColumnn2}}\">\n        <LinkTo\n          @route=\"realisations.urbanisme\"\n          {{on 'click' (fn this.openRealisation 'urbanisme')}}\n        >\n          <h2>\n            {{inline-svg \"svg/skills_urbanisme-preSVG-opt.svg\" class=\"title-icon\"}}\n            Urbanisme\n          </h2>\n        </LinkTo>\n      </div>\n  \n      <div class=\"aup_banner__column column-3  {{this.classColumnn3}}\">\n        <LinkTo\n          @route=\"realisations.paysage\"\n          {{on 'click' (fn this.openRealisation 'paysage')}}\n        >\n          <h2>\n            {{inline-svg \"svg/skills_paysage-preSVG-opt.svg\" class=\"title-icon\"}}\n            Paysage\n          </h2>\n        </LinkTo>\n      </div>\n    </div>\n  \n  \n    <div class=\"rubrique__intro\">\n      <div class=\"rubrique__intro-item architecture {{this.classActiveDescription1}}\">\n        Création, rénovation, réhabilitation dans les secteurs privés, public pour particuliers et professionnels, étude de faisabilité, programmation architecturale, réalisation et suivi des chantiers...\n      </div>\n      <div class=\"rubrique__intro-item urbanisme {{this.classActiveDescription2}}\">\n        Conseil, préconisation et réalisation d’études paysagères et environnementales, étude de programmation et de stratégie d’aménagement, aménagement d’espaces et de jardins publics...\n      </div>\n      <div class=\"rubrique__intro-item paysage {{this.classActiveDescription3}}\">\n        Conseil de la stratégie à la conception de programmes d’aménagement, étude de requalification ou de développement urbains, assistance et suivi opérationnel des évolutions urbaines pour la qualité et la pérennité...\n      </div>\n    </div>\n  {{/if}}\n  {{outlet}}\n  </div>\n  \n  */\n  {\n    \"id\": \"rh9L0wpx\",\n    \"block\": \"[[[10,0],[15,0,[29,[\\\"realisations__container \\\",[30,0,[\\\"classPage\\\"]]]]],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,2],[[28,[37,3],[[30,0,[\\\"router\\\",\\\"routeName\\\"]],\\\"realisations.architecture.projet\\\"],null]],null],[[[1,\\\"  \\\"],[10,0],[14,0,\\\"realisations__intro\\\"],[12],[1,\\\"\\\\n    \\\"],[10,\\\"h1\\\"],[14,0,\\\"rubrique__title\\\"],[12],[1,\\\"\\\\n      La concertation pour la construction\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[14,0,\\\"rubrique__intro\\\"],[12],[1,\\\"\\\\n      Les lieux de vie sont animés par les habitants et sont dynamisés par les maîtrises d’ouvrage.\\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n      Le dialogue révèle les aspirations et les contraintes.\\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n      Zeppelin orchestre toutes les appétences et fédère l’ensemble des intervenants pour des solutions ergonomiques, une qualité de vie et le respect de l’environnement.\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"realisations__back\\\"],[12],[1,\\\"\\\\n      \\\"],[8,[39,6],[[24,0,\\\"anim faded underlined\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"openRealisation\\\"]],\\\"\\\"],null]],null]],[[\\\"@route\\\"],[\\\"realisations.index\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n       < Toutes nos compétences\\\\n     \\\"]],[]]]]],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[10,0],[15,0,[29,[\\\"aup_banner \\\",[30,0,[\\\"classBanner\\\"]]]]],[12],[1,\\\"\\\\n    \\\"],[10,0],[15,0,[29,[\\\"aup_banner__column column-1 \\\",[30,0,[\\\"classColumnn1\\\"]]]]],[12],[1,\\\"\\\\n      \\\"],[8,[39,6],[[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"openRealisation\\\"]],\\\"architecture\\\"],null]],null]],[[\\\"@route\\\"],[\\\"realisations.architecture\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[10,\\\"h2\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[28,[35,10],[\\\"svg/skills_architecture-preSVG-opt.svg\\\"],[[\\\"class\\\"],[\\\"title-icon\\\"]]]],[1,\\\"\\\\n          Architecture\\\\n        \\\"],[13],[1,\\\"\\\\n     \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[15,0,[29,[\\\"aup_banner__column column-2 \\\",[30,0,[\\\"classColumnn2\\\"]]]]],[12],[1,\\\"\\\\n      \\\"],[8,[39,6],[[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"openRealisation\\\"]],\\\"urbanisme\\\"],null]],null]],[[\\\"@route\\\"],[\\\"realisations.urbanisme\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[10,\\\"h2\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[28,[35,10],[\\\"svg/skills_urbanisme-preSVG-opt.svg\\\"],[[\\\"class\\\"],[\\\"title-icon\\\"]]]],[1,\\\"\\\\n          Urbanisme\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[15,0,[29,[\\\"aup_banner__column column-3  \\\",[30,0,[\\\"classColumnn3\\\"]]]]],[12],[1,\\\"\\\\n      \\\"],[8,[39,6],[[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"openRealisation\\\"]],\\\"paysage\\\"],null]],null]],[[\\\"@route\\\"],[\\\"realisations.paysage\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n        \\\"],[10,\\\"h2\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[28,[35,10],[\\\"svg/skills_paysage-preSVG-opt.svg\\\"],[[\\\"class\\\"],[\\\"title-icon\\\"]]]],[1,\\\"\\\\n          Paysage\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"]],[]]]]],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\\n\\\\n  \\\"],[10,0],[14,0,\\\"rubrique__intro\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[15,0,[29,[\\\"rubrique__intro-item architecture \\\",[30,0,[\\\"classActiveDescription1\\\"]]]]],[12],[1,\\\"\\\\n      Création, rénovation, réhabilitation dans les secteurs privés, public pour particuliers et professionnels, étude de faisabilité, programmation architecturale, réalisation et suivi des chantiers...\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[15,0,[29,[\\\"rubrique__intro-item urbanisme \\\",[30,0,[\\\"classActiveDescription2\\\"]]]]],[12],[1,\\\"\\\\n      Conseil, préconisation et réalisation d’études paysagères et environnementales, étude de programmation et de stratégie d’aménagement, aménagement d’espaces et de jardins publics...\\\\n    \\\"],[13],[1,\\\"\\\\n    \\\"],[10,0],[15,0,[29,[\\\"rubrique__intro-item paysage \\\",[30,0,[\\\"classActiveDescription3\\\"]]]]],[12],[1,\\\"\\\\n      Conseil de la stratégie à la conception de programmes d’aménagement, étude de requalification ou de développement urbains, assistance et suivi opérationnel des évolutions urbaines pour la qualité et la pérennité...\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[46,[28,[37,12],null,null],null,null,null],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[],false,[\\\"div\\\",\\\"if\\\",\\\"not\\\",\\\"eq\\\",\\\"h1\\\",\\\"br\\\",\\\"link-to\\\",\\\"on\\\",\\\"fn\\\",\\\"h2\\\",\\\"inline-svg\\\",\\\"component\\\",\\\"-outlet\\\"]]\",\n    \"moduleName\": \"zeppelin-architectes/templates/realisations.hbs\",\n    \"isStrictMode\": false\n  });\n});","define(\"zeppelin-architectes/templates/realisations/architecture\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{!-- {{page-title \"Zeppelin Architectes\"}} --}}\n  \n  {{outlet}}\n  \n  */\n  {\n    \"id\": \"HJ0WWrW9\",\n    \"block\": \"[[[1,\\\"\\\\n\\\"],[46,[28,[37,1],null,null],null,null,null],[1,\\\"\\\\n\\\"]],[],false,[\\\"component\\\",\\\"-outlet\\\"]]\",\n    \"moduleName\": \"zeppelin-architectes/templates/realisations/architecture.hbs\",\n    \"isStrictMode\": false\n  });\n});","define(\"zeppelin-architectes/templates/realisations/architecture/index\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{!-- {{page-title \"Zeppelin Architectes\"}} --}}\n    <div class=\"realisations__highlights row-layout\">\n      <div class=\"realisations__highlights-items architecture\">\n  \n  {{#each this.model.projets.architecture as |projet| }}\n        <Cards::Projet @projet={{projet}} @category=\"architecture\" />\n  {{/each}}\n  \n        <Pagination\n          @currentPage=1\n          @totalPages=10\n          @numPagesToShow=4\n        />\n  \n      </div>\n    </div>\n  */\n  {\n    \"id\": \"BDn80WvT\",\n    \"block\": \"[[[1,\\\"  \\\"],[10,0],[14,0,\\\"realisations__highlights row-layout\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"realisations__highlights-items architecture\\\"],[12],[1,\\\"\\\\n\\\\n\\\"],[42,[28,[37,2],[[28,[37,2],[[30,0,[\\\"model\\\",\\\"projets\\\",\\\"architecture\\\"]]],null]],null],null,[[[1,\\\"      \\\"],[8,[39,3],null,[[\\\"@projet\\\",\\\"@category\\\"],[[30,1],\\\"architecture\\\"]],null],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"\\\\n      \\\"],[8,[39,4],null,[[\\\"@currentPage\\\",\\\"@totalPages\\\",\\\"@numPagesToShow\\\"],[\\\"1\\\",\\\"10\\\",\\\"4\\\"]],null],[1,\\\"\\\\n\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13]],[\\\"projet\\\"],false,[\\\"div\\\",\\\"each\\\",\\\"-track-array\\\",\\\"cards/projet\\\",\\\"pagination\\\"]]\",\n    \"moduleName\": \"zeppelin-architectes/templates/realisations/architecture/index.hbs\",\n    \"isStrictMode\": false\n  });\n});","define(\"zeppelin-architectes/templates/realisations/architecture/projet\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{!-- {{page-title \"Zeppelin Architectes\"}} --}}\n  \n  {{!--projet.hbs\n  {{this.model.projet}}\n  {{this.model.projet.nom}}--}}\n  <ProjetFile @projet={{this.model.projet}} @category=\"architecture\" />\n  */\n  {\n    \"id\": \"ohYBlRCL\",\n    \"block\": \"[[[1,\\\"\\\\n\\\"],[8,[39,0],null,[[\\\"@projet\\\",\\\"@category\\\"],[[30,0,[\\\"model\\\",\\\"projet\\\"]],\\\"architecture\\\"]],null]],[],false,[\\\"projet-file\\\"]]\",\n    \"moduleName\": \"zeppelin-architectes/templates/realisations/architecture/projet.hbs\",\n    \"isStrictMode\": false\n  });\n});","define(\"zeppelin-architectes/templates/realisations/index\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{!-- {{page-title \"Zeppelin Architectes\"}} --}}\n  \n    <div class=\"realisations__highlights column-layout\">\n      <div class=\"realisations__highlights-items architecture\">\n  \n  {{!--      <div class=\"realisations__column-header\">\n          <LinkTo\n            @route=\"realisations.architecture\"\n          >\n            <h2>\n              {{inline-svg \"svg/skills_architecture-preSVG-opt.svg\" class=\"title-icon\"}}\n              Architecture\n            </h2>\n          </LinkTo>\n        </div>--}}\n  \n  {{#each this.model.projets.architecture as |projet| }}\n          <Cards::Projet @projet={{projet}} @category=\"architecture\" />\n  {{/each}}\n  \n        <Pagination\n          @currentPage=1\n          @totalPages=10\n          @numPagesToShow=4\n        />\n  \n      </div>\n  \n      <div class=\"realisations__highlights-items urbanisme\">\n  {{!--      <div class=\"realisations__column-header\">\n          <LinkTo\n            @route=\"realisations.urbanisme\"\n          >\n            <h2>\n              {{inline-svg \"svg/skills_urbanisme-preSVG-opt.svg\" class=\"title-icon\"}}\n              Urbanisme\n            </h2>\n          </LinkTo>\n        </div>--}}\n  \n  {{#each this.model.projets.urbanisme as |projet| }}\n          <Cards::Projet @projet={{projet}} @category=\"urbanisme\" />\n  {{/each}}\n  \n        <Pagination\n          @currentPage=1\n          @totalPages=10\n          @numPagesToShow=4\n        />\n  \n      </div>\n  \n      <div class=\"realisations__highlights-items paysage\">\n  {{!--      <div class=\"realisations__column-header\">\n          <LinkTo\n            @route=\"realisations.paysage\"\n          >\n            <h2>\n              {{inline-svg \"svg/skills_paysage-preSVG-opt.svg\" class=\"title-icon\"}}\n              Paysage\n            </h2>\n          </LinkTo>\n        </div>--}}\n  \n  {{#each this.model.projets.paysage as |projet| }}\n          <Cards::Projet @projet={{projet}} @category=\"paysage\" />\n  {{/each}}\n  \n        <Pagination\n          @currentPage=1\n          @totalPages=10\n          @numPagesToShow=4\n        />\n  \n      </div>\n  \n    </div>\n  */\n  {\n    \"id\": \"cYhtFgfb\",\n    \"block\": \"[[[1,\\\"\\\\n  \\\"],[10,0],[14,0,\\\"realisations__highlights column-layout\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"realisations__highlights-items architecture\\\"],[12],[1,\\\"\\\\n\\\\n\\\"],[1,\\\"\\\\n\\\"],[42,[28,[37,2],[[28,[37,2],[[30,0,[\\\"model\\\",\\\"projets\\\",\\\"architecture\\\"]]],null]],null],null,[[[1,\\\"        \\\"],[8,[39,3],null,[[\\\"@projet\\\",\\\"@category\\\"],[[30,1],\\\"architecture\\\"]],null],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"\\\\n      \\\"],[8,[39,4],null,[[\\\"@currentPage\\\",\\\"@totalPages\\\",\\\"@numPagesToShow\\\"],[\\\"1\\\",\\\"10\\\",\\\"4\\\"]],null],[1,\\\"\\\\n\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[14,0,\\\"realisations__highlights-items urbanisme\\\"],[12],[1,\\\"\\\\n\\\"],[1,\\\"\\\\n\\\"],[42,[28,[37,2],[[28,[37,2],[[30,0,[\\\"model\\\",\\\"projets\\\",\\\"urbanisme\\\"]]],null]],null],null,[[[1,\\\"        \\\"],[8,[39,3],null,[[\\\"@projet\\\",\\\"@category\\\"],[[30,2],\\\"urbanisme\\\"]],null],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\"\\\\n      \\\"],[8,[39,4],null,[[\\\"@currentPage\\\",\\\"@totalPages\\\",\\\"@numPagesToShow\\\"],[\\\"1\\\",\\\"10\\\",\\\"4\\\"]],null],[1,\\\"\\\\n\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n    \\\"],[10,0],[14,0,\\\"realisations__highlights-items paysage\\\"],[12],[1,\\\"\\\\n\\\"],[1,\\\"\\\\n\\\"],[42,[28,[37,2],[[28,[37,2],[[30,0,[\\\"model\\\",\\\"projets\\\",\\\"paysage\\\"]]],null]],null],null,[[[1,\\\"        \\\"],[8,[39,3],null,[[\\\"@projet\\\",\\\"@category\\\"],[[30,3],\\\"paysage\\\"]],null],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"\\\\n      \\\"],[8,[39,4],null,[[\\\"@currentPage\\\",\\\"@totalPages\\\",\\\"@numPagesToShow\\\"],[\\\"1\\\",\\\"10\\\",\\\"4\\\"]],null],[1,\\\"\\\\n\\\\n    \\\"],[13],[1,\\\"\\\\n\\\\n  \\\"],[13]],[\\\"projet\\\",\\\"projet\\\",\\\"projet\\\"],false,[\\\"div\\\",\\\"each\\\",\\\"-track-array\\\",\\\"cards/projet\\\",\\\"pagination\\\"]]\",\n    \"moduleName\": \"zeppelin-architectes/templates/realisations/index.hbs\",\n    \"isStrictMode\": false\n  });\n});","define(\"zeppelin-architectes/templates/realisations/paysage\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{!-- {{page-title \"Zeppelin Architectes\"}} --}}\n  {{outlet}}\n  \n  */\n  {\n    \"id\": \"GUY+4z0t\",\n    \"block\": \"[[[46,[28,[37,1],null,null],null,null,null],[1,\\\"\\\\n\\\"]],[],false,[\\\"component\\\",\\\"-outlet\\\"]]\",\n    \"moduleName\": \"zeppelin-architectes/templates/realisations/paysage.hbs\",\n    \"isStrictMode\": false\n  });\n});","define(\"zeppelin-architectes/templates/realisations/paysage/index\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{!-- {{page-title \"Zeppelin Architectes\"}} --}}\n    <div class=\"realisations__highlights row-layout\">\n      <div class=\"realisations__highlights-items paysage\">\n  \n  {{#each this.model.projets.paysage as |projet| }}\n        <Cards::Projet @projet={{projet}} @category=\"paysage\" />\n  {{/each}}\n  \n        <Pagination\n          @currentPage=1\n          @totalPages=10\n          @numPagesToShow=4\n        />\n  \n      </div>\n    </div>\n  */\n  {\n    \"id\": \"s+2CERHT\",\n    \"block\": \"[[[1,\\\"  \\\"],[10,0],[14,0,\\\"realisations__highlights row-layout\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"realisations__highlights-items paysage\\\"],[12],[1,\\\"\\\\n\\\\n\\\"],[42,[28,[37,2],[[28,[37,2],[[30,0,[\\\"model\\\",\\\"projets\\\",\\\"paysage\\\"]]],null]],null],null,[[[1,\\\"      \\\"],[8,[39,3],null,[[\\\"@projet\\\",\\\"@category\\\"],[[30,1],\\\"paysage\\\"]],null],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"\\\\n      \\\"],[8,[39,4],null,[[\\\"@currentPage\\\",\\\"@totalPages\\\",\\\"@numPagesToShow\\\"],[\\\"1\\\",\\\"10\\\",\\\"4\\\"]],null],[1,\\\"\\\\n\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13]],[\\\"projet\\\"],false,[\\\"div\\\",\\\"each\\\",\\\"-track-array\\\",\\\"cards/projet\\\",\\\"pagination\\\"]]\",\n    \"moduleName\": \"zeppelin-architectes/templates/realisations/paysage/index.hbs\",\n    \"isStrictMode\": false\n  });\n});","define(\"zeppelin-architectes/templates/realisations/paysage/projet\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{!-- {{page-title \"Zeppelin Architectes\"}} --}}\n  \n  {{!--projet.hbs\n  {{this.model.projet}}\n  {{this.model.projet.nom}}--}}\n  <ProjetFile @projet={{this.model.projet}} @category=\"paysage\" />\n  */\n  {\n    \"id\": \"TZHSEM1n\",\n    \"block\": \"[[[1,\\\"\\\\n\\\"],[8,[39,0],null,[[\\\"@projet\\\",\\\"@category\\\"],[[30,0,[\\\"model\\\",\\\"projet\\\"]],\\\"paysage\\\"]],null]],[],false,[\\\"projet-file\\\"]]\",\n    \"moduleName\": \"zeppelin-architectes/templates/realisations/paysage/projet.hbs\",\n    \"isStrictMode\": false\n  });\n});","define(\"zeppelin-architectes/templates/realisations/urbanisme\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{!-- {{page-title \"Zeppelin Architectes\"}} --}}\n  {{outlet}}\n  \n  */\n  {\n    \"id\": \"ChnGsBzA\",\n    \"block\": \"[[[46,[28,[37,1],null,null],null,null,null],[1,\\\"\\\\n\\\"]],[],false,[\\\"component\\\",\\\"-outlet\\\"]]\",\n    \"moduleName\": \"zeppelin-architectes/templates/realisations/urbanisme.hbs\",\n    \"isStrictMode\": false\n  });\n});","define(\"zeppelin-architectes/templates/realisations/urbanisme/index\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{!-- {{page-title \"Zeppelin Architectes\"}} --}}\n    <div class=\"realisations__highlights row-layout\">\n      <div class=\"realisations__highlights-items urbanisme\">\n  \n  {{#each this.model.projets.urbanisme as |projet| }}\n        <Cards::Projet @projet={{projet}} @category=\"urbanisme\" />\n  {{/each}}\n  \n        <Pagination\n          @currentPage=1\n          @totalPages=10\n          @numPagesToShow=4\n        />\n  \n      </div>\n    </div>\n  */\n  {\n    \"id\": \"z83IE7cd\",\n    \"block\": \"[[[1,\\\"  \\\"],[10,0],[14,0,\\\"realisations__highlights row-layout\\\"],[12],[1,\\\"\\\\n    \\\"],[10,0],[14,0,\\\"realisations__highlights-items urbanisme\\\"],[12],[1,\\\"\\\\n\\\\n\\\"],[42,[28,[37,2],[[28,[37,2],[[30,0,[\\\"model\\\",\\\"projets\\\",\\\"urbanisme\\\"]]],null]],null],null,[[[1,\\\"      \\\"],[8,[39,3],null,[[\\\"@projet\\\",\\\"@category\\\"],[[30,1],\\\"urbanisme\\\"]],null],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"\\\\n      \\\"],[8,[39,4],null,[[\\\"@currentPage\\\",\\\"@totalPages\\\",\\\"@numPagesToShow\\\"],[\\\"1\\\",\\\"10\\\",\\\"4\\\"]],null],[1,\\\"\\\\n\\\\n    \\\"],[13],[1,\\\"\\\\n  \\\"],[13]],[\\\"projet\\\"],false,[\\\"div\\\",\\\"each\\\",\\\"-track-array\\\",\\\"cards/projet\\\",\\\"pagination\\\"]]\",\n    \"moduleName\": \"zeppelin-architectes/templates/realisations/urbanisme/index.hbs\",\n    \"isStrictMode\": false\n  });\n});","define(\"zeppelin-architectes/templates/realisations/urbanisme/projet\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n  var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n  /*\n    {{!-- {{page-title \"Zeppelin Architectes\"}} --}}\n  \n  {{!--projet.hbs\n  {{this.model.projet}}\n  {{this.model.projet.nom}}--}}\n  <ProjetFile @projet={{this.model.projet}} @category=\"urbanisme\" />\n  */\n  {\n    \"id\": \"DjbPt0WZ\",\n    \"block\": \"[[[1,\\\"\\\\n\\\"],[8,[39,0],null,[[\\\"@projet\\\",\\\"@category\\\"],[[30,0,[\\\"model\\\",\\\"projet\\\"]],\\\"urbanisme\\\"]],null]],[],false,[\\\"projet-file\\\"]]\",\n    \"moduleName\": \"zeppelin-architectes/templates/realisations/urbanisme/projet.hbs\",\n    \"isStrictMode\": false\n  });\n});","define(\"zeppelin-architectes/transforms/boolean\", [\"exports\", \"@ember/debug\", \"@ember-data/serializer/transform\"], function (_exports, _debug, _transform) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _transform.BooleanTransform;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"@ember/debug\",0,\"@ember-data/serializer/transform\"eaimeta@70e063a35619d71f\n  (true && !(false) && (0, _debug.deprecate)(\"You are relying on ember-data auto-magically installing the BooleanTransform. Use `export { BooleanTransform as default } from '@ember-data/serializer/transform';` in app/transforms/boolean.js instead\", false, {\n    id: 'ember-data:deprecate-legacy-imports',\n    for: 'ember-data',\n    until: '6.0',\n    since: {\n      enabled: '5.2',\n      available: '4.13'\n    }\n  }));\n});","define(\"zeppelin-architectes/transforms/date\", [\"exports\", \"@ember/debug\", \"@ember-data/serializer/transform\"], function (_exports, _debug, _transform) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _transform.DateTransform;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"@ember/debug\",0,\"@ember-data/serializer/transform\"eaimeta@70e063a35619d71f\n  (true && !(false) && (0, _debug.deprecate)(\"You are relying on ember-data auto-magically installing the DateTransform. Use `export { DateTransform as default } from '@ember-data/serializer/transform';` in app/transforms/date.js instead\", false, {\n    id: 'ember-data:deprecate-legacy-imports',\n    for: 'ember-data',\n    until: '6.0',\n    since: {\n      enabled: '5.2',\n      available: '4.13'\n    }\n  }));\n});","define(\"zeppelin-architectes/transforms/number\", [\"exports\", \"@ember/debug\", \"@ember-data/serializer/transform\"], function (_exports, _debug, _transform) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _transform.NumberTransform;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"@ember/debug\",0,\"@ember-data/serializer/transform\"eaimeta@70e063a35619d71f\n  (true && !(false) && (0, _debug.deprecate)(\"You are relying on ember-data auto-magically installing the NumberTransform. Use `export { NumberTransform as default } from '@ember-data/serializer/transform';` in app/transforms/number.js instead\", false, {\n    id: 'ember-data:deprecate-legacy-imports',\n    for: 'ember-data',\n    until: '6.0',\n    since: {\n      enabled: '5.2',\n      available: '4.13'\n    }\n  }));\n});","define(\"zeppelin-architectes/transforms/string\", [\"exports\", \"@ember/debug\", \"@ember-data/serializer/transform\"], function (_exports, _debug, _transform) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _transform.StringTransform;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"@ember/debug\",0,\"@ember-data/serializer/transform\"eaimeta@70e063a35619d71f\n  (true && !(false) && (0, _debug.deprecate)(\"You are relying on ember-data auto-magically installing the StringTransform. Use `export { StringTransform as default } from '@ember-data/serializer/transform';` in app/transforms/string.js instead\", false, {\n    id: 'ember-data:deprecate-legacy-imports',\n    for: 'ember-data',\n    until: '6.0',\n    since: {\n      enabled: '5.2',\n      available: '4.13'\n    }\n  }));\n});","define(\"zeppelin-architectes/utils/titleize\", [\"exports\", \"ember-cli-string-helpers/utils/titleize\"], function (_exports, _titleize) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _titleize.default;\n    }\n  });\n  0; //eaimeta@70e063a35619d71f0,\"ember-cli-string-helpers/utils/titleize\"eaimeta@70e063a35619d71f\n});","define(\"zeppelin-architectes/utils/upload-file-progress-estimator\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n  function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n  function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n  const delay = ms => new Promise(resolve => setTimeout(resolve, ms));\n  class EstimateProgress {\n    constructor(totalSize, cbackOnProgress, step) {\n      _defineProperty(this, \"totalSize\", null);\n      _defineProperty(this, \"step\", void 0);\n      _defineProperty(this, \"cbackOnProgress\", null);\n      _defineProperty(this, \"_stopToRun\", false);\n      this.totalSize = totalSize; // 1024 : 1ko\n      this.cbackOnProgress = cbackOnProgress;\n      this.step = step ?? 50; // this depends on the connection speed =>fake here (the smaller step is the quicker the progress will be)\n    }\n    start() {\n      this._stopToRun = false;\n      if (this.cbackOnProgress) this._run();\n    }\n    async _run() {\n      this.cbackOnProgress(0);\n      // let perc = this.totalSize / (10 * this.step);\n      let perc = 0,\n        cnt = 0;\n      // console.log('estimateProgress._run', perc);\n      while (perc < 100) {\n        await delay(100);\n        if (this._stopToRun) break;\n        cnt++;\n        perc = this.totalSize / this.step * cnt / this.totalSize * 100;\n        // console.log('estimateProgress._run ', perc+'%', this.step, this.totalSize, (this.totalSize/this.step), ((this.totalSize/this.step) *cnt) );\n        if (this.cbackOnProgress) this.cbackOnProgress(perc);\n        if (this._stopToRun) break;\n      }\n    }\n    finish() {\n      this._stopToRun = true;\n      if (this.cbackOnProgress) this.cbackOnProgress(100);\n    }\n    stop() {\n      this._stopToRun = true;\n    }\n  }\n  _exports.default = EstimateProgress;\n});","define(\"zeppelin-architectes/utils/url-regex\", [\"exports\", \"@ember/utils\"], function (_exports, _utils) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.shortenUrl = shortenUrl;\n  _exports.urlRegex = urlRegex;\n  0; //eaimeta@70e063a35619d71f0,\"@ember/utils\"eaimeta@70e063a35619d71f\n  // Taken from the ember-linkify addon (not updated since long) that in dec22 was using deprecated dependances (notably raising a deprecation message about ember-cli-babel@^6.6.0)\n\n  // URL regex courtesy of https://github.com/kevva/url-regex\n  function urlRegex() {\n    return /([\"'])?(?:(?:(?:(?:https?|ftp|\\w):)?\\/\\/)|(?:www.))(?:\\S+(?::\\S*)?@)?(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:1\\d\\d|2[0-4]\\d|25[0-4]|[1-9]\\d?))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))(?::\\d{2,5})?(?:\\/\\S*)?\\1/gi;\n  }\n\n  // Shortens the URL and adds three dots to the end\n  function shortenUrl(url, length) {\n    if (!(0, _utils.isBlank)(url) && url.length > length) {\n      url = url.substr(0, length) + '...';\n    }\n    return url;\n  }\n});","define(\"zeppelin-architectes/utils/wildcarded-string\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.isWildcardedPatternMatching = isWildcardedPatternMatching;\n  _exports.preg_match_all = preg_match_all;\n  _exports.wildcardMatch = wildcardMatch;\n  _exports.wildcardToRegex = wildcardToRegex;\n  _exports.wildcardedPatternFullAnswer = wildcardedPatternFullAnswer;\n  0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n  function wildcardToRegex(pattern, wildcNotNull, strict) {\n    if (wildcNotNull === undefined || wildcNotNull === null) wildcNotNull = true;\n    if (!strict) strict = false;\n    if (!wildcNotNull) {\n      var pat = pattern.replace(/\\./g, \"\\\\.\");\n      var exp = pat.replace(/\\*/g, \"(.*?)\");\n      if (exp.endsWith(exp, '(.\\\\*?)')) exp = exp.slice(0, -5) + \"(.*)\";\n    } else {\n      var pat = pattern.replace(/\\./g, \"\\\\.\");\n      var exp = pat.replace(/\\*/g, \"(.+?)\");\n      if (exp.endsWith(\"(.+?)\")) exp = exp.slice(0, -5) + \"(.+)\";\n    }\n    if (strict) return exp + \"$\"; // <?//le dollar est là pour s'assurer de ne pas capturer si la string est plus longue que le pattern?>\n    return exp;\n  }\n\n  /*!@@jsfunction: isWildcardedPatternMatching( <string> $pattern , <string> $string , <bool> notCaseSensitive , <bool> notMultiline, <bool> wildcNotNull=true)\n  @@usage: return <boolean> if the wildcared ('*') pattern is matching string\n  */\n  function isWildcardedPatternMatching(pattern, string, notCaseSensitive, notMultiline, wildcNotNull) {\n    if (wildcNotNull === undefined || wildcNotNull === null) wildcNotNull = true;\n    if (pattern === \"*\") return true;\n    if (notCaseSensitive) var opts = 'i';else var opts = '';\n    if (!notMultiline) opts += 'm';\n    var regex = wildcardToRegex(pattern);\n    regex = new RegExp(regex, opts);\n    var tst = regex.test(string);\n    return tst;\n  }\n\n  /*!@@jsfunction: wildcardMatch( <string> $pattern , <string> $string  , <bool> notCaseSensitive , <bool> notMultiline, <bool> wildcNotNull=true )\n  @@usage: returns false if not matching, or Array matches of all the string argument parts matching the wildcard(s).\n  */\n  function wildcardMatch(pattern, string, notCaseSensitive, notMultiline, wildcNotNull) {\n    if (wildcNotNull === undefined || wildcNotNull === null) wildcNotNull = true;\n    var ret = wildcardedPatternFullAnswer(pattern, string, notCaseSensitive, notMultiline);\n    if (!ret[\"match\"]) return false;\n    return ret[\"matches\"];\n  }\n\n  /*!@@jsfunction: wildcardedPatternFullAnswer( <string> $pattern , <string> $string  , <bool> notCaseSensitive , <bool> notMultiline, <bool> wildcNotNull=true)\n  @@usage: returns an Object with :\n    - \"match\"=><bool> is pattern found in string\n    - \"matches\"=><array> preg Matches\n  ==> idem isWildcardedPatternMatching but it returns all the string argument parts matching the wildcard(s).\n  */\n  function wildcardedPatternFullAnswer(pattern, string, notCaseSensitive, notMultiline, wildcNotNull) {\n    if (wildcNotNull === undefined || wildcNotNull === null) wildcNotNull = true;\n    var opts = 'g';\n    if (notCaseSensitive) opts += 'i';\n    if (!notMultiline) opts += 'm';\n    var regex = new RegExp(wildcardToRegex(pattern), opts);\n    var found = preg_match_all(regex, string);\n    var ret = {};\n    if (found[1] && found[1][0]) delete found[1][0]; // same as string arg if match => we remove it\n    ret['matches'] = found[1];\n    ret['match'] = found[0];\n    return ret;\n  }\n\n  /* A JS port of the PHP function: */\n\n  function preg_match_all(pattern, string) {\n    // pattern can be a string regexp or a RegExp Object. If it is a RegExp that has already been exec we'll hiave issues => we reset it.\n    if ((typeof pattern).toLowerCase() === \"object\") pattern = pattern.toString();\n    var opts = \"\";\n    pattern = new RegExp(pattern, opts);\n    matches = new Array();\n    var exe = pattern.exec(string);\n    if (!exe) return new Array(0, new Array());\n    var foundCaptsnbr = exe.length;\n    if (!foundCaptsnbr) return new Array(0, new Array());\n    matches[0] = string.match(pattern);\n    var foundnbr = matches[0].length;\n    if (!foundnbr) return new Array(0, new Array());\n    var spl = string.split(pattern);\n    var curmi = 1;\n    for (var d in spl) {\n      d = parseInt(d);\n      if (d == 0) continue;\n      if (curmi >= foundCaptsnbr) break;\n      if (!matches[curmi]) matches[curmi] = new Array();\n      matches[curmi][matches[curmi].length] = spl[d];\n      for (var c = 0; c < foundnbr - 1; c++) {\n        matches[curmi][matches[curmi].length] = spl[d + (c + 1) * 2];\n      }\n      curmi++;\n    }\n    return new Array(foundCaptsnbr, matches);\n  }\n});","\n","define('zeppelin-architectes/config/environment', [], function() {\n  if (typeof FastBoot !== 'undefined') {\nreturn FastBoot.config('zeppelin-architectes');\n} else {\nvar prefix = 'zeppelin-architectes';try {\n  var metaName = prefix + '/config/environment';\n  var rawConfig = document.querySelector('meta[name=\"' + metaName + '\"]').getAttribute('content');\n  var config = JSON.parse(decodeURIComponent(rawConfig));\n\n  var exports = { 'default': config };\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n  return exports;\n}\ncatch(err) {\n  throw new Error('Could not read config from meta tag with name \"' + metaName + '\".');\n}\n\n}\n});\n","\nif (typeof FastBoot === 'undefined') {\n  if (!runningTests) {\n    require('zeppelin-architectes/app')['default'].create({\"name\":\"zeppelin-architectes\",\"version\":\"0.0.1+f3e3fc80\"});\n  }\n}\n\n"],"names":[],"mappings":"AAAA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzsBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7XA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7fA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACluBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACt/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrGA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;","file":"zeppelin-architectes.js"}