gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

musl_windows_amd64.go (31549B)


      1 // Code generated by 'ccgo -D__environ=environ -export-externs X -hide __syscall0,__syscall1,__syscall2,__syscall3,__syscall4,__syscall5,__syscall6 -nostdinc -nostdlib -o ../musl_windows_amd64.go -pkgname libc -static-locals-prefix _s -Iarch\x86_64 -Iarch/generic -Iobj/src/internal -Isrc/include -Isrc/internal -Iobj/include -Iinclude copyright.c src/ctype/isalnum.c src/ctype/isalpha.c src/ctype/isdigit.c src/ctype/islower.c src/ctype/isprint.c src/ctype/isspace.c src/ctype/isxdigit.c src/env/putenv.c src/env/setenv.c src/env/unsetenv.c src/multibyte/wcrtomb.c src/multibyte/wcsrtombs.c src/multibyte/wcstombs.c src/stdlib/bsearch.c src/string/strchrnul.c src/string/strdup.c', DO NOT EDIT.
      2 
      3 package libc
      4 
      5 import (
      6 	"math"
      7 	"reflect"
      8 	"sync/atomic"
      9 	"unsafe"
     10 )
     11 
     12 var _ = math.Pi
     13 var _ reflect.Kind
     14 var _ atomic.Value
     15 var _ unsafe.Pointer
     16 
     17 // musl as a whole is licensed under the following standard MIT license:
     18 //
     19 // ----------------------------------------------------------------------
     20 // Copyright © 2005-2020 Rich Felker, et al.
     21 //
     22 // Permission is hereby granted, free of charge, to any person obtaining
     23 // a copy of this software and associated documentation files (the
     24 // "Software"), to deal in the Software without restriction, including
     25 // without limitation the rights to use, copy, modify, merge, publish,
     26 // distribute, sublicense, and/or sell copies of the Software, and to
     27 // permit persons to whom the Software is furnished to do so, subject to
     28 // the following conditions:
     29 //
     30 // The above copyright notice and this permission notice shall be
     31 // included in all copies or substantial portions of the Software.
     32 //
     33 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     34 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     35 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
     36 // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
     37 // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
     38 // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
     39 // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     40 // ----------------------------------------------------------------------
     41 //
     42 // Authors/contributors include:
     43 //
     44 // A. Wilcox
     45 // Ada Worcester
     46 // Alex Dowad
     47 // Alex Suykov
     48 // Alexander Monakov
     49 // Andre McCurdy
     50 // Andrew Kelley
     51 // Anthony G. Basile
     52 // Aric Belsito
     53 // Arvid Picciani
     54 // Bartosz Brachaczek
     55 // Benjamin Peterson
     56 // Bobby Bingham
     57 // Boris Brezillon
     58 // Brent Cook
     59 // Chris Spiegel
     60 // Clément Vasseur
     61 // Daniel Micay
     62 // Daniel Sabogal
     63 // Daurnimator
     64 // David Carlier
     65 // David Edelsohn
     66 // Denys Vlasenko
     67 // Dmitry Ivanov
     68 // Dmitry V. Levin
     69 // Drew DeVault
     70 // Emil Renner Berthing
     71 // Fangrui Song
     72 // Felix Fietkau
     73 // Felix Janda
     74 // Gianluca Anzolin
     75 // Hauke Mehrtens
     76 // He X
     77 // Hiltjo Posthuma
     78 // Isaac Dunham
     79 // Jaydeep Patil
     80 // Jens Gustedt
     81 // Jeremy Huntwork
     82 // Jo-Philipp Wich
     83 // Joakim Sindholt
     84 // John Spencer
     85 // Julien Ramseier
     86 // Justin Cormack
     87 // Kaarle Ritvanen
     88 // Khem Raj
     89 // Kylie McClain
     90 // Leah Neukirchen
     91 // Luca Barbato
     92 // Luka Perkov
     93 // M Farkas-Dyck (Strake)
     94 // Mahesh Bodapati
     95 // Markus Wichmann
     96 // Masanori Ogino
     97 // Michael Clark
     98 // Michael Forney
     99 // Mikhail Kremnyov
    100 // Natanael Copa
    101 // Nicholas J. Kain
    102 // orc
    103 // Pascal Cuoq
    104 // Patrick Oppenlander
    105 // Petr Hosek
    106 // Petr Skocik
    107 // Pierre Carrier
    108 // Reini Urban
    109 // Rich Felker
    110 // Richard Pennington
    111 // Ryan Fairfax
    112 // Samuel Holland
    113 // Segev Finer
    114 // Shiz
    115 // sin
    116 // Solar Designer
    117 // Stefan Kristiansson
    118 // Stefan O'Rear
    119 // Szabolcs Nagy
    120 // Timo Teräs
    121 // Trutz Behn
    122 // Valentin Ochs
    123 // Will Dietz
    124 // William Haddon
    125 // William Pitcock
    126 //
    127 // Portions of this software are derived from third-party works licensed
    128 // under terms compatible with the above MIT license:
    129 //
    130 // The TRE regular expression implementation (src/regex/reg* and
    131 // src/regex/tre*) is Copyright © 2001-2008 Ville Laurikari and licensed
    132 // under a 2-clause BSD license (license text in the source files). The
    133 // included version has been heavily modified by Rich Felker in 2012, in
    134 // the interests of size, simplicity, and namespace cleanliness.
    135 //
    136 // Much of the math library code (src/math/* and src/complex/*) is
    137 // Copyright © 1993,2004 Sun Microsystems or
    138 // Copyright © 2003-2011 David Schultz or
    139 // Copyright © 2003-2009 Steven G. Kargl or
    140 // Copyright © 2003-2009 Bruce D. Evans or
    141 // Copyright © 2008 Stephen L. Moshier or
    142 // Copyright © 2017-2018 Arm Limited
    143 // and labelled as such in comments in the individual source files. All
    144 // have been licensed under extremely permissive terms.
    145 //
    146 // The ARM memcpy code (src/string/arm/memcpy.S) is Copyright © 2008
    147 // The Android Open Source Project and is licensed under a two-clause BSD
    148 // license. It was taken from Bionic libc, used on Android.
    149 //
    150 // The AArch64 memcpy and memset code (src/string/aarch64/*) are
    151 // Copyright © 1999-2019, Arm Limited.
    152 //
    153 // The implementation of DES for crypt (src/crypt/crypt_des.c) is
    154 // Copyright © 1994 David Burren. It is licensed under a BSD license.
    155 //
    156 // The implementation of blowfish crypt (src/crypt/crypt_blowfish.c) was
    157 // originally written by Solar Designer and placed into the public
    158 // domain. The code also comes with a fallback permissive license for use
    159 // in jurisdictions that may not recognize the public domain.
    160 //
    161 // The smoothsort implementation (src/stdlib/qsort.c) is Copyright © 2011
    162 // Valentin Ochs and is licensed under an MIT-style license.
    163 //
    164 // The x86_64 port was written by Nicholas J. Kain and is licensed under
    165 // the standard MIT terms.
    166 //
    167 // The mips and microblaze ports were originally written by Richard
    168 // Pennington for use in the ellcc project. The original code was adapted
    169 // by Rich Felker for build system and code conventions during upstream
    170 // integration. It is licensed under the standard MIT terms.
    171 //
    172 // The mips64 port was contributed by Imagination Technologies and is
    173 // licensed under the standard MIT terms.
    174 //
    175 // The powerpc port was also originally written by Richard Pennington,
    176 // and later supplemented and integrated by John Spencer. It is licensed
    177 // under the standard MIT terms.
    178 //
    179 // All other files which have no copyright comments are original works
    180 // produced specifically for use as part of this library, written either
    181 // by Rich Felker, the main author of the library, or by one or more
    182 // contibutors listed above. Details on authorship of individual files
    183 // can be found in the git version control history of the project. The
    184 // omission of copyright and license comments in each file is in the
    185 // interest of source tree size.
    186 //
    187 // In addition, permission is hereby granted for all public header files
    188 // (include/* and arch/*/bits/*) and crt files intended to be linked into
    189 // applications (crt/*, ldso/dlstart.c, and arch/*/crt_arch.h) to omit
    190 // the copyright notice and permission notice otherwise required by the
    191 // license, and to use these files without any requirement of
    192 // attribution. These files include substantial contributions from:
    193 //
    194 // Bobby Bingham
    195 // John Spencer
    196 // Nicholas J. Kain
    197 // Rich Felker
    198 // Richard Pennington
    199 // Stefan Kristiansson
    200 // Szabolcs Nagy
    201 //
    202 // all of whom have explicitly granted such permission.
    203 //
    204 // This file previously contained text expressing a belief that most of
    205 // the files covered by the above exception were sufficiently trivial not
    206 // to be subject to copyright, resulting in confusion over whether it
    207 // negated the permissions granted in the license. In the spirit of
    208 // permissive licensing, and of not having licensing issues being an
    209 // obstacle to adoption, that text has been removed.
    210 const ( /* copyright.c:194:1: */
    211 	__musl__copyright__ = 0
    212 )
    213 
    214 const ( /* pthread_impl.h:58:1: */
    215 	DT_EXITING  = 0
    216 	DT_JOINABLE = 1
    217 	DT_DETACHED = 2
    218 )
    219 
    220 type ptrdiff_t = int64 /* <builtin>:3:26 */
    221 
    222 type size_t = uint64 /* <builtin>:9:23 */
    223 
    224 type wchar_t = uint16 /* <builtin>:15:24 */
    225 
    226 type va_list = uintptr /* <builtin>:50:27 */
    227 
    228 type __locale_struct = struct{ cat [6]uintptr } /* alltypes.h:343:9 */
    229 
    230 type locale_t = uintptr /* alltypes.h:343:32 */
    231 
    232 func Xisalnum(tls *TLS, c int32) int32 { /* isalnum.c:3:5: */
    233 	return Bool32(func() int32 {
    234 		if 0 != 0 {
    235 			return Xisalpha(tls, c)
    236 		}
    237 		return Bool32(uint32(c)|uint32(32)-uint32('a') < uint32(26))
    238 	}() != 0 || func() int32 {
    239 		if 0 != 0 {
    240 			return Xisdigit(tls, c)
    241 		}
    242 		return Bool32(uint32(c)-uint32('0') < uint32(10))
    243 	}() != 0)
    244 }
    245 
    246 func X__isalnum_l(tls *TLS, c int32, l locale_t) int32 { /* isalnum.c:8:5: */
    247 	return Xisalnum(tls, c)
    248 }
    249 
    250 func Xisalpha(tls *TLS, c int32) int32 { /* isalpha.c:4:5: */
    251 	return Bool32(uint32(c)|uint32(32)-uint32('a') < uint32(26))
    252 }
    253 
    254 func X__isalpha_l(tls *TLS, c int32, l locale_t) int32 { /* isalpha.c:9:5: */
    255 	return Xisalpha(tls, c)
    256 }
    257 
    258 func Xisdigit(tls *TLS, c int32) int32 { /* isdigit.c:4:5: */
    259 	return Bool32(uint32(c)-uint32('0') < uint32(10))
    260 }
    261 
    262 func X__isdigit_l(tls *TLS, c int32, l locale_t) int32 { /* isdigit.c:9:5: */
    263 	return Xisdigit(tls, c)
    264 }
    265 
    266 func Xislower(tls *TLS, c int32) int32 { /* islower.c:4:5: */
    267 	return Bool32(uint32(c)-uint32('a') < uint32(26))
    268 }
    269 
    270 func X__islower_l(tls *TLS, c int32, l locale_t) int32 { /* islower.c:9:5: */
    271 	return Xislower(tls, c)
    272 }
    273 
    274 func Xisprint(tls *TLS, c int32) int32 { /* isprint.c:4:5: */
    275 	return Bool32(uint32(c)-uint32(0x20) < uint32(0x5f))
    276 }
    277 
    278 func X__isprint_l(tls *TLS, c int32, l locale_t) int32 { /* isprint.c:9:5: */
    279 	return Xisprint(tls, c)
    280 }
    281 
    282 func Xisspace(tls *TLS, c int32) int32 { /* isspace.c:4:5: */
    283 	return Bool32(c == ' ' || uint32(c)-uint32('\t') < uint32(5))
    284 }
    285 
    286 func X__isspace_l(tls *TLS, c int32, l locale_t) int32 { /* isspace.c:9:5: */
    287 	return Xisspace(tls, c)
    288 }
    289 
    290 func Xisxdigit(tls *TLS, c int32) int32 { /* isxdigit.c:3:5: */
    291 	return Bool32(func() int32 {
    292 		if 0 != 0 {
    293 			return Xisdigit(tls, c)
    294 		}
    295 		return Bool32(uint32(c)-uint32('0') < uint32(10))
    296 	}() != 0 || uint32(c)|uint32(32)-uint32('a') < uint32(6))
    297 }
    298 
    299 func X__isxdigit_l(tls *TLS, c int32, l locale_t) int32 { /* isxdigit.c:8:5: */
    300 	return Xisxdigit(tls, c)
    301 }
    302 
    303 type div_t = struct {
    304 	quot int32
    305 	rem  int32
    306 } /* stdlib.h:62:35 */
    307 type ldiv_t = struct {
    308 	quot int32
    309 	rem  int32
    310 } /* stdlib.h:63:36 */
    311 type lldiv_t = struct {
    312 	quot int64
    313 	rem  int64
    314 } /* stdlib.h:64:41 */
    315 
    316 type ssize_t = int32 /* alltypes.h:65:15 */
    317 
    318 type intptr_t = int32 /* alltypes.h:70:15 */
    319 
    320 type off_t = int32 /* alltypes.h:162:16 */
    321 
    322 type pid_t = int32 /* alltypes.h:235:13 */
    323 
    324 type uid_t = uint32 /* alltypes.h:245:18 */
    325 
    326 type gid_t = uint32 /* alltypes.h:250:18 */
    327 
    328 type useconds_t = uint32 /* alltypes.h:260:18 */
    329 
    330 func X__putenv(tls *TLS, s uintptr, l size_t, r uintptr) int32 { /* putenv.c:8:5: */
    331 	var i size_t
    332 	var newenv uintptr
    333 	var tmp uintptr
    334 	//TODO for (char **e = __environ; *e; e++, i++)
    335 	var e uintptr
    336 	i = uint64(0)
    337 	if !(Environ() != 0) {
    338 		goto __1
    339 	}
    340 	//TODO for (char **e = __environ; *e; e++, i++)
    341 	e = Environ()
    342 __2:
    343 	if !(*(*uintptr)(unsafe.Pointer(e)) != 0) {
    344 		goto __4
    345 	}
    346 	if !!(Xstrncmp(tls, s, *(*uintptr)(unsafe.Pointer(e)), l+uint64(1)) != 0) {
    347 		goto __5
    348 	}
    349 	tmp = *(*uintptr)(unsafe.Pointer(e))
    350 	*(*uintptr)(unsafe.Pointer(e)) = s
    351 	X__env_rm_add(tls, tmp, r)
    352 	return 0
    353 __5:
    354 	;
    355 	goto __3
    356 __3:
    357 	e += 8
    358 	i++
    359 	goto __2
    360 	goto __4
    361 __4:
    362 	;
    363 __1:
    364 	;
    365 	if !(Environ() == _soldenv) {
    366 		goto __6
    367 	}
    368 	newenv = Xrealloc(tls, _soldenv, uint64(unsafe.Sizeof(uintptr(0)))*(i+uint64(2)))
    369 	if !!(newenv != 0) {
    370 		goto __8
    371 	}
    372 	goto oom
    373 __8:
    374 	;
    375 	goto __7
    376 __6:
    377 	newenv = Xmalloc(tls, uint64(unsafe.Sizeof(uintptr(0)))*(i+uint64(2)))
    378 	if !!(newenv != 0) {
    379 		goto __9
    380 	}
    381 	goto oom
    382 __9:
    383 	;
    384 	if !(i != 0) {
    385 		goto __10
    386 	}
    387 	Xmemcpy(tls, newenv, Environ(), uint64(unsafe.Sizeof(uintptr(0)))*i)
    388 __10:
    389 	;
    390 	Xfree(tls, _soldenv)
    391 __7:
    392 	;
    393 	*(*uintptr)(unsafe.Pointer(newenv + uintptr(i)*8)) = s
    394 	*(*uintptr)(unsafe.Pointer(newenv + uintptr(i+uint64(1))*8)) = uintptr(0)
    395 	*(*uintptr)(unsafe.Pointer(EnvironP())) = AssignPtrUintptr(uintptr(unsafe.Pointer(&_soldenv)), newenv)
    396 	if !(r != 0) {
    397 		goto __11
    398 	}
    399 	X__env_rm_add(tls, uintptr(0), r)
    400 __11:
    401 	;
    402 	return 0
    403 oom:
    404 	Xfree(tls, r)
    405 	return -1
    406 }
    407 
    408 var _soldenv uintptr /* putenv.c:22:14: */
    409 
    410 func Xputenv(tls *TLS, s uintptr) int32 { /* putenv.c:43:5: */
    411 	var l size_t = size_t((int64(X__strchrnul(tls, s, '=')) - int64(s)) / 1)
    412 	if !(l != 0) || !(int32(*(*int8)(unsafe.Pointer(s + uintptr(l)))) != 0) {
    413 		return Xunsetenv(tls, s)
    414 	}
    415 	return X__putenv(tls, s, l, uintptr(0))
    416 }
    417 
    418 func X__env_rm_add(tls *TLS, old uintptr, new uintptr) { /* setenv.c:5:6: */
    419 	//TODO for (size_t i=0; i < env_alloced_n; i++)
    420 	var i size_t = uint64(0)
    421 	for ; i < _senv_alloced_n; i++ {
    422 		if *(*uintptr)(unsafe.Pointer(_senv_alloced + uintptr(i)*8)) == old {
    423 			*(*uintptr)(unsafe.Pointer(_senv_alloced + uintptr(i)*8)) = new
    424 			Xfree(tls, old)
    425 			return
    426 		} else if !(int32(*(*uintptr)(unsafe.Pointer(_senv_alloced + uintptr(i)*8))) != 0) && new != 0 {
    427 			*(*uintptr)(unsafe.Pointer(_senv_alloced + uintptr(i)*8)) = new
    428 			new = uintptr(0)
    429 		}
    430 	}
    431 	if !(new != 0) {
    432 		return
    433 	}
    434 	var t uintptr = Xrealloc(tls, _senv_alloced, uint64(unsafe.Sizeof(uintptr(0)))*(_senv_alloced_n+uint64(1)))
    435 	if !(t != 0) {
    436 		return
    437 	}
    438 	*(*uintptr)(unsafe.Pointer(AssignPtrUintptr(uintptr(unsafe.Pointer(&_senv_alloced)), t) + uintptr(PostIncUint64(&_senv_alloced_n, 1))*8)) = new
    439 }
    440 
    441 var _senv_alloced uintptr  /* setenv.c:7:14: */
    442 var _senv_alloced_n size_t /* setenv.c:8:16: */
    443 
    444 func Xsetenv(tls *TLS, var1 uintptr, value uintptr, overwrite int32) int32 { /* setenv.c:26:5: */
    445 	var s uintptr
    446 	var l1 size_t
    447 	var l2 size_t
    448 
    449 	if !(var1 != 0) || !(int32(AssignUint64(&l1, size_t((int64(X__strchrnul(tls, var1, '='))-int64(var1))/1))) != 0) || *(*int8)(unsafe.Pointer(var1 + uintptr(l1))) != 0 {
    450 		*(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22
    451 		return -1
    452 	}
    453 	if !(overwrite != 0) && Xgetenv(tls, var1) != 0 {
    454 		return 0
    455 	}
    456 
    457 	l2 = Xstrlen(tls, value)
    458 	s = Xmalloc(tls, l1+l2+uint64(2))
    459 	if !(s != 0) {
    460 		return -1
    461 	}
    462 	Xmemcpy(tls, s, var1, l1)
    463 	*(*int8)(unsafe.Pointer(s + uintptr(l1))) = int8('=')
    464 	Xmemcpy(tls, s+uintptr(l1)+uintptr(1), value, l2+uint64(1))
    465 	return X__putenv(tls, s, l1, s)
    466 }
    467 
    468 func Xunsetenv(tls *TLS, name uintptr) int32 { /* unsetenv.c:9:5: */
    469 	var l size_t = size_t((int64(X__strchrnul(tls, name, '=')) - int64(name)) / 1)
    470 	if !(l != 0) || *(*int8)(unsafe.Pointer(name + uintptr(l))) != 0 {
    471 		*(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22
    472 		return -1
    473 	}
    474 	if Environ() != 0 {
    475 		var e uintptr = Environ()
    476 		var eo uintptr = e
    477 		for ; *(*uintptr)(unsafe.Pointer(e)) != 0; e += 8 {
    478 			//TODO if (!strncmp(name, *e, l) && l[*e] == '=')
    479 			if !(Xstrncmp(tls, name, *(*uintptr)(unsafe.Pointer(e)), l) != 0) && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(e)) + uintptr(l)))) == '=' {
    480 				X__env_rm_add(tls, *(*uintptr)(unsafe.Pointer(e)), uintptr(0))
    481 			} else if eo != e {
    482 				*(*uintptr)(unsafe.Pointer(PostIncUintptr(&eo, 8))) = *(*uintptr)(unsafe.Pointer(e))
    483 			} else {
    484 				eo += 8
    485 			}
    486 		}
    487 		if eo != e {
    488 			*(*uintptr)(unsafe.Pointer(eo)) = uintptr(0)
    489 		}
    490 	}
    491 	return 0
    492 }
    493 
    494 type wint_t = uint32 /* alltypes.h:198:18 */
    495 
    496 type wctype_t = uint32 /* alltypes.h:203:23 */
    497 
    498 type __mbstate_t = struct {
    499 	__opaque1 uint32
    500 	__opaque2 uint32
    501 } /* alltypes.h:337:9 */
    502 
    503 type mbstate_t = __mbstate_t /* alltypes.h:337:63 */
    504 
    505 type tm = struct {
    506 	tm_sec    int32
    507 	tm_min    int32
    508 	tm_hour   int32
    509 	tm_mday   int32
    510 	tm_mon    int32
    511 	tm_year   int32
    512 	tm_wday   int32
    513 	tm_yday   int32
    514 	tm_isdst  int32
    515 	tm_gmtoff int32
    516 	tm_zone   uintptr
    517 } /* wchar.h:138:1 */
    518 
    519 type uintptr_t = uint32 /* alltypes.h:55:24 */
    520 
    521 type int8_t = int8 /* alltypes.h:96:25 */
    522 
    523 type int16_t = int16 /* alltypes.h:101:25 */
    524 
    525 type int32_t = int32 /* alltypes.h:106:25 */
    526 
    527 type int64_t = int32 /* alltypes.h:111:25 */
    528 
    529 type intmax_t = int32 /* alltypes.h:116:25 */
    530 
    531 type uint8_t = uint8 /* alltypes.h:121:25 */
    532 
    533 type uint16_t = uint16 /* alltypes.h:126:25 */
    534 
    535 type uint32_t = uint32 /* alltypes.h:131:25 */
    536 
    537 type uint64_t = uint32 /* alltypes.h:136:25 */
    538 
    539 type uintmax_t = uint32 /* alltypes.h:146:25 */
    540 
    541 type int_fast8_t = int8_t   /* stdint.h:22:16 */
    542 type int_fast64_t = int64_t /* stdint.h:23:17 */
    543 
    544 type int_least8_t = int8_t   /* stdint.h:25:17 */
    545 type int_least16_t = int16_t /* stdint.h:26:17 */
    546 type int_least32_t = int32_t /* stdint.h:27:17 */
    547 type int_least64_t = int64_t /* stdint.h:28:17 */
    548 
    549 type uint_fast8_t = uint8_t   /* stdint.h:30:17 */
    550 type uint_fast64_t = uint64_t /* stdint.h:31:18 */
    551 
    552 type uint_least8_t = uint8_t   /* stdint.h:33:18 */
    553 type uint_least16_t = uint16_t /* stdint.h:34:18 */
    554 type uint_least32_t = uint32_t /* stdint.h:35:18 */
    555 type uint_least64_t = uint64_t /* stdint.h:36:18 */
    556 
    557 type int_fast16_t = int32_t   /* stdint.h:1:17 */
    558 type int_fast32_t = int32_t   /* stdint.h:2:17 */
    559 type uint_fast16_t = uint32_t /* stdint.h:3:18 */
    560 type uint_fast32_t = uint32_t /* stdint.h:4:18 */
    561 
    562 // Upper 6 state bits are a negative integer offset to bound-check next byte
    563 //    equivalent to: ( (b-0x80) | (b+offset) ) & ~0x3f
    564 
    565 // Interval [a,b). Either a must be 80 or b must be c0, lower 3 bits clear.
    566 
    567 // Arbitrary encoding for representing code units instead of characters.
    568 
    569 // Get inline definition of MB_CUR_MAX.
    570 
    571 type lconv = struct {
    572 	decimal_point      uintptr
    573 	thousands_sep      uintptr
    574 	grouping           uintptr
    575 	int_curr_symbol    uintptr
    576 	currency_symbol    uintptr
    577 	mon_decimal_point  uintptr
    578 	mon_thousands_sep  uintptr
    579 	mon_grouping       uintptr
    580 	positive_sign      uintptr
    581 	negative_sign      uintptr
    582 	int_frac_digits    int8
    583 	frac_digits        int8
    584 	p_cs_precedes      int8
    585 	p_sep_by_space     int8
    586 	n_cs_precedes      int8
    587 	n_sep_by_space     int8
    588 	p_sign_posn        int8
    589 	n_sign_posn        int8
    590 	int_p_cs_precedes  int8
    591 	int_p_sep_by_space int8
    592 	int_n_cs_precedes  int8
    593 	int_n_sep_by_space int8
    594 	int_p_sign_posn    int8
    595 	int_n_sign_posn    int8
    596 	_                  [2]byte
    597 } /* locale.h:24:1 */
    598 
    599 type _G_fpos64_t = struct {
    600 	_        [0]uint64
    601 	__opaque [16]int8
    602 } /* stdio.h:54:9 */
    603 
    604 type fpos_t = _G_fpos64_t /* stdio.h:58:3 */
    605 
    606 // Support signed or unsigned plain-char
    607 
    608 // Implementation choices...
    609 
    610 // Arbitrary numbers...
    611 
    612 // POSIX/SUS requirements follow. These numbers come directly
    613 // from SUS and have nothing to do with the host system.
    614 
    615 type __locale_map = struct {
    616 	__map    uintptr
    617 	map_size size_t
    618 	name     [24]int8
    619 	next     uintptr
    620 } /* alltypes.h:343:9 */
    621 
    622 type tls_module = struct {
    623 	next   uintptr
    624 	image  uintptr
    625 	len    size_t
    626 	size   size_t
    627 	align  size_t
    628 	offset size_t
    629 } /* libc.h:14:1 */
    630 
    631 type __libc = struct {
    632 	can_do_threads  int8
    633 	threaded        int8
    634 	secure          int8
    635 	need_locks      int8
    636 	threads_minus_1 int32
    637 	auxv            uintptr
    638 	tls_head        uintptr
    639 	tls_size        size_t
    640 	tls_align       size_t
    641 	tls_cnt         size_t
    642 	page_size       size_t
    643 	global_locale   struct{ cat [6]uintptr }
    644 } /* libc.h:20:1 */
    645 
    646 type time_t = int32 /* alltypes.h:85:16 */
    647 
    648 type clockid_t = int32 /* alltypes.h:214:13 */
    649 
    650 type timespec = struct {
    651 	tv_sec  time_t
    652 	tv_nsec int32
    653 } /* alltypes.h:229:1 */
    654 
    655 type __pthread = struct {
    656 	self          uintptr
    657 	dtv           uintptr
    658 	prev          uintptr
    659 	next          uintptr
    660 	sysinfo       uintptr_t
    661 	canary        uintptr_t
    662 	canary2       uintptr_t
    663 	tid           int32
    664 	errno_val     int32
    665 	detach_state  int32
    666 	cancel        int32
    667 	canceldisable uint8
    668 	cancelasync   uint8
    669 	tsd_used      uint8 /* unsigned char tsd_used: 1, unsigned char dlerror_flag: 1 */
    670 	_             [1]byte
    671 	map_base      uintptr
    672 	map_size      size_t
    673 	stack         uintptr
    674 	stack_size    size_t
    675 	guard_size    size_t
    676 	result        uintptr
    677 	cancelbuf     uintptr
    678 	tsd           uintptr
    679 	robust_list   struct {
    680 		head    uintptr
    681 		off     int32
    682 		_       [4]byte
    683 		pending uintptr
    684 	}
    685 	timer_id      int32
    686 	_             [4]byte
    687 	locale        locale_t
    688 	killlock      [1]int32
    689 	_             [4]byte
    690 	dlerror_buf   uintptr
    691 	stdio_locks   uintptr
    692 	canary_at_end uintptr_t
    693 	_             [4]byte
    694 	dtv_copy      uintptr
    695 } /* alltypes.h:273:9 */
    696 
    697 type pthread_t = uintptr /* alltypes.h:273:26 */
    698 
    699 type pthread_once_t = int32 /* alltypes.h:279:13 */
    700 
    701 type pthread_key_t = uint32 /* alltypes.h:284:18 */
    702 
    703 type pthread_spinlock_t = int32 /* alltypes.h:289:13 */
    704 
    705 type pthread_mutexattr_t = struct{ __attr uint32 } /* alltypes.h:294:37 */
    706 
    707 type pthread_condattr_t = struct{ __attr uint32 } /* alltypes.h:299:37 */
    708 
    709 type pthread_barrierattr_t = struct{ __attr uint32 } /* alltypes.h:304:37 */
    710 
    711 type pthread_rwlockattr_t = struct{ __attr [2]uint32 } /* alltypes.h:309:40 */
    712 
    713 type __sigset_t = struct{ __bits [32]uint32 } /* alltypes.h:349:9 */
    714 
    715 type sigset_t = __sigset_t /* alltypes.h:349:71 */
    716 
    717 type pthread_attr_t = struct{ __u struct{ __i [9]int32 } } /* alltypes.h:372:147 */
    718 
    719 type pthread_mutex_t = struct {
    720 	__u struct {
    721 		_   [0]uint64
    722 		__i [6]int32
    723 		_   [24]byte
    724 	}
    725 } /* alltypes.h:377:157 */
    726 
    727 type pthread_cond_t = struct {
    728 	__u struct {
    729 		_   [0]uint64
    730 		__i [12]int32
    731 	}
    732 } /* alltypes.h:387:112 */
    733 
    734 type pthread_rwlock_t = struct {
    735 	__u struct {
    736 		_   [0]uint64
    737 		__i [8]int32
    738 		_   [32]byte
    739 	}
    740 } /* alltypes.h:397:139 */
    741 
    742 type pthread_barrier_t = struct {
    743 	__u struct {
    744 		_   [0]uint64
    745 		__i [5]int32
    746 		_   [20]byte
    747 	}
    748 } /* alltypes.h:402:137 */
    749 
    750 type sched_param = struct {
    751 	sched_priority int32
    752 	__reserved1    int32
    753 	__reserved2    [2]struct {
    754 		__reserved1 time_t
    755 		__reserved2 int32
    756 	}
    757 	__reserved3 int32
    758 } /* sched.h:19:1 */
    759 
    760 type timer_t = uintptr /* alltypes.h:209:14 */
    761 
    762 type clock_t = int32 /* alltypes.h:219:14 */
    763 
    764 type itimerspec = struct {
    765 	it_interval struct {
    766 		tv_sec  time_t
    767 		tv_nsec int32
    768 	}
    769 	it_value struct {
    770 		tv_sec  time_t
    771 		tv_nsec int32
    772 	}
    773 } /* time.h:80:1 */
    774 
    775 type sigevent = struct {
    776 	sigev_value struct {
    777 		_         [0]uint64
    778 		sival_int int32
    779 		_         [4]byte
    780 	}
    781 	sigev_signo             int32
    782 	sigev_notify            int32
    783 	sigev_notify_function   uintptr
    784 	sigev_notify_attributes uintptr
    785 	__pad                   [44]int8
    786 	_                       [4]byte
    787 } /* time.h:107:1 */
    788 
    789 type __ptcb = struct {
    790 	__f    uintptr
    791 	__x    uintptr
    792 	__next uintptr
    793 } /* alltypes.h:273:9 */
    794 
    795 type sigaltstack = struct {
    796 	ss_sp    uintptr
    797 	ss_flags int32
    798 	_        [4]byte
    799 	ss_size  size_t
    800 } /* signal.h:44:9 */
    801 
    802 type stack_t = sigaltstack /* signal.h:44:28 */
    803 
    804 type greg_t = int64        /* signal.h:59:19 */
    805 type gregset_t = [23]int64 /* signal.h:59:27 */
    806 type _fpstate = struct {
    807 	cwd       uint16
    808 	swd       uint16
    809 	ftw       uint16
    810 	fop       uint16
    811 	rip       uint64
    812 	rdp       uint64
    813 	mxcsr     uint32
    814 	mxcr_mask uint32
    815 	_st       [8]struct {
    816 		significand [4]uint16
    817 		exponent    uint16
    818 		padding     [3]uint16
    819 	}
    820 	_xmm    [16]struct{ element [4]uint32 }
    821 	padding [24]uint32
    822 } /* signal.h:60:9 */
    823 
    824 type fpregset_t = uintptr /* signal.h:71:3 */
    825 type sigcontext = struct {
    826 	r8          uint32
    827 	r9          uint32
    828 	r10         uint32
    829 	r11         uint32
    830 	r12         uint32
    831 	r13         uint32
    832 	r14         uint32
    833 	r15         uint32
    834 	rdi         uint32
    835 	rsi         uint32
    836 	rbp         uint32
    837 	rbx         uint32
    838 	rdx         uint32
    839 	rax         uint32
    840 	rcx         uint32
    841 	rsp         uint32
    842 	rip         uint32
    843 	eflags      uint32
    844 	cs          uint16
    845 	gs          uint16
    846 	fs          uint16
    847 	__pad0      uint16
    848 	err         uint32
    849 	trapno      uint32
    850 	oldmask     uint32
    851 	cr2         uint32
    852 	fpstate     uintptr
    853 	__reserved1 [8]uint32
    854 } /* signal.h:72:1 */
    855 
    856 type mcontext_t = struct {
    857 	gregs       gregset_t
    858 	fpregs      fpregset_t
    859 	__reserved1 [8]uint64
    860 } /* signal.h:84:3 */
    861 
    862 type __ucontext = struct {
    863 	uc_flags     uint32
    864 	_            [4]byte
    865 	uc_link      uintptr
    866 	uc_stack     stack_t
    867 	uc_mcontext  mcontext_t
    868 	uc_sigmask   sigset_t
    869 	__fpregs_mem [64]uint32
    870 } /* signal.h:97:9 */
    871 
    872 type ucontext_t = __ucontext /* signal.h:104:3 */
    873 
    874 type sigval = struct {
    875 	_         [0]uint64
    876 	sival_int int32
    877 	_         [4]byte
    878 } /* time.h:107:1 */
    879 
    880 type siginfo_t = struct {
    881 	si_signo    int32
    882 	si_errno    int32
    883 	si_code     int32
    884 	_           [4]byte
    885 	__si_fields struct {
    886 		_     [0]uint64
    887 		__pad [116]int8
    888 		_     [4]byte
    889 	}
    890 } /* signal.h:145:3 */
    891 
    892 type sigaction = struct {
    893 	__sa_handler struct{ sa_handler uintptr }
    894 	sa_mask      sigset_t
    895 	sa_flags     int32
    896 	_            [4]byte
    897 	sa_restorer  uintptr
    898 } /* signal.h:167:1 */
    899 
    900 type sig_t = uintptr /* signal.h:251:14 */
    901 
    902 type sig_atomic_t = int32 /* signal.h:269:13 */
    903 
    904 type mode_t = uint32 /* alltypes.h:152:18 */
    905 
    906 type syscall_arg_t = int32 /* syscall.h:22:14 */
    907 
    908 func a_cas(tls *TLS, p uintptr, t int32, s int32) int32 { /* atomic_arch.h:2:19: */
    909 	panic(`arch\x86_64\atomic_arch.h:4:2: assembler statements not supported`)
    910 	return t
    911 }
    912 
    913 func a_or(tls *TLS, p uintptr, v int32) { /* atomic_arch.h:46:20: */
    914 	panic(`arch\x86_64\atomic_arch.h:48:2: assembler statements not supported`)
    915 }
    916 
    917 func a_or_64(tls *TLS, p uintptr, v uint64_t) { /* atomic_arch.h:62:20: */
    918 	panic(`arch\x86_64\atomic_arch.h:64:2: assembler statements not supported`)
    919 }
    920 
    921 func a_ctz_64(tls *TLS, x uint64_t) int32 { /* atomic_arch.h:112:19: */
    922 	panic(`arch\x86_64\atomic_arch.h:114:2: assembler statements not supported`)
    923 	return int32(x)
    924 }
    925 
    926 func a_ctz_32(tls *TLS, x uint32_t) int32 { /* atomic.h:256:19: */
    927 	return int32(_sdebruijn32[x&-x*uint32_t(0x076be629)>>27])
    928 }
    929 
    930 var _sdebruijn32 = [32]int8{
    931 	int8(0), int8(1), int8(23), int8(2), int8(29), int8(24), int8(19), int8(3), int8(30), int8(27), int8(25), int8(11), int8(20), int8(8), int8(4), int8(13),
    932 	int8(31), int8(22), int8(28), int8(18), int8(26), int8(10), int8(7), int8(12), int8(21), int8(17), int8(9), int8(6), int8(16), int8(5), int8(15), int8(14),
    933 } /* atomic.h:261:20 */
    934 
    935 type __timer = struct {
    936 	timerid int32
    937 	_       [4]byte
    938 	thread  pthread_t
    939 } /* pthread_impl.h:64:1 */
    940 
    941 func __pthread_self(tls *TLS) uintptr { /* pthread_arch.h:1:30: */
    942 	var self uintptr
    943 	panic(`arch\x86_64\pthread_arch.h:4:2: assembler statements not supported`)
    944 	return self
    945 }
    946 
    947 func Xwcrtomb(tls *TLS, s uintptr, wc wchar_t, st uintptr) size_t { /* wcrtomb.c:6:8: */
    948 	if !(s != 0) {
    949 		return uint64(1)
    950 	}
    951 	if uint32(wc) < uint32(0x80) {
    952 		*(*int8)(unsafe.Pointer(s)) = int8(wc)
    953 		return uint64(1)
    954 	} else if func() int32 {
    955 		if !!(int32(*(*uintptr)(unsafe.Pointer((*__pthread)(unsafe.Pointer(__pthread_self(tls))).locale))) != 0) {
    956 			return 4
    957 		}
    958 		return 1
    959 	}() == 1 {
    960 		if !(uint32(wc)-uint32(0xdf80) < uint32(0x80)) {
    961 			*(*int32)(unsafe.Pointer(X___errno_location(tls))) = 84
    962 			return Uint64FromInt32(-1)
    963 		}
    964 		*(*int8)(unsafe.Pointer(s)) = int8(wc)
    965 		return uint64(1)
    966 	} else if uint32(wc) < uint32(0x800) {
    967 		*(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(0xc0 | int32(wc)>>6)
    968 		*(*int8)(unsafe.Pointer(s)) = int8(0x80 | int32(wc)&0x3f)
    969 		return uint64(2)
    970 	} else if uint32(wc) < uint32(0xd800) || uint32(wc)-uint32(0xe000) < uint32(0x2000) {
    971 		*(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(0xe0 | int32(wc)>>12)
    972 		*(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(0x80 | int32(wc)>>6&0x3f)
    973 		*(*int8)(unsafe.Pointer(s)) = int8(0x80 | int32(wc)&0x3f)
    974 		return uint64(3)
    975 	} else if uint32(wc)-uint32(0x10000) < uint32(0x100000) {
    976 		*(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(0xf0 | int32(wc)>>18)
    977 		*(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(0x80 | int32(wc)>>12&0x3f)
    978 		*(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(0x80 | int32(wc)>>6&0x3f)
    979 		*(*int8)(unsafe.Pointer(s)) = int8(0x80 | int32(wc)&0x3f)
    980 		return uint64(4)
    981 	}
    982 	*(*int32)(unsafe.Pointer(X___errno_location(tls))) = 84
    983 	return Uint64FromInt32(-1)
    984 }
    985 
    986 func Xwcsrtombs(tls *TLS, s uintptr, ws uintptr, n size_t, st uintptr) size_t { /* wcsrtombs.c:3:8: */
    987 	bp := tls.Alloc(4)
    988 	defer tls.Free(4)
    989 
    990 	var ws2 uintptr
    991 	// var buf [4]int8 at bp, 4
    992 
    993 	var N size_t = n
    994 	var l size_t
    995 	if !(s != 0) {
    996 		n = uint64(0)
    997 		ws2 = *(*uintptr)(unsafe.Pointer(ws))
    998 		for ; *(*wchar_t)(unsafe.Pointer(ws2)) != 0; ws2 += 2 {
    999 			if uint32(*(*wchar_t)(unsafe.Pointer(ws2))) >= 0x80 {
   1000 				l = Xwcrtomb(tls, bp, *(*wchar_t)(unsafe.Pointer(ws2)), uintptr(0))
   1001 				if !(l+uint64(1) != 0) {
   1002 					return Uint64FromInt32(-1)
   1003 				}
   1004 				n = n + l
   1005 			} else {
   1006 				n++
   1007 			}
   1008 		}
   1009 		return n
   1010 	}
   1011 	for n >= uint64(4) {
   1012 		if uint32(*(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))))-1 >= 0x7f {
   1013 			if !(int32(*(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws))))) != 0) {
   1014 				*(*int8)(unsafe.Pointer(s)) = int8(0)
   1015 				*(*uintptr)(unsafe.Pointer(ws)) = uintptr(0)
   1016 				return N - n
   1017 			}
   1018 			l = Xwcrtomb(tls, s, *(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0))
   1019 			if !(l+uint64(1) != 0) {
   1020 				return Uint64FromInt32(-1)
   1021 			}
   1022 			s += uintptr(l)
   1023 			n = n - l
   1024 		} else {
   1025 			*(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(*(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))))
   1026 			n--
   1027 		}
   1028 		*(*uintptr)(unsafe.Pointer(ws)) += 2
   1029 	}
   1030 	for n != 0 {
   1031 		if uint32(*(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))))-1 >= 0x7f {
   1032 			if !(int32(*(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws))))) != 0) {
   1033 				*(*int8)(unsafe.Pointer(s)) = int8(0)
   1034 				*(*uintptr)(unsafe.Pointer(ws)) = uintptr(0)
   1035 				return N - n
   1036 			}
   1037 			l = Xwcrtomb(tls, bp, *(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0))
   1038 			if !(l+uint64(1) != 0) {
   1039 				return Uint64FromInt32(-1)
   1040 			}
   1041 			if l > n {
   1042 				return N - n
   1043 			}
   1044 			Xwcrtomb(tls, s, *(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0))
   1045 			s += uintptr(l)
   1046 			n = n - l
   1047 		} else {
   1048 			*(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(*(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))))
   1049 			n--
   1050 		}
   1051 		*(*uintptr)(unsafe.Pointer(ws)) += 2
   1052 	}
   1053 	return N
   1054 }
   1055 
   1056 func Xwcstombs(tls *TLS, s uintptr, ws uintptr, n size_t) size_t { /* wcstombs.c:4:8: */
   1057 	bp := tls.Alloc(8)
   1058 	defer tls.Free(8)
   1059 	*(*uintptr)(unsafe.Pointer(bp)) = ws
   1060 
   1061 	//TODO return wcsrtombs(s, &(const wchar_t *){ws}, n, 0);
   1062 	return Xwcsrtombs(tls, s, bp, n, uintptr(0))
   1063 }
   1064 
   1065 func Xbsearch(tls *TLS, key uintptr, base uintptr, nel size_t, width size_t, cmp uintptr) uintptr { /* bsearch.c:3:6: */
   1066 	var try uintptr
   1067 	var sign int32
   1068 	for nel > uint64(0) {
   1069 		try = base + uintptr(width*(nel/uint64(2)))
   1070 		sign = (*struct {
   1071 			f func(*TLS, uintptr, uintptr) int32
   1072 		})(unsafe.Pointer(&struct{ uintptr }{cmp})).f(tls, key, try)
   1073 		if sign < 0 {
   1074 			nel = nel / uint64(2)
   1075 		} else if sign > 0 {
   1076 			base = try + uintptr(width)
   1077 			nel = nel - (nel/uint64(2) + uint64(1))
   1078 		} else {
   1079 			return try
   1080 		}
   1081 	}
   1082 	return uintptr(0)
   1083 }
   1084 
   1085 // Support signed or unsigned plain-char
   1086 
   1087 // Implementation choices...
   1088 
   1089 // Arbitrary numbers...
   1090 
   1091 // POSIX/SUS requirements follow. These numbers come directly
   1092 // from SUS and have nothing to do with the host system.
   1093 
   1094 func X__strchrnul(tls *TLS, s uintptr, c int32) uintptr { /* strchrnul.c:10:6: */
   1095 	c = int32(uint8(c))
   1096 	if !(c != 0) {
   1097 		return s + uintptr(Xstrlen(tls, s))
   1098 	}
   1099 	var w uintptr
   1100 	for ; uint64(s)%uint64(unsafe.Sizeof(size_t(0))) != 0; s++ {
   1101 		if !(int32(*(*int8)(unsafe.Pointer(s))) != 0) || int32(*(*uint8)(unsafe.Pointer(s))) == c {
   1102 			return s
   1103 		}
   1104 	}
   1105 	var k size_t = Uint64(Uint64FromInt32(-1)) / uint64(255) * size_t(c)
   1106 	for w = s; !((*(*uint64)(unsafe.Pointer(w))-Uint64(Uint64FromInt32(-1))/uint64(255)) & ^*(*uint64)(unsafe.Pointer(w)) & (Uint64(Uint64FromInt32(-1))/uint64(255)*uint64(255/2+1)) != 0) && !((*(*uint64)(unsafe.Pointer(w))^k-Uint64(Uint64FromInt32(-1))/uint64(255)) & ^(*(*uint64)(unsafe.Pointer(w))^k) & (Uint64(Uint64FromInt32(-1))/uint64(255)*uint64(255/2+1)) != 0); w += 8 {
   1107 	}
   1108 	s = w
   1109 	for ; *(*int8)(unsafe.Pointer(s)) != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != c; s++ {
   1110 	}
   1111 	return s
   1112 }
   1113 
   1114 func Xstrdup(tls *TLS, s uintptr) uintptr { /* strdup.c:4:6: */
   1115 	var l size_t = Xstrlen(tls, s)
   1116 	var d uintptr = Xmalloc(tls, l+uint64(1))
   1117 	if !(d != 0) {
   1118 		return uintptr(0)
   1119 	}
   1120 	return Xmemcpy(tls, d, s, l+uint64(1))
   1121 }