code: public synchronized UUID nextUUID() {
          byte[] rawUUID = new byte[UUID_BYTE_LENGTH];
          long time = 0;
          short clockSq = 0;
          Node node = manager.currentNode();
          while (time < 1) {
              try {
                  manager.lockNode(node);
                  time = node.getUUIDTime();
                  clockSq = node.getClockSequence();
                  System.arraycopy(node.getNodeIdentifier(), 0, rawUUID, NODE_ID_BYTE10, NODE_ID_BYTE_LENGTH);
                  manager.releaseNode(node);
              } catch (OverClockedException e) {
                  node = manager.nextAvailableNode();
              } finally {
                  manager.releaseNode(node);
              }
          }
          byte[] timeBytes = Bytes.toBytes(time);
          //Copy time low
          System.arraycopy(timeBytes, TIME_LOW_TS_POS, rawUUID, TIME_LOW_START_POS, TIME_LOW_BYTE_LEN);
          //Copy time mid
          System.arraycopy(timeBytes, TIME_MID_TS_POS, rawUUID, TIME_MID_START_POS, TIME_MID_BYTE_LEN);
          //Copy time hi
          System.arraycopy(timeBytes, TIME_HI_TS_POS, rawUUID, TIME_HI_START_POS, TIME_HI_BYTE_LEN);
          //Set version
          rawUUID[6] |= 0x10; // 0001 0000
          //Set clock sequence
          rawUUID[CLOCK_HI_VARIANT_BYTE8] = (byte) ((clockSq & 0x3F00) >>> 8);
          rawUUID[CLOCK_HI_VARIANT_BYTE8] |= 0x80;
          rawUUID[CLOCK_LOW_BYTE9] = (byte) (clockSq & 0xFF);
  
          return new UUID(rawUUID);
      }
docs: <p>Returns a new version 1 UUID. The method acts upons static variables
  and so should be sychronized.</p>
  
  @return Returns a new version 1 UUID.