// File: /workspace/github_c_makefile_star2_O3/enzo1982[P]smooth/classes/net/protocols/http.cpp
// Function: smooth::Net::Protocols::HTTP::DownloadToFile(smooth::String const&)
S::Int S::Net::Protocols::HTTP::DownloadToFile(const String &fileName)
{
	/* Create a cURL context.
	 */
	Bool	 error = False;
	CURL	*curl  = curl_easy_init();

	if (!curl) return Error();

	/* Set HTTP method.
	 */
	for (Int i = 0; i < requestParameters.Length(); i++)
	{
		if (requestParameters.GetNth(i).isFile) { mode = HTTP_METHOD_POST; break; }
	}

	if (content != NIL) mode = HTTP_METHOD_POST;

	if	(mode == HTTP_METHOD_POST) curl_easy_setopt(curl, CURLOPT_POST, 1L);
	else if (mode == HTTP_METHOD_GET)  curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);

	/* Set parameters.
	 */
	String		 url	 = this->url;
	curl_slist	*headers = NULL;

	if (requestParameters.Length() > 0)
	{
		if	(mode == HTTP_METHOD_GET)  url.Append("?").Append(GetParametersURLEncoded());
		else if (mode == HTTP_METHOD_POST) curl_easy_setopt(curl, CURLOPT_POSTFIELDS, (char *) GetParametersURLEncoded());
	}

	/* Set headers.
	 */
	foreach (const Parameter &field, requestFields) headers = curl_slist_append(headers, String(field.key).Append(": ").Append(field.value));

	/* Check to see if we are to transfer any files.
	 */
	Bool	 haveFiles = False;

	for (Int i = 0; i < requestParameters.Length(); i++)
	{
		if (requestParameters.GetNth(i).isFile) { haveFiles = True; break; }
	}

	/* Set content.
	 */
	Buffer<UnsignedByte>	 postBuffer;

	if (content != NIL)
	{
		headers = curl_slist_append(headers, "Content-Type: text/plain; charset=UTF-8");

		curl_easy_setopt(curl, CURLOPT_POSTFIELDS, (char *) content.ConvertTo("UTF-8"));
	}
	else if (haveFiles)
	{
		String	 separator = "THIS_STRING_SEPARATES";

		headers = curl_slist_append(headers, String("Content-Type: multipart/form-data; boundary=").Append(separator));

		/* Write contents to temporary output file.
		 */
		Math::RandomSeed();

		S::File		 tempFile = S::System::System::GetTempDirectory().Append("httprequest-").Append(Number((Int64) Math::Random() & 0x7FFFFFFF).ToHexString()).Append(".temp");
		IO::OutStream	 out(IO::STREAM_FILE, tempFile, IO::OS_REPLACE);

		out.OutputString(String("--").Append(separator).Append("\r\n"));
		out.OutputString("Content-Disposition: form-data; name=\"MAX_FILE_SIZE\"\r\n\r\n");
		out.OutputString("1000000\r\n");

		foreach (const Parameter &parameter, requestParameters)
		{
			out.OutputString(String("--").Append(separator).Append("\r\n"));

			if (!parameter.isFile)
			{
				out.OutputString(String("Content-Disposition: form-data; name=\"").Append(parameter.key).Append("\"\r\n\r\n"));
				out.OutputString(String(parameter.value).Append("\r\n"));
			}
			else
			{
				out.OutputString(String("Content-Disposition: form-data; name=\"").Append(parameter.key).Append("\"; filename=\"").Append(parameter.value).Append("\"\r\n\r\n"));

				IO::InStream	 in(IO::STREAM_FILE, parameter.value, IO::IS_READ);

				for (Int i = 0; i < in.Size(); i++) out.OutputNumber(in.InputNumber(1), 1);

				out.OutputString("\r\n");
			}
		}

		out.OutputString(String("--").Append(separator).Append("--"));

		out.Close();

		/* Read contents into buffer.
		 */
		IO::InStream	 in(IO::STREAM_FILE, tempFile, IO::IS_READ);

		postBuffer.Resize(in.Size());

		for (Int i = 0; i < in.Size(); i++) postBuffer[i] = in.InputNumber(1);

		in.Close();

		tempFile.Delete();

		curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, postBuffer.Size());
		curl_easy_setopt(curl, CURLOPT_POSTFIELDS, (char *) (UnsignedByte *) postBuffer);
	}

	/* Set URL and basic parameters.
	 */
	curl_easy_setopt(curl, CURLOPT_URL, (char *) url);
	curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
	curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
	curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);

	/* Set proxy information.
	 */
	if (proxyMode != HTTP_PROXY_NONE)
	{
		curl_easy_setopt(curl, CURLOPT_PROXY, (char *) proxy);
		curl_easy_setopt(curl, CURLOPT_PROXYPORT, proxyPort);

		char	*curlProxyUser = proxyUser != NIL ? curl_easy_escape(curl, proxyUser, 0) : NIL;
		char	*curlProxyPass = proxyPass != NIL ? curl_easy_escape(curl, proxyPass, 0) : NIL;

		curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, (char *) String(curlProxyUser).Append(":").Append(curlProxyPass));

		curl_free(curlProxyUser);
		curl_free(curlProxyPass);

		if	(proxyMode == HTTP_PROXY_HTTP)	 curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);

#if LIBCURL_VERSION_NUM >= 0x073400
		else if (proxyMode == HTTP_PROXY_HTTPS)	 curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTPS);
#endif

#if LIBCURL_VERSION_NUM >= 0x071200
		else if (proxyMode == HTTP_PROXY_SOCKS4) curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4A);
#else
		else if (proxyMode == HTTP_PROXY_SOCKS4) curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
#endif

#if LIBCURL_VERSION_NUM >= 0x071200
		else if (proxyMode == HTTP_PROXY_SOCKS5) curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);
#else
		else if (proxyMode == HTTP_PROXY_SOCKS5) curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
#endif
	}

	/* Set callback functions.
	 */
	curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, &httpHeader);
	curl_easy_setopt(curl, CURLOPT_HEADERDATA, this);

	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &httpWrite);
	curl_easy_setopt(curl, CURLOPT_WRITEDATA, this);

	curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, &httpProgress);
	curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, this);

	/* Setup files and issue request.
	 */
	ulStart	= 0;
	dlStart	= 0;

	file	= fileName;
	out	= new IO::OutStream(IO::STREAM_FILE, fileName, IO::OS_REPLACE);

	if (curl_easy_perform(curl) != CURLE_OK) error = True;

	delete out;

	/* Clean up.
	 */
	curl_slist_free_all(headers);
	curl_easy_cleanup(curl);

	if (!error) return Success();
	else	    return Error();
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x318, %rsp            # imm = 0x318
movq %rsi, 0x48(%rsp)
movq %rdi, %r15
callq 0x583c0
testq %rax, %rax
je 0xad49b
movq %rax, %r14
leaq 0x178(%r15), %rax
movq %rax, 0x30(%rsp)
cmpl $0x0, 0x180(%r15)
jle 0xad4af
xorl %ebx, %ebx
movq 0x30(%rsp), %rdi
movl %ebx, %esi
callq 0xaf0aa
cmpb $0x1, 0x30(%rax)
je 0xad4a5
incl %ebx
cmpl 0x180(%r15), %ebx
jl 0xad47c
jmp 0xad4af
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
jmp 0xae119
movw $0x1, 0xc8(%r15)
leaq 0x270(%r15), %rdi
movq %rdi, 0x38(%rsp)
xorl %esi, %esi
callq 0x56bd0
testb %al, %al
je 0xad4d2
movw $0x1, 0xc8(%r15)
jmp 0xad4ea
movzwl 0xc8(%r15), %eax
cmpl $0x1, %eax
je 0xad4ea
testl %eax, %eax
jne 0xad4fe
movl $0x50, %esi
jmp 0xad4ef
movl $0x2f, %esi
movl $0x1, %edx
movq %r14, %rdi
xorl %eax, %eax
callq 0x57df0
leaq 0x8(%r15), %rsi
leaq 0x1e0(%rsp), %rdi
callq 0x570b0
cmpl $0x0, 0x180(%r15)
jle 0xad5c9
movzwl 0xc8(%r15), %eax
cmpl $0x1, %eax
je 0xad58d
testl %eax, %eax
jne 0xad5c9
leaq 0x45d19(%rip), %rsi     # 0xf3252
leaq 0x210(%rsp), %rdi
callq 0x579f0
leaq 0x1e0(%rsp), %rdi
leaq 0x210(%rsp), %rsi
callq 0x562f0
movq %rax, %rbx
leaq 0xa8(%rsp), %rdi
movq %r15, %rsi
callq 0x58c90
leaq 0xa8(%rsp), %rsi
movq %rbx, %rdi
callq 0x562f0
leaq 0xa8(%rsp), %rdi
callq 0x59200
jmp 0xad5bc
leaq 0x210(%rsp), %rdi
movq %r15, %rsi
callq 0x58c90
leaq 0x210(%rsp), %rdi
callq 0x585e0
movq %r14, %rdi
movl $0x271f, %esi           # imm = 0x271F
movq %rax, %rdx
xorl %eax, %eax
callq 0x57df0
leaq 0x210(%rsp), %rdi
callq 0x59200
movq %r14, 0x40(%rsp)
cmpl $0x0, 0x128(%r15)
movq %r15, 0x8(%rsp)
jle 0xad689
leaq 0x120(%r15), %r14
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
movq $0x0, 0x10(%rsp)
leaq 0x210(%rsp), %r15
leaq 0x6f368(%rip), %r13     # 0x11c96d
leaq 0xa8(%rsp), %rbx
incl %ebp
movq %r14, %rdi
movl %ebp, %esi
callq 0xaf106
movq %rax, %r12
movq %r15, %rdi
movq %rax, %rsi
callq 0x570b0
movq %rbx, %rdi
movq %r13, %rsi
callq 0x579f0
movq %r15, %rdi
movq %rbx, %rsi
callq 0x562f0
addq $0x18, %r12
movq %rax, %rdi
movq %r12, %rsi
callq 0x562f0
movq %rax, %rdi
callq 0x585e0
movq 0x10(%rsp), %rdi
movq %rax, %rsi
callq 0x570a0
movq %rax, 0x10(%rsp)
movq %rbx, %rdi
callq 0x59200
movq %r15, %rdi
callq 0x59200
movq 0x8(%rsp), %rax
movl 0x128(%rax), %eax
decl %eax
cmpl %eax, %ebp
jl 0xad60d
jmp 0xad692
movq $0x0, 0x10(%rsp)
xorl %ebx, %ebx
movq 0x8(%rsp), %rax
cmpl $0x0, 0x180(%rax)
movq 0x40(%rsp), %r13
jle 0xad6d3
movq 0x38(%rsp), %r14
movq 0x30(%rsp), %rdi
movl %ebx, %esi
callq 0xaf0aa
movb 0x30(%rax), %bpl
cmpb $0x1, %bpl
je 0xad6da
incl %ebx
movq 0x8(%rsp), %rax
cmpl 0x180(%rax), %ebx
jl 0xad6ac
jmp 0xad6da
xorl %ebp, %ebp
movq 0x38(%rsp), %r14
leaq 0xb286f(%rip), %r12     # 0x15ff50
movq %r12, 0x50(%rsp)
xorps %xmm0, %xmm0
movups %xmm0, 0x58(%rsp)
movq %r14, %rdi
xorl %esi, %esi
callq 0x56bd0
testb %al, %al
je 0xad738
leaq 0x64bb1(%rip), %rsi     # 0x1122b4
movq 0x10(%rsp), %rdi
callq 0x570a0
movq %rax, 0x10(%rsp)
leaq 0x64bbd(%rip), %rsi     # 0x1122d6
movq %r14, %rdi
callq 0x57940
movq %r13, %rdi
movl $0x271f, %esi           # imm = 0x271F
movq %rax, %rdx
xorl %eax, %eax
callq 0x57df0
jmp 0xade16
testb %bpl, %bpl
je 0xade16
leaq 0x64b94(%rip), %rsi     # 0x1122dc
leaq 0x80(%rsp), %rdi
callq 0x579f0
leaq 0x64b96(%rip), %rsi     # 0x1122f2
leaq 0x210(%rsp), %rdi
callq 0x579f0
leaq 0x210(%rsp), %rdi
leaq 0x80(%rsp), %rsi
callq 0x562f0
movq 0x8(%rsp), %r14
movq %rax, %rdi
callq 0x585e0
movq 0x10(%rsp), %rdi
movq %rax, %rsi
callq 0x570a0
movq %rax, 0x10(%rsp)
leaq 0x210(%rsp), %rdi
callq 0x59200
callq 0x55890
leaq 0x210(%rsp), %rdi
callq 0x57ed0
leaq 0x64b5c(%rip), %rsi     # 0x11231f
leaq 0xa8(%rsp), %rdi
callq 0x579f0
leaq 0x210(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x562f0
movq %rax, %rbx
callq 0x55fc0
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0x98(%rsp), %rdi
movq %rax, %rsi
callq 0x59050
leaq 0x18(%rsp), %rdi
leaq 0x98(%rsp), %rsi
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
callq 0x57780
leaq 0x18(%rsp), %rsi
movq %rbx, %rdi
callq 0x562f0
movq %rax, %rbx
leaq 0x64afc(%rip), %rsi     # 0x11232c
leaq 0x68(%rsp), %rdi
callq 0x579f0
leaq 0x68(%rsp), %rsi
movq %rbx, %rdi
callq 0x562f0
movq %rax, %rbx
leaq 0x1f8(%rsp), %rdi
xorl %esi, %esi
callq 0x58e20
leaq 0x1b0(%rsp), %rdi
leaq 0x1f8(%rsp), %rdx
movq %rbx, %rsi
callq 0x56800
leaq 0x1f8(%rsp), %rdi
callq 0x59200
leaq 0x68(%rsp), %rdi
callq 0x59200
leaq 0x18(%rsp), %rdi
callq 0x59200
leaq 0x98(%rsp), %rdi
callq 0x58d60
leaq 0xa8(%rsp), %rdi
callq 0x59200
leaq 0x210(%rsp), %rdi
callq 0x59200
leaq 0xa8(%rsp), %rdi
leaq 0x1b0(%rsp), %rsi
callq 0x58fa0
leaq 0x210(%rsp), %rdi
leaq 0xa8(%rsp), %rdx
movl $0x3, %esi
movl $0x1, %ecx
callq 0x582f0
leaq 0xa8(%rsp), %rdi
callq 0x59200
leaq 0x66a91(%rip), %rsi     # 0x114392
leaq 0xa8(%rsp), %rdi
callq 0x579f0
leaq 0xa8(%rsp), %rdi
leaq 0x80(%rsp), %rsi
callq 0x562f0
movq %rax, %rbx
leaq 0x64a3b(%rip), %rsi     # 0x112368
leaq 0x18(%rsp), %rdi
callq 0x579f0
leaq 0x18(%rsp), %rsi
movq %rbx, %rdi
callq 0x562f0
leaq 0x210(%rsp), %rdi
movq %rax, %rsi
callq 0x55ab0
leaq 0x18(%rsp), %rdi
callq 0x59200
leaq 0xa8(%rsp), %rdi
callq 0x59200
leaq 0x649c0(%rip), %rsi     # 0x112332
leaq 0xa8(%rsp), %rdi
callq 0x579f0
leaq 0x210(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x55ab0
leaq 0xa8(%rsp), %rdi
callq 0x59200
leaq 0x649c3(%rip), %rsi     # 0x11236b
leaq 0xa8(%rsp), %rdi
callq 0x579f0
leaq 0x210(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x55ab0
leaq 0xa8(%rsp), %rdi
callq 0x59200
cmpl $0x0, 0x180(%r14)
jle 0xadc55
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
leaq 0xa8(%rsp), %r15
leaq 0x18(%rsp), %rbx
incl %ebp
movq 0x30(%rsp), %rdi
movl %ebp, %esi
callq 0xaf106
movq %rax, %r14
movq %r15, %rdi
leaq 0x66980(%rip), %rsi     # 0x114392
callq 0x579f0
movq %r15, %rdi
leaq 0x80(%rsp), %rsi
callq 0x562f0
movq %rax, %r12
movq %rbx, %rdi
leaq 0x64934(%rip), %rsi     # 0x112368
callq 0x579f0
movq %r12, %rdi
movq %rbx, %rsi
callq 0x562f0
leaq 0x210(%rsp), %rdi
movq %rax, %rsi
callq 0x55ab0
movq %rbx, %rdi
callq 0x59200
movq %r15, %rdi
callq 0x59200
cmpb $0x0, 0x30(%r14)
je 0xadba0
movq %r15, %rdi
leaq 0x648fc(%rip), %rsi     # 0x112375
callq 0x579f0
movq %r15, %rdi
movq %r14, %rsi
callq 0x562f0
movq %rax, %r12
movq %rbx, %rdi
leaq 0x64906(%rip), %rsi     # 0x11239c
callq 0x579f0
movq %r12, %rdi
movq %rbx, %rsi
callq 0x562f0
addq $0x18, %r14
movq %rax, %rdi
movq %r14, %rsi
callq 0x562f0
movq %rax, %r12
leaq 0x68(%rsp), %r13
movq %r13, %rdi
leaq 0x6489e(%rip), %rsi     # 0x112365
callq 0x579f0
movq %r12, %rdi
movq %r13, %rsi
callq 0x562f0
leaq 0x210(%rsp), %rdi
movq %rax, %rsi
callq 0x55ab0
leaq 0x68(%rsp), %rdi
callq 0x59200
movq %rbx, %rdi
callq 0x59200
movq %r15, %rdi
callq 0x59200
movq %r15, %rdi
movl $0x3, %esi
movq %r14, %rdx
movl $0x2, %ecx
callq 0x58730
cmpw $0x0, 0xb0(%rsp)
je 0xadb62
movq $-0x1, %r14
incq %r14
cmpq %r14, 0xb8(%rsp)
jle 0xadb6c
movq %r15, %rdi
movl $0x1, %esi
callq 0x55e90
leaq 0x210(%rsp), %rdi
movq %rax, %rsi
movl $0x1, %edx
callq 0x55750
cmpw $0x0, 0xb0(%rsp)
jne 0xadb28
movw $0x5, 0x1a0(%rsp)
movq %rbx, %rdi
leaq 0x647f2(%rip), %rsi     # 0x112368
callq 0x579f0
leaq 0x210(%rsp), %rdi
movq %rbx, %rsi
callq 0x55ab0
movq %rbx, %rdi
callq 0x59200
movq %r15, %rdi
callq 0x555b0
jmp 0xadc40
movq %r15, %rdi
leaq 0x647cb(%rip), %rsi     # 0x112375
callq 0x579f0
movq %r15, %rdi
movq %r14, %rsi
callq 0x562f0
movq %rax, %r12
movq %rbx, %rdi
leaq 0x6479e(%rip), %rsi     # 0x112365
callq 0x579f0
movq %r12, %rdi
movq %rbx, %rsi
callq 0x562f0
leaq 0x210(%rsp), %rdi
movq %rax, %rsi
callq 0x55ab0
movq %rbx, %rdi
callq 0x59200
movq %r15, %rdi
callq 0x59200
addq $0x18, %r14
movq %r15, %rdi
movq %r14, %rsi
callq 0x570b0
movq %rbx, %rdi
leaq 0x64758(%rip), %rsi     # 0x112368
callq 0x579f0
movq %r15, %rdi
movq %rbx, %rsi
callq 0x562f0
leaq 0x210(%rsp), %rdi
movq %rax, %rsi
callq 0x55ab0
movq %rbx, %rdi
callq 0x59200
movq %r15, %rdi
callq 0x59200
movq 0x8(%rsp), %rax
movl 0x180(%rax), %eax
decl %eax
cmpl %eax, %ebp
jl 0xad9f7
leaq 0x66736(%rip), %rsi     # 0x114392
leaq 0xa8(%rsp), %rdi
callq 0x579f0
leaq 0xa8(%rsp), %rdi
leaq 0x80(%rsp), %rsi
leaq 0xb22d0(%rip), %r12     # 0x15ff50
callq 0x562f0
movq 0x40(%rsp), %r13
movq %rax, %rbx
leaq 0x666fe(%rip), %rsi     # 0x114392
leaq 0x18(%rsp), %rdi
callq 0x579f0
leaq 0x18(%rsp), %rsi
movq %rbx, %rdi
callq 0x562f0
leaq 0x210(%rsp), %rdi
movq %rax, %rsi
callq 0x55ab0
leaq 0x18(%rsp), %rdi
callq 0x59200
leaq 0xa8(%rsp), %rdi
callq 0x59200
leaq 0x210(%rsp), %rdi
callq 0x56940
leaq 0x18(%rsp), %rdi
leaq 0x1b0(%rsp), %rsi
callq 0x58fa0
leaq 0xa8(%rsp), %rdi
leaq 0x18(%rsp), %rdx
movl $0x3, %esi
movl $0x2, %ecx
callq 0x58730
leaq 0x18(%rsp), %rdi
callq 0x59200
cmpw $0x0, 0xb0(%rsp)
je 0xadd2b
movl 0xb8(%rsp), %esi
jmp 0xadd3a
movw $0x5, 0x1a0(%rsp)
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
leaq 0x50(%rsp), %rdi
callq 0x62f32
cmpw $0x0, 0xb0(%rsp)
je 0xadd8b
xorl %r14d, %r14d
leaq 0xa8(%rsp), %rbx
cmpq %r14, 0xb8(%rsp)
jle 0xadd95
movq %rbx, %rdi
movl $0x1, %esi
callq 0x55e90
movq 0x58(%rsp), %rcx
movq (%rcx), %rcx
movb %al, (%rcx,%r14)
incq %r14
cmpw $0x0, 0xb0(%rsp)
jne 0xadd5a
movw $0x5, 0x1a0(%rsp)
leaq 0xa8(%rsp), %rdi
callq 0x55310
leaq 0x1b0(%rsp), %rdi
callq 0x57e60
movl 0x60(%rsp), %edx
movq %r13, %rdi
movl $0x3c, %esi
xorl %eax, %eax
callq 0x57df0
movq 0x58(%rsp), %rax
testq %rax, %rax
je 0xaddd1
movq (%rax), %rdx
jmp 0xaddd3
xorl %edx, %edx
movq %r13, %rdi
movl $0x271f, %esi           # imm = 0x271F
xorl %eax, %eax
callq 0x57df0
leaq 0xa8(%rsp), %rdi
callq 0x555b0
leaq 0x210(%rsp), %rdi
callq 0x56500
leaq 0x1b0(%rsp), %rdi
callq 0x59178
leaq 0x80(%rsp), %rdi
callq 0x59200
leaq 0x1e0(%rsp), %rdi
callq 0x585e0
movq %r13, %rdi
movl $0x2712, %esi           # imm = 0x2712
movq %rax, %rdx
xorl %eax, %eax
callq 0x57df0
movq %r13, %rdi
movl $0x2727, %esi           # imm = 0x2727
movq 0x10(%rsp), %rdx
xorl %eax, %eax
callq 0x57df0
movl $0x1, %edx
movq %r13, %rdi
movl $0x34, %esi
xorl %eax, %eax
callq 0x57df0
movq %r13, %rdi
movl $0x2b, %esi
xorl %edx, %edx
xorl %eax, %eax
callq 0x57df0
movq 0x8(%rsp), %rax
cmpw $0x0, 0xec(%rax)
je 0xadff8
leaq 0xd0(%rax), %rdi
callq 0x585e0
movq %r13, %rdi
movl $0x2714, %esi           # imm = 0x2714
movq %rax, %rdx
xorl %eax, %eax
callq 0x57df0
movq 0x8(%rsp), %rax
movl 0xe8(%rax), %edx
movq %r13, %rdi
movl $0x3b, %esi
xorl %eax, %eax
callq 0x57df0
movq 0x8(%rsp), %rbp
leaq 0xf0(%rbp), %rbx
movq %rbx, %rdi
xorl %esi, %esi
callq 0x56bd0
testb %al, %al
je 0xadeed
movq %rbx, %rdi
callq 0x585e0
movq %r13, %rdi
movq %rax, %rsi
xorl %edx, %edx
callq 0x575d0
movq %rax, %rbx
jmp 0xadeef
xorl %ebx, %ebx
leaq 0x108(%rbp), %r14
movq %r14, %rdi
xorl %esi, %esi
callq 0x56bd0
testb %al, %al
je 0xadf1e
movq %r14, %rdi
callq 0x585e0
movq %r13, %rdi
movq %rax, %rsi
xorl %edx, %edx
callq 0x575d0
movq %rax, %r14
jmp 0xadf21
xorl %r14d, %r14d
leaq 0x210(%rsp), %rdi
movq %rbx, %rsi
callq 0x579f0
leaq 0x451af(%rip), %rsi     # 0xf30e7
leaq 0xa8(%rsp), %rdi
callq 0x579f0
leaq 0x210(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x562f0
movq %rax, %r15
leaq 0x1b0(%rsp), %rdi
movq %r14, %rsi
callq 0x579f0
leaq 0x1b0(%rsp), %rsi
movq %r15, %rdi
callq 0x562f0
movq %rax, %rdi
callq 0x585e0
movq %r13, %rdi
movl $0x2716, %esi           # imm = 0x2716
movq %rax, %rdx
xorl %eax, %eax
callq 0x57df0
leaq 0x1b0(%rsp), %rdi
callq 0x59200
leaq 0xa8(%rsp), %rdi
callq 0x59200
leaq 0x210(%rsp), %rdi
callq 0x59200
movq %rbx, %rdi
callq 0x550d0
movq %r14, %rdi
callq 0x550d0
movl 0xec(%rbp), %eax
decl %eax
cmpw $0x4, %ax
jae 0xadff8
movzwl %ax, %eax
leaq 0x6427a(%rip), %rcx     # 0x112260
movl (%rcx,%rax,4), %edx
movq %r13, %rdi
movl $0x65, %esi
xorl %eax, %eax
callq 0x57df0
leaq 0x48b(%rip), %rdx       # 0xae48a
movq %r13, %rdi
movl $0x4e6f, %esi           # imm = 0x4E6F
xorl %eax, %eax
callq 0x57df0
movq %r13, %rdi
movl $0x272d, %esi           # imm = 0x272D
movq 0x8(%rsp), %rdx
xorl %eax, %eax
callq 0x57df0
leaq 0x782(%rip), %rdx       # 0xae7ab
movq %r13, %rdi
movl $0x4e2b, %esi           # imm = 0x4E2B
xorl %eax, %eax
callq 0x57df0
movq %r13, %rdi
movl $0x2711, %esi           # imm = 0x2711
movq 0x8(%rsp), %rdx
xorl %eax, %eax
callq 0x57df0
leaq 0x7a5(%rip), %rdx       # 0xae7f8
movq %r13, %rdi
movl $0x4e58, %esi           # imm = 0x4E58
xorl %eax, %eax
callq 0x57df0
movq %r13, %rdi
movl $0x2749, %esi           # imm = 0x2749
movq 0x8(%rsp), %rdx
xorl %eax, %eax
callq 0x57df0
movq 0x8(%rsp), %rax
leaq 0x240(%rax), %rdi
xorps %xmm0, %xmm0
movups %xmm0, 0x260(%rax)
movq 0x48(%rsp), %rsi
callq 0x555f0
movl $0x108, %edi            # imm = 0x108
callq 0x556b0
movq %rax, %r14
movq %rax, %rdi
movl $0x3, %esi
movq 0x48(%rsp), %rdx
movl $0x1, %ecx
callq 0x582f0
movq 0x8(%rsp), %rax
movq %r14, 0x258(%rax)
movq %r13, %rdi
callq 0x571f0
movl %eax, %ebx
movq 0x8(%rsp), %rax
movq 0x258(%rax), %rdi
testq %rdi, %rdi
je 0xae0e7
movq (%rdi), %rax
callq *0x8(%rax)
movq 0x10(%rsp), %rdi
callq 0x58000
movq %r13, %rdi
callq 0x55510
xorl %ebp, %ebp
negl %ebx
sbbl %ebp, %ebp
leaq 0x50(%rsp), %rdi
movq %r12, (%rdi)
callq 0x62130
leaq 0x1e0(%rsp), %rdi
callq 0x59200
movl %ebp, %eax
addq $0x318, %rsp            # imm = 0x318
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0xae35f
jmp 0xae308
jmp 0xae308
jmp 0xae303
jmp 0xae303
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
jmp 0xae2f8
jmp 0xae2c2
jmp 0xae2c2
jmp 0xae2c9
jmp 0xae2c9
jmp 0xae2c2
jmp 0xae2c9
jmp 0xae2c2
jmp 0xae2c9
jmp 0xae2c2
jmp 0xae2c9
jmp 0xae2c9
jmp 0xae2c2
movq %rax, %rbx
leaq 0xa8(%rsp), %rdi
callq 0x59200
jmp 0xae32f
movq %rax, %rbx
jmp 0xae32f
movq %rax, %rbx
leaq 0x1f8(%rsp), %rdi
callq 0x59200
jmp 0xae1c3
jmp 0xae1c0
movq %rax, %rbx
leaq 0x68(%rsp), %rdi
callq 0x59200
jmp 0xae1d4
jmp 0xae1d1
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
callq 0x59200
leaq 0x98(%rsp), %rdi
callq 0x58d60
jmp 0xae219
movq %rax, %rbx
jmp 0xae1de
jmp 0xae216
jmp 0xae239
jmp 0xae1fa
jmp 0xae1fa
movq %rax, %rbx
jmp 0xae33c
jmp 0xae30d
jmp 0xae308
jmp 0xae2e3
jmp 0xae2e3
movq %rax, %rbx
leaq 0xa8(%rsp), %rdi
callq 0x59200
jmp 0xae23c
jmp 0xae22a
movq %rax, %rbx
jmp 0xae27d
movq %rax, %rbx
jmp 0xae28a
jmp 0xae30d
movq %rax, %rbx
leaq 0x210(%rsp), %rdi
callq 0x59200
jmp 0xae33c
movq %rax, %rbx
movl $0x108, %esi            # imm = 0x108
movq %r14, %rdi
callq 0x55480
jmp 0xae349
jmp 0xae312
jmp 0xae30d
movq %rax, %rbx
leaq 0x1b0(%rsp), %rdi
callq 0x59200
leaq 0xa8(%rsp), %rdi
callq 0x59200
leaq 0x210(%rsp), %rdi
jmp 0xae344
jmp 0xae312
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
callq 0x59200
jmp 0xae315
jmp 0xae312
jmp 0xae2c9
jmp 0xae2c2
jmp 0xae2c2
jmp 0xae2c9
jmp 0xae2c2
jmp 0xae2c2
jmp 0xae2c9
jmp 0xae2c9
jmp 0xae2c9
jmp 0xae2e3
jmp 0xae30d
jmp 0xae2c2
movq %rax, %rbx
jmp 0xae322
jmp 0xae2c9
movq %rax, %rbx
jmp 0xae2f0
jmp 0xae2e3
jmp 0xae2e3
jmp 0xae2e3
movq %rax, %rbx
leaq 0x68(%rsp), %rdi
callq 0x59200
jmp 0xae2e6
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
callq 0x59200
leaq 0xa8(%rsp), %rdi
callq 0x59200
jmp 0xae322
jmp 0xae303
jmp 0xae303
movq %rax, %rbx
jmp 0xae37c
movq %rax, %rbx
jmp 0xae36f
movq %rax, %rbx
jmp 0xae349
movq %rax, %rbx
leaq 0xa8(%rsp), %rdi
callq 0x555b0
leaq 0x210(%rsp), %rdi
callq 0x56500
leaq 0x1b0(%rsp), %rdi
callq 0x59178
leaq 0x80(%rsp), %rdi
callq 0x59200
leaq 0x50(%rsp), %rdi
leaq 0xb1bfb(%rip), %rax     # 0x15ff50
movq %rax, (%rdi)
callq 0x62130
jmp 0xae37c
movq %rax, %rbx
leaq 0xa8(%rsp), %rdi
callq 0x59200
leaq 0x210(%rsp), %rdi
callq 0x59200
leaq 0x1e0(%rsp), %rdi
callq 0x59200
movq %rbx, %rdi
callq 0x57090
nop