code: function send_all_trees(lcodes, dcodes, blcodes) { // number of codes for each tree
  		var rank; // index in bl_order
  
  		// Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
  		// Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, "too many codes");
  		// Tracev((stderr, "\nbl counts: "));
  		send_bits(lcodes - 257, 5); // not +255 as stated in appnote.txt
  		send_bits(dcodes - 1,   5);
  		send_bits(blcodes - 4,  4); // not -3 as stated in appnote.txt
  		for (rank = 0; rank < blcodes; rank++) {
  			// Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
  			send_bits(bl_tree[bl_order[rank]].dl, 3);
  		}
  
  		// send the literal tree
  		send_tree(dyn_ltree, lcodes - 1);
  
  		// send the distance tree
  		send_tree(dyn_dtree, dcodes - 1);
  	}
docs: /* ==========================================================================
  Send the header for a block using dynamic Huffman trees: the counts, the
  lengths of the bit length codes, the literal tree and the distance tree.
  IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.