// File: /workspace/github_cpp_makefile_star2_O2/deadshot465[P]OwoifyCpp/./owoify.h
// Function: Owoifier::owoify(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, Owoifier::OwoifyLevel)
static std::wstring owoify(const std::string& value, OwoifyLevel level = OwoifyLevel::Owo)
	{
		auto word_regex = std::basic_regex(L"[^\\s]+", std::regex_constants::ECMAScript | std::regex_constants::optimize);
		
		auto w_value = stringToWstring(value);
		
		auto word_begin = std::wsregex_iterator(w_value.cbegin(), w_value.cend(), word_regex);
		auto word_end = std::wsregex_iterator();

		auto space_regex = std::basic_regex(L"\\s+", std::regex_constants::ECMAScript | std::regex_constants::optimize);

		auto space_begin = std::wsregex_iterator(w_value.cbegin(), w_value.cend(), space_regex);
		auto space_end = std::wsregex_iterator();

		auto words = std::deque<Word>();
		std::transform(word_begin, word_end, std::back_inserter(words),
			[&](const std::wsmatch& match) {
				return Word(match.str());
			});

		auto spaces = std::deque<Word>();
		std::transform(space_begin, space_end, std::back_inserter(spaces),
			[&](const std::wsmatch& match) {
				return Word(match.str());
			});

		auto transformed_words = std::deque<Word>();
		std::transform(words.begin(), words.end(), std::back_inserter(transformed_words),
			[&](Word& word) {

				for (const auto& func : Utility::m_specificWordMappingList)
				{
					word = func(word);
				}

				switch (level)
				{
				case Owoifier::OwoifyLevel::Uvu:
					for (const auto& func : Utility::m_uvuMappingList)
					{
						word = func(word);
					}
				case Owoifier::OwoifyLevel::Uwu:
					for (const auto& func : Utility::m_uwuMappingList)
					{
						word = func(word);
					}
				case Owoifier::OwoifyLevel::Owo:
					for (const auto& func : Utility::m_owoMappingList)
					{
						word = func(word);
					}
					break;
				default:
					break;
				}
				
				return word;
			});

		auto result = Utility::interleaveArrays(words, spaces);
		return join(result);
	}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x3f0, %rsp            # imm = 0x3F0
movq %rsi, %rbx
movq %rdi, %r15
movl %edx, 0xc(%rsp)
leaq 0x10cc1(%rip), %rsi     # 0x19e00
leaq 0x50(%rsp), %rdi
pushq $0x14
popq %rdx
callq 0x7668
leaq 0x10(%rsp), %rdi
movq %rbx, %rsi
callq 0xe102
movq 0x10(%rsp), %rsi
movq 0x18(%rsp), %rax
leaq (%rsi,%rax,4), %rdx
leaq 0x250(%rsp), %rdi
leaq 0x50(%rsp), %rcx
xorl %r8d, %r8d
callq 0x986e
leaq 0x3d0(%rsp), %rbx
xorps %xmm0, %xmm0
movaps %xmm0, 0x10(%rbx)
movaps %xmm0, (%rbx)
movaps %xmm0, -0x10(%rbx)
movaps %xmm0, -0x20(%rbx)
leaq 0x10c7f(%rip), %rsi     # 0x19e1c
leaq 0x30(%rsp), %rdi
pushq $0x14
popq %rdx
callq 0x7668
movq 0x10(%rsp), %rsi
movq 0x18(%rsp), %rax
leaq (%rsi,%rax,4), %rdx
leaq 0x210(%rsp), %rdi
leaq 0x30(%rsp), %rcx
xorl %r8d, %r8d
callq 0x986e
leaq 0x390(%rsp), %r14
xorps %xmm0, %xmm0
movaps %xmm0, 0x10(%r14)
movaps %xmm0, (%r14)
movaps %xmm0, -0x10(%r14)
movaps %xmm0, -0x20(%r14)
leaq 0x70(%rsp), %rdi
movaps %xmm0, 0x40(%rdi)
movaps %xmm0, 0x30(%rdi)
movaps %xmm0, 0x20(%rdi)
movaps %xmm0, 0x10(%rdi)
movaps %xmm0, (%rdi)
callq 0xe506
leaq 0x1d0(%rsp), %rdi
leaq 0x250(%rsp), %rsi
callq 0x9902
leaq 0x190(%rsp), %rdi
leaq 0x3b0(%rsp), %rsi
callq 0x9902
leaq 0x1d0(%rsp), %rdi
leaq 0x190(%rsp), %rsi
leaq 0x70(%rsp), %rdx
callq 0xe16e
leaq 0x1b0(%rsp), %rdi
callq 0xa15a
leaq 0x1f0(%rsp), %rdi
callq 0xa15a
xorps %xmm0, %xmm0
leaq 0xc0(%rsp), %rdi
movaps %xmm0, 0x40(%rdi)
movaps %xmm0, 0x30(%rdi)
movaps %xmm0, 0x20(%rdi)
movaps %xmm0, 0x10(%rdi)
movaps %xmm0, (%rdi)
callq 0xe506
leaq 0x150(%rsp), %rdi
leaq 0x210(%rsp), %rsi
callq 0x9902
leaq 0x110(%rsp), %rdi
leaq 0x370(%rsp), %rsi
callq 0x9902
leaq 0x150(%rsp), %rdi
leaq 0x110(%rsp), %rsi
leaq 0xc0(%rsp), %rdx
callq 0xe1f4
leaq 0x130(%rsp), %rdi
callq 0xa15a
leaq 0x170(%rsp), %rdi
callq 0xa15a
xorps %xmm0, %xmm0
leaq 0x290(%rsp), %rdi
movaps %xmm0, 0x40(%rdi)
movaps %xmm0, 0x30(%rdi)
movaps %xmm0, 0x20(%rdi)
movaps %xmm0, 0x10(%rdi)
movaps %xmm0, (%rdi)
callq 0xe506
movaps 0x80(%rsp), %xmm0
movaps 0x90(%rsp), %xmm1
movaps 0xa0(%rsp), %xmm2
movaps 0xb0(%rsp), %xmm3
leaq 0x350(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm1, 0x10(%rdi)
leaq 0x330(%rsp), %rsi
movaps %xmm2, (%rsi)
movaps %xmm3, 0x10(%rsi)
leaq 0x290(%rsp), %rdx
leaq 0xc(%rsp), %rcx
callq 0xe27a
leaq 0x2e0(%rsp), %rdi
leaq 0x70(%rsp), %rsi
leaq 0xc0(%rsp), %rdx
callq 0xe2f2
leaq 0x2e0(%rsp), %rsi
movq %r15, %rdi
callq 0xe41c
leaq 0x2e0(%rsp), %rdi
callq 0xe4ba
leaq 0x290(%rsp), %rdi
callq 0xe4ba
leaq 0xc0(%rsp), %rdi
callq 0xe4ba
leaq 0x70(%rsp), %rdi
callq 0xe4ba
movq %r14, %rdi
callq 0xa15a
leaq 0x230(%rsp), %rdi
callq 0xa15a
leaq 0x30(%rsp), %rdi
callq 0x76ce
movq %rbx, %rdi
callq 0xa15a
leaq 0x270(%rsp), %rdi
callq 0xa15a
leaq 0x10(%rsp), %rdi
callq 0x5060
leaq 0x50(%rsp), %rdi
callq 0x76ce
movq %r15, %rax
addq $0x3f0, %rsp            # imm = 0x3F0
popq %rbx
popq %r14
popq %r15
retq
movq %rax, %r15
leaq 0x2e0(%rsp), %rdi
callq 0xe4ba
jmp 0x9427
jmp 0x9424
movq %rax, %r15
leaq 0x290(%rsp), %rdi
callq 0xe4ba
jmp 0x945f
jmp 0x945c
movq %rax, %r15
leaq 0x130(%rsp), %rdi
callq 0xa15a
jmp 0x944d
movq %rax, %r15
leaq 0x170(%rsp), %rdi
callq 0xa15a
jmp 0x945f
movq %rax, %r15
leaq 0xc0(%rsp), %rdi
callq 0xe4ba
jmp 0x9497
jmp 0x9494
movq %rax, %r15
leaq 0x1b0(%rsp), %rdi
callq 0xa15a
jmp 0x9485
movq %rax, %r15
leaq 0x1f0(%rsp), %rdi
callq 0xa15a
jmp 0x9497
movq %rax, %r15
leaq 0x70(%rsp), %rdi
callq 0xe4ba
movq %r14, %rdi
callq 0xa15a
leaq 0x230(%rsp), %rdi
callq 0xa15a
leaq 0x30(%rsp), %rdi
callq 0x76ce
movq %rbx, %rdi
callq 0xa15a
leaq 0x270(%rsp), %rdi
callq 0xa15a
leaq 0x10(%rsp), %rdi
callq 0x5060
leaq 0x50(%rsp), %rdi
callq 0x76ce
movq %r15, %rdi
callq 0x54a0
movq %rax, %r15
jmp 0x94a1
movq %rax, %r15
jmp 0x94b6
movq %rax, %r15
jmp 0x94c0
movq %rax, %r15
jmp 0x94d5
movq %rax, %r15
jmp 0x94df