
    window.dataLayer = window.dataLayer || [];
    dataLayer.push({
      'gtm.start': new Date().getTime(),
      event:'gtm.js'
    });
    dataLayer.push({
      'sessionData': {
        
        
        
        'shop_country': 'IT',
        'shop_language': 'it',
        'intern': 'extern',
        'employee': 'plattform',
        'procurement': 'public',
        'context': 'anonymous',
        
        'vid': 'b99d75192fc14ac19a49cf4abf086035',
        
      }
    });
    function mergeDeep(...objects) {
      const isObject = (obj) => obj && typeof obj === 'object';
      return objects.reduce((prev, obj) => {
        Object.keys(obj).forEach((key) => {
          const pVal = prev[key];
          const oVal = obj[key];

          if (Array.isArray(pVal) && Array.isArray(oVal)) {
            prev[key] = pVal.concat(...oVal);
          } else if (isObject(pVal) && isObject(oVal)) {
            prev[key] = mergeDeep(pVal, oVal);
          } else {
            prev[key] = oVal;
          }
        });

        return prev;
      }, {});
    }

    function resolve(path, obj = self, separator = '.') {
      var properties = Array.isArray(path) ? path : path.split(separator);
      return properties.reduce((prev, curr) => prev && prev[curr], obj);
    }

    function isDefined(currentValue) {
      return currentValue !== undefined;
    }

    class BechtleCtx {
      _listeners = [];
      _currentState = {};
      _oldState = {};

      get(path) {
        return resolve(path, this._currentState)
      }

      add(value) {
        const oldState = { ...this._currentState };
        const newState = mergeDeep(oldState, value);
        this._oldState = oldState;
        this._currentState = newState;
        this.notifyListeners();
      }

      on(path, listener) {
        this.addListener({ path, listener, once: false });
        const paths = Array.isArray(path) ? path : [path];
        this.notifiyOnListeners(paths, listener, true);
      }

      once(path, listener) {
        this.addListener({ path, listener, once: true });
        const paths = Array.isArray(path) ? path : [path];
        this.notifyOnceListeners(paths, listener, true);
      }

      removeListener(listener) {
        this._listeners = this._listeners.filter((_) => _.listener !== listener);
      }

      addListener(listener) {
        this._listeners.push(listener);
      }

      notifyListeners() {
        this._listeners.forEach(({ path, listener, once }) => {
          const paths = Array.isArray(path) ? path : [path];
          if (once) {
            this.notifyOnceListeners(paths, listener);
          } else {
            this.notifiyOnListeners(paths, listener);
          }
        });
      }

      notifyOnceListeners(paths, listener) {
        const values = paths.map((path) => resolve(path, this._currentState));
        const allValuesDefined = Object.values(values).every(isDefined);
        if (allValuesDefined) {
          listener(values);
          this.removeListener(listener);
        }
      }

      notifiyOnListeners(paths, listener, ignoreValueComparison) {
        const values = paths.map((path) => resolve(path, this._currentState));
        const oldValues = paths.map((path) => resolve(path, this._oldState));
        if (ignoreValueComparison && values.every(isDefined)) {
          return listener(values);
        }
        if (JSON.stringify(values) !== JSON.stringify(oldValues)) {
          listener(values);
        }
      }
    }

    if (window.bechtle && window.bechtle.events) {
      const events = window.bechtle.events
      window.bechtle = new BechtleCtx()
      window.bechtle.events = events
    } else {
      window.bechtle = new BechtleCtx()
    }

    window.bechtle.add({"i18n":{"country":"it","language":"it","locale":"it_IT"},"session":{"vid":"b99d75192fc14ac19a49cf4abf086035"},"pageContext":{},"user":{}})
  window.ACC = window.ACC || { config: {} }