LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::new_data(unsigned int, unsigned int)
GStr::Data * GStr::new_data(uint len, uint addcap) {
//static method to return a new Data object (allocate length)
//content is undefined, but it's null terminated
    if (len > 0) {
        Data* data;
        GMALLOC(data, sizeof(Data)+len+addcap);
        data->ref_count = 0;
        data->length = len;
        data->cap=len+addcap;
        data->chars[len] = '\0';
        return data;
        }
    else
        return &null_data;
 }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
testl %edi, %edi
je 0x4978
movl %esi, %ebx
movl %edi, %ebp
movl %edi, %r15d
movl %esi, %eax
leaq (%r15,%rax), %rdi
addq $0x10, %rdi
callq 0x2330
movq %rax, %r14
testq %rax, %rax
jne 0x495f
leaq 0x96c8(%rip), %rdi      # 0xe020
xorl %eax, %eax
callq 0x289c
movl $0x0, (%r14)
movl %ebp, 0x8(%r14)
addl %ebp, %ebx
movl %ebx, 0x4(%r14)
movb $0x0, 0xc(%r14,%r15)
jmp 0x497f
leaq 0xf8d1(%rip), %r14      # 0x14250
movq %r14, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::new_data(char const*, unsigned int)
GStr::Data* GStr::new_data(const char* str, uint addcap) {
//static method to return a new Data object (allocate: length+addcap)
//as a copy of a given string
 //if (str==NULL) return &null_data;
 int len= (str==NULL)? 0 : strlen(str);
 if (len+addcap > 0) {
        Data* data;
        GMALLOC(data, sizeof(Data)+len+addcap);
        if (len) strcpy(data->chars, str);
        data->ref_count = 0;
        data->cap=len+addcap;
        data->length = len;
        data->chars[len] = '\0';
        return data;
        }
    else
        return &null_data;
 }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
testq %rdi, %rdi
je 0x49b0
movq %rbx, %rdi
callq 0x2140
movq %rax, %r14
jmp 0x49b3
xorl %r14d, %r14d
movl %r14d, %r12d
addl %ebp, %r12d
je 0x49d3
movslq %r14d, %r13
movl %ebp, %edi
addq %r13, %rdi
addq $0x10, %rdi
je 0x49dc
callq 0x2330
movq %rax, %r15
jmp 0x49df
leaq 0xf876(%rip), %r15      # 0x14250
jmp 0x4a18
xorl %r15d, %r15d
testq %r15, %r15
jne 0x49f2
leaq 0x9635(%rip), %rdi      # 0xe020
xorl %eax, %eax
callq 0x289c
testl %r14d, %r14d
je 0x4a03
leaq 0xc(%r15), %rdi
movq %rbx, %rsi
callq 0x2220
movl $0x0, (%r15)
movl %r12d, 0x4(%r15)
movl %r14d, 0x8(%r15)
movb $0x0, 0xc(%r15,%r13)
movq %r15, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::prep_data(unsigned int, unsigned int)
void GStr::prep_data(uint len, uint addcap) {
	uint newcap=len+addcap;
    if (newcap > 0 && my_data->ref_count <= 1 &&
    	   my_data->cap>=newcap && my_data->cap-newcap<(newcap>>1)+2) {
    	//no need to shrink/reallocate the already allocated space
    	my_data->length = len;
    	my_data->chars[len]=0;
        return;
    }
    if (my_data != &null_data && --my_data->ref_count == 0)
        GFREE(my_data);

    if (len + addcap> 0) {
        GMALLOC(my_data, sizeof(Data)+len+addcap);
        my_data->ref_count = 1;
        my_data->length = len;
        my_data->cap=len+addcap;
        my_data->chars[len] = 0;
    }
    else
        my_data = &null_data;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movl %edx, %ebp
movl %esi, %ebx
movq %rdi, %r14
movl %edx, %r15d
addl %esi, %r15d
je 0x4a6a
movq 0x20(%r14), %rax
cmpl $0x1, (%rax)
ja 0x4a6a
movl 0x4(%rax), %ecx
subl %r15d, %ecx
jb 0x4a6a
movl %r15d, %edx
shrl %edx
addl $0x2, %edx
cmpl %edx, %ecx
jae 0x4a6a
movl %ebx, 0x8(%rax)
movl %ebx, %ecx
movb $0x0, 0xc(%rax,%rcx)
jmp 0x4ade
movq 0x20(%r14), %rdi
leaq 0xf7db(%rip), %r12      # 0x14250
cmpq %r12, %rdi
je 0x4a8b
decl (%rdi)
jne 0x4a8b
callq 0x22e0
movq $0x0, 0x20(%r14)
testl %r15d, %r15d
je 0x4ada
movl %ebx, %r12d
movl %ebp, %eax
leaq (%r12,%rax), %rdi
addq $0x10, %rdi
movq $0x0, 0x20(%r14)
callq 0x2330
movq %rax, 0x20(%r14)
testq %rax, %rax
jne 0x4ac1
leaq 0x9566(%rip), %rdi      # 0xe020
xorl %eax, %eax
callq 0x289c
movq 0x20(%r14), %rax
movl $0x1, (%rax)
movl %ebx, 0x8(%rax)
movl %r15d, 0x4(%rax)
movb $0x0, 0xc(%rax,%r12)
jmp 0x4ade
movq %r12, 0x20(%r14)
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::make_unique()
void GStr::make_unique() {//make sure it's not a reference to other string
    if (my_data->ref_count > 1) {
        Data *data = new_data(my_data->length, 0);
        ::memcpy(data->chars, my_data->chars, my_data->length);
        my_data->ref_count--;
        my_data = data;
        my_data->ref_count++;
    }
}

// Assembly:
movq 0x20(%rdi), %rax
cmpl $0x2, (%rax)
jb 0x4b53
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movl 0x8(%rax), %edi
xorl %esi, %esi
callq 0x4928
movq %rax, %r14
leaq 0xc(%rax), %rdi
movq 0x20(%rbx), %rsi
movl 0x8(%rsi), %edx
addq $0xc, %rsi
callq 0x21e0
movq 0x20(%rbx), %rax
decl (%rax)
movq %r14, 0x20(%rbx)
incl (%r14)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::replace_data(GStr::Data*)
void GStr::replace_data(Data *data) {
    if (my_data != &null_data && --my_data->ref_count == 0)
        GFREE(my_data);
    if (data != &null_data)
        data->ref_count++;
    my_data = data;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %rbx
movq %rdi, %r14
movq 0x20(%rdi), %rdi
leaq 0xf6e6(%rip), %r15      # 0x14250
cmpq %r15, %rdi
je 0x4b80
decl (%rdi)
jne 0x4b80
callq 0x22e0
movq $0x0, 0x20(%r14)
cmpq %r15, %rbx
je 0x4b87
incl (%rbx)
movq %rbx, 0x20(%r14)
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::GStr()
GStr::GStr():my_data(&null_data) {
 fTokenDelimiter=NULL;
 fTokenizeMode=tkCharSet;
 fLastTokenStart=0;
 readbuf=NULL;
 readbufsize=0;
 }

// Assembly:
leaq 0xf625(%rip), %rax      # 0x14250
movq %rax, 0x20(%rdi)
movq $0x0, (%rdi)
movabsq $0x100000000, %rax      # imm = 0x100000000
movq %rax, 0x8(%rdi)
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rdi)
retq
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::detach()
char* GStr::detach() {
 make_unique();
 char *r=my_data->chars;
 my_data=&null_data;
 fTokenDelimiter=NULL;
 fTokenizeMode=tkCharSet;
 fLastTokenStart=0;
 readbuf=NULL;
 readbufsize=0;
 return r;
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
callq 0x4b0e
movq 0x20(%rbx), %rax
addq $0xc, %rax
leaq 0xf5ec(%rip), %rcx      # 0x14250
movq %rcx, 0x20(%rbx)
movq $0x0, (%rbx)
movabsq $0x100000000, %rcx      # imm = 0x100000000
movq %rcx, 0x8(%rbx)
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rbx)
popq %rbx
retq
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::GStr(GStr const&)
GStr::GStr(const GStr& s): my_data(&null_data){
 fTokenDelimiter=NULL;
 fTokenizeMode=tkCharSet;
 fLastTokenStart=0;
 readbuf=NULL;
 readbufsize=0;
 replace_data(s.my_data);
 }

// Assembly:
leaq 0xf5c3(%rip), %rax      # 0x14250
movq %rax, 0x20(%rdi)
movq $0x0, (%rdi)
movabsq $0x100000000, %rax      # imm = 0x100000000
movq %rax, 0x8(%rdi)
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rdi)
movq 0x20(%rsi), %rsi
jmp 0x4b54
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::GStr(char const*, unsigned int)
GStr::GStr(const char *s, uint addcap): my_data(&null_data) {
  fTokenDelimiter=NULL;
  fTokenizeMode=tkCharSet;
  fLastTokenStart=0;
  readbuf=NULL;
  readbufsize=0;
  my_data=new_data(s, addcap);
  my_data->ref_count = 1;
 }

// Assembly:
pushq %rbx
movq %rdi, %rbx
leaq 0xf58f(%rip), %rax      # 0x14250
movq %rax, 0x20(%rdi)
movq $0x0, (%rdi)
movabsq $0x100000000, %rax      # imm = 0x100000000
movq %rax, 0x8(%rdi)
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rdi)
movq %rsi, %rdi
movl %edx, %esi
callq 0x498e
movq %rax, 0x20(%rbx)
movl $0x1, (%rax)
popq %rbx
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::GStr(int, unsigned int)
GStr::GStr(const int i, uint addcap): my_data(&null_data) {
 fTokenDelimiter=NULL;
 fTokenizeMode=tkCharSet;
 fLastTokenStart=0;
 readbuf=NULL;
 readbufsize=0;
 char buf[20];
 sprintf(buf,"%d",i);
 my_data=new_data(buf, addcap);
 }

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x20, %rsp
movl %edx, %ebx
movl %esi, %edx
movq %rdi, %r14
leaq 0xf541(%rip), %rax      # 0x14250
movq %rax, 0x20(%rdi)
movq $0x0, (%rdi)
movabsq $0x100000000, %rax      # imm = 0x100000000
movq %rax, 0x8(%rdi)
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rdi)
leaq 0x9433(%rip), %rsi      # 0xe169
movq %rsp, %r15
movq %r15, %rdi
xorl %eax, %eax
callq 0x2080
movq %r15, %rdi
movl %ebx, %esi
callq 0x498e
movq %rax, 0x20(%r14)
addq $0x20, %rsp
popq %rbx
popq %r14
popq %r15
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::GStr(double)
GStr::GStr(const double f): my_data(&null_data) {
 fTokenDelimiter=NULL;
 fTokenizeMode=tkCharSet;
 fLastTokenStart=0;
 readbuf=NULL;
 readbufsize=0;
 char buf[20];
 sprintf(buf,"%f",f);
 const int len = ::strlen(buf);
 prep_data(len);
 ::memcpy(chrs(), buf, len);
 }

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x20, %rsp
movq %rdi, %rbx
leaq 0xf4e1(%rip), %rax      # 0x14250
movq %rax, 0x20(%rdi)
movq $0x0, (%rdi)
movabsq $0x100000000, %rax      # imm = 0x100000000
movq %rax, 0x8(%rdi)
xorps %xmm1, %xmm1
movups %xmm1, 0x10(%rdi)
leaq 0x93d6(%rip), %rsi      # 0xe16c
movq %rsp, %r14
movq %r14, %rdi
movb $0x1, %al
callq 0x2080
movq %r14, %rdi
callq 0x2140
movq %rax, %r15
movq %rbx, %rdi
movl %r15d, %esi
xorl %edx, %edx
callq 0x4a2a
movq 0x20(%rbx), %rdi
addq $0xc, %rdi
movslq %r15d, %rdx
movq %r14, %rsi
callq 0x21e0
addq $0x20, %rsp
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::GStr(char, int)
GStr::GStr(const char c, int n): my_data(&null_data) {
  fTokenDelimiter=NULL;
  fTokenizeMode=tkCharSet;
  fLastTokenStart=0;
  readbuf=NULL;
  readbufsize=0;
  prep_data(n);
  ::memset(chrs(), c, n);
  }

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %ebx
movl %esi, %ebp
movq %rdi, %r14
leaq 0xf466(%rip), %rax      # 0x14250
movq %rax, 0x20(%rdi)
movq $0x0, (%rdi)
movabsq $0x100000000, %rax      # imm = 0x100000000
movq %rax, 0x8(%rdi)
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rdi)
movl %edx, %esi
xorl %edx, %edx
callq 0x4a2a
movq 0x20(%r14), %rdi
addq $0xc, %rdi
movslq %ebx, %rdx
movl %ebp, %esi
popq %rbx
popq %r14
popq %rbp
jmp 0x2190
nop
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::~GStr()
GStr::~GStr() {
  if (my_data != &null_data && --my_data->ref_count == 0)
             GFREE(my_data);
  GFREE(fTokenDelimiter);
  GFREE(readbuf);
  }

// Assembly:
pushq %rbx
movq %rdi, %rbx
movq 0x20(%rdi), %rdi
leaq 0xf417(%rip), %rax      # 0x14250
cmpq %rax, %rdi
je 0x4e4f
decl (%rdi)
jne 0x4e4f
callq 0x22e0
movq $0x0, 0x20(%rbx)
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x4e5c
callq 0x22e0
movq $0x0, (%rbx)
movq 0x10(%rbx), %rdi
testq %rdi, %rdi
je 0x4e71
callq 0x22e0
movq $0x0, 0x10(%rbx)
popq %rbx
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::peelIntR() const
char& GStr::operator[](int idx){
//returns reference to char (can be l-value)
  if (idx < 0) idx += length();
  if (idx < 0 || idx >= length()) invalid_index_error("operator[]");
  make_unique();  //because the user will probably modify this char!
  return chrs()[idx];
  }

// Assembly:
pushq %r14
pushq %rbx
subq $0x18, %rsp
movq 0x20(%rdi), %rcx
cmpl $0x0, 0x8(%rcx)
je 0x7e47
movslq 0x8(%rcx), %rdx
xorl %eax, %eax
xorl %edi, %edi
testq %rdx, %rdx
jle 0x7e13
movl $0x1, %esi
xorl %r8d, %r8d
testb $0x1, %r8b
je 0x7de4
movsbl 0xb(%rcx,%rdx), %r10d
addl $-0x30, %r10d
movl $0x1, %r9d
cmpl $0xa, %r10d
jb 0x7e01
jmp 0x7e13
movsbl 0xb(%rcx,%rdx), %r10d
addl $-0x30, %r10d
xorl %r9d, %r9d
cmpl $0xa, %r10d
setb %r9b
movzbl %r8b, %r8d
cmovbl %esi, %r8d
decq %rdx
addl %r9d, %edi
leaq 0x1(%rdx), %r9
cmpq $0x1, %r9
jg 0x7dc6
xorl %edx, %edx
testl %edi, %edi
jle 0x7e49
movslq %edx, %rax
leaq (%rcx,%rax), %rsi
addq $0xc, %rsi
movl %edi, %ebx
movq %rsp, %r14
movq %r14, %rdi
movq %rbx, %rdx
callq 0x2180
movb $0x0, (%rsp,%rbx)
movq %r14, %rdi
xorl %esi, %esi
movl $0xa, %edx
callq 0x2360
jmp 0x7e49
xorl %eax, %eax
addq $0x18, %rsp
popq %rbx
popq %r14
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::operator[](int) const
char GStr::operator[](int idx) const {
//returns char copy (cannot be l-value!)
  if (idx < 0) idx += length();
  if (idx < 0 || idx >= length()) invalid_index_error("operator[]");
  return my_data->chars[idx];
  }

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %esi, %ebx
movq %rdi, %r14
testl %esi, %esi
jns 0x4ef6
movq 0x20(%r14), %rax
addl 0x8(%rax), %ebx
testl %ebx, %ebx
js 0x4f03
movq 0x20(%r14), %rax
cmpl 0x8(%rax), %ebx
jl 0x4f18
leaq 0x92f8(%rip), %rdi      # 0xe202
leaq 0x925e(%rip), %rsi      # 0xe16f
xorl %eax, %eax
callq 0x289c
movq 0x20(%r14), %rax
movslq %ebx, %rcx
movb 0xc(%rax,%rcx), %al
addq $0x8, %rsp
popq %rbx
popq %r14
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::operator=(GStr const&)
GStr& GStr::operator=(const GStr& s) {
  if (s.my_data!=my_data) {
    make_unique(); //edit operation ahead
    replace_data(s.my_data);
  }
  return *this;
  }

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x20(%rsi), %rax
cmpq 0x20(%rdi), %rax
je 0x4f54
movq %rsi, %r14
movq %rbx, %rdi
callq 0x4b0e
movq 0x20(%r14), %rsi
movq %rbx, %rdi
callq 0x4b54
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::operator=(char const*)
GStr& GStr::operator=(const char *s) {
  make_unique(); //edit operation ahead
  if (s==NULL) {
    prep_data(0);
    return *this;
  }
  const int len = ::strlen(s); prep_data(len);
  ::memcpy(my_data->chars, s, len);
  return *this;
  }

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %r14
movq %rdi, %rbx
callq 0x4b0e
testq %r14, %r14
je 0x4fa2
movq %r14, %rdi
callq 0x2140
movq %rax, %r15
movq %rbx, %rdi
movl %r15d, %esi
xorl %edx, %edx
callq 0x4a2a
movq 0x20(%rbx), %rdi
addq $0xc, %rdi
movslq %r15d, %rdx
movq %r14, %rsi
callq 0x21e0
jmp 0x4fc7
movq 0x20(%rbx), %rdi
leaq 0xf2a3(%rip), %r14      # 0x14250
cmpq %r14, %rdi
je 0x4fc3
decl (%rdi)
jne 0x4fc3
callq 0x22e0
movq $0x0, 0x20(%rbx)
movq %r14, 0x20(%rbx)
movq %rbx, %rax
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::assign(char const*)
GStr& GStr::assign(const char* s) {
  make_unique(); //edit operation ahead
  if (s==NULL) {
    prep_data(0, my_data->cap);
    return *this;
  }
  const int len = ::strlen(s);
  prep_data(len, my_data->cap-len-2);
  ::memcpy(my_data->chars, s, len);
  return *this;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %r14
movq %rdi, %rbx
callq 0x4b0e
testq %r14, %r14
je 0x501d
movq %r14, %rdi
callq 0x2140
movq %rax, %r15
movq 0x20(%rbx), %rax
movl 0x4(%rax), %edx
subl %r15d, %edx
addl $-0x2, %edx
movq %rbx, %rdi
movl %r15d, %esi
callq 0x4a2a
movq 0x20(%rbx), %rdi
addq $0xc, %rdi
movslq %r15d, %rdx
movq %r14, %rsi
callq 0x21e0
jmp 0x502e
movq 0x20(%rbx), %rax
movl 0x4(%rax), %edx
movq %rbx, %rdi
xorl %esi, %esi
callq 0x4a2a
movq %rbx, %rax
popq %rbx
popq %r14
popq %r15
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::assign(int)
GStr& GStr::assign(const int v) {
  make_unique(); //edit operation ahead
  char buf[20];
  sprintf(buf,"%d",v);
  const int len = ::strlen(buf);
  prep_data(len, my_data->cap-len-2);
  ::memcpy(my_data->chars, buf, len);
  return *this;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x18, %rsp
movl %esi, %ebp
movq %rdi, %rbx
callq 0x4b0e
leaq 0x9116(%rip), %rsi      # 0xe169
movq %rsp, %r14
movq %r14, %rdi
movl %ebp, %edx
xorl %eax, %eax
callq 0x2080
movq %r14, %rdi
callq 0x2140
movq %rax, %r15
movq 0x20(%rbx), %rax
movl 0x4(%rax), %edx
subl %r15d, %edx
addl $-0x2, %edx
movq %rbx, %rdi
movl %r15d, %esi
callq 0x4a2a
movq 0x20(%rbx), %rdi
addq $0xc, %rdi
movslq %r15d, %rdx
movq %r14, %rsi
callq 0x21e0
movq %rbx, %rax
addq $0x18, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::operator=(double)
GStr& GStr::operator=(const double f) {
 make_unique(); //edit operation ahead
 char buf[20];
 sprintf(buf,"%f",f);
 const int len = ::strlen(buf);
 prep_data(len);
 ::memcpy(my_data->chars, buf, len);
 return *this;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x30, %rsp
movsd %xmm0, 0x8(%rsp)
movq %rdi, %rbx
callq 0x4b0e
leaq 0x90a8(%rip), %rsi      # 0xe16c
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movsd 0x8(%rsp), %xmm0
movb $0x1, %al
callq 0x2080
movq %r14, %rdi
callq 0x2140
movq %rax, %r15
movq %rbx, %rdi
movl %r15d, %esi
xorl %edx, %edx
callq 0x4a2a
movq 0x20(%rbx), %rdi
addq $0xc, %rdi
movslq %r15d, %rdx
movq %r14, %rsi
callq 0x21e0
movq %rbx, %rax
addq $0x30, %rsp
popq %rbx
popq %r14
popq %r15
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::operator=(int)
GStr& GStr::operator=(const int i) {
 make_unique(); //edit operation ahead
 char buf[20];
 sprintf(buf,"%d",i);
 const int len = ::strlen(buf);
 prep_data(len);
 ::memcpy(my_data->chars, buf, len);
 return *this;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x18, %rsp
movl %esi, %ebp
movq %rdi, %rbx
callq 0x4b0e
leaq 0x903c(%rip), %rsi      # 0xe169
movq %rsp, %r14
movq %r14, %rdi
movl %ebp, %edx
xorl %eax, %eax
callq 0x2080
movq %r14, %rdi
callq 0x2140
movq %rax, %r15
movq %rbx, %rdi
movl %r15d, %esi
xorl %edx, %edx
callq 0x4a2a
movq 0x20(%rbx), %rdi
addq $0xc, %rdi
movslq %r15d, %rdx
movq %r14, %rsi
callq 0x21e0
movq %rbx, %rax
addq $0x18, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::append(char const*)
GStr& GStr::append(const char* s) {
  make_unique(); //edit operation ahead
  uint len=::strlen(s);
  uint newlen=len+my_data->length;
  if (newlen<=my_data->length) return *this;
  if (my_data->length==0 && my_data->cap<newlen) {
    prep_data(len,4);
    ::memcpy(my_data->chars, s, len);
    return *this;
   }
  if (newlen>=my_data->cap) {
	  //not enough room to append these chars
	  GREALLOC(my_data, sizeof(Data)+newlen+1);
	  my_data->cap=newlen+1;
  }
  ::memcpy(my_data->chars+my_data->length, s, len);
  my_data->length=newlen;
  my_data->chars[newlen]='\0';
  return *this;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
movq %rsi, %r14
movq %rdi, %rbx
callq 0x4b0e
movq %r14, %rdi
callq 0x2140
movq %rax, %r15
movq 0x20(%rbx), %rdi
movl 0x8(%rdi), %eax
leal (%rax,%r15), %r12d
cmpl %eax, %r12d
jbe 0x546f
testl %eax, %eax
jne 0x53fa
cmpl %r12d, 0x4(%rdi)
jae 0x53fa
movq %rbx, %rdi
movl %r15d, %esi
movl $0x4, %edx
callq 0x4a2a
movq 0x20(%rbx), %rdi
addq $0xc, %rdi
movl %r15d, %edx
movq %r14, %rsi
callq 0x21e0
jmp 0x546f
movl %r12d, %r13d
cmpl 0x4(%rdi), %r12d
jb 0x5447
leaq 0x11(%r13), %rsi
testq %rdi, %rdi
je 0x5413
callq 0x23d0
jmp 0x541b
movq %rsi, %rdi
callq 0x2330
testq %rax, %rax
setne %cl
je 0x5429
movq %rax, 0x20(%rbx)
jmp 0x543b
testb %cl, %cl
jne 0x543b
leaq 0x8bec(%rip), %rdi      # 0xe020
xorl %eax, %eax
callq 0x289c
leal 0x1(%r12), %eax
movq 0x20(%rbx), %rcx
movl %eax, 0x4(%rcx)
movq 0x20(%rbx), %rax
movl 0x8(%rax), %ecx
leaq (%rax,%rcx), %rdi
addq $0xc, %rdi
movl %r15d, %edx
movq %r14, %rsi
callq 0x21e0
movq 0x20(%rbx), %rax
movl %r12d, 0x8(%rax)
movb $0x0, 0xc(%rax,%r13)
movq %rbx, %rax
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::index(char const*, int) const
int GStr::index(const char *s, int start_index) const {
    // A negative index specifies an index from the right of the string.
    if (strlen(s)>(size_t)length()) return -1;
    if (start_index < 0)
        start_index += length();

    if (start_index < 0 || start_index >= length())
        invalid_index_error("index()");
    const char* idx = strstr(&my_data->chars[start_index], s);
    if (!idx)
        return -1;
    else
        return idx - my_data->chars;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %edx, %ebp
movq %rsi, %rbx
movq %rdi, %r14
movq %rsi, %rdi
callq 0x2140
movq %rax, %rcx
movq 0x20(%r14), %rax
movslq 0x8(%rax), %rdx
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmpq %rdx, %rcx
ja 0x5626
movl %ebp, %r15d
sarl $0x1f, %r15d
andl %edx, %r15d
addl %ebp, %r15d
setns %al
cmpl %edx, %r15d
setl %cl
testb %cl, %al
jne 0x55f9
leaq 0x8c17(%rip), %rdi      # 0xe202
leaq 0x8bb4(%rip), %rsi      # 0xe1a6
xorl %eax, %eax
callq 0x289c
movq 0x20(%r14), %r14
movslq %r15d, %rax
leaq (%r14,%rax), %rdi
addq $0xc, %rdi
addq $0xc, %r14
movq %rbx, %rsi
callq 0x2090
movq %rax, %rcx
movl %ecx, %edx
subl %r14d, %edx
xorl %eax, %eax
cmpq $0x1, %rcx
sbbl %eax, %eax
orl %edx, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::format(char const*, ...)
GStr& GStr::format(const char *fmt,...) {
// Format as in sprintf
  make_unique(); //edit operation ahead
  char* buf;
  GMALLOC(buf, strlen(fmt)+1024);
  va_list arguments;
  va_start(arguments,fmt);
  //+1K buffer, should be enough for common expressions
  int len=vsprintf(buf,fmt,arguments);
  va_end(arguments);
  prep_data(len); //this also adds the '\0' at the end!
                     //and sets the right len
  ::memcpy(chrs(), buf, len);
  GFREE(buf);
  return *this;
  }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0xd8, %rsp
movq %rsi, %r15
movq %rdi, %rbx
movq %rdx, 0x30(%rsp)
movq %rcx, 0x38(%rsp)
movq %r8, 0x40(%rsp)
movq %r9, 0x48(%rsp)
testb %al, %al
je 0x57a2
movaps %xmm0, 0x50(%rsp)
movaps %xmm1, 0x60(%rsp)
movaps %xmm2, 0x70(%rsp)
movaps %xmm3, 0x80(%rsp)
movaps %xmm4, 0x90(%rsp)
movaps %xmm5, 0xa0(%rsp)
movaps %xmm6, 0xb0(%rsp)
movaps %xmm7, 0xc0(%rsp)
callq 0x4b0e
movq %r15, %rdi
callq 0x2140
addq $0x400, %rax            # imm = 0x400
je 0x57c4
movq %rax, %rdi
callq 0x2330
movq %rax, %r14
jmp 0x57c7
xorl %r14d, %r14d
testq %r14, %r14
jne 0x57da
leaq 0x884d(%rip), %rdi      # 0xe020
xorl %eax, %eax
callq 0x289c
leaq 0x20(%rsp), %rax
movq %rsp, %rdx
movq %rax, 0x10(%rdx)
leaq 0x100(%rsp), %rax
movq %rax, 0x8(%rdx)
movabsq $0x3000000010, %rax     # imm = 0x3000000010
movq %rax, (%rdx)
movq %r14, %rdi
movq %r15, %rsi
callq 0x2160
movl %eax, %ebp
movq %rbx, %rdi
movl %eax, %esi
xorl %edx, %edx
callq 0x4a2a
movq 0x20(%rbx), %rdi
addq $0xc, %rdi
movslq %ebp, %rdx
movq %r14, %rsi
callq 0x21e0
testq %r14, %r14
je 0x5838
movq %r14, %rdi
callq 0x22e0
movq %rbx, %rax
addq $0xd8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::appendfmt(char const*, ...)
GStr& GStr::appendfmt(const char *fmt,...) {
// Format as in sprintf
  make_unique(); //edit operation ahead
  char* buf;
  GMALLOC(buf, strlen(fmt)+1024);
  va_list arguments;
  va_start(arguments,fmt);
  //+1K buffer, should be enough for common expressions
  vsprintf(buf,fmt,arguments);
  va_end(arguments);
  append(buf);
  GFREE(buf);
  return *this;
  }

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0xd0, %rsp
movq %rsi, %r14
movq %rdi, %rbx
movq %rdx, 0x30(%rsp)
movq %rcx, 0x38(%rsp)
movq %r8, 0x40(%rsp)
movq %r9, 0x48(%rsp)
testb %al, %al
je 0x58ab
movaps %xmm0, 0x50(%rsp)
movaps %xmm1, 0x60(%rsp)
movaps %xmm2, 0x70(%rsp)
movaps %xmm3, 0x80(%rsp)
movaps %xmm4, 0x90(%rsp)
movaps %xmm5, 0xa0(%rsp)
movaps %xmm6, 0xb0(%rsp)
movaps %xmm7, 0xc0(%rsp)
callq 0x4b0e
movq %r14, %rdi
callq 0x2140
addq $0x400, %rax            # imm = 0x400
je 0x58cd
movq %rax, %rdi
callq 0x2330
movq %rax, %r15
jmp 0x58d0
xorl %r15d, %r15d
testq %r15, %r15
jne 0x58e3
leaq 0x8744(%rip), %rdi      # 0xe020
xorl %eax, %eax
callq 0x289c
leaq 0x20(%rsp), %rax
movq %rsp, %rdx
movq %rax, 0x10(%rdx)
leaq 0xf0(%rsp), %rax
movq %rax, 0x8(%rdx)
movabsq $0x3000000010, %rax     # imm = 0x3000000010
movq %rax, (%rdx)
movq %r15, %rdi
movq %r14, %rsi
callq 0x2160
movq %rbx, %rdi
movq %r15, %rsi
callq 0x5398
testq %r15, %r15
je 0x592b
movq %r15, %rdi
callq 0x22e0
movq %rbx, %rax
addq $0xd0, %rsp
popq %rbx
popq %r14
popq %r15
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::trim(char)
GStr& GStr::trim(char c) {
 int istart;
 int iend;
 for (istart=0; istart<length() && my_data->chars[istart]==c;istart++) ;
 if (istart==length()) {
       make_unique(); //edit operation ahead
       prep_data(0); //string was entirely trimmed
       return *this;
       }
 for (iend=length()-1; iend>istart && my_data->chars[iend]==c;iend--) ;
 int newlen=iend-istart+1;
 if (newlen==length())  //nothing to trim
           return *this;
 make_unique(); //edit operation ahead
 Data *data = new_data(newlen);
 ::memcpy(data->chars, &my_data->chars[istart], newlen);
 replace_data(data);
 return *this;
 }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x20(%rdi), %rcx
movslq 0x8(%rcx), %rax
testq %rax, %rax
jle 0x596c
movl %eax, %edx
xorl %r15d, %r15d
cmpb %sil, 0xc(%rcx,%r15)
jne 0x596f
incq %r15
cmpq %r15, %rdx
jne 0x5958
movl %edx, %r15d
jmp 0x596f
xorl %r15d, %r15d
cmpl %eax, %r15d
jne 0x59a3
movq %rbx, %rdi
callq 0x4b0e
movq 0x20(%rbx), %rdi
leaq 0xe8c9(%rip), %r14      # 0x14250
cmpq %r14, %rdi
je 0x599d
decl (%rdi)
jne 0x599d
callq 0x22e0
movq $0x0, 0x20(%rbx)
movq %r14, 0x20(%rbx)
jmp 0x5a14
leal -0x1(%rax), %edx
cmpl %edx, %r15d
cmovll %r15d, %edx
movslq %r15d, %rdi
movq %rax, %r8
decq %r8
movl %eax, %ebp
cmpq %rdi, %r8
jle 0x59cf
decl %ebp
leaq -0x1(%r8), %r9
cmpb %sil, 0xc(%rcx,%r8)
movq %r9, %r8
je 0x59b8
jmp 0x59d1
movl %edx, %ebp
subl %r15d, %ebp
incl %ebp
cmpl %eax, %ebp
je 0x5a14
movq %rbx, %rdi
callq 0x4b0e
movl %ebp, %edi
xorl %esi, %esi
callq 0x4928
movq %rax, %r14
leaq 0xc(%rax), %rdi
movq 0x20(%rbx), %rax
movl %r15d, %ecx
leaq (%rax,%rcx), %rsi
addq $0xc, %rsi
movslq %ebp, %rdx
callq 0x21e0
movq %rbx, %rdi
movq %r14, %rsi
callq 0x4b54
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::trim(char const*)
GStr& GStr::trim(const char* c) {
 int istart;
 int iend;
 for (istart=0; istart<length() && strchr(c, my_data->chars[istart])!=NULL ;istart++) ;
 if (istart==length()) {
        prep_data(0); //string was entirely trimmed
        return *this;
        }
 for (iend=length()-1; iend>istart && strchr(c, my_data->chars[iend])!=NULL;iend--) ;
 int newlen=iend-istart+1;
 if (newlen==length())  //nothing to trim
           return *this;
 make_unique(); //edit operation ahead
 Data *data = new_data(newlen);
 ::memcpy(data->chars, & (my_data->chars[istart]), newlen);
 replace_data(data);
 return *this;
 }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rsi, %r15
movq %rdi, %r13
movq 0x20(%rdi), %r14
movslq 0x8(%r14), %rbp
testq %rbp, %rbp
jle 0x5a68
movl %ebp, %ebx
xorl %r12d, %r12d
movsbl 0xc(%r14,%r12), %esi
movq %r15, %rdi
callq 0x2100
testq %rax, %rax
je 0x5a6b
incq %r12
cmpq %r12, %rbx
jne 0x5a48
movl %ebx, %r12d
jmp 0x5a6b
xorl %r12d, %r12d
cmpl %ebp, %r12d
jne 0x5a9a
leaq 0xe7d9(%rip), %rbx      # 0x14250
cmpq %rbx, %r14
je 0x5a91
decl (%r14)
jne 0x5a91
movq %r14, %rdi
callq 0x22e0
movq $0x0, 0x20(%r13)
movq %rbx, 0x20(%r13)
jmp 0x5b28
movq %r13, 0x10(%rsp)
leal -0x1(%rbp), %eax
cmpl %eax, %r12d
cmovll %r12d, %eax
movl %eax, 0x4(%rsp)
movslq %r12d, %rbx
movq %rbp, %r13
decq %r13
movq %rbp, 0x8(%rsp)
cmpq %rbx, %r13
jle 0x5ada
movsbl 0xc(%r14,%r13), %esi
movq %r15, %rdi
callq 0x2100
decl %ebp
decq %r13
testq %rax, %rax
jne 0x5abb
jmp 0x5ade
movl 0x4(%rsp), %ebp
subl %r12d, %ebp
incl %ebp
cmpl 0x8(%rsp), %ebp
movq 0x10(%rsp), %r13
je 0x5b28
movq %r13, %rdi
callq 0x4b0e
movl %ebp, %edi
xorl %esi, %esi
callq 0x4928
movq %rax, %r14
leaq 0xc(%rax), %rdi
movq 0x20(%r13), %rax
movl %r12d, %ecx
leaq (%rax,%rcx), %rsi
addq $0xc, %rsi
movslq %ebp, %rdx
callq 0x21e0
movq %r13, %rdi
movq %r14, %rsi
callq 0x4b54
movq %r13, %rax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::trimR(char)
GStr& GStr::trimR(char c) {
 //only trim the right end
 int iend;
 for (iend=length()-1; iend>=0 && my_data->chars[iend]==c;iend--) ;
 if (iend==-1) {
       make_unique();
       prep_data(0); //string was entirely trimmed
       return *this;
       }
 int newlen=iend+1;
 if (newlen==length())  //nothing to trim
           return *this;
 make_unique(); //edit operation ahead
 my_data->length=newlen;
 my_data->chars[newlen]='\0';
 /*

 Data *data = new_data(newlen);
 ::memcpy(data->chars, my_data->chars, newlen);
 replace_data(data);
 */
 return *this;
 }

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq %rdi, %rbx
movq 0x20(%rdi), %rcx
movl 0x8(%rcx), %eax
movl %eax, %ebp
sarl $0x1f, %ebp
andl %eax, %ebp
leaq (%rax,%rcx), %rdx
addq $0xb, %rdx
movl %eax, %ecx
testl %ecx, %ecx
jle 0x5b6f
decl %ecx
leaq -0x1(%rdx), %rdi
cmpb %sil, (%rdx)
movq %rdi, %rdx
je 0x5b59
incl %ecx
movl %ecx, %ebp
testl %ebp, %ebp
je 0x5b90
cmpl %eax, %ebp
je 0x5bbd
movq %rbx, %rdi
callq 0x4b0e
movq 0x20(%rbx), %rax
movl %ebp, 0x8(%rax)
movslq %ebp, %rcx
movb $0x0, 0xc(%rax,%rcx)
jmp 0x5bbd
movq %rbx, %rdi
callq 0x4b0e
movq 0x20(%rbx), %rdi
leaq 0xe6ad(%rip), %r14      # 0x14250
cmpq %r14, %rdi
je 0x5bb9
decl (%rdi)
jne 0x5bb9
callq 0x22e0
movq $0x0, 0x20(%rbx)
movq %r14, 0x20(%rbx)
movq %rbx, %rax
popq %rbx
popq %r14
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::trimR(char const*)
GStr& GStr::trimR(const char* c) {
 int iend;
 for (iend=length()-1; iend>=0 && strchr(c,my_data->chars[iend])!=NULL;iend--) ;
 if (iend==-1) {
       make_unique();
       prep_data(0); //string was entirely trimmed
       return *this;
       }
 int newlen=iend+1;
 if (newlen==length())  //nothing to trim
           return *this;
 make_unique(); //edit operation ahead
 my_data->length=newlen;
 my_data->chars[newlen]='\0';
 /*
 Data *data = new_data(newlen);
 ::memcpy(data->chars, my_data->chars, newlen);
 replace_data(data);
 */
 return *this;
 }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
movq 0x20(%rdi), %rax
movl 0x8(%rax), %r15d
movl %r15d, %ebp
sarl $0x1f, %ebp
andl %r15d, %ebp
leaq (%r15,%rax), %r13
addq $0xb, %r13
movl %r15d, %r12d
testl %r12d, %r12d
jle 0x5c16
movsbl (%r13), %esi
movq %r14, %rdi
callq 0x2100
decl %r12d
decq %r13
testq %rax, %rax
jne 0x5bf3
incl %r12d
movl %r12d, %ebp
testl %ebp, %ebp
je 0x5c38
cmpl %r15d, %ebp
je 0x5c65
movq %rbx, %rdi
callq 0x4b0e
movq 0x20(%rbx), %rax
movl %ebp, 0x8(%rax)
movslq %ebp, %rcx
movb $0x0, 0xc(%rax,%rcx)
jmp 0x5c65
movq %rbx, %rdi
callq 0x4b0e
movq 0x20(%rbx), %rdi
leaq 0xe605(%rip), %r14      # 0x14250
cmpq %r14, %rdi
je 0x5c61
decl (%rdi)
jne 0x5c61
callq 0x22e0
movq $0x0, 0x20(%rbx)
movq %r14, 0x20(%rbx)
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::chomp(char const*)
GStr& GStr::chomp(const char* cstr) {
 int iend;
 if (cstr==NULL || *cstr==0) return *this;
 //check if this ends with cstr
 int cend=strlen(cstr)-1;
 iend=my_data->length-1;
 while (iend>=0 && cend>=0) {
  if (my_data->chars[iend]!=cstr[cend]) return *this;
  iend--;
  cend--;
  }
 if (iend==-1) {
       make_unique();
       prep_data(0); //string will be entirely trimmed
       return *this;
       }
 int newlen=iend+1;
 make_unique(); //edit operation ahead
 my_data->length=newlen;
 my_data->chars[newlen]='\0';
 //Data *data = new_data(newlen);
 //::memcpy(data->chars, my_data->chars, newlen);
 //replace_data(data);
 return *this;
 }

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
testq %rsi, %rsi
je 0x5d42
movq %rsi, %r14
cmpb $0x0, (%rsi)
je 0x5d42
movq %r14, %rdi
callq 0x2140
movq 0x20(%rbx), %rcx
movl 0x8(%rcx), %r12d
movl %eax, %eax
decq %rax
movq %r12, %r15
shlq $0x20, %r15
movl $0x7fffffff, %edx       # imm = 0x7FFFFFFF
movabsq $-0x100000000, %rsi     # imm = 0xFFFFFFFF00000000
leaq -0x1(%r12), %rdi
movl %edi, %r8d
orl %eax, %r8d
btl $0x1f, %r8d
jb 0x5cf7
movq %rdi, %r8
andq %rdx, %r8
movb 0xc(%rcx,%r8), %r8b
movq %rax, %r9
andq %rdx, %r9
decq %rax
addq %rsi, %r15
movq %rdi, %r12
cmpb (%r14,%r9), %r8b
je 0x5cc3
jmp 0x5d42
movq %rbx, %rdi
testq %r12, %r12
je 0x5d18
callq 0x4b0e
movq 0x20(%rbx), %rax
movl %r12d, 0x8(%rax)
sarq $0x20, %r15
movb $0x0, 0xc(%rax,%r15)
jmp 0x5d42
callq 0x4b0e
movq 0x20(%rbx), %rdi
leaq 0xe528(%rip), %r14      # 0x14250
cmpq %r14, %rdi
je 0x5d3e
decl (%rdi)
jne 0x5d3e
callq 0x22e0
movq $0x0, 0x20(%rbx)
movq %r14, 0x20(%rbx)
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::trimL(char)
GStr& GStr::trimL(char c) {
 int istart;
 for (istart=0; istart<length() && my_data->chars[istart]==c;istart++) ;
 if (istart==length()) {
       prep_data(0); //string was entirely trimmed
       return *this;
       }
 int newlen=length()-istart;
 if (newlen==length())  //nothing to trim
           return *this;
 make_unique(); //edit operation ahead
 Data *data = new_data(newlen);
 ::memcpy(data->chars, &my_data->chars[istart], newlen);
 replace_data(data);
 return *this;
 }

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x20(%rdi), %rdi
movl 0x8(%rdi), %r14d
xorl %r12d, %r12d
testl %r14d, %r14d
jle 0x5d7f
cmpb %sil, 0xc(%rdi,%r12)
jne 0x5d7f
incq %r12
cmpq %r12, %r14
jne 0x5d6d
movl %r14d, %r12d
cmpl %r12d, %r14d
jne 0x5da7
leaq 0xe4c5(%rip), %r14      # 0x14250
cmpq %r14, %rdi
je 0x5da1
decl (%rdi)
jne 0x5da1
callq 0x22e0
movq $0x0, 0x20(%rbx)
movq %r14, 0x20(%rbx)
jmp 0x5dea
testl %r12d, %r12d
je 0x5dea
subl %r12d, %r14d
movq %rbx, %rdi
callq 0x4b0e
movl %r14d, %edi
xorl %esi, %esi
callq 0x4928
movq %rax, %r15
leaq 0xc(%rax), %rdi
movq 0x20(%rbx), %rax
movl %r12d, %ecx
leaq (%rax,%rcx), %rsi
addq $0xc, %rsi
movslq %r14d, %rdx
callq 0x21e0
movq %rbx, %rdi
movq %r15, %rsi
callq 0x4b54
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::trimL(char const*)
GStr& GStr::trimL(const char* c) {
 int istart;
 for (istart=0; istart<length() && strchr(c,my_data->chars[istart])!=NULL;istart++) ;
 if (istart==length()) {
       prep_data(0); //string was entirely trimmed
       return *this;
       }
 int newlen=length()-istart;
 if (newlen==length())  //nothing to trim
           return *this;
 make_unique(); //edit operation ahead

 Data *data = new_data(newlen);
 ::memcpy(data->chars, &my_data->chars[istart], newlen);
 replace_data(data);
 return *this;
 }

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
movq %rdi, %rbx
movq 0x20(%rdi), %r15
movl 0x8(%r15), %r14d
testl %r14d, %r14d
jle 0x5e39
movq %rsi, %r12
xorl %r13d, %r13d
movsbl 0xc(%r15,%r13), %esi
movq %r12, %rdi
callq 0x2100
testq %rax, %rax
je 0x5e3c
incq %r13
cmpq %r13, %r14
jne 0x5e19
movl %r14d, %r13d
jmp 0x5e3c
xorl %r13d, %r13d
cmpl %r13d, %r14d
jne 0x5e68
leaq 0xe408(%rip), %r14      # 0x14250
cmpq %r14, %r15
je 0x5e62
decl (%r15)
jne 0x5e62
movq %r15, %rdi
callq 0x22e0
movq $0x0, 0x20(%rbx)
movq %r14, 0x20(%rbx)
jmp 0x5eab
testl %r13d, %r13d
je 0x5eab
subl %r13d, %r14d
movq %rbx, %rdi
callq 0x4b0e
movl %r14d, %edi
xorl %esi, %esi
callq 0x4928
movq %rax, %r15
leaq 0xc(%rax), %rdi
movq 0x20(%rbx), %rax
movl %r13d, %ecx
leaq (%rax,%rcx), %rsi
addq $0xc, %rsi
movslq %r14d, %rdx
callq 0x21e0
movq %rbx, %rdi
movq %r15, %rsi
callq 0x4b54
movq %rbx, %rax
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::padR(unsigned int, char)
GStr& GStr::padR(uint len, char c) {
 //pad with c until total string length is len
 if (my_data->length>=len) return *this; //no room for padding
 make_unique(); //edit operation ahead
 if (my_data->cap>=len) {
	 ::memset(my_data->chars, c, len-my_data->length);
	 my_data->length=len;
	 return *this;
 }
 Data *data = new_data(len);
 ::memset(data->chars,c,len-my_data->length);
 ::memcpy(&data->chars[len-length()], my_data->chars, my_data->length);
 replace_data(data);
 return *this;
 }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x20(%rdi), %rax
cmpl %esi, 0x8(%rax)
jae 0x5f49
movl %edx, %ebp
movl %esi, %r14d
movq %rbx, %rdi
callq 0x4b0e
movq 0x20(%rbx), %rdi
cmpl %r14d, 0x4(%rdi)
jae 0x5f2e
movl %r14d, %edi
xorl %esi, %esi
callq 0x4928
movq %rax, %r15
leaq 0xc(%rax), %rdi
movq 0x20(%rbx), %rax
movl %r14d, %edx
subl 0x8(%rax), %edx
movzbl %bpl, %esi
callq 0x2190
movq 0x20(%rbx), %rsi
movl 0x8(%rsi), %edx
subl %edx, %r14d
leaq (%r15,%r14), %rdi
addq $0xc, %rdi
addq $0xc, %rsi
callq 0x21e0
movq %rbx, %rdi
movq %r15, %rsi
callq 0x4b54
jmp 0x5f49
movl %r14d, %edx
subl 0x8(%rdi), %edx
addq $0xc, %rdi
movzbl %bpl, %esi
callq 0x2190
movq 0x20(%rbx), %rax
movl %r14d, 0x8(%rax)
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::padL(unsigned int, char)
GStr& GStr::padL(uint len, char c) { //align left the string
 if (my_data->length>=len) return *this; //no room for padding
 make_unique(); //edit operation ahead
 Data *data = new_data(len);
 ::memcpy(data->chars, my_data->chars, length());
 ::memset(&data->chars[length()],c,len-length());
 replace_data(data);
 return *this;
 }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x20(%rdi), %rax
cmpl %esi, 0x8(%rax)
jae 0x5fc4
movl %edx, %ebp
movl %esi, %r14d
movq %rbx, %rdi
callq 0x4b0e
movl %r14d, %edi
xorl %esi, %esi
callq 0x4928
movq %rax, %r15
leaq 0xc(%rax), %rdi
movq 0x20(%rbx), %rsi
movslq 0x8(%rsi), %rdx
addq $0xc, %rsi
callq 0x21e0
movq 0x20(%rbx), %rax
movslq 0x8(%rax), %rax
leaq (%r15,%rax), %rdi
addq $0xc, %rdi
subl %eax, %r14d
movzbl %bpl, %esi
movq %r14, %rdx
callq 0x2190
movq %rbx, %rdi
movq %r15, %rsi
callq 0x4b54
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::padC(unsigned int, char)
GStr& GStr::padC(uint len, char c) {
 if (my_data->length>=len) return *this; //no room for padding
 make_unique(); //edit operation ahead
 uint istart=(len-length())/2;
 Data *data = new_data(len);
 if (istart>0)
      ::memset(data->chars, c, istart);
 ::memcpy(&data->chars[istart], my_data->chars, length());
 uint iend=istart+length();
 if (iend<len)
      ::memset(&data->chars[iend],c,len-iend);
 replace_data(data);
 return *this;
 }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x20(%rdi), %rax
cmpl %esi, 0x8(%rax)
jae 0x607b
movl %edx, %ebp
movl %esi, %r14d
movq %rbx, %rdi
callq 0x4b0e
movq 0x20(%rbx), %rax
movl %r14d, %r13d
subl 0x8(%rax), %r13d
movl %r13d, %r15d
shrl %r15d
movl %r14d, %edi
xorl %esi, %esi
callq 0x4928
movl %r15d, %r12d
movzbl %bpl, %ebp
cmpl $0x2, %r13d
movq %rax, %r13
jb 0x6033
leaq 0xc(%r13), %rdi
movl %ebp, %esi
movq %r12, %rdx
callq 0x2190
leaq (%r12,%r13), %rdi
addq $0xc, %rdi
movq 0x20(%rbx), %rsi
movslq 0x8(%rsi), %rdx
addq $0xc, %rsi
callq 0x21e0
movq 0x20(%rbx), %rax
addl 0x8(%rax), %r15d
subl %r15d, %r14d
jbe 0x6070
movq %r13, %rax
addq $0xc, %rax
movl %r15d, %edi
addq %rax, %rdi
movl %ebp, %esi
movq %r14, %rdx
callq 0x2190
movq %rbx, %rdi
movq %r13, %rsi
callq 0x4b54
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: operator+(char const*, GStr const&)
GStr operator+(const char *s1, const GStr& s2) {
    const int s1_length = ::strlen(s1);

    if (s1_length == 0)
        return s2;
    else {
        GStr newstring;
        newstring.prep_data(s1_length + s2.length());
        ::memcpy(newstring.chrs(), s1, s1_length);
        ::memcpy(&(newstring.chrs())[s1_length], s2.chars(), s2.length());
        return newstring;
        }
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %rbx
movq %rsi, %rdi
callq 0x2140
movq %rax, %r12
leaq 0x10(%rbx), %rax
leaq 0xe19b(%rip), %rcx      # 0x14250
movq %rcx, 0x20(%rbx)
movq $0x0, (%rbx)
movabsq $0x100000000, %rcx      # imm = 0x100000000
movq %rcx, 0x8(%rbx)
xorps %xmm0, %xmm0
testl %r12d, %r12d
je 0x611e
movups %xmm0, (%rax)
movq 0x20(%r14), %rax
movl 0x8(%rax), %esi
addl %r12d, %esi
movq %rbx, %rdi
xorl %edx, %edx
callq 0x4a2a
movq 0x20(%rbx), %r13
leaq 0xc(%r13), %rdi
movslq %r12d, %r12
movq %r15, %rsi
movq %r12, %rdx
callq 0x21e0
leaq (%r12,%r13), %rdi
addq $0xc, %rdi
movq 0x20(%r14), %rsi
movslq 0x8(%rsi), %rdx
addq $0xc, %rsi
callq 0x21e0
jmp 0x612d
movups %xmm0, (%rax)
movq 0x20(%r14), %rsi
movq %rbx, %rdi
callq 0x4b54
movq %rbx, %rax
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
movq %rax, %r14
movq %rbx, %rdi
callq 0x4e2a
movq %r14, %rdi
callq 0x2400
nop
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::operator+(GStr const&) const
GStr GStr::operator+(const GStr& s) const {
    if (length() == 0)
        return s;
    else if (s.length() == 0)
        return *this;
    else {
        GStr newstring;
        newstring.prep_data(length() + s.length());
        ::memcpy(newstring.chrs(), my_data->chars, length());
        ::memcpy(&(newstring.chrs())[length()], s.chars(), s.length());
        return newstring;
        }
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %rbx
movq 0x20(%rsi), %rsi
movl 0x8(%rsi), %ecx
testl %ecx, %ecx
je 0x61e7
movq 0x20(%r14), %rax
movl 0x8(%rax), %eax
leaq 0xe0d8(%rip), %rdx      # 0x14250
movq %rdx, 0x20(%rbx)
movq $0x0, (%rbx)
movabsq $0x100000000, %rdx      # imm = 0x100000000
movq %rdx, 0x8(%rbx)
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rbx)
testl %eax, %eax
je 0x6212
addl %ecx, %eax
movq %rbx, %rdi
movl %eax, %esi
xorl %edx, %edx
callq 0x4a2a
movq 0x20(%rbx), %r12
leaq 0xc(%r12), %rdi
movq 0x20(%r15), %rsi
movslq 0x8(%rsi), %rdx
addq $0xc, %rsi
callq 0x21e0
movq 0x20(%r15), %rax
movslq 0x8(%rax), %rax
leaq (%r12,%rax), %rdi
addq $0xc, %rdi
movq 0x20(%r14), %rsi
movslq 0x8(%rsi), %rdx
addq $0xc, %rsi
callq 0x21e0
jmp 0x621a
leaq 0xe062(%rip), %rax      # 0x14250
movq %rax, 0x20(%rbx)
movq $0x0, (%rbx)
movabsq $0x100000000, %rax      # imm = 0x100000000
movq %rax, 0x8(%rbx)
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rbx)
movq 0x20(%r14), %rsi
movq %rbx, %rdi
callq 0x4b54
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
movq %rax, %r14
movq %rbx, %rdi
callq 0x4e2a
movq %r14, %rdi
callq 0x2400
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::operator+(char const*) const
GStr GStr::operator+(const char *s) const {

    const int s_length = ::strlen(s);

    if (s_length == 0)
        return *this;
    else {
        GStr newstring;
        newstring.prep_data(length() + s_length);
        ::memcpy(newstring.chrs(), my_data->chars, length());
        ::memcpy(&(newstring.chrs())[length()], s, s_length);
        return newstring;
        }
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %rbx
movq %rdx, %rdi
callq 0x2140
movq %rax, %r12
leaq 0x10(%rbx), %rax
leaq 0xdfec(%rip), %rcx      # 0x14250
movq %rcx, 0x20(%rbx)
movq $0x0, (%rbx)
movabsq $0x100000000, %rcx      # imm = 0x100000000
movq %rcx, 0x8(%rbx)
xorps %xmm0, %xmm0
testl %r12d, %r12d
je 0x62d2
movups %xmm0, (%rax)
movq 0x20(%r15), %rax
movl 0x8(%rax), %esi
addl %r12d, %esi
movq %rbx, %rdi
xorl %edx, %edx
callq 0x4a2a
movq 0x20(%rbx), %r13
leaq 0xc(%r13), %rdi
movq 0x20(%r15), %rsi
movslq 0x8(%rsi), %rdx
addq $0xc, %rsi
callq 0x21e0
movq 0x20(%r15), %rax
movslq 0x8(%rax), %rax
leaq (%rax,%r13), %rdi
addq $0xc, %rdi
movslq %r12d, %rdx
movq %r14, %rsi
callq 0x21e0
jmp 0x62e1
movups %xmm0, (%rax)
movq 0x20(%r15), %rsi
movq %rbx, %rdi
callq 0x4b54
movq %rbx, %rax
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
movq %rax, %r14
movq %rbx, %rdi
callq 0x4e2a
movq %r14, %rdi
callq 0x2400
nop
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::operator+(int) const
GStr GStr::operator+(const int i) const {
    char buf[20];
    sprintf(buf, "%d", i);
    const int s_length = ::strlen(buf);
    GStr newstring;
    newstring.prep_data(length() + s_length);
    ::memcpy(newstring.chrs(), my_data->chars, length());
    ::memcpy(&(newstring.chrs())[length()], buf, s_length);
    return newstring;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rsi, %r14
movq %rdi, %rbx
leaq 0x7e4f(%rip), %rsi      # 0xe169
movq %rsp, %r15
movq %r15, %rdi
xorl %eax, %eax
callq 0x2080
movq %r15, %rdi
callq 0x2140
movq %rax, %r15
leaq 0xdf17(%rip), %rax      # 0x14250
movq %rax, 0x20(%rbx)
movq $0x0, (%rbx)
movabsq $0x100000000, %rax      # imm = 0x100000000
movq %rax, 0x8(%rbx)
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rbx)
movq 0x20(%r14), %rax
movl 0x8(%rax), %esi
addl %r15d, %esi
movq %rbx, %rdi
xorl %edx, %edx
callq 0x4a2a
movq 0x20(%rbx), %r12
leaq 0xc(%r12), %rdi
movq 0x20(%r14), %rsi
movslq 0x8(%rsi), %rdx
addq $0xc, %rsi
callq 0x21e0
movq 0x20(%r14), %rax
movslq 0x8(%rax), %rax
leaq (%r12,%rax), %rdi
addq $0xc, %rdi
movslq %r15d, %rdx
movq %rsp, %rsi
callq 0x21e0
movq %rbx, %rax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
movq %rax, %r14
movq %rbx, %rdi
callq 0x4e2a
movq %r14, %rdi
callq 0x2400
// File: /workspace/github_cpp_makefile_star2_O1/gpertea[P]gclib/GStr.cpp
// Function: GStr::operator+(char) const
GStr GStr::operator+(const char c) const {
    char buf[4];
    sprintf(buf, "%c", c);
    const int s_length = ::strlen(buf);
    GStr newstring;
    newstring.prep_data(length() + s_length);
    ::memcpy(newstring.chrs(), my_data->chars, length());
    ::memcpy(&(newstring.chrs())[length()], buf, s_length);
    return newstring;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
leaq 0x4(%rsp), %rdi
movb %dl, (%rdi)
movb $0x0, 0x1(%rdi)
callq 0x2140
movq %rax, %r15
leaq 0xde64(%rip), %rax      # 0x14250
movq %rax, 0x20(%rbx)
movq $0x0, (%rbx)
movabsq $0x100000000, %rax      # imm = 0x100000000
movq %rax, 0x8(%rbx)
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rbx)
movq 0x20(%r14), %rax
movl 0x8(%rax), %esi
addl %r15d, %esi
movq %rbx, %rdi
xorl %edx, %edx
callq 0x4a2a
movq 0x20(%rbx), %r12
leaq 0xc(%r12), %rdi
movq 0x20(%r14), %rsi
movslq 0x8(%rsi), %rdx
addq $0xc, %rsi
callq 0x21e0
movq 0x20(%r14), %rax
movslq 0x8(%rax), %rax
leaq (%r12,%rax), %rdi
addq $0xc, %rdi
movslq %r15d, %rdx
leaq 0x4(%rsp), %rsi
callq 0x21e0
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
movq %rax, %r14
movq %rbx, %rdi
callq 0x4e2a
movq %r14, %rdi
callq 0x2400
nop