406546:	8b f1                	mov    %ecx,%esi
406548:	8b 4d 08             	mov    0x8(%ebp),%ecx
40654b:	57                   	push   %edi
40654c:	3b 4e 08             	cmp    0x8(%esi),%ecx
40654f:	76 7b                	jbe    0x4065cc
406551:	83 3e 00             	cmpl   $0x0,(%esi)
406554:	0f ae e8             	lfence
406557:	75 1b                	jne    0x406574
406559:	8b 7e 0c             	mov    0xc(%esi),%edi
40655c:	3b f9                	cmp    %ecx,%edi
40655e:	77 02                	ja     0x406562
406560:	8b f9                	mov    %ecx,%edi
406562:	6a 04                	push   $0x4
406564:	57                   	push   %edi
406565:	e8 d5 5d 00 00       	call   0x40c33f
40656a:	89 06                	mov    %eax,(%esi)
40656c:	59                   	pop    %ecx
40656d:	59                   	pop    %ecx
40656e:	85 c0                	test   %eax,%eax
406570:	74 34                	je     0x4065a6
406572:	eb 55                	jmp    0x4065c9
406574:	8b 56 0c             	mov    0xc(%esi),%edx
406577:	85 d2                	test   %edx,%edx
406579:	75 10                	jne    0x40658b
40657b:	8b 56 08             	mov    0x8(%esi),%edx
40657e:	8b c1                	mov    %ecx,%eax
406580:	2b 46 08             	sub    0x8(%esi),%eax
406583:	d1 ea                	shr    $1,%edx
406585:	3b c2                	cmp    %edx,%eax
406587:	76 02                	jbe    0x40658b
406589:	8b d0                	mov    %eax,%edx
40658b:	8b 7e 08             	mov    0x8(%esi),%edi
40658e:	03 fa                	add    %edx,%edi
406590:	3b cf                	cmp    %edi,%ecx
406592:	72 02                	jb     0x406596
406594:	8b f9                	mov    %ecx,%edi
406596:	6a 04                	push   $0x4
406598:	57                   	push   %edi
406599:	e8 a1 5d 00 00       	call   0x40c33f
40659e:	8b d8                	mov    %eax,%ebx
4065a0:	59                   	pop    %ecx
4065a1:	59                   	pop    %ecx
4065a2:	85 db                	test   %ebx,%ebx
4065a4:	75 04                	jne    0x4065aa
4065a6:	32 c0                	xor    %al,%al
4065a8:	eb 24                	jmp    0x4065ce
4065aa:	0f ae e8             	lfence
4065ad:	8b 46 04             	mov    0x4(%esi),%eax
4065b0:	c1 e0 02             	shl    $0x2,%eax
4065b3:	50                   	push   %eax
4065b4:	ff 36                	push   (%esi)
4065b6:	50                   	push   %eax
4065b7:	53                   	push   %ebx
4065b8:	e8 5e ab ff ff       	call   0x40111b
4065bd:	ff 36                	push   (%esi)
4065bf:	e8 b7 5c 00 00       	call   0x40c27b
4065c4:	83 c4 14             	add    $0x14,%esp
4065c7:	89 1e                	mov    %ebx,(%esi)
4065c9:	89 7e 08             	mov    %edi,0x8(%esi)
4065cc:	b0 01                	mov    $0x1,%al
4065ce:	5f                   	pop    %edi
4065cf:	5e                   	pop    %esi
4065d0:	5b                   	pop    %ebx
4065d1:	5d                   	pop    %ebp
4065d2:	c2 04 00             	ret    $0x4
4065d5:	56                   	push   %esi
4065d6:	57                   	push   %edi
4065d7:	8b fa                	mov    %edx,%edi
4065d9:	8b f1                	mov    %ecx,%esi
4065db:	85 ff                	test   %edi,%edi
4065dd:	74 0f                	je     0x4065ee
4065df:	8b ce                	mov    %esi,%ecx
4065e1:	e8 fa fe ff ff       	call   0x4064e0
4065e6:	83 c6 04             	add    $0x4,%esi
4065e9:	83 ef 01             	sub    $0x1,%edi
4065ec:	75 f1                	jne    0x4065df
4065ee:	5f                   	pop    %edi
4065ef:	5e                   	pop    %esi
4065f0:	c3                   	ret
4065f1:	55                   	push   %ebp
4065f2:	8b ec                	mov    %esp,%ebp
4065f4:	8b 4d 08             	mov    0x8(%ebp),%ecx
4065f7:	8d 45 10             	lea    0x10(%ebp),%eax
4065fa:	8b 55 0c             	mov    0xc(%ebp),%edx
4065fd:	50                   	push   %eax
4065fe:	e8 03 00 00 00       	call   0x406606
406603:	59                   	pop    %ecx
406604:	5d                   	pop    %ebp
406605:	c3                   	ret
406606:	55                   	push   %ebp
406607:	8b ec                	mov    %esp,%ebp
406609:	51                   	push   %ecx
40660a:	51                   	push   %ecx
40660b:	8b 45 08             	mov    0x8(%ebp),%eax
40660e:	53                   	push   %ebx
40660f:	56                   	push   %esi
406610:	57                   	push   %edi
406611:	8b fa                	mov    %edx,%edi
406613:	89 45 fc             	mov    %eax,-0x4(%ebp)
406616:	57                   	push   %edi
406617:	89 7d f8             	mov    %edi,-0x8(%ebp)
40661a:	8b d9                	mov    %ecx,%ebx
40661c:	e8 10 a4 00 00       	call   0x410a31
406621:	be 00 01 00 00       	mov    $0x100,%esi
406626:	59                   	pop    %ecx
406627:	3b c6                	cmp    %esi,%eax
406629:	72 11                	jb     0x40663c
40662b:	8b f0                	mov    %eax,%esi
40662d:	81 fe ff ff ff 7f    	cmp    $0x7fffffff,%esi
406633:	76 07                	jbe    0x40663c
406635:	b8 57 00 07 80       	mov    $0x80070057,%eax
40663a:	eb 4f                	jmp    0x40668b
40663c:	56                   	push   %esi
40663d:	8b cb                	mov    %ebx,%ecx
40663f:	e8 9c d0 ff ff       	call   0x4036e0
406644:	ff 75 fc             	push   -0x4(%ebp)
406647:	8d 56 ff             	lea    -0x1(%esi),%edx
40664a:	8b c8                	mov    %eax,%ecx
40664c:	57                   	push   %edi
40664d:	e8 00 aa ff ff       	call   0x401052
406652:	8b f8                	mov    %eax,%edi
406654:	81 ff 7a 00 07 80    	cmp    $0x8007007a,%edi
40665a:	75 24                	jne    0x406680
40665c:	b8 ff ff ff 7f       	mov    $0x7fffffff,%eax
406661:	3b f0                	cmp    %eax,%esi
406663:	73 16                	jae    0x40667b
406665:	03 f6                	add    %esi,%esi
406667:	3b f0                	cmp    %eax,%esi
406669:	76 02                	jbe    0x40666d
40666b:	8b f0                	mov    %eax,%esi
40666d:	6a ff                	push   $0xffffffff
40666f:	8b cb                	mov    %ebx,%ecx
406671:	e8 3e d0 ff ff       	call   0x4036b4
406676:	8b 7d f8             	mov    -0x8(%ebp),%edi
406679:	eb c1                	jmp    0x40663c
40667b:	bf 57 00 07 80       	mov    $0x80070057,%edi
406680:	6a ff                	push   $0xffffffff
406682:	8b cb                	mov    %ebx,%ecx
406684:	e8 2b d0 ff ff       	call   0x4036b4
406689:	8b c7                	mov    %edi,%eax
40668b:	5f                   	pop    %edi
40668c:	5e                   	pop    %esi
40668d:	5b                   	pop    %ebx
40668e:	c9                   	leave
40668f:	c3                   	ret
406690:	55                   	push   %ebp
406691:	8b ec                	mov    %esp,%ebp
406693:	83 ec 64             	sub    $0x64,%esp
406696:	53                   	push   %ebx
406697:	56                   	push   %esi
406698:	8b f1                	mov    %ecx,%esi
40669a:	89 55 b0             	mov    %edx,-0x50(%ebp)
40669d:	57                   	push   %edi
40669e:	89 75 ac             	mov    %esi,-0x54(%ebp)
4066a1:	8b 46 10             	mov    0x10(%esi),%eax
4066a4:	8b 4e 08             	mov    0x8(%esi),%ecx
4066a7:	89 45 f0             	mov    %eax,-0x10(%ebp)
4066aa:	8b 46 38             	mov    0x38(%esi),%eax
4066ad:	89 45 dc             	mov    %eax,-0x24(%ebp)
4066b0:	8b 46 3c             	mov    0x3c(%esi),%eax
4066b3:	89 45 d4             	mov    %eax,-0x2c(%ebp)
4066b6:	8b 46 40             	mov    0x40(%esi),%eax
4066b9:	89 45 d0             	mov    %eax,-0x30(%ebp)
4066bc:	8b 46 44             	mov    0x44(%esi),%eax
4066bf:	89 45 c4             	mov    %eax,-0x3c(%ebp)
4066c2:	33 c0                	xor    %eax,%eax
4066c4:	40                   	inc    %eax
4066c5:	8b 56 34             	mov    0x34(%esi),%edx
4066c8:	d3 e0                	shl    %cl,%eax
4066ca:	8b 4e 04             	mov    0x4(%esi),%ecx
4066cd:	48                   	dec    %eax
4066ce:	89 45 a8             	mov    %eax,-0x58(%ebp)
4066d1:	33 c0                	xor    %eax,%eax
4066d3:	40                   	inc    %eax
4066d4:	8b 5e 18             	mov    0x18(%esi),%ebx
4066d7:	d3 e0                	shl    %cl,%eax
4066d9:	8b 0e                	mov    (%esi),%ecx
4066db:	48                   	dec    %eax
4066dc:	8b 7e 1c             	mov    0x1c(%esi),%edi
4066df:	89 45 a4             	mov    %eax,-0x5c(%ebp)
4066e2:	8b 46 14             	mov    0x14(%esi),%eax
4066e5:	89 45 c8             	mov    %eax,-0x38(%ebp)
4066e8:	8b 46 28             	mov    0x28(%esi),%eax
4066eb:	89 45 d8             	mov    %eax,-0x28(%ebp)
4066ee:	8b 46 24             	mov    0x24(%esi),%eax
4066f1:	89 45 e8             	mov    %eax,-0x18(%ebp)
4066f4:	8b 46 2c             	mov    0x2c(%esi),%eax
4066f7:	89 45 e0             	mov    %eax,-0x20(%ebp)
4066fa:	8b 46 30             	mov    0x30(%esi),%eax
4066fd:	8b 76 20             	mov    0x20(%esi),%esi
406700:	89 45 b8             	mov    %eax,-0x48(%ebp)
406703:	33 c0                	xor    %eax,%eax
406705:	89 45 e4             	mov    %eax,-0x1c(%ebp)
406708:	b0 08                	mov    $0x8,%al
40670a:	2a c1                	sub    %cl,%al
40670c:	89 55 ec             	mov    %edx,-0x14(%ebp)
40670f:	88 45 ff             	mov    %al,-0x1(%ebp)
406712:	8b 45 e0             	mov    -0x20(%ebp),%eax
406715:	89 4d a0             	mov    %ecx,-0x60(%ebp)
406718:	89 5d f4             	mov    %ebx,-0xc(%ebp)
40671b:	23 45 a8             	and    -0x58(%ebp),%eax
40671e:	8b ca                	mov    %edx,%ecx
406720:	c1 e1 04             	shl    $0x4,%ecx
406723:	03 c8                	add    %eax,%ecx
406725:	89 45 bc             	mov    %eax,-0x44(%ebp)
406728:	8b 45 f0             	mov    -0x10(%ebp),%eax
40672b:	0f b7 04 48          	movzwl (%eax,%ecx,2),%eax
40672f:	89 45 b4             	mov    %eax,-0x4c(%ebp)
406732:	0f b7 d0             	movzwl %ax,%edx
406735:	81 ff 00 00 00 01    	cmp    $0x1000000,%edi
40673b:	73 0f                	jae    0x40674c
40673d:	0f b6 03             	movzbl (%ebx),%eax
406740:	c1 e6 08             	shl    $0x8,%esi
406743:	c1 e7 08             	shl    $0x8,%edi
406746:	0b f0                	or     %eax,%esi
406748:	43                   	inc    %ebx
406749:	89 5d f4             	mov    %ebx,-0xc(%ebp)
40674c:	8b c7                	mov    %edi,%eax
40674e:	c1 e8 0b             	shr    $0xb,%eax
406751:	0f af c2             	imul   %edx,%eax
406754:	3b f0                	cmp    %eax,%esi
406756:	0f 83 ce 01 00 00    	jae    0x40692a
40675c:	8b f8                	mov    %eax,%edi
40675e:	b8 00 08 00 00       	mov    $0x800,%eax
406763:	2b c2                	sub    %edx,%eax
406765:	8b 55 f0             	mov    -0x10(%ebp),%edx
406768:	c1 e8 05             	shr    $0x5,%eax
40676b:	03 45 b4             	add    -0x4c(%ebp),%eax
40676e:	66 89 04 4a          	mov    %ax,(%edx,%ecx,2)
406772:	81 c2 6c 0e 00 00    	add    $0xe6c,%edx
406778:	83 7d b8 00          	cmpl   $0x0,-0x48(%ebp)
40677c:	89 55 f8             	mov    %edx,-0x8(%ebp)
40677f:	75 06                	jne    0x406787
406781:	83 7d e0 00          	cmpl   $0x0,-0x20(%ebp)
406785:	74 32                	je     0x4067b9
406787:	8b 45 e8             	mov    -0x18(%ebp),%eax
40678a:	85 c0                	test   %eax,%eax
40678c:	75 03                	jne    0x406791
40678e:	8b 45 d8             	mov    -0x28(%ebp),%eax
406791:	8b 4d c8             	mov    -0x38(%ebp),%ecx
406794:	0f b6 54 08 ff       	movzbl -0x1(%eax,%ecx,1),%edx
406799:	8a 4d ff             	mov    -0x1(%ebp),%cl
40679c:	8b 45 e0             	mov    -0x20(%ebp),%eax
40679f:	23 45 a4             	and    -0x5c(%ebp),%eax
4067a2:	d3 ea                	shr    %cl,%edx
4067a4:	8b 4d a0             	mov    -0x60(%ebp),%ecx
4067a7:	d3 e0                	shl    %cl,%eax
4067a9:	03 d0                	add    %eax,%edx
4067ab:	69 c2 00 06 00 00    	imul   $0x600,%edx,%eax
4067b1:	8b 55 f8             	mov    -0x8(%ebp),%edx
4067b4:	03 d0                	add    %eax,%edx
4067b6:	89 55 f8             	mov    %edx,-0x8(%ebp)
4067b9:	8b 4d ec             	mov    -0x14(%ebp),%ecx
4067bc:	83 f9 07             	cmp    $0x7,%ecx
4067bf:	73 7f                	jae    0x406840
4067c1:	83 f9 04             	cmp    $0x4,%ecx
4067c4:	73 04                	jae    0x4067ca
4067c6:	8b c1                	mov    %ecx,%eax
4067c8:	eb 03                	jmp    0x4067cd
4067ca:	6a 03                	push   $0x3
4067cc:	58                   	pop    %eax
4067cd:	2b c8                	sub    %eax,%ecx
4067cf:	89 4d ec             	mov    %ecx,-0x14(%ebp)
4067d2:	33 c9                	xor    %ecx,%ecx
4067d4:	41                   	inc    %ecx
4067d5:	03 c9                	add    %ecx,%ecx
4067d7:	8d 04 11             	lea    (%ecx,%edx,1),%eax
4067da:	89 45 b4             	mov    %eax,-0x4c(%ebp)
4067dd:	0f b7 00             	movzwl (%eax),%eax
4067e0:	89 45 bc             	mov    %eax,-0x44(%ebp)
4067e3:	0f b7 d0             	movzwl %ax,%edx
4067e6:	81 ff 00 00 00 01    	cmp    $0x1000000,%edi
4067ec:	73 0c                	jae    0x4067fa
4067ee:	0f b6 03             	movzbl (%ebx),%eax
4067f1:	c1 e6 08             	shl    $0x8,%esi
4067f4:	c1 e7 08             	shl    $0x8,%edi
4067f7:	0b f0                	or     %eax,%esi
4067f9:	43                   	inc    %ebx
4067fa:	8b c7                	mov    %edi,%eax
4067fc:	c1 e8 0b             	shr    $0xb,%eax
4067ff:	0f af c2             	imul   %edx,%eax
406802:	3b f0                	cmp    %eax,%esi
406804:	73 11                	jae    0x406817
406806:	8b f8                	mov    %eax,%edi
406808:	b8 00 08 00 00       	mov    $0x800,%eax
40680d:	2b c2                	sub    %edx,%eax
40680f:	c1 e8 05             	shr    $0x5,%eax
406812:	03 45 bc             	add    -0x44(%ebp),%eax
406815:	eb 0d                	jmp    0x406824
406817:	2b f8                	sub    %eax,%edi
406819:	c1 ea 05             	shr    $0x5,%edx
40681c:	2b f0                	sub    %eax,%esi
40681e:	8b 45 bc             	mov    -0x44(%ebp),%eax
406821:	41                   	inc    %ecx
406822:	2b c2                	sub    %edx,%eax
406824:	8b 55 b4             	mov    -0x4c(%ebp),%edx
406827:	0f b7 c0             	movzwl %ax,%eax
40682a:	66 89 02             	mov    %ax,(%edx)
40682d:	8b 55 f8             	mov    -0x8(%ebp),%edx
406830:	81 f9 00 01 00 00    	cmp    $0x100,%ecx
406836:	72 9d                	jb     0x4067d5
406838:	89 5d f4             	mov    %ebx,-0xc(%ebp)
40683b:	e9 cf 00 00 00       	jmp    0x40690f
406840:	8b 55 dc             	mov    -0x24(%ebp),%edx
406843:	39 55 e8             	cmp    %edx,-0x18(%ebp)
406846:	1b c0                	sbb    %eax,%eax
406848:	23 45 d8             	and    -0x28(%ebp),%eax
40684b:	2b c2                	sub    %edx,%eax
40684d:	8b 55 ac             	mov    -0x54(%ebp),%edx
406850:	03 42 14             	add    0x14(%edx),%eax
406853:	83 f9 0a             	cmp    $0xa,%ecx
406856:	8b 55 e8             	mov    -0x18(%ebp),%edx
406859:	0f b6 04 10          	movzbl (%eax,%edx,1),%eax
40685d:	ba 00 01 00 00       	mov    $0x100,%edx
406862:	89 45 b4             	mov    %eax,-0x4c(%ebp)
406865:	1b c0                	sbb    %eax,%eax
406867:	83 e0 fd             	and    $0xfffffffd,%eax
40686a:	89 55 bc             	mov    %edx,-0x44(%ebp)
40686d:	83 c0 06             	add    $0x6,%eax
406870:	2b c8                	sub    %eax,%ecx
406872:	89 4d ec             	mov    %ecx,-0x14(%ebp)
406875:	33 c9                	xor    %ecx,%ecx
406877:	41                   	inc    %ecx
406878:	8b 45 b4             	mov    -0x4c(%ebp),%eax
40687b:	8b 5d f8             	mov    -0x8(%ebp),%ebx
40687e:	03 c0                	add    %eax,%eax
406880:	23 d0                	and    %eax,%edx
406882:	89 45 b4             	mov    %eax,-0x4c(%ebp)
406885:	8b 45 bc             	mov    -0x44(%ebp),%eax
406888:	03 c2                	add    %edx,%eax
40688a:	03 c1                	add    %ecx,%eax
40688c:	89 45 9c             	mov    %eax,-0x64(%ebp)
40688f:	0f b7 04 43          	movzwl (%ebx,%eax,2),%eax
406893:	8b 5d f4             	mov    -0xc(%ebp),%ebx
406896:	89 45 cc             	mov    %eax,-0x34(%ebp)
406899:	0f b7 c0             	movzwl %ax,%eax
40689c:	89 45 c0             	mov    %eax,-0x40(%ebp)
40689f:	81 ff 00 00 00 01    	cmp    $0x1000000,%edi
4068a5:	73 0f                	jae    0x4068b6
4068a7:	0f b6 03             	movzbl (%ebx),%eax
4068aa:	c1 e6 08             	shl    $0x8,%esi
4068ad:	c1 e7 08             	shl    $0x8,%edi
4068b0:	0b f0                	or     %eax,%esi
4068b2:	43                   	inc    %ebx
4068b3:	89 5d f4             	mov    %ebx,-0xc(%ebp)
4068b6:	8b c7                	mov    %edi,%eax
4068b8:	03 c9                	add    %ecx,%ecx
4068ba:	c1 e8 0b             	shr    $0xb,%eax
4068bd:	0f af 45 c0          	imul   -0x40(%ebp),%eax
4068c1:	3b f0                	cmp    %eax,%esi