github.com/patricebensoussan/go/codec@v1.2.99/fast-path.generated.go (about)

     1  //go:build !notfastpath && !codec.notfastpath
     2  // +build !notfastpath,!codec.notfastpath
     3  
     4  // Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved.
     5  // Use of this source code is governed by a MIT license found in the LICENSE file.
     6  
     7  // Code generated from fast-path.go.tmpl - DO NOT EDIT.
     8  
     9  package codec
    10  
    11  // Fast path functions try to create a fast path encode or decode implementation
    12  // for common maps and slices.
    13  //
    14  // We define the functions and register them in this single file
    15  // so as not to pollute the encode.go and decode.go, and create a dependency in there.
    16  // This file can be omitted without causing a build failure.
    17  //
    18  // The advantage of fast paths is:
    19  //	  - Many calls bypass reflection altogether
    20  //
    21  // Currently support
    22  //	  - slice of all builtin types (numeric, bool, string, []byte)
    23  //    - maps of builtin types to builtin or interface{} type, EXCEPT FOR
    24  //      keys of type uintptr, int8/16/32, uint16/32, float32/64, bool, interface{}
    25  //      AND values of type type int8/16/32, uint16/32
    26  // This should provide adequate "typical" implementations.
    27  //
    28  // Note that fast track decode functions must handle values for which an address cannot be obtained.
    29  // For example:
    30  //	 m2 := map[string]int{}
    31  //	 p2 := []interface{}{m2}
    32  //	 // decoding into p2 will bomb if fast track functions do not treat like unaddressable.
    33  //
    34  
    35  import (
    36  	"reflect"
    37  	"sort"
    38  )
    39  
    40  const fastpathEnabled = true
    41  
    42  type fastpathT struct{}
    43  
    44  var fastpathTV fastpathT
    45  
    46  type fastpathE struct {
    47  	rt    reflect.Type
    48  	encfn func(*Encoder, *codecFnInfo, reflect.Value)
    49  	decfn func(*Decoder, *codecFnInfo, reflect.Value)
    50  }
    51  
    52  type fastpathA [56]fastpathE
    53  type fastpathARtid [56]uintptr
    54  
    55  var fastpathAv fastpathA
    56  var fastpathAvRtid fastpathARtid
    57  
    58  type fastpathAslice struct{}
    59  
    60  func (fastpathAslice) Len() int { return 56 }
    61  func (fastpathAslice) Less(i, j int) bool {
    62  	return fastpathAvRtid[uint(i)] < fastpathAvRtid[uint(j)]
    63  }
    64  func (fastpathAslice) Swap(i, j int) {
    65  	fastpathAvRtid[uint(i)], fastpathAvRtid[uint(j)] = fastpathAvRtid[uint(j)], fastpathAvRtid[uint(i)]
    66  	fastpathAv[uint(i)], fastpathAv[uint(j)] = fastpathAv[uint(j)], fastpathAv[uint(i)]
    67  }
    68  
    69  func fastpathAvIndex(rtid uintptr) int {
    70  	// use binary search to grab the index (adapted from sort/search.go)
    71  	// Note: we use goto (instead of for loop) so this can be inlined.
    72  	// h, i, j := 0, 0, 56
    73  	var h, i uint
    74  	var j uint = 56
    75  LOOP:
    76  	if i < j {
    77  		h = (i + j) >> 1 // avoid overflow when computing h // h = i + (j-i)/2
    78  		if fastpathAvRtid[h] < rtid {
    79  			i = h + 1
    80  		} else {
    81  			j = h
    82  		}
    83  		goto LOOP
    84  	}
    85  	if i < 56 && fastpathAvRtid[i] == rtid {
    86  		return int(i)
    87  	}
    88  	return -1
    89  }
    90  
    91  // due to possible initialization loop error, make fastpath in an init()
    92  func init() {
    93  	var i uint = 0
    94  	fn := func(v interface{},
    95  		fe func(*Encoder, *codecFnInfo, reflect.Value),
    96  		fd func(*Decoder, *codecFnInfo, reflect.Value)) {
    97  		xrt := reflect.TypeOf(v)
    98  		xptr := rt2id(xrt)
    99  		fastpathAvRtid[i] = xptr
   100  		fastpathAv[i] = fastpathE{xrt, fe, fd}
   101  		i++
   102  	}
   103  
   104  	fn([]interface{}(nil), (*Encoder).fastpathEncSliceIntfR, (*Decoder).fastpathDecSliceIntfR)
   105  	fn([]string(nil), (*Encoder).fastpathEncSliceStringR, (*Decoder).fastpathDecSliceStringR)
   106  	fn([][]byte(nil), (*Encoder).fastpathEncSliceBytesR, (*Decoder).fastpathDecSliceBytesR)
   107  	fn([]float32(nil), (*Encoder).fastpathEncSliceFloat32R, (*Decoder).fastpathDecSliceFloat32R)
   108  	fn([]float64(nil), (*Encoder).fastpathEncSliceFloat64R, (*Decoder).fastpathDecSliceFloat64R)
   109  	fn([]uint8(nil), (*Encoder).fastpathEncSliceUint8R, (*Decoder).fastpathDecSliceUint8R)
   110  	fn([]uint64(nil), (*Encoder).fastpathEncSliceUint64R, (*Decoder).fastpathDecSliceUint64R)
   111  	fn([]int(nil), (*Encoder).fastpathEncSliceIntR, (*Decoder).fastpathDecSliceIntR)
   112  	fn([]int32(nil), (*Encoder).fastpathEncSliceInt32R, (*Decoder).fastpathDecSliceInt32R)
   113  	fn([]int64(nil), (*Encoder).fastpathEncSliceInt64R, (*Decoder).fastpathDecSliceInt64R)
   114  	fn([]bool(nil), (*Encoder).fastpathEncSliceBoolR, (*Decoder).fastpathDecSliceBoolR)
   115  
   116  	fn(map[string]interface{}(nil), (*Encoder).fastpathEncMapStringIntfR, (*Decoder).fastpathDecMapStringIntfR)
   117  	fn(map[string]string(nil), (*Encoder).fastpathEncMapStringStringR, (*Decoder).fastpathDecMapStringStringR)
   118  	fn(map[string][]byte(nil), (*Encoder).fastpathEncMapStringBytesR, (*Decoder).fastpathDecMapStringBytesR)
   119  	fn(map[string]uint8(nil), (*Encoder).fastpathEncMapStringUint8R, (*Decoder).fastpathDecMapStringUint8R)
   120  	fn(map[string]uint64(nil), (*Encoder).fastpathEncMapStringUint64R, (*Decoder).fastpathDecMapStringUint64R)
   121  	fn(map[string]int(nil), (*Encoder).fastpathEncMapStringIntR, (*Decoder).fastpathDecMapStringIntR)
   122  	fn(map[string]int32(nil), (*Encoder).fastpathEncMapStringInt32R, (*Decoder).fastpathDecMapStringInt32R)
   123  	fn(map[string]float64(nil), (*Encoder).fastpathEncMapStringFloat64R, (*Decoder).fastpathDecMapStringFloat64R)
   124  	fn(map[string]bool(nil), (*Encoder).fastpathEncMapStringBoolR, (*Decoder).fastpathDecMapStringBoolR)
   125  	fn(map[uint8]interface{}(nil), (*Encoder).fastpathEncMapUint8IntfR, (*Decoder).fastpathDecMapUint8IntfR)
   126  	fn(map[uint8]string(nil), (*Encoder).fastpathEncMapUint8StringR, (*Decoder).fastpathDecMapUint8StringR)
   127  	fn(map[uint8][]byte(nil), (*Encoder).fastpathEncMapUint8BytesR, (*Decoder).fastpathDecMapUint8BytesR)
   128  	fn(map[uint8]uint8(nil), (*Encoder).fastpathEncMapUint8Uint8R, (*Decoder).fastpathDecMapUint8Uint8R)
   129  	fn(map[uint8]uint64(nil), (*Encoder).fastpathEncMapUint8Uint64R, (*Decoder).fastpathDecMapUint8Uint64R)
   130  	fn(map[uint8]int(nil), (*Encoder).fastpathEncMapUint8IntR, (*Decoder).fastpathDecMapUint8IntR)
   131  	fn(map[uint8]int32(nil), (*Encoder).fastpathEncMapUint8Int32R, (*Decoder).fastpathDecMapUint8Int32R)
   132  	fn(map[uint8]float64(nil), (*Encoder).fastpathEncMapUint8Float64R, (*Decoder).fastpathDecMapUint8Float64R)
   133  	fn(map[uint8]bool(nil), (*Encoder).fastpathEncMapUint8BoolR, (*Decoder).fastpathDecMapUint8BoolR)
   134  	fn(map[uint64]interface{}(nil), (*Encoder).fastpathEncMapUint64IntfR, (*Decoder).fastpathDecMapUint64IntfR)
   135  	fn(map[uint64]string(nil), (*Encoder).fastpathEncMapUint64StringR, (*Decoder).fastpathDecMapUint64StringR)
   136  	fn(map[uint64][]byte(nil), (*Encoder).fastpathEncMapUint64BytesR, (*Decoder).fastpathDecMapUint64BytesR)
   137  	fn(map[uint64]uint8(nil), (*Encoder).fastpathEncMapUint64Uint8R, (*Decoder).fastpathDecMapUint64Uint8R)
   138  	fn(map[uint64]uint64(nil), (*Encoder).fastpathEncMapUint64Uint64R, (*Decoder).fastpathDecMapUint64Uint64R)
   139  	fn(map[uint64]int(nil), (*Encoder).fastpathEncMapUint64IntR, (*Decoder).fastpathDecMapUint64IntR)
   140  	fn(map[uint64]int32(nil), (*Encoder).fastpathEncMapUint64Int32R, (*Decoder).fastpathDecMapUint64Int32R)
   141  	fn(map[uint64]float64(nil), (*Encoder).fastpathEncMapUint64Float64R, (*Decoder).fastpathDecMapUint64Float64R)
   142  	fn(map[uint64]bool(nil), (*Encoder).fastpathEncMapUint64BoolR, (*Decoder).fastpathDecMapUint64BoolR)
   143  	fn(map[int]interface{}(nil), (*Encoder).fastpathEncMapIntIntfR, (*Decoder).fastpathDecMapIntIntfR)
   144  	fn(map[int]string(nil), (*Encoder).fastpathEncMapIntStringR, (*Decoder).fastpathDecMapIntStringR)
   145  	fn(map[int][]byte(nil), (*Encoder).fastpathEncMapIntBytesR, (*Decoder).fastpathDecMapIntBytesR)
   146  	fn(map[int]uint8(nil), (*Encoder).fastpathEncMapIntUint8R, (*Decoder).fastpathDecMapIntUint8R)
   147  	fn(map[int]uint64(nil), (*Encoder).fastpathEncMapIntUint64R, (*Decoder).fastpathDecMapIntUint64R)
   148  	fn(map[int]int(nil), (*Encoder).fastpathEncMapIntIntR, (*Decoder).fastpathDecMapIntIntR)
   149  	fn(map[int]int32(nil), (*Encoder).fastpathEncMapIntInt32R, (*Decoder).fastpathDecMapIntInt32R)
   150  	fn(map[int]float64(nil), (*Encoder).fastpathEncMapIntFloat64R, (*Decoder).fastpathDecMapIntFloat64R)
   151  	fn(map[int]bool(nil), (*Encoder).fastpathEncMapIntBoolR, (*Decoder).fastpathDecMapIntBoolR)
   152  	fn(map[int32]interface{}(nil), (*Encoder).fastpathEncMapInt32IntfR, (*Decoder).fastpathDecMapInt32IntfR)
   153  	fn(map[int32]string(nil), (*Encoder).fastpathEncMapInt32StringR, (*Decoder).fastpathDecMapInt32StringR)
   154  	fn(map[int32][]byte(nil), (*Encoder).fastpathEncMapInt32BytesR, (*Decoder).fastpathDecMapInt32BytesR)
   155  	fn(map[int32]uint8(nil), (*Encoder).fastpathEncMapInt32Uint8R, (*Decoder).fastpathDecMapInt32Uint8R)
   156  	fn(map[int32]uint64(nil), (*Encoder).fastpathEncMapInt32Uint64R, (*Decoder).fastpathDecMapInt32Uint64R)
   157  	fn(map[int32]int(nil), (*Encoder).fastpathEncMapInt32IntR, (*Decoder).fastpathDecMapInt32IntR)
   158  	fn(map[int32]int32(nil), (*Encoder).fastpathEncMapInt32Int32R, (*Decoder).fastpathDecMapInt32Int32R)
   159  	fn(map[int32]float64(nil), (*Encoder).fastpathEncMapInt32Float64R, (*Decoder).fastpathDecMapInt32Float64R)
   160  	fn(map[int32]bool(nil), (*Encoder).fastpathEncMapInt32BoolR, (*Decoder).fastpathDecMapInt32BoolR)
   161  
   162  	sort.Sort(fastpathAslice{})
   163  }
   164  
   165  // -- encode
   166  
   167  // -- -- fast path type switch
   168  func fastpathEncodeTypeSwitch(iv interface{}, e *Encoder) bool {
   169  	switch v := iv.(type) {
   170  	case []interface{}:
   171  		fastpathTV.EncSliceIntfV(v, e)
   172  	case *[]interface{}:
   173  		if *v == nil {
   174  			e.e.EncodeNil()
   175  		} else {
   176  			fastpathTV.EncSliceIntfV(*v, e)
   177  		}
   178  	case []string:
   179  		fastpathTV.EncSliceStringV(v, e)
   180  	case *[]string:
   181  		if *v == nil {
   182  			e.e.EncodeNil()
   183  		} else {
   184  			fastpathTV.EncSliceStringV(*v, e)
   185  		}
   186  	case [][]byte:
   187  		fastpathTV.EncSliceBytesV(v, e)
   188  	case *[][]byte:
   189  		if *v == nil {
   190  			e.e.EncodeNil()
   191  		} else {
   192  			fastpathTV.EncSliceBytesV(*v, e)
   193  		}
   194  	case []float32:
   195  		fastpathTV.EncSliceFloat32V(v, e)
   196  	case *[]float32:
   197  		if *v == nil {
   198  			e.e.EncodeNil()
   199  		} else {
   200  			fastpathTV.EncSliceFloat32V(*v, e)
   201  		}
   202  	case []float64:
   203  		fastpathTV.EncSliceFloat64V(v, e)
   204  	case *[]float64:
   205  		if *v == nil {
   206  			e.e.EncodeNil()
   207  		} else {
   208  			fastpathTV.EncSliceFloat64V(*v, e)
   209  		}
   210  	case []uint8:
   211  		fastpathTV.EncSliceUint8V(v, e)
   212  	case *[]uint8:
   213  		if *v == nil {
   214  			e.e.EncodeNil()
   215  		} else {
   216  			fastpathTV.EncSliceUint8V(*v, e)
   217  		}
   218  	case []uint64:
   219  		fastpathTV.EncSliceUint64V(v, e)
   220  	case *[]uint64:
   221  		if *v == nil {
   222  			e.e.EncodeNil()
   223  		} else {
   224  			fastpathTV.EncSliceUint64V(*v, e)
   225  		}
   226  	case []int:
   227  		fastpathTV.EncSliceIntV(v, e)
   228  	case *[]int:
   229  		if *v == nil {
   230  			e.e.EncodeNil()
   231  		} else {
   232  			fastpathTV.EncSliceIntV(*v, e)
   233  		}
   234  	case []int32:
   235  		fastpathTV.EncSliceInt32V(v, e)
   236  	case *[]int32:
   237  		if *v == nil {
   238  			e.e.EncodeNil()
   239  		} else {
   240  			fastpathTV.EncSliceInt32V(*v, e)
   241  		}
   242  	case []int64:
   243  		fastpathTV.EncSliceInt64V(v, e)
   244  	case *[]int64:
   245  		if *v == nil {
   246  			e.e.EncodeNil()
   247  		} else {
   248  			fastpathTV.EncSliceInt64V(*v, e)
   249  		}
   250  	case []bool:
   251  		fastpathTV.EncSliceBoolV(v, e)
   252  	case *[]bool:
   253  		if *v == nil {
   254  			e.e.EncodeNil()
   255  		} else {
   256  			fastpathTV.EncSliceBoolV(*v, e)
   257  		}
   258  	case map[string]interface{}:
   259  		fastpathTV.EncMapStringIntfV(v, e)
   260  	case *map[string]interface{}:
   261  		if *v == nil {
   262  			e.e.EncodeNil()
   263  		} else {
   264  			fastpathTV.EncMapStringIntfV(*v, e)
   265  		}
   266  	case map[string]string:
   267  		fastpathTV.EncMapStringStringV(v, e)
   268  	case *map[string]string:
   269  		if *v == nil {
   270  			e.e.EncodeNil()
   271  		} else {
   272  			fastpathTV.EncMapStringStringV(*v, e)
   273  		}
   274  	case map[string][]byte:
   275  		fastpathTV.EncMapStringBytesV(v, e)
   276  	case *map[string][]byte:
   277  		if *v == nil {
   278  			e.e.EncodeNil()
   279  		} else {
   280  			fastpathTV.EncMapStringBytesV(*v, e)
   281  		}
   282  	case map[string]uint8:
   283  		fastpathTV.EncMapStringUint8V(v, e)
   284  	case *map[string]uint8:
   285  		if *v == nil {
   286  			e.e.EncodeNil()
   287  		} else {
   288  			fastpathTV.EncMapStringUint8V(*v, e)
   289  		}
   290  	case map[string]uint64:
   291  		fastpathTV.EncMapStringUint64V(v, e)
   292  	case *map[string]uint64:
   293  		if *v == nil {
   294  			e.e.EncodeNil()
   295  		} else {
   296  			fastpathTV.EncMapStringUint64V(*v, e)
   297  		}
   298  	case map[string]int:
   299  		fastpathTV.EncMapStringIntV(v, e)
   300  	case *map[string]int:
   301  		if *v == nil {
   302  			e.e.EncodeNil()
   303  		} else {
   304  			fastpathTV.EncMapStringIntV(*v, e)
   305  		}
   306  	case map[string]int32:
   307  		fastpathTV.EncMapStringInt32V(v, e)
   308  	case *map[string]int32:
   309  		if *v == nil {
   310  			e.e.EncodeNil()
   311  		} else {
   312  			fastpathTV.EncMapStringInt32V(*v, e)
   313  		}
   314  	case map[string]float64:
   315  		fastpathTV.EncMapStringFloat64V(v, e)
   316  	case *map[string]float64:
   317  		if *v == nil {
   318  			e.e.EncodeNil()
   319  		} else {
   320  			fastpathTV.EncMapStringFloat64V(*v, e)
   321  		}
   322  	case map[string]bool:
   323  		fastpathTV.EncMapStringBoolV(v, e)
   324  	case *map[string]bool:
   325  		if *v == nil {
   326  			e.e.EncodeNil()
   327  		} else {
   328  			fastpathTV.EncMapStringBoolV(*v, e)
   329  		}
   330  	case map[uint8]interface{}:
   331  		fastpathTV.EncMapUint8IntfV(v, e)
   332  	case *map[uint8]interface{}:
   333  		if *v == nil {
   334  			e.e.EncodeNil()
   335  		} else {
   336  			fastpathTV.EncMapUint8IntfV(*v, e)
   337  		}
   338  	case map[uint8]string:
   339  		fastpathTV.EncMapUint8StringV(v, e)
   340  	case *map[uint8]string:
   341  		if *v == nil {
   342  			e.e.EncodeNil()
   343  		} else {
   344  			fastpathTV.EncMapUint8StringV(*v, e)
   345  		}
   346  	case map[uint8][]byte:
   347  		fastpathTV.EncMapUint8BytesV(v, e)
   348  	case *map[uint8][]byte:
   349  		if *v == nil {
   350  			e.e.EncodeNil()
   351  		} else {
   352  			fastpathTV.EncMapUint8BytesV(*v, e)
   353  		}
   354  	case map[uint8]uint8:
   355  		fastpathTV.EncMapUint8Uint8V(v, e)
   356  	case *map[uint8]uint8:
   357  		if *v == nil {
   358  			e.e.EncodeNil()
   359  		} else {
   360  			fastpathTV.EncMapUint8Uint8V(*v, e)
   361  		}
   362  	case map[uint8]uint64:
   363  		fastpathTV.EncMapUint8Uint64V(v, e)
   364  	case *map[uint8]uint64:
   365  		if *v == nil {
   366  			e.e.EncodeNil()
   367  		} else {
   368  			fastpathTV.EncMapUint8Uint64V(*v, e)
   369  		}
   370  	case map[uint8]int:
   371  		fastpathTV.EncMapUint8IntV(v, e)
   372  	case *map[uint8]int:
   373  		if *v == nil {
   374  			e.e.EncodeNil()
   375  		} else {
   376  			fastpathTV.EncMapUint8IntV(*v, e)
   377  		}
   378  	case map[uint8]int32:
   379  		fastpathTV.EncMapUint8Int32V(v, e)
   380  	case *map[uint8]int32:
   381  		if *v == nil {
   382  			e.e.EncodeNil()
   383  		} else {
   384  			fastpathTV.EncMapUint8Int32V(*v, e)
   385  		}
   386  	case map[uint8]float64:
   387  		fastpathTV.EncMapUint8Float64V(v, e)
   388  	case *map[uint8]float64:
   389  		if *v == nil {
   390  			e.e.EncodeNil()
   391  		} else {
   392  			fastpathTV.EncMapUint8Float64V(*v, e)
   393  		}
   394  	case map[uint8]bool:
   395  		fastpathTV.EncMapUint8BoolV(v, e)
   396  	case *map[uint8]bool:
   397  		if *v == nil {
   398  			e.e.EncodeNil()
   399  		} else {
   400  			fastpathTV.EncMapUint8BoolV(*v, e)
   401  		}
   402  	case map[uint64]interface{}:
   403  		fastpathTV.EncMapUint64IntfV(v, e)
   404  	case *map[uint64]interface{}:
   405  		if *v == nil {
   406  			e.e.EncodeNil()
   407  		} else {
   408  			fastpathTV.EncMapUint64IntfV(*v, e)
   409  		}
   410  	case map[uint64]string:
   411  		fastpathTV.EncMapUint64StringV(v, e)
   412  	case *map[uint64]string:
   413  		if *v == nil {
   414  			e.e.EncodeNil()
   415  		} else {
   416  			fastpathTV.EncMapUint64StringV(*v, e)
   417  		}
   418  	case map[uint64][]byte:
   419  		fastpathTV.EncMapUint64BytesV(v, e)
   420  	case *map[uint64][]byte:
   421  		if *v == nil {
   422  			e.e.EncodeNil()
   423  		} else {
   424  			fastpathTV.EncMapUint64BytesV(*v, e)
   425  		}
   426  	case map[uint64]uint8:
   427  		fastpathTV.EncMapUint64Uint8V(v, e)
   428  	case *map[uint64]uint8:
   429  		if *v == nil {
   430  			e.e.EncodeNil()
   431  		} else {
   432  			fastpathTV.EncMapUint64Uint8V(*v, e)
   433  		}
   434  	case map[uint64]uint64:
   435  		fastpathTV.EncMapUint64Uint64V(v, e)
   436  	case *map[uint64]uint64:
   437  		if *v == nil {
   438  			e.e.EncodeNil()
   439  		} else {
   440  			fastpathTV.EncMapUint64Uint64V(*v, e)
   441  		}
   442  	case map[uint64]int:
   443  		fastpathTV.EncMapUint64IntV(v, e)
   444  	case *map[uint64]int:
   445  		if *v == nil {
   446  			e.e.EncodeNil()
   447  		} else {
   448  			fastpathTV.EncMapUint64IntV(*v, e)
   449  		}
   450  	case map[uint64]int32:
   451  		fastpathTV.EncMapUint64Int32V(v, e)
   452  	case *map[uint64]int32:
   453  		if *v == nil {
   454  			e.e.EncodeNil()
   455  		} else {
   456  			fastpathTV.EncMapUint64Int32V(*v, e)
   457  		}
   458  	case map[uint64]float64:
   459  		fastpathTV.EncMapUint64Float64V(v, e)
   460  	case *map[uint64]float64:
   461  		if *v == nil {
   462  			e.e.EncodeNil()
   463  		} else {
   464  			fastpathTV.EncMapUint64Float64V(*v, e)
   465  		}
   466  	case map[uint64]bool:
   467  		fastpathTV.EncMapUint64BoolV(v, e)
   468  	case *map[uint64]bool:
   469  		if *v == nil {
   470  			e.e.EncodeNil()
   471  		} else {
   472  			fastpathTV.EncMapUint64BoolV(*v, e)
   473  		}
   474  	case map[int]interface{}:
   475  		fastpathTV.EncMapIntIntfV(v, e)
   476  	case *map[int]interface{}:
   477  		if *v == nil {
   478  			e.e.EncodeNil()
   479  		} else {
   480  			fastpathTV.EncMapIntIntfV(*v, e)
   481  		}
   482  	case map[int]string:
   483  		fastpathTV.EncMapIntStringV(v, e)
   484  	case *map[int]string:
   485  		if *v == nil {
   486  			e.e.EncodeNil()
   487  		} else {
   488  			fastpathTV.EncMapIntStringV(*v, e)
   489  		}
   490  	case map[int][]byte:
   491  		fastpathTV.EncMapIntBytesV(v, e)
   492  	case *map[int][]byte:
   493  		if *v == nil {
   494  			e.e.EncodeNil()
   495  		} else {
   496  			fastpathTV.EncMapIntBytesV(*v, e)
   497  		}
   498  	case map[int]uint8:
   499  		fastpathTV.EncMapIntUint8V(v, e)
   500  	case *map[int]uint8:
   501  		if *v == nil {
   502  			e.e.EncodeNil()
   503  		} else {
   504  			fastpathTV.EncMapIntUint8V(*v, e)
   505  		}
   506  	case map[int]uint64:
   507  		fastpathTV.EncMapIntUint64V(v, e)
   508  	case *map[int]uint64:
   509  		if *v == nil {
   510  			e.e.EncodeNil()
   511  		} else {
   512  			fastpathTV.EncMapIntUint64V(*v, e)
   513  		}
   514  	case map[int]int:
   515  		fastpathTV.EncMapIntIntV(v, e)
   516  	case *map[int]int:
   517  		if *v == nil {
   518  			e.e.EncodeNil()
   519  		} else {
   520  			fastpathTV.EncMapIntIntV(*v, e)
   521  		}
   522  	case map[int]int32:
   523  		fastpathTV.EncMapIntInt32V(v, e)
   524  	case *map[int]int32:
   525  		if *v == nil {
   526  			e.e.EncodeNil()
   527  		} else {
   528  			fastpathTV.EncMapIntInt32V(*v, e)
   529  		}
   530  	case map[int]float64:
   531  		fastpathTV.EncMapIntFloat64V(v, e)
   532  	case *map[int]float64:
   533  		if *v == nil {
   534  			e.e.EncodeNil()
   535  		} else {
   536  			fastpathTV.EncMapIntFloat64V(*v, e)
   537  		}
   538  	case map[int]bool:
   539  		fastpathTV.EncMapIntBoolV(v, e)
   540  	case *map[int]bool:
   541  		if *v == nil {
   542  			e.e.EncodeNil()
   543  		} else {
   544  			fastpathTV.EncMapIntBoolV(*v, e)
   545  		}
   546  	case map[int32]interface{}:
   547  		fastpathTV.EncMapInt32IntfV(v, e)
   548  	case *map[int32]interface{}:
   549  		if *v == nil {
   550  			e.e.EncodeNil()
   551  		} else {
   552  			fastpathTV.EncMapInt32IntfV(*v, e)
   553  		}
   554  	case map[int32]string:
   555  		fastpathTV.EncMapInt32StringV(v, e)
   556  	case *map[int32]string:
   557  		if *v == nil {
   558  			e.e.EncodeNil()
   559  		} else {
   560  			fastpathTV.EncMapInt32StringV(*v, e)
   561  		}
   562  	case map[int32][]byte:
   563  		fastpathTV.EncMapInt32BytesV(v, e)
   564  	case *map[int32][]byte:
   565  		if *v == nil {
   566  			e.e.EncodeNil()
   567  		} else {
   568  			fastpathTV.EncMapInt32BytesV(*v, e)
   569  		}
   570  	case map[int32]uint8:
   571  		fastpathTV.EncMapInt32Uint8V(v, e)
   572  	case *map[int32]uint8:
   573  		if *v == nil {
   574  			e.e.EncodeNil()
   575  		} else {
   576  			fastpathTV.EncMapInt32Uint8V(*v, e)
   577  		}
   578  	case map[int32]uint64:
   579  		fastpathTV.EncMapInt32Uint64V(v, e)
   580  	case *map[int32]uint64:
   581  		if *v == nil {
   582  			e.e.EncodeNil()
   583  		} else {
   584  			fastpathTV.EncMapInt32Uint64V(*v, e)
   585  		}
   586  	case map[int32]int:
   587  		fastpathTV.EncMapInt32IntV(v, e)
   588  	case *map[int32]int:
   589  		if *v == nil {
   590  			e.e.EncodeNil()
   591  		} else {
   592  			fastpathTV.EncMapInt32IntV(*v, e)
   593  		}
   594  	case map[int32]int32:
   595  		fastpathTV.EncMapInt32Int32V(v, e)
   596  	case *map[int32]int32:
   597  		if *v == nil {
   598  			e.e.EncodeNil()
   599  		} else {
   600  			fastpathTV.EncMapInt32Int32V(*v, e)
   601  		}
   602  	case map[int32]float64:
   603  		fastpathTV.EncMapInt32Float64V(v, e)
   604  	case *map[int32]float64:
   605  		if *v == nil {
   606  			e.e.EncodeNil()
   607  		} else {
   608  			fastpathTV.EncMapInt32Float64V(*v, e)
   609  		}
   610  	case map[int32]bool:
   611  		fastpathTV.EncMapInt32BoolV(v, e)
   612  	case *map[int32]bool:
   613  		if *v == nil {
   614  			e.e.EncodeNil()
   615  		} else {
   616  			fastpathTV.EncMapInt32BoolV(*v, e)
   617  		}
   618  	default:
   619  		_ = v // workaround https://github.com/golang/go/issues/12927 seen in go1.4
   620  		return false
   621  	}
   622  	return true
   623  }
   624  
   625  // -- -- fast path functions
   626  func (e *Encoder) fastpathEncSliceIntfR(f *codecFnInfo, rv reflect.Value) {
   627  	var v []interface{}
   628  	if rv.Kind() == reflect.Array {
   629  		rvGetSlice4Array(rv, &v)
   630  	} else {
   631  		v = rv2i(rv).([]interface{})
   632  	}
   633  	if f.ti.mbs {
   634  		fastpathTV.EncAsMapSliceIntfV(v, e)
   635  	} else {
   636  		fastpathTV.EncSliceIntfV(v, e)
   637  	}
   638  }
   639  func (fastpathT) EncSliceIntfV(v []interface{}, e *Encoder) {
   640  	e.arrayStart(len(v))
   641  	for j := range v {
   642  		e.arrayElem()
   643  		e.encode(v[j])
   644  	}
   645  	e.arrayEnd()
   646  }
   647  func (fastpathT) EncAsMapSliceIntfV(v []interface{}, e *Encoder) {
   648  	e.haltOnMbsOddLen(len(v))
   649  	e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2)
   650  	for j := range v {
   651  		if j&1 == 0 { // if j%2 == 0 {
   652  			e.mapElemKey()
   653  		} else {
   654  			e.mapElemValue()
   655  		}
   656  		e.encode(v[j])
   657  	}
   658  	e.mapEnd()
   659  }
   660  func (e *Encoder) fastpathEncSliceStringR(f *codecFnInfo, rv reflect.Value) {
   661  	var v []string
   662  	if rv.Kind() == reflect.Array {
   663  		rvGetSlice4Array(rv, &v)
   664  	} else {
   665  		v = rv2i(rv).([]string)
   666  	}
   667  	if f.ti.mbs {
   668  		fastpathTV.EncAsMapSliceStringV(v, e)
   669  	} else {
   670  		fastpathTV.EncSliceStringV(v, e)
   671  	}
   672  }
   673  func (fastpathT) EncSliceStringV(v []string, e *Encoder) {
   674  	e.arrayStart(len(v))
   675  	for j := range v {
   676  		e.arrayElem()
   677  		e.e.EncodeString(v[j])
   678  	}
   679  	e.arrayEnd()
   680  }
   681  func (fastpathT) EncAsMapSliceStringV(v []string, e *Encoder) {
   682  	e.haltOnMbsOddLen(len(v))
   683  	e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2)
   684  	for j := range v {
   685  		if j&1 == 0 { // if j%2 == 0 {
   686  			e.mapElemKey()
   687  		} else {
   688  			e.mapElemValue()
   689  		}
   690  		e.e.EncodeString(v[j])
   691  	}
   692  	e.mapEnd()
   693  }
   694  func (e *Encoder) fastpathEncSliceBytesR(f *codecFnInfo, rv reflect.Value) {
   695  	var v [][]byte
   696  	if rv.Kind() == reflect.Array {
   697  		rvGetSlice4Array(rv, &v)
   698  	} else {
   699  		v = rv2i(rv).([][]byte)
   700  	}
   701  	if f.ti.mbs {
   702  		fastpathTV.EncAsMapSliceBytesV(v, e)
   703  	} else {
   704  		fastpathTV.EncSliceBytesV(v, e)
   705  	}
   706  }
   707  func (fastpathT) EncSliceBytesV(v [][]byte, e *Encoder) {
   708  	e.arrayStart(len(v))
   709  	for j := range v {
   710  		e.arrayElem()
   711  		e.e.EncodeStringBytesRaw(v[j])
   712  	}
   713  	e.arrayEnd()
   714  }
   715  func (fastpathT) EncAsMapSliceBytesV(v [][]byte, e *Encoder) {
   716  	e.haltOnMbsOddLen(len(v))
   717  	e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2)
   718  	for j := range v {
   719  		if j&1 == 0 { // if j%2 == 0 {
   720  			e.mapElemKey()
   721  		} else {
   722  			e.mapElemValue()
   723  		}
   724  		e.e.EncodeStringBytesRaw(v[j])
   725  	}
   726  	e.mapEnd()
   727  }
   728  func (e *Encoder) fastpathEncSliceFloat32R(f *codecFnInfo, rv reflect.Value) {
   729  	var v []float32
   730  	if rv.Kind() == reflect.Array {
   731  		rvGetSlice4Array(rv, &v)
   732  	} else {
   733  		v = rv2i(rv).([]float32)
   734  	}
   735  	if f.ti.mbs {
   736  		fastpathTV.EncAsMapSliceFloat32V(v, e)
   737  	} else {
   738  		fastpathTV.EncSliceFloat32V(v, e)
   739  	}
   740  }
   741  func (fastpathT) EncSliceFloat32V(v []float32, e *Encoder) {
   742  	e.arrayStart(len(v))
   743  	for j := range v {
   744  		e.arrayElem()
   745  		e.e.EncodeFloat32(v[j])
   746  	}
   747  	e.arrayEnd()
   748  }
   749  func (fastpathT) EncAsMapSliceFloat32V(v []float32, e *Encoder) {
   750  	e.haltOnMbsOddLen(len(v))
   751  	e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2)
   752  	for j := range v {
   753  		if j&1 == 0 { // if j%2 == 0 {
   754  			e.mapElemKey()
   755  		} else {
   756  			e.mapElemValue()
   757  		}
   758  		e.e.EncodeFloat32(v[j])
   759  	}
   760  	e.mapEnd()
   761  }
   762  func (e *Encoder) fastpathEncSliceFloat64R(f *codecFnInfo, rv reflect.Value) {
   763  	var v []float64
   764  	if rv.Kind() == reflect.Array {
   765  		rvGetSlice4Array(rv, &v)
   766  	} else {
   767  		v = rv2i(rv).([]float64)
   768  	}
   769  	if f.ti.mbs {
   770  		fastpathTV.EncAsMapSliceFloat64V(v, e)
   771  	} else {
   772  		fastpathTV.EncSliceFloat64V(v, e)
   773  	}
   774  }
   775  func (fastpathT) EncSliceFloat64V(v []float64, e *Encoder) {
   776  	e.arrayStart(len(v))
   777  	for j := range v {
   778  		e.arrayElem()
   779  		e.e.EncodeFloat64(v[j])
   780  	}
   781  	e.arrayEnd()
   782  }
   783  func (fastpathT) EncAsMapSliceFloat64V(v []float64, e *Encoder) {
   784  	e.haltOnMbsOddLen(len(v))
   785  	e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2)
   786  	for j := range v {
   787  		if j&1 == 0 { // if j%2 == 0 {
   788  			e.mapElemKey()
   789  		} else {
   790  			e.mapElemValue()
   791  		}
   792  		e.e.EncodeFloat64(v[j])
   793  	}
   794  	e.mapEnd()
   795  }
   796  func (e *Encoder) fastpathEncSliceUint8R(f *codecFnInfo, rv reflect.Value) {
   797  	var v []uint8
   798  	if rv.Kind() == reflect.Array {
   799  		rvGetSlice4Array(rv, &v)
   800  	} else {
   801  		v = rv2i(rv).([]uint8)
   802  	}
   803  	if f.ti.mbs {
   804  		fastpathTV.EncAsMapSliceUint8V(v, e)
   805  	} else {
   806  		fastpathTV.EncSliceUint8V(v, e)
   807  	}
   808  }
   809  func (fastpathT) EncSliceUint8V(v []uint8, e *Encoder) {
   810  	e.e.EncodeStringBytesRaw(v)
   811  }
   812  func (fastpathT) EncAsMapSliceUint8V(v []uint8, e *Encoder) {
   813  	e.haltOnMbsOddLen(len(v))
   814  	e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2)
   815  	for j := range v {
   816  		if j&1 == 0 { // if j%2 == 0 {
   817  			e.mapElemKey()
   818  		} else {
   819  			e.mapElemValue()
   820  		}
   821  		e.e.EncodeUint(uint64(v[j]))
   822  	}
   823  	e.mapEnd()
   824  }
   825  func (e *Encoder) fastpathEncSliceUint64R(f *codecFnInfo, rv reflect.Value) {
   826  	var v []uint64
   827  	if rv.Kind() == reflect.Array {
   828  		rvGetSlice4Array(rv, &v)
   829  	} else {
   830  		v = rv2i(rv).([]uint64)
   831  	}
   832  	if f.ti.mbs {
   833  		fastpathTV.EncAsMapSliceUint64V(v, e)
   834  	} else {
   835  		fastpathTV.EncSliceUint64V(v, e)
   836  	}
   837  }
   838  func (fastpathT) EncSliceUint64V(v []uint64, e *Encoder) {
   839  	e.arrayStart(len(v))
   840  	for j := range v {
   841  		e.arrayElem()
   842  		e.e.EncodeUint(v[j])
   843  	}
   844  	e.arrayEnd()
   845  }
   846  func (fastpathT) EncAsMapSliceUint64V(v []uint64, e *Encoder) {
   847  	e.haltOnMbsOddLen(len(v))
   848  	e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2)
   849  	for j := range v {
   850  		if j&1 == 0 { // if j%2 == 0 {
   851  			e.mapElemKey()
   852  		} else {
   853  			e.mapElemValue()
   854  		}
   855  		e.e.EncodeUint(v[j])
   856  	}
   857  	e.mapEnd()
   858  }
   859  func (e *Encoder) fastpathEncSliceIntR(f *codecFnInfo, rv reflect.Value) {
   860  	var v []int
   861  	if rv.Kind() == reflect.Array {
   862  		rvGetSlice4Array(rv, &v)
   863  	} else {
   864  		v = rv2i(rv).([]int)
   865  	}
   866  	if f.ti.mbs {
   867  		fastpathTV.EncAsMapSliceIntV(v, e)
   868  	} else {
   869  		fastpathTV.EncSliceIntV(v, e)
   870  	}
   871  }
   872  func (fastpathT) EncSliceIntV(v []int, e *Encoder) {
   873  	e.arrayStart(len(v))
   874  	for j := range v {
   875  		e.arrayElem()
   876  		e.e.EncodeInt(int64(v[j]))
   877  	}
   878  	e.arrayEnd()
   879  }
   880  func (fastpathT) EncAsMapSliceIntV(v []int, e *Encoder) {
   881  	e.haltOnMbsOddLen(len(v))
   882  	e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2)
   883  	for j := range v {
   884  		if j&1 == 0 { // if j%2 == 0 {
   885  			e.mapElemKey()
   886  		} else {
   887  			e.mapElemValue()
   888  		}
   889  		e.e.EncodeInt(int64(v[j]))
   890  	}
   891  	e.mapEnd()
   892  }
   893  func (e *Encoder) fastpathEncSliceInt32R(f *codecFnInfo, rv reflect.Value) {
   894  	var v []int32
   895  	if rv.Kind() == reflect.Array {
   896  		rvGetSlice4Array(rv, &v)
   897  	} else {
   898  		v = rv2i(rv).([]int32)
   899  	}
   900  	if f.ti.mbs {
   901  		fastpathTV.EncAsMapSliceInt32V(v, e)
   902  	} else {
   903  		fastpathTV.EncSliceInt32V(v, e)
   904  	}
   905  }
   906  func (fastpathT) EncSliceInt32V(v []int32, e *Encoder) {
   907  	e.arrayStart(len(v))
   908  	for j := range v {
   909  		e.arrayElem()
   910  		e.e.EncodeInt(int64(v[j]))
   911  	}
   912  	e.arrayEnd()
   913  }
   914  func (fastpathT) EncAsMapSliceInt32V(v []int32, e *Encoder) {
   915  	e.haltOnMbsOddLen(len(v))
   916  	e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2)
   917  	for j := range v {
   918  		if j&1 == 0 { // if j%2 == 0 {
   919  			e.mapElemKey()
   920  		} else {
   921  			e.mapElemValue()
   922  		}
   923  		e.e.EncodeInt(int64(v[j]))
   924  	}
   925  	e.mapEnd()
   926  }
   927  func (e *Encoder) fastpathEncSliceInt64R(f *codecFnInfo, rv reflect.Value) {
   928  	var v []int64
   929  	if rv.Kind() == reflect.Array {
   930  		rvGetSlice4Array(rv, &v)
   931  	} else {
   932  		v = rv2i(rv).([]int64)
   933  	}
   934  	if f.ti.mbs {
   935  		fastpathTV.EncAsMapSliceInt64V(v, e)
   936  	} else {
   937  		fastpathTV.EncSliceInt64V(v, e)
   938  	}
   939  }
   940  func (fastpathT) EncSliceInt64V(v []int64, e *Encoder) {
   941  	e.arrayStart(len(v))
   942  	for j := range v {
   943  		e.arrayElem()
   944  		e.e.EncodeInt(v[j])
   945  	}
   946  	e.arrayEnd()
   947  }
   948  func (fastpathT) EncAsMapSliceInt64V(v []int64, e *Encoder) {
   949  	e.haltOnMbsOddLen(len(v))
   950  	e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2)
   951  	for j := range v {
   952  		if j&1 == 0 { // if j%2 == 0 {
   953  			e.mapElemKey()
   954  		} else {
   955  			e.mapElemValue()
   956  		}
   957  		e.e.EncodeInt(v[j])
   958  	}
   959  	e.mapEnd()
   960  }
   961  func (e *Encoder) fastpathEncSliceBoolR(f *codecFnInfo, rv reflect.Value) {
   962  	var v []bool
   963  	if rv.Kind() == reflect.Array {
   964  		rvGetSlice4Array(rv, &v)
   965  	} else {
   966  		v = rv2i(rv).([]bool)
   967  	}
   968  	if f.ti.mbs {
   969  		fastpathTV.EncAsMapSliceBoolV(v, e)
   970  	} else {
   971  		fastpathTV.EncSliceBoolV(v, e)
   972  	}
   973  }
   974  func (fastpathT) EncSliceBoolV(v []bool, e *Encoder) {
   975  	e.arrayStart(len(v))
   976  	for j := range v {
   977  		e.arrayElem()
   978  		e.e.EncodeBool(v[j])
   979  	}
   980  	e.arrayEnd()
   981  }
   982  func (fastpathT) EncAsMapSliceBoolV(v []bool, e *Encoder) {
   983  	e.haltOnMbsOddLen(len(v))
   984  	e.mapStart(len(v) >> 1) // e.mapStart(len(v) / 2)
   985  	for j := range v {
   986  		if j&1 == 0 { // if j%2 == 0 {
   987  			e.mapElemKey()
   988  		} else {
   989  			e.mapElemValue()
   990  		}
   991  		e.e.EncodeBool(v[j])
   992  	}
   993  	e.mapEnd()
   994  }
   995  func (e *Encoder) fastpathEncMapStringIntfR(f *codecFnInfo, rv reflect.Value) {
   996  	fastpathTV.EncMapStringIntfV(rv2i(rv).(map[string]interface{}), e)
   997  }
   998  func (fastpathT) EncMapStringIntfV(v map[string]interface{}, e *Encoder) {
   999  	e.mapStart(len(v))
  1000  	if e.h.Canonical {
  1001  		v2 := make([]string, len(v))
  1002  		var i uint
  1003  		for k := range v {
  1004  			v2[i] = k
  1005  			i++
  1006  		}
  1007  		sort.Sort(stringSlice(v2))
  1008  		for _, k2 := range v2 {
  1009  			e.mapElemKey()
  1010  			e.e.EncodeString(k2)
  1011  			e.mapElemValue()
  1012  			e.encode(v[k2])
  1013  		}
  1014  	} else {
  1015  		for k2, v2 := range v {
  1016  			e.mapElemKey()
  1017  			e.e.EncodeString(k2)
  1018  			e.mapElemValue()
  1019  			e.encode(v2)
  1020  		}
  1021  	}
  1022  	e.mapEnd()
  1023  }
  1024  func (e *Encoder) fastpathEncMapStringStringR(f *codecFnInfo, rv reflect.Value) {
  1025  	fastpathTV.EncMapStringStringV(rv2i(rv).(map[string]string), e)
  1026  }
  1027  func (fastpathT) EncMapStringStringV(v map[string]string, e *Encoder) {
  1028  	e.mapStart(len(v))
  1029  	if e.h.Canonical {
  1030  		v2 := make([]string, len(v))
  1031  		var i uint
  1032  		for k := range v {
  1033  			v2[i] = k
  1034  			i++
  1035  		}
  1036  		sort.Sort(stringSlice(v2))
  1037  		for _, k2 := range v2 {
  1038  			e.mapElemKey()
  1039  			e.e.EncodeString(k2)
  1040  			e.mapElemValue()
  1041  			e.e.EncodeString(v[k2])
  1042  		}
  1043  	} else {
  1044  		for k2, v2 := range v {
  1045  			e.mapElemKey()
  1046  			e.e.EncodeString(k2)
  1047  			e.mapElemValue()
  1048  			e.e.EncodeString(v2)
  1049  		}
  1050  	}
  1051  	e.mapEnd()
  1052  }
  1053  func (e *Encoder) fastpathEncMapStringBytesR(f *codecFnInfo, rv reflect.Value) {
  1054  	fastpathTV.EncMapStringBytesV(rv2i(rv).(map[string][]byte), e)
  1055  }
  1056  func (fastpathT) EncMapStringBytesV(v map[string][]byte, e *Encoder) {
  1057  	e.mapStart(len(v))
  1058  	if e.h.Canonical {
  1059  		v2 := make([]string, len(v))
  1060  		var i uint
  1061  		for k := range v {
  1062  			v2[i] = k
  1063  			i++
  1064  		}
  1065  		sort.Sort(stringSlice(v2))
  1066  		for _, k2 := range v2 {
  1067  			e.mapElemKey()
  1068  			e.e.EncodeString(k2)
  1069  			e.mapElemValue()
  1070  			e.e.EncodeStringBytesRaw(v[k2])
  1071  		}
  1072  	} else {
  1073  		for k2, v2 := range v {
  1074  			e.mapElemKey()
  1075  			e.e.EncodeString(k2)
  1076  			e.mapElemValue()
  1077  			e.e.EncodeStringBytesRaw(v2)
  1078  		}
  1079  	}
  1080  	e.mapEnd()
  1081  }
  1082  func (e *Encoder) fastpathEncMapStringUint8R(f *codecFnInfo, rv reflect.Value) {
  1083  	fastpathTV.EncMapStringUint8V(rv2i(rv).(map[string]uint8), e)
  1084  }
  1085  func (fastpathT) EncMapStringUint8V(v map[string]uint8, e *Encoder) {
  1086  	e.mapStart(len(v))
  1087  	if e.h.Canonical {
  1088  		v2 := make([]string, len(v))
  1089  		var i uint
  1090  		for k := range v {
  1091  			v2[i] = k
  1092  			i++
  1093  		}
  1094  		sort.Sort(stringSlice(v2))
  1095  		for _, k2 := range v2 {
  1096  			e.mapElemKey()
  1097  			e.e.EncodeString(k2)
  1098  			e.mapElemValue()
  1099  			e.e.EncodeUint(uint64(v[k2]))
  1100  		}
  1101  	} else {
  1102  		for k2, v2 := range v {
  1103  			e.mapElemKey()
  1104  			e.e.EncodeString(k2)
  1105  			e.mapElemValue()
  1106  			e.e.EncodeUint(uint64(v2))
  1107  		}
  1108  	}
  1109  	e.mapEnd()
  1110  }
  1111  func (e *Encoder) fastpathEncMapStringUint64R(f *codecFnInfo, rv reflect.Value) {
  1112  	fastpathTV.EncMapStringUint64V(rv2i(rv).(map[string]uint64), e)
  1113  }
  1114  func (fastpathT) EncMapStringUint64V(v map[string]uint64, e *Encoder) {
  1115  	e.mapStart(len(v))
  1116  	if e.h.Canonical {
  1117  		v2 := make([]string, len(v))
  1118  		var i uint
  1119  		for k := range v {
  1120  			v2[i] = k
  1121  			i++
  1122  		}
  1123  		sort.Sort(stringSlice(v2))
  1124  		for _, k2 := range v2 {
  1125  			e.mapElemKey()
  1126  			e.e.EncodeString(k2)
  1127  			e.mapElemValue()
  1128  			e.e.EncodeUint(v[k2])
  1129  		}
  1130  	} else {
  1131  		for k2, v2 := range v {
  1132  			e.mapElemKey()
  1133  			e.e.EncodeString(k2)
  1134  			e.mapElemValue()
  1135  			e.e.EncodeUint(v2)
  1136  		}
  1137  	}
  1138  	e.mapEnd()
  1139  }
  1140  func (e *Encoder) fastpathEncMapStringIntR(f *codecFnInfo, rv reflect.Value) {
  1141  	fastpathTV.EncMapStringIntV(rv2i(rv).(map[string]int), e)
  1142  }
  1143  func (fastpathT) EncMapStringIntV(v map[string]int, e *Encoder) {
  1144  	e.mapStart(len(v))
  1145  	if e.h.Canonical {
  1146  		v2 := make([]string, len(v))
  1147  		var i uint
  1148  		for k := range v {
  1149  			v2[i] = k
  1150  			i++
  1151  		}
  1152  		sort.Sort(stringSlice(v2))
  1153  		for _, k2 := range v2 {
  1154  			e.mapElemKey()
  1155  			e.e.EncodeString(k2)
  1156  			e.mapElemValue()
  1157  			e.e.EncodeInt(int64(v[k2]))
  1158  		}
  1159  	} else {
  1160  		for k2, v2 := range v {
  1161  			e.mapElemKey()
  1162  			e.e.EncodeString(k2)
  1163  			e.mapElemValue()
  1164  			e.e.EncodeInt(int64(v2))
  1165  		}
  1166  	}
  1167  	e.mapEnd()
  1168  }
  1169  func (e *Encoder) fastpathEncMapStringInt32R(f *codecFnInfo, rv reflect.Value) {
  1170  	fastpathTV.EncMapStringInt32V(rv2i(rv).(map[string]int32), e)
  1171  }
  1172  func (fastpathT) EncMapStringInt32V(v map[string]int32, e *Encoder) {
  1173  	e.mapStart(len(v))
  1174  	if e.h.Canonical {
  1175  		v2 := make([]string, len(v))
  1176  		var i uint
  1177  		for k := range v {
  1178  			v2[i] = k
  1179  			i++
  1180  		}
  1181  		sort.Sort(stringSlice(v2))
  1182  		for _, k2 := range v2 {
  1183  			e.mapElemKey()
  1184  			e.e.EncodeString(k2)
  1185  			e.mapElemValue()
  1186  			e.e.EncodeInt(int64(v[k2]))
  1187  		}
  1188  	} else {
  1189  		for k2, v2 := range v {
  1190  			e.mapElemKey()
  1191  			e.e.EncodeString(k2)
  1192  			e.mapElemValue()
  1193  			e.e.EncodeInt(int64(v2))
  1194  		}
  1195  	}
  1196  	e.mapEnd()
  1197  }
  1198  func (e *Encoder) fastpathEncMapStringFloat64R(f *codecFnInfo, rv reflect.Value) {
  1199  	fastpathTV.EncMapStringFloat64V(rv2i(rv).(map[string]float64), e)
  1200  }
  1201  func (fastpathT) EncMapStringFloat64V(v map[string]float64, e *Encoder) {
  1202  	e.mapStart(len(v))
  1203  	if e.h.Canonical {
  1204  		v2 := make([]string, len(v))
  1205  		var i uint
  1206  		for k := range v {
  1207  			v2[i] = k
  1208  			i++
  1209  		}
  1210  		sort.Sort(stringSlice(v2))
  1211  		for _, k2 := range v2 {
  1212  			e.mapElemKey()
  1213  			e.e.EncodeString(k2)
  1214  			e.mapElemValue()
  1215  			e.e.EncodeFloat64(v[k2])
  1216  		}
  1217  	} else {
  1218  		for k2, v2 := range v {
  1219  			e.mapElemKey()
  1220  			e.e.EncodeString(k2)
  1221  			e.mapElemValue()
  1222  			e.e.EncodeFloat64(v2)
  1223  		}
  1224  	}
  1225  	e.mapEnd()
  1226  }
  1227  func (e *Encoder) fastpathEncMapStringBoolR(f *codecFnInfo, rv reflect.Value) {
  1228  	fastpathTV.EncMapStringBoolV(rv2i(rv).(map[string]bool), e)
  1229  }
  1230  func (fastpathT) EncMapStringBoolV(v map[string]bool, e *Encoder) {
  1231  	e.mapStart(len(v))
  1232  	if e.h.Canonical {
  1233  		v2 := make([]string, len(v))
  1234  		var i uint
  1235  		for k := range v {
  1236  			v2[i] = k
  1237  			i++
  1238  		}
  1239  		sort.Sort(stringSlice(v2))
  1240  		for _, k2 := range v2 {
  1241  			e.mapElemKey()
  1242  			e.e.EncodeString(k2)
  1243  			e.mapElemValue()
  1244  			e.e.EncodeBool(v[k2])
  1245  		}
  1246  	} else {
  1247  		for k2, v2 := range v {
  1248  			e.mapElemKey()
  1249  			e.e.EncodeString(k2)
  1250  			e.mapElemValue()
  1251  			e.e.EncodeBool(v2)
  1252  		}
  1253  	}
  1254  	e.mapEnd()
  1255  }
  1256  func (e *Encoder) fastpathEncMapUint8IntfR(f *codecFnInfo, rv reflect.Value) {
  1257  	fastpathTV.EncMapUint8IntfV(rv2i(rv).(map[uint8]interface{}), e)
  1258  }
  1259  func (fastpathT) EncMapUint8IntfV(v map[uint8]interface{}, e *Encoder) {
  1260  	e.mapStart(len(v))
  1261  	if e.h.Canonical {
  1262  		v2 := make([]uint8, len(v))
  1263  		var i uint
  1264  		for k := range v {
  1265  			v2[i] = k
  1266  			i++
  1267  		}
  1268  		sort.Sort(uint8Slice(v2))
  1269  		for _, k2 := range v2 {
  1270  			e.mapElemKey()
  1271  			e.e.EncodeUint(uint64(k2))
  1272  			e.mapElemValue()
  1273  			e.encode(v[k2])
  1274  		}
  1275  	} else {
  1276  		for k2, v2 := range v {
  1277  			e.mapElemKey()
  1278  			e.e.EncodeUint(uint64(k2))
  1279  			e.mapElemValue()
  1280  			e.encode(v2)
  1281  		}
  1282  	}
  1283  	e.mapEnd()
  1284  }
  1285  func (e *Encoder) fastpathEncMapUint8StringR(f *codecFnInfo, rv reflect.Value) {
  1286  	fastpathTV.EncMapUint8StringV(rv2i(rv).(map[uint8]string), e)
  1287  }
  1288  func (fastpathT) EncMapUint8StringV(v map[uint8]string, e *Encoder) {
  1289  	e.mapStart(len(v))
  1290  	if e.h.Canonical {
  1291  		v2 := make([]uint8, len(v))
  1292  		var i uint
  1293  		for k := range v {
  1294  			v2[i] = k
  1295  			i++
  1296  		}
  1297  		sort.Sort(uint8Slice(v2))
  1298  		for _, k2 := range v2 {
  1299  			e.mapElemKey()
  1300  			e.e.EncodeUint(uint64(k2))
  1301  			e.mapElemValue()
  1302  			e.e.EncodeString(v[k2])
  1303  		}
  1304  	} else {
  1305  		for k2, v2 := range v {
  1306  			e.mapElemKey()
  1307  			e.e.EncodeUint(uint64(k2))
  1308  			e.mapElemValue()
  1309  			e.e.EncodeString(v2)
  1310  		}
  1311  	}
  1312  	e.mapEnd()
  1313  }
  1314  func (e *Encoder) fastpathEncMapUint8BytesR(f *codecFnInfo, rv reflect.Value) {
  1315  	fastpathTV.EncMapUint8BytesV(rv2i(rv).(map[uint8][]byte), e)
  1316  }
  1317  func (fastpathT) EncMapUint8BytesV(v map[uint8][]byte, e *Encoder) {
  1318  	e.mapStart(len(v))
  1319  	if e.h.Canonical {
  1320  		v2 := make([]uint8, len(v))
  1321  		var i uint
  1322  		for k := range v {
  1323  			v2[i] = k
  1324  			i++
  1325  		}
  1326  		sort.Sort(uint8Slice(v2))
  1327  		for _, k2 := range v2 {
  1328  			e.mapElemKey()
  1329  			e.e.EncodeUint(uint64(k2))
  1330  			e.mapElemValue()
  1331  			e.e.EncodeStringBytesRaw(v[k2])
  1332  		}
  1333  	} else {
  1334  		for k2, v2 := range v {
  1335  			e.mapElemKey()
  1336  			e.e.EncodeUint(uint64(k2))
  1337  			e.mapElemValue()
  1338  			e.e.EncodeStringBytesRaw(v2)
  1339  		}
  1340  	}
  1341  	e.mapEnd()
  1342  }
  1343  func (e *Encoder) fastpathEncMapUint8Uint8R(f *codecFnInfo, rv reflect.Value) {
  1344  	fastpathTV.EncMapUint8Uint8V(rv2i(rv).(map[uint8]uint8), e)
  1345  }
  1346  func (fastpathT) EncMapUint8Uint8V(v map[uint8]uint8, e *Encoder) {
  1347  	e.mapStart(len(v))
  1348  	if e.h.Canonical {
  1349  		v2 := make([]uint8, len(v))
  1350  		var i uint
  1351  		for k := range v {
  1352  			v2[i] = k
  1353  			i++
  1354  		}
  1355  		sort.Sort(uint8Slice(v2))
  1356  		for _, k2 := range v2 {
  1357  			e.mapElemKey()
  1358  			e.e.EncodeUint(uint64(k2))
  1359  			e.mapElemValue()
  1360  			e.e.EncodeUint(uint64(v[k2]))
  1361  		}
  1362  	} else {
  1363  		for k2, v2 := range v {
  1364  			e.mapElemKey()
  1365  			e.e.EncodeUint(uint64(k2))
  1366  			e.mapElemValue()
  1367  			e.e.EncodeUint(uint64(v2))
  1368  		}
  1369  	}
  1370  	e.mapEnd()
  1371  }
  1372  func (e *Encoder) fastpathEncMapUint8Uint64R(f *codecFnInfo, rv reflect.Value) {
  1373  	fastpathTV.EncMapUint8Uint64V(rv2i(rv).(map[uint8]uint64), e)
  1374  }
  1375  func (fastpathT) EncMapUint8Uint64V(v map[uint8]uint64, e *Encoder) {
  1376  	e.mapStart(len(v))
  1377  	if e.h.Canonical {
  1378  		v2 := make([]uint8, len(v))
  1379  		var i uint
  1380  		for k := range v {
  1381  			v2[i] = k
  1382  			i++
  1383  		}
  1384  		sort.Sort(uint8Slice(v2))
  1385  		for _, k2 := range v2 {
  1386  			e.mapElemKey()
  1387  			e.e.EncodeUint(uint64(k2))
  1388  			e.mapElemValue()
  1389  			e.e.EncodeUint(v[k2])
  1390  		}
  1391  	} else {
  1392  		for k2, v2 := range v {
  1393  			e.mapElemKey()
  1394  			e.e.EncodeUint(uint64(k2))
  1395  			e.mapElemValue()
  1396  			e.e.EncodeUint(v2)
  1397  		}
  1398  	}
  1399  	e.mapEnd()
  1400  }
  1401  func (e *Encoder) fastpathEncMapUint8IntR(f *codecFnInfo, rv reflect.Value) {
  1402  	fastpathTV.EncMapUint8IntV(rv2i(rv).(map[uint8]int), e)
  1403  }
  1404  func (fastpathT) EncMapUint8IntV(v map[uint8]int, e *Encoder) {
  1405  	e.mapStart(len(v))
  1406  	if e.h.Canonical {
  1407  		v2 := make([]uint8, len(v))
  1408  		var i uint
  1409  		for k := range v {
  1410  			v2[i] = k
  1411  			i++
  1412  		}
  1413  		sort.Sort(uint8Slice(v2))
  1414  		for _, k2 := range v2 {
  1415  			e.mapElemKey()
  1416  			e.e.EncodeUint(uint64(k2))
  1417  			e.mapElemValue()
  1418  			e.e.EncodeInt(int64(v[k2]))
  1419  		}
  1420  	} else {
  1421  		for k2, v2 := range v {
  1422  			e.mapElemKey()
  1423  			e.e.EncodeUint(uint64(k2))
  1424  			e.mapElemValue()
  1425  			e.e.EncodeInt(int64(v2))
  1426  		}
  1427  	}
  1428  	e.mapEnd()
  1429  }
  1430  func (e *Encoder) fastpathEncMapUint8Int32R(f *codecFnInfo, rv reflect.Value) {
  1431  	fastpathTV.EncMapUint8Int32V(rv2i(rv).(map[uint8]int32), e)
  1432  }
  1433  func (fastpathT) EncMapUint8Int32V(v map[uint8]int32, e *Encoder) {
  1434  	e.mapStart(len(v))
  1435  	if e.h.Canonical {
  1436  		v2 := make([]uint8, len(v))
  1437  		var i uint
  1438  		for k := range v {
  1439  			v2[i] = k
  1440  			i++
  1441  		}
  1442  		sort.Sort(uint8Slice(v2))
  1443  		for _, k2 := range v2 {
  1444  			e.mapElemKey()
  1445  			e.e.EncodeUint(uint64(k2))
  1446  			e.mapElemValue()
  1447  			e.e.EncodeInt(int64(v[k2]))
  1448  		}
  1449  	} else {
  1450  		for k2, v2 := range v {
  1451  			e.mapElemKey()
  1452  			e.e.EncodeUint(uint64(k2))
  1453  			e.mapElemValue()
  1454  			e.e.EncodeInt(int64(v2))
  1455  		}
  1456  	}
  1457  	e.mapEnd()
  1458  }
  1459  func (e *Encoder) fastpathEncMapUint8Float64R(f *codecFnInfo, rv reflect.Value) {
  1460  	fastpathTV.EncMapUint8Float64V(rv2i(rv).(map[uint8]float64), e)
  1461  }
  1462  func (fastpathT) EncMapUint8Float64V(v map[uint8]float64, e *Encoder) {
  1463  	e.mapStart(len(v))
  1464  	if e.h.Canonical {
  1465  		v2 := make([]uint8, len(v))
  1466  		var i uint
  1467  		for k := range v {
  1468  			v2[i] = k
  1469  			i++
  1470  		}
  1471  		sort.Sort(uint8Slice(v2))
  1472  		for _, k2 := range v2 {
  1473  			e.mapElemKey()
  1474  			e.e.EncodeUint(uint64(k2))
  1475  			e.mapElemValue()
  1476  			e.e.EncodeFloat64(v[k2])
  1477  		}
  1478  	} else {
  1479  		for k2, v2 := range v {
  1480  			e.mapElemKey()
  1481  			e.e.EncodeUint(uint64(k2))
  1482  			e.mapElemValue()
  1483  			e.e.EncodeFloat64(v2)
  1484  		}
  1485  	}
  1486  	e.mapEnd()
  1487  }
  1488  func (e *Encoder) fastpathEncMapUint8BoolR(f *codecFnInfo, rv reflect.Value) {
  1489  	fastpathTV.EncMapUint8BoolV(rv2i(rv).(map[uint8]bool), e)
  1490  }
  1491  func (fastpathT) EncMapUint8BoolV(v map[uint8]bool, e *Encoder) {
  1492  	e.mapStart(len(v))
  1493  	if e.h.Canonical {
  1494  		v2 := make([]uint8, len(v))
  1495  		var i uint
  1496  		for k := range v {
  1497  			v2[i] = k
  1498  			i++
  1499  		}
  1500  		sort.Sort(uint8Slice(v2))
  1501  		for _, k2 := range v2 {
  1502  			e.mapElemKey()
  1503  			e.e.EncodeUint(uint64(k2))
  1504  			e.mapElemValue()
  1505  			e.e.EncodeBool(v[k2])
  1506  		}
  1507  	} else {
  1508  		for k2, v2 := range v {
  1509  			e.mapElemKey()
  1510  			e.e.EncodeUint(uint64(k2))
  1511  			e.mapElemValue()
  1512  			e.e.EncodeBool(v2)
  1513  		}
  1514  	}
  1515  	e.mapEnd()
  1516  }
  1517  func (e *Encoder) fastpathEncMapUint64IntfR(f *codecFnInfo, rv reflect.Value) {
  1518  	fastpathTV.EncMapUint64IntfV(rv2i(rv).(map[uint64]interface{}), e)
  1519  }
  1520  func (fastpathT) EncMapUint64IntfV(v map[uint64]interface{}, e *Encoder) {
  1521  	e.mapStart(len(v))
  1522  	if e.h.Canonical {
  1523  		v2 := make([]uint64, len(v))
  1524  		var i uint
  1525  		for k := range v {
  1526  			v2[i] = k
  1527  			i++
  1528  		}
  1529  		sort.Sort(uint64Slice(v2))
  1530  		for _, k2 := range v2 {
  1531  			e.mapElemKey()
  1532  			e.e.EncodeUint(k2)
  1533  			e.mapElemValue()
  1534  			e.encode(v[k2])
  1535  		}
  1536  	} else {
  1537  		for k2, v2 := range v {
  1538  			e.mapElemKey()
  1539  			e.e.EncodeUint(k2)
  1540  			e.mapElemValue()
  1541  			e.encode(v2)
  1542  		}
  1543  	}
  1544  	e.mapEnd()
  1545  }
  1546  func (e *Encoder) fastpathEncMapUint64StringR(f *codecFnInfo, rv reflect.Value) {
  1547  	fastpathTV.EncMapUint64StringV(rv2i(rv).(map[uint64]string), e)
  1548  }
  1549  func (fastpathT) EncMapUint64StringV(v map[uint64]string, e *Encoder) {
  1550  	e.mapStart(len(v))
  1551  	if e.h.Canonical {
  1552  		v2 := make([]uint64, len(v))
  1553  		var i uint
  1554  		for k := range v {
  1555  			v2[i] = k
  1556  			i++
  1557  		}
  1558  		sort.Sort(uint64Slice(v2))
  1559  		for _, k2 := range v2 {
  1560  			e.mapElemKey()
  1561  			e.e.EncodeUint(k2)
  1562  			e.mapElemValue()
  1563  			e.e.EncodeString(v[k2])
  1564  		}
  1565  	} else {
  1566  		for k2, v2 := range v {
  1567  			e.mapElemKey()
  1568  			e.e.EncodeUint(k2)
  1569  			e.mapElemValue()
  1570  			e.e.EncodeString(v2)
  1571  		}
  1572  	}
  1573  	e.mapEnd()
  1574  }
  1575  func (e *Encoder) fastpathEncMapUint64BytesR(f *codecFnInfo, rv reflect.Value) {
  1576  	fastpathTV.EncMapUint64BytesV(rv2i(rv).(map[uint64][]byte), e)
  1577  }
  1578  func (fastpathT) EncMapUint64BytesV(v map[uint64][]byte, e *Encoder) {
  1579  	e.mapStart(len(v))
  1580  	if e.h.Canonical {
  1581  		v2 := make([]uint64, len(v))
  1582  		var i uint
  1583  		for k := range v {
  1584  			v2[i] = k
  1585  			i++
  1586  		}
  1587  		sort.Sort(uint64Slice(v2))
  1588  		for _, k2 := range v2 {
  1589  			e.mapElemKey()
  1590  			e.e.EncodeUint(k2)
  1591  			e.mapElemValue()
  1592  			e.e.EncodeStringBytesRaw(v[k2])
  1593  		}
  1594  	} else {
  1595  		for k2, v2 := range v {
  1596  			e.mapElemKey()
  1597  			e.e.EncodeUint(k2)
  1598  			e.mapElemValue()
  1599  			e.e.EncodeStringBytesRaw(v2)
  1600  		}
  1601  	}
  1602  	e.mapEnd()
  1603  }
  1604  func (e *Encoder) fastpathEncMapUint64Uint8R(f *codecFnInfo, rv reflect.Value) {
  1605  	fastpathTV.EncMapUint64Uint8V(rv2i(rv).(map[uint64]uint8), e)
  1606  }
  1607  func (fastpathT) EncMapUint64Uint8V(v map[uint64]uint8, e *Encoder) {
  1608  	e.mapStart(len(v))
  1609  	if e.h.Canonical {
  1610  		v2 := make([]uint64, len(v))
  1611  		var i uint
  1612  		for k := range v {
  1613  			v2[i] = k
  1614  			i++
  1615  		}
  1616  		sort.Sort(uint64Slice(v2))
  1617  		for _, k2 := range v2 {
  1618  			e.mapElemKey()
  1619  			e.e.EncodeUint(k2)
  1620  			e.mapElemValue()
  1621  			e.e.EncodeUint(uint64(v[k2]))
  1622  		}
  1623  	} else {
  1624  		for k2, v2 := range v {
  1625  			e.mapElemKey()
  1626  			e.e.EncodeUint(k2)
  1627  			e.mapElemValue()
  1628  			e.e.EncodeUint(uint64(v2))
  1629  		}
  1630  	}
  1631  	e.mapEnd()
  1632  }
  1633  func (e *Encoder) fastpathEncMapUint64Uint64R(f *codecFnInfo, rv reflect.Value) {
  1634  	fastpathTV.EncMapUint64Uint64V(rv2i(rv).(map[uint64]uint64), e)
  1635  }
  1636  func (fastpathT) EncMapUint64Uint64V(v map[uint64]uint64, e *Encoder) {
  1637  	e.mapStart(len(v))
  1638  	if e.h.Canonical {
  1639  		v2 := make([]uint64, len(v))
  1640  		var i uint
  1641  		for k := range v {
  1642  			v2[i] = k
  1643  			i++
  1644  		}
  1645  		sort.Sort(uint64Slice(v2))
  1646  		for _, k2 := range v2 {
  1647  			e.mapElemKey()
  1648  			e.e.EncodeUint(k2)
  1649  			e.mapElemValue()
  1650  			e.e.EncodeUint(v[k2])
  1651  		}
  1652  	} else {
  1653  		for k2, v2 := range v {
  1654  			e.mapElemKey()
  1655  			e.e.EncodeUint(k2)
  1656  			e.mapElemValue()
  1657  			e.e.EncodeUint(v2)
  1658  		}
  1659  	}
  1660  	e.mapEnd()
  1661  }
  1662  func (e *Encoder) fastpathEncMapUint64IntR(f *codecFnInfo, rv reflect.Value) {
  1663  	fastpathTV.EncMapUint64IntV(rv2i(rv).(map[uint64]int), e)
  1664  }
  1665  func (fastpathT) EncMapUint64IntV(v map[uint64]int, e *Encoder) {
  1666  	e.mapStart(len(v))
  1667  	if e.h.Canonical {
  1668  		v2 := make([]uint64, len(v))
  1669  		var i uint
  1670  		for k := range v {
  1671  			v2[i] = k
  1672  			i++
  1673  		}
  1674  		sort.Sort(uint64Slice(v2))
  1675  		for _, k2 := range v2 {
  1676  			e.mapElemKey()
  1677  			e.e.EncodeUint(k2)
  1678  			e.mapElemValue()
  1679  			e.e.EncodeInt(int64(v[k2]))
  1680  		}
  1681  	} else {
  1682  		for k2, v2 := range v {
  1683  			e.mapElemKey()
  1684  			e.e.EncodeUint(k2)
  1685  			e.mapElemValue()
  1686  			e.e.EncodeInt(int64(v2))
  1687  		}
  1688  	}
  1689  	e.mapEnd()
  1690  }
  1691  func (e *Encoder) fastpathEncMapUint64Int32R(f *codecFnInfo, rv reflect.Value) {
  1692  	fastpathTV.EncMapUint64Int32V(rv2i(rv).(map[uint64]int32), e)
  1693  }
  1694  func (fastpathT) EncMapUint64Int32V(v map[uint64]int32, e *Encoder) {
  1695  	e.mapStart(len(v))
  1696  	if e.h.Canonical {
  1697  		v2 := make([]uint64, len(v))
  1698  		var i uint
  1699  		for k := range v {
  1700  			v2[i] = k
  1701  			i++
  1702  		}
  1703  		sort.Sort(uint64Slice(v2))
  1704  		for _, k2 := range v2 {
  1705  			e.mapElemKey()
  1706  			e.e.EncodeUint(k2)
  1707  			e.mapElemValue()
  1708  			e.e.EncodeInt(int64(v[k2]))
  1709  		}
  1710  	} else {
  1711  		for k2, v2 := range v {
  1712  			e.mapElemKey()
  1713  			e.e.EncodeUint(k2)
  1714  			e.mapElemValue()
  1715  			e.e.EncodeInt(int64(v2))
  1716  		}
  1717  	}
  1718  	e.mapEnd()
  1719  }
  1720  func (e *Encoder) fastpathEncMapUint64Float64R(f *codecFnInfo, rv reflect.Value) {
  1721  	fastpathTV.EncMapUint64Float64V(rv2i(rv).(map[uint64]float64), e)
  1722  }
  1723  func (fastpathT) EncMapUint64Float64V(v map[uint64]float64, e *Encoder) {
  1724  	e.mapStart(len(v))
  1725  	if e.h.Canonical {
  1726  		v2 := make([]uint64, len(v))
  1727  		var i uint
  1728  		for k := range v {
  1729  			v2[i] = k
  1730  			i++
  1731  		}
  1732  		sort.Sort(uint64Slice(v2))
  1733  		for _, k2 := range v2 {
  1734  			e.mapElemKey()
  1735  			e.e.EncodeUint(k2)
  1736  			e.mapElemValue()
  1737  			e.e.EncodeFloat64(v[k2])
  1738  		}
  1739  	} else {
  1740  		for k2, v2 := range v {
  1741  			e.mapElemKey()
  1742  			e.e.EncodeUint(k2)
  1743  			e.mapElemValue()
  1744  			e.e.EncodeFloat64(v2)
  1745  		}
  1746  	}
  1747  	e.mapEnd()
  1748  }
  1749  func (e *Encoder) fastpathEncMapUint64BoolR(f *codecFnInfo, rv reflect.Value) {
  1750  	fastpathTV.EncMapUint64BoolV(rv2i(rv).(map[uint64]bool), e)
  1751  }
  1752  func (fastpathT) EncMapUint64BoolV(v map[uint64]bool, e *Encoder) {
  1753  	e.mapStart(len(v))
  1754  	if e.h.Canonical {
  1755  		v2 := make([]uint64, len(v))
  1756  		var i uint
  1757  		for k := range v {
  1758  			v2[i] = k
  1759  			i++
  1760  		}
  1761  		sort.Sort(uint64Slice(v2))
  1762  		for _, k2 := range v2 {
  1763  			e.mapElemKey()
  1764  			e.e.EncodeUint(k2)
  1765  			e.mapElemValue()
  1766  			e.e.EncodeBool(v[k2])
  1767  		}
  1768  	} else {
  1769  		for k2, v2 := range v {
  1770  			e.mapElemKey()
  1771  			e.e.EncodeUint(k2)
  1772  			e.mapElemValue()
  1773  			e.e.EncodeBool(v2)
  1774  		}
  1775  	}
  1776  	e.mapEnd()
  1777  }
  1778  func (e *Encoder) fastpathEncMapIntIntfR(f *codecFnInfo, rv reflect.Value) {
  1779  	fastpathTV.EncMapIntIntfV(rv2i(rv).(map[int]interface{}), e)
  1780  }
  1781  func (fastpathT) EncMapIntIntfV(v map[int]interface{}, e *Encoder) {
  1782  	e.mapStart(len(v))
  1783  	if e.h.Canonical {
  1784  		v2 := make([]int, len(v))
  1785  		var i uint
  1786  		for k := range v {
  1787  			v2[i] = k
  1788  			i++
  1789  		}
  1790  		sort.Sort(intSlice(v2))
  1791  		for _, k2 := range v2 {
  1792  			e.mapElemKey()
  1793  			e.e.EncodeInt(int64(k2))
  1794  			e.mapElemValue()
  1795  			e.encode(v[k2])
  1796  		}
  1797  	} else {
  1798  		for k2, v2 := range v {
  1799  			e.mapElemKey()
  1800  			e.e.EncodeInt(int64(k2))
  1801  			e.mapElemValue()
  1802  			e.encode(v2)
  1803  		}
  1804  	}
  1805  	e.mapEnd()
  1806  }
  1807  func (e *Encoder) fastpathEncMapIntStringR(f *codecFnInfo, rv reflect.Value) {
  1808  	fastpathTV.EncMapIntStringV(rv2i(rv).(map[int]string), e)
  1809  }
  1810  func (fastpathT) EncMapIntStringV(v map[int]string, e *Encoder) {
  1811  	e.mapStart(len(v))
  1812  	if e.h.Canonical {
  1813  		v2 := make([]int, len(v))
  1814  		var i uint
  1815  		for k := range v {
  1816  			v2[i] = k
  1817  			i++
  1818  		}
  1819  		sort.Sort(intSlice(v2))
  1820  		for _, k2 := range v2 {
  1821  			e.mapElemKey()
  1822  			e.e.EncodeInt(int64(k2))
  1823  			e.mapElemValue()
  1824  			e.e.EncodeString(v[k2])
  1825  		}
  1826  	} else {
  1827  		for k2, v2 := range v {
  1828  			e.mapElemKey()
  1829  			e.e.EncodeInt(int64(k2))
  1830  			e.mapElemValue()
  1831  			e.e.EncodeString(v2)
  1832  		}
  1833  	}
  1834  	e.mapEnd()
  1835  }
  1836  func (e *Encoder) fastpathEncMapIntBytesR(f *codecFnInfo, rv reflect.Value) {
  1837  	fastpathTV.EncMapIntBytesV(rv2i(rv).(map[int][]byte), e)
  1838  }
  1839  func (fastpathT) EncMapIntBytesV(v map[int][]byte, e *Encoder) {
  1840  	e.mapStart(len(v))
  1841  	if e.h.Canonical {
  1842  		v2 := make([]int, len(v))
  1843  		var i uint
  1844  		for k := range v {
  1845  			v2[i] = k
  1846  			i++
  1847  		}
  1848  		sort.Sort(intSlice(v2))
  1849  		for _, k2 := range v2 {
  1850  			e.mapElemKey()
  1851  			e.e.EncodeInt(int64(k2))
  1852  			e.mapElemValue()
  1853  			e.e.EncodeStringBytesRaw(v[k2])
  1854  		}
  1855  	} else {
  1856  		for k2, v2 := range v {
  1857  			e.mapElemKey()
  1858  			e.e.EncodeInt(int64(k2))
  1859  			e.mapElemValue()
  1860  			e.e.EncodeStringBytesRaw(v2)
  1861  		}
  1862  	}
  1863  	e.mapEnd()
  1864  }
  1865  func (e *Encoder) fastpathEncMapIntUint8R(f *codecFnInfo, rv reflect.Value) {
  1866  	fastpathTV.EncMapIntUint8V(rv2i(rv).(map[int]uint8), e)
  1867  }
  1868  func (fastpathT) EncMapIntUint8V(v map[int]uint8, e *Encoder) {
  1869  	e.mapStart(len(v))
  1870  	if e.h.Canonical {
  1871  		v2 := make([]int, len(v))
  1872  		var i uint
  1873  		for k := range v {
  1874  			v2[i] = k
  1875  			i++
  1876  		}
  1877  		sort.Sort(intSlice(v2))
  1878  		for _, k2 := range v2 {
  1879  			e.mapElemKey()
  1880  			e.e.EncodeInt(int64(k2))
  1881  			e.mapElemValue()
  1882  			e.e.EncodeUint(uint64(v[k2]))
  1883  		}
  1884  	} else {
  1885  		for k2, v2 := range v {
  1886  			e.mapElemKey()
  1887  			e.e.EncodeInt(int64(k2))
  1888  			e.mapElemValue()
  1889  			e.e.EncodeUint(uint64(v2))
  1890  		}
  1891  	}
  1892  	e.mapEnd()
  1893  }
  1894  func (e *Encoder) fastpathEncMapIntUint64R(f *codecFnInfo, rv reflect.Value) {
  1895  	fastpathTV.EncMapIntUint64V(rv2i(rv).(map[int]uint64), e)
  1896  }
  1897  func (fastpathT) EncMapIntUint64V(v map[int]uint64, e *Encoder) {
  1898  	e.mapStart(len(v))
  1899  	if e.h.Canonical {
  1900  		v2 := make([]int, len(v))
  1901  		var i uint
  1902  		for k := range v {
  1903  			v2[i] = k
  1904  			i++
  1905  		}
  1906  		sort.Sort(intSlice(v2))
  1907  		for _, k2 := range v2 {
  1908  			e.mapElemKey()
  1909  			e.e.EncodeInt(int64(k2))
  1910  			e.mapElemValue()
  1911  			e.e.EncodeUint(v[k2])
  1912  		}
  1913  	} else {
  1914  		for k2, v2 := range v {
  1915  			e.mapElemKey()
  1916  			e.e.EncodeInt(int64(k2))
  1917  			e.mapElemValue()
  1918  			e.e.EncodeUint(v2)
  1919  		}
  1920  	}
  1921  	e.mapEnd()
  1922  }
  1923  func (e *Encoder) fastpathEncMapIntIntR(f *codecFnInfo, rv reflect.Value) {
  1924  	fastpathTV.EncMapIntIntV(rv2i(rv).(map[int]int), e)
  1925  }
  1926  func (fastpathT) EncMapIntIntV(v map[int]int, e *Encoder) {
  1927  	e.mapStart(len(v))
  1928  	if e.h.Canonical {
  1929  		v2 := make([]int, len(v))
  1930  		var i uint
  1931  		for k := range v {
  1932  			v2[i] = k
  1933  			i++
  1934  		}
  1935  		sort.Sort(intSlice(v2))
  1936  		for _, k2 := range v2 {
  1937  			e.mapElemKey()
  1938  			e.e.EncodeInt(int64(k2))
  1939  			e.mapElemValue()
  1940  			e.e.EncodeInt(int64(v[k2]))
  1941  		}
  1942  	} else {
  1943  		for k2, v2 := range v {
  1944  			e.mapElemKey()
  1945  			e.e.EncodeInt(int64(k2))
  1946  			e.mapElemValue()
  1947  			e.e.EncodeInt(int64(v2))
  1948  		}
  1949  	}
  1950  	e.mapEnd()
  1951  }
  1952  func (e *Encoder) fastpathEncMapIntInt32R(f *codecFnInfo, rv reflect.Value) {
  1953  	fastpathTV.EncMapIntInt32V(rv2i(rv).(map[int]int32), e)
  1954  }
  1955  func (fastpathT) EncMapIntInt32V(v map[int]int32, e *Encoder) {
  1956  	e.mapStart(len(v))
  1957  	if e.h.Canonical {
  1958  		v2 := make([]int, len(v))
  1959  		var i uint
  1960  		for k := range v {
  1961  			v2[i] = k
  1962  			i++
  1963  		}
  1964  		sort.Sort(intSlice(v2))
  1965  		for _, k2 := range v2 {
  1966  			e.mapElemKey()
  1967  			e.e.EncodeInt(int64(k2))
  1968  			e.mapElemValue()
  1969  			e.e.EncodeInt(int64(v[k2]))
  1970  		}
  1971  	} else {
  1972  		for k2, v2 := range v {
  1973  			e.mapElemKey()
  1974  			e.e.EncodeInt(int64(k2))
  1975  			e.mapElemValue()
  1976  			e.e.EncodeInt(int64(v2))
  1977  		}
  1978  	}
  1979  	e.mapEnd()
  1980  }
  1981  func (e *Encoder) fastpathEncMapIntFloat64R(f *codecFnInfo, rv reflect.Value) {
  1982  	fastpathTV.EncMapIntFloat64V(rv2i(rv).(map[int]float64), e)
  1983  }
  1984  func (fastpathT) EncMapIntFloat64V(v map[int]float64, e *Encoder) {
  1985  	e.mapStart(len(v))
  1986  	if e.h.Canonical {
  1987  		v2 := make([]int, len(v))
  1988  		var i uint
  1989  		for k := range v {
  1990  			v2[i] = k
  1991  			i++
  1992  		}
  1993  		sort.Sort(intSlice(v2))
  1994  		for _, k2 := range v2 {
  1995  			e.mapElemKey()
  1996  			e.e.EncodeInt(int64(k2))
  1997  			e.mapElemValue()
  1998  			e.e.EncodeFloat64(v[k2])
  1999  		}
  2000  	} else {
  2001  		for k2, v2 := range v {
  2002  			e.mapElemKey()
  2003  			e.e.EncodeInt(int64(k2))
  2004  			e.mapElemValue()
  2005  			e.e.EncodeFloat64(v2)
  2006  		}
  2007  	}
  2008  	e.mapEnd()
  2009  }
  2010  func (e *Encoder) fastpathEncMapIntBoolR(f *codecFnInfo, rv reflect.Value) {
  2011  	fastpathTV.EncMapIntBoolV(rv2i(rv).(map[int]bool), e)
  2012  }
  2013  func (fastpathT) EncMapIntBoolV(v map[int]bool, e *Encoder) {
  2014  	e.mapStart(len(v))
  2015  	if e.h.Canonical {
  2016  		v2 := make([]int, len(v))
  2017  		var i uint
  2018  		for k := range v {
  2019  			v2[i] = k
  2020  			i++
  2021  		}
  2022  		sort.Sort(intSlice(v2))
  2023  		for _, k2 := range v2 {
  2024  			e.mapElemKey()
  2025  			e.e.EncodeInt(int64(k2))
  2026  			e.mapElemValue()
  2027  			e.e.EncodeBool(v[k2])
  2028  		}
  2029  	} else {
  2030  		for k2, v2 := range v {
  2031  			e.mapElemKey()
  2032  			e.e.EncodeInt(int64(k2))
  2033  			e.mapElemValue()
  2034  			e.e.EncodeBool(v2)
  2035  		}
  2036  	}
  2037  	e.mapEnd()
  2038  }
  2039  func (e *Encoder) fastpathEncMapInt32IntfR(f *codecFnInfo, rv reflect.Value) {
  2040  	fastpathTV.EncMapInt32IntfV(rv2i(rv).(map[int32]interface{}), e)
  2041  }
  2042  func (fastpathT) EncMapInt32IntfV(v map[int32]interface{}, e *Encoder) {
  2043  	e.mapStart(len(v))
  2044  	if e.h.Canonical {
  2045  		v2 := make([]int32, len(v))
  2046  		var i uint
  2047  		for k := range v {
  2048  			v2[i] = k
  2049  			i++
  2050  		}
  2051  		sort.Sort(int32Slice(v2))
  2052  		for _, k2 := range v2 {
  2053  			e.mapElemKey()
  2054  			e.e.EncodeInt(int64(k2))
  2055  			e.mapElemValue()
  2056  			e.encode(v[k2])
  2057  		}
  2058  	} else {
  2059  		for k2, v2 := range v {
  2060  			e.mapElemKey()
  2061  			e.e.EncodeInt(int64(k2))
  2062  			e.mapElemValue()
  2063  			e.encode(v2)
  2064  		}
  2065  	}
  2066  	e.mapEnd()
  2067  }
  2068  func (e *Encoder) fastpathEncMapInt32StringR(f *codecFnInfo, rv reflect.Value) {
  2069  	fastpathTV.EncMapInt32StringV(rv2i(rv).(map[int32]string), e)
  2070  }
  2071  func (fastpathT) EncMapInt32StringV(v map[int32]string, e *Encoder) {
  2072  	e.mapStart(len(v))
  2073  	if e.h.Canonical {
  2074  		v2 := make([]int32, len(v))
  2075  		var i uint
  2076  		for k := range v {
  2077  			v2[i] = k
  2078  			i++
  2079  		}
  2080  		sort.Sort(int32Slice(v2))
  2081  		for _, k2 := range v2 {
  2082  			e.mapElemKey()
  2083  			e.e.EncodeInt(int64(k2))
  2084  			e.mapElemValue()
  2085  			e.e.EncodeString(v[k2])
  2086  		}
  2087  	} else {
  2088  		for k2, v2 := range v {
  2089  			e.mapElemKey()
  2090  			e.e.EncodeInt(int64(k2))
  2091  			e.mapElemValue()
  2092  			e.e.EncodeString(v2)
  2093  		}
  2094  	}
  2095  	e.mapEnd()
  2096  }
  2097  func (e *Encoder) fastpathEncMapInt32BytesR(f *codecFnInfo, rv reflect.Value) {
  2098  	fastpathTV.EncMapInt32BytesV(rv2i(rv).(map[int32][]byte), e)
  2099  }
  2100  func (fastpathT) EncMapInt32BytesV(v map[int32][]byte, e *Encoder) {
  2101  	e.mapStart(len(v))
  2102  	if e.h.Canonical {
  2103  		v2 := make([]int32, len(v))
  2104  		var i uint
  2105  		for k := range v {
  2106  			v2[i] = k
  2107  			i++
  2108  		}
  2109  		sort.Sort(int32Slice(v2))
  2110  		for _, k2 := range v2 {
  2111  			e.mapElemKey()
  2112  			e.e.EncodeInt(int64(k2))
  2113  			e.mapElemValue()
  2114  			e.e.EncodeStringBytesRaw(v[k2])
  2115  		}
  2116  	} else {
  2117  		for k2, v2 := range v {
  2118  			e.mapElemKey()
  2119  			e.e.EncodeInt(int64(k2))
  2120  			e.mapElemValue()
  2121  			e.e.EncodeStringBytesRaw(v2)
  2122  		}
  2123  	}
  2124  	e.mapEnd()
  2125  }
  2126  func (e *Encoder) fastpathEncMapInt32Uint8R(f *codecFnInfo, rv reflect.Value) {
  2127  	fastpathTV.EncMapInt32Uint8V(rv2i(rv).(map[int32]uint8), e)
  2128  }
  2129  func (fastpathT) EncMapInt32Uint8V(v map[int32]uint8, e *Encoder) {
  2130  	e.mapStart(len(v))
  2131  	if e.h.Canonical {
  2132  		v2 := make([]int32, len(v))
  2133  		var i uint
  2134  		for k := range v {
  2135  			v2[i] = k
  2136  			i++
  2137  		}
  2138  		sort.Sort(int32Slice(v2))
  2139  		for _, k2 := range v2 {
  2140  			e.mapElemKey()
  2141  			e.e.EncodeInt(int64(k2))
  2142  			e.mapElemValue()
  2143  			e.e.EncodeUint(uint64(v[k2]))
  2144  		}
  2145  	} else {
  2146  		for k2, v2 := range v {
  2147  			e.mapElemKey()
  2148  			e.e.EncodeInt(int64(k2))
  2149  			e.mapElemValue()
  2150  			e.e.EncodeUint(uint64(v2))
  2151  		}
  2152  	}
  2153  	e.mapEnd()
  2154  }
  2155  func (e *Encoder) fastpathEncMapInt32Uint64R(f *codecFnInfo, rv reflect.Value) {
  2156  	fastpathTV.EncMapInt32Uint64V(rv2i(rv).(map[int32]uint64), e)
  2157  }
  2158  func (fastpathT) EncMapInt32Uint64V(v map[int32]uint64, e *Encoder) {
  2159  	e.mapStart(len(v))
  2160  	if e.h.Canonical {
  2161  		v2 := make([]int32, len(v))
  2162  		var i uint
  2163  		for k := range v {
  2164  			v2[i] = k
  2165  			i++
  2166  		}
  2167  		sort.Sort(int32Slice(v2))
  2168  		for _, k2 := range v2 {
  2169  			e.mapElemKey()
  2170  			e.e.EncodeInt(int64(k2))
  2171  			e.mapElemValue()
  2172  			e.e.EncodeUint(v[k2])
  2173  		}
  2174  	} else {
  2175  		for k2, v2 := range v {
  2176  			e.mapElemKey()
  2177  			e.e.EncodeInt(int64(k2))
  2178  			e.mapElemValue()
  2179  			e.e.EncodeUint(v2)
  2180  		}
  2181  	}
  2182  	e.mapEnd()
  2183  }
  2184  func (e *Encoder) fastpathEncMapInt32IntR(f *codecFnInfo, rv reflect.Value) {
  2185  	fastpathTV.EncMapInt32IntV(rv2i(rv).(map[int32]int), e)
  2186  }
  2187  func (fastpathT) EncMapInt32IntV(v map[int32]int, e *Encoder) {
  2188  	e.mapStart(len(v))
  2189  	if e.h.Canonical {
  2190  		v2 := make([]int32, len(v))
  2191  		var i uint
  2192  		for k := range v {
  2193  			v2[i] = k
  2194  			i++
  2195  		}
  2196  		sort.Sort(int32Slice(v2))
  2197  		for _, k2 := range v2 {
  2198  			e.mapElemKey()
  2199  			e.e.EncodeInt(int64(k2))
  2200  			e.mapElemValue()
  2201  			e.e.EncodeInt(int64(v[k2]))
  2202  		}
  2203  	} else {
  2204  		for k2, v2 := range v {
  2205  			e.mapElemKey()
  2206  			e.e.EncodeInt(int64(k2))
  2207  			e.mapElemValue()
  2208  			e.e.EncodeInt(int64(v2))
  2209  		}
  2210  	}
  2211  	e.mapEnd()
  2212  }
  2213  func (e *Encoder) fastpathEncMapInt32Int32R(f *codecFnInfo, rv reflect.Value) {
  2214  	fastpathTV.EncMapInt32Int32V(rv2i(rv).(map[int32]int32), e)
  2215  }
  2216  func (fastpathT) EncMapInt32Int32V(v map[int32]int32, e *Encoder) {
  2217  	e.mapStart(len(v))
  2218  	if e.h.Canonical {
  2219  		v2 := make([]int32, len(v))
  2220  		var i uint
  2221  		for k := range v {
  2222  			v2[i] = k
  2223  			i++
  2224  		}
  2225  		sort.Sort(int32Slice(v2))
  2226  		for _, k2 := range v2 {
  2227  			e.mapElemKey()
  2228  			e.e.EncodeInt(int64(k2))
  2229  			e.mapElemValue()
  2230  			e.e.EncodeInt(int64(v[k2]))
  2231  		}
  2232  	} else {
  2233  		for k2, v2 := range v {
  2234  			e.mapElemKey()
  2235  			e.e.EncodeInt(int64(k2))
  2236  			e.mapElemValue()
  2237  			e.e.EncodeInt(int64(v2))
  2238  		}
  2239  	}
  2240  	e.mapEnd()
  2241  }
  2242  func (e *Encoder) fastpathEncMapInt32Float64R(f *codecFnInfo, rv reflect.Value) {
  2243  	fastpathTV.EncMapInt32Float64V(rv2i(rv).(map[int32]float64), e)
  2244  }
  2245  func (fastpathT) EncMapInt32Float64V(v map[int32]float64, e *Encoder) {
  2246  	e.mapStart(len(v))
  2247  	if e.h.Canonical {
  2248  		v2 := make([]int32, len(v))
  2249  		var i uint
  2250  		for k := range v {
  2251  			v2[i] = k
  2252  			i++
  2253  		}
  2254  		sort.Sort(int32Slice(v2))
  2255  		for _, k2 := range v2 {
  2256  			e.mapElemKey()
  2257  			e.e.EncodeInt(int64(k2))
  2258  			e.mapElemValue()
  2259  			e.e.EncodeFloat64(v[k2])
  2260  		}
  2261  	} else {
  2262  		for k2, v2 := range v {
  2263  			e.mapElemKey()
  2264  			e.e.EncodeInt(int64(k2))
  2265  			e.mapElemValue()
  2266  			e.e.EncodeFloat64(v2)
  2267  		}
  2268  	}
  2269  	e.mapEnd()
  2270  }
  2271  func (e *Encoder) fastpathEncMapInt32BoolR(f *codecFnInfo, rv reflect.Value) {
  2272  	fastpathTV.EncMapInt32BoolV(rv2i(rv).(map[int32]bool), e)
  2273  }
  2274  func (fastpathT) EncMapInt32BoolV(v map[int32]bool, e *Encoder) {
  2275  	e.mapStart(len(v))
  2276  	if e.h.Canonical {
  2277  		v2 := make([]int32, len(v))
  2278  		var i uint
  2279  		for k := range v {
  2280  			v2[i] = k
  2281  			i++
  2282  		}
  2283  		sort.Sort(int32Slice(v2))
  2284  		for _, k2 := range v2 {
  2285  			e.mapElemKey()
  2286  			e.e.EncodeInt(int64(k2))
  2287  			e.mapElemValue()
  2288  			e.e.EncodeBool(v[k2])
  2289  		}
  2290  	} else {
  2291  		for k2, v2 := range v {
  2292  			e.mapElemKey()
  2293  			e.e.EncodeInt(int64(k2))
  2294  			e.mapElemValue()
  2295  			e.e.EncodeBool(v2)
  2296  		}
  2297  	}
  2298  	e.mapEnd()
  2299  }
  2300  
  2301  // -- decode
  2302  
  2303  // -- -- fast path type switch
  2304  func fastpathDecodeTypeSwitch(iv interface{}, d *Decoder) bool {
  2305  	var changed bool
  2306  	var containerLen int
  2307  	switch v := iv.(type) {
  2308  	case []interface{}:
  2309  		fastpathTV.DecSliceIntfN(v, d)
  2310  	case *[]interface{}:
  2311  		var v2 []interface{}
  2312  		if v2, changed = fastpathTV.DecSliceIntfY(*v, d); changed {
  2313  			*v = v2
  2314  		}
  2315  	case []string:
  2316  		fastpathTV.DecSliceStringN(v, d)
  2317  	case *[]string:
  2318  		var v2 []string
  2319  		if v2, changed = fastpathTV.DecSliceStringY(*v, d); changed {
  2320  			*v = v2
  2321  		}
  2322  	case [][]byte:
  2323  		fastpathTV.DecSliceBytesN(v, d)
  2324  	case *[][]byte:
  2325  		var v2 [][]byte
  2326  		if v2, changed = fastpathTV.DecSliceBytesY(*v, d); changed {
  2327  			*v = v2
  2328  		}
  2329  	case []float32:
  2330  		fastpathTV.DecSliceFloat32N(v, d)
  2331  	case *[]float32:
  2332  		var v2 []float32
  2333  		if v2, changed = fastpathTV.DecSliceFloat32Y(*v, d); changed {
  2334  			*v = v2
  2335  		}
  2336  	case []float64:
  2337  		fastpathTV.DecSliceFloat64N(v, d)
  2338  	case *[]float64:
  2339  		var v2 []float64
  2340  		if v2, changed = fastpathTV.DecSliceFloat64Y(*v, d); changed {
  2341  			*v = v2
  2342  		}
  2343  	case []uint8:
  2344  		fastpathTV.DecSliceUint8N(v, d)
  2345  	case *[]uint8:
  2346  		var v2 []uint8
  2347  		if v2, changed = fastpathTV.DecSliceUint8Y(*v, d); changed {
  2348  			*v = v2
  2349  		}
  2350  	case []uint64:
  2351  		fastpathTV.DecSliceUint64N(v, d)
  2352  	case *[]uint64:
  2353  		var v2 []uint64
  2354  		if v2, changed = fastpathTV.DecSliceUint64Y(*v, d); changed {
  2355  			*v = v2
  2356  		}
  2357  	case []int:
  2358  		fastpathTV.DecSliceIntN(v, d)
  2359  	case *[]int:
  2360  		var v2 []int
  2361  		if v2, changed = fastpathTV.DecSliceIntY(*v, d); changed {
  2362  			*v = v2
  2363  		}
  2364  	case []int32:
  2365  		fastpathTV.DecSliceInt32N(v, d)
  2366  	case *[]int32:
  2367  		var v2 []int32
  2368  		if v2, changed = fastpathTV.DecSliceInt32Y(*v, d); changed {
  2369  			*v = v2
  2370  		}
  2371  	case []int64:
  2372  		fastpathTV.DecSliceInt64N(v, d)
  2373  	case *[]int64:
  2374  		var v2 []int64
  2375  		if v2, changed = fastpathTV.DecSliceInt64Y(*v, d); changed {
  2376  			*v = v2
  2377  		}
  2378  	case []bool:
  2379  		fastpathTV.DecSliceBoolN(v, d)
  2380  	case *[]bool:
  2381  		var v2 []bool
  2382  		if v2, changed = fastpathTV.DecSliceBoolY(*v, d); changed {
  2383  			*v = v2
  2384  		}
  2385  	case map[string]interface{}:
  2386  		containerLen = d.mapStart(d.d.ReadMapStart())
  2387  		if containerLen != containerLenNil {
  2388  			if containerLen != 0 {
  2389  				fastpathTV.DecMapStringIntfL(v, containerLen, d)
  2390  			}
  2391  			d.mapEnd()
  2392  		}
  2393  	case *map[string]interface{}:
  2394  		fastpathTV.DecMapStringIntfX(v, d)
  2395  	case map[string]string:
  2396  		containerLen = d.mapStart(d.d.ReadMapStart())
  2397  		if containerLen != containerLenNil {
  2398  			if containerLen != 0 {
  2399  				fastpathTV.DecMapStringStringL(v, containerLen, d)
  2400  			}
  2401  			d.mapEnd()
  2402  		}
  2403  	case *map[string]string:
  2404  		fastpathTV.DecMapStringStringX(v, d)
  2405  	case map[string][]byte:
  2406  		containerLen = d.mapStart(d.d.ReadMapStart())
  2407  		if containerLen != containerLenNil {
  2408  			if containerLen != 0 {
  2409  				fastpathTV.DecMapStringBytesL(v, containerLen, d)
  2410  			}
  2411  			d.mapEnd()
  2412  		}
  2413  	case *map[string][]byte:
  2414  		fastpathTV.DecMapStringBytesX(v, d)
  2415  	case map[string]uint8:
  2416  		containerLen = d.mapStart(d.d.ReadMapStart())
  2417  		if containerLen != containerLenNil {
  2418  			if containerLen != 0 {
  2419  				fastpathTV.DecMapStringUint8L(v, containerLen, d)
  2420  			}
  2421  			d.mapEnd()
  2422  		}
  2423  	case *map[string]uint8:
  2424  		fastpathTV.DecMapStringUint8X(v, d)
  2425  	case map[string]uint64:
  2426  		containerLen = d.mapStart(d.d.ReadMapStart())
  2427  		if containerLen != containerLenNil {
  2428  			if containerLen != 0 {
  2429  				fastpathTV.DecMapStringUint64L(v, containerLen, d)
  2430  			}
  2431  			d.mapEnd()
  2432  		}
  2433  	case *map[string]uint64:
  2434  		fastpathTV.DecMapStringUint64X(v, d)
  2435  	case map[string]int:
  2436  		containerLen = d.mapStart(d.d.ReadMapStart())
  2437  		if containerLen != containerLenNil {
  2438  			if containerLen != 0 {
  2439  				fastpathTV.DecMapStringIntL(v, containerLen, d)
  2440  			}
  2441  			d.mapEnd()
  2442  		}
  2443  	case *map[string]int:
  2444  		fastpathTV.DecMapStringIntX(v, d)
  2445  	case map[string]int32:
  2446  		containerLen = d.mapStart(d.d.ReadMapStart())
  2447  		if containerLen != containerLenNil {
  2448  			if containerLen != 0 {
  2449  				fastpathTV.DecMapStringInt32L(v, containerLen, d)
  2450  			}
  2451  			d.mapEnd()
  2452  		}
  2453  	case *map[string]int32:
  2454  		fastpathTV.DecMapStringInt32X(v, d)
  2455  	case map[string]float64:
  2456  		containerLen = d.mapStart(d.d.ReadMapStart())
  2457  		if containerLen != containerLenNil {
  2458  			if containerLen != 0 {
  2459  				fastpathTV.DecMapStringFloat64L(v, containerLen, d)
  2460  			}
  2461  			d.mapEnd()
  2462  		}
  2463  	case *map[string]float64:
  2464  		fastpathTV.DecMapStringFloat64X(v, d)
  2465  	case map[string]bool:
  2466  		containerLen = d.mapStart(d.d.ReadMapStart())
  2467  		if containerLen != containerLenNil {
  2468  			if containerLen != 0 {
  2469  				fastpathTV.DecMapStringBoolL(v, containerLen, d)
  2470  			}
  2471  			d.mapEnd()
  2472  		}
  2473  	case *map[string]bool:
  2474  		fastpathTV.DecMapStringBoolX(v, d)
  2475  	case map[uint8]interface{}:
  2476  		containerLen = d.mapStart(d.d.ReadMapStart())
  2477  		if containerLen != containerLenNil {
  2478  			if containerLen != 0 {
  2479  				fastpathTV.DecMapUint8IntfL(v, containerLen, d)
  2480  			}
  2481  			d.mapEnd()
  2482  		}
  2483  	case *map[uint8]interface{}:
  2484  		fastpathTV.DecMapUint8IntfX(v, d)
  2485  	case map[uint8]string:
  2486  		containerLen = d.mapStart(d.d.ReadMapStart())
  2487  		if containerLen != containerLenNil {
  2488  			if containerLen != 0 {
  2489  				fastpathTV.DecMapUint8StringL(v, containerLen, d)
  2490  			}
  2491  			d.mapEnd()
  2492  		}
  2493  	case *map[uint8]string:
  2494  		fastpathTV.DecMapUint8StringX(v, d)
  2495  	case map[uint8][]byte:
  2496  		containerLen = d.mapStart(d.d.ReadMapStart())
  2497  		if containerLen != containerLenNil {
  2498  			if containerLen != 0 {
  2499  				fastpathTV.DecMapUint8BytesL(v, containerLen, d)
  2500  			}
  2501  			d.mapEnd()
  2502  		}
  2503  	case *map[uint8][]byte:
  2504  		fastpathTV.DecMapUint8BytesX(v, d)
  2505  	case map[uint8]uint8:
  2506  		containerLen = d.mapStart(d.d.ReadMapStart())
  2507  		if containerLen != containerLenNil {
  2508  			if containerLen != 0 {
  2509  				fastpathTV.DecMapUint8Uint8L(v, containerLen, d)
  2510  			}
  2511  			d.mapEnd()
  2512  		}
  2513  	case *map[uint8]uint8:
  2514  		fastpathTV.DecMapUint8Uint8X(v, d)
  2515  	case map[uint8]uint64:
  2516  		containerLen = d.mapStart(d.d.ReadMapStart())
  2517  		if containerLen != containerLenNil {
  2518  			if containerLen != 0 {
  2519  				fastpathTV.DecMapUint8Uint64L(v, containerLen, d)
  2520  			}
  2521  			d.mapEnd()
  2522  		}
  2523  	case *map[uint8]uint64:
  2524  		fastpathTV.DecMapUint8Uint64X(v, d)
  2525  	case map[uint8]int:
  2526  		containerLen = d.mapStart(d.d.ReadMapStart())
  2527  		if containerLen != containerLenNil {
  2528  			if containerLen != 0 {
  2529  				fastpathTV.DecMapUint8IntL(v, containerLen, d)
  2530  			}
  2531  			d.mapEnd()
  2532  		}
  2533  	case *map[uint8]int:
  2534  		fastpathTV.DecMapUint8IntX(v, d)
  2535  	case map[uint8]int32:
  2536  		containerLen = d.mapStart(d.d.ReadMapStart())
  2537  		if containerLen != containerLenNil {
  2538  			if containerLen != 0 {
  2539  				fastpathTV.DecMapUint8Int32L(v, containerLen, d)
  2540  			}
  2541  			d.mapEnd()
  2542  		}
  2543  	case *map[uint8]int32:
  2544  		fastpathTV.DecMapUint8Int32X(v, d)
  2545  	case map[uint8]float64:
  2546  		containerLen = d.mapStart(d.d.ReadMapStart())
  2547  		if containerLen != containerLenNil {
  2548  			if containerLen != 0 {
  2549  				fastpathTV.DecMapUint8Float64L(v, containerLen, d)
  2550  			}
  2551  			d.mapEnd()
  2552  		}
  2553  	case *map[uint8]float64:
  2554  		fastpathTV.DecMapUint8Float64X(v, d)
  2555  	case map[uint8]bool:
  2556  		containerLen = d.mapStart(d.d.ReadMapStart())
  2557  		if containerLen != containerLenNil {
  2558  			if containerLen != 0 {
  2559  				fastpathTV.DecMapUint8BoolL(v, containerLen, d)
  2560  			}
  2561  			d.mapEnd()
  2562  		}
  2563  	case *map[uint8]bool:
  2564  		fastpathTV.DecMapUint8BoolX(v, d)
  2565  	case map[uint64]interface{}:
  2566  		containerLen = d.mapStart(d.d.ReadMapStart())
  2567  		if containerLen != containerLenNil {
  2568  			if containerLen != 0 {
  2569  				fastpathTV.DecMapUint64IntfL(v, containerLen, d)
  2570  			}
  2571  			d.mapEnd()
  2572  		}
  2573  	case *map[uint64]interface{}:
  2574  		fastpathTV.DecMapUint64IntfX(v, d)
  2575  	case map[uint64]string:
  2576  		containerLen = d.mapStart(d.d.ReadMapStart())
  2577  		if containerLen != containerLenNil {
  2578  			if containerLen != 0 {
  2579  				fastpathTV.DecMapUint64StringL(v, containerLen, d)
  2580  			}
  2581  			d.mapEnd()
  2582  		}
  2583  	case *map[uint64]string:
  2584  		fastpathTV.DecMapUint64StringX(v, d)
  2585  	case map[uint64][]byte:
  2586  		containerLen = d.mapStart(d.d.ReadMapStart())
  2587  		if containerLen != containerLenNil {
  2588  			if containerLen != 0 {
  2589  				fastpathTV.DecMapUint64BytesL(v, containerLen, d)
  2590  			}
  2591  			d.mapEnd()
  2592  		}
  2593  	case *map[uint64][]byte:
  2594  		fastpathTV.DecMapUint64BytesX(v, d)
  2595  	case map[uint64]uint8:
  2596  		containerLen = d.mapStart(d.d.ReadMapStart())
  2597  		if containerLen != containerLenNil {
  2598  			if containerLen != 0 {
  2599  				fastpathTV.DecMapUint64Uint8L(v, containerLen, d)
  2600  			}
  2601  			d.mapEnd()
  2602  		}
  2603  	case *map[uint64]uint8:
  2604  		fastpathTV.DecMapUint64Uint8X(v, d)
  2605  	case map[uint64]uint64:
  2606  		containerLen = d.mapStart(d.d.ReadMapStart())
  2607  		if containerLen != containerLenNil {
  2608  			if containerLen != 0 {
  2609  				fastpathTV.DecMapUint64Uint64L(v, containerLen, d)
  2610  			}
  2611  			d.mapEnd()
  2612  		}
  2613  	case *map[uint64]uint64:
  2614  		fastpathTV.DecMapUint64Uint64X(v, d)
  2615  	case map[uint64]int:
  2616  		containerLen = d.mapStart(d.d.ReadMapStart())
  2617  		if containerLen != containerLenNil {
  2618  			if containerLen != 0 {
  2619  				fastpathTV.DecMapUint64IntL(v, containerLen, d)
  2620  			}
  2621  			d.mapEnd()
  2622  		}
  2623  	case *map[uint64]int:
  2624  		fastpathTV.DecMapUint64IntX(v, d)
  2625  	case map[uint64]int32:
  2626  		containerLen = d.mapStart(d.d.ReadMapStart())
  2627  		if containerLen != containerLenNil {
  2628  			if containerLen != 0 {
  2629  				fastpathTV.DecMapUint64Int32L(v, containerLen, d)
  2630  			}
  2631  			d.mapEnd()
  2632  		}
  2633  	case *map[uint64]int32:
  2634  		fastpathTV.DecMapUint64Int32X(v, d)
  2635  	case map[uint64]float64:
  2636  		containerLen = d.mapStart(d.d.ReadMapStart())
  2637  		if containerLen != containerLenNil {
  2638  			if containerLen != 0 {
  2639  				fastpathTV.DecMapUint64Float64L(v, containerLen, d)
  2640  			}
  2641  			d.mapEnd()
  2642  		}
  2643  	case *map[uint64]float64:
  2644  		fastpathTV.DecMapUint64Float64X(v, d)
  2645  	case map[uint64]bool:
  2646  		containerLen = d.mapStart(d.d.ReadMapStart())
  2647  		if containerLen != containerLenNil {
  2648  			if containerLen != 0 {
  2649  				fastpathTV.DecMapUint64BoolL(v, containerLen, d)
  2650  			}
  2651  			d.mapEnd()
  2652  		}
  2653  	case *map[uint64]bool:
  2654  		fastpathTV.DecMapUint64BoolX(v, d)
  2655  	case map[int]interface{}:
  2656  		containerLen = d.mapStart(d.d.ReadMapStart())
  2657  		if containerLen != containerLenNil {
  2658  			if containerLen != 0 {
  2659  				fastpathTV.DecMapIntIntfL(v, containerLen, d)
  2660  			}
  2661  			d.mapEnd()
  2662  		}
  2663  	case *map[int]interface{}:
  2664  		fastpathTV.DecMapIntIntfX(v, d)
  2665  	case map[int]string:
  2666  		containerLen = d.mapStart(d.d.ReadMapStart())
  2667  		if containerLen != containerLenNil {
  2668  			if containerLen != 0 {
  2669  				fastpathTV.DecMapIntStringL(v, containerLen, d)
  2670  			}
  2671  			d.mapEnd()
  2672  		}
  2673  	case *map[int]string:
  2674  		fastpathTV.DecMapIntStringX(v, d)
  2675  	case map[int][]byte:
  2676  		containerLen = d.mapStart(d.d.ReadMapStart())
  2677  		if containerLen != containerLenNil {
  2678  			if containerLen != 0 {
  2679  				fastpathTV.DecMapIntBytesL(v, containerLen, d)
  2680  			}
  2681  			d.mapEnd()
  2682  		}
  2683  	case *map[int][]byte:
  2684  		fastpathTV.DecMapIntBytesX(v, d)
  2685  	case map[int]uint8:
  2686  		containerLen = d.mapStart(d.d.ReadMapStart())
  2687  		if containerLen != containerLenNil {
  2688  			if containerLen != 0 {
  2689  				fastpathTV.DecMapIntUint8L(v, containerLen, d)
  2690  			}
  2691  			d.mapEnd()
  2692  		}
  2693  	case *map[int]uint8:
  2694  		fastpathTV.DecMapIntUint8X(v, d)
  2695  	case map[int]uint64:
  2696  		containerLen = d.mapStart(d.d.ReadMapStart())
  2697  		if containerLen != containerLenNil {
  2698  			if containerLen != 0 {
  2699  				fastpathTV.DecMapIntUint64L(v, containerLen, d)
  2700  			}
  2701  			d.mapEnd()
  2702  		}
  2703  	case *map[int]uint64:
  2704  		fastpathTV.DecMapIntUint64X(v, d)
  2705  	case map[int]int:
  2706  		containerLen = d.mapStart(d.d.ReadMapStart())
  2707  		if containerLen != containerLenNil {
  2708  			if containerLen != 0 {
  2709  				fastpathTV.DecMapIntIntL(v, containerLen, d)
  2710  			}
  2711  			d.mapEnd()
  2712  		}
  2713  	case *map[int]int:
  2714  		fastpathTV.DecMapIntIntX(v, d)
  2715  	case map[int]int32:
  2716  		containerLen = d.mapStart(d.d.ReadMapStart())
  2717  		if containerLen != containerLenNil {
  2718  			if containerLen != 0 {
  2719  				fastpathTV.DecMapIntInt32L(v, containerLen, d)
  2720  			}
  2721  			d.mapEnd()
  2722  		}
  2723  	case *map[int]int32:
  2724  		fastpathTV.DecMapIntInt32X(v, d)
  2725  	case map[int]float64:
  2726  		containerLen = d.mapStart(d.d.ReadMapStart())
  2727  		if containerLen != containerLenNil {
  2728  			if containerLen != 0 {
  2729  				fastpathTV.DecMapIntFloat64L(v, containerLen, d)
  2730  			}
  2731  			d.mapEnd()
  2732  		}
  2733  	case *map[int]float64:
  2734  		fastpathTV.DecMapIntFloat64X(v, d)
  2735  	case map[int]bool:
  2736  		containerLen = d.mapStart(d.d.ReadMapStart())
  2737  		if containerLen != containerLenNil {
  2738  			if containerLen != 0 {
  2739  				fastpathTV.DecMapIntBoolL(v, containerLen, d)
  2740  			}
  2741  			d.mapEnd()
  2742  		}
  2743  	case *map[int]bool:
  2744  		fastpathTV.DecMapIntBoolX(v, d)
  2745  	case map[int32]interface{}:
  2746  		containerLen = d.mapStart(d.d.ReadMapStart())
  2747  		if containerLen != containerLenNil {
  2748  			if containerLen != 0 {
  2749  				fastpathTV.DecMapInt32IntfL(v, containerLen, d)
  2750  			}
  2751  			d.mapEnd()
  2752  		}
  2753  	case *map[int32]interface{}:
  2754  		fastpathTV.DecMapInt32IntfX(v, d)
  2755  	case map[int32]string:
  2756  		containerLen = d.mapStart(d.d.ReadMapStart())
  2757  		if containerLen != containerLenNil {
  2758  			if containerLen != 0 {
  2759  				fastpathTV.DecMapInt32StringL(v, containerLen, d)
  2760  			}
  2761  			d.mapEnd()
  2762  		}
  2763  	case *map[int32]string:
  2764  		fastpathTV.DecMapInt32StringX(v, d)
  2765  	case map[int32][]byte:
  2766  		containerLen = d.mapStart(d.d.ReadMapStart())
  2767  		if containerLen != containerLenNil {
  2768  			if containerLen != 0 {
  2769  				fastpathTV.DecMapInt32BytesL(v, containerLen, d)
  2770  			}
  2771  			d.mapEnd()
  2772  		}
  2773  	case *map[int32][]byte:
  2774  		fastpathTV.DecMapInt32BytesX(v, d)
  2775  	case map[int32]uint8:
  2776  		containerLen = d.mapStart(d.d.ReadMapStart())
  2777  		if containerLen != containerLenNil {
  2778  			if containerLen != 0 {
  2779  				fastpathTV.DecMapInt32Uint8L(v, containerLen, d)
  2780  			}
  2781  			d.mapEnd()
  2782  		}
  2783  	case *map[int32]uint8:
  2784  		fastpathTV.DecMapInt32Uint8X(v, d)
  2785  	case map[int32]uint64:
  2786  		containerLen = d.mapStart(d.d.ReadMapStart())
  2787  		if containerLen != containerLenNil {
  2788  			if containerLen != 0 {
  2789  				fastpathTV.DecMapInt32Uint64L(v, containerLen, d)
  2790  			}
  2791  			d.mapEnd()
  2792  		}
  2793  	case *map[int32]uint64:
  2794  		fastpathTV.DecMapInt32Uint64X(v, d)
  2795  	case map[int32]int:
  2796  		containerLen = d.mapStart(d.d.ReadMapStart())
  2797  		if containerLen != containerLenNil {
  2798  			if containerLen != 0 {
  2799  				fastpathTV.DecMapInt32IntL(v, containerLen, d)
  2800  			}
  2801  			d.mapEnd()
  2802  		}
  2803  	case *map[int32]int:
  2804  		fastpathTV.DecMapInt32IntX(v, d)
  2805  	case map[int32]int32:
  2806  		containerLen = d.mapStart(d.d.ReadMapStart())
  2807  		if containerLen != containerLenNil {
  2808  			if containerLen != 0 {
  2809  				fastpathTV.DecMapInt32Int32L(v, containerLen, d)
  2810  			}
  2811  			d.mapEnd()
  2812  		}
  2813  	case *map[int32]int32:
  2814  		fastpathTV.DecMapInt32Int32X(v, d)
  2815  	case map[int32]float64:
  2816  		containerLen = d.mapStart(d.d.ReadMapStart())
  2817  		if containerLen != containerLenNil {
  2818  			if containerLen != 0 {
  2819  				fastpathTV.DecMapInt32Float64L(v, containerLen, d)
  2820  			}
  2821  			d.mapEnd()
  2822  		}
  2823  	case *map[int32]float64:
  2824  		fastpathTV.DecMapInt32Float64X(v, d)
  2825  	case map[int32]bool:
  2826  		containerLen = d.mapStart(d.d.ReadMapStart())
  2827  		if containerLen != containerLenNil {
  2828  			if containerLen != 0 {
  2829  				fastpathTV.DecMapInt32BoolL(v, containerLen, d)
  2830  			}
  2831  			d.mapEnd()
  2832  		}
  2833  	case *map[int32]bool:
  2834  		fastpathTV.DecMapInt32BoolX(v, d)
  2835  	default:
  2836  		_ = v // workaround https://github.com/golang/go/issues/12927 seen in go1.4
  2837  		return false
  2838  	}
  2839  	return true
  2840  }
  2841  
  2842  func fastpathDecodeSetZeroTypeSwitch(iv interface{}) bool {
  2843  	switch v := iv.(type) {
  2844  	case *[]interface{}:
  2845  		*v = nil
  2846  	case *[]string:
  2847  		*v = nil
  2848  	case *[][]byte:
  2849  		*v = nil
  2850  	case *[]float32:
  2851  		*v = nil
  2852  	case *[]float64:
  2853  		*v = nil
  2854  	case *[]uint8:
  2855  		*v = nil
  2856  	case *[]uint64:
  2857  		*v = nil
  2858  	case *[]int:
  2859  		*v = nil
  2860  	case *[]int32:
  2861  		*v = nil
  2862  	case *[]int64:
  2863  		*v = nil
  2864  	case *[]bool:
  2865  		*v = nil
  2866  
  2867  	case *map[string]interface{}:
  2868  		*v = nil
  2869  	case *map[string]string:
  2870  		*v = nil
  2871  	case *map[string][]byte:
  2872  		*v = nil
  2873  	case *map[string]uint8:
  2874  		*v = nil
  2875  	case *map[string]uint64:
  2876  		*v = nil
  2877  	case *map[string]int:
  2878  		*v = nil
  2879  	case *map[string]int32:
  2880  		*v = nil
  2881  	case *map[string]float64:
  2882  		*v = nil
  2883  	case *map[string]bool:
  2884  		*v = nil
  2885  	case *map[uint8]interface{}:
  2886  		*v = nil
  2887  	case *map[uint8]string:
  2888  		*v = nil
  2889  	case *map[uint8][]byte:
  2890  		*v = nil
  2891  	case *map[uint8]uint8:
  2892  		*v = nil
  2893  	case *map[uint8]uint64:
  2894  		*v = nil
  2895  	case *map[uint8]int:
  2896  		*v = nil
  2897  	case *map[uint8]int32:
  2898  		*v = nil
  2899  	case *map[uint8]float64:
  2900  		*v = nil
  2901  	case *map[uint8]bool:
  2902  		*v = nil
  2903  	case *map[uint64]interface{}:
  2904  		*v = nil
  2905  	case *map[uint64]string:
  2906  		*v = nil
  2907  	case *map[uint64][]byte:
  2908  		*v = nil
  2909  	case *map[uint64]uint8:
  2910  		*v = nil
  2911  	case *map[uint64]uint64:
  2912  		*v = nil
  2913  	case *map[uint64]int:
  2914  		*v = nil
  2915  	case *map[uint64]int32:
  2916  		*v = nil
  2917  	case *map[uint64]float64:
  2918  		*v = nil
  2919  	case *map[uint64]bool:
  2920  		*v = nil
  2921  	case *map[int]interface{}:
  2922  		*v = nil
  2923  	case *map[int]string:
  2924  		*v = nil
  2925  	case *map[int][]byte:
  2926  		*v = nil
  2927  	case *map[int]uint8:
  2928  		*v = nil
  2929  	case *map[int]uint64:
  2930  		*v = nil
  2931  	case *map[int]int:
  2932  		*v = nil
  2933  	case *map[int]int32:
  2934  		*v = nil
  2935  	case *map[int]float64:
  2936  		*v = nil
  2937  	case *map[int]bool:
  2938  		*v = nil
  2939  	case *map[int32]interface{}:
  2940  		*v = nil
  2941  	case *map[int32]string:
  2942  		*v = nil
  2943  	case *map[int32][]byte:
  2944  		*v = nil
  2945  	case *map[int32]uint8:
  2946  		*v = nil
  2947  	case *map[int32]uint64:
  2948  		*v = nil
  2949  	case *map[int32]int:
  2950  		*v = nil
  2951  	case *map[int32]int32:
  2952  		*v = nil
  2953  	case *map[int32]float64:
  2954  		*v = nil
  2955  	case *map[int32]bool:
  2956  		*v = nil
  2957  
  2958  	default:
  2959  		_ = v // workaround https://github.com/golang/go/issues/12927 seen in go1.4
  2960  		return false
  2961  	}
  2962  	return true
  2963  }
  2964  
  2965  // -- -- fast path functions
  2966  
  2967  func (d *Decoder) fastpathDecSliceIntfR(f *codecFnInfo, rv reflect.Value) {
  2968  	var v []interface{}
  2969  	switch rv.Kind() {
  2970  	case reflect.Ptr:
  2971  		vp := rv2i(rv).(*[]interface{})
  2972  		var changed bool
  2973  		if v, changed = fastpathTV.DecSliceIntfY(*vp, d); changed {
  2974  			*vp = v
  2975  		}
  2976  	case reflect.Array:
  2977  		rvGetSlice4Array(rv, &v)
  2978  		fastpathTV.DecSliceIntfN(v, d)
  2979  	default:
  2980  		fastpathTV.DecSliceIntfN(rv2i(rv).([]interface{}), d)
  2981  	}
  2982  }
  2983  func (f fastpathT) DecSliceIntfX(vp *[]interface{}, d *Decoder) {
  2984  	if v, changed := f.DecSliceIntfY(*vp, d); changed {
  2985  		*vp = v
  2986  	}
  2987  }
  2988  func (fastpathT) DecSliceIntfY(v []interface{}, d *Decoder) (v2 []interface{}, changed bool) {
  2989  	slh, containerLenS := d.decSliceHelperStart()
  2990  	if slh.IsNil {
  2991  		if v == nil {
  2992  			return
  2993  		}
  2994  		return nil, true
  2995  	}
  2996  	if containerLenS == 0 {
  2997  		if v == nil {
  2998  			v = []interface{}{}
  2999  		} else if len(v) != 0 {
  3000  			v = v[:0]
  3001  		}
  3002  		slh.End()
  3003  		return v, true
  3004  	}
  3005  	hasLen := containerLenS > 0
  3006  	var xlen int
  3007  	if hasLen {
  3008  		if containerLenS > cap(v) {
  3009  			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 16)
  3010  			if xlen <= cap(v) {
  3011  				v = v[:uint(xlen)]
  3012  			} else {
  3013  				v = make([]interface{}, uint(xlen))
  3014  			}
  3015  			changed = true
  3016  		} else if containerLenS != len(v) {
  3017  			v = v[:containerLenS]
  3018  			changed = true
  3019  		}
  3020  	}
  3021  	var j int
  3022  	for j = 0; (hasLen && j < containerLenS) || !(hasLen || d.checkBreak()); j++ {
  3023  		if j == 0 && len(v) == 0 { // means hasLen == false
  3024  			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 16)
  3025  			v = make([]interface{}, uint(xlen))
  3026  			changed = true
  3027  		}
  3028  		if j >= len(v) {
  3029  			v = append(v, nil)
  3030  			changed = true
  3031  		}
  3032  		slh.ElemContainerState(j)
  3033  		d.decode(&v[uint(j)])
  3034  	}
  3035  	if j < len(v) {
  3036  		v = v[:uint(j)]
  3037  		changed = true
  3038  	} else if j == 0 && v == nil {
  3039  		v = []interface{}{}
  3040  		changed = true
  3041  	}
  3042  	slh.End()
  3043  	return v, changed
  3044  }
  3045  func (fastpathT) DecSliceIntfN(v []interface{}, d *Decoder) {
  3046  	slh, containerLenS := d.decSliceHelperStart()
  3047  	if slh.IsNil {
  3048  		return
  3049  	}
  3050  	if containerLenS == 0 {
  3051  		slh.End()
  3052  		return
  3053  	}
  3054  	hasLen := containerLenS > 0
  3055  	for j := 0; (hasLen && j < containerLenS) || !(hasLen || d.checkBreak()); j++ {
  3056  		if j >= len(v) {
  3057  			slh.arrayCannotExpand(hasLen, len(v), j, containerLenS)
  3058  			return
  3059  		}
  3060  		slh.ElemContainerState(j)
  3061  		d.decode(&v[uint(j)])
  3062  	}
  3063  	slh.End()
  3064  }
  3065  
  3066  func (d *Decoder) fastpathDecSliceStringR(f *codecFnInfo, rv reflect.Value) {
  3067  	var v []string
  3068  	switch rv.Kind() {
  3069  	case reflect.Ptr:
  3070  		vp := rv2i(rv).(*[]string)
  3071  		var changed bool
  3072  		if v, changed = fastpathTV.DecSliceStringY(*vp, d); changed {
  3073  			*vp = v
  3074  		}
  3075  	case reflect.Array:
  3076  		rvGetSlice4Array(rv, &v)
  3077  		fastpathTV.DecSliceStringN(v, d)
  3078  	default:
  3079  		fastpathTV.DecSliceStringN(rv2i(rv).([]string), d)
  3080  	}
  3081  }
  3082  func (f fastpathT) DecSliceStringX(vp *[]string, d *Decoder) {
  3083  	if v, changed := f.DecSliceStringY(*vp, d); changed {
  3084  		*vp = v
  3085  	}
  3086  }
  3087  func (fastpathT) DecSliceStringY(v []string, d *Decoder) (v2 []string, changed bool) {
  3088  	slh, containerLenS := d.decSliceHelperStart()
  3089  	if slh.IsNil {
  3090  		if v == nil {
  3091  			return
  3092  		}
  3093  		return nil, true
  3094  	}
  3095  	if containerLenS == 0 {
  3096  		if v == nil {
  3097  			v = []string{}
  3098  		} else if len(v) != 0 {
  3099  			v = v[:0]
  3100  		}
  3101  		slh.End()
  3102  		return v, true
  3103  	}
  3104  	hasLen := containerLenS > 0
  3105  	var xlen int
  3106  	if hasLen {
  3107  		if containerLenS > cap(v) {
  3108  			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 16)
  3109  			if xlen <= cap(v) {
  3110  				v = v[:uint(xlen)]
  3111  			} else {
  3112  				v = make([]string, uint(xlen))
  3113  			}
  3114  			changed = true
  3115  		} else if containerLenS != len(v) {
  3116  			v = v[:containerLenS]
  3117  			changed = true
  3118  		}
  3119  	}
  3120  	var j int
  3121  	for j = 0; (hasLen && j < containerLenS) || !(hasLen || d.checkBreak()); j++ {
  3122  		if j == 0 && len(v) == 0 { // means hasLen == false
  3123  			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 16)
  3124  			v = make([]string, uint(xlen))
  3125  			changed = true
  3126  		}
  3127  		if j >= len(v) {
  3128  			v = append(v, "")
  3129  			changed = true
  3130  		}
  3131  		slh.ElemContainerState(j)
  3132  		v[uint(j)] = d.stringZC(d.d.DecodeStringAsBytes())
  3133  	}
  3134  	if j < len(v) {
  3135  		v = v[:uint(j)]
  3136  		changed = true
  3137  	} else if j == 0 && v == nil {
  3138  		v = []string{}
  3139  		changed = true
  3140  	}
  3141  	slh.End()
  3142  	return v, changed
  3143  }
  3144  func (fastpathT) DecSliceStringN(v []string, d *Decoder) {
  3145  	slh, containerLenS := d.decSliceHelperStart()
  3146  	if slh.IsNil {
  3147  		return
  3148  	}
  3149  	if containerLenS == 0 {
  3150  		slh.End()
  3151  		return
  3152  	}
  3153  	hasLen := containerLenS > 0
  3154  	for j := 0; (hasLen && j < containerLenS) || !(hasLen || d.checkBreak()); j++ {
  3155  		if j >= len(v) {
  3156  			slh.arrayCannotExpand(hasLen, len(v), j, containerLenS)
  3157  			return
  3158  		}
  3159  		slh.ElemContainerState(j)
  3160  		v[uint(j)] = d.stringZC(d.d.DecodeStringAsBytes())
  3161  	}
  3162  	slh.End()
  3163  }
  3164  
  3165  func (d *Decoder) fastpathDecSliceBytesR(f *codecFnInfo, rv reflect.Value) {
  3166  	var v [][]byte
  3167  	switch rv.Kind() {
  3168  	case reflect.Ptr:
  3169  		vp := rv2i(rv).(*[][]byte)
  3170  		var changed bool
  3171  		if v, changed = fastpathTV.DecSliceBytesY(*vp, d); changed {
  3172  			*vp = v
  3173  		}
  3174  	case reflect.Array:
  3175  		rvGetSlice4Array(rv, &v)
  3176  		fastpathTV.DecSliceBytesN(v, d)
  3177  	default:
  3178  		fastpathTV.DecSliceBytesN(rv2i(rv).([][]byte), d)
  3179  	}
  3180  }
  3181  func (f fastpathT) DecSliceBytesX(vp *[][]byte, d *Decoder) {
  3182  	if v, changed := f.DecSliceBytesY(*vp, d); changed {
  3183  		*vp = v
  3184  	}
  3185  }
  3186  func (fastpathT) DecSliceBytesY(v [][]byte, d *Decoder) (v2 [][]byte, changed bool) {
  3187  	slh, containerLenS := d.decSliceHelperStart()
  3188  	if slh.IsNil {
  3189  		if v == nil {
  3190  			return
  3191  		}
  3192  		return nil, true
  3193  	}
  3194  	if containerLenS == 0 {
  3195  		if v == nil {
  3196  			v = [][]byte{}
  3197  		} else if len(v) != 0 {
  3198  			v = v[:0]
  3199  		}
  3200  		slh.End()
  3201  		return v, true
  3202  	}
  3203  	hasLen := containerLenS > 0
  3204  	var xlen int
  3205  	if hasLen {
  3206  		if containerLenS > cap(v) {
  3207  			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 24)
  3208  			if xlen <= cap(v) {
  3209  				v = v[:uint(xlen)]
  3210  			} else {
  3211  				v = make([][]byte, uint(xlen))
  3212  			}
  3213  			changed = true
  3214  		} else if containerLenS != len(v) {
  3215  			v = v[:containerLenS]
  3216  			changed = true
  3217  		}
  3218  	}
  3219  	var j int
  3220  	for j = 0; (hasLen && j < containerLenS) || !(hasLen || d.checkBreak()); j++ {
  3221  		if j == 0 && len(v) == 0 { // means hasLen == false
  3222  			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 24)
  3223  			v = make([][]byte, uint(xlen))
  3224  			changed = true
  3225  		}
  3226  		if j >= len(v) {
  3227  			v = append(v, nil)
  3228  			changed = true
  3229  		}
  3230  		slh.ElemContainerState(j)
  3231  		v[uint(j)] = d.d.DecodeBytes([]byte{})
  3232  	}
  3233  	if j < len(v) {
  3234  		v = v[:uint(j)]
  3235  		changed = true
  3236  	} else if j == 0 && v == nil {
  3237  		v = [][]byte{}
  3238  		changed = true
  3239  	}
  3240  	slh.End()
  3241  	return v, changed
  3242  }
  3243  func (fastpathT) DecSliceBytesN(v [][]byte, d *Decoder) {
  3244  	slh, containerLenS := d.decSliceHelperStart()
  3245  	if slh.IsNil {
  3246  		return
  3247  	}
  3248  	if containerLenS == 0 {
  3249  		slh.End()
  3250  		return
  3251  	}
  3252  	hasLen := containerLenS > 0
  3253  	for j := 0; (hasLen && j < containerLenS) || !(hasLen || d.checkBreak()); j++ {
  3254  		if j >= len(v) {
  3255  			slh.arrayCannotExpand(hasLen, len(v), j, containerLenS)
  3256  			return
  3257  		}
  3258  		slh.ElemContainerState(j)
  3259  		v[uint(j)] = d.d.DecodeBytes([]byte{})
  3260  	}
  3261  	slh.End()
  3262  }
  3263  
  3264  func (d *Decoder) fastpathDecSliceFloat32R(f *codecFnInfo, rv reflect.Value) {
  3265  	var v []float32
  3266  	switch rv.Kind() {
  3267  	case reflect.Ptr:
  3268  		vp := rv2i(rv).(*[]float32)
  3269  		var changed bool
  3270  		if v, changed = fastpathTV.DecSliceFloat32Y(*vp, d); changed {
  3271  			*vp = v
  3272  		}
  3273  	case reflect.Array:
  3274  		rvGetSlice4Array(rv, &v)
  3275  		fastpathTV.DecSliceFloat32N(v, d)
  3276  	default:
  3277  		fastpathTV.DecSliceFloat32N(rv2i(rv).([]float32), d)
  3278  	}
  3279  }
  3280  func (f fastpathT) DecSliceFloat32X(vp *[]float32, d *Decoder) {
  3281  	if v, changed := f.DecSliceFloat32Y(*vp, d); changed {
  3282  		*vp = v
  3283  	}
  3284  }
  3285  func (fastpathT) DecSliceFloat32Y(v []float32, d *Decoder) (v2 []float32, changed bool) {
  3286  	slh, containerLenS := d.decSliceHelperStart()
  3287  	if slh.IsNil {
  3288  		if v == nil {
  3289  			return
  3290  		}
  3291  		return nil, true
  3292  	}
  3293  	if containerLenS == 0 {
  3294  		if v == nil {
  3295  			v = []float32{}
  3296  		} else if len(v) != 0 {
  3297  			v = v[:0]
  3298  		}
  3299  		slh.End()
  3300  		return v, true
  3301  	}
  3302  	hasLen := containerLenS > 0
  3303  	var xlen int
  3304  	if hasLen {
  3305  		if containerLenS > cap(v) {
  3306  			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 4)
  3307  			if xlen <= cap(v) {
  3308  				v = v[:uint(xlen)]
  3309  			} else {
  3310  				v = make([]float32, uint(xlen))
  3311  			}
  3312  			changed = true
  3313  		} else if containerLenS != len(v) {
  3314  			v = v[:containerLenS]
  3315  			changed = true
  3316  		}
  3317  	}
  3318  	var j int
  3319  	for j = 0; (hasLen && j < containerLenS) || !(hasLen || d.checkBreak()); j++ {
  3320  		if j == 0 && len(v) == 0 { // means hasLen == false
  3321  			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 4)
  3322  			v = make([]float32, uint(xlen))
  3323  			changed = true
  3324  		}
  3325  		if j >= len(v) {
  3326  			v = append(v, 0)
  3327  			changed = true
  3328  		}
  3329  		slh.ElemContainerState(j)
  3330  		v[uint(j)] = float32(d.decodeFloat32())
  3331  	}
  3332  	if j < len(v) {
  3333  		v = v[:uint(j)]
  3334  		changed = true
  3335  	} else if j == 0 && v == nil {
  3336  		v = []float32{}
  3337  		changed = true
  3338  	}
  3339  	slh.End()
  3340  	return v, changed
  3341  }
  3342  func (fastpathT) DecSliceFloat32N(v []float32, d *Decoder) {
  3343  	slh, containerLenS := d.decSliceHelperStart()
  3344  	if slh.IsNil {
  3345  		return
  3346  	}
  3347  	if containerLenS == 0 {
  3348  		slh.End()
  3349  		return
  3350  	}
  3351  	hasLen := containerLenS > 0
  3352  	for j := 0; (hasLen && j < containerLenS) || !(hasLen || d.checkBreak()); j++ {
  3353  		if j >= len(v) {
  3354  			slh.arrayCannotExpand(hasLen, len(v), j, containerLenS)
  3355  			return
  3356  		}
  3357  		slh.ElemContainerState(j)
  3358  		v[uint(j)] = float32(d.decodeFloat32())
  3359  	}
  3360  	slh.End()
  3361  }
  3362  
  3363  func (d *Decoder) fastpathDecSliceFloat64R(f *codecFnInfo, rv reflect.Value) {
  3364  	var v []float64
  3365  	switch rv.Kind() {
  3366  	case reflect.Ptr:
  3367  		vp := rv2i(rv).(*[]float64)
  3368  		var changed bool
  3369  		if v, changed = fastpathTV.DecSliceFloat64Y(*vp, d); changed {
  3370  			*vp = v
  3371  		}
  3372  	case reflect.Array:
  3373  		rvGetSlice4Array(rv, &v)
  3374  		fastpathTV.DecSliceFloat64N(v, d)
  3375  	default:
  3376  		fastpathTV.DecSliceFloat64N(rv2i(rv).([]float64), d)
  3377  	}
  3378  }
  3379  func (f fastpathT) DecSliceFloat64X(vp *[]float64, d *Decoder) {
  3380  	if v, changed := f.DecSliceFloat64Y(*vp, d); changed {
  3381  		*vp = v
  3382  	}
  3383  }
  3384  func (fastpathT) DecSliceFloat64Y(v []float64, d *Decoder) (v2 []float64, changed bool) {
  3385  	slh, containerLenS := d.decSliceHelperStart()
  3386  	if slh.IsNil {
  3387  		if v == nil {
  3388  			return
  3389  		}
  3390  		return nil, true
  3391  	}
  3392  	if containerLenS == 0 {
  3393  		if v == nil {
  3394  			v = []float64{}
  3395  		} else if len(v) != 0 {
  3396  			v = v[:0]
  3397  		}
  3398  		slh.End()
  3399  		return v, true
  3400  	}
  3401  	hasLen := containerLenS > 0
  3402  	var xlen int
  3403  	if hasLen {
  3404  		if containerLenS > cap(v) {
  3405  			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
  3406  			if xlen <= cap(v) {
  3407  				v = v[:uint(xlen)]
  3408  			} else {
  3409  				v = make([]float64, uint(xlen))
  3410  			}
  3411  			changed = true
  3412  		} else if containerLenS != len(v) {
  3413  			v = v[:containerLenS]
  3414  			changed = true
  3415  		}
  3416  	}
  3417  	var j int
  3418  	for j = 0; (hasLen && j < containerLenS) || !(hasLen || d.checkBreak()); j++ {
  3419  		if j == 0 && len(v) == 0 { // means hasLen == false
  3420  			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
  3421  			v = make([]float64, uint(xlen))
  3422  			changed = true
  3423  		}
  3424  		if j >= len(v) {
  3425  			v = append(v, 0)
  3426  			changed = true
  3427  		}
  3428  		slh.ElemContainerState(j)
  3429  		v[uint(j)] = d.d.DecodeFloat64()
  3430  	}
  3431  	if j < len(v) {
  3432  		v = v[:uint(j)]
  3433  		changed = true
  3434  	} else if j == 0 && v == nil {
  3435  		v = []float64{}
  3436  		changed = true
  3437  	}
  3438  	slh.End()
  3439  	return v, changed
  3440  }
  3441  func (fastpathT) DecSliceFloat64N(v []float64, d *Decoder) {
  3442  	slh, containerLenS := d.decSliceHelperStart()
  3443  	if slh.IsNil {
  3444  		return
  3445  	}
  3446  	if containerLenS == 0 {
  3447  		slh.End()
  3448  		return
  3449  	}
  3450  	hasLen := containerLenS > 0
  3451  	for j := 0; (hasLen && j < containerLenS) || !(hasLen || d.checkBreak()); j++ {
  3452  		if j >= len(v) {
  3453  			slh.arrayCannotExpand(hasLen, len(v), j, containerLenS)
  3454  			return
  3455  		}
  3456  		slh.ElemContainerState(j)
  3457  		v[uint(j)] = d.d.DecodeFloat64()
  3458  	}
  3459  	slh.End()
  3460  }
  3461  
  3462  func (d *Decoder) fastpathDecSliceUint8R(f *codecFnInfo, rv reflect.Value) {
  3463  	var v []uint8
  3464  	switch rv.Kind() {
  3465  	case reflect.Ptr:
  3466  		vp := rv2i(rv).(*[]uint8)
  3467  		var changed bool
  3468  		if v, changed = fastpathTV.DecSliceUint8Y(*vp, d); changed {
  3469  			*vp = v
  3470  		}
  3471  	case reflect.Array:
  3472  		rvGetSlice4Array(rv, &v)
  3473  		fastpathTV.DecSliceUint8N(v, d)
  3474  	default:
  3475  		fastpathTV.DecSliceUint8N(rv2i(rv).([]uint8), d)
  3476  	}
  3477  }
  3478  func (f fastpathT) DecSliceUint8X(vp *[]uint8, d *Decoder) {
  3479  	if v, changed := f.DecSliceUint8Y(*vp, d); changed {
  3480  		*vp = v
  3481  	}
  3482  }
  3483  func (fastpathT) DecSliceUint8Y(v []uint8, d *Decoder) (v2 []uint8, changed bool) {
  3484  	switch d.d.ContainerType() {
  3485  	case valueTypeNil, valueTypeMap:
  3486  		break
  3487  	default:
  3488  		v2 = d.decodeBytesInto(v[:len(v):len(v)])
  3489  		changed = !(len(v2) > 0 && len(v2) == len(v) && &v2[0] == &v[0]) // not same slice
  3490  		return
  3491  	}
  3492  	slh, containerLenS := d.decSliceHelperStart()
  3493  	if slh.IsNil {
  3494  		if v == nil {
  3495  			return
  3496  		}
  3497  		return nil, true
  3498  	}
  3499  	if containerLenS == 0 {
  3500  		if v == nil {
  3501  			v = []uint8{}
  3502  		} else if len(v) != 0 {
  3503  			v = v[:0]
  3504  		}
  3505  		slh.End()
  3506  		return v, true
  3507  	}
  3508  	hasLen := containerLenS > 0
  3509  	var xlen int
  3510  	if hasLen {
  3511  		if containerLenS > cap(v) {
  3512  			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 1)
  3513  			if xlen <= cap(v) {
  3514  				v = v[:uint(xlen)]
  3515  			} else {
  3516  				v = make([]uint8, uint(xlen))
  3517  			}
  3518  			changed = true
  3519  		} else if containerLenS != len(v) {
  3520  			v = v[:containerLenS]
  3521  			changed = true
  3522  		}
  3523  	}
  3524  	var j int
  3525  	for j = 0; (hasLen && j < containerLenS) || !(hasLen || d.checkBreak()); j++ {
  3526  		if j == 0 && len(v) == 0 { // means hasLen == false
  3527  			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 1)
  3528  			v = make([]uint8, uint(xlen))
  3529  			changed = true
  3530  		}
  3531  		if j >= len(v) {
  3532  			v = append(v, 0)
  3533  			changed = true
  3534  		}
  3535  		slh.ElemContainerState(j)
  3536  		v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
  3537  	}
  3538  	if j < len(v) {
  3539  		v = v[:uint(j)]
  3540  		changed = true
  3541  	} else if j == 0 && v == nil {
  3542  		v = []uint8{}
  3543  		changed = true
  3544  	}
  3545  	slh.End()
  3546  	return v, changed
  3547  }
  3548  func (fastpathT) DecSliceUint8N(v []uint8, d *Decoder) {
  3549  	switch d.d.ContainerType() {
  3550  	case valueTypeNil, valueTypeMap:
  3551  		break
  3552  	default:
  3553  		v2 := d.decodeBytesInto(v[:len(v):len(v)])
  3554  		if !(len(v2) > 0 && len(v2) == len(v) && &v2[0] == &v[0]) { // not same slice
  3555  			copy(v, v2)
  3556  		}
  3557  		return
  3558  	}
  3559  	slh, containerLenS := d.decSliceHelperStart()
  3560  	if slh.IsNil {
  3561  		return
  3562  	}
  3563  	if containerLenS == 0 {
  3564  		slh.End()
  3565  		return
  3566  	}
  3567  	hasLen := containerLenS > 0
  3568  	for j := 0; (hasLen && j < containerLenS) || !(hasLen || d.checkBreak()); j++ {
  3569  		if j >= len(v) {
  3570  			slh.arrayCannotExpand(hasLen, len(v), j, containerLenS)
  3571  			return
  3572  		}
  3573  		slh.ElemContainerState(j)
  3574  		v[uint(j)] = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
  3575  	}
  3576  	slh.End()
  3577  }
  3578  
  3579  func (d *Decoder) fastpathDecSliceUint64R(f *codecFnInfo, rv reflect.Value) {
  3580  	var v []uint64
  3581  	switch rv.Kind() {
  3582  	case reflect.Ptr:
  3583  		vp := rv2i(rv).(*[]uint64)
  3584  		var changed bool
  3585  		if v, changed = fastpathTV.DecSliceUint64Y(*vp, d); changed {
  3586  			*vp = v
  3587  		}
  3588  	case reflect.Array:
  3589  		rvGetSlice4Array(rv, &v)
  3590  		fastpathTV.DecSliceUint64N(v, d)
  3591  	default:
  3592  		fastpathTV.DecSliceUint64N(rv2i(rv).([]uint64), d)
  3593  	}
  3594  }
  3595  func (f fastpathT) DecSliceUint64X(vp *[]uint64, d *Decoder) {
  3596  	if v, changed := f.DecSliceUint64Y(*vp, d); changed {
  3597  		*vp = v
  3598  	}
  3599  }
  3600  func (fastpathT) DecSliceUint64Y(v []uint64, d *Decoder) (v2 []uint64, changed bool) {
  3601  	slh, containerLenS := d.decSliceHelperStart()
  3602  	if slh.IsNil {
  3603  		if v == nil {
  3604  			return
  3605  		}
  3606  		return nil, true
  3607  	}
  3608  	if containerLenS == 0 {
  3609  		if v == nil {
  3610  			v = []uint64{}
  3611  		} else if len(v) != 0 {
  3612  			v = v[:0]
  3613  		}
  3614  		slh.End()
  3615  		return v, true
  3616  	}
  3617  	hasLen := containerLenS > 0
  3618  	var xlen int
  3619  	if hasLen {
  3620  		if containerLenS > cap(v) {
  3621  			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
  3622  			if xlen <= cap(v) {
  3623  				v = v[:uint(xlen)]
  3624  			} else {
  3625  				v = make([]uint64, uint(xlen))
  3626  			}
  3627  			changed = true
  3628  		} else if containerLenS != len(v) {
  3629  			v = v[:containerLenS]
  3630  			changed = true
  3631  		}
  3632  	}
  3633  	var j int
  3634  	for j = 0; (hasLen && j < containerLenS) || !(hasLen || d.checkBreak()); j++ {
  3635  		if j == 0 && len(v) == 0 { // means hasLen == false
  3636  			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
  3637  			v = make([]uint64, uint(xlen))
  3638  			changed = true
  3639  		}
  3640  		if j >= len(v) {
  3641  			v = append(v, 0)
  3642  			changed = true
  3643  		}
  3644  		slh.ElemContainerState(j)
  3645  		v[uint(j)] = d.d.DecodeUint64()
  3646  	}
  3647  	if j < len(v) {
  3648  		v = v[:uint(j)]
  3649  		changed = true
  3650  	} else if j == 0 && v == nil {
  3651  		v = []uint64{}
  3652  		changed = true
  3653  	}
  3654  	slh.End()
  3655  	return v, changed
  3656  }
  3657  func (fastpathT) DecSliceUint64N(v []uint64, d *Decoder) {
  3658  	slh, containerLenS := d.decSliceHelperStart()
  3659  	if slh.IsNil {
  3660  		return
  3661  	}
  3662  	if containerLenS == 0 {
  3663  		slh.End()
  3664  		return
  3665  	}
  3666  	hasLen := containerLenS > 0
  3667  	for j := 0; (hasLen && j < containerLenS) || !(hasLen || d.checkBreak()); j++ {
  3668  		if j >= len(v) {
  3669  			slh.arrayCannotExpand(hasLen, len(v), j, containerLenS)
  3670  			return
  3671  		}
  3672  		slh.ElemContainerState(j)
  3673  		v[uint(j)] = d.d.DecodeUint64()
  3674  	}
  3675  	slh.End()
  3676  }
  3677  
  3678  func (d *Decoder) fastpathDecSliceIntR(f *codecFnInfo, rv reflect.Value) {
  3679  	var v []int
  3680  	switch rv.Kind() {
  3681  	case reflect.Ptr:
  3682  		vp := rv2i(rv).(*[]int)
  3683  		var changed bool
  3684  		if v, changed = fastpathTV.DecSliceIntY(*vp, d); changed {
  3685  			*vp = v
  3686  		}
  3687  	case reflect.Array:
  3688  		rvGetSlice4Array(rv, &v)
  3689  		fastpathTV.DecSliceIntN(v, d)
  3690  	default:
  3691  		fastpathTV.DecSliceIntN(rv2i(rv).([]int), d)
  3692  	}
  3693  }
  3694  func (f fastpathT) DecSliceIntX(vp *[]int, d *Decoder) {
  3695  	if v, changed := f.DecSliceIntY(*vp, d); changed {
  3696  		*vp = v
  3697  	}
  3698  }
  3699  func (fastpathT) DecSliceIntY(v []int, d *Decoder) (v2 []int, changed bool) {
  3700  	slh, containerLenS := d.decSliceHelperStart()
  3701  	if slh.IsNil {
  3702  		if v == nil {
  3703  			return
  3704  		}
  3705  		return nil, true
  3706  	}
  3707  	if containerLenS == 0 {
  3708  		if v == nil {
  3709  			v = []int{}
  3710  		} else if len(v) != 0 {
  3711  			v = v[:0]
  3712  		}
  3713  		slh.End()
  3714  		return v, true
  3715  	}
  3716  	hasLen := containerLenS > 0
  3717  	var xlen int
  3718  	if hasLen {
  3719  		if containerLenS > cap(v) {
  3720  			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
  3721  			if xlen <= cap(v) {
  3722  				v = v[:uint(xlen)]
  3723  			} else {
  3724  				v = make([]int, uint(xlen))
  3725  			}
  3726  			changed = true
  3727  		} else if containerLenS != len(v) {
  3728  			v = v[:containerLenS]
  3729  			changed = true
  3730  		}
  3731  	}
  3732  	var j int
  3733  	for j = 0; (hasLen && j < containerLenS) || !(hasLen || d.checkBreak()); j++ {
  3734  		if j == 0 && len(v) == 0 { // means hasLen == false
  3735  			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
  3736  			v = make([]int, uint(xlen))
  3737  			changed = true
  3738  		}
  3739  		if j >= len(v) {
  3740  			v = append(v, 0)
  3741  			changed = true
  3742  		}
  3743  		slh.ElemContainerState(j)
  3744  		v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
  3745  	}
  3746  	if j < len(v) {
  3747  		v = v[:uint(j)]
  3748  		changed = true
  3749  	} else if j == 0 && v == nil {
  3750  		v = []int{}
  3751  		changed = true
  3752  	}
  3753  	slh.End()
  3754  	return v, changed
  3755  }
  3756  func (fastpathT) DecSliceIntN(v []int, d *Decoder) {
  3757  	slh, containerLenS := d.decSliceHelperStart()
  3758  	if slh.IsNil {
  3759  		return
  3760  	}
  3761  	if containerLenS == 0 {
  3762  		slh.End()
  3763  		return
  3764  	}
  3765  	hasLen := containerLenS > 0
  3766  	for j := 0; (hasLen && j < containerLenS) || !(hasLen || d.checkBreak()); j++ {
  3767  		if j >= len(v) {
  3768  			slh.arrayCannotExpand(hasLen, len(v), j, containerLenS)
  3769  			return
  3770  		}
  3771  		slh.ElemContainerState(j)
  3772  		v[uint(j)] = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
  3773  	}
  3774  	slh.End()
  3775  }
  3776  
  3777  func (d *Decoder) fastpathDecSliceInt32R(f *codecFnInfo, rv reflect.Value) {
  3778  	var v []int32
  3779  	switch rv.Kind() {
  3780  	case reflect.Ptr:
  3781  		vp := rv2i(rv).(*[]int32)
  3782  		var changed bool
  3783  		if v, changed = fastpathTV.DecSliceInt32Y(*vp, d); changed {
  3784  			*vp = v
  3785  		}
  3786  	case reflect.Array:
  3787  		rvGetSlice4Array(rv, &v)
  3788  		fastpathTV.DecSliceInt32N(v, d)
  3789  	default:
  3790  		fastpathTV.DecSliceInt32N(rv2i(rv).([]int32), d)
  3791  	}
  3792  }
  3793  func (f fastpathT) DecSliceInt32X(vp *[]int32, d *Decoder) {
  3794  	if v, changed := f.DecSliceInt32Y(*vp, d); changed {
  3795  		*vp = v
  3796  	}
  3797  }
  3798  func (fastpathT) DecSliceInt32Y(v []int32, d *Decoder) (v2 []int32, changed bool) {
  3799  	slh, containerLenS := d.decSliceHelperStart()
  3800  	if slh.IsNil {
  3801  		if v == nil {
  3802  			return
  3803  		}
  3804  		return nil, true
  3805  	}
  3806  	if containerLenS == 0 {
  3807  		if v == nil {
  3808  			v = []int32{}
  3809  		} else if len(v) != 0 {
  3810  			v = v[:0]
  3811  		}
  3812  		slh.End()
  3813  		return v, true
  3814  	}
  3815  	hasLen := containerLenS > 0
  3816  	var xlen int
  3817  	if hasLen {
  3818  		if containerLenS > cap(v) {
  3819  			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 4)
  3820  			if xlen <= cap(v) {
  3821  				v = v[:uint(xlen)]
  3822  			} else {
  3823  				v = make([]int32, uint(xlen))
  3824  			}
  3825  			changed = true
  3826  		} else if containerLenS != len(v) {
  3827  			v = v[:containerLenS]
  3828  			changed = true
  3829  		}
  3830  	}
  3831  	var j int
  3832  	for j = 0; (hasLen && j < containerLenS) || !(hasLen || d.checkBreak()); j++ {
  3833  		if j == 0 && len(v) == 0 { // means hasLen == false
  3834  			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 4)
  3835  			v = make([]int32, uint(xlen))
  3836  			changed = true
  3837  		}
  3838  		if j >= len(v) {
  3839  			v = append(v, 0)
  3840  			changed = true
  3841  		}
  3842  		slh.ElemContainerState(j)
  3843  		v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
  3844  	}
  3845  	if j < len(v) {
  3846  		v = v[:uint(j)]
  3847  		changed = true
  3848  	} else if j == 0 && v == nil {
  3849  		v = []int32{}
  3850  		changed = true
  3851  	}
  3852  	slh.End()
  3853  	return v, changed
  3854  }
  3855  func (fastpathT) DecSliceInt32N(v []int32, d *Decoder) {
  3856  	slh, containerLenS := d.decSliceHelperStart()
  3857  	if slh.IsNil {
  3858  		return
  3859  	}
  3860  	if containerLenS == 0 {
  3861  		slh.End()
  3862  		return
  3863  	}
  3864  	hasLen := containerLenS > 0
  3865  	for j := 0; (hasLen && j < containerLenS) || !(hasLen || d.checkBreak()); j++ {
  3866  		if j >= len(v) {
  3867  			slh.arrayCannotExpand(hasLen, len(v), j, containerLenS)
  3868  			return
  3869  		}
  3870  		slh.ElemContainerState(j)
  3871  		v[uint(j)] = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
  3872  	}
  3873  	slh.End()
  3874  }
  3875  
  3876  func (d *Decoder) fastpathDecSliceInt64R(f *codecFnInfo, rv reflect.Value) {
  3877  	var v []int64
  3878  	switch rv.Kind() {
  3879  	case reflect.Ptr:
  3880  		vp := rv2i(rv).(*[]int64)
  3881  		var changed bool
  3882  		if v, changed = fastpathTV.DecSliceInt64Y(*vp, d); changed {
  3883  			*vp = v
  3884  		}
  3885  	case reflect.Array:
  3886  		rvGetSlice4Array(rv, &v)
  3887  		fastpathTV.DecSliceInt64N(v, d)
  3888  	default:
  3889  		fastpathTV.DecSliceInt64N(rv2i(rv).([]int64), d)
  3890  	}
  3891  }
  3892  func (f fastpathT) DecSliceInt64X(vp *[]int64, d *Decoder) {
  3893  	if v, changed := f.DecSliceInt64Y(*vp, d); changed {
  3894  		*vp = v
  3895  	}
  3896  }
  3897  func (fastpathT) DecSliceInt64Y(v []int64, d *Decoder) (v2 []int64, changed bool) {
  3898  	slh, containerLenS := d.decSliceHelperStart()
  3899  	if slh.IsNil {
  3900  		if v == nil {
  3901  			return
  3902  		}
  3903  		return nil, true
  3904  	}
  3905  	if containerLenS == 0 {
  3906  		if v == nil {
  3907  			v = []int64{}
  3908  		} else if len(v) != 0 {
  3909  			v = v[:0]
  3910  		}
  3911  		slh.End()
  3912  		return v, true
  3913  	}
  3914  	hasLen := containerLenS > 0
  3915  	var xlen int
  3916  	if hasLen {
  3917  		if containerLenS > cap(v) {
  3918  			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
  3919  			if xlen <= cap(v) {
  3920  				v = v[:uint(xlen)]
  3921  			} else {
  3922  				v = make([]int64, uint(xlen))
  3923  			}
  3924  			changed = true
  3925  		} else if containerLenS != len(v) {
  3926  			v = v[:containerLenS]
  3927  			changed = true
  3928  		}
  3929  	}
  3930  	var j int
  3931  	for j = 0; (hasLen && j < containerLenS) || !(hasLen || d.checkBreak()); j++ {
  3932  		if j == 0 && len(v) == 0 { // means hasLen == false
  3933  			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 8)
  3934  			v = make([]int64, uint(xlen))
  3935  			changed = true
  3936  		}
  3937  		if j >= len(v) {
  3938  			v = append(v, 0)
  3939  			changed = true
  3940  		}
  3941  		slh.ElemContainerState(j)
  3942  		v[uint(j)] = d.d.DecodeInt64()
  3943  	}
  3944  	if j < len(v) {
  3945  		v = v[:uint(j)]
  3946  		changed = true
  3947  	} else if j == 0 && v == nil {
  3948  		v = []int64{}
  3949  		changed = true
  3950  	}
  3951  	slh.End()
  3952  	return v, changed
  3953  }
  3954  func (fastpathT) DecSliceInt64N(v []int64, d *Decoder) {
  3955  	slh, containerLenS := d.decSliceHelperStart()
  3956  	if slh.IsNil {
  3957  		return
  3958  	}
  3959  	if containerLenS == 0 {
  3960  		slh.End()
  3961  		return
  3962  	}
  3963  	hasLen := containerLenS > 0
  3964  	for j := 0; (hasLen && j < containerLenS) || !(hasLen || d.checkBreak()); j++ {
  3965  		if j >= len(v) {
  3966  			slh.arrayCannotExpand(hasLen, len(v), j, containerLenS)
  3967  			return
  3968  		}
  3969  		slh.ElemContainerState(j)
  3970  		v[uint(j)] = d.d.DecodeInt64()
  3971  	}
  3972  	slh.End()
  3973  }
  3974  
  3975  func (d *Decoder) fastpathDecSliceBoolR(f *codecFnInfo, rv reflect.Value) {
  3976  	var v []bool
  3977  	switch rv.Kind() {
  3978  	case reflect.Ptr:
  3979  		vp := rv2i(rv).(*[]bool)
  3980  		var changed bool
  3981  		if v, changed = fastpathTV.DecSliceBoolY(*vp, d); changed {
  3982  			*vp = v
  3983  		}
  3984  	case reflect.Array:
  3985  		rvGetSlice4Array(rv, &v)
  3986  		fastpathTV.DecSliceBoolN(v, d)
  3987  	default:
  3988  		fastpathTV.DecSliceBoolN(rv2i(rv).([]bool), d)
  3989  	}
  3990  }
  3991  func (f fastpathT) DecSliceBoolX(vp *[]bool, d *Decoder) {
  3992  	if v, changed := f.DecSliceBoolY(*vp, d); changed {
  3993  		*vp = v
  3994  	}
  3995  }
  3996  func (fastpathT) DecSliceBoolY(v []bool, d *Decoder) (v2 []bool, changed bool) {
  3997  	slh, containerLenS := d.decSliceHelperStart()
  3998  	if slh.IsNil {
  3999  		if v == nil {
  4000  			return
  4001  		}
  4002  		return nil, true
  4003  	}
  4004  	if containerLenS == 0 {
  4005  		if v == nil {
  4006  			v = []bool{}
  4007  		} else if len(v) != 0 {
  4008  			v = v[:0]
  4009  		}
  4010  		slh.End()
  4011  		return v, true
  4012  	}
  4013  	hasLen := containerLenS > 0
  4014  	var xlen int
  4015  	if hasLen {
  4016  		if containerLenS > cap(v) {
  4017  			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 1)
  4018  			if xlen <= cap(v) {
  4019  				v = v[:uint(xlen)]
  4020  			} else {
  4021  				v = make([]bool, uint(xlen))
  4022  			}
  4023  			changed = true
  4024  		} else if containerLenS != len(v) {
  4025  			v = v[:containerLenS]
  4026  			changed = true
  4027  		}
  4028  	}
  4029  	var j int
  4030  	for j = 0; (hasLen && j < containerLenS) || !(hasLen || d.checkBreak()); j++ {
  4031  		if j == 0 && len(v) == 0 { // means hasLen == false
  4032  			xlen = decInferLen(containerLenS, d.h.MaxInitLen, 1)
  4033  			v = make([]bool, uint(xlen))
  4034  			changed = true
  4035  		}
  4036  		if j >= len(v) {
  4037  			v = append(v, false)
  4038  			changed = true
  4039  		}
  4040  		slh.ElemContainerState(j)
  4041  		v[uint(j)] = d.d.DecodeBool()
  4042  	}
  4043  	if j < len(v) {
  4044  		v = v[:uint(j)]
  4045  		changed = true
  4046  	} else if j == 0 && v == nil {
  4047  		v = []bool{}
  4048  		changed = true
  4049  	}
  4050  	slh.End()
  4051  	return v, changed
  4052  }
  4053  func (fastpathT) DecSliceBoolN(v []bool, d *Decoder) {
  4054  	slh, containerLenS := d.decSliceHelperStart()
  4055  	if slh.IsNil {
  4056  		return
  4057  	}
  4058  	if containerLenS == 0 {
  4059  		slh.End()
  4060  		return
  4061  	}
  4062  	hasLen := containerLenS > 0
  4063  	for j := 0; (hasLen && j < containerLenS) || !(hasLen || d.checkBreak()); j++ {
  4064  		if j >= len(v) {
  4065  			slh.arrayCannotExpand(hasLen, len(v), j, containerLenS)
  4066  			return
  4067  		}
  4068  		slh.ElemContainerState(j)
  4069  		v[uint(j)] = d.d.DecodeBool()
  4070  	}
  4071  	slh.End()
  4072  }
  4073  func (d *Decoder) fastpathDecMapStringIntfR(f *codecFnInfo, rv reflect.Value) {
  4074  	containerLen := d.mapStart(d.d.ReadMapStart())
  4075  	if rv.Kind() == reflect.Ptr {
  4076  		vp, _ := rv2i(rv).(*map[string]interface{})
  4077  		if *vp == nil {
  4078  			*vp = make(map[string]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 32))
  4079  		}
  4080  		if containerLen != 0 {
  4081  			fastpathTV.DecMapStringIntfL(*vp, containerLen, d)
  4082  		}
  4083  	} else if containerLen != 0 {
  4084  		fastpathTV.DecMapStringIntfL(rv2i(rv).(map[string]interface{}), containerLen, d)
  4085  	}
  4086  	d.mapEnd()
  4087  }
  4088  func (f fastpathT) DecMapStringIntfX(vp *map[string]interface{}, d *Decoder) {
  4089  	containerLen := d.mapStart(d.d.ReadMapStart())
  4090  	if containerLen == containerLenNil {
  4091  		*vp = nil
  4092  	} else {
  4093  		if *vp == nil {
  4094  			*vp = make(map[string]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 32))
  4095  		}
  4096  		if containerLen != 0 {
  4097  			f.DecMapStringIntfL(*vp, containerLen, d)
  4098  		}
  4099  		d.mapEnd()
  4100  	}
  4101  }
  4102  func (fastpathT) DecMapStringIntfL(v map[string]interface{}, containerLen int, d *Decoder) {
  4103  	if v == nil {
  4104  		d.errorf("cannot decode into nil map[string]interface{} given stream length: %v", containerLen)
  4105  		return
  4106  	}
  4107  	mapGet := v != nil && !d.h.MapValueReset && !d.h.InterfaceReset
  4108  	var mk string
  4109  	var mv interface{}
  4110  	hasLen := containerLen > 0
  4111  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  4112  		d.mapElemKey()
  4113  		mk = d.stringZC(d.d.DecodeStringAsBytes())
  4114  		d.mapElemValue()
  4115  		if mapGet {
  4116  			mv = v[mk]
  4117  		} else {
  4118  			mv = nil
  4119  		}
  4120  		d.decode(&mv)
  4121  		v[mk] = mv
  4122  	}
  4123  }
  4124  func (d *Decoder) fastpathDecMapStringStringR(f *codecFnInfo, rv reflect.Value) {
  4125  	containerLen := d.mapStart(d.d.ReadMapStart())
  4126  	if rv.Kind() == reflect.Ptr {
  4127  		vp, _ := rv2i(rv).(*map[string]string)
  4128  		if *vp == nil {
  4129  			*vp = make(map[string]string, decInferLen(containerLen, d.h.MaxInitLen, 32))
  4130  		}
  4131  		if containerLen != 0 {
  4132  			fastpathTV.DecMapStringStringL(*vp, containerLen, d)
  4133  		}
  4134  	} else if containerLen != 0 {
  4135  		fastpathTV.DecMapStringStringL(rv2i(rv).(map[string]string), containerLen, d)
  4136  	}
  4137  	d.mapEnd()
  4138  }
  4139  func (f fastpathT) DecMapStringStringX(vp *map[string]string, d *Decoder) {
  4140  	containerLen := d.mapStart(d.d.ReadMapStart())
  4141  	if containerLen == containerLenNil {
  4142  		*vp = nil
  4143  	} else {
  4144  		if *vp == nil {
  4145  			*vp = make(map[string]string, decInferLen(containerLen, d.h.MaxInitLen, 32))
  4146  		}
  4147  		if containerLen != 0 {
  4148  			f.DecMapStringStringL(*vp, containerLen, d)
  4149  		}
  4150  		d.mapEnd()
  4151  	}
  4152  }
  4153  func (fastpathT) DecMapStringStringL(v map[string]string, containerLen int, d *Decoder) {
  4154  	if v == nil {
  4155  		d.errorf("cannot decode into nil map[string]string given stream length: %v", containerLen)
  4156  		return
  4157  	}
  4158  	var mk string
  4159  	var mv string
  4160  	hasLen := containerLen > 0
  4161  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  4162  		d.mapElemKey()
  4163  		mk = d.stringZC(d.d.DecodeStringAsBytes())
  4164  		d.mapElemValue()
  4165  		mv = d.stringZC(d.d.DecodeStringAsBytes())
  4166  		v[mk] = mv
  4167  	}
  4168  }
  4169  func (d *Decoder) fastpathDecMapStringBytesR(f *codecFnInfo, rv reflect.Value) {
  4170  	containerLen := d.mapStart(d.d.ReadMapStart())
  4171  	if rv.Kind() == reflect.Ptr {
  4172  		vp, _ := rv2i(rv).(*map[string][]byte)
  4173  		if *vp == nil {
  4174  			*vp = make(map[string][]byte, decInferLen(containerLen, d.h.MaxInitLen, 40))
  4175  		}
  4176  		if containerLen != 0 {
  4177  			fastpathTV.DecMapStringBytesL(*vp, containerLen, d)
  4178  		}
  4179  	} else if containerLen != 0 {
  4180  		fastpathTV.DecMapStringBytesL(rv2i(rv).(map[string][]byte), containerLen, d)
  4181  	}
  4182  	d.mapEnd()
  4183  }
  4184  func (f fastpathT) DecMapStringBytesX(vp *map[string][]byte, d *Decoder) {
  4185  	containerLen := d.mapStart(d.d.ReadMapStart())
  4186  	if containerLen == containerLenNil {
  4187  		*vp = nil
  4188  	} else {
  4189  		if *vp == nil {
  4190  			*vp = make(map[string][]byte, decInferLen(containerLen, d.h.MaxInitLen, 40))
  4191  		}
  4192  		if containerLen != 0 {
  4193  			f.DecMapStringBytesL(*vp, containerLen, d)
  4194  		}
  4195  		d.mapEnd()
  4196  	}
  4197  }
  4198  func (fastpathT) DecMapStringBytesL(v map[string][]byte, containerLen int, d *Decoder) {
  4199  	if v == nil {
  4200  		d.errorf("cannot decode into nil map[string][]byte given stream length: %v", containerLen)
  4201  		return
  4202  	}
  4203  	mapGet := v != nil && !d.h.MapValueReset
  4204  	var mk string
  4205  	var mv []byte
  4206  	hasLen := containerLen > 0
  4207  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  4208  		d.mapElemKey()
  4209  		mk = d.stringZC(d.d.DecodeStringAsBytes())
  4210  		d.mapElemValue()
  4211  		if mapGet {
  4212  			mv = v[mk]
  4213  		} else {
  4214  			mv = nil
  4215  		}
  4216  		mv = d.decodeBytesInto(mv)
  4217  		v[mk] = mv
  4218  	}
  4219  }
  4220  func (d *Decoder) fastpathDecMapStringUint8R(f *codecFnInfo, rv reflect.Value) {
  4221  	containerLen := d.mapStart(d.d.ReadMapStart())
  4222  	if rv.Kind() == reflect.Ptr {
  4223  		vp, _ := rv2i(rv).(*map[string]uint8)
  4224  		if *vp == nil {
  4225  			*vp = make(map[string]uint8, decInferLen(containerLen, d.h.MaxInitLen, 17))
  4226  		}
  4227  		if containerLen != 0 {
  4228  			fastpathTV.DecMapStringUint8L(*vp, containerLen, d)
  4229  		}
  4230  	} else if containerLen != 0 {
  4231  		fastpathTV.DecMapStringUint8L(rv2i(rv).(map[string]uint8), containerLen, d)
  4232  	}
  4233  	d.mapEnd()
  4234  }
  4235  func (f fastpathT) DecMapStringUint8X(vp *map[string]uint8, d *Decoder) {
  4236  	containerLen := d.mapStart(d.d.ReadMapStart())
  4237  	if containerLen == containerLenNil {
  4238  		*vp = nil
  4239  	} else {
  4240  		if *vp == nil {
  4241  			*vp = make(map[string]uint8, decInferLen(containerLen, d.h.MaxInitLen, 17))
  4242  		}
  4243  		if containerLen != 0 {
  4244  			f.DecMapStringUint8L(*vp, containerLen, d)
  4245  		}
  4246  		d.mapEnd()
  4247  	}
  4248  }
  4249  func (fastpathT) DecMapStringUint8L(v map[string]uint8, containerLen int, d *Decoder) {
  4250  	if v == nil {
  4251  		d.errorf("cannot decode into nil map[string]uint8 given stream length: %v", containerLen)
  4252  		return
  4253  	}
  4254  	var mk string
  4255  	var mv uint8
  4256  	hasLen := containerLen > 0
  4257  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  4258  		d.mapElemKey()
  4259  		mk = d.stringZC(d.d.DecodeStringAsBytes())
  4260  		d.mapElemValue()
  4261  		mv = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
  4262  		v[mk] = mv
  4263  	}
  4264  }
  4265  func (d *Decoder) fastpathDecMapStringUint64R(f *codecFnInfo, rv reflect.Value) {
  4266  	containerLen := d.mapStart(d.d.ReadMapStart())
  4267  	if rv.Kind() == reflect.Ptr {
  4268  		vp, _ := rv2i(rv).(*map[string]uint64)
  4269  		if *vp == nil {
  4270  			*vp = make(map[string]uint64, decInferLen(containerLen, d.h.MaxInitLen, 24))
  4271  		}
  4272  		if containerLen != 0 {
  4273  			fastpathTV.DecMapStringUint64L(*vp, containerLen, d)
  4274  		}
  4275  	} else if containerLen != 0 {
  4276  		fastpathTV.DecMapStringUint64L(rv2i(rv).(map[string]uint64), containerLen, d)
  4277  	}
  4278  	d.mapEnd()
  4279  }
  4280  func (f fastpathT) DecMapStringUint64X(vp *map[string]uint64, d *Decoder) {
  4281  	containerLen := d.mapStart(d.d.ReadMapStart())
  4282  	if containerLen == containerLenNil {
  4283  		*vp = nil
  4284  	} else {
  4285  		if *vp == nil {
  4286  			*vp = make(map[string]uint64, decInferLen(containerLen, d.h.MaxInitLen, 24))
  4287  		}
  4288  		if containerLen != 0 {
  4289  			f.DecMapStringUint64L(*vp, containerLen, d)
  4290  		}
  4291  		d.mapEnd()
  4292  	}
  4293  }
  4294  func (fastpathT) DecMapStringUint64L(v map[string]uint64, containerLen int, d *Decoder) {
  4295  	if v == nil {
  4296  		d.errorf("cannot decode into nil map[string]uint64 given stream length: %v", containerLen)
  4297  		return
  4298  	}
  4299  	var mk string
  4300  	var mv uint64
  4301  	hasLen := containerLen > 0
  4302  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  4303  		d.mapElemKey()
  4304  		mk = d.stringZC(d.d.DecodeStringAsBytes())
  4305  		d.mapElemValue()
  4306  		mv = d.d.DecodeUint64()
  4307  		v[mk] = mv
  4308  	}
  4309  }
  4310  func (d *Decoder) fastpathDecMapStringIntR(f *codecFnInfo, rv reflect.Value) {
  4311  	containerLen := d.mapStart(d.d.ReadMapStart())
  4312  	if rv.Kind() == reflect.Ptr {
  4313  		vp, _ := rv2i(rv).(*map[string]int)
  4314  		if *vp == nil {
  4315  			*vp = make(map[string]int, decInferLen(containerLen, d.h.MaxInitLen, 24))
  4316  		}
  4317  		if containerLen != 0 {
  4318  			fastpathTV.DecMapStringIntL(*vp, containerLen, d)
  4319  		}
  4320  	} else if containerLen != 0 {
  4321  		fastpathTV.DecMapStringIntL(rv2i(rv).(map[string]int), containerLen, d)
  4322  	}
  4323  	d.mapEnd()
  4324  }
  4325  func (f fastpathT) DecMapStringIntX(vp *map[string]int, d *Decoder) {
  4326  	containerLen := d.mapStart(d.d.ReadMapStart())
  4327  	if containerLen == containerLenNil {
  4328  		*vp = nil
  4329  	} else {
  4330  		if *vp == nil {
  4331  			*vp = make(map[string]int, decInferLen(containerLen, d.h.MaxInitLen, 24))
  4332  		}
  4333  		if containerLen != 0 {
  4334  			f.DecMapStringIntL(*vp, containerLen, d)
  4335  		}
  4336  		d.mapEnd()
  4337  	}
  4338  }
  4339  func (fastpathT) DecMapStringIntL(v map[string]int, containerLen int, d *Decoder) {
  4340  	if v == nil {
  4341  		d.errorf("cannot decode into nil map[string]int given stream length: %v", containerLen)
  4342  		return
  4343  	}
  4344  	var mk string
  4345  	var mv int
  4346  	hasLen := containerLen > 0
  4347  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  4348  		d.mapElemKey()
  4349  		mk = d.stringZC(d.d.DecodeStringAsBytes())
  4350  		d.mapElemValue()
  4351  		mv = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
  4352  		v[mk] = mv
  4353  	}
  4354  }
  4355  func (d *Decoder) fastpathDecMapStringInt32R(f *codecFnInfo, rv reflect.Value) {
  4356  	containerLen := d.mapStart(d.d.ReadMapStart())
  4357  	if rv.Kind() == reflect.Ptr {
  4358  		vp, _ := rv2i(rv).(*map[string]int32)
  4359  		if *vp == nil {
  4360  			*vp = make(map[string]int32, decInferLen(containerLen, d.h.MaxInitLen, 20))
  4361  		}
  4362  		if containerLen != 0 {
  4363  			fastpathTV.DecMapStringInt32L(*vp, containerLen, d)
  4364  		}
  4365  	} else if containerLen != 0 {
  4366  		fastpathTV.DecMapStringInt32L(rv2i(rv).(map[string]int32), containerLen, d)
  4367  	}
  4368  	d.mapEnd()
  4369  }
  4370  func (f fastpathT) DecMapStringInt32X(vp *map[string]int32, d *Decoder) {
  4371  	containerLen := d.mapStart(d.d.ReadMapStart())
  4372  	if containerLen == containerLenNil {
  4373  		*vp = nil
  4374  	} else {
  4375  		if *vp == nil {
  4376  			*vp = make(map[string]int32, decInferLen(containerLen, d.h.MaxInitLen, 20))
  4377  		}
  4378  		if containerLen != 0 {
  4379  			f.DecMapStringInt32L(*vp, containerLen, d)
  4380  		}
  4381  		d.mapEnd()
  4382  	}
  4383  }
  4384  func (fastpathT) DecMapStringInt32L(v map[string]int32, containerLen int, d *Decoder) {
  4385  	if v == nil {
  4386  		d.errorf("cannot decode into nil map[string]int32 given stream length: %v", containerLen)
  4387  		return
  4388  	}
  4389  	var mk string
  4390  	var mv int32
  4391  	hasLen := containerLen > 0
  4392  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  4393  		d.mapElemKey()
  4394  		mk = d.stringZC(d.d.DecodeStringAsBytes())
  4395  		d.mapElemValue()
  4396  		mv = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
  4397  		v[mk] = mv
  4398  	}
  4399  }
  4400  func (d *Decoder) fastpathDecMapStringFloat64R(f *codecFnInfo, rv reflect.Value) {
  4401  	containerLen := d.mapStart(d.d.ReadMapStart())
  4402  	if rv.Kind() == reflect.Ptr {
  4403  		vp, _ := rv2i(rv).(*map[string]float64)
  4404  		if *vp == nil {
  4405  			*vp = make(map[string]float64, decInferLen(containerLen, d.h.MaxInitLen, 24))
  4406  		}
  4407  		if containerLen != 0 {
  4408  			fastpathTV.DecMapStringFloat64L(*vp, containerLen, d)
  4409  		}
  4410  	} else if containerLen != 0 {
  4411  		fastpathTV.DecMapStringFloat64L(rv2i(rv).(map[string]float64), containerLen, d)
  4412  	}
  4413  	d.mapEnd()
  4414  }
  4415  func (f fastpathT) DecMapStringFloat64X(vp *map[string]float64, d *Decoder) {
  4416  	containerLen := d.mapStart(d.d.ReadMapStart())
  4417  	if containerLen == containerLenNil {
  4418  		*vp = nil
  4419  	} else {
  4420  		if *vp == nil {
  4421  			*vp = make(map[string]float64, decInferLen(containerLen, d.h.MaxInitLen, 24))
  4422  		}
  4423  		if containerLen != 0 {
  4424  			f.DecMapStringFloat64L(*vp, containerLen, d)
  4425  		}
  4426  		d.mapEnd()
  4427  	}
  4428  }
  4429  func (fastpathT) DecMapStringFloat64L(v map[string]float64, containerLen int, d *Decoder) {
  4430  	if v == nil {
  4431  		d.errorf("cannot decode into nil map[string]float64 given stream length: %v", containerLen)
  4432  		return
  4433  	}
  4434  	var mk string
  4435  	var mv float64
  4436  	hasLen := containerLen > 0
  4437  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  4438  		d.mapElemKey()
  4439  		mk = d.stringZC(d.d.DecodeStringAsBytes())
  4440  		d.mapElemValue()
  4441  		mv = d.d.DecodeFloat64()
  4442  		v[mk] = mv
  4443  	}
  4444  }
  4445  func (d *Decoder) fastpathDecMapStringBoolR(f *codecFnInfo, rv reflect.Value) {
  4446  	containerLen := d.mapStart(d.d.ReadMapStart())
  4447  	if rv.Kind() == reflect.Ptr {
  4448  		vp, _ := rv2i(rv).(*map[string]bool)
  4449  		if *vp == nil {
  4450  			*vp = make(map[string]bool, decInferLen(containerLen, d.h.MaxInitLen, 17))
  4451  		}
  4452  		if containerLen != 0 {
  4453  			fastpathTV.DecMapStringBoolL(*vp, containerLen, d)
  4454  		}
  4455  	} else if containerLen != 0 {
  4456  		fastpathTV.DecMapStringBoolL(rv2i(rv).(map[string]bool), containerLen, d)
  4457  	}
  4458  	d.mapEnd()
  4459  }
  4460  func (f fastpathT) DecMapStringBoolX(vp *map[string]bool, d *Decoder) {
  4461  	containerLen := d.mapStart(d.d.ReadMapStart())
  4462  	if containerLen == containerLenNil {
  4463  		*vp = nil
  4464  	} else {
  4465  		if *vp == nil {
  4466  			*vp = make(map[string]bool, decInferLen(containerLen, d.h.MaxInitLen, 17))
  4467  		}
  4468  		if containerLen != 0 {
  4469  			f.DecMapStringBoolL(*vp, containerLen, d)
  4470  		}
  4471  		d.mapEnd()
  4472  	}
  4473  }
  4474  func (fastpathT) DecMapStringBoolL(v map[string]bool, containerLen int, d *Decoder) {
  4475  	if v == nil {
  4476  		d.errorf("cannot decode into nil map[string]bool given stream length: %v", containerLen)
  4477  		return
  4478  	}
  4479  	var mk string
  4480  	var mv bool
  4481  	hasLen := containerLen > 0
  4482  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  4483  		d.mapElemKey()
  4484  		mk = d.stringZC(d.d.DecodeStringAsBytes())
  4485  		d.mapElemValue()
  4486  		mv = d.d.DecodeBool()
  4487  		v[mk] = mv
  4488  	}
  4489  }
  4490  func (d *Decoder) fastpathDecMapUint8IntfR(f *codecFnInfo, rv reflect.Value) {
  4491  	containerLen := d.mapStart(d.d.ReadMapStart())
  4492  	if rv.Kind() == reflect.Ptr {
  4493  		vp, _ := rv2i(rv).(*map[uint8]interface{})
  4494  		if *vp == nil {
  4495  			*vp = make(map[uint8]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 17))
  4496  		}
  4497  		if containerLen != 0 {
  4498  			fastpathTV.DecMapUint8IntfL(*vp, containerLen, d)
  4499  		}
  4500  	} else if containerLen != 0 {
  4501  		fastpathTV.DecMapUint8IntfL(rv2i(rv).(map[uint8]interface{}), containerLen, d)
  4502  	}
  4503  	d.mapEnd()
  4504  }
  4505  func (f fastpathT) DecMapUint8IntfX(vp *map[uint8]interface{}, d *Decoder) {
  4506  	containerLen := d.mapStart(d.d.ReadMapStart())
  4507  	if containerLen == containerLenNil {
  4508  		*vp = nil
  4509  	} else {
  4510  		if *vp == nil {
  4511  			*vp = make(map[uint8]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 17))
  4512  		}
  4513  		if containerLen != 0 {
  4514  			f.DecMapUint8IntfL(*vp, containerLen, d)
  4515  		}
  4516  		d.mapEnd()
  4517  	}
  4518  }
  4519  func (fastpathT) DecMapUint8IntfL(v map[uint8]interface{}, containerLen int, d *Decoder) {
  4520  	if v == nil {
  4521  		d.errorf("cannot decode into nil map[uint8]interface{} given stream length: %v", containerLen)
  4522  		return
  4523  	}
  4524  	mapGet := v != nil && !d.h.MapValueReset && !d.h.InterfaceReset
  4525  	var mk uint8
  4526  	var mv interface{}
  4527  	hasLen := containerLen > 0
  4528  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  4529  		d.mapElemKey()
  4530  		mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
  4531  		d.mapElemValue()
  4532  		if mapGet {
  4533  			mv = v[mk]
  4534  		} else {
  4535  			mv = nil
  4536  		}
  4537  		d.decode(&mv)
  4538  		v[mk] = mv
  4539  	}
  4540  }
  4541  func (d *Decoder) fastpathDecMapUint8StringR(f *codecFnInfo, rv reflect.Value) {
  4542  	containerLen := d.mapStart(d.d.ReadMapStart())
  4543  	if rv.Kind() == reflect.Ptr {
  4544  		vp, _ := rv2i(rv).(*map[uint8]string)
  4545  		if *vp == nil {
  4546  			*vp = make(map[uint8]string, decInferLen(containerLen, d.h.MaxInitLen, 17))
  4547  		}
  4548  		if containerLen != 0 {
  4549  			fastpathTV.DecMapUint8StringL(*vp, containerLen, d)
  4550  		}
  4551  	} else if containerLen != 0 {
  4552  		fastpathTV.DecMapUint8StringL(rv2i(rv).(map[uint8]string), containerLen, d)
  4553  	}
  4554  	d.mapEnd()
  4555  }
  4556  func (f fastpathT) DecMapUint8StringX(vp *map[uint8]string, d *Decoder) {
  4557  	containerLen := d.mapStart(d.d.ReadMapStart())
  4558  	if containerLen == containerLenNil {
  4559  		*vp = nil
  4560  	} else {
  4561  		if *vp == nil {
  4562  			*vp = make(map[uint8]string, decInferLen(containerLen, d.h.MaxInitLen, 17))
  4563  		}
  4564  		if containerLen != 0 {
  4565  			f.DecMapUint8StringL(*vp, containerLen, d)
  4566  		}
  4567  		d.mapEnd()
  4568  	}
  4569  }
  4570  func (fastpathT) DecMapUint8StringL(v map[uint8]string, containerLen int, d *Decoder) {
  4571  	if v == nil {
  4572  		d.errorf("cannot decode into nil map[uint8]string given stream length: %v", containerLen)
  4573  		return
  4574  	}
  4575  	var mk uint8
  4576  	var mv string
  4577  	hasLen := containerLen > 0
  4578  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  4579  		d.mapElemKey()
  4580  		mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
  4581  		d.mapElemValue()
  4582  		mv = d.stringZC(d.d.DecodeStringAsBytes())
  4583  		v[mk] = mv
  4584  	}
  4585  }
  4586  func (d *Decoder) fastpathDecMapUint8BytesR(f *codecFnInfo, rv reflect.Value) {
  4587  	containerLen := d.mapStart(d.d.ReadMapStart())
  4588  	if rv.Kind() == reflect.Ptr {
  4589  		vp, _ := rv2i(rv).(*map[uint8][]byte)
  4590  		if *vp == nil {
  4591  			*vp = make(map[uint8][]byte, decInferLen(containerLen, d.h.MaxInitLen, 25))
  4592  		}
  4593  		if containerLen != 0 {
  4594  			fastpathTV.DecMapUint8BytesL(*vp, containerLen, d)
  4595  		}
  4596  	} else if containerLen != 0 {
  4597  		fastpathTV.DecMapUint8BytesL(rv2i(rv).(map[uint8][]byte), containerLen, d)
  4598  	}
  4599  	d.mapEnd()
  4600  }
  4601  func (f fastpathT) DecMapUint8BytesX(vp *map[uint8][]byte, d *Decoder) {
  4602  	containerLen := d.mapStart(d.d.ReadMapStart())
  4603  	if containerLen == containerLenNil {
  4604  		*vp = nil
  4605  	} else {
  4606  		if *vp == nil {
  4607  			*vp = make(map[uint8][]byte, decInferLen(containerLen, d.h.MaxInitLen, 25))
  4608  		}
  4609  		if containerLen != 0 {
  4610  			f.DecMapUint8BytesL(*vp, containerLen, d)
  4611  		}
  4612  		d.mapEnd()
  4613  	}
  4614  }
  4615  func (fastpathT) DecMapUint8BytesL(v map[uint8][]byte, containerLen int, d *Decoder) {
  4616  	if v == nil {
  4617  		d.errorf("cannot decode into nil map[uint8][]byte given stream length: %v", containerLen)
  4618  		return
  4619  	}
  4620  	mapGet := v != nil && !d.h.MapValueReset
  4621  	var mk uint8
  4622  	var mv []byte
  4623  	hasLen := containerLen > 0
  4624  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  4625  		d.mapElemKey()
  4626  		mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
  4627  		d.mapElemValue()
  4628  		if mapGet {
  4629  			mv = v[mk]
  4630  		} else {
  4631  			mv = nil
  4632  		}
  4633  		mv = d.decodeBytesInto(mv)
  4634  		v[mk] = mv
  4635  	}
  4636  }
  4637  func (d *Decoder) fastpathDecMapUint8Uint8R(f *codecFnInfo, rv reflect.Value) {
  4638  	containerLen := d.mapStart(d.d.ReadMapStart())
  4639  	if rv.Kind() == reflect.Ptr {
  4640  		vp, _ := rv2i(rv).(*map[uint8]uint8)
  4641  		if *vp == nil {
  4642  			*vp = make(map[uint8]uint8, decInferLen(containerLen, d.h.MaxInitLen, 2))
  4643  		}
  4644  		if containerLen != 0 {
  4645  			fastpathTV.DecMapUint8Uint8L(*vp, containerLen, d)
  4646  		}
  4647  	} else if containerLen != 0 {
  4648  		fastpathTV.DecMapUint8Uint8L(rv2i(rv).(map[uint8]uint8), containerLen, d)
  4649  	}
  4650  	d.mapEnd()
  4651  }
  4652  func (f fastpathT) DecMapUint8Uint8X(vp *map[uint8]uint8, d *Decoder) {
  4653  	containerLen := d.mapStart(d.d.ReadMapStart())
  4654  	if containerLen == containerLenNil {
  4655  		*vp = nil
  4656  	} else {
  4657  		if *vp == nil {
  4658  			*vp = make(map[uint8]uint8, decInferLen(containerLen, d.h.MaxInitLen, 2))
  4659  		}
  4660  		if containerLen != 0 {
  4661  			f.DecMapUint8Uint8L(*vp, containerLen, d)
  4662  		}
  4663  		d.mapEnd()
  4664  	}
  4665  }
  4666  func (fastpathT) DecMapUint8Uint8L(v map[uint8]uint8, containerLen int, d *Decoder) {
  4667  	if v == nil {
  4668  		d.errorf("cannot decode into nil map[uint8]uint8 given stream length: %v", containerLen)
  4669  		return
  4670  	}
  4671  	var mk uint8
  4672  	var mv uint8
  4673  	hasLen := containerLen > 0
  4674  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  4675  		d.mapElemKey()
  4676  		mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
  4677  		d.mapElemValue()
  4678  		mv = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
  4679  		v[mk] = mv
  4680  	}
  4681  }
  4682  func (d *Decoder) fastpathDecMapUint8Uint64R(f *codecFnInfo, rv reflect.Value) {
  4683  	containerLen := d.mapStart(d.d.ReadMapStart())
  4684  	if rv.Kind() == reflect.Ptr {
  4685  		vp, _ := rv2i(rv).(*map[uint8]uint64)
  4686  		if *vp == nil {
  4687  			*vp = make(map[uint8]uint64, decInferLen(containerLen, d.h.MaxInitLen, 9))
  4688  		}
  4689  		if containerLen != 0 {
  4690  			fastpathTV.DecMapUint8Uint64L(*vp, containerLen, d)
  4691  		}
  4692  	} else if containerLen != 0 {
  4693  		fastpathTV.DecMapUint8Uint64L(rv2i(rv).(map[uint8]uint64), containerLen, d)
  4694  	}
  4695  	d.mapEnd()
  4696  }
  4697  func (f fastpathT) DecMapUint8Uint64X(vp *map[uint8]uint64, d *Decoder) {
  4698  	containerLen := d.mapStart(d.d.ReadMapStart())
  4699  	if containerLen == containerLenNil {
  4700  		*vp = nil
  4701  	} else {
  4702  		if *vp == nil {
  4703  			*vp = make(map[uint8]uint64, decInferLen(containerLen, d.h.MaxInitLen, 9))
  4704  		}
  4705  		if containerLen != 0 {
  4706  			f.DecMapUint8Uint64L(*vp, containerLen, d)
  4707  		}
  4708  		d.mapEnd()
  4709  	}
  4710  }
  4711  func (fastpathT) DecMapUint8Uint64L(v map[uint8]uint64, containerLen int, d *Decoder) {
  4712  	if v == nil {
  4713  		d.errorf("cannot decode into nil map[uint8]uint64 given stream length: %v", containerLen)
  4714  		return
  4715  	}
  4716  	var mk uint8
  4717  	var mv uint64
  4718  	hasLen := containerLen > 0
  4719  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  4720  		d.mapElemKey()
  4721  		mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
  4722  		d.mapElemValue()
  4723  		mv = d.d.DecodeUint64()
  4724  		v[mk] = mv
  4725  	}
  4726  }
  4727  func (d *Decoder) fastpathDecMapUint8IntR(f *codecFnInfo, rv reflect.Value) {
  4728  	containerLen := d.mapStart(d.d.ReadMapStart())
  4729  	if rv.Kind() == reflect.Ptr {
  4730  		vp, _ := rv2i(rv).(*map[uint8]int)
  4731  		if *vp == nil {
  4732  			*vp = make(map[uint8]int, decInferLen(containerLen, d.h.MaxInitLen, 9))
  4733  		}
  4734  		if containerLen != 0 {
  4735  			fastpathTV.DecMapUint8IntL(*vp, containerLen, d)
  4736  		}
  4737  	} else if containerLen != 0 {
  4738  		fastpathTV.DecMapUint8IntL(rv2i(rv).(map[uint8]int), containerLen, d)
  4739  	}
  4740  	d.mapEnd()
  4741  }
  4742  func (f fastpathT) DecMapUint8IntX(vp *map[uint8]int, d *Decoder) {
  4743  	containerLen := d.mapStart(d.d.ReadMapStart())
  4744  	if containerLen == containerLenNil {
  4745  		*vp = nil
  4746  	} else {
  4747  		if *vp == nil {
  4748  			*vp = make(map[uint8]int, decInferLen(containerLen, d.h.MaxInitLen, 9))
  4749  		}
  4750  		if containerLen != 0 {
  4751  			f.DecMapUint8IntL(*vp, containerLen, d)
  4752  		}
  4753  		d.mapEnd()
  4754  	}
  4755  }
  4756  func (fastpathT) DecMapUint8IntL(v map[uint8]int, containerLen int, d *Decoder) {
  4757  	if v == nil {
  4758  		d.errorf("cannot decode into nil map[uint8]int given stream length: %v", containerLen)
  4759  		return
  4760  	}
  4761  	var mk uint8
  4762  	var mv int
  4763  	hasLen := containerLen > 0
  4764  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  4765  		d.mapElemKey()
  4766  		mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
  4767  		d.mapElemValue()
  4768  		mv = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
  4769  		v[mk] = mv
  4770  	}
  4771  }
  4772  func (d *Decoder) fastpathDecMapUint8Int32R(f *codecFnInfo, rv reflect.Value) {
  4773  	containerLen := d.mapStart(d.d.ReadMapStart())
  4774  	if rv.Kind() == reflect.Ptr {
  4775  		vp, _ := rv2i(rv).(*map[uint8]int32)
  4776  		if *vp == nil {
  4777  			*vp = make(map[uint8]int32, decInferLen(containerLen, d.h.MaxInitLen, 5))
  4778  		}
  4779  		if containerLen != 0 {
  4780  			fastpathTV.DecMapUint8Int32L(*vp, containerLen, d)
  4781  		}
  4782  	} else if containerLen != 0 {
  4783  		fastpathTV.DecMapUint8Int32L(rv2i(rv).(map[uint8]int32), containerLen, d)
  4784  	}
  4785  	d.mapEnd()
  4786  }
  4787  func (f fastpathT) DecMapUint8Int32X(vp *map[uint8]int32, d *Decoder) {
  4788  	containerLen := d.mapStart(d.d.ReadMapStart())
  4789  	if containerLen == containerLenNil {
  4790  		*vp = nil
  4791  	} else {
  4792  		if *vp == nil {
  4793  			*vp = make(map[uint8]int32, decInferLen(containerLen, d.h.MaxInitLen, 5))
  4794  		}
  4795  		if containerLen != 0 {
  4796  			f.DecMapUint8Int32L(*vp, containerLen, d)
  4797  		}
  4798  		d.mapEnd()
  4799  	}
  4800  }
  4801  func (fastpathT) DecMapUint8Int32L(v map[uint8]int32, containerLen int, d *Decoder) {
  4802  	if v == nil {
  4803  		d.errorf("cannot decode into nil map[uint8]int32 given stream length: %v", containerLen)
  4804  		return
  4805  	}
  4806  	var mk uint8
  4807  	var mv int32
  4808  	hasLen := containerLen > 0
  4809  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  4810  		d.mapElemKey()
  4811  		mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
  4812  		d.mapElemValue()
  4813  		mv = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
  4814  		v[mk] = mv
  4815  	}
  4816  }
  4817  func (d *Decoder) fastpathDecMapUint8Float64R(f *codecFnInfo, rv reflect.Value) {
  4818  	containerLen := d.mapStart(d.d.ReadMapStart())
  4819  	if rv.Kind() == reflect.Ptr {
  4820  		vp, _ := rv2i(rv).(*map[uint8]float64)
  4821  		if *vp == nil {
  4822  			*vp = make(map[uint8]float64, decInferLen(containerLen, d.h.MaxInitLen, 9))
  4823  		}
  4824  		if containerLen != 0 {
  4825  			fastpathTV.DecMapUint8Float64L(*vp, containerLen, d)
  4826  		}
  4827  	} else if containerLen != 0 {
  4828  		fastpathTV.DecMapUint8Float64L(rv2i(rv).(map[uint8]float64), containerLen, d)
  4829  	}
  4830  	d.mapEnd()
  4831  }
  4832  func (f fastpathT) DecMapUint8Float64X(vp *map[uint8]float64, d *Decoder) {
  4833  	containerLen := d.mapStart(d.d.ReadMapStart())
  4834  	if containerLen == containerLenNil {
  4835  		*vp = nil
  4836  	} else {
  4837  		if *vp == nil {
  4838  			*vp = make(map[uint8]float64, decInferLen(containerLen, d.h.MaxInitLen, 9))
  4839  		}
  4840  		if containerLen != 0 {
  4841  			f.DecMapUint8Float64L(*vp, containerLen, d)
  4842  		}
  4843  		d.mapEnd()
  4844  	}
  4845  }
  4846  func (fastpathT) DecMapUint8Float64L(v map[uint8]float64, containerLen int, d *Decoder) {
  4847  	if v == nil {
  4848  		d.errorf("cannot decode into nil map[uint8]float64 given stream length: %v", containerLen)
  4849  		return
  4850  	}
  4851  	var mk uint8
  4852  	var mv float64
  4853  	hasLen := containerLen > 0
  4854  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  4855  		d.mapElemKey()
  4856  		mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
  4857  		d.mapElemValue()
  4858  		mv = d.d.DecodeFloat64()
  4859  		v[mk] = mv
  4860  	}
  4861  }
  4862  func (d *Decoder) fastpathDecMapUint8BoolR(f *codecFnInfo, rv reflect.Value) {
  4863  	containerLen := d.mapStart(d.d.ReadMapStart())
  4864  	if rv.Kind() == reflect.Ptr {
  4865  		vp, _ := rv2i(rv).(*map[uint8]bool)
  4866  		if *vp == nil {
  4867  			*vp = make(map[uint8]bool, decInferLen(containerLen, d.h.MaxInitLen, 2))
  4868  		}
  4869  		if containerLen != 0 {
  4870  			fastpathTV.DecMapUint8BoolL(*vp, containerLen, d)
  4871  		}
  4872  	} else if containerLen != 0 {
  4873  		fastpathTV.DecMapUint8BoolL(rv2i(rv).(map[uint8]bool), containerLen, d)
  4874  	}
  4875  	d.mapEnd()
  4876  }
  4877  func (f fastpathT) DecMapUint8BoolX(vp *map[uint8]bool, d *Decoder) {
  4878  	containerLen := d.mapStart(d.d.ReadMapStart())
  4879  	if containerLen == containerLenNil {
  4880  		*vp = nil
  4881  	} else {
  4882  		if *vp == nil {
  4883  			*vp = make(map[uint8]bool, decInferLen(containerLen, d.h.MaxInitLen, 2))
  4884  		}
  4885  		if containerLen != 0 {
  4886  			f.DecMapUint8BoolL(*vp, containerLen, d)
  4887  		}
  4888  		d.mapEnd()
  4889  	}
  4890  }
  4891  func (fastpathT) DecMapUint8BoolL(v map[uint8]bool, containerLen int, d *Decoder) {
  4892  	if v == nil {
  4893  		d.errorf("cannot decode into nil map[uint8]bool given stream length: %v", containerLen)
  4894  		return
  4895  	}
  4896  	var mk uint8
  4897  	var mv bool
  4898  	hasLen := containerLen > 0
  4899  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  4900  		d.mapElemKey()
  4901  		mk = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
  4902  		d.mapElemValue()
  4903  		mv = d.d.DecodeBool()
  4904  		v[mk] = mv
  4905  	}
  4906  }
  4907  func (d *Decoder) fastpathDecMapUint64IntfR(f *codecFnInfo, rv reflect.Value) {
  4908  	containerLen := d.mapStart(d.d.ReadMapStart())
  4909  	if rv.Kind() == reflect.Ptr {
  4910  		vp, _ := rv2i(rv).(*map[uint64]interface{})
  4911  		if *vp == nil {
  4912  			*vp = make(map[uint64]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 24))
  4913  		}
  4914  		if containerLen != 0 {
  4915  			fastpathTV.DecMapUint64IntfL(*vp, containerLen, d)
  4916  		}
  4917  	} else if containerLen != 0 {
  4918  		fastpathTV.DecMapUint64IntfL(rv2i(rv).(map[uint64]interface{}), containerLen, d)
  4919  	}
  4920  	d.mapEnd()
  4921  }
  4922  func (f fastpathT) DecMapUint64IntfX(vp *map[uint64]interface{}, d *Decoder) {
  4923  	containerLen := d.mapStart(d.d.ReadMapStart())
  4924  	if containerLen == containerLenNil {
  4925  		*vp = nil
  4926  	} else {
  4927  		if *vp == nil {
  4928  			*vp = make(map[uint64]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 24))
  4929  		}
  4930  		if containerLen != 0 {
  4931  			f.DecMapUint64IntfL(*vp, containerLen, d)
  4932  		}
  4933  		d.mapEnd()
  4934  	}
  4935  }
  4936  func (fastpathT) DecMapUint64IntfL(v map[uint64]interface{}, containerLen int, d *Decoder) {
  4937  	if v == nil {
  4938  		d.errorf("cannot decode into nil map[uint64]interface{} given stream length: %v", containerLen)
  4939  		return
  4940  	}
  4941  	mapGet := v != nil && !d.h.MapValueReset && !d.h.InterfaceReset
  4942  	var mk uint64
  4943  	var mv interface{}
  4944  	hasLen := containerLen > 0
  4945  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  4946  		d.mapElemKey()
  4947  		mk = d.d.DecodeUint64()
  4948  		d.mapElemValue()
  4949  		if mapGet {
  4950  			mv = v[mk]
  4951  		} else {
  4952  			mv = nil
  4953  		}
  4954  		d.decode(&mv)
  4955  		v[mk] = mv
  4956  	}
  4957  }
  4958  func (d *Decoder) fastpathDecMapUint64StringR(f *codecFnInfo, rv reflect.Value) {
  4959  	containerLen := d.mapStart(d.d.ReadMapStart())
  4960  	if rv.Kind() == reflect.Ptr {
  4961  		vp, _ := rv2i(rv).(*map[uint64]string)
  4962  		if *vp == nil {
  4963  			*vp = make(map[uint64]string, decInferLen(containerLen, d.h.MaxInitLen, 24))
  4964  		}
  4965  		if containerLen != 0 {
  4966  			fastpathTV.DecMapUint64StringL(*vp, containerLen, d)
  4967  		}
  4968  	} else if containerLen != 0 {
  4969  		fastpathTV.DecMapUint64StringL(rv2i(rv).(map[uint64]string), containerLen, d)
  4970  	}
  4971  	d.mapEnd()
  4972  }
  4973  func (f fastpathT) DecMapUint64StringX(vp *map[uint64]string, d *Decoder) {
  4974  	containerLen := d.mapStart(d.d.ReadMapStart())
  4975  	if containerLen == containerLenNil {
  4976  		*vp = nil
  4977  	} else {
  4978  		if *vp == nil {
  4979  			*vp = make(map[uint64]string, decInferLen(containerLen, d.h.MaxInitLen, 24))
  4980  		}
  4981  		if containerLen != 0 {
  4982  			f.DecMapUint64StringL(*vp, containerLen, d)
  4983  		}
  4984  		d.mapEnd()
  4985  	}
  4986  }
  4987  func (fastpathT) DecMapUint64StringL(v map[uint64]string, containerLen int, d *Decoder) {
  4988  	if v == nil {
  4989  		d.errorf("cannot decode into nil map[uint64]string given stream length: %v", containerLen)
  4990  		return
  4991  	}
  4992  	var mk uint64
  4993  	var mv string
  4994  	hasLen := containerLen > 0
  4995  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  4996  		d.mapElemKey()
  4997  		mk = d.d.DecodeUint64()
  4998  		d.mapElemValue()
  4999  		mv = d.stringZC(d.d.DecodeStringAsBytes())
  5000  		v[mk] = mv
  5001  	}
  5002  }
  5003  func (d *Decoder) fastpathDecMapUint64BytesR(f *codecFnInfo, rv reflect.Value) {
  5004  	containerLen := d.mapStart(d.d.ReadMapStart())
  5005  	if rv.Kind() == reflect.Ptr {
  5006  		vp, _ := rv2i(rv).(*map[uint64][]byte)
  5007  		if *vp == nil {
  5008  			*vp = make(map[uint64][]byte, decInferLen(containerLen, d.h.MaxInitLen, 32))
  5009  		}
  5010  		if containerLen != 0 {
  5011  			fastpathTV.DecMapUint64BytesL(*vp, containerLen, d)
  5012  		}
  5013  	} else if containerLen != 0 {
  5014  		fastpathTV.DecMapUint64BytesL(rv2i(rv).(map[uint64][]byte), containerLen, d)
  5015  	}
  5016  	d.mapEnd()
  5017  }
  5018  func (f fastpathT) DecMapUint64BytesX(vp *map[uint64][]byte, d *Decoder) {
  5019  	containerLen := d.mapStart(d.d.ReadMapStart())
  5020  	if containerLen == containerLenNil {
  5021  		*vp = nil
  5022  	} else {
  5023  		if *vp == nil {
  5024  			*vp = make(map[uint64][]byte, decInferLen(containerLen, d.h.MaxInitLen, 32))
  5025  		}
  5026  		if containerLen != 0 {
  5027  			f.DecMapUint64BytesL(*vp, containerLen, d)
  5028  		}
  5029  		d.mapEnd()
  5030  	}
  5031  }
  5032  func (fastpathT) DecMapUint64BytesL(v map[uint64][]byte, containerLen int, d *Decoder) {
  5033  	if v == nil {
  5034  		d.errorf("cannot decode into nil map[uint64][]byte given stream length: %v", containerLen)
  5035  		return
  5036  	}
  5037  	mapGet := v != nil && !d.h.MapValueReset
  5038  	var mk uint64
  5039  	var mv []byte
  5040  	hasLen := containerLen > 0
  5041  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  5042  		d.mapElemKey()
  5043  		mk = d.d.DecodeUint64()
  5044  		d.mapElemValue()
  5045  		if mapGet {
  5046  			mv = v[mk]
  5047  		} else {
  5048  			mv = nil
  5049  		}
  5050  		mv = d.decodeBytesInto(mv)
  5051  		v[mk] = mv
  5052  	}
  5053  }
  5054  func (d *Decoder) fastpathDecMapUint64Uint8R(f *codecFnInfo, rv reflect.Value) {
  5055  	containerLen := d.mapStart(d.d.ReadMapStart())
  5056  	if rv.Kind() == reflect.Ptr {
  5057  		vp, _ := rv2i(rv).(*map[uint64]uint8)
  5058  		if *vp == nil {
  5059  			*vp = make(map[uint64]uint8, decInferLen(containerLen, d.h.MaxInitLen, 9))
  5060  		}
  5061  		if containerLen != 0 {
  5062  			fastpathTV.DecMapUint64Uint8L(*vp, containerLen, d)
  5063  		}
  5064  	} else if containerLen != 0 {
  5065  		fastpathTV.DecMapUint64Uint8L(rv2i(rv).(map[uint64]uint8), containerLen, d)
  5066  	}
  5067  	d.mapEnd()
  5068  }
  5069  func (f fastpathT) DecMapUint64Uint8X(vp *map[uint64]uint8, d *Decoder) {
  5070  	containerLen := d.mapStart(d.d.ReadMapStart())
  5071  	if containerLen == containerLenNil {
  5072  		*vp = nil
  5073  	} else {
  5074  		if *vp == nil {
  5075  			*vp = make(map[uint64]uint8, decInferLen(containerLen, d.h.MaxInitLen, 9))
  5076  		}
  5077  		if containerLen != 0 {
  5078  			f.DecMapUint64Uint8L(*vp, containerLen, d)
  5079  		}
  5080  		d.mapEnd()
  5081  	}
  5082  }
  5083  func (fastpathT) DecMapUint64Uint8L(v map[uint64]uint8, containerLen int, d *Decoder) {
  5084  	if v == nil {
  5085  		d.errorf("cannot decode into nil map[uint64]uint8 given stream length: %v", containerLen)
  5086  		return
  5087  	}
  5088  	var mk uint64
  5089  	var mv uint8
  5090  	hasLen := containerLen > 0
  5091  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  5092  		d.mapElemKey()
  5093  		mk = d.d.DecodeUint64()
  5094  		d.mapElemValue()
  5095  		mv = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
  5096  		v[mk] = mv
  5097  	}
  5098  }
  5099  func (d *Decoder) fastpathDecMapUint64Uint64R(f *codecFnInfo, rv reflect.Value) {
  5100  	containerLen := d.mapStart(d.d.ReadMapStart())
  5101  	if rv.Kind() == reflect.Ptr {
  5102  		vp, _ := rv2i(rv).(*map[uint64]uint64)
  5103  		if *vp == nil {
  5104  			*vp = make(map[uint64]uint64, decInferLen(containerLen, d.h.MaxInitLen, 16))
  5105  		}
  5106  		if containerLen != 0 {
  5107  			fastpathTV.DecMapUint64Uint64L(*vp, containerLen, d)
  5108  		}
  5109  	} else if containerLen != 0 {
  5110  		fastpathTV.DecMapUint64Uint64L(rv2i(rv).(map[uint64]uint64), containerLen, d)
  5111  	}
  5112  	d.mapEnd()
  5113  }
  5114  func (f fastpathT) DecMapUint64Uint64X(vp *map[uint64]uint64, d *Decoder) {
  5115  	containerLen := d.mapStart(d.d.ReadMapStart())
  5116  	if containerLen == containerLenNil {
  5117  		*vp = nil
  5118  	} else {
  5119  		if *vp == nil {
  5120  			*vp = make(map[uint64]uint64, decInferLen(containerLen, d.h.MaxInitLen, 16))
  5121  		}
  5122  		if containerLen != 0 {
  5123  			f.DecMapUint64Uint64L(*vp, containerLen, d)
  5124  		}
  5125  		d.mapEnd()
  5126  	}
  5127  }
  5128  func (fastpathT) DecMapUint64Uint64L(v map[uint64]uint64, containerLen int, d *Decoder) {
  5129  	if v == nil {
  5130  		d.errorf("cannot decode into nil map[uint64]uint64 given stream length: %v", containerLen)
  5131  		return
  5132  	}
  5133  	var mk uint64
  5134  	var mv uint64
  5135  	hasLen := containerLen > 0
  5136  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  5137  		d.mapElemKey()
  5138  		mk = d.d.DecodeUint64()
  5139  		d.mapElemValue()
  5140  		mv = d.d.DecodeUint64()
  5141  		v[mk] = mv
  5142  	}
  5143  }
  5144  func (d *Decoder) fastpathDecMapUint64IntR(f *codecFnInfo, rv reflect.Value) {
  5145  	containerLen := d.mapStart(d.d.ReadMapStart())
  5146  	if rv.Kind() == reflect.Ptr {
  5147  		vp, _ := rv2i(rv).(*map[uint64]int)
  5148  		if *vp == nil {
  5149  			*vp = make(map[uint64]int, decInferLen(containerLen, d.h.MaxInitLen, 16))
  5150  		}
  5151  		if containerLen != 0 {
  5152  			fastpathTV.DecMapUint64IntL(*vp, containerLen, d)
  5153  		}
  5154  	} else if containerLen != 0 {
  5155  		fastpathTV.DecMapUint64IntL(rv2i(rv).(map[uint64]int), containerLen, d)
  5156  	}
  5157  	d.mapEnd()
  5158  }
  5159  func (f fastpathT) DecMapUint64IntX(vp *map[uint64]int, d *Decoder) {
  5160  	containerLen := d.mapStart(d.d.ReadMapStart())
  5161  	if containerLen == containerLenNil {
  5162  		*vp = nil
  5163  	} else {
  5164  		if *vp == nil {
  5165  			*vp = make(map[uint64]int, decInferLen(containerLen, d.h.MaxInitLen, 16))
  5166  		}
  5167  		if containerLen != 0 {
  5168  			f.DecMapUint64IntL(*vp, containerLen, d)
  5169  		}
  5170  		d.mapEnd()
  5171  	}
  5172  }
  5173  func (fastpathT) DecMapUint64IntL(v map[uint64]int, containerLen int, d *Decoder) {
  5174  	if v == nil {
  5175  		d.errorf("cannot decode into nil map[uint64]int given stream length: %v", containerLen)
  5176  		return
  5177  	}
  5178  	var mk uint64
  5179  	var mv int
  5180  	hasLen := containerLen > 0
  5181  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  5182  		d.mapElemKey()
  5183  		mk = d.d.DecodeUint64()
  5184  		d.mapElemValue()
  5185  		mv = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
  5186  		v[mk] = mv
  5187  	}
  5188  }
  5189  func (d *Decoder) fastpathDecMapUint64Int32R(f *codecFnInfo, rv reflect.Value) {
  5190  	containerLen := d.mapStart(d.d.ReadMapStart())
  5191  	if rv.Kind() == reflect.Ptr {
  5192  		vp, _ := rv2i(rv).(*map[uint64]int32)
  5193  		if *vp == nil {
  5194  			*vp = make(map[uint64]int32, decInferLen(containerLen, d.h.MaxInitLen, 12))
  5195  		}
  5196  		if containerLen != 0 {
  5197  			fastpathTV.DecMapUint64Int32L(*vp, containerLen, d)
  5198  		}
  5199  	} else if containerLen != 0 {
  5200  		fastpathTV.DecMapUint64Int32L(rv2i(rv).(map[uint64]int32), containerLen, d)
  5201  	}
  5202  	d.mapEnd()
  5203  }
  5204  func (f fastpathT) DecMapUint64Int32X(vp *map[uint64]int32, d *Decoder) {
  5205  	containerLen := d.mapStart(d.d.ReadMapStart())
  5206  	if containerLen == containerLenNil {
  5207  		*vp = nil
  5208  	} else {
  5209  		if *vp == nil {
  5210  			*vp = make(map[uint64]int32, decInferLen(containerLen, d.h.MaxInitLen, 12))
  5211  		}
  5212  		if containerLen != 0 {
  5213  			f.DecMapUint64Int32L(*vp, containerLen, d)
  5214  		}
  5215  		d.mapEnd()
  5216  	}
  5217  }
  5218  func (fastpathT) DecMapUint64Int32L(v map[uint64]int32, containerLen int, d *Decoder) {
  5219  	if v == nil {
  5220  		d.errorf("cannot decode into nil map[uint64]int32 given stream length: %v", containerLen)
  5221  		return
  5222  	}
  5223  	var mk uint64
  5224  	var mv int32
  5225  	hasLen := containerLen > 0
  5226  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  5227  		d.mapElemKey()
  5228  		mk = d.d.DecodeUint64()
  5229  		d.mapElemValue()
  5230  		mv = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
  5231  		v[mk] = mv
  5232  	}
  5233  }
  5234  func (d *Decoder) fastpathDecMapUint64Float64R(f *codecFnInfo, rv reflect.Value) {
  5235  	containerLen := d.mapStart(d.d.ReadMapStart())
  5236  	if rv.Kind() == reflect.Ptr {
  5237  		vp, _ := rv2i(rv).(*map[uint64]float64)
  5238  		if *vp == nil {
  5239  			*vp = make(map[uint64]float64, decInferLen(containerLen, d.h.MaxInitLen, 16))
  5240  		}
  5241  		if containerLen != 0 {
  5242  			fastpathTV.DecMapUint64Float64L(*vp, containerLen, d)
  5243  		}
  5244  	} else if containerLen != 0 {
  5245  		fastpathTV.DecMapUint64Float64L(rv2i(rv).(map[uint64]float64), containerLen, d)
  5246  	}
  5247  	d.mapEnd()
  5248  }
  5249  func (f fastpathT) DecMapUint64Float64X(vp *map[uint64]float64, d *Decoder) {
  5250  	containerLen := d.mapStart(d.d.ReadMapStart())
  5251  	if containerLen == containerLenNil {
  5252  		*vp = nil
  5253  	} else {
  5254  		if *vp == nil {
  5255  			*vp = make(map[uint64]float64, decInferLen(containerLen, d.h.MaxInitLen, 16))
  5256  		}
  5257  		if containerLen != 0 {
  5258  			f.DecMapUint64Float64L(*vp, containerLen, d)
  5259  		}
  5260  		d.mapEnd()
  5261  	}
  5262  }
  5263  func (fastpathT) DecMapUint64Float64L(v map[uint64]float64, containerLen int, d *Decoder) {
  5264  	if v == nil {
  5265  		d.errorf("cannot decode into nil map[uint64]float64 given stream length: %v", containerLen)
  5266  		return
  5267  	}
  5268  	var mk uint64
  5269  	var mv float64
  5270  	hasLen := containerLen > 0
  5271  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  5272  		d.mapElemKey()
  5273  		mk = d.d.DecodeUint64()
  5274  		d.mapElemValue()
  5275  		mv = d.d.DecodeFloat64()
  5276  		v[mk] = mv
  5277  	}
  5278  }
  5279  func (d *Decoder) fastpathDecMapUint64BoolR(f *codecFnInfo, rv reflect.Value) {
  5280  	containerLen := d.mapStart(d.d.ReadMapStart())
  5281  	if rv.Kind() == reflect.Ptr {
  5282  		vp, _ := rv2i(rv).(*map[uint64]bool)
  5283  		if *vp == nil {
  5284  			*vp = make(map[uint64]bool, decInferLen(containerLen, d.h.MaxInitLen, 9))
  5285  		}
  5286  		if containerLen != 0 {
  5287  			fastpathTV.DecMapUint64BoolL(*vp, containerLen, d)
  5288  		}
  5289  	} else if containerLen != 0 {
  5290  		fastpathTV.DecMapUint64BoolL(rv2i(rv).(map[uint64]bool), containerLen, d)
  5291  	}
  5292  	d.mapEnd()
  5293  }
  5294  func (f fastpathT) DecMapUint64BoolX(vp *map[uint64]bool, d *Decoder) {
  5295  	containerLen := d.mapStart(d.d.ReadMapStart())
  5296  	if containerLen == containerLenNil {
  5297  		*vp = nil
  5298  	} else {
  5299  		if *vp == nil {
  5300  			*vp = make(map[uint64]bool, decInferLen(containerLen, d.h.MaxInitLen, 9))
  5301  		}
  5302  		if containerLen != 0 {
  5303  			f.DecMapUint64BoolL(*vp, containerLen, d)
  5304  		}
  5305  		d.mapEnd()
  5306  	}
  5307  }
  5308  func (fastpathT) DecMapUint64BoolL(v map[uint64]bool, containerLen int, d *Decoder) {
  5309  	if v == nil {
  5310  		d.errorf("cannot decode into nil map[uint64]bool given stream length: %v", containerLen)
  5311  		return
  5312  	}
  5313  	var mk uint64
  5314  	var mv bool
  5315  	hasLen := containerLen > 0
  5316  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  5317  		d.mapElemKey()
  5318  		mk = d.d.DecodeUint64()
  5319  		d.mapElemValue()
  5320  		mv = d.d.DecodeBool()
  5321  		v[mk] = mv
  5322  	}
  5323  }
  5324  func (d *Decoder) fastpathDecMapIntIntfR(f *codecFnInfo, rv reflect.Value) {
  5325  	containerLen := d.mapStart(d.d.ReadMapStart())
  5326  	if rv.Kind() == reflect.Ptr {
  5327  		vp, _ := rv2i(rv).(*map[int]interface{})
  5328  		if *vp == nil {
  5329  			*vp = make(map[int]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 24))
  5330  		}
  5331  		if containerLen != 0 {
  5332  			fastpathTV.DecMapIntIntfL(*vp, containerLen, d)
  5333  		}
  5334  	} else if containerLen != 0 {
  5335  		fastpathTV.DecMapIntIntfL(rv2i(rv).(map[int]interface{}), containerLen, d)
  5336  	}
  5337  	d.mapEnd()
  5338  }
  5339  func (f fastpathT) DecMapIntIntfX(vp *map[int]interface{}, d *Decoder) {
  5340  	containerLen := d.mapStart(d.d.ReadMapStart())
  5341  	if containerLen == containerLenNil {
  5342  		*vp = nil
  5343  	} else {
  5344  		if *vp == nil {
  5345  			*vp = make(map[int]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 24))
  5346  		}
  5347  		if containerLen != 0 {
  5348  			f.DecMapIntIntfL(*vp, containerLen, d)
  5349  		}
  5350  		d.mapEnd()
  5351  	}
  5352  }
  5353  func (fastpathT) DecMapIntIntfL(v map[int]interface{}, containerLen int, d *Decoder) {
  5354  	if v == nil {
  5355  		d.errorf("cannot decode into nil map[int]interface{} given stream length: %v", containerLen)
  5356  		return
  5357  	}
  5358  	mapGet := v != nil && !d.h.MapValueReset && !d.h.InterfaceReset
  5359  	var mk int
  5360  	var mv interface{}
  5361  	hasLen := containerLen > 0
  5362  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  5363  		d.mapElemKey()
  5364  		mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
  5365  		d.mapElemValue()
  5366  		if mapGet {
  5367  			mv = v[mk]
  5368  		} else {
  5369  			mv = nil
  5370  		}
  5371  		d.decode(&mv)
  5372  		v[mk] = mv
  5373  	}
  5374  }
  5375  func (d *Decoder) fastpathDecMapIntStringR(f *codecFnInfo, rv reflect.Value) {
  5376  	containerLen := d.mapStart(d.d.ReadMapStart())
  5377  	if rv.Kind() == reflect.Ptr {
  5378  		vp, _ := rv2i(rv).(*map[int]string)
  5379  		if *vp == nil {
  5380  			*vp = make(map[int]string, decInferLen(containerLen, d.h.MaxInitLen, 24))
  5381  		}
  5382  		if containerLen != 0 {
  5383  			fastpathTV.DecMapIntStringL(*vp, containerLen, d)
  5384  		}
  5385  	} else if containerLen != 0 {
  5386  		fastpathTV.DecMapIntStringL(rv2i(rv).(map[int]string), containerLen, d)
  5387  	}
  5388  	d.mapEnd()
  5389  }
  5390  func (f fastpathT) DecMapIntStringX(vp *map[int]string, d *Decoder) {
  5391  	containerLen := d.mapStart(d.d.ReadMapStart())
  5392  	if containerLen == containerLenNil {
  5393  		*vp = nil
  5394  	} else {
  5395  		if *vp == nil {
  5396  			*vp = make(map[int]string, decInferLen(containerLen, d.h.MaxInitLen, 24))
  5397  		}
  5398  		if containerLen != 0 {
  5399  			f.DecMapIntStringL(*vp, containerLen, d)
  5400  		}
  5401  		d.mapEnd()
  5402  	}
  5403  }
  5404  func (fastpathT) DecMapIntStringL(v map[int]string, containerLen int, d *Decoder) {
  5405  	if v == nil {
  5406  		d.errorf("cannot decode into nil map[int]string given stream length: %v", containerLen)
  5407  		return
  5408  	}
  5409  	var mk int
  5410  	var mv string
  5411  	hasLen := containerLen > 0
  5412  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  5413  		d.mapElemKey()
  5414  		mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
  5415  		d.mapElemValue()
  5416  		mv = d.stringZC(d.d.DecodeStringAsBytes())
  5417  		v[mk] = mv
  5418  	}
  5419  }
  5420  func (d *Decoder) fastpathDecMapIntBytesR(f *codecFnInfo, rv reflect.Value) {
  5421  	containerLen := d.mapStart(d.d.ReadMapStart())
  5422  	if rv.Kind() == reflect.Ptr {
  5423  		vp, _ := rv2i(rv).(*map[int][]byte)
  5424  		if *vp == nil {
  5425  			*vp = make(map[int][]byte, decInferLen(containerLen, d.h.MaxInitLen, 32))
  5426  		}
  5427  		if containerLen != 0 {
  5428  			fastpathTV.DecMapIntBytesL(*vp, containerLen, d)
  5429  		}
  5430  	} else if containerLen != 0 {
  5431  		fastpathTV.DecMapIntBytesL(rv2i(rv).(map[int][]byte), containerLen, d)
  5432  	}
  5433  	d.mapEnd()
  5434  }
  5435  func (f fastpathT) DecMapIntBytesX(vp *map[int][]byte, d *Decoder) {
  5436  	containerLen := d.mapStart(d.d.ReadMapStart())
  5437  	if containerLen == containerLenNil {
  5438  		*vp = nil
  5439  	} else {
  5440  		if *vp == nil {
  5441  			*vp = make(map[int][]byte, decInferLen(containerLen, d.h.MaxInitLen, 32))
  5442  		}
  5443  		if containerLen != 0 {
  5444  			f.DecMapIntBytesL(*vp, containerLen, d)
  5445  		}
  5446  		d.mapEnd()
  5447  	}
  5448  }
  5449  func (fastpathT) DecMapIntBytesL(v map[int][]byte, containerLen int, d *Decoder) {
  5450  	if v == nil {
  5451  		d.errorf("cannot decode into nil map[int][]byte given stream length: %v", containerLen)
  5452  		return
  5453  	}
  5454  	mapGet := v != nil && !d.h.MapValueReset
  5455  	var mk int
  5456  	var mv []byte
  5457  	hasLen := containerLen > 0
  5458  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  5459  		d.mapElemKey()
  5460  		mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
  5461  		d.mapElemValue()
  5462  		if mapGet {
  5463  			mv = v[mk]
  5464  		} else {
  5465  			mv = nil
  5466  		}
  5467  		mv = d.decodeBytesInto(mv)
  5468  		v[mk] = mv
  5469  	}
  5470  }
  5471  func (d *Decoder) fastpathDecMapIntUint8R(f *codecFnInfo, rv reflect.Value) {
  5472  	containerLen := d.mapStart(d.d.ReadMapStart())
  5473  	if rv.Kind() == reflect.Ptr {
  5474  		vp, _ := rv2i(rv).(*map[int]uint8)
  5475  		if *vp == nil {
  5476  			*vp = make(map[int]uint8, decInferLen(containerLen, d.h.MaxInitLen, 9))
  5477  		}
  5478  		if containerLen != 0 {
  5479  			fastpathTV.DecMapIntUint8L(*vp, containerLen, d)
  5480  		}
  5481  	} else if containerLen != 0 {
  5482  		fastpathTV.DecMapIntUint8L(rv2i(rv).(map[int]uint8), containerLen, d)
  5483  	}
  5484  	d.mapEnd()
  5485  }
  5486  func (f fastpathT) DecMapIntUint8X(vp *map[int]uint8, d *Decoder) {
  5487  	containerLen := d.mapStart(d.d.ReadMapStart())
  5488  	if containerLen == containerLenNil {
  5489  		*vp = nil
  5490  	} else {
  5491  		if *vp == nil {
  5492  			*vp = make(map[int]uint8, decInferLen(containerLen, d.h.MaxInitLen, 9))
  5493  		}
  5494  		if containerLen != 0 {
  5495  			f.DecMapIntUint8L(*vp, containerLen, d)
  5496  		}
  5497  		d.mapEnd()
  5498  	}
  5499  }
  5500  func (fastpathT) DecMapIntUint8L(v map[int]uint8, containerLen int, d *Decoder) {
  5501  	if v == nil {
  5502  		d.errorf("cannot decode into nil map[int]uint8 given stream length: %v", containerLen)
  5503  		return
  5504  	}
  5505  	var mk int
  5506  	var mv uint8
  5507  	hasLen := containerLen > 0
  5508  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  5509  		d.mapElemKey()
  5510  		mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
  5511  		d.mapElemValue()
  5512  		mv = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
  5513  		v[mk] = mv
  5514  	}
  5515  }
  5516  func (d *Decoder) fastpathDecMapIntUint64R(f *codecFnInfo, rv reflect.Value) {
  5517  	containerLen := d.mapStart(d.d.ReadMapStart())
  5518  	if rv.Kind() == reflect.Ptr {
  5519  		vp, _ := rv2i(rv).(*map[int]uint64)
  5520  		if *vp == nil {
  5521  			*vp = make(map[int]uint64, decInferLen(containerLen, d.h.MaxInitLen, 16))
  5522  		}
  5523  		if containerLen != 0 {
  5524  			fastpathTV.DecMapIntUint64L(*vp, containerLen, d)
  5525  		}
  5526  	} else if containerLen != 0 {
  5527  		fastpathTV.DecMapIntUint64L(rv2i(rv).(map[int]uint64), containerLen, d)
  5528  	}
  5529  	d.mapEnd()
  5530  }
  5531  func (f fastpathT) DecMapIntUint64X(vp *map[int]uint64, d *Decoder) {
  5532  	containerLen := d.mapStart(d.d.ReadMapStart())
  5533  	if containerLen == containerLenNil {
  5534  		*vp = nil
  5535  	} else {
  5536  		if *vp == nil {
  5537  			*vp = make(map[int]uint64, decInferLen(containerLen, d.h.MaxInitLen, 16))
  5538  		}
  5539  		if containerLen != 0 {
  5540  			f.DecMapIntUint64L(*vp, containerLen, d)
  5541  		}
  5542  		d.mapEnd()
  5543  	}
  5544  }
  5545  func (fastpathT) DecMapIntUint64L(v map[int]uint64, containerLen int, d *Decoder) {
  5546  	if v == nil {
  5547  		d.errorf("cannot decode into nil map[int]uint64 given stream length: %v", containerLen)
  5548  		return
  5549  	}
  5550  	var mk int
  5551  	var mv uint64
  5552  	hasLen := containerLen > 0
  5553  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  5554  		d.mapElemKey()
  5555  		mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
  5556  		d.mapElemValue()
  5557  		mv = d.d.DecodeUint64()
  5558  		v[mk] = mv
  5559  	}
  5560  }
  5561  func (d *Decoder) fastpathDecMapIntIntR(f *codecFnInfo, rv reflect.Value) {
  5562  	containerLen := d.mapStart(d.d.ReadMapStart())
  5563  	if rv.Kind() == reflect.Ptr {
  5564  		vp, _ := rv2i(rv).(*map[int]int)
  5565  		if *vp == nil {
  5566  			*vp = make(map[int]int, decInferLen(containerLen, d.h.MaxInitLen, 16))
  5567  		}
  5568  		if containerLen != 0 {
  5569  			fastpathTV.DecMapIntIntL(*vp, containerLen, d)
  5570  		}
  5571  	} else if containerLen != 0 {
  5572  		fastpathTV.DecMapIntIntL(rv2i(rv).(map[int]int), containerLen, d)
  5573  	}
  5574  	d.mapEnd()
  5575  }
  5576  func (f fastpathT) DecMapIntIntX(vp *map[int]int, d *Decoder) {
  5577  	containerLen := d.mapStart(d.d.ReadMapStart())
  5578  	if containerLen == containerLenNil {
  5579  		*vp = nil
  5580  	} else {
  5581  		if *vp == nil {
  5582  			*vp = make(map[int]int, decInferLen(containerLen, d.h.MaxInitLen, 16))
  5583  		}
  5584  		if containerLen != 0 {
  5585  			f.DecMapIntIntL(*vp, containerLen, d)
  5586  		}
  5587  		d.mapEnd()
  5588  	}
  5589  }
  5590  func (fastpathT) DecMapIntIntL(v map[int]int, containerLen int, d *Decoder) {
  5591  	if v == nil {
  5592  		d.errorf("cannot decode into nil map[int]int given stream length: %v", containerLen)
  5593  		return
  5594  	}
  5595  	var mk int
  5596  	var mv int
  5597  	hasLen := containerLen > 0
  5598  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  5599  		d.mapElemKey()
  5600  		mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
  5601  		d.mapElemValue()
  5602  		mv = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
  5603  		v[mk] = mv
  5604  	}
  5605  }
  5606  func (d *Decoder) fastpathDecMapIntInt32R(f *codecFnInfo, rv reflect.Value) {
  5607  	containerLen := d.mapStart(d.d.ReadMapStart())
  5608  	if rv.Kind() == reflect.Ptr {
  5609  		vp, _ := rv2i(rv).(*map[int]int32)
  5610  		if *vp == nil {
  5611  			*vp = make(map[int]int32, decInferLen(containerLen, d.h.MaxInitLen, 12))
  5612  		}
  5613  		if containerLen != 0 {
  5614  			fastpathTV.DecMapIntInt32L(*vp, containerLen, d)
  5615  		}
  5616  	} else if containerLen != 0 {
  5617  		fastpathTV.DecMapIntInt32L(rv2i(rv).(map[int]int32), containerLen, d)
  5618  	}
  5619  	d.mapEnd()
  5620  }
  5621  func (f fastpathT) DecMapIntInt32X(vp *map[int]int32, d *Decoder) {
  5622  	containerLen := d.mapStart(d.d.ReadMapStart())
  5623  	if containerLen == containerLenNil {
  5624  		*vp = nil
  5625  	} else {
  5626  		if *vp == nil {
  5627  			*vp = make(map[int]int32, decInferLen(containerLen, d.h.MaxInitLen, 12))
  5628  		}
  5629  		if containerLen != 0 {
  5630  			f.DecMapIntInt32L(*vp, containerLen, d)
  5631  		}
  5632  		d.mapEnd()
  5633  	}
  5634  }
  5635  func (fastpathT) DecMapIntInt32L(v map[int]int32, containerLen int, d *Decoder) {
  5636  	if v == nil {
  5637  		d.errorf("cannot decode into nil map[int]int32 given stream length: %v", containerLen)
  5638  		return
  5639  	}
  5640  	var mk int
  5641  	var mv int32
  5642  	hasLen := containerLen > 0
  5643  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  5644  		d.mapElemKey()
  5645  		mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
  5646  		d.mapElemValue()
  5647  		mv = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
  5648  		v[mk] = mv
  5649  	}
  5650  }
  5651  func (d *Decoder) fastpathDecMapIntFloat64R(f *codecFnInfo, rv reflect.Value) {
  5652  	containerLen := d.mapStart(d.d.ReadMapStart())
  5653  	if rv.Kind() == reflect.Ptr {
  5654  		vp, _ := rv2i(rv).(*map[int]float64)
  5655  		if *vp == nil {
  5656  			*vp = make(map[int]float64, decInferLen(containerLen, d.h.MaxInitLen, 16))
  5657  		}
  5658  		if containerLen != 0 {
  5659  			fastpathTV.DecMapIntFloat64L(*vp, containerLen, d)
  5660  		}
  5661  	} else if containerLen != 0 {
  5662  		fastpathTV.DecMapIntFloat64L(rv2i(rv).(map[int]float64), containerLen, d)
  5663  	}
  5664  	d.mapEnd()
  5665  }
  5666  func (f fastpathT) DecMapIntFloat64X(vp *map[int]float64, d *Decoder) {
  5667  	containerLen := d.mapStart(d.d.ReadMapStart())
  5668  	if containerLen == containerLenNil {
  5669  		*vp = nil
  5670  	} else {
  5671  		if *vp == nil {
  5672  			*vp = make(map[int]float64, decInferLen(containerLen, d.h.MaxInitLen, 16))
  5673  		}
  5674  		if containerLen != 0 {
  5675  			f.DecMapIntFloat64L(*vp, containerLen, d)
  5676  		}
  5677  		d.mapEnd()
  5678  	}
  5679  }
  5680  func (fastpathT) DecMapIntFloat64L(v map[int]float64, containerLen int, d *Decoder) {
  5681  	if v == nil {
  5682  		d.errorf("cannot decode into nil map[int]float64 given stream length: %v", containerLen)
  5683  		return
  5684  	}
  5685  	var mk int
  5686  	var mv float64
  5687  	hasLen := containerLen > 0
  5688  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  5689  		d.mapElemKey()
  5690  		mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
  5691  		d.mapElemValue()
  5692  		mv = d.d.DecodeFloat64()
  5693  		v[mk] = mv
  5694  	}
  5695  }
  5696  func (d *Decoder) fastpathDecMapIntBoolR(f *codecFnInfo, rv reflect.Value) {
  5697  	containerLen := d.mapStart(d.d.ReadMapStart())
  5698  	if rv.Kind() == reflect.Ptr {
  5699  		vp, _ := rv2i(rv).(*map[int]bool)
  5700  		if *vp == nil {
  5701  			*vp = make(map[int]bool, decInferLen(containerLen, d.h.MaxInitLen, 9))
  5702  		}
  5703  		if containerLen != 0 {
  5704  			fastpathTV.DecMapIntBoolL(*vp, containerLen, d)
  5705  		}
  5706  	} else if containerLen != 0 {
  5707  		fastpathTV.DecMapIntBoolL(rv2i(rv).(map[int]bool), containerLen, d)
  5708  	}
  5709  	d.mapEnd()
  5710  }
  5711  func (f fastpathT) DecMapIntBoolX(vp *map[int]bool, d *Decoder) {
  5712  	containerLen := d.mapStart(d.d.ReadMapStart())
  5713  	if containerLen == containerLenNil {
  5714  		*vp = nil
  5715  	} else {
  5716  		if *vp == nil {
  5717  			*vp = make(map[int]bool, decInferLen(containerLen, d.h.MaxInitLen, 9))
  5718  		}
  5719  		if containerLen != 0 {
  5720  			f.DecMapIntBoolL(*vp, containerLen, d)
  5721  		}
  5722  		d.mapEnd()
  5723  	}
  5724  }
  5725  func (fastpathT) DecMapIntBoolL(v map[int]bool, containerLen int, d *Decoder) {
  5726  	if v == nil {
  5727  		d.errorf("cannot decode into nil map[int]bool given stream length: %v", containerLen)
  5728  		return
  5729  	}
  5730  	var mk int
  5731  	var mv bool
  5732  	hasLen := containerLen > 0
  5733  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  5734  		d.mapElemKey()
  5735  		mk = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
  5736  		d.mapElemValue()
  5737  		mv = d.d.DecodeBool()
  5738  		v[mk] = mv
  5739  	}
  5740  }
  5741  func (d *Decoder) fastpathDecMapInt32IntfR(f *codecFnInfo, rv reflect.Value) {
  5742  	containerLen := d.mapStart(d.d.ReadMapStart())
  5743  	if rv.Kind() == reflect.Ptr {
  5744  		vp, _ := rv2i(rv).(*map[int32]interface{})
  5745  		if *vp == nil {
  5746  			*vp = make(map[int32]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 20))
  5747  		}
  5748  		if containerLen != 0 {
  5749  			fastpathTV.DecMapInt32IntfL(*vp, containerLen, d)
  5750  		}
  5751  	} else if containerLen != 0 {
  5752  		fastpathTV.DecMapInt32IntfL(rv2i(rv).(map[int32]interface{}), containerLen, d)
  5753  	}
  5754  	d.mapEnd()
  5755  }
  5756  func (f fastpathT) DecMapInt32IntfX(vp *map[int32]interface{}, d *Decoder) {
  5757  	containerLen := d.mapStart(d.d.ReadMapStart())
  5758  	if containerLen == containerLenNil {
  5759  		*vp = nil
  5760  	} else {
  5761  		if *vp == nil {
  5762  			*vp = make(map[int32]interface{}, decInferLen(containerLen, d.h.MaxInitLen, 20))
  5763  		}
  5764  		if containerLen != 0 {
  5765  			f.DecMapInt32IntfL(*vp, containerLen, d)
  5766  		}
  5767  		d.mapEnd()
  5768  	}
  5769  }
  5770  func (fastpathT) DecMapInt32IntfL(v map[int32]interface{}, containerLen int, d *Decoder) {
  5771  	if v == nil {
  5772  		d.errorf("cannot decode into nil map[int32]interface{} given stream length: %v", containerLen)
  5773  		return
  5774  	}
  5775  	mapGet := v != nil && !d.h.MapValueReset && !d.h.InterfaceReset
  5776  	var mk int32
  5777  	var mv interface{}
  5778  	hasLen := containerLen > 0
  5779  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  5780  		d.mapElemKey()
  5781  		mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
  5782  		d.mapElemValue()
  5783  		if mapGet {
  5784  			mv = v[mk]
  5785  		} else {
  5786  			mv = nil
  5787  		}
  5788  		d.decode(&mv)
  5789  		v[mk] = mv
  5790  	}
  5791  }
  5792  func (d *Decoder) fastpathDecMapInt32StringR(f *codecFnInfo, rv reflect.Value) {
  5793  	containerLen := d.mapStart(d.d.ReadMapStart())
  5794  	if rv.Kind() == reflect.Ptr {
  5795  		vp, _ := rv2i(rv).(*map[int32]string)
  5796  		if *vp == nil {
  5797  			*vp = make(map[int32]string, decInferLen(containerLen, d.h.MaxInitLen, 20))
  5798  		}
  5799  		if containerLen != 0 {
  5800  			fastpathTV.DecMapInt32StringL(*vp, containerLen, d)
  5801  		}
  5802  	} else if containerLen != 0 {
  5803  		fastpathTV.DecMapInt32StringL(rv2i(rv).(map[int32]string), containerLen, d)
  5804  	}
  5805  	d.mapEnd()
  5806  }
  5807  func (f fastpathT) DecMapInt32StringX(vp *map[int32]string, d *Decoder) {
  5808  	containerLen := d.mapStart(d.d.ReadMapStart())
  5809  	if containerLen == containerLenNil {
  5810  		*vp = nil
  5811  	} else {
  5812  		if *vp == nil {
  5813  			*vp = make(map[int32]string, decInferLen(containerLen, d.h.MaxInitLen, 20))
  5814  		}
  5815  		if containerLen != 0 {
  5816  			f.DecMapInt32StringL(*vp, containerLen, d)
  5817  		}
  5818  		d.mapEnd()
  5819  	}
  5820  }
  5821  func (fastpathT) DecMapInt32StringL(v map[int32]string, containerLen int, d *Decoder) {
  5822  	if v == nil {
  5823  		d.errorf("cannot decode into nil map[int32]string given stream length: %v", containerLen)
  5824  		return
  5825  	}
  5826  	var mk int32
  5827  	var mv string
  5828  	hasLen := containerLen > 0
  5829  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  5830  		d.mapElemKey()
  5831  		mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
  5832  		d.mapElemValue()
  5833  		mv = d.stringZC(d.d.DecodeStringAsBytes())
  5834  		v[mk] = mv
  5835  	}
  5836  }
  5837  func (d *Decoder) fastpathDecMapInt32BytesR(f *codecFnInfo, rv reflect.Value) {
  5838  	containerLen := d.mapStart(d.d.ReadMapStart())
  5839  	if rv.Kind() == reflect.Ptr {
  5840  		vp, _ := rv2i(rv).(*map[int32][]byte)
  5841  		if *vp == nil {
  5842  			*vp = make(map[int32][]byte, decInferLen(containerLen, d.h.MaxInitLen, 28))
  5843  		}
  5844  		if containerLen != 0 {
  5845  			fastpathTV.DecMapInt32BytesL(*vp, containerLen, d)
  5846  		}
  5847  	} else if containerLen != 0 {
  5848  		fastpathTV.DecMapInt32BytesL(rv2i(rv).(map[int32][]byte), containerLen, d)
  5849  	}
  5850  	d.mapEnd()
  5851  }
  5852  func (f fastpathT) DecMapInt32BytesX(vp *map[int32][]byte, d *Decoder) {
  5853  	containerLen := d.mapStart(d.d.ReadMapStart())
  5854  	if containerLen == containerLenNil {
  5855  		*vp = nil
  5856  	} else {
  5857  		if *vp == nil {
  5858  			*vp = make(map[int32][]byte, decInferLen(containerLen, d.h.MaxInitLen, 28))
  5859  		}
  5860  		if containerLen != 0 {
  5861  			f.DecMapInt32BytesL(*vp, containerLen, d)
  5862  		}
  5863  		d.mapEnd()
  5864  	}
  5865  }
  5866  func (fastpathT) DecMapInt32BytesL(v map[int32][]byte, containerLen int, d *Decoder) {
  5867  	if v == nil {
  5868  		d.errorf("cannot decode into nil map[int32][]byte given stream length: %v", containerLen)
  5869  		return
  5870  	}
  5871  	mapGet := v != nil && !d.h.MapValueReset
  5872  	var mk int32
  5873  	var mv []byte
  5874  	hasLen := containerLen > 0
  5875  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  5876  		d.mapElemKey()
  5877  		mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
  5878  		d.mapElemValue()
  5879  		if mapGet {
  5880  			mv = v[mk]
  5881  		} else {
  5882  			mv = nil
  5883  		}
  5884  		mv = d.decodeBytesInto(mv)
  5885  		v[mk] = mv
  5886  	}
  5887  }
  5888  func (d *Decoder) fastpathDecMapInt32Uint8R(f *codecFnInfo, rv reflect.Value) {
  5889  	containerLen := d.mapStart(d.d.ReadMapStart())
  5890  	if rv.Kind() == reflect.Ptr {
  5891  		vp, _ := rv2i(rv).(*map[int32]uint8)
  5892  		if *vp == nil {
  5893  			*vp = make(map[int32]uint8, decInferLen(containerLen, d.h.MaxInitLen, 5))
  5894  		}
  5895  		if containerLen != 0 {
  5896  			fastpathTV.DecMapInt32Uint8L(*vp, containerLen, d)
  5897  		}
  5898  	} else if containerLen != 0 {
  5899  		fastpathTV.DecMapInt32Uint8L(rv2i(rv).(map[int32]uint8), containerLen, d)
  5900  	}
  5901  	d.mapEnd()
  5902  }
  5903  func (f fastpathT) DecMapInt32Uint8X(vp *map[int32]uint8, d *Decoder) {
  5904  	containerLen := d.mapStart(d.d.ReadMapStart())
  5905  	if containerLen == containerLenNil {
  5906  		*vp = nil
  5907  	} else {
  5908  		if *vp == nil {
  5909  			*vp = make(map[int32]uint8, decInferLen(containerLen, d.h.MaxInitLen, 5))
  5910  		}
  5911  		if containerLen != 0 {
  5912  			f.DecMapInt32Uint8L(*vp, containerLen, d)
  5913  		}
  5914  		d.mapEnd()
  5915  	}
  5916  }
  5917  func (fastpathT) DecMapInt32Uint8L(v map[int32]uint8, containerLen int, d *Decoder) {
  5918  	if v == nil {
  5919  		d.errorf("cannot decode into nil map[int32]uint8 given stream length: %v", containerLen)
  5920  		return
  5921  	}
  5922  	var mk int32
  5923  	var mv uint8
  5924  	hasLen := containerLen > 0
  5925  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  5926  		d.mapElemKey()
  5927  		mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
  5928  		d.mapElemValue()
  5929  		mv = uint8(chkOvf.UintV(d.d.DecodeUint64(), 8))
  5930  		v[mk] = mv
  5931  	}
  5932  }
  5933  func (d *Decoder) fastpathDecMapInt32Uint64R(f *codecFnInfo, rv reflect.Value) {
  5934  	containerLen := d.mapStart(d.d.ReadMapStart())
  5935  	if rv.Kind() == reflect.Ptr {
  5936  		vp, _ := rv2i(rv).(*map[int32]uint64)
  5937  		if *vp == nil {
  5938  			*vp = make(map[int32]uint64, decInferLen(containerLen, d.h.MaxInitLen, 12))
  5939  		}
  5940  		if containerLen != 0 {
  5941  			fastpathTV.DecMapInt32Uint64L(*vp, containerLen, d)
  5942  		}
  5943  	} else if containerLen != 0 {
  5944  		fastpathTV.DecMapInt32Uint64L(rv2i(rv).(map[int32]uint64), containerLen, d)
  5945  	}
  5946  	d.mapEnd()
  5947  }
  5948  func (f fastpathT) DecMapInt32Uint64X(vp *map[int32]uint64, d *Decoder) {
  5949  	containerLen := d.mapStart(d.d.ReadMapStart())
  5950  	if containerLen == containerLenNil {
  5951  		*vp = nil
  5952  	} else {
  5953  		if *vp == nil {
  5954  			*vp = make(map[int32]uint64, decInferLen(containerLen, d.h.MaxInitLen, 12))
  5955  		}
  5956  		if containerLen != 0 {
  5957  			f.DecMapInt32Uint64L(*vp, containerLen, d)
  5958  		}
  5959  		d.mapEnd()
  5960  	}
  5961  }
  5962  func (fastpathT) DecMapInt32Uint64L(v map[int32]uint64, containerLen int, d *Decoder) {
  5963  	if v == nil {
  5964  		d.errorf("cannot decode into nil map[int32]uint64 given stream length: %v", containerLen)
  5965  		return
  5966  	}
  5967  	var mk int32
  5968  	var mv uint64
  5969  	hasLen := containerLen > 0
  5970  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  5971  		d.mapElemKey()
  5972  		mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
  5973  		d.mapElemValue()
  5974  		mv = d.d.DecodeUint64()
  5975  		v[mk] = mv
  5976  	}
  5977  }
  5978  func (d *Decoder) fastpathDecMapInt32IntR(f *codecFnInfo, rv reflect.Value) {
  5979  	containerLen := d.mapStart(d.d.ReadMapStart())
  5980  	if rv.Kind() == reflect.Ptr {
  5981  		vp, _ := rv2i(rv).(*map[int32]int)
  5982  		if *vp == nil {
  5983  			*vp = make(map[int32]int, decInferLen(containerLen, d.h.MaxInitLen, 12))
  5984  		}
  5985  		if containerLen != 0 {
  5986  			fastpathTV.DecMapInt32IntL(*vp, containerLen, d)
  5987  		}
  5988  	} else if containerLen != 0 {
  5989  		fastpathTV.DecMapInt32IntL(rv2i(rv).(map[int32]int), containerLen, d)
  5990  	}
  5991  	d.mapEnd()
  5992  }
  5993  func (f fastpathT) DecMapInt32IntX(vp *map[int32]int, d *Decoder) {
  5994  	containerLen := d.mapStart(d.d.ReadMapStart())
  5995  	if containerLen == containerLenNil {
  5996  		*vp = nil
  5997  	} else {
  5998  		if *vp == nil {
  5999  			*vp = make(map[int32]int, decInferLen(containerLen, d.h.MaxInitLen, 12))
  6000  		}
  6001  		if containerLen != 0 {
  6002  			f.DecMapInt32IntL(*vp, containerLen, d)
  6003  		}
  6004  		d.mapEnd()
  6005  	}
  6006  }
  6007  func (fastpathT) DecMapInt32IntL(v map[int32]int, containerLen int, d *Decoder) {
  6008  	if v == nil {
  6009  		d.errorf("cannot decode into nil map[int32]int given stream length: %v", containerLen)
  6010  		return
  6011  	}
  6012  	var mk int32
  6013  	var mv int
  6014  	hasLen := containerLen > 0
  6015  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  6016  		d.mapElemKey()
  6017  		mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
  6018  		d.mapElemValue()
  6019  		mv = int(chkOvf.IntV(d.d.DecodeInt64(), intBitsize))
  6020  		v[mk] = mv
  6021  	}
  6022  }
  6023  func (d *Decoder) fastpathDecMapInt32Int32R(f *codecFnInfo, rv reflect.Value) {
  6024  	containerLen := d.mapStart(d.d.ReadMapStart())
  6025  	if rv.Kind() == reflect.Ptr {
  6026  		vp, _ := rv2i(rv).(*map[int32]int32)
  6027  		if *vp == nil {
  6028  			*vp = make(map[int32]int32, decInferLen(containerLen, d.h.MaxInitLen, 8))
  6029  		}
  6030  		if containerLen != 0 {
  6031  			fastpathTV.DecMapInt32Int32L(*vp, containerLen, d)
  6032  		}
  6033  	} else if containerLen != 0 {
  6034  		fastpathTV.DecMapInt32Int32L(rv2i(rv).(map[int32]int32), containerLen, d)
  6035  	}
  6036  	d.mapEnd()
  6037  }
  6038  func (f fastpathT) DecMapInt32Int32X(vp *map[int32]int32, d *Decoder) {
  6039  	containerLen := d.mapStart(d.d.ReadMapStart())
  6040  	if containerLen == containerLenNil {
  6041  		*vp = nil
  6042  	} else {
  6043  		if *vp == nil {
  6044  			*vp = make(map[int32]int32, decInferLen(containerLen, d.h.MaxInitLen, 8))
  6045  		}
  6046  		if containerLen != 0 {
  6047  			f.DecMapInt32Int32L(*vp, containerLen, d)
  6048  		}
  6049  		d.mapEnd()
  6050  	}
  6051  }
  6052  func (fastpathT) DecMapInt32Int32L(v map[int32]int32, containerLen int, d *Decoder) {
  6053  	if v == nil {
  6054  		d.errorf("cannot decode into nil map[int32]int32 given stream length: %v", containerLen)
  6055  		return
  6056  	}
  6057  	var mk int32
  6058  	var mv int32
  6059  	hasLen := containerLen > 0
  6060  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  6061  		d.mapElemKey()
  6062  		mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
  6063  		d.mapElemValue()
  6064  		mv = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
  6065  		v[mk] = mv
  6066  	}
  6067  }
  6068  func (d *Decoder) fastpathDecMapInt32Float64R(f *codecFnInfo, rv reflect.Value) {
  6069  	containerLen := d.mapStart(d.d.ReadMapStart())
  6070  	if rv.Kind() == reflect.Ptr {
  6071  		vp, _ := rv2i(rv).(*map[int32]float64)
  6072  		if *vp == nil {
  6073  			*vp = make(map[int32]float64, decInferLen(containerLen, d.h.MaxInitLen, 12))
  6074  		}
  6075  		if containerLen != 0 {
  6076  			fastpathTV.DecMapInt32Float64L(*vp, containerLen, d)
  6077  		}
  6078  	} else if containerLen != 0 {
  6079  		fastpathTV.DecMapInt32Float64L(rv2i(rv).(map[int32]float64), containerLen, d)
  6080  	}
  6081  	d.mapEnd()
  6082  }
  6083  func (f fastpathT) DecMapInt32Float64X(vp *map[int32]float64, d *Decoder) {
  6084  	containerLen := d.mapStart(d.d.ReadMapStart())
  6085  	if containerLen == containerLenNil {
  6086  		*vp = nil
  6087  	} else {
  6088  		if *vp == nil {
  6089  			*vp = make(map[int32]float64, decInferLen(containerLen, d.h.MaxInitLen, 12))
  6090  		}
  6091  		if containerLen != 0 {
  6092  			f.DecMapInt32Float64L(*vp, containerLen, d)
  6093  		}
  6094  		d.mapEnd()
  6095  	}
  6096  }
  6097  func (fastpathT) DecMapInt32Float64L(v map[int32]float64, containerLen int, d *Decoder) {
  6098  	if v == nil {
  6099  		d.errorf("cannot decode into nil map[int32]float64 given stream length: %v", containerLen)
  6100  		return
  6101  	}
  6102  	var mk int32
  6103  	var mv float64
  6104  	hasLen := containerLen > 0
  6105  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  6106  		d.mapElemKey()
  6107  		mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
  6108  		d.mapElemValue()
  6109  		mv = d.d.DecodeFloat64()
  6110  		v[mk] = mv
  6111  	}
  6112  }
  6113  func (d *Decoder) fastpathDecMapInt32BoolR(f *codecFnInfo, rv reflect.Value) {
  6114  	containerLen := d.mapStart(d.d.ReadMapStart())
  6115  	if rv.Kind() == reflect.Ptr {
  6116  		vp, _ := rv2i(rv).(*map[int32]bool)
  6117  		if *vp == nil {
  6118  			*vp = make(map[int32]bool, decInferLen(containerLen, d.h.MaxInitLen, 5))
  6119  		}
  6120  		if containerLen != 0 {
  6121  			fastpathTV.DecMapInt32BoolL(*vp, containerLen, d)
  6122  		}
  6123  	} else if containerLen != 0 {
  6124  		fastpathTV.DecMapInt32BoolL(rv2i(rv).(map[int32]bool), containerLen, d)
  6125  	}
  6126  	d.mapEnd()
  6127  }
  6128  func (f fastpathT) DecMapInt32BoolX(vp *map[int32]bool, d *Decoder) {
  6129  	containerLen := d.mapStart(d.d.ReadMapStart())
  6130  	if containerLen == containerLenNil {
  6131  		*vp = nil
  6132  	} else {
  6133  		if *vp == nil {
  6134  			*vp = make(map[int32]bool, decInferLen(containerLen, d.h.MaxInitLen, 5))
  6135  		}
  6136  		if containerLen != 0 {
  6137  			f.DecMapInt32BoolL(*vp, containerLen, d)
  6138  		}
  6139  		d.mapEnd()
  6140  	}
  6141  }
  6142  func (fastpathT) DecMapInt32BoolL(v map[int32]bool, containerLen int, d *Decoder) {
  6143  	if v == nil {
  6144  		d.errorf("cannot decode into nil map[int32]bool given stream length: %v", containerLen)
  6145  		return
  6146  	}
  6147  	var mk int32
  6148  	var mv bool
  6149  	hasLen := containerLen > 0
  6150  	for j := 0; (hasLen && j < containerLen) || !(hasLen || d.checkBreak()); j++ {
  6151  		d.mapElemKey()
  6152  		mk = int32(chkOvf.IntV(d.d.DecodeInt64(), 32))
  6153  		d.mapElemValue()
  6154  		mv = d.d.DecodeBool()
  6155  		v[mk] = mv
  6156  	}
  6157  }