// File: WeihuaZhu[P]hpc_prog2/./gtest/gtest-all.cc
// Function: testing::internal::DefaultDeathTestFactory::Create(char const*, testing::internal::RE const*, char const*, int, testing::internal::DeathTest**)
bool DefaultDeathTestFactory::Create(const char* statement, const RE* regex,
                                     const char* file, int line,
                                     DeathTest** test) {
  UnitTestImpl* const impl = GetUnitTestImpl();
  const InternalRunDeathTestFlag* const flag =
      impl->internal_run_death_test_flag();
  const int death_test_index = impl->current_test_info()
      ->increment_death_test_count();

  if (flag != NULL) {
    if (death_test_index > flag->index()) {
      DeathTest::set_last_death_test_message(
          "Death test count (" + StreamableToString(death_test_index)
          + ") somehow exceeded expected maximum ("
          + StreamableToString(flag->index()) + ")");
      return false;
    }

    if (!(flag->file() == file && flag->line() == line &&
          flag->index() == death_test_index)) {
      *test = NULL;
      return true;
    }
  }

# if GTEST_OS_WINDOWS

  if (GTEST_FLAG(death_test_style) == "threadsafe" ||
      GTEST_FLAG(death_test_style) == "fast") {
    *test = new WindowsDeathTest(statement, regex, file, line);
  }

# else

  if (GTEST_FLAG(death_test_style) == "threadsafe") {
    *test = new ExecDeathTest(statement, regex, file, line);
  } else if (GTEST_FLAG(death_test_style) == "fast") {
    *test = new NoExecDeathTest(statement, regex);
  }

# endif  // GTEST_OS_WINDOWS

  else {  // NOLINT - this is more readable than unbalanced brackets inside #if.
    DeathTest::set_last_death_test_message(
        "Unknown death test style \"" + GTEST_FLAG(death_test_style)
        + "\" encountered");
    return false;
  }

// Assembly:
subq $0x198, %rsp            # imm = 0x198
movq %rdi, 0x188(%rsp)
movq %rsi, 0x180(%rsp)
movq %rdx, 0x178(%rsp)
movq %rcx, 0x170(%rsp)
movl %r8d, 0x16c(%rsp)
movq %r9, 0x160(%rsp)
callq 0x32df0
movq %rax, 0x158(%rsp)
movq 0x158(%rsp), %rdi
callq 0x39dc0
movq %rax, 0x150(%rsp)
movq 0x158(%rsp), %rdi
callq 0x35530
movq %rax, %rdi
callq 0x3a450
movl %eax, 0x14c(%rsp)
cmpq $0x0, 0x150(%rsp)
je 0x2e9af
movl 0x14c(%rsp), %eax
movl %eax, 0x2c(%rsp)
movq 0x150(%rsp), %rdi
callq 0x3a470
movl %eax, %ecx
movl 0x2c(%rsp), %eax
cmpl %ecx, %eax
jle 0x2e942
leaq 0xa8(%rsp), %rdi
movq %rdi, 0x20(%rsp)
leaq 0x14c(%rsp), %rsi
callq 0x370b0
movq 0x20(%rsp), %rdx
leaq 0x1f2ee(%rip), %rsi     # 0x4da5e
leaq 0xc8(%rsp), %rdi
callq 0x34590
jmp 0x2e77f
leaq 0x1f2eb(%rip), %rdx     # 0x4da71
leaq 0xe8(%rsp), %rdi
leaq 0xc8(%rsp), %rsi
callq 0x32c70
jmp 0x2e79d
movq 0x150(%rsp), %rdi
callq 0x3a470
movl %eax, 0x1c(%rsp)
jmp 0x2e7b0
movl 0x1c(%rsp), %eax
movl %eax, 0x74(%rsp)
leaq 0x78(%rsp), %rdi
leaq 0x74(%rsp), %rsi
callq 0x370b0
jmp 0x2e7c9
leaq 0x108(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
leaq 0x78(%rsp), %rdx
callq 0x36fc0
jmp 0x2e7e5
leaq 0x1e7bc(%rip), %rdx     # 0x4cfa8
leaq 0x128(%rsp), %rdi
leaq 0x108(%rsp), %rsi
callq 0x32c70
jmp 0x2e803
leaq 0x128(%rsp), %rdi
callq 0x296a0
jmp 0x2e812
leaq 0x128(%rsp), %rdi
callq 0xf698
leaq 0x108(%rsp), %rdi
callq 0xf698
leaq 0x78(%rsp), %rdi
callq 0xf698
leaq 0xe8(%rsp), %rdi
callq 0xf698
leaq 0xc8(%rsp), %rdi
callq 0xf698
leaq 0xa8(%rsp), %rdi
callq 0xf698
movb $0x0, 0x197(%rsp)
jmp 0x2eb6a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xa0(%rsp)
movl %eax, 0x9c(%rsp)
jmp 0x2e930
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xa0(%rsp)
movl %eax, 0x9c(%rsp)
jmp 0x2e923
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xa0(%rsp)
movl %eax, 0x9c(%rsp)
jmp 0x2e916
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xa0(%rsp)
movl %eax, 0x9c(%rsp)
jmp 0x2e90c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xa0(%rsp)
movl %eax, 0x9c(%rsp)
jmp 0x2e8ff
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xa0(%rsp)
movl %eax, 0x9c(%rsp)
leaq 0x128(%rsp), %rdi
callq 0xf698
leaq 0x108(%rsp), %rdi
callq 0xf698
leaq 0x78(%rsp), %rdi
callq 0xf698
leaq 0xe8(%rsp), %rdi
callq 0xf698
leaq 0xc8(%rsp), %rdi
callq 0xf698
leaq 0xa8(%rsp), %rdi
callq 0xf698
jmp 0x2eb7b
movq 0x150(%rsp), %rdi
callq 0x3a480
movq %rax, %rdi
movq 0x170(%rsp), %rsi
callq 0x38240
testb $0x1, %al
jne 0x2e965
jmp 0x2e991
movq 0x150(%rsp), %rdi
callq 0x3a490
cmpl 0x16c(%rsp), %eax
jne 0x2e991
movq 0x150(%rsp), %rdi
callq 0x3a470
cmpl 0x14c(%rsp), %eax
je 0x2e9ad
movq 0x160(%rsp), %rax
movq $0x0, (%rax)
movb $0x1, 0x197(%rsp)
jmp 0x2eb6a
jmp 0x2e9af
leaq 0x37372(%rip), %rdi     # 0x65d28
leaq 0x1edb6(%rip), %rsi     # 0x4d773
callq 0x38240
testb $0x1, %al
jne 0x2e9c8
jmp 0x2ea41
movl $0x40, %edi
callq 0xea20
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x10(%rsp)
movq 0x180(%rsp), %rsi
movq 0x178(%rsp), %rdx
movq 0x170(%rsp), %rcx
movl 0x16c(%rsp), %r8d
callq 0x3a4a0
jmp 0x2ea04
movq 0x10(%rsp), %rcx
movq 0x160(%rsp), %rax
movq %rcx, (%rax)
jmp 0x2eb62
movq 0x10(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xa0(%rsp)
movl %eax, 0x9c(%rsp)
movl $0x40, %esi
callq 0xea60
jmp 0x2eb7b
leaq 0x372e0(%rip), %rdi     # 0x65d28
leaq 0x1f048(%rip), %rsi     # 0x4da97
callq 0x38240
testb $0x1, %al
jne 0x2ea5a
jmp 0x2eac3
movl $0x30, %edi
callq 0xea20
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x8(%rsp)
movq 0x180(%rsp), %rsi
movq 0x178(%rsp), %rdx
callq 0x3a500
jmp 0x2ea86
movq 0x8(%rsp), %rcx
movq 0x160(%rsp), %rax
movq %rcx, (%rax)
jmp 0x2eb60
movq 0x8(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xa0(%rsp)
movl %eax, 0x9c(%rsp)
movl $0x30, %esi
callq 0xea60
jmp 0x2eb7b
leaq 0x1efd2(%rip), %rsi     # 0x4da9c
leaq 0x37257(%rip), %rdx     # 0x65d28
leaq 0x30(%rsp), %rdi
movq %rdi, (%rsp)
callq 0x3a550
movq (%rsp), %rsi
leaq 0x1efcd(%rip), %rdx     # 0x4dab7
leaq 0x50(%rsp), %rdi
callq 0x32c70
jmp 0x2eaf6
leaq 0x50(%rsp), %rdi
callq 0x296a0
jmp 0x2eb02
leaq 0x50(%rsp), %rdi
callq 0xf698
leaq 0x30(%rsp), %rdi
callq 0xf698
movb $0x0, 0x197(%rsp)
jmp 0x2eb6a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xa0(%rsp)
movl %eax, 0x9c(%rsp)
jmp 0x2eb54
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xa0(%rsp)
movl %eax, 0x9c(%rsp)
leaq 0x50(%rsp), %rdi
callq 0xf698
leaq 0x30(%rsp), %rdi
callq 0xf698
jmp 0x2eb7b
jmp 0x2eb62
movb $0x1, 0x197(%rsp)
movb 0x197(%rsp), %al
andb $0x1, %al
addq $0x198, %rsp            # imm = 0x198
retq
movq 0xa0(%rsp), %rdi
callq 0xf410
nopl (%rax,%rax)