// File: ef-gy[P]libefgy/include/ef.gy/big-integers.h
// Function: efgy::math::numeric::bigIntegers<long long, unsigned long long, unsigned int, 32u>::operator<<=(unsigned int const&)
bigIntegers &operator<<=(const cellType &b) {
    if (*this == zero()) {
      return *this;
    }

    if (b == zero()) {
      return *this;
    }

    if ((cell.size() * cellBitCount + b) <= longBitCount) {
      *this = bigIntegers((*this).toInteger() << b, false);
      return *this;
    }

    if (b < cellBitCount) {
      const cellType &q = b;
      const cellType negQ = (cellBitCount - q);
      const cellType mask = ((1 << q) - 1) << negQ;

      if ((cell[(cell.size() - 1)] & mask) == 0) {
        /* no additional cells needed */
        cellType overflow = 0;

        for (cellType i = 0; i < cell.size(); i++) {
          cellType newContent = (cell[i] << q) | overflow;
          overflow = (cell[i] & mask) >> negQ;
          cell[i] = newContent;
        }

        return *this;
      }
    }

    return (*this = (*this << b));
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xd0, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rdi
movq %rdi, -0x98(%rbp)
leaq -0x19(%rbp), %rsi
callq 0x3d1a0
testb $0x1, %al
jne 0xfb3d
jmp 0xfb4d
movq -0x98(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xfdad
movq -0x18(%rbp), %rdi
leaq -0x1a(%rbp), %rsi
callq 0x3d1d0
testb $0x1, %al
jne 0xfb60
jmp 0xfb70
movq -0x98(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xfdad
movq -0x98(%rbp), %rdi
addq $0x8, %rdi
callq 0x3c9c0
shlq $0x5, %rax
movq -0x18(%rbp), %rcx
movl (%rcx), %ecx
addq %rcx, %rax
cmpq $0x40, %rax
ja 0xfc05
movq -0x98(%rbp), %rdi
callq 0x3d1f0
movq %rax, %rsi
movq -0x18(%rbp), %rax
movb (%rax), %cl
shlq %cl, %rsi
leaq -0x40(%rbp), %rdi
movq %rdi, -0xa0(%rbp)
xorl %edx, %edx
callq 0x3d290
movq -0x98(%rbp), %rdi
movq -0xa0(%rbp), %rsi
callq 0x3d420
jmp 0xfbd2
leaq -0x40(%rbp), %rdi
callq 0x10260
movq -0x98(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xfdad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x10260
jmp 0xfdba
movq -0x18(%rbp), %rax
cmpl $0x20, (%rax)
jae 0xfd40
movq -0x98(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rcx
movl $0x20, %eax
subl (%rcx), %eax
movl %eax, -0x5c(%rbp)
movq -0x58(%rbp), %rax
movl (%rax), %ecx
movl $0x1, %eax
shll %cl, %eax
subl $0x1, %eax
movl -0x5c(%rbp), %ecx
shll %cl, %eax
movl %eax, -0x60(%rbp)
movq %rdi, %rax
addq $0x8, %rax
movq %rax, -0xa8(%rbp)
addq $0x8, %rdi
callq 0x3c9c0
movq -0xa8(%rbp), %rdi
movq %rax, %rsi
subq $0x1, %rsi
callq 0x3c3f0
movl (%rax), %eax
andl -0x60(%rbp), %eax
cmpl $0x0, %eax
jne 0xfd3e
movl $0x0, -0x64(%rbp)
movl $0x0, -0x68(%rbp)
movq -0x98(%rbp), %rdi
movl -0x68(%rbp), %eax
movq %rax, -0xb0(%rbp)
addq $0x8, %rdi
callq 0x3c9c0
movq %rax, %rcx
movq -0xb0(%rbp), %rax
cmpq %rcx, %rax
jae 0xfd31
movq -0x98(%rbp), %rdi
addq $0x8, %rdi
movl -0x68(%rbp), %eax
movl %eax, %esi
callq 0x3c3f0
movq -0x98(%rbp), %rdi
movl (%rax), %eax
movq -0x58(%rbp), %rcx
movl (%rcx), %ecx
shll %cl, %eax
orl -0x64(%rbp), %eax
movl %eax, -0x6c(%rbp)
addq $0x8, %rdi
movl -0x68(%rbp), %eax
movl %eax, %esi
callq 0x3c3f0
movq -0x98(%rbp), %rdi
movl (%rax), %eax
andl -0x60(%rbp), %eax
movl -0x5c(%rbp), %ecx
shrl %cl, %eax
movl %eax, -0x64(%rbp)
movl -0x6c(%rbp), %eax
movl %eax, -0xb4(%rbp)
addq $0x8, %rdi
movl -0x68(%rbp), %eax
movl %eax, %esi
callq 0x3c3f0
movl -0xb4(%rbp), %ecx
movl %ecx, (%rax)
movl -0x68(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x68(%rbp)
jmp 0xfc8d
movq -0x98(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xfdad
jmp 0xfd40
movq -0x98(%rbp), %rsi
movq -0x18(%rbp), %rdx
leaq -0x90(%rbp), %rdi
movq %rdi, -0xc8(%rbp)
callq 0x3d470
movq -0x98(%rbp), %rdi
movq -0xc8(%rbp), %rsi
callq 0x3d420
movq %rax, -0xc0(%rbp)
jmp 0xfd7a
movq -0xc0(%rbp), %rax
movq %rax, -0x8(%rbp)
leaq -0x90(%rbp), %rdi
callq 0x10260
jmp 0xfdad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x90(%rbp), %rdi
callq 0x10260
jmp 0xfdba
movq -0x8(%rbp), %rax
addq $0xd0, %rsp
popq %rbp
retq
movq -0x48(%rbp), %rdi
callq 0x55e0
nopw %cs:(%rax,%rax)
nopl (%rax)