message: Set blueprint hint dynamic based on associated product
  (contains workarounds to avoid incompatible release)
diff: @@ -493,11 +493,18 @@ function createChallenges () {
  category: 'Forgotten Content',
  description: 'Deprive the shop of earnings by downloading the blueprint for one of its products.',
  difficulty: 3,
  - hint: addHint('You probably need to find out which product this challenge is all about to gain some leverage on it.'),
  + hint: addHint('Property \'fileForRetrieveBlueprintChallenge\' is missing in your Juice Shop config! With v5.0 this challenge would not work any more. For now: Try finding \'JuiceShop.stl\' somewhere.'),
  hintUrl: addHint('https://bkimminich.gitbooks.io/pwning-owasp-juice-shop/content/part2/forgotten-content.html#deprive-the-shop-of-earnings-by-downloading-the-blueprint-for-one-of-its-products'),
  solved: false
  }).success(function (challenge) {
  challenges.retrieveBlueprintChallenge = challenge
  + for (var i = 0; i < config.get('products').length; i++) { // TODO remove this workaround default before v5.0 release
  + var product = config.get('products')[ i ]
  + if (product.fileForRetrieveBlueprintChallenge) {
  + models.sequelize.query('UPDATE Challenges SET hint = \'The product you might want to give a closer look is the ' + product.name + '\' WHERE id = ' + challenge.id)
  + break
  + }
  + }
  })
  }
  @@ -614,6 +621,9 @@ function createProducts () {
  }
  })
  }
  + if (!datacache.retrieveBlueprintChallengeFile) { // TODO remove this workaround default before v5.0 release
  + datacache.retrieveBlueprintChallengeFile = 'JuiceShop.stl'
  + }
  }
  function createBaskets () {
  