code: public static byte[] build(Blueprint blueprint) {
          // First 42 bits are the timestamp.
          // [0] TTTTTTTT [1] TTTTTTTT [2] TTTTTTTT [3] TTTTTTTT [4] TTTTTTTT [5] TT......
          ByteBuffer bb = ByteBuffer.allocate(8);
          switch (blueprint.getMode()) {
              case SPREAD:
                  long reverseTimestamp = Long.reverse(blueprint.getTimestamp());
                  bb.putLong(reverseTimestamp);
                  break;
              case TIME_SEQUENTIAL:
                  long timestamp = blueprint.getTimestamp();
                  bb.putLong(timestamp << 22);
                  break;
          }
          byte[] tsBytes = bb.array();
  
          // Last 6 bits of byte 6 are for the sequence counter. The first two bits are from the timestamp.
          // [5] TTSSSSSS
          int or = tsBytes[5] | (byte) blueprint.getSequence();
          tsBytes[5] = (byte) or;
  
          // Last two bytes. The mode flag, generator ID, and cluster ID.
          // [6] ...MGGGG  [7] GGGGCCCC
          int flagGeneratorCluster = blueprint.getGeneratorId() << 4;
          flagGeneratorCluster += blueprint.getClusterId();
          flagGeneratorCluster += blueprint.getMode().getModeMask() << 12;
  
          tsBytes[7] = (byte) flagGeneratorCluster;
          flagGeneratorCluster >>>= 8;
          tsBytes[6] = (byte) flagGeneratorCluster;
  
          return tsBytes;
      }
docs: Perform all the byte mangling needed to create the eight byte ID.
  
  @param blueprint Blueprint containing all needed data to work with.
  @return The 8-byte ID.