.file "ACMEScan.c"
.section .rodata
.LC0:
.string "rb"
.LC1:
.string "ACMEScan.c"
.text
.globl isAVirus
.type isAVirus, @function
isAVirus:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
movq %rsp, %rbp
.cfi_offset 6, -16
.cfi_def_cfa_register 6
subq $64, %rsp
movq %rdi, -56(%rbp)
movl $544024393, -32(%rbp)
movl $1769349217, -28(%rbp)
movl $7566706, -24(%rbp)
movl $.LC0, %edx
movq -56(%rbp), %rax
movq %rdx, %rsi
movq %rax, %rdi
call fopen
movq %rax, -8(%rbp)
cmpq $0, -8(%rbp)
jne .L2
movl $.LC1, %edi
call perror
movl $1, %edi
call exit
.L2:
movq -8(%rbp), %rdx
leaq -48(%rbp), %rax
movq %rdx, %rcx
movl $12, %edx
movl $1, %esi
movq %rax, %rdi
call fread
cmpq $11, %rax
ja .L3
movq -8(%rbp), %rax
movq %rax, %rdi
call feof
testl %eax, %eax
jne .L3
movl $.LC1, %edi
call perror
movl $1, %edi
call exit
.L3:
movq -8(%rbp), %rax
movq %rax, %rdi
call fclose
leaq -32(%rbp), %rax
movq %rax, %rdi
call strlen
movq %rax, %rdx
leaq -32(%rbp), %rcx
leaq -48(%rbp), %rax
movq %rcx, %rsi
movq %rax, %rdi
call memcmp
testl %eax, %eax
sete %al
leave
ret
.cfi_endproc
.LFE0:
.size isAVirus, .-isAVirus
.globl appendReportItem
.type appendReportItem, @function
appendReportItem:
.LFB1:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
movq %rsp, %rbp
.cfi_offset 6, -16
.cfi_def_cfa_register 6
subq $32, %rsp
movq %rdi, -24(%rbp)
movq %rsi, -32(%rbp)
movl $48, %edi
call malloc
movq %rax, -8(%rbp)
movq -32(%rbp), %rcx
movq -8(%rbp), %rax
movl $48, %edx
movq %rcx, %rsi
movq %rax, %rdi
call memcpy
movq -24(%rbp), %rax
movq (%rax), %rdx
movq -8(%rbp), %rax
movq %rdx, 40(%rax)
movq -24(%rbp), %rax
movq -8(%rbp), %rdx
movq %rdx, (%rax)
leave
ret
.cfi_endproc
.LFE1:
.size appendReportItem, .-appendReportItem
.globl freeFullReport
.type freeFullReport, @function
freeFullReport:
.LFB2:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
movq %rsp, %rbp
.cfi_offset 6, -16
.cfi_def_cfa_register 6
subq $32, %rsp
movq %rdi, -24(%rbp)
movq -24(%rbp), %rax
movq (%rax), %rax
movq %rax, -16(%rbp)
jmp .L8
.L9:
movq -16(%rbp), %rax
movq %rax, -8(%rbp)
movq -8(%rbp), %rax
movq 40(%rax), %rax
movq %rax, -16(%rbp)
movq -8(%rbp), %rax
movq %rax, %rdi
call free
.L8:
cmpq $0, -16(%rbp)
jne .L9
movq -24(%rbp), %rax
movq $0, (%rax)
leave
ret
.cfi_endproc
.LFE2:
.size freeFullReport, .-freeFullReport
.section .rodata
.align 8
.LC2:
.string "---------------------------------------"
.align 8
.LC3:
.string " ___ _______ __ __ _______"
.align 8
.LC4:
.string " / | / _____/ / | / | / _____/"
.align 8
.LC5:
.string " / /| | / / / | / | / /____ "
.align 8
.LC6:
.string " / /_| | / / / /| |/ /| | / _____/ "
.align 8
.LC7:
.string " / ___ | / /____ / / |___/ | | / /____ "
.align 8
.LC8:
.string " /_/ |_| /______/ /_/ |_| /______/ "
.align 8
.LC9:
.string " [SCAN] "
.LC10:
.string " Report:"
.LC11:
.string " %s%s\n"
.LC12:
.string "Virus Found!"
.LC13:
.string "OK"
.LC14:
.string " %s [%s]\n"
.LC15:
.string " %d elements scanned\n\n"
.text
.globl printReport
.type printReport, @function
printReport:
.LFB3:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
movq %rsp, %rbp
.cfi_offset 6, -16
.cfi_def_cfa_register 6
pushq %rbx
subq $56, %rsp
movq %rdi, -56(%rbp)
movq -56(%rbp), %rax
movq %rax, -40(%rbp)
movl $0, -28(%rbp)
movq $.LC2, -24(%rbp)
movl $.LC3, %edi
.cfi_offset 3, -24
call puts
movl $.LC4, %edi
call puts
movl $.LC5, %edi
call puts
movl $.LC6, %edi
call puts
movl $.LC7, %edi
call puts
movl $.LC8, %edi
call puts
movl $.LC9, %edi
call puts
movl $.LC10, %edi
call puts
movl $.LC11, %eax
movq -24(%rbp), %rdx
movq -24(%rbp), %rcx
movq %rcx, %rsi
movq %rax, %rdi
movl $0, %eax
call printf
jmp .L12
.L15:
movq -40(%rbp), %rax
movzbl 32(%rax), %eax
testb %al, %al
je .L13
movl $.LC12, %eax
jmp .L14
.L13:
movl $.LC13, %eax
.L14:
movq -40(%rbp), %rbx
movl $.LC14, %ecx
movq %rax, %rdx
movq %rbx, %rsi
movq %rcx, %rdi
movl $0, %eax
call printf
movq -40(%rbp), %rax
movq 40(%rax), %rax
movq %rax, -40(%rbp)
addl $1, -28(%rbp)
.L12:
cmpq $0, -40(%rbp)
jne .L15
movl $.LC11, %eax
movq -24(%rbp), %rdx
movq -24(%rbp), %rcx
movq %rcx, %rsi
movq %rax, %rdi
movl $0, %eax
call printf
movl $.LC15, %eax
movl -28(%rbp), %edx
movl %edx, %esi
movq %rax, %rdi
movl $0, %eax
call printf
addq $56, %rsp
popq %rbx
leave
ret
.cfi_endproc
.LFE3:
.size printReport, .-printReport
.globl main
.type main, @function
main:
.LFB4:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
movq %rsp, %rbp
.cfi_offset 6, -16
.cfi_def_cfa_register 6
subq $80, %rsp
movl %edi, -68(%rbp)
movq %rsi, -80(%rbp)
movq $0, -16(%rbp)
movl $1, -4(%rbp)
jmp .L18
.L20:
movl -4(%rbp), %eax
cltq
salq $3, %rax
addq -80(%rbp), %rax
movq (%rax), %rax
movq %rax, %rdi
call isAVirus
movb %al, -32(%rbp)
movl -4(%rbp), %eax
cltq
salq $3, %rax
addq -80(%rbp), %rax
movq (%rax), %rax
movq %rax, %rcx
leaq -64(%rbp), %rax
movl $32, %edx
movq %rcx, %rsi
movq %rax, %rdi
call strncpy
movl -4(%rbp), %eax
cltq
salq $3, %rax
addq -80(%rbp), %rax
movq (%rax), %rax
movq %rax, %rdi
call strlen
cmpq $32, %rax
jbe .L19
movb $0, -32(%rbp)
.L19:
leaq -64(%rbp), %rdx
leaq -16(%rbp), %rax
movq %rdx, %rsi
movq %rax, %rdi
call appendReportItem
addl $1, -4(%rbp)
.L18:
movl -4(%rbp), %eax
cmpl -68(%rbp), %eax
jl .L20
movq -16(%rbp), %rax
movq %rax, %rdi
call printReport
leaq -16(%rbp), %rax
movq %rax, %rdi
call freeFullReport
movl $0, %eax
leave
ret
.cfi_endproc
.LFE4:
.size main, .-main
.ident "GCC: (Debian 4.4.5-8) 4.4.5"
.section .note.GNU-stack,"",@progbits
CS5maWxlCSJBQ01FU2Nhbi5jIgoJLnNlY3Rpb24JLnJvZGF0YQouTEMwOgoJLnN0cmluZwkicmIiCi5MQzE6Cgkuc3RyaW5nCSJBQ01FU2Nhbi5jIgoJLnRleHQKLmdsb2JsIGlzQVZpcnVzCgkudHlwZQlpc0FWaXJ1cywgQGZ1bmN0aW9uCmlzQVZpcnVzOgouTEZCMDoKCS5jZmlfc3RhcnRwcm9jCglwdXNocQklcmJwCgkuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2Cgltb3ZxCSVyc3AsICVyYnAKCS5jZmlfb2Zmc2V0IDYsIC0xNgoJLmNmaV9kZWZfY2ZhX3JlZ2lzdGVyIDYKCXN1YnEJJDY0LCAlcnNwCgltb3ZxCSVyZGksIC01NiglcmJwKQoJbW92bAkkNTQ0MDI0MzkzLCAtMzIoJXJicCkKCW1vdmwJJDE3NjkzNDkyMTcsIC0yOCglcmJwKQoJbW92bAkkNzU2NjcwNiwgLTI0KCVyYnApCgltb3ZsCSQuTEMwLCAlZWR4Cgltb3ZxCS01NiglcmJwKSwgJXJheAoJbW92cQklcmR4LCAlcnNpCgltb3ZxCSVyYXgsICVyZGkKCWNhbGwJZm9wZW4KCW1vdnEJJXJheCwgLTgoJXJicCkKCWNtcHEJJDAsIC04KCVyYnApCglqbmUJLkwyCgltb3ZsCSQuTEMxLCAlZWRpCgljYWxsCXBlcnJvcgoJbW92bAkkMSwgJWVkaQoJY2FsbAlleGl0Ci5MMjoKCW1vdnEJLTgoJXJicCksICVyZHgKCWxlYXEJLTQ4KCVyYnApLCAlcmF4Cgltb3ZxCSVyZHgsICVyY3gKCW1vdmwJJDEyLCAlZWR4Cgltb3ZsCSQxLCAlZXNpCgltb3ZxCSVyYXgsICVyZGkKCWNhbGwJZnJlYWQKCWNtcHEJJDExLCAlcmF4CglqYQkuTDMKCW1vdnEJLTgoJXJicCksICVyYXgKCW1vdnEJJXJheCwgJXJkaQoJY2FsbAlmZW9mCgl0ZXN0bAklZWF4LCAlZWF4CglqbmUJLkwzCgltb3ZsCSQuTEMxLCAlZWRpCgljYWxsCXBlcnJvcgoJbW92bAkkMSwgJWVkaQoJY2FsbAlleGl0Ci5MMzoKCW1vdnEJLTgoJXJicCksICVyYXgKCW1vdnEJJXJheCwgJXJkaQoJY2FsbAlmY2xvc2UKCWxlYXEJLTMyKCVyYnApLCAlcmF4Cgltb3ZxCSVyYXgsICVyZGkKCWNhbGwJc3RybGVuCgltb3ZxCSVyYXgsICVyZHgKCWxlYXEJLTMyKCVyYnApLCAlcmN4CglsZWFxCS00OCglcmJwKSwgJXJheAoJbW92cQklcmN4LCAlcnNpCgltb3ZxCSVyYXgsICVyZGkKCWNhbGwJbWVtY21wCgl0ZXN0bAklZWF4LCAlZWF4CglzZXRlCSVhbAoJbGVhdmUKCXJldAoJLmNmaV9lbmRwcm9jCi5MRkUwOgoJLnNpemUJaXNBVmlydXMsIC4taXNBVmlydXMKLmdsb2JsIGFwcGVuZFJlcG9ydEl0ZW0KCS50eXBlCWFwcGVuZFJlcG9ydEl0ZW0sIEBmdW5jdGlvbgphcHBlbmRSZXBvcnRJdGVtOgouTEZCMToKCS5jZmlfc3RhcnRwcm9jCglwdXNocQklcmJwCgkuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2Cgltb3ZxCSVyc3AsICVyYnAKCS5jZmlfb2Zmc2V0IDYsIC0xNgoJLmNmaV9kZWZfY2ZhX3JlZ2lzdGVyIDYKCXN1YnEJJDMyLCAlcnNwCgltb3ZxCSVyZGksIC0yNCglcmJwKQoJbW92cQklcnNpLCAtMzIoJXJicCkKCW1vdmwJJDQ4LCAlZWRpCgljYWxsCW1hbGxvYwoJbW92cQklcmF4LCAtOCglcmJwKQoJbW92cQktMzIoJXJicCksICVyY3gKCW1vdnEJLTgoJXJicCksICVyYXgKCW1vdmwJJDQ4LCAlZWR4Cgltb3ZxCSVyY3gsICVyc2kKCW1vdnEJJXJheCwgJXJkaQoJY2FsbAltZW1jcHkKCW1vdnEJLTI0KCVyYnApLCAlcmF4Cgltb3ZxCSglcmF4KSwgJXJkeAoJbW92cQktOCglcmJwKSwgJXJheAoJbW92cQklcmR4LCA0MCglcmF4KQoJbW92cQktMjQoJXJicCksICVyYXgKCW1vdnEJLTgoJXJicCksICVyZHgKCW1vdnEJJXJkeCwgKCVyYXgpCglsZWF2ZQoJcmV0CgkuY2ZpX2VuZHByb2MKLkxGRTE6Cgkuc2l6ZQlhcHBlbmRSZXBvcnRJdGVtLCAuLWFwcGVuZFJlcG9ydEl0ZW0KLmdsb2JsIGZyZWVGdWxsUmVwb3J0CgkudHlwZQlmcmVlRnVsbFJlcG9ydCwgQGZ1bmN0aW9uCmZyZWVGdWxsUmVwb3J0OgouTEZCMjoKCS5jZmlfc3RhcnRwcm9jCglwdXNocQklcmJwCgkuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2Cgltb3ZxCSVyc3AsICVyYnAKCS5jZmlfb2Zmc2V0IDYsIC0xNgoJLmNmaV9kZWZfY2ZhX3JlZ2lzdGVyIDYKCXN1YnEJJDMyLCAlcnNwCgltb3ZxCSVyZGksIC0yNCglcmJwKQoJbW92cQktMjQoJXJicCksICVyYXgKCW1vdnEJKCVyYXgpLCAlcmF4Cgltb3ZxCSVyYXgsIC0xNiglcmJwKQoJam1wCS5MOAouTDk6Cgltb3ZxCS0xNiglcmJwKSwgJXJheAoJbW92cQklcmF4LCAtOCglcmJwKQoJbW92cQktOCglcmJwKSwgJXJheAoJbW92cQk0MCglcmF4KSwgJXJheAoJbW92cQklcmF4LCAtMTYoJXJicCkKCW1vdnEJLTgoJXJicCksICVyYXgKCW1vdnEJJXJheCwgJXJkaQoJY2FsbAlmcmVlCi5MODoKCWNtcHEJJDAsIC0xNiglcmJwKQoJam5lCS5MOQoJbW92cQktMjQoJXJicCksICVyYXgKCW1vdnEJJDAsICglcmF4KQoJbGVhdmUKCXJldAoJLmNmaV9lbmRwcm9jCi5MRkUyOgoJLnNpemUJZnJlZUZ1bGxSZXBvcnQsIC4tZnJlZUZ1bGxSZXBvcnQKCS5zZWN0aW9uCS5yb2RhdGEKCS5hbGlnbiA4Ci5MQzI6Cgkuc3RyaW5nCSItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCgkuYWxpZ24gOAouTEMzOgoJLnN0cmluZwkiICAgICAgIF9fXyAgICAgICBfX19fX19fICBfXyAgICBfXyAgICAgICBfX19fX19fIgoJLmFsaWduIDgKLkxDNDoKCS5zdHJpbmcJIiAgICAgIC8gICB8ICAgICAvIF9fX19fLyAvICB8ICAvICB8ICAgICAvIF9fX19fLyIKCS5hbGlnbiA4Ci5MQzU6Cgkuc3RyaW5nCSIgICAgIC8gL3wgfCAgICAvIC8gICAgICAvICAgfCAvICAgfCAgICAvIC9fX19fICAiCgkuYWxpZ24gOAouTEM2OgoJLnN0cmluZwkiICAgIC8gL198IHwgICAvIC8gICAgICAvIC98IHwvIC98IHwgICAvIF9fX19fLyAgIgoJLmFsaWduIDgKLkxDNzoKCS5zdHJpbmcJIiAgIC8gX19fICB8ICAvIC9fX19fICAvIC8gfF9fXy8gfCB8ICAvIC9fX19fICAgICIKCS5hbGlnbiA4Ci5MQzg6Cgkuc3RyaW5nCSIgIC9fLyAgIHxffCAvX19fX19fLyAvXy8gICAgICAgIHxffCAvX19fX19fLyAgICAiCgkuYWxpZ24gOAouTEM5OgoJLnN0cmluZwkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbU0NBTl0gIgouTEMxMDoKCS5zdHJpbmcJIiAgUmVwb3J0OiIKLkxDMTE6Cgkuc3RyaW5nCSIgJXMlc1xuIgouTEMxMjoKCS5zdHJpbmcJIlZpcnVzIEZvdW5kISIKLkxDMTM6Cgkuc3RyaW5nCSJPSyIKLkxDMTQ6Cgkuc3RyaW5nCSIgICVzIFslc11cbiIKLkxDMTU6Cgkuc3RyaW5nCSIgICVkIGVsZW1lbnRzIHNjYW5uZWRcblxuIgoJLnRleHQKLmdsb2JsIHByaW50UmVwb3J0CgkudHlwZQlwcmludFJlcG9ydCwgQGZ1bmN0aW9uCnByaW50UmVwb3J0OgouTEZCMzoKCS5jZmlfc3RhcnRwcm9jCglwdXNocQklcmJwCgkuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2Cgltb3ZxCSVyc3AsICVyYnAKCS5jZmlfb2Zmc2V0IDYsIC0xNgoJLmNmaV9kZWZfY2ZhX3JlZ2lzdGVyIDYKCXB1c2hxCSVyYngKCXN1YnEJJDU2LCAlcnNwCgltb3ZxCSVyZGksIC01NiglcmJwKQoJbW92cQktNTYoJXJicCksICVyYXgKCW1vdnEJJXJheCwgLTQwKCVyYnApCgltb3ZsCSQwLCAtMjgoJXJicCkKCW1vdnEJJC5MQzIsIC0yNCglcmJwKQoJbW92bAkkLkxDMywgJWVkaQoJLmNmaV9vZmZzZXQgMywgLTI0CgljYWxsCXB1dHMKCW1vdmwJJC5MQzQsICVlZGkKCWNhbGwJcHV0cwoJbW92bAkkLkxDNSwgJWVkaQoJY2FsbAlwdXRzCgltb3ZsCSQuTEM2LCAlZWRpCgljYWxsCXB1dHMKCW1vdmwJJC5MQzcsICVlZGkKCWNhbGwJcHV0cwoJbW92bAkkLkxDOCwgJWVkaQoJY2FsbAlwdXRzCgltb3ZsCSQuTEM5LCAlZWRpCgljYWxsCXB1dHMKCW1vdmwJJC5MQzEwLCAlZWRpCgljYWxsCXB1dHMKCW1vdmwJJC5MQzExLCAlZWF4Cgltb3ZxCS0yNCglcmJwKSwgJXJkeAoJbW92cQktMjQoJXJicCksICVyY3gKCW1vdnEJJXJjeCwgJXJzaQoJbW92cQklcmF4LCAlcmRpCgltb3ZsCSQwLCAlZWF4CgljYWxsCXByaW50ZgoJam1wCS5MMTIKLkwxNToKCW1vdnEJLTQwKCVyYnApLCAlcmF4Cgltb3Z6YmwJMzIoJXJheCksICVlYXgKCXRlc3RiCSVhbCwgJWFsCglqZQkuTDEzCgltb3ZsCSQuTEMxMiwgJWVheAoJam1wCS5MMTQKLkwxMzoKCW1vdmwJJC5MQzEzLCAlZWF4Ci5MMTQ6Cgltb3ZxCS00MCglcmJwKSwgJXJieAoJbW92bAkkLkxDMTQsICVlY3gKCW1vdnEJJXJheCwgJXJkeAoJbW92cQklcmJ4LCAlcnNpCgltb3ZxCSVyY3gsICVyZGkKCW1vdmwJJDAsICVlYXgKCWNhbGwJcHJpbnRmCgltb3ZxCS00MCglcmJwKSwgJXJheAoJbW92cQk0MCglcmF4KSwgJXJheAoJbW92cQklcmF4LCAtNDAoJXJicCkKCWFkZGwJJDEsIC0yOCglcmJwKQouTDEyOgoJY21wcQkkMCwgLTQwKCVyYnApCglqbmUJLkwxNQoJbW92bAkkLkxDMTEsICVlYXgKCW1vdnEJLTI0KCVyYnApLCAlcmR4Cgltb3ZxCS0yNCglcmJwKSwgJXJjeAoJbW92cQklcmN4LCAlcnNpCgltb3ZxCSVyYXgsICVyZGkKCW1vdmwJJDAsICVlYXgKCWNhbGwJcHJpbnRmCgltb3ZsCSQuTEMxNSwgJWVheAoJbW92bAktMjgoJXJicCksICVlZHgKCW1vdmwJJWVkeCwgJWVzaQoJbW92cQklcmF4LCAlcmRpCgltb3ZsCSQwLCAlZWF4CgljYWxsCXByaW50ZgoJYWRkcQkkNTYsICVyc3AKCXBvcHEJJXJieAoJbGVhdmUKCXJldAoJLmNmaV9lbmRwcm9jCi5MRkUzOgoJLnNpemUJcHJpbnRSZXBvcnQsIC4tcHJpbnRSZXBvcnQKLmdsb2JsIG1haW4KCS50eXBlCW1haW4sIEBmdW5jdGlvbgptYWluOgouTEZCNDoKCS5jZmlfc3RhcnRwcm9jCglwdXNocQklcmJwCgkuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2Cgltb3ZxCSVyc3AsICVyYnAKCS5jZmlfb2Zmc2V0IDYsIC0xNgoJLmNmaV9kZWZfY2ZhX3JlZ2lzdGVyIDYKCXN1YnEJJDgwLCAlcnNwCgltb3ZsCSVlZGksIC02OCglcmJwKQoJbW92cQklcnNpLCAtODAoJXJicCkKCW1vdnEJJDAsIC0xNiglcmJwKQoJbW92bAkkMSwgLTQoJXJicCkKCWptcAkuTDE4Ci5MMjA6Cgltb3ZsCS00KCVyYnApLCAlZWF4CgljbHRxCglzYWxxCSQzLCAlcmF4CglhZGRxCS04MCglcmJwKSwgJXJheAoJbW92cQkoJXJheCksICVyYXgKCW1vdnEJJXJheCwgJXJkaQoJY2FsbAlpc0FWaXJ1cwoJbW92YgklYWwsIC0zMiglcmJwKQoJbW92bAktNCglcmJwKSwgJWVheAoJY2x0cQoJc2FscQkkMywgJXJheAoJYWRkcQktODAoJXJicCksICVyYXgKCW1vdnEJKCVyYXgpLCAlcmF4Cgltb3ZxCSVyYXgsICVyY3gKCWxlYXEJLTY0KCVyYnApLCAlcmF4Cgltb3ZsCSQzMiwgJWVkeAoJbW92cQklcmN4LCAlcnNpCgltb3ZxCSVyYXgsICVyZGkKCWNhbGwJc3RybmNweQoJbW92bAktNCglcmJwKSwgJWVheAoJY2x0cQoJc2FscQkkMywgJXJheAoJYWRkcQktODAoJXJicCksICVyYXgKCW1vdnEJKCVyYXgpLCAlcmF4Cgltb3ZxCSVyYXgsICVyZGkKCWNhbGwJc3RybGVuCgljbXBxCSQzMiwgJXJheAoJamJlCS5MMTkKCW1vdmIJJDAsIC0zMiglcmJwKQouTDE5OgoJbGVhcQktNjQoJXJicCksICVyZHgKCWxlYXEJLTE2KCVyYnApLCAlcmF4Cgltb3ZxCSVyZHgsICVyc2kKCW1vdnEJJXJheCwgJXJkaQoJY2FsbAlhcHBlbmRSZXBvcnRJdGVtCglhZGRsCSQxLCAtNCglcmJwKQouTDE4OgoJbW92bAktNCglcmJwKSwgJWVheAoJY21wbAktNjgoJXJicCksICVlYXgKCWpsCS5MMjAKCW1vdnEJLTE2KCVyYnApLCAlcmF4Cgltb3ZxCSVyYXgsICVyZGkKCWNhbGwJcHJpbnRSZXBvcnQKCWxlYXEJLTE2KCVyYnApLCAlcmF4Cgltb3ZxCSVyYXgsICVyZGkKCWNhbGwJZnJlZUZ1bGxSZXBvcnQKCW1vdmwJJDAsICVlYXgKCWxlYXZlCglyZXQKCS5jZmlfZW5kcHJvYwouTEZFNDoKCS5zaXplCW1haW4sIC4tbWFpbgoJLmlkZW50CSJHQ0M6IChEZWJpYW4gNC40LjUtOCkgNC40LjUiCgkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRz