diff --git a/5/ecolyo.cf7d1f9bca710f0b366e.js b/5/ecolyo.98373c556b027bc81ab4.js
similarity index 99%
rename from 5/ecolyo.cf7d1f9bca710f0b366e.js
rename to 5/ecolyo.98373c556b027bc81ab4.js
index 0f943387643cd71cd4e84664f01698ba85861861..efdaf068ad487228e14c886ff30578749c1e7905 100644
--- a/5/ecolyo.cf7d1f9bca710f0b366e.js
+++ b/5/ecolyo.98373c556b027bc81ab4.js
@@ -2008,7 +2008,7 @@ var _partnersInfo2 = _interopRequireDefault(__webpack_require__("4zrG"));
 
 var _usageEvent2 = _interopRequireDefault(__webpack_require__("dECN"));
 
-var _challenge2 = __webpack_require__("ojwR");
+var _challenge2 = __webpack_require__("F6Xr");
 
 var _chart = __webpack_require__("idK9");
 
@@ -2181,7 +2181,10 @@ var KonnectorViewerCard = function KonnectorViewerCard(_ref) {
             _yield$challengeServi = _context2.sent;
             updatedUserChallenge = _yield$challengeServi.updatedUserChallenge;
             dataloads = _yield$challengeServi.dataloads;
-            dispatch((0, _challenge2.setChallengeConsumption)(updatedUserChallenge, dataloads)); // Check is duel is done and display notification
+            dispatch((0, _challenge2.setChallengeConsumption)({
+              userChallenge: updatedUserChallenge,
+              currentDataload: dataloads
+            })); // Check is duel is done and display notification
 
             _context2.next = 10;
             return challengeService.isChallengeDone(updatedUserChallenge, dataloads);
diff --git a/app/ecolyo.b74e33c668eeadd34a80.js b/app/ecolyo.2b3ed6912e09b4da5a5f.js
similarity index 99%
rename from app/ecolyo.b74e33c668eeadd34a80.js
rename to app/ecolyo.2b3ed6912e09b4da5a5f.js
index 301dac1726e4c1146641ba1f6b16a593e4f432e3..5880b19eef2125aaf2e2a5fef643fcd4d1e637ba 100644
--- a/app/ecolyo.b74e33c668eeadd34a80.js
+++ b/app/ecolyo.2b3ed6912e09b4da5a5f.js
@@ -64,7 +64,7 @@
 /******/
 /******/ 	// script path function
 /******/ 	function jsonpScriptSrc(chunkId) {
-/******/ 		return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + "/ecolyo." + {"1":"c44aefc530d1de68ee3f","3":"eff4cc1e75bcc37e8fed","4":"4bdc1836bb506dfd5fea","5":"cf7d1f9bca710f0b366e","6":"54d0e15353c0b4003a05","7":"1850b6ce28566211a509","8":"5a104e5906433ba909f2","9":"d4e0f8345c64c54574af"}[chunkId] + ".js"
+/******/ 		return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + "/ecolyo." + {"1":"c44aefc530d1de68ee3f","3":"eff4cc1e75bcc37e8fed","4":"4bdc1836bb506dfd5fea","5":"98373c556b027bc81ab4","6":"54d0e15353c0b4003a05","7":"1850b6ce28566211a509","8":"5a104e5906433ba909f2","9":"d4e0f8345c64c54574af"}[chunkId] + ".js"
 /******/ 	}
 /******/
 /******/ 	// The require function
@@ -415,7 +415,7 @@ var _quiz = _interopRequireDefault(__webpack_require__("CUhI"));
 
 var _usageEvent2 = _interopRequireDefault(__webpack_require__("dECN"));
 
-var _challenge2 = __webpack_require__("ojwR");
+var _challenge2 = __webpack_require__("F6Xr");
 
 __webpack_require__("mFBf");
 
@@ -1695,7 +1695,7 @@ var _profileTypeEntity = _interopRequireDefault(__webpack_require__("aypK"));
 
 var _usageEvent2 = _interopRequireDefault(__webpack_require__("dECN"));
 
-var _challenge2 = __webpack_require__("ojwR");
+var _challenge2 = __webpack_require__("F6Xr");
 
 var _chart = __webpack_require__("idK9");
 
@@ -2130,7 +2130,10 @@ var SplashRoot = function SplashRoot(_ref) {
                   break;
                 }
 
-                dispatch((0, _challenge2.setChallengeConsumption)(_updatedUserChallenge, dataloads)); // Check is duel is done and display notification
+                dispatch((0, _challenge2.setChallengeConsumption)({
+                  userChallenge: _updatedUserChallenge,
+                  currentDataload: dataloads
+                })); // Check is duel is done and display notification
 
                 challengeService = new _challenge.default(client);
                 _context7.next = 74;
@@ -5678,7 +5681,7 @@ var _challenge = _interopRequireDefault(__webpack_require__("kdea"));
 
 var _usageEvent2 = _interopRequireDefault(__webpack_require__("dECN"));
 
-var _challenge2 = __webpack_require__("ojwR");
+var _challenge2 = __webpack_require__("F6Xr");
 
 var _global = __webpack_require__("c4IZ");
 
@@ -10341,7 +10344,7 @@ var _global = __webpack_require__("YNKm");
 
 var _analysis = __webpack_require__("JQjK");
 
-var _challenge = __webpack_require__("TYd+");
+var _challenge = __webpack_require__("F6Xr");
 
 var _chart = __webpack_require__("idK9");
 
@@ -10364,7 +10367,7 @@ var defaultAction = {
 exports.defaultAction = defaultAction;
 var ecolyoReducer = (0, _redux.combineReducers)({
   analysis: _analysis.analysisSlice.reducer,
-  challenge: _challenge.challengeReducer,
+  challenge: _challenge.challengeSlice.reducer,
   chart: _chart.chartSlice.reducer,
   global: _global.globalReducer,
   modal: _modal.modalSlice.reducer,
@@ -11021,26 +11024,25 @@ var QuizService = /*#__PURE__*/function () {
     key: "startUserQuiz",
     value: function () {
       var _startUserQuiz = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(userQuiz) {
-        var questions, randomizedQuestions, updatedUserQuiz;
+        var questions;
         return _regenerator.default.wrap(function _callee4$(_context4) {
           while (1) {
             switch (_context4.prev = _context4.next) {
               case 0:
-                questions = userQuiz.questions;
-                questions.forEach(function (question) {
-                  return question.answers = (0, _lodash.shuffle)(question.answers);
+                questions = userQuiz.questions.map(function (question) {
+                  return _objectSpread(_objectSpread({}, question), {}, {
+                    answers: (0, _lodash.shuffle)(question.answers)
+                  });
                 });
-                randomizedQuestions = (0, _lodash.shuffle)(questions);
-                updatedUserQuiz = _objectSpread(_objectSpread({}, userQuiz), {}, {
-                  questions: randomizedQuestions,
+                return _context4.abrupt("return", _objectSpread(_objectSpread({}, userQuiz), {}, {
+                  questions: (0, _lodash.shuffle)(questions),
                   state: _userQuiz.UserQuizState.ONGOING,
                   startDate: _luxon.DateTime.local().setZone('utc', {
                     keepLocalTime: true
                   })
-                });
-                return _context4.abrupt("return", updatedUserQuiz);
+                }));
 
-              case 5:
+              case 2:
               case "end":
                 return _context4.stop();
             }
@@ -11064,27 +11066,27 @@ var QuizService = /*#__PURE__*/function () {
     key: "resetUserQuiz",
     value: function () {
       var _resetUserQuiz = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(userQuiz) {
-        var updatedQuestions, updatedCustomQuestion, updatedUserQuiz;
+        var updatedQuestions, updatedCustomQuestion;
         return _regenerator.default.wrap(function _callee5$(_context5) {
           while (1) {
             switch (_context5.prev = _context5.next) {
               case 0:
-                updatedQuestions = userQuiz.questions;
-                updatedQuestions.forEach(function (question) {
-                  question.result = _userQuiz.UserQuestionState.UNLOCKED;
+                updatedQuestions = userQuiz.questions.map(function (question) {
+                  return _objectSpread(_objectSpread({}, question), {}, {
+                    result: _userQuiz.UserQuestionState.UNLOCKED
+                  });
                 });
                 updatedCustomQuestion = _objectSpread(_objectSpread({}, userQuiz.customQuestion), {}, {
                   result: _userQuiz.UserQuestionState.UNLOCKED
                 });
-                updatedUserQuiz = _objectSpread(_objectSpread({}, userQuiz), {}, {
+                return _context5.abrupt("return", _objectSpread(_objectSpread({}, userQuiz), {}, {
                   customQuestion: updatedCustomQuestion,
                   questions: updatedQuestions,
                   result: 0,
                   state: _userQuiz.UserQuizState.UNLOCKED
-                });
-                return _context5.abrupt("return", updatedUserQuiz);
+                }));
 
-              case 5:
+              case 3:
               case "end":
                 return _context5.stop();
             }
@@ -11144,32 +11146,31 @@ var QuizService = /*#__PURE__*/function () {
     key: "updateUserQuiz",
     value: function () {
       var _updateUserQuiz = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7(userQuiz, questionResult, questionIndex) {
-        var updatedQuestion, _updatedQuestion, quizScoreLimit, updatedUserQuiz;
-
+        var result, updatedQuestions, updatedCustomQuestion;
         return _regenerator.default.wrap(function _callee7$(_context7) {
           while (1) {
             switch (_context7.prev = _context7.next) {
               case 0:
-                if (questionIndex !== undefined) {
-                  updatedQuestion = _objectSpread(_objectSpread({}, userQuiz.questions[questionIndex]), {}, {
-                    result: questionResult ? _userQuiz.UserQuestionState.CORRECT : _userQuiz.UserQuestionState.UNCORRECT
-                  });
-                  userQuiz.questions[questionIndex] = updatedQuestion;
-                } else {
-                  _updatedQuestion = _objectSpread(_objectSpread({}, userQuiz.customQuestion), {}, {
-                    result: questionResult ? _userQuiz.UserQuestionState.CORRECT : _userQuiz.UserQuestionState.UNCORRECT
-                  });
-                  userQuiz.customQuestion = _updatedQuestion;
-                }
+                result = questionResult ? _userQuiz.UserQuestionState.CORRECT : _userQuiz.UserQuestionState.UNCORRECT;
+                updatedQuestions = userQuiz.questions.map(function (question, index) {
+                  if (index === questionIndex) {
+                    return _objectSpread(_objectSpread({}, question), {}, {
+                      result: result
+                    });
+                  }
 
-                quizScoreLimit = userQuiz.result;
-                quizScoreLimit = quizScoreLimit + 1 > 5 ? 5 : quizScoreLimit + 1;
-                updatedUserQuiz = _objectSpread(_objectSpread({}, userQuiz), {}, {
-                  result: questionResult ? quizScoreLimit : userQuiz.result
+                  return question;
                 });
-                return _context7.abrupt("return", updatedUserQuiz);
+                updatedCustomQuestion = _objectSpread(_objectSpread({}, userQuiz.customQuestion), {}, {
+                  result: result
+                });
+                return _context7.abrupt("return", _objectSpread(_objectSpread({}, userQuiz), {}, {
+                  questions: updatedQuestions,
+                  customQuestion: questionIndex === undefined ? updatedCustomQuestion : userQuiz.customQuestion,
+                  result: questionResult ? Math.min(userQuiz.result + 1, 5) : userQuiz.result
+                }));
 
-              case 5:
+              case 4:
               case "end":
                 return _context7.stop();
             }
@@ -13719,6 +13720,105 @@ if(false) {}
 
 /***/ }),
 
+/***/ "F6Xr":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _interopRequireDefault = __webpack_require__("TqRt");
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.updateUserChallengeList = exports.unlockNextUserChallenge = exports.setUserChallengeList = exports.setChallengeConsumption = exports.challengeSlice = void 0;
+
+var _defineProperty2 = _interopRequireDefault(__webpack_require__("lSNA"));
+
+var _toConsumableArray2 = _interopRequireDefault(__webpack_require__("RIqP"));
+
+var _toolkit = __webpack_require__("i7Pf");
+
+var _userChallenge = __webpack_require__("dQx6");
+
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
+
+var initialState = {
+  userChallengeList: [],
+  currentChallenge: null,
+  currentDataload: []
+};
+var challengeSlice = (0, _toolkit.createSlice)({
+  name: 'challenge',
+  initialState: initialState,
+  reducers: {
+    setUserChallengeList: function setUserChallengeList(state, action) {
+      var filteredCurrentChallenge = action.payload.filter(function (challenge) {
+        return challenge.state === _userChallenge.UserChallengeState.ONGOING || challenge.state === _userChallenge.UserChallengeState.DUEL;
+      });
+      var currentChallenge = filteredCurrentChallenge[0] || null;
+      state.userChallengeList = action.payload;
+      state.currentChallenge = currentChallenge;
+    },
+    updateUserChallengeList: function updateUserChallengeList(state, action) {
+      var id = action.payload.id;
+      var currentChallenge = action.payload.state === _userChallenge.UserChallengeState.ONGOING || action.payload.state === _userChallenge.UserChallengeState.DUEL ? action.payload : null;
+      var updatedList = (0, _toConsumableArray2.default)(state.userChallengeList);
+      var findIndex = updatedList.findIndex(function (challenge) {
+        return challenge.id === id;
+      });
+      updatedList[findIndex] = action.payload;
+      state.userChallengeList = updatedList;
+      state.currentChallenge = currentChallenge || state.currentChallenge;
+    },
+    unlockNextUserChallenge: function unlockNextUserChallenge(state, action) {
+      var id = action.payload.id;
+      var updatedList = (0, _toConsumableArray2.default)(state.userChallengeList);
+      var findIndex = updatedList.findIndex(function (challenge) {
+        return challenge.id === id;
+      });
+      updatedList[findIndex] = action.payload;
+
+      if (typeof updatedList[findIndex + 1] !== 'undefined') {
+        updatedList[findIndex + 1] = _objectSpread(_objectSpread({}, updatedList[findIndex + 1]), {}, {
+          state: _userChallenge.UserChallengeState.UNLOCKED
+        });
+      }
+
+      state.userChallengeList = updatedList;
+      state.currentChallenge = null;
+    },
+    setChallengeConsumption: function setChallengeConsumption(state, action) {
+      var id = action.payload.userChallenge.id;
+      var updatedList = (0, _toConsumableArray2.default)(state.userChallengeList);
+      var findIndex = updatedList.findIndex(function (challenge) {
+        return challenge.id === id;
+      });
+      updatedList[findIndex] = action.payload.userChallenge;
+      state.userChallengeList = updatedList;
+      state.currentDataload = action.payload.currentDataload;
+
+      if (state.currentChallenge && state.currentChallenge.id === action.payload.userChallenge.id) {
+        state.currentChallenge = action.payload.userChallenge;
+      }
+    }
+  }
+});
+exports.challengeSlice = challengeSlice;
+var _challengeSlice$actio = challengeSlice.actions,
+    setChallengeConsumption = _challengeSlice$actio.setChallengeConsumption,
+    setUserChallengeList = _challengeSlice$actio.setUserChallengeList,
+    unlockNextUserChallenge = _challengeSlice$actio.unlockNextUserChallenge,
+    updateUserChallengeList = _challengeSlice$actio.updateUserChallengeList;
+exports.updateUserChallengeList = updateUserChallengeList;
+exports.unlockNextUserChallenge = unlockNextUserChallenge;
+exports.setUserChallengeList = setUserChallengeList;
+exports.setChallengeConsumption = setChallengeConsumption;
+
+/***/ }),
+
 /***/ "FCQH":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -14000,7 +14100,7 @@ var _reactRouterDom = __webpack_require__("SOjZ");
 
 var _challenge = _interopRequireDefault(__webpack_require__("kdea"));
 
-var _challenge2 = __webpack_require__("ojwR");
+var _challenge2 = __webpack_require__("F6Xr");
 
 var _utils = __webpack_require__("c+yx");
 
@@ -17560,7 +17660,7 @@ var _challenge = _interopRequireDefault(__webpack_require__("kdea"));
 
 var _quiz = _interopRequireDefault(__webpack_require__("CUhI"));
 
-var _challenge2 = __webpack_require__("ojwR");
+var _challenge2 = __webpack_require__("F6Xr");
 
 __webpack_require__("mFBf");
 
@@ -17748,7 +17848,7 @@ var _reactRouterDom = __webpack_require__("SOjZ");
 
 var _challenge = _interopRequireDefault(__webpack_require__("kdea"));
 
-var _challenge2 = __webpack_require__("ojwR");
+var _challenge2 = __webpack_require__("F6Xr");
 
 __webpack_require__("Giwf");
 
@@ -19109,7 +19209,7 @@ var _challenge = _interopRequireDefault(__webpack_require__("kdea"));
 
 var _usageEvent2 = _interopRequireDefault(__webpack_require__("dECN"));
 
-var _challenge2 = __webpack_require__("ojwR");
+var _challenge2 = __webpack_require__("F6Xr");
 
 var _utils = __webpack_require__("c+yx");
 
@@ -19160,7 +19260,10 @@ var DuelUnlocked = function DuelUnlocked(_ref) {
             });
 
           case 9:
-            dispatch((0, _challenge2.setChallengeConsumption)(updatedChallenge, dataloads));
+            dispatch((0, _challenge2.setChallengeConsumption)({
+              userChallenge: updatedChallenge,
+              currentDataload: dataloads
+            }));
 
           case 10:
           case "end":
@@ -19260,127 +19363,6 @@ var result = _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WE
 
 /***/ }),
 
-/***/ "TYd+":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var _interopRequireDefault = __webpack_require__("TqRt");
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.challengeReducer = void 0;
-
-var _toConsumableArray2 = _interopRequireDefault(__webpack_require__("RIqP"));
-
-var _defineProperty2 = _interopRequireDefault(__webpack_require__("lSNA"));
-
-var _userChallenge = __webpack_require__("dQx6");
-
-var _challenge = __webpack_require__("ojwR");
-
-function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
-
-function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
-
-var initialState = {
-  userChallengeList: [],
-  currentChallenge: null,
-  currentDataload: []
-};
-
-var challengeReducer = function challengeReducer() {
-  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
-  var action = arguments.length > 1 ? arguments[1] : undefined;
-  if (action.payload == undefined) return state;
-
-  var updateState = function updateState(updates) {
-    return _objectSpread(_objectSpread({}, state), updates);
-  };
-
-  switch (action.type) {
-    case _challenge.SET_USER_CHALLENGE_LIST:
-      {
-        var filteredCurrentChallenge = action.payload.filter(function (challenge) {
-          return challenge.state === _userChallenge.UserChallengeState.ONGOING || challenge.state === _userChallenge.UserChallengeState.DUEL;
-        });
-        var currentChallenge = filteredCurrentChallenge[0] || null;
-        return updateState({
-          userChallengeList: action.payload,
-          currentChallenge: currentChallenge
-        });
-      }
-
-    case _challenge.UPDATE_USER_CHALLENGE_LIST:
-      {
-        var id = action.payload.id;
-
-        var _currentChallenge = action.payload.state === _userChallenge.UserChallengeState.ONGOING || action.payload.state === _userChallenge.UserChallengeState.DUEL ? action.payload : null;
-
-        var updatedList = (0, _toConsumableArray2.default)(state.userChallengeList);
-        var findIndex = updatedList.findIndex(function (challenge) {
-          return challenge.id === id;
-        });
-        updatedList[findIndex] = action.payload;
-        return updateState({
-          userChallengeList: updatedList,
-          currentChallenge: _currentChallenge || state.currentChallenge
-        });
-      }
-
-    case _challenge.UNLOCK_NEXT_USER_CHALLENGE:
-      {
-        var _id = action.payload.id;
-
-        var _updatedList = (0, _toConsumableArray2.default)(state.userChallengeList);
-
-        var _findIndex = _updatedList.findIndex(function (challenge) {
-          return challenge.id === _id;
-        });
-
-        _updatedList[_findIndex] = action.payload;
-
-        if (typeof _updatedList[_findIndex + 1] !== 'undefined') {
-          _updatedList[_findIndex + 1] = _objectSpread(_objectSpread({}, _updatedList[_findIndex + 1]), {}, {
-            state: _userChallenge.UserChallengeState.UNLOCKED
-          });
-        }
-
-        return updateState({
-          userChallengeList: _updatedList,
-          currentChallenge: null
-        });
-      }
-
-    case _challenge.SET_CHALLENGE_CONSUMPTION:
-      {
-        var _id2 = action.payload.userChallenge.id;
-
-        var _updatedList2 = (0, _toConsumableArray2.default)(state.userChallengeList);
-
-        var _findIndex2 = _updatedList2.findIndex(function (challenge) {
-          return challenge.id === _id2;
-        });
-
-        _updatedList2[_findIndex2] = action.payload.userChallenge;
-        return updateState({
-          userChallengeList: _updatedList2,
-          currentChallenge: state.currentChallenge && state.currentChallenge.id === action.payload.userChallenge.id ? action.payload.userChallenge : state.currentChallenge,
-          currentDataload: action.payload.currentDataload
-        });
-      }
-
-    default:
-      return state;
-  }
-};
-
-exports.challengeReducer = challengeReducer;
-
-/***/ }),
-
 /***/ "Tg1I":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -26995,7 +26977,7 @@ var _challenge = _interopRequireDefault(__webpack_require__("kdea"));
 
 var _usageEvent2 = _interopRequireDefault(__webpack_require__("dECN"));
 
-var _challenge2 = __webpack_require__("ojwR");
+var _challenge2 = __webpack_require__("F6Xr");
 
 var _global = __webpack_require__("c4IZ");
 
@@ -28606,18 +28588,23 @@ var _react = _interopRequireDefault(__webpack_require__("q1tI"));
 
 var _reactRedux = __webpack_require__("/MKj");
 
-var DuelBar = function DuelBar(props) {
-  var _ref = props,
-      userChallenge = _ref.userChallenge,
+var DuelBar = function DuelBar(_ref) {
+  var userChallenge = _ref.userChallenge,
       finishedDataLoad = _ref.finishedDataLoad,
       timeStep = _ref.timeStep,
       average = _ref.average,
-      width = _ref.width,
-      height = _ref.height,
-      marginLeft = _ref.marginLeft,
-      marginRight = _ref.marginRight,
-      marginTop = _ref.marginTop,
-      marginBottom = _ref.marginBottom;
+      _ref$width = _ref.width,
+      width = _ref$width === void 0 ? 600 : _ref$width,
+      _ref$height = _ref.height,
+      height = _ref$height === void 0 ? 400 : _ref$height,
+      _ref$marginLeft = _ref.marginLeft,
+      marginLeft = _ref$marginLeft === void 0 ? 10 : _ref$marginLeft,
+      _ref$marginRight = _ref.marginRight,
+      marginRight = _ref$marginRight === void 0 ? 50 : _ref$marginRight,
+      _ref$marginTop = _ref.marginTop,
+      marginTop = _ref$marginTop === void 0 ? 20 : _ref$marginTop,
+      _ref$marginBottom = _ref.marginBottom,
+      marginBottom = _ref$marginBottom === void 0 ? 50 : _ref$marginBottom;
 
   var _useSelector = (0, _reactRedux.useSelector)(function (state) {
     return state.ecolyo.challenge;
@@ -28724,14 +28711,6 @@ var DuelBar = function DuelBar(props) {
   }));
 };
 
-DuelBar.defaultProps = {
-  width: 600,
-  height: 400,
-  marginLeft: 10,
-  marginRight: 50,
-  marginTop: 20,
-  marginBottom: 50
-};
 var _default = DuelBar;
 exports.default = _default;
 
@@ -30348,33 +30327,37 @@ var ChallengeService = /*#__PURE__*/function () {
     key: "startUserChallenge",
     value: function () {
       var _startUserChallenge = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11(userChallenge) {
-        var _yield$this$_client$c, updatedUserChallengeEntity, updatedUserChallenge, errorMessage;
+        var newChallenge, _yield$this$_client$c, updatedUserChallengeEntity, updatedUserChallenge, errorMessage;
 
         return _regenerator.default.wrap(function _callee11$(_context12) {
           while (1) {
             switch (_context12.prev = _context12.next) {
               case 0:
-                userChallenge.state = _userChallenge3.UserChallengeState.ONGOING;
-                userChallenge.progress.actionProgress = 0;
-                userChallenge.progress.explorationProgress = 0;
-                userChallenge.progress.quizProgress = 0;
-                userChallenge.startDate = _luxon.DateTime.local().setZone('utc', {
-                  keepLocalTime: true
-                }).startOf('day');
-                userChallenge.success = _userChallenge3.UserChallengeSuccess.ONGOING;
-                _context12.prev = 6;
-                _context12.next = 9;
-                return this._client.create(_doctypes.USERCHALLENGE_DOCTYPE, userChallenge);
+                newChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
+                  state: _userChallenge3.UserChallengeState.ONGOING,
+                  progress: {
+                    actionProgress: 0,
+                    explorationProgress: 0,
+                    quizProgress: 0
+                  },
+                  startDate: _luxon.DateTime.local().setZone('utc', {
+                    keepLocalTime: true
+                  }).startOf('day'),
+                  success: _userChallenge3.UserChallengeSuccess.ONGOING
+                });
+                _context12.prev = 1;
+                _context12.next = 4;
+                return this._client.create(_doctypes.USERCHALLENGE_DOCTYPE, newChallenge);
 
-              case 9:
+              case 4:
                 _yield$this$_client$c = _context12.sent;
                 updatedUserChallengeEntity = _yield$this$_client$c.data;
                 updatedUserChallenge = this.parseUserChallengeEntityToUserChallenge(updatedUserChallengeEntity);
                 return _context12.abrupt("return", updatedUserChallenge);
 
-              case 15:
-                _context12.prev = 15;
-                _context12.t0 = _context12["catch"](6);
+              case 10:
+                _context12.prev = 10;
+                _context12.t0 = _context12["catch"](1);
                 errorMessage = "Challenge service error on startUserChallenge: ".concat(JSON.stringify(_context12.t0));
                 logStack('error', errorMessage);
 
@@ -30383,12 +30366,12 @@ var ChallengeService = /*#__PURE__*/function () {
                 Sentry.captureException(errorMessage);
                 throw _context12.t0;
 
-              case 22:
+              case 17:
               case "end":
                 return _context12.stop();
             }
           }
-        }, _callee11, this, [[6, 15]]);
+        }, _callee11, this, [[1, 10]]);
       }));
 
       function startUserChallenge(_x21) {
@@ -30409,7 +30392,7 @@ var ChallengeService = /*#__PURE__*/function () {
     key: "updateUserChallenge",
     value: function () {
       var _updateUserChallenge = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee12(userChallenge, flag, quizWithUpdatedQuestions, fluidStatus, action) {
-        var updatedUserChallenge, updatedDuel, updatedQuiz, updatedExploration, updatedAction, duelService, quizService, explorationService, actionService, userAction, _yield$this$_client$s, userChallengeEntity, result, errorMessage;
+        var updatedUserChallenge, updatedDuel, updatedQuiz, updatedExploration, updatedAction, duelService, quizService, explorationService, actionService, updateQuizProgress, userAction, _yield$this$_client$s, userChallengeEntity, result, errorMessage;
 
         return _regenerator.default.wrap(function _callee12$(_context13) {
           while (1) {
@@ -30424,12 +30407,12 @@ var ChallengeService = /*#__PURE__*/function () {
                 explorationService = new _exploration.default(this._client);
                 actionService = new _action.default(this._client);
                 _context13.t0 = flag;
-                _context13.next = _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.CHALLENGE ? 11 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.DUEL_CONSUMPTION ? 11 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.DUEL_UNLOCK ? 13 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.DUEL_UPDATE_THRESHOLD ? 18 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.DUEL_START ? 23 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.DUEL_WIN ? 28 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.DUEL_LOSS ? 33 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.QUIZ_START ? 38 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.QUIZ_DONE ? 43 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.QUIZ_UPDATE ? 50 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.QUIZ_RESET ? 52 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.EXPLORATION_START ? 57 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.EXPLORATION_UPDATE ? 62 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.EXPLORATION_NOTIFICATION ? 67 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.EXPLORATION_DONE ? 72 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.ACTION_START ? 75 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.ACTION_NOTIFICATION ? 79 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.ACTION_DONE ? 82 : 85;
+                _context13.next = _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.CHALLENGE ? 11 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.DUEL_CONSUMPTION ? 11 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.DUEL_UNLOCK ? 13 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.DUEL_UPDATE_THRESHOLD ? 18 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.DUEL_START ? 23 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.DUEL_WIN ? 28 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.DUEL_LOSS ? 33 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.QUIZ_START ? 38 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.QUIZ_DONE ? 43 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.QUIZ_UPDATE ? 49 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.QUIZ_RESET ? 51 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.EXPLORATION_START ? 56 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.EXPLORATION_UPDATE ? 61 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.EXPLORATION_NOTIFICATION ? 66 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.EXPLORATION_DONE ? 71 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.ACTION_START ? 74 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.ACTION_NOTIFICATION ? 78 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.ACTION_DONE ? 81 : 84;
                 break;
 
               case 11:
                 updatedUserChallenge = userChallenge;
-                return _context13.abrupt("break", 87);
+                return _context13.abrupt("break", 86);
 
               case 13:
                 _context13.next = 15;
@@ -30441,7 +30424,7 @@ var ChallengeService = /*#__PURE__*/function () {
                   state: _userChallenge3.UserChallengeState.DUEL,
                   duel: updatedDuel
                 });
-                return _context13.abrupt("break", 87);
+                return _context13.abrupt("break", 86);
 
               case 18:
                 _context13.next = 20;
@@ -30453,7 +30436,7 @@ var ChallengeService = /*#__PURE__*/function () {
                   state: _userChallenge3.UserChallengeState.DUEL,
                   duel: updatedDuel
                 });
-                return _context13.abrupt("break", 87);
+                return _context13.abrupt("break", 86);
 
               case 23:
                 _context13.next = 25;
@@ -30465,7 +30448,7 @@ var ChallengeService = /*#__PURE__*/function () {
                   state: _userChallenge3.UserChallengeState.DUEL,
                   duel: updatedDuel
                 });
-                return _context13.abrupt("break", 87);
+                return _context13.abrupt("break", 86);
 
               case 28:
                 _context13.next = 30;
@@ -30481,7 +30464,7 @@ var ChallengeService = /*#__PURE__*/function () {
                   }).startOf('day'),
                   success: _userChallenge3.UserChallengeSuccess.WIN
                 });
-                return _context13.abrupt("break", 87);
+                return _context13.abrupt("break", 86);
 
               case 33:
                 _context13.next = 35;
@@ -30497,7 +30480,7 @@ var ChallengeService = /*#__PURE__*/function () {
                   }).startOf('day'),
                   success: _userChallenge3.UserChallengeSuccess.LOST
                 });
-                return _context13.abrupt("break", 87);
+                return _context13.abrupt("break", 86);
 
               case 38:
                 _context13.next = 40;
@@ -30508,78 +30491,74 @@ var ChallengeService = /*#__PURE__*/function () {
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   quiz: updatedQuiz
                 });
-                return _context13.abrupt("break", 87);
+                return _context13.abrupt("break", 86);
 
               case 43:
-                if (userChallenge.quiz.result > userChallenge.progress.quizProgress) {
-                  userChallenge.progress.quizProgress = userChallenge.quiz.result;
-                }
-
-                if (userChallenge.progress.quizProgress > 5) {
-                  userChallenge.progress.quizProgress = 5;
-                }
-
-                _context13.next = 47;
+                updateQuizProgress = Math.min(userChallenge.quiz.result, 5);
+                _context13.next = 46;
                 return quizService.endUserQuiz(userChallenge.quiz);
 
-              case 47:
+              case 46:
                 updatedQuiz = _context13.sent;
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
-                  quiz: updatedQuiz
+                  quiz: updatedQuiz,
+                  progress: _objectSpread(_objectSpread({}, userChallenge.progress), {}, {
+                    quizProgress: updateQuizProgress
+                  })
                 });
-                return _context13.abrupt("break", 87);
+                return _context13.abrupt("break", 86);
 
-              case 50:
+              case 49:
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   quiz: quizWithUpdatedQuestions ? quizWithUpdatedQuestions : userChallenge.quiz
                 });
-                return _context13.abrupt("break", 87);
+                return _context13.abrupt("break", 86);
 
-              case 52:
-                _context13.next = 54;
+              case 51:
+                _context13.next = 53;
                 return quizService.resetUserQuiz(userChallenge.quiz);
 
-              case 54:
+              case 53:
                 updatedQuiz = _context13.sent;
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   quiz: updatedQuiz
                 });
-                return _context13.abrupt("break", 87);
+                return _context13.abrupt("break", 86);
 
-              case 57:
-                _context13.next = 59;
+              case 56:
+                _context13.next = 58;
                 return explorationService.startUserExploration(userChallenge.exploration);
 
-              case 59:
+              case 58:
                 updatedExploration = _context13.sent;
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   exploration: updatedExploration
                 });
-                return _context13.abrupt("break", 87);
+                return _context13.abrupt("break", 86);
 
-              case 62:
-                _context13.next = 64;
+              case 61:
+                _context13.next = 63;
                 return explorationService.updateUserExploration(userChallenge.exploration);
 
-              case 64:
+              case 63:
                 updatedExploration = _context13.sent;
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   exploration: updatedExploration
                 });
-                return _context13.abrupt("break", 87);
+                return _context13.abrupt("break", 86);
 
-              case 67:
-                _context13.next = 69;
+              case 66:
+                _context13.next = 68;
                 return explorationService.awaitNotificationUserExploration(userChallenge.exploration);
 
-              case 69:
+              case 68:
                 updatedExploration = _context13.sent;
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   exploration: updatedExploration
                 });
-                return _context13.abrupt("break", 87);
+                return _context13.abrupt("break", 86);
 
-              case 72:
+              case 71:
                 updatedExploration = explorationService.endUserExploration(userChallenge.exploration);
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   exploration: updatedExploration,
@@ -30587,9 +30566,9 @@ var ChallengeService = /*#__PURE__*/function () {
                     explorationProgress: updatedExploration.progress
                   })
                 });
-                return _context13.abrupt("break", 87);
+                return _context13.abrupt("break", 86);
 
-              case 75:
+              case 74:
                 userAction = userChallenge.action;
 
                 if (action) {
@@ -30599,16 +30578,16 @@ var ChallengeService = /*#__PURE__*/function () {
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   action: userAction
                 });
-                return _context13.abrupt("break", 87);
+                return _context13.abrupt("break", 86);
 
-              case 79:
+              case 78:
                 updatedAction = actionService.awaitNotificationAction(userChallenge.action);
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   action: updatedAction
                 });
-                return _context13.abrupt("break", 87);
+                return _context13.abrupt("break", 86);
 
-              case 82:
+              case 81:
                 updatedAction = actionService.endAction(userChallenge.action);
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   action: updatedAction,
@@ -30616,26 +30595,26 @@ var ChallengeService = /*#__PURE__*/function () {
                     actionProgress: 5
                   })
                 });
-                return _context13.abrupt("break", 87);
+                return _context13.abrupt("break", 86);
 
-              case 85:
+              case 84:
                 updatedUserChallenge = userChallenge;
-                return _context13.abrupt("break", 87);
+                return _context13.abrupt("break", 86);
 
-              case 87:
-                _context13.prev = 87;
-                _context13.next = 90;
+              case 86:
+                _context13.prev = 86;
+                _context13.next = 89;
                 return this._client.save(updatedUserChallenge);
 
-              case 90:
+              case 89:
                 _yield$this$_client$s = _context13.sent;
                 userChallengeEntity = _yield$this$_client$s.data;
                 result = this.parseUserChallengeEntityToUserChallenge(userChallengeEntity);
                 return _context13.abrupt("return", result);
 
-              case 96:
-                _context13.prev = 96;
-                _context13.t1 = _context13["catch"](87);
+              case 95:
+                _context13.prev = 95;
+                _context13.t1 = _context13["catch"](86);
                 errorMessage = "Update user challenge error: ".concat(JSON.stringify(_context13.t1));
                 logStack('error', errorMessage);
 
@@ -30644,12 +30623,12 @@ var ChallengeService = /*#__PURE__*/function () {
                 Sentry.captureException(errorMessage);
                 throw _context13.t1;
 
-              case 103:
+              case 102:
               case "end":
                 return _context13.stop();
             }
           }
-        }, _callee12, this, [[87, 96]]);
+        }, _callee12, this, [[86, 95]]);
       }));
 
       function updateUserChallenge(_x22, _x23, _x24, _x25, _x26) {
@@ -30986,7 +30965,7 @@ var _reactRedux = __webpack_require__("/MKj");
 
 var _challenge = _interopRequireDefault(__webpack_require__("kdea"));
 
-var _challenge2 = __webpack_require__("ojwR");
+var _challenge2 = __webpack_require__("F6Xr");
 
 __webpack_require__("HvHZ");
 
@@ -31993,7 +31972,7 @@ var _challenge = _interopRequireDefault(__webpack_require__("kdea"));
 
 var _usageEvent2 = _interopRequireDefault(__webpack_require__("dECN"));
 
-var _challenge2 = __webpack_require__("ojwR");
+var _challenge2 = __webpack_require__("F6Xr");
 
 var _global = __webpack_require__("c4IZ");
 
@@ -32743,62 +32722,6 @@ exports.openFeedbackModal = openFeedbackModal;
 
 /***/ }),
 
-/***/ "ojwR":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.UPDATE_USER_CHALLENGE_LIST = exports.UNLOCK_NEXT_USER_CHALLENGE = exports.SET_USER_CHALLENGE_LIST = exports.SET_CHALLENGE_CONSUMPTION = void 0;
-exports.setChallengeConsumption = setChallengeConsumption;
-exports.setUserChallengeList = setUserChallengeList;
-exports.unlockNextUserChallenge = unlockNextUserChallenge;
-exports.updateUserChallengeList = updateUserChallengeList;
-var SET_USER_CHALLENGE_LIST = 'SET_USER_CHALLENGE_LIST';
-exports.SET_USER_CHALLENGE_LIST = SET_USER_CHALLENGE_LIST;
-var UPDATE_USER_CHALLENGE_LIST = 'UPDATE_USER_CHALLENGE_LIST';
-exports.UPDATE_USER_CHALLENGE_LIST = UPDATE_USER_CHALLENGE_LIST;
-var UNLOCK_NEXT_USER_CHALLENGE = 'UNLOCK_NEXT_USER_CHALLENGE';
-exports.UNLOCK_NEXT_USER_CHALLENGE = UNLOCK_NEXT_USER_CHALLENGE;
-var SET_CHALLENGE_CONSUMPTION = 'SET_CHALLENGE_CONSUMPTION';
-exports.SET_CHALLENGE_CONSUMPTION = SET_CHALLENGE_CONSUMPTION;
-
-function setUserChallengeList(userChallengeList) {
-  return {
-    type: SET_USER_CHALLENGE_LIST,
-    payload: userChallengeList
-  };
-}
-
-function updateUserChallengeList(userChallenge) {
-  return {
-    type: UPDATE_USER_CHALLENGE_LIST,
-    payload: userChallenge
-  };
-}
-
-function unlockNextUserChallenge(userChallenge) {
-  return {
-    type: UNLOCK_NEXT_USER_CHALLENGE,
-    payload: userChallenge
-  };
-}
-
-function setChallengeConsumption(userChallenge, currentDataload) {
-  return {
-    type: SET_CHALLENGE_CONSUMPTION,
-    payload: {
-      userChallenge: userChallenge,
-      currentDataload: currentDataload
-    }
-  };
-}
-
-/***/ }),
-
 /***/ "ovFf":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -33001,7 +32924,6 @@ var UncomingBar = function UncomingBar(_ref) {
       yScale = _ref.yScale,
       height = _ref.height,
       average = _ref.average;
-  dataload.value = average;
 
   var _useState = (0, _react.useState)(false),
       _useState2 = (0, _slicedToArray2.default)(_useState, 2),
@@ -33034,10 +32956,10 @@ var UncomingBar = function UncomingBar(_ref) {
     height: height + 40,
     className: "background-false",
     fill: "#E0E0E0"
-  })), height > 0 && dataload.value >= 0 && /*#__PURE__*/_react.default.createElement("g", {
-    transform: "translate(".concat(xScale(dataload.date.toLocaleString(_luxon.DateTime.DATETIME_SHORT)), ", ").concat(yScale(dataload.value), ")")
+  })), height > 0 && average >= 0 && /*#__PURE__*/_react.default.createElement("g", {
+    transform: "translate(".concat(xScale(dataload.date.toLocaleString(_luxon.DateTime.DATETIME_SHORT)), ", ").concat(yScale(average), ")")
   }, /*#__PURE__*/_react.default.createElement("path", {
-    d: topRoundedRectDashedLine(0, 0, getBandWidth(), height - yScale(dataload.value)),
+    d: topRoundedRectDashedLine(0, 0, getBandWidth(), height - yScale(average)),
     fill: "url(#gradient)",
     strokeDasharray: "5",
     stroke: '#61f0f2',
@@ -33696,7 +33618,7 @@ var _challenge = _interopRequireDefault(__webpack_require__("kdea"));
 
 var _usageEvent2 = _interopRequireDefault(__webpack_require__("dECN"));
 
-var _challenge2 = __webpack_require__("ojwR");
+var _challenge2 = __webpack_require__("F6Xr");
 
 __webpack_require__("1RIw");
 
@@ -34088,7 +34010,7 @@ var _reactRedux = __webpack_require__("/MKj");
 
 var _exploration = _interopRequireDefault(__webpack_require__("z8s1"));
 
-var _challenge = __webpack_require__("ojwR");
+var _challenge = __webpack_require__("F6Xr");
 
 var _global = __webpack_require__("c4IZ");
 
@@ -37096,14 +37018,14 @@ var _challenge = _interopRequireDefault(__webpack_require__("kdea"));
 
 var _usageEvent2 = _interopRequireDefault(__webpack_require__("dECN"));
 
-var _challenge2 = __webpack_require__("ojwR");
+var _challenge2 = __webpack_require__("F6Xr");
 
 var _utils = __webpack_require__("c+yx");
 
-__webpack_require__("Layg");
-
 var _ChallengeNoFluidModal = _interopRequireDefault(__webpack_require__("rDu6"));
 
+__webpack_require__("Layg");
+
 function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
 
 function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -37334,7 +37256,7 @@ var _reactRedux = __webpack_require__("/MKj");
 
 var _challenge = _interopRequireDefault(__webpack_require__("kdea"));
 
-var _challenge2 = __webpack_require__("ojwR");
+var _challenge2 = __webpack_require__("F6Xr");
 
 __webpack_require__("8Eoq");
 
diff --git a/index.html b/index.html
index 0802677d8c5a69feaa35c137d5403e6242a5d493..bced72ae60dd5c91180f73f2f5cff26c41838229 100644
--- a/index.html
+++ b/index.html
@@ -1 +1 @@
-<!DOCTYPE html><html lang="{{.Locale}}"><head><meta charset="utf-8"><title>Ecolyo</title><link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32"><link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16"><!-- PWA Manifest --><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#297EF2"><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,viewport-fit=cover"><!-- PWA Chrome --><link rel="icon" sizes="192x192" href="/android-chrome-192x192.png"><link rel="icon" sizes="512x512" href="/android-chrome-512x512.png"><!-- PWA iOS --><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="apple-touch-startup-image" href="/apple-touch-icon.png"><meta name="apple-mobile-web-app-title" content="Ecolyo"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><!-- PWA Colors --><meta name="theme-color" content="#343641"><meta name="background-color" content="#121212">{{.ThemeCSS}} {{.CozyBar}}<script src="//{{.Domain}}/assets/js/piwik.js"></script></head><body><div role="application" class="application" data-cozy="{{.CozyData}}"><script src="vendors/ecolyo.69beab954af56959f24c.js"></script><script src="app/ecolyo.b74e33c668eeadd34a80.js"></script></div></body></html>
\ No newline at end of file
+<!DOCTYPE html><html lang="{{.Locale}}"><head><meta charset="utf-8"><title>Ecolyo</title><link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32"><link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16"><!-- PWA Manifest --><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#297EF2"><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,viewport-fit=cover"><!-- PWA Chrome --><link rel="icon" sizes="192x192" href="/android-chrome-192x192.png"><link rel="icon" sizes="512x512" href="/android-chrome-512x512.png"><!-- PWA iOS --><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="apple-touch-startup-image" href="/apple-touch-icon.png"><meta name="apple-mobile-web-app-title" content="Ecolyo"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><!-- PWA Colors --><meta name="theme-color" content="#343641"><meta name="background-color" content="#121212">{{.ThemeCSS}} {{.CozyBar}}<script src="//{{.Domain}}/assets/js/piwik.js"></script></head><body><div role="application" class="application" data-cozy="{{.CozyData}}"><script src="vendors/ecolyo.69beab954af56959f24c.js"></script><script src="app/ecolyo.2b3ed6912e09b4da5a5f.js"></script></div></body></html>
\ No newline at end of file
diff --git a/services/aggregatorUsageEvents/ecolyo.js b/services/aggregatorUsageEvents/ecolyo.js
index 8fbe381d962fb26e902b58ee97038581d903fbfc..63377266fb67af24d0962f83c7421ae2e36db259 100644
--- a/services/aggregatorUsageEvents/ecolyo.js
+++ b/services/aggregatorUsageEvents/ecolyo.js
@@ -44421,19 +44421,23 @@ class ChallengeService {
 
 
   async startUserChallenge(userChallenge) {
-    userChallenge.state = _userChallenge2.UserChallengeState.ONGOING;
-    userChallenge.progress.actionProgress = 0;
-    userChallenge.progress.explorationProgress = 0;
-    userChallenge.progress.quizProgress = 0;
-    userChallenge.startDate = _luxon.DateTime.local().setZone('utc', {
-      keepLocalTime: true
-    }).startOf('day');
-    userChallenge.success = _userChallenge2.UserChallengeSuccess.ONGOING;
+    const newChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
+      state: _userChallenge2.UserChallengeState.ONGOING,
+      progress: {
+        actionProgress: 0,
+        explorationProgress: 0,
+        quizProgress: 0
+      },
+      startDate: _luxon.DateTime.local().setZone('utc', {
+        keepLocalTime: true
+      }).startOf('day'),
+      success: _userChallenge2.UserChallengeSuccess.ONGOING
+    });
 
     try {
       const {
         data: updatedUserChallengeEntity
-      } = await this._client.create(_doctypes.USERCHALLENGE_DOCTYPE, userChallenge);
+      } = await this._client.create(_doctypes.USERCHALLENGE_DOCTYPE, newChallenge);
       const updatedUserChallenge = this.parseUserChallengeEntityToUserChallenge(updatedUserChallengeEntity);
       return updatedUserChallenge;
     } catch (error) {
@@ -44528,20 +44532,18 @@ class ChallengeService {
         break;
 
       case _userChallenge2.UserChallengeUpdateFlag.QUIZ_DONE:
-        if (userChallenge.quiz.result > userChallenge.progress.quizProgress) {
-          userChallenge.progress.quizProgress = userChallenge.quiz.result;
-        }
-
-        if (userChallenge.progress.quizProgress > 5) {
-          userChallenge.progress.quizProgress = 5;
+        {
+          const updateQuizProgress = Math.min(userChallenge.quiz.result, 5);
+          updatedQuiz = await quizService.endUserQuiz(userChallenge.quiz);
+          updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
+            quiz: updatedQuiz,
+            progress: _objectSpread(_objectSpread({}, userChallenge.progress), {}, {
+              quizProgress: updateQuizProgress
+            })
+          });
+          break;
         }
 
-        updatedQuiz = await quizService.endUserQuiz(userChallenge.quiz);
-        updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
-          quiz: updatedQuiz
-        });
-        break;
-
       case _userChallenge2.UserChallengeUpdateFlag.QUIZ_UPDATE:
         updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
           quiz: quizWithUpdatedQuestions ? quizWithUpdatedQuestions : userChallenge.quiz
@@ -100578,21 +100580,16 @@ class QuizService {
 
 
   async startUserQuiz(userQuiz) {
-    const {
-      questions
-    } = userQuiz;
-    questions.forEach(question => question.answers = (0, _lodash.shuffle)(question.answers));
-    const randomizedQuestions = (0, _lodash.shuffle)(questions);
-
-    const updatedUserQuiz = _objectSpread(_objectSpread({}, userQuiz), {}, {
-      questions: randomizedQuestions,
+    const questions = userQuiz.questions.map(question => _objectSpread(_objectSpread({}, question), {}, {
+      answers: (0, _lodash.shuffle)(question.answers)
+    }));
+    return _objectSpread(_objectSpread({}, userQuiz), {}, {
+      questions: (0, _lodash.shuffle)(questions),
       state: _userQuiz.UserQuizState.ONGOING,
       startDate: _luxon.DateTime.local().setZone('utc', {
         keepLocalTime: true
       })
     });
-
-    return updatedUserQuiz;
   }
   /**
    * Return quiz with updated state to UserQuizState.UNLOCKED and updated questions with false result
@@ -100602,23 +100599,20 @@ class QuizService {
 
 
   async resetUserQuiz(userQuiz) {
-    const updatedQuestions = userQuiz.questions;
-    updatedQuestions.forEach(question => {
-      question.result = _userQuiz.UserQuestionState.UNLOCKED;
-    });
+    const updatedQuestions = userQuiz.questions.map(question => _objectSpread(_objectSpread({}, question), {}, {
+      result: _userQuiz.UserQuestionState.UNLOCKED
+    }));
 
     const updatedCustomQuestion = _objectSpread(_objectSpread({}, userQuiz.customQuestion), {}, {
       result: _userQuiz.UserQuestionState.UNLOCKED
     });
 
-    const updatedUserQuiz = _objectSpread(_objectSpread({}, userQuiz), {}, {
+    return _objectSpread(_objectSpread({}, userQuiz), {}, {
       customQuestion: updatedCustomQuestion,
       questions: updatedQuestions,
       result: 0,
       state: _userQuiz.UserQuizState.UNLOCKED
     });
-
-    return updatedUserQuiz;
   }
   /**
    * Return quiz with updated state to UserQuizState.DONE
@@ -100644,28 +100638,26 @@ class QuizService {
 
 
   async updateUserQuiz(userQuiz, questionResult, questionIndex) {
-    if (questionIndex !== undefined) {
-      const updatedQuestion = _objectSpread(_objectSpread({}, userQuiz.questions[questionIndex]), {}, {
-        result: questionResult ? _userQuiz.UserQuestionState.CORRECT : _userQuiz.UserQuestionState.UNCORRECT
-      });
-
-      userQuiz.questions[questionIndex] = updatedQuestion;
-    } else {
-      const updatedQuestion = _objectSpread(_objectSpread({}, userQuiz.customQuestion), {}, {
-        result: questionResult ? _userQuiz.UserQuestionState.CORRECT : _userQuiz.UserQuestionState.UNCORRECT
-      });
-
-      userQuiz.customQuestion = updatedQuestion;
-    }
+    const result = questionResult ? _userQuiz.UserQuestionState.CORRECT : _userQuiz.UserQuestionState.UNCORRECT;
+    const updatedQuestions = userQuiz.questions.map((question, index) => {
+      if (index === questionIndex) {
+        return _objectSpread(_objectSpread({}, question), {}, {
+          result: result
+        });
+      }
 
-    let quizScoreLimit = userQuiz.result;
-    quizScoreLimit = quizScoreLimit + 1 > 5 ? 5 : quizScoreLimit + 1;
+      return question;
+    });
 
-    const updatedUserQuiz = _objectSpread(_objectSpread({}, userQuiz), {}, {
-      result: questionResult ? quizScoreLimit : userQuiz.result
+    const updatedCustomQuestion = _objectSpread(_objectSpread({}, userQuiz.customQuestion), {}, {
+      result: result
     });
 
-    return updatedUserQuiz;
+    return _objectSpread(_objectSpread({}, userQuiz), {}, {
+      questions: updatedQuestions,
+      customQuestion: questionIndex === undefined ? updatedCustomQuestion : userQuiz.customQuestion,
+      result: questionResult ? Math.min(userQuiz.result + 1, 5) : userQuiz.result
+    });
   }
   /**
    * Build a custom question with the customQuestionEntity