code: func manifestUpdate(ctx *cli.Context) {
  	args := ctx.Args()
  	if len(args) != 3 {
  		utils.Fatalf("Need exactly three arguments <MHASH> <path> <HASH>")
  	}
  
  	var (
  		mhash = args[0]
  		path  = args[1]
  		hash  = args[2]
  	)
  
  	bzzapi := strings.TrimRight(ctx.GlobalString(SwarmApiFlag.Name), "/")
  	client := swarm.NewClient(bzzapi)
  
  	m, _, err := client.DownloadManifest(hash)
  	if err != nil {
  		utils.Fatalf("Error downloading manifest to update: %v", err)
  	}
  	l := len(m.Entries)
  	if l == 0 {
  		utils.Fatalf("No entries in manifest %s", hash)
  	} else if l > 1 {
  		utils.Fatalf("Too many entries in manifest %s", hash)
  	}
  
  	newManifest, _, defaultEntryUpdated := updateEntryInManifest(client, mhash, path, m.Entries[0], true)
  	if defaultEntryUpdated {
  		// Print informational message to stderr
  		// allowing the user to get the new manifest hash from stdout
  		// without the need to parse the complete output.
  		fmt.Fprintln(os.Stderr, "Manifest default entry is updated, too")
  	}
  	fmt.Println(newManifest)
  }
docs: // manifestUpdate replaces an existing entry of the manifest at the given path.
  // New entry hash, the last argument, must be the hash of a manifest
  // with only one entry, which meta-data will be added to the original manifest.
  // On success, this function will print hash of the updated manifest.