func StandardEncoder(asBytes Bytes16) string {
	buf := make([]byte, 36)
	writeIndex := 0
	for i, b := range asBytes {
		if (i == 4) || (i == 6) || (i == 8) || (i == 10) {
			buf[writeIndex] = ('-')
			writeIndex++
		}
		buf[writeIndex] = hextable[b>>4]
		buf[writeIndex+1] = hextable[b&0x0f]
		writeIndex += 2
	}
	return string(buf)
}
StandardEncoder encodes the supplied 128 bit number as a standard dash separated UUID
package uuid
import (
	"crypto/rand"
	"encoding/base32"
	"encoding/base64"
	"io"
)
var default128Gen Generate16Byte
func V4() string {
	return V4Custom(GenerateCryptoRand, StandardEncoder)
}
func V4Custom(gen Generate16Byte, e EncodeFrom16Byte) string {
	asBytes := gen()
	varByte := asBytes[8]
	varByte |= (1 << 7)
	mask := ^(1 << 6)
	varByte &= byte(mask)
	asBytes[8] = varByte
	vByte := asBytes[6]
	mask = ^(1 << 7)
	vByte &= byte(mask)
	vByte |= (1 << 6)
	mask = ^(1 << 5)
	vByte &= byte(mask)
	mask = ^(1 << 4)
	vByte &= byte(mask)
	asBytes[6] = vByte
	return StandardEncoder(asBytes)
}
const hextable = "0123456789abcdef"
type Bytes16 [16]byte
type Generate16Byte func() Bytes16
type EncodeFrom16Byte func(Bytes16) string