/* Generated by Nim Compiler v1.3.5 */
/*   (c) 2020 Andreas Rumpf */
/* The generated code is subject to the original license. */
#define NIM_INTBITS 64

/* section: NIM_merge_HEADERS */

#include "nimbase.h"
#undef LANGUAGE_C
#undef MIPSEB
#undef MIPSEL
#undef PPC
#undef R3000
#undef R4000
#undef i386
#undef linux
#undef mips
#undef near
#undef far
#undef powerpc
#undef unix

/* section: NIM_merge_FRAME_DEFINES */
#define nimfr_(x, y)
#define nimln_(x, y)

/* section: NIM_merge_FORWARD_TYPES */
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;

/* section: NIM_merge_TYPES */
struct TGenericSeq {
NI len;
NI reserved;
};
struct NimStringDesc {
  TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};

/* section: NIM_merge_PROC_HEADERS */
static N_INLINE(NIM_BOOL, lteqpercent___x8ObPz55IkLprSyPyqBSRAsystem)(NI32 x, NI32 y);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, setLengthStr)(NimStringDesc* s, NI newLen);

/* section: NIM_merge_PROCS */
static N_INLINE(NIM_BOOL, lteqpercent___x8ObPz55IkLprSyPyqBSRAsystem)(NI32 x, NI32 y) {
	NIM_BOOL result;
	result = (NIM_BOOL)0;
	result = ((NU32)(((NU32) (x))) <= (NU32)(((NU32) (y))));
	return result;
}
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, nuctoUTF8)(NI32 c) {
	NimStringDesc* result;
	NI32 iX60gensym49_;
	result = (NimStringDesc*)0;
	result = ((NimStringDesc*) NIM_NIL);
	iX60gensym49_ = c;
	{
		NIM_BOOL T3_;
		T3_ = (NIM_BOOL)0;
		T3_ = lteqpercent___x8ObPz55IkLprSyPyqBSRAsystem(iX60gensym49_, ((NI32) 127));
		if (!T3_) goto LA4_;
		result = setLengthStr(result, ((NI) 1));
		result->data[((NI) 0)] = ((NIM_CHAR) (((NI) (iX60gensym49_))));
	}
	goto LA1_;
	LA4_: ;
	{
		NIM_BOOL T7_;
		T7_ = (NIM_BOOL)0;
		T7_ = lteqpercent___x8ObPz55IkLprSyPyqBSRAsystem(iX60gensym49_, ((NI32) 2047));
		if (!T7_) goto LA8_;
		result = setLengthStr(result, ((NI) 2));
		result->data[((NI) 0)] = ((NIM_CHAR) (((NI) ((NI32)((NI32)((NI64)(iX60gensym49_) >> (NU64)(((NI) 6))) | ((NI32) 192))))));
		result->data[((NI) 1)] = ((NIM_CHAR) (((NI) ((NI32)((NI32)(iX60gensym49_ & ((NI32) 63)) | ((NI32) 128))))));
	}
	goto LA1_;
	LA8_: ;
	{
		NIM_BOOL T11_;
		T11_ = (NIM_BOOL)0;
		T11_ = lteqpercent___x8ObPz55IkLprSyPyqBSRAsystem(iX60gensym49_, ((NI32) 65535));
		if (!T11_) goto LA12_;
		result = setLengthStr(result, ((NI) 3));
		result->data[((NI) 0)] = ((NIM_CHAR) (((NI) ((NI32)((NI32)((NI64)(iX60gensym49_) >> (NU64)(((NI) 12))) | ((NI32) 224))))));
		result->data[((NI) 1)] = ((NIM_CHAR) (((NI) ((NI32)((NI32)((NI32)((NI64)(iX60gensym49_) >> (NU64)(((NI) 6))) & ((NI32) 63)) | ((NI32) 128))))));
		result->data[((NI) 2)] = ((NIM_CHAR) (((NI) ((NI32)((NI32)(iX60gensym49_ & ((NI32) 63)) | ((NI32) 128))))));
	}
	goto LA1_;
	LA12_: ;
	{
		NIM_BOOL T15_;
		T15_ = (NIM_BOOL)0;
		T15_ = lteqpercent___x8ObPz55IkLprSyPyqBSRAsystem(iX60gensym49_, ((NI32) 2097151));
		if (!T15_) goto LA16_;
		result = setLengthStr(result, ((NI) 4));
		result->data[((NI) 0)] = ((NIM_CHAR) (((NI) ((NI32)((NI32)((NI64)(iX60gensym49_) >> (NU64)(((NI) 18))) | ((NI32) 240))))));
		result->data[((NI) 1)] = ((NIM_CHAR) (((NI) ((NI32)((NI32)((NI32)((NI64)(iX60gensym49_) >> (NU64)(((NI) 12))) & ((NI32) 63)) | ((NI32) 128))))));
		result->data[((NI) 2)] = ((NIM_CHAR) (((NI) ((NI32)((NI32)((NI32)((NI64)(iX60gensym49_) >> (NU64)(((NI) 6))) & ((NI32) 63)) | ((NI32) 128))))));
		result->data[((NI) 3)] = ((NIM_CHAR) (((NI) ((NI32)((NI32)(iX60gensym49_ & ((NI32) 63)) | ((NI32) 128))))));
	}
	goto LA1_;
	LA16_: ;
	{
		NIM_BOOL T19_;
		T19_ = (NIM_BOOL)0;
		T19_ = lteqpercent___x8ObPz55IkLprSyPyqBSRAsystem(iX60gensym49_, ((NI32) 67108863));
		if (!T19_) goto LA20_;
		result = setLengthStr(result, ((NI) 5));
		result->data[((NI) 0)] = ((NIM_CHAR) (((NI) ((NI32)((NI32)((NI64)(iX60gensym49_) >> (NU64)(((NI) 24))) | ((NI32) 248))))));
		result->data[((NI) 1)] = ((NIM_CHAR) (((NI) ((NI32)((NI32)((NI32)((NI64)(iX60gensym49_) >> (NU64)(((NI) 18))) & ((NI32) 63)) | ((NI32) 128))))));
		result->data[((NI) 2)] = ((NIM_CHAR) (((NI) ((NI32)((NI32)((NI32)((NI64)(iX60gensym49_) >> (NU64)(((NI) 12))) & ((NI32) 63)) | ((NI32) 128))))));
		result->data[((NI) 3)] = ((NIM_CHAR) (((NI) ((NI32)((NI32)((NI32)((NI64)(iX60gensym49_) >> (NU64)(((NI) 6))) & ((NI32) 63)) | ((NI32) 128))))));
		result->data[((NI) 4)] = ((NIM_CHAR) (((NI) ((NI32)((NI32)(iX60gensym49_ & ((NI32) 63)) | ((NI32) 128))))));
	}
	goto LA1_;
	LA20_: ;
	{
		NIM_BOOL T23_;
		T23_ = (NIM_BOOL)0;
		T23_ = lteqpercent___x8ObPz55IkLprSyPyqBSRAsystem(iX60gensym49_, ((NI32) 2147483647));
		if (!T23_) goto LA24_;
		result = setLengthStr(result, ((NI) 6));
		result->data[((NI) 0)] = ((NIM_CHAR) (((NI) ((NI32)((NI32)((NI64)(iX60gensym49_) >> (NU64)(((NI) 30))) | ((NI32) 252))))));
		result->data[((NI) 1)] = ((NIM_CHAR) (((NI) ((NI32)((NI32)((NI32)((NI64)(iX60gensym49_) >> (NU64)(((NI) 24))) & ((NI32) 63)) | ((NI32) 128))))));
		result->data[((NI) 2)] = ((NIM_CHAR) (((NI) ((NI32)((NI32)((NI32)((NI64)(iX60gensym49_) >> (NU64)(((NI) 18))) & ((NI32) 63)) | ((NI32) 128))))));
		result->data[((NI) 3)] = ((NIM_CHAR) (((NI) ((NI32)((NI32)((NI32)((NI64)(iX60gensym49_) >> (NU64)(((NI) 12))) & ((NI32) 63)) | ((NI32) 128))))));
		result->data[((NI) 4)] = ((NIM_CHAR) (((NI) ((NI32)((NI32)((NI32)((NI64)(iX60gensym49_) >> (NU64)(((NI) 6))) & ((NI32) 63)) | ((NI32) 128))))));
		result->data[((NI) 5)] = ((NIM_CHAR) (((NI) ((NI32)((NI32)(iX60gensym49_ & ((NI32) 63)) | ((NI32) 128))))));
	}
	goto LA1_;
	LA24_: ;
	{
	}
	LA1_: ;
	return result;
}
