// Code generated by gocode.Generate; DO NOT EDIT.

package filetypes

import (
	"fmt"

	"cuelang.org/go/cue"
	"cuelang.org/go/encoding/gocode/gocodec"
	_ "cuelang.org/go/pkg"
)

var cuegenCodec, cuegenInstance = func() (*gocodec.Codec, *cue.Instance) {
	var r *cue.Runtime
	r = &cue.Runtime{}
	instances, err := r.Unmarshal(cuegenInstanceData)
	if err != nil {
		panic(err)
	}
	if len(instances) != 1 {
		panic("expected encoding of exactly one instance")
	}
	return gocodec.New(r, nil), instances[0]
}()

// cuegenMake is called in the init phase to initialize CUE values for
// validation functions.
func cuegenMake(name string, x interface{}) cue.Value {
	f, err := cuegenInstance.Value().FieldByName(name, true)
	if err != nil {
		panic(fmt.Errorf("could not find type %q in instance", name))
	}
	v := f.Value
	if x != nil {
		w, err := cuegenCodec.ExtractType(x)
		if err != nil {
			panic(err)
		}
		v = v.Unify(w)
	}
	return v
}

// Data size: 1614 bytes.
var cuegenInstanceData = []byte("\x01\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xacW\xcdo\xd4H\x16\xb7CVZ[\uc7b8\"=\x8c\xb4b#\xd6\x11\a\x04j)B@`\x95\u02f2\x1a1'\x84\xa2j\xfb\xb9\xbb\x06\xbb\xcaSU\x86D\xa4\x0f3\xc30\xf3W\u04e3WU\xfel\xf3\x91\x99\xe4\x92\xf6\xfb\xaa\xf7~\xf5\xbe\xea\x1f\xdb\xdf\xf6\u00bd\xed\xefA\xb8\xfd9\b\x1el\u007f\xba\x16\x86\u05f9\u0406\x89\f\x8f\x99aD\x0f\xaf\x85\xfb\xdfIi\u00bd \xdc\xff?3\xeb\xf0z\x10\xfe\xed9/Q\x87\u06cfA\x10\xdc\xdc\xfe\xba\x17\x86\xff|\xf5:k0-x\xe95?\x06\xe1\xf6C\x10\xdc\xd9\xfer-\f\xff\xde\xd3?\x04\xe1^\xb8\xff?V!\x19\u06b7\xc48\b\x82O7n\x92'a\xb8\x17\x86\x919\xafQ\xa7Y\x83\xe1\xa7\x1b\xfb5\xcb\u07b0\x15\u00b2\xe1e\x1e\u01c7\x87\xf0\x18\xe8|\u0224R\xa8k)r\rF\x02\x83\xffJ'\x94\x12;\x8do\u04ff\x05\xbc\x8f#:^\xb0\n\x17\xe0\xff\xb4Q\\\xac\xe2\bE&s.V\x1d\xe3\xf63O\x89#.\f\xaaZ\xa1a\x86K\xf1h\x01\xb7OF\x948*\xa4\xaa\x1eu\xaa\xa4\xfd\\\xaa*\x8e\f[\xe9G\xf6\xe0\xe8\x95;\xe9\xf5\xa2;r\x13ol\x10\xc7X\xb0\xa64\xc05\x985\x02\xb9\b\x8d\xc6\x1c\n\xa9@\x9b\x9c\v`\"\xa7_\xb21)\xbc\\#h4\x86\x8b\x95\x86\x1ck\x149Y\x91\xa2\u05eedNQ{\xc3\xf6|\v\xc10\xfe\x83\xe4?\t\\\xb4\xcel\x06p\x9e\x88BB\x8e\x05\x17\xa8a-\xdf\x01sV\xb9\x06\x8b\x12\xe6\u059f\x0e\x15\xcc=\u00a48<,g\x86\xf5\xa0\x1c\x18\xd5 \\@\xc1J\x8dq\xa4\xb0@\x85\"C\xbd\xd8ef\xe7Y\xe9\x183\x9a\xd65N\xc0\x93\xc4R\xca2\x8edM\u07ect*\x8e\x96I\xa1\x8db\\\x98^\xee\rb\xeda\xd1\vO\xe3\"\x93U]\xa2\xb1Y\xe1iU-\x95i=p4m\x14\xb2\xaau\xca\xd1r\x99\xe9>DGc\xc6(\xbel\x8c\v\xc0\xd2\x1c\xbct-\x9a\xee\x8e\xee\xcd\xf9`\xef8\xe7\x85\xc5\u0080\xacQ1\x17\x89\x93N\xe3\xc3CR}\xb9F\x8d`\xb0\xaaKfP\x03Sh/@\xd0m\x18\tK\x84F\xf0\x82#\xdd\v0csAIi@\x16`\xd6\\\x93\x91L\x8a\x82\xaf\x1awB\x1a\xdb\x03\xec}qQ7.M\xa2Q\xd2D\x83\xb28H\xb2\x06)cN\x89\x9e\xa6i\x1cE\x9b8\x8aJ4p\x06GN|\b\xc7\xe4\u05a2\x11.S&Y\x1a\xe4\xd0Y\xdc\x1f\xad\xbd+YCYK\x95\xa6S\x9d\xad\xb1b\xde\x19\xd2\xc53\x83B\xbb\x94\xb0\xd2I\xfa\x83\x96\"\xf1_\x93\x12\xa6hXcd\x17\xce\u01a9\x9c\xb3\xaa\xbc\xac\xca\xe546T\xf6\x11\x9eQv}\x15p\x1b\xc1g\x10?\xbd7\x87\xb9G\xf5`\x16\xf3)s\x8a\xf9\u9f6f\xa0N\xf5\xdcc\xbe\x89#\xd9\u0526M\x1c\xe7\xd5\xc3\xfbW\xef\xd6\xc3\xfb\x97\xf5\v\xdfR'\xf8\xf3\xe9|\xfa\xe4\xf1\u0547\xf1\xe4\xf1W\xc2(8\x95\xfd0\x8e\x1c\x8b\xbf\x14\xc6\xfd\aO\x1f^yiZ\xab\x97\xac\xcfv\xd4=k\xcb\x14*Vk7V\xfa\u04a5F\xe6\x1b\xa3c\u054a\x1a\xa2\xe1\xd4\a'\x15\x9e$]\xdb=\x8d\xa3\x84V\x04G\xa1\x91K_q\xdf\x02<\x91\xbeZ*\x15mO-\x89\\\xe6^|L\x16\xf3d\xdf*\xbc\x11\xfa\x8a\xbbn0\xa5\x9a33\xa0\x1a<3D]I\x1f\x82\xa5\xae$\xd1j%\x8d\xec\\\xb3_qD\xed\xff\xc5\xf1\x8b\x05\xd0\xe1\x1a\u007f\xbckI\x895\xd4*t\x96\xeb\xa5\xe7\xd6\xcb\x1e!\xcb]rQ/\xbbA\xdfn7\xc0E\xce37S\x1c\xe8t\x83\xcc\xd8\xc1\xa4\xb0V\xa8Q\u042e\x01\x8c\xaec\xa5X\x95\xc6\xddn\xb4\x80[GI\xe2L\n\x18oE\x90\xa3AU\r\xb6\x88\f\x95a\\\xb4v@\xafeS\xe64\xbbF\xbb\xc4\xe1!<\x97\n\xda\xfd\xf3.\xd8\xfa\xae\xd8\xf9D\x12\x18\xcdQ\x9d)\xbet\xfe\xb9\xac\xbb\v\xef\xd6<[\x037\x1a\xcb\xc2\xce=&H5\x93\xe2-*\xe3\x06&\x83\xa7\xdf?\xf3\x1ai<Y\xe8\xba\x1d\u036eq\u00fd\xce\u04cbv\x9f\xec\nc\xb8Z%\x85\x94.\xf7\xdcf\xe8\f$\xee\xb0\xc4_\x01\u0749\xab\x82LV\x15-T%\x17\xe8\xc8F\xee\xe6?1\xec\x91\u038c+:g\xbd\xb3L\xa5\xb6R\xac^\x8f\xb8\x96\xe2\x989[\x8dX9[\xb5\f\xc3&\x1c\xe3\r\u06ba~\x1f\x0f\xbb\x8em:\x96IQ\xeep}\xe8\x9e]\xce\xf2K'@%\xb2\u00f7\xb5e\xd96\xbdw\xf8.\xe9\xad\x00\xa5\xbaK\xfbd\x01]G\xeaK\xc3I\xd8\u0527r\xe8%\x88\xe4\x04Hv\xe7\b\"&\x1d\x1a\xf6\xfazDV;.\xb9\xbf\x84\x96c\u049a.\x02\t\x11\xbb\v\x8c\xa2\x92\xd9CV\x14\x84o\xf5\xa4z%V\xdb\u05c5\xb7K\x1b\x88\xe3\xef\xa8\xdb\xe5d\xe6\xc0\xd1\xe2\xe1/q\x98t;\x86z\x81o1'k\x14\xac\u67f1\xe5\xb9\xdf`\u0215\x91\x9d7\xddk\xc5\xcf\x1d\xea]\xac,\x1d3\x85\x13\x03\xb9D\rB\x1a\xe0\"+\x9b\x1c\xdd[I\xaa\nN\x8e\xd3\xd8\xcaY\x87\xecK\x8d\u07a4G\xddsmP\xe2\x1b7wN\u72b0{\xe6\xb4\xd5\b\x17\x90\u0611n\u007f\xb5E8yEL\xb7\x86\xf1[d:\x8a\xc7/\x9f)w\xfc\x06\xba3b\xff\x1b\xfe5\xa5\xc4\xd1\xe4\x854\xb57~+M\xb9\xe3\x17\u0484\xbb\xa1v(\xda%l\xb8\x13\xec\xe0\xe51\xda9o>\xaa\xde\xfeN\x9f\xeb/\xc0aM\xa8S\u007fs\xffm\xedN^\xa4\xe4\xf3\x0e\xe6\xf3X\u007f\u045b\t\x8e\xf3\xf8\xcd\xe3\xd6\xc73j\xcd:\xb51\fb\xbbu\u0527P\xfb:\x1e*\x0f\xdb7m\u012b).\xb7\x8e|\xb7\x1f{\u06fa5z\x8ewq\r\x9f\xe1\xb3\x01\xcc\xe2\xd2\xf9\xb5\x89\xc7Kb7J\xda\"\xe8#\xe8\aI\xbf\xd3O\xaa\xc5\x15\t\\\xb4\xf76\xdch[?\x86\x8blo\xbc\x9f2cpGnP\x19:\xcb\xe3\xc15\xebO'\xd8O\x8fY\xb9\xde\a#\xab/\x19\xec\x05\a3oR8\xf3#\xb0\x9f\x1c\x13\xf1\x1d\u04dbx\xdcn/\xd1\xf2\xec\x96\xedf\xc9\xf8\x94\xe9p\xf8\xac\xcb_\x1c\x03\u07ea\xb5\x89\x83\xe0\x8f\x00\x00\x00\xff\xff\f\x84\x01\v\xad\x14\x00\x00")
