package yaml

import (
	
	
)

type keyList []reflect.Value

func ( keyList) () int      { return len() }
func ( keyList) (,  int) { [], [] = [], [] }
func ( keyList) (,  int) bool {
	 := []
	 := []
	 := .Kind()
	 := .Kind()
	for ( == reflect.Interface ||  == reflect.Ptr) && !.IsNil() {
		 = .Elem()
		 = .Kind()
	}
	for ( == reflect.Interface ||  == reflect.Ptr) && !.IsNil() {
		 = .Elem()
		 = .Kind()
	}
	,  := keyFloat()
	,  := keyFloat()
	if  &&  {
		if  !=  {
			return  < 
		}
		if  !=  {
			return  < 
		}
		return numLess(, )
	}
	if  != reflect.String ||  != reflect.String {
		return  < 
	}
	,  := []rune(.String()), []rune(.String())
	for  := 0;  < len() &&  < len(); ++ {
		if [] == [] {
			continue
		}
		 := unicode.IsLetter([])
		 := unicode.IsLetter([])
		if  &&  {
			return [] < []
		}
		if  ||  {
			return 
		}
		var ,  int
		var ,  int64
		if [] == '0' || [] == '0' {
			for  := -1;  >= 0 && unicode.IsDigit([]); -- {
				if [] != '0' {
					 = 1
					 = 1
					break
				}
			}
		}
		for  = ;  < len() && unicode.IsDigit([]); ++ {
			 = *10 + int64([]-'0')
		}
		for  = ;  < len() && unicode.IsDigit([]); ++ {
			 = *10 + int64([]-'0')
		}
		if  !=  {
			return  < 
		}
		if  !=  {
			return  < 
		}
		return [] < []
	}
	return len() < len()
}
keyFloat returns a float value for v if it is a number/bool and whether it is a number/bool or not.
func ( reflect.Value) ( float64,  bool) {
	switch .Kind() {
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return float64(.Int()), true
	case reflect.Float32, reflect.Float64:
		return .Float(), true
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		return float64(.Uint()), true
	case reflect.Bool:
		if .Bool() {
			return 1, true
		}
		return 0, true
	}
	return 0, false
}
numLess returns whether a < b. a and b must necessarily have the same kind.
func (,  reflect.Value) bool {
	switch .Kind() {
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return .Int() < .Int()
	case reflect.Float32, reflect.Float64:
		return .Float() < .Float()
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		return .Uint() < .Uint()
	case reflect.Bool:
		return !.Bool() && .Bool()
	}
	panic("not a number")