// File: /workspace/github_cpp_makefile_star2_O2/ksabry[P]bfbrute/src/ProgramIterator.h
// Function: ProgramIterator<400ul, 32ul, 12ul, 32ul>::Deserialize(std::istream&)
bool Deserialize(std::istream& input)
	{
		serializeLock.lock();

		input >> programSize >> threadOffset >> threadDelta;
		input >> currentCount;
		input >> iteratorCount;
		for (uint_fast32_t i = 0; i < iteratorCount; i++)
		{
			input >> iteratorSizes[i];
		}
		for (uint_fast32_t i = 0; i < iteratorCount; i++)
		{
			if (!iterators[i].Deserialize(input))
			{
				serializeLock.unlock();
				return false;
			}
		}
		for (uint_fast32_t i = 0; i < iteratorCount - 1; i++)
		{
			int bracketInt;
			input >> bracketInt >> brackets[i].depth;
			brackets[i].bracket = bracketInt == 0 ? Bracket::EMPTY : bracketInt == 1 ? Bracket::LEFT : Bracket::RIGHT;
		}
		for (uint_fast32_t i = 0; i < iteratorCount - 1; i++)
		{
			input >> jumps[i].zero >> jumps[i].nonzero;
		}
		input >> iteratorIdx >> bracketIdx >> remainingSize;
		input >> firstIteratorWithNonZeroDataDelta >> lastExecutionSuccessful >> lastExecutionMaxProgramIdx;

		serializeLock.unlock();
		return true;
	}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rsi, %r15
movq %rdi, %rbx
leaq 0x4248(%rdi), %rbp
movq %rbp, %rdi
callq 0x48fe
leaq 0x18(%rbx), %rsi
movq %r15, %rdi
callq 0x20f0
leaq 0x8(%rbx), %rsi
movq %rax, %rdi
callq 0x20f0
leaq 0x10(%rbx), %rsi
movq %rax, %rdi
callq 0x20f0
leaq 0x4270(%rbx), %rsi
movq %r15, %rdi
callq 0x20f0
leaq 0x20(%rbx), %r12
movq %r15, %rdi
movq %r12, %rsi
callq 0x20f0
movq %rbx, (%rsp)
leaq 0x28(%rbx), %r13
xorl %ebx, %ebx
cmpq (%r12), %rbx
jae 0x4d1f
movq %r15, %rdi
movq %r13, %rsi
callq 0x2240
incq %rbx
addq $0x8, %r13
jmp 0x4d05
movq (%rsp), %rax
leaq 0x128(%rax), %rdi
pushq $-0x1
popq %rbx
movq (%r12), %r14
incq %rbx
cmpq %r14, %rbx
jae 0x4d57
leaq 0x1e8(%rdi), %r13
movq %r15, %rsi
callq 0x501e
movq %r13, %rdi
testb %al, %al
jne 0x4d2d
movq %rbp, %rdi
jmp 0x4e55
movq %rbp, 0x10(%rsp)
movq (%rsp), %rax
leaq 0x3e38(%rax), %r13
xorl %ebp, %ebp
movq %r14, %rax
leaq -0x1(%rax), %rcx
cmpq %rcx, %rbp
jae 0x4db1
movq %r15, %rdi
leaq 0xc(%rsp), %rsi
callq 0x2110
movq %rax, %rdi
movq %r13, %rsi
callq 0x20f0
movl 0xc(%rsp), %eax
xorl %ecx, %ecx
cmpl $0x1, %eax
setne %cl
incl %ecx
testl %eax, %eax
cmovel %eax, %ecx
movl %ecx, -0x8(%r13)
incq %rbp
movq (%r12), %rax
addq $0x10, %r13
jmp 0x4d6c
movq (%rsp), %rcx
leaq 0x4030(%rcx), %r13
xorl %ebp, %ebp
decq %rax
cmpq %rax, %rbp
jae 0x4dea
movq %r15, %rdi
movq %r13, %rsi
callq 0x20f0
leaq 0x8(%r13), %rsi
movq %rax, %rdi
callq 0x20f0
incq %rbp
movq (%r12), %rax
addq $0x10, %r13
jmp 0x4dbe
movq (%rsp), %r12
leaq 0x4238(%r12), %rsi
movq %r15, %rdi
callq 0x2240
leaq 0x4230(%r12), %rsi
movq %rax, %rdi
callq 0x2240
leaq 0x3e28(%r12), %rsi
movq %rax, %rdi
callq 0x2240
leaq 0x4240(%r12), %rsi
movq %r15, %rdi
callq 0x2240
leaq 0x4468(%r12), %rsi
movq %rax, %rdi
callq 0x21b0
addq $0x4470, %r12           # imm = 0x4470
movq %rax, %rdi
movq %r12, %rsi
callq 0x20f0
movq 0x10(%rsp), %rdi
callq 0x2170
cmpq %r14, %rbx
setae %al
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq