// File: /workspace/github_c_makefile_star2_O0/coyove[P]chann/./lib/unqlite/unqlite.c
// Function: VmHttpProcessRequest
static sxi32 VmHttpProcessRequest(jx9_vm *pVm, const char *zRequest, int nByte)
 {
	 SyString *pName, *pValue, sRequest; /* Raw HTTP request */
	 jx9_value *pHeaderArray;          /* $_HEADER superglobal (Symisc eXtension to the JX9 specification)*/
	 SyhttpHeader *pHeader;            /* MIME header */
	 SyhttpUri sUri;     /* Parse of the raw URI*/
	 SyBlob sWorker;     /* General purpose working buffer */
	 SySet sHeader;      /* MIME headers set */
	 sxi32 iMethod;      /* HTTP method [i.e: GET, POST, HEAD...]*/
	 sxi32 iVer;         /* HTTP protocol version */
	 sxi32 rc;
	 SyStringInitFromBuf(&sRequest, zRequest, nByte);
	 SySetInit(&sHeader, &pVm->sAllocator, sizeof(SyhttpHeader));
	 SyBlobInit(&sWorker, &pVm->sAllocator);
	 /* Ignore leading and trailing white spaces*/
	 SyStringFullTrim(&sRequest);
	 /* Process the first line */
	 rc = VmHttpProcessFirstLine(&sRequest, &iMethod, &sUri, &iVer);
	 if( rc != SXRET_OK ){
		 return rc;
	 }
	 /* Process MIME headers */
	 VmHttpExtractHeaders(&sRequest, &sHeader);
	 /*
	  * Setup $_SERVER environments 
	  */
	 /* 'SERVER_PROTOCOL': Name and revision of the information protocol via which the page was requested */
	 jx9_vm_config(pVm, 
		 JX9_VM_CONFIG_SERVER_ATTR, 
		 "SERVER_PROTOCOL", 
		 iVer == HTTP_PROTO_10 ? "HTTP/1.0" : "HTTP/1.1", 
		 sizeof("HTTP/1.1")-1
		 );
	 /* 'REQUEST_METHOD':  Which request method was used to access the page */
	 jx9_vm_config(pVm, 
		 JX9_VM_CONFIG_SERVER_ATTR, 
		 "REQUEST_METHOD", 
		 iMethod == HTTP_METHOD_GET ?   "GET" : 
		 (iMethod == HTTP_METHOD_POST ? "POST":
		 (iMethod == HTTP_METHOD_PUT  ? "PUT" :
		 (iMethod == HTTP_METHOD_HEAD ?  "HEAD" : "OTHER"))), 
		 -1 /* Compute attribute length automatically */
		 );
	 if( SyStringLength(&sUri.sQuery) > 0 && iMethod == HTTP_METHOD_GET ){
		 pValue = &sUri.sQuery;
		 /* 'QUERY_STRING': The query string, if any, via which the page was accessed */
		 jx9_vm_config(pVm, 
			 JX9_VM_CONFIG_SERVER_ATTR, 
			 "QUERY_STRING", 
			 pValue->zString, 
			 pValue->nByte
			 );
		 /* Decoded the raw query */
		 VmHttpSplitEncodedQuery(&(*pVm), pValue, &sWorker, FALSE);
	 }
	 /* REQUEST_URI: The URI which was given in order to access this page; for instance, '/index.html' */
	 pValue = &sUri.sRaw;
	 jx9_vm_config(pVm, 
		 JX9_VM_CONFIG_SERVER_ATTR, 
		 "REQUEST_URI", 
		 pValue->zString, 
		 pValue->nByte
		 );
	 /*
	  * 'PATH_INFO'
	  * 'ORIG_PATH_INFO' 
      * Contains any client-provided pathname information trailing the actual script filename but preceding
	  * the query string, if available. For instance, if the current script was accessed via the URL
	  * http://www.example.com/jx9/path_info.jx9/some/stuff?foo=bar, then $_SERVER['PATH_INFO'] would contain
	  * /some/stuff. 
	  */
	 pValue = &sUri.sPath;
	 jx9_vm_config(pVm, 
		 JX9_VM_CONFIG_SERVER_ATTR, 
		 "PATH_INFO", 
		 pValue->zString, 
		 pValue->nByte
		 );
	 jx9_vm_config(pVm, 
		 JX9_VM_CONFIG_SERVER_ATTR, 
		 "ORIG_PATH_INFO", 
		 pValue->zString, 
		 pValue->nByte
		 );
	 /* 'HTTP_ACCEPT': Contents of the Accept: header from the current request, if there is one */
	 pValue = VmHttpExtractHeaderValue(&sHeader, "Accept", sizeof("Accept")-1);
	 if( pValue ){
		 jx9_vm_config(pVm, 
			 JX9_VM_CONFIG_SERVER_ATTR, 
			 "HTTP_ACCEPT", 
			 pValue->zString, 
			 pValue->nByte
		 );
	 }
	 /* 'HTTP_ACCEPT_CHARSET': Contents of the Accept-Charset: header from the current request, if there is one. */
	 pValue = VmHttpExtractHeaderValue(&sHeader, "Accept-Charset", sizeof("Accept-Charset")-1);
	 if( pValue ){
		 jx9_vm_config(pVm, 
			 JX9_VM_CONFIG_SERVER_ATTR, 
			 "HTTP_ACCEPT_CHARSET", 
			 pValue->zString, 
			 pValue->nByte
		 );
	 }
	 /* 'HTTP_ACCEPT_ENCODING': Contents of the Accept-Encoding: header from the current request, if there is one. */
	 pValue = VmHttpExtractHeaderValue(&sHeader, "Accept-Encoding", sizeof("Accept-Encoding")-1);
	 if( pValue ){
		 jx9_vm_config(pVm, 
			 JX9_VM_CONFIG_SERVER_ATTR, 
			 "HTTP_ACCEPT_ENCODING", 
			 pValue->zString, 
			 pValue->nByte
		 );
	 }
	  /* 'HTTP_ACCEPT_LANGUAGE': Contents of the Accept-Language: header from the current request, if there is one */
	 pValue = VmHttpExtractHeaderValue(&sHeader, "Accept-Language", sizeof("Accept-Language")-1);
	 if( pValue ){
		 jx9_vm_config(pVm, 
			 JX9_VM_CONFIG_SERVER_ATTR, 
			 "HTTP_ACCEPT_LANGUAGE", 
			 pValue->zString, 
			 pValue->nByte
		 );
	 }
	 /* 'HTTP_CONNECTION': Contents of the Connection: header from the current request, if there is one. */
	 pValue = VmHttpExtractHeaderValue(&sHeader, "Connection", sizeof("Connection")-1);
	 if( pValue ){
		 jx9_vm_config(pVm, 
			 JX9_VM_CONFIG_SERVER_ATTR, 
			 "HTTP_CONNECTION", 
			 pValue->zString, 
			 pValue->nByte
		 );
	 }
	 /* 'HTTP_HOST': Contents of the Host: header from the current request, if there is one. */
	 pValue = VmHttpExtractHeaderValue(&sHeader, "Host", sizeof("Host")-1);
	 if( pValue ){
		 jx9_vm_config(pVm, 
			 JX9_VM_CONFIG_SERVER_ATTR, 
			 "HTTP_HOST", 
			 pValue->zString, 
			 pValue->nByte
		 );
	 }
	 /* 'HTTP_REFERER': Contents of the Referer: header from the current request, if there is one. */
	 pValue = VmHttpExtractHeaderValue(&sHeader, "Referer", sizeof("Referer")-1);
	 if( pValue ){
		 jx9_vm_config(pVm, 
			 JX9_VM_CONFIG_SERVER_ATTR, 
			 "HTTP_REFERER", 
			 pValue->zString, 
			 pValue->nByte
		 );
	 }
	 /* 'HTTP_USER_AGENT': Contents of the Referer: header from the current request, if there is one. */
	 pValue = VmHttpExtractHeaderValue(&sHeader, "User-Agent", sizeof("User-Agent")-1);
	 if( pValue ){
		 jx9_vm_config(pVm, 
			 JX9_VM_CONFIG_SERVER_ATTR, 
			 "HTTP_USER_AGENT", 
			 pValue->zString, 
			 pValue->nByte
		 );
	 }
	  /* 'JX9_AUTH_DIGEST': When doing Digest HTTP authentication this variable is set to the 'Authorization'
	   * header sent by the client (which you should then use to make the appropriate validation).
	   */
	 pValue = VmHttpExtractHeaderValue(&sHeader, "Authorization", sizeof("Authorization")-1);
	 if( pValue ){
		 jx9_vm_config(pVm, 
			 JX9_VM_CONFIG_SERVER_ATTR, 
			 "JX9_AUTH_DIGEST", 
			 pValue->zString, 
			 pValue->nByte
		 );
		 jx9_vm_config(pVm, 
			 JX9_VM_CONFIG_SERVER_ATTR, 
			 "JX9_AUTH", 
			 pValue->zString, 
			 pValue->nByte
		 );
	 }
	 /* Install all clients HTTP headers in the $_HEADER superglobal */
	 pHeaderArray = VmExtractSuper(&(*pVm), "_HEADER", sizeof("_HEADER")-1);
	 /* Iterate throw the available MIME headers*/
	 SySetResetCursor(&sHeader);
	 pHeader = 0; /* stupid cc warning */
	 while( SXRET_OK == SySetGetNextEntry(&sHeader, (void **)&pHeader) ){
		 pName  = &pHeader->sName;
		 pValue = &pHeader->sValue;
		 if( pHeaderArray && (pHeaderArray->iFlags & MEMOBJ_HASHMAP)){
			 /* Insert the MIME header and it's associated value */
			 VmHashmapInsert((jx9_hashmap *)pHeaderArray->x.pOther, 
				 pName->zString, (int)pName->nByte, 
				 pValue->zString, (int)pValue->nByte
				 );
		 }
		 if( pName->nByte == sizeof("Cookie")-1 && SyStrnicmp(pName->zString, "Cookie", sizeof("Cookie")-1) == 0 
			 && pValue->nByte > 0){
				 /* Process the name=value pair and insert them in the $_COOKIE superglobal array */
				 VmHttpPorcessCookie(&(*pVm), &sWorker, pValue->zString, pValue->nByte);
		 }
	 }
	 if( iMethod == HTTP_METHOD_POST ){
		 /* Extract raw POST data */
		 pValue = VmHttpExtractHeaderValue(&sHeader, "Content-Type", sizeof("Content-Type") - 1);
		 if( pValue && pValue->nByte >= sizeof("application/x-www-form-urlencoded") - 1 &&
			 SyMemcmp("application/x-www-form-urlencoded", pValue->zString, pValue->nByte) == 0 ){
				 /* Extract POST data length */
				 pValue = VmHttpExtractHeaderValue(&sHeader, "Content-Length", sizeof("Content-Length") - 1);
				 if( pValue ){
					 sxi32 iLen = 0; /* POST data length */
					 SyStrToInt32(pValue->zString, pValue->nByte, (void *)&iLen, 0);
					 if( iLen > 0 ){
						 /* Remove leading and trailing white spaces */
						 SyStringFullTrim(&sRequest);
						 if( (int)sRequest.nByte > iLen ){
							 sRequest.nByte = (sxu32)iLen;
						 }
						 /* Decode POST data now */
						 VmHttpSplitEncodedQuery(&(*pVm), &sRequest, &sWorker, TRUE);
					 }
				 }
		 }
	 }
	 /* All done, clean-up the mess left behind */
	 SySetRelease(&sHeader);
	 SyBlobRelease(&sWorker);
	 return SXRET_OK;
 }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x170, %rsp            # imm = 0x170
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movl %edx, -0x1c(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x40(%rbp)
movl -0x1c(%rbp), %eax
movl %eax, -0x38(%rbp)
movq -0x10(%rbp), %rsi
leaq -0x128(%rbp), %rdi
movl $0x20, %edx
callq 0x5b470
movq -0x10(%rbp), %rsi
leaq -0x100(%rbp), %rdi
callq 0x58bb0
xorl %eax, %eax
cmpl $0x0, -0x38(%rbp)
movb %al, -0x139(%rbp)
jbe 0x7ad95
movq -0x40(%rbp), %rax
movzbl (%rax), %ecx
xorl %eax, %eax
cmpl $0xc0, %ecx
movb %al, -0x139(%rbp)
jge 0x7ad95
callq 0xd1f0
movq (%rax), %rax
movq -0x40(%rbp), %rcx
movsbl (%rcx), %ecx
movslq %ecx, %rcx
movzwl (%rax,%rcx,2), %eax
andl $0x2000, %eax           # imm = 0x2000
cmpl $0x0, %eax
setne %al
movb %al, -0x139(%rbp)
movb -0x139(%rbp), %al
testb $0x1, %al
jne 0x7ada1
jmp 0x7adb8
movl -0x38(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x38(%rbp)
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x7ad49
jmp 0x7adba
xorl %eax, %eax
cmpl $0x0, -0x38(%rbp)
movb %al, -0x13a(%rbp)
jbe 0x7ae18
movq -0x40(%rbp), %rax
movl -0x38(%rbp), %ecx
subl $0x1, %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %ecx
xorl %eax, %eax
cmpl $0xc0, %ecx
movb %al, -0x13a(%rbp)
jge 0x7ae18
callq 0xd1f0
movq (%rax), %rax
movq -0x40(%rbp), %rcx
movl -0x38(%rbp), %edx
subl $0x1, %edx
movl %edx, %edx
movsbl (%rcx,%rdx), %ecx
movslq %ecx, %rcx
movzwl (%rax,%rcx,2), %eax
andl $0x2000, %eax           # imm = 0x2000
cmpl $0x0, %eax
setne %al
movb %al, -0x13a(%rbp)
movb -0x13a(%rbp), %al
testb $0x1, %al
jne 0x7ae24
jmp 0x7ae2f
movl -0x38(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x38(%rbp)
jmp 0x7adba
leaq -0x40(%rbp), %rdi
leaq -0x12c(%rbp), %rsi
leaq -0xe0(%rbp), %rdx
leaq -0x130(%rbp), %rcx
callq 0x7b610
movl %eax, -0x134(%rbp)
cmpl $0x0, -0x134(%rbp)
je 0x7ae6a
movl -0x134(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x7b604
leaq -0x40(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x7b990
movq -0x10(%rbp), %rdi
movl -0x130(%rbp), %edx
leaq 0x4c973(%rip), %rcx     # 0xc77fe
leaq 0x47e29(%rip), %rax     # 0xc2cbb
cmpl $0x1, %edx
cmoveq %rax, %rcx
movl $0x8, %esi
leaq 0x47e06(%rip), %rdx     # 0xc2cab
movl $0x8, %r8d
movb $0x0, %al
callq 0x7ba50
movq -0x10(%rbp), %rax
movq %rax, -0x148(%rbp)
cmpl $0x1, -0x12c(%rbp)
jne 0x7aed6
leaq 0x47f91(%rip), %rax     # 0xc2e5e
movq %rax, -0x150(%rbp)
jmp 0x7af46
cmpl $0x3, -0x12c(%rbp)
jne 0x7aeef
leaq 0x47f72(%rip), %rax     # 0xc2e58
movq %rax, -0x158(%rbp)
jmp 0x7af38
cmpl $0x4, -0x12c(%rbp)
jne 0x7af08
leaq 0x47dd4(%rip), %rax     # 0xc2cd3
movq %rax, -0x160(%rbp)
jmp 0x7af2a
movl -0x12c(%rbp), %edx
leaq 0x47dc7(%rip), %rax     # 0xc2cdc
leaq 0x47dbb(%rip), %rcx     # 0xc2cd7
cmpl $0x2, %edx
cmoveq %rcx, %rax
movq %rax, -0x160(%rbp)
movq -0x160(%rbp), %rax
movq %rax, -0x158(%rbp)
movq -0x158(%rbp), %rax
movq %rax, -0x150(%rbp)
movq -0x148(%rbp), %rdi
movq -0x150(%rbp), %rcx
movl $0x8, %esi
leaq 0x47d64(%rip), %rdx     # 0xc2cc4
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
movb $0x0, %al
callq 0x7ba50
cmpl $0x0, -0xa8(%rbp)
jbe 0x7afca
cmpl $0x1, -0x12c(%rbp)
jne 0x7afca
leaq -0xe0(%rbp), %rax
addq $0x30, %rax
movq %rax, -0x30(%rbp)
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rax
movq (%rax), %rcx
movq -0x30(%rbp), %rax
movl 0x8(%rax), %r8d
movl $0x8, %esi
leaq 0x47d35(%rip), %rdx     # 0xc2ce2
movb $0x0, %al
callq 0x7ba50
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rsi
leaq -0x100(%rbp), %rdx
xorl %ecx, %ecx
callq 0x7bb90
leaq -0xe0(%rbp), %rax
addq $0x80, %rax
movq %rax, -0x30(%rbp)
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rax
movq (%rax), %rcx
movq -0x30(%rbp), %rax
movl 0x8(%rax), %r8d
movl $0x8, %esi
leaq 0x47cf5(%rip), %rdx     # 0xc2cef
movb $0x0, %al
callq 0x7ba50
leaq -0xe0(%rbp), %rax
addq $0x20, %rax
movq %rax, -0x30(%rbp)
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rax
movq (%rax), %rcx
movq -0x30(%rbp), %rax
movl 0x8(%rax), %r8d
movl $0x8, %esi
leaq 0x47cd1(%rip), %rdx     # 0xc2d00
movb $0x0, %al
callq 0x7ba50
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rax
movq (%rax), %rcx
movq -0x30(%rbp), %rax
movl 0x8(%rax), %r8d
movl $0x8, %esi
leaq 0x47ca6(%rip), %rdx     # 0xc2cfb
movb $0x0, %al
callq 0x7ba50
leaq -0x128(%rbp), %rdi
leaq 0x47ca0(%rip), %rsi     # 0xc2d0a
movl $0x6, %edx
callq 0x7be80
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0x7b0a5
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rax
movq (%rax), %rcx
movq -0x30(%rbp), %rax
movl 0x8(%rax), %r8d
movl $0x8, %esi
leaq 0x47c73(%rip), %rdx     # 0xc2d11
movb $0x0, %al
callq 0x7ba50
leaq -0x128(%rbp), %rdi
leaq 0x47c6a(%rip), %rsi     # 0xc2d1d
movl $0xe, %edx
callq 0x7be80
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0x7b0ee
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rax
movq (%rax), %rcx
movq -0x30(%rbp), %rax
movl 0x8(%rax), %r8d
movl $0x8, %esi
leaq 0x47c45(%rip), %rdx     # 0xc2d2c
movb $0x0, %al
callq 0x7ba50
leaq -0x128(%rbp), %rdi
leaq 0x47c44(%rip), %rsi     # 0xc2d40
movl $0xf, %edx
callq 0x7be80
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0x7b137
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rax
movq (%rax), %rcx
movq -0x30(%rbp), %rax
movl 0x8(%rax), %r8d
movl $0x8, %esi
leaq 0x47c20(%rip), %rdx     # 0xc2d50
movb $0x0, %al
callq 0x7ba50
leaq -0x128(%rbp), %rdi
leaq 0x47c20(%rip), %rsi     # 0xc2d65
movl $0xf, %edx
callq 0x7be80
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0x7b180
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rax
movq (%rax), %rcx
movq -0x30(%rbp), %rax
movl 0x8(%rax), %r8d
movl $0x8, %esi
leaq 0x47bfc(%rip), %rdx     # 0xc2d75
movb $0x0, %al
callq 0x7ba50
leaq -0x128(%rbp), %rdi
leaq 0x47bfc(%rip), %rsi     # 0xc2d8a
movl $0xa, %edx
callq 0x7be80
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0x7b1c9
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rax
movq (%rax), %rcx
movq -0x30(%rbp), %rax
movl 0x8(%rax), %r8d
movl $0x8, %esi
leaq 0x47bd3(%rip), %rdx     # 0xc2d95
movb $0x0, %al
callq 0x7ba50
leaq -0x128(%rbp), %rdi
leaq 0x47bce(%rip), %rsi     # 0xc2da5
movl $0x4, %edx
callq 0x7be80
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0x7b212
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rax
movq (%rax), %rcx
movq -0x30(%rbp), %rax
movl 0x8(%rax), %r8d
movl $0x8, %esi
leaq 0x47b9f(%rip), %rdx     # 0xc2daa
movb $0x0, %al
callq 0x7ba50
leaq -0x128(%rbp), %rdi
leaq 0x47b94(%rip), %rsi     # 0xc2db4
movl $0x7, %edx
callq 0x7be80
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0x7b25b
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rax
movq (%rax), %rcx
movq -0x30(%rbp), %rax
movl 0x8(%rax), %r8d
movl $0x8, %esi
leaq 0x47b68(%rip), %rdx     # 0xc2dbc
movb $0x0, %al
callq 0x7ba50
leaq -0x128(%rbp), %rdi
leaq 0x47b60(%rip), %rsi     # 0xc2dc9
movl $0xa, %edx
callq 0x7be80
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0x7b2a4
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rax
movq (%rax), %rcx
movq -0x30(%rbp), %rax
movl 0x8(%rax), %r8d
movl $0x8, %esi
leaq 0x47b37(%rip), %rdx     # 0xc2dd4
movb $0x0, %al
callq 0x7ba50
leaq -0x128(%rbp), %rdi
leaq 0x47b32(%rip), %rsi     # 0xc2de4
movl $0xd, %edx
callq 0x7be80
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0x7b313
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rax
movq (%rax), %rcx
movq -0x30(%rbp), %rax
movl 0x8(%rax), %r8d
movl $0x8, %esi
leaq 0x47b0c(%rip), %rdx     # 0xc2df2
movb $0x0, %al
callq 0x7ba50
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rax
movq (%rax), %rcx
movq -0x30(%rbp), %rax
movl 0x8(%rax), %r8d
movl $0x8, %esi
leaq 0x47af6(%rip), %rdx     # 0xc2e02
movb $0x0, %al
callq 0x7ba50
movq -0x10(%rbp), %rdi
leaq 0x47aed(%rip), %rsi     # 0xc2e0b
movl $0x7, %edx
callq 0x7ab80
movq %rax, -0x48(%rbp)
leaq -0x128(%rbp), %rdi
callq 0x7bf40
movq $0x0, -0x50(%rbp)
leaq -0x128(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x7bf60
movl %eax, %ecx
xorl %eax, %eax
cmpl %ecx, %eax
jne 0x7b406
movq -0x50(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x50(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x48(%rbp)
je 0x7b3af
movq -0x48(%rbp), %rax
movl 0x8(%rax), %eax
andl $0x40, %eax
cmpl $0x0, %eax
je 0x7b3af
movq -0x48(%rbp), %rax
movq (%rax), %rdi
movq -0x28(%rbp), %rax
movq (%rax), %rsi
movq -0x28(%rbp), %rax
movl 0x8(%rax), %edx
movq -0x30(%rbp), %rax
movq (%rax), %rcx
movq -0x30(%rbp), %rax
movl 0x8(%rax), %r8d
callq 0x7ac00
movq -0x28(%rbp), %rax
movl 0x8(%rax), %eax
cmpq $0x6, %rax
jne 0x7b401
movq -0x28(%rbp), %rax
movq (%rax), %rdi
leaq 0x43d72(%rip), %rsi     # 0xbf13c
movl $0x6, %edx
callq 0x67830
cmpl $0x0, %eax
jne 0x7b401
movq -0x30(%rbp), %rax
cmpl $0x0, 0x8(%rax)
jbe 0x7b401
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rax
movq (%rax), %rdx
movq -0x30(%rbp), %rax
movl 0x8(%rax), %ecx
leaq -0x100(%rbp), %rsi
callq 0x7bfe0
jmp 0x7b340
cmpl $0x3, -0x12c(%rbp)
jne 0x7b5e5
leaq -0x128(%rbp), %rdi
leaq 0x444cf(%rip), %rsi     # 0xbf8f0
movl $0xc, %edx
callq 0x7be80
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0x7b5e3
movq -0x30(%rbp), %rax
movl 0x8(%rax), %eax
cmpq $0x21, %rax
jb 0x7b5e3
movq -0x30(%rbp), %rax
movq (%rax), %rsi
movq -0x30(%rbp), %rax
movl 0x8(%rax), %edx
leaq 0x479b3(%rip), %rdi     # 0xc2e13
callq 0x5d3c0
cmpl $0x0, %eax
jne 0x7b5e3
leaq -0x128(%rbp), %rdi
leaq 0x479b9(%rip), %rsi     # 0xc2e35
movl $0xe, %edx
callq 0x7be80
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0x7b5e1
movl $0x0, -0x138(%rbp)
movq -0x30(%rbp), %rax
movq (%rax), %rdi
movq -0x30(%rbp), %rax
movl 0x8(%rax), %esi
leaq -0x138(%rbp), %rdx
xorl %eax, %eax
movl %eax, %ecx
callq 0x7c210
cmpl $0x0, -0x138(%rbp)
jle 0x7b5df
jmp 0x7b4cc
xorl %eax, %eax
cmpl $0x0, -0x38(%rbp)
movb %al, -0x161(%rbp)
jbe 0x7b518
movq -0x40(%rbp), %rax
movzbl (%rax), %ecx
xorl %eax, %eax
cmpl $0xc0, %ecx
movb %al, -0x161(%rbp)
jge 0x7b518
callq 0xd1f0
movq (%rax), %rax
movq -0x40(%rbp), %rcx
movsbl (%rcx), %ecx
movslq %ecx, %rcx
movzwl (%rax,%rcx,2), %eax
andl $0x2000, %eax           # imm = 0x2000
cmpl $0x0, %eax
setne %al
movb %al, -0x161(%rbp)
movb -0x161(%rbp), %al
testb $0x1, %al
jne 0x7b524
jmp 0x7b53b
movl -0x38(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x38(%rbp)
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x7b4cc
jmp 0x7b53d
xorl %eax, %eax
cmpl $0x0, -0x38(%rbp)
movb %al, -0x162(%rbp)
jbe 0x7b59b
movq -0x40(%rbp), %rax
movl -0x38(%rbp), %ecx
subl $0x1, %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %ecx
xorl %eax, %eax
cmpl $0xc0, %ecx
movb %al, -0x162(%rbp)
jge 0x7b59b
callq 0xd1f0
movq (%rax), %rax
movq -0x40(%rbp), %rcx
movl -0x38(%rbp), %edx
subl $0x1, %edx
movl %edx, %edx
movsbl (%rcx,%rdx), %ecx
movslq %ecx, %rcx
movzwl (%rax,%rcx,2), %eax
andl $0x2000, %eax           # imm = 0x2000
cmpl $0x0, %eax
setne %al
movb %al, -0x162(%rbp)
movb -0x162(%rbp), %al
testb $0x1, %al
jne 0x7b5a7
jmp 0x7b5b2
movl -0x38(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x38(%rbp)
jmp 0x7b53d
movl -0x38(%rbp), %eax
cmpl -0x138(%rbp), %eax
jle 0x7b5c6
movl -0x138(%rbp), %eax
movl %eax, -0x38(%rbp)
movq -0x10(%rbp), %rdi
leaq -0x40(%rbp), %rsi
leaq -0x100(%rbp), %rdx
movl $0x1, %ecx
callq 0x7bb90
jmp 0x7b5e1
jmp 0x7b5e3
jmp 0x7b5e5
leaq -0x128(%rbp), %rdi
callq 0x66980
leaq -0x100(%rbp), %rdi
callq 0x58c00
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x170, %rsp            # imm = 0x170
popq %rbp
retq