407253:	83 c8 02             	or     $0x2,%eax
407256:	83 c4 34             	add    $0x34,%esp
407259:	89 43 0c             	mov    %eax,0xc(%ebx)
40725c:	83 7d 9c 00          	cmpl   $0x0,-0x64(%ebp)
407260:	0f 85 9e bd 07 00    	jne    0x483004
407266:	8b 45 d4             	mov    -0x2c(%ebp),%eax
407269:	89 45 d8             	mov    %eax,-0x28(%ebp)
40726c:	8b 45 e4             	mov    -0x1c(%ebp),%eax
40726f:	89 45 cc             	mov    %eax,-0x34(%ebp)
407272:	8b 75 f8             	mov    -0x8(%ebp),%esi
407275:	33 d2                	xor    %edx,%edx
407277:	89 75 f8             	mov    %esi,-0x8(%ebp)
40727a:	85 f6                	test   %esi,%esi
40727c:	75 0c                	jne    0x40728a
40727e:	8b 45 dc             	mov    -0x24(%ebp),%eax
407281:	66 39 10             	cmp    %dx,(%eax)
407284:	0f 85 8a bd 07 00    	jne    0x483014
40728a:	8b 45 e8             	mov    -0x18(%ebp),%eax
40728d:	33 c9                	xor    %ecx,%ecx
40728f:	66 89 08             	mov    %cx,(%eax)
407292:	83 c0 02             	add    $0x2,%eax
407295:	89 45 e8             	mov    %eax,-0x18(%ebp)
407298:	2b c7                	sub    %edi,%eax
40729a:	d1 f8                	sar    $1,%eax
40729c:	3b 45 d0             	cmp    -0x30(%ebp),%eax
40729f:	0f 8f 7a bd 07 00    	jg     0x48301f
4072a5:	8b 85 50 ff ff ff    	mov    -0xb0(%ebp),%eax
4072ab:	8b 8d 40 ff ff ff    	mov    -0xc0(%ebp),%ecx
4072b1:	3b c1                	cmp    %ecx,%eax
4072b3:	0f 87 71 bd 07 00    	ja     0x48302a
4072b9:	81 bd 6c ff ff ff 00 	cmpl   $0x800,-0x94(%ebp)
4072c0:	08 00 00
4072c3:	0f 8f d5 bd 07 00    	jg     0x48309e
4072c9:	33 c0                	xor    %eax,%eax
4072cb:	89 85 40 ff ff ff    	mov    %eax,-0xc0(%ebp)
4072d1:	85 f6                	test   %esi,%esi
4072d3:	75 0e                	jne    0x4072e3
4072d5:	66 8b 43 20          	mov    0x20(%ebx),%ax
4072d9:	66 3b 43 1e          	cmp    0x1e(%ebx),%ax
4072dd:	0f 87 c8 bd 07 00    	ja     0x4830ab
4072e3:	f7 45 ec 00 00 02 00 	testl  $0x20000,-0x14(%ebp)
4072ea:	8b 75 fc             	mov    -0x4(%ebp),%esi
4072ed:	75 11                	jne    0x407300
4072ef:	8d 85 30 ff ff ff    	lea    -0xd0(%ebp),%eax
4072f5:	50                   	push   %eax
4072f6:	8b d6                	mov    %esi,%edx
4072f8:	8b cf                	mov    %edi,%ecx
4072fa:	e8 8f 18 00 00       	call   0x408b8e
4072ff:	59                   	pop    %ecx
407300:	83 7d a4 00          	cmpl   $0x0,-0x5c(%ebp)
407304:	0f 85 ac bd 07 00    	jne    0x4830b6
40730a:	8b 75 f8             	mov    -0x8(%ebp),%esi
40730d:	85 f6                	test   %esi,%esi
40730f:	0f 85 31 be 07 00    	jne    0x483146
407315:	8b 43 08             	mov    0x8(%ebx),%eax
407318:	be 80 00 00 00       	mov    $0x80,%esi
40731d:	89 45 c8             	mov    %eax,-0x38(%ebp)
407320:	89 75 0c             	mov    %esi,0xc(%ebp)
407323:	a8 10                	test   $0x10,%al
407325:	75 59                	jne    0x407380
407327:	33 f6                	xor    %esi,%esi
407329:	8d 85 30 ff ff ff    	lea    -0xd0(%ebp),%eax
40732f:	56                   	push   %esi
407330:	50                   	push   %eax
407331:	33 d2                	xor    %edx,%edx
407333:	8b cf                	mov    %edi,%ecx
407335:	e8 3b fa ff ff       	call   0x406d75
40733a:	59                   	pop    %ecx
40733b:	59                   	pop    %ecx
40733c:	85 c0                	test   %eax,%eax
40733e:	0f 85 38 be 07 00    	jne    0x48317c
407344:	8b 45 f4             	mov    -0xc(%ebp),%eax
407347:	85 c0                	test   %eax,%eax
407349:	79 74                	jns    0x4073bf
40734b:	56                   	push   %esi
40734c:	8d 55 f4             	lea    -0xc(%ebp),%edx
40734f:	8b cf                	mov    %edi,%ecx
407351:	e8 6e f8 ff ff       	call   0x406bc4
407356:	8b d0                	mov    %eax,%edx
407358:	8b 45 f4             	mov    -0xc(%ebp),%eax
40735b:	59                   	pop    %ecx
40735c:	85 c0                	test   %eax,%eax
40735e:	79 62                	jns    0x4073c2
407360:	8d 85 30 ff ff ff    	lea    -0xd0(%ebp),%eax
407366:	56                   	push   %esi
407367:	50                   	push   %eax
407368:	33 d2                	xor    %edx,%edx
40736a:	8b cf                	mov    %edi,%ecx
40736c:	e8 19 f9 ff ff       	call   0x406c8a
407371:	59                   	pop    %ecx
407372:	59                   	pop    %ecx
407373:	85 c0                	test   %eax,%eax
407375:	0f 85 0f be 07 00    	jne    0x48318a
40737b:	be 80 00 00 00       	mov    $0x80,%esi
407380:	8b 45 d8             	mov    -0x28(%ebp),%eax
407383:	85 c0                	test   %eax,%eax
407385:	79 52                	jns    0x4073d9
407387:	8b 75 e8             	mov    -0x18(%ebp),%esi
40738a:	33 c0                	xor    %eax,%eax
40738c:	50                   	push   %eax
40738d:	8d 85 30 ff ff ff    	lea    -0xd0(%ebp),%eax
407393:	50                   	push   %eax
407394:	ff 75 fc             	push   -0x4(%ebp)
407397:	8b d6                	mov    %esi,%edx
407399:	8b cf                	mov    %edi,%ecx
40739b:	e8 82 15 00 00       	call   0x408922
4073a0:	83 c4 0c             	add    $0xc,%esp
4073a3:	85 c0                	test   %eax,%eax
4073a5:	0f 85 b6 00 00 00    	jne    0x407461
4073ab:	0f b7 47 02          	movzwl 0x2(%edi),%eax
4073af:	8d 3c 47             	lea    (%edi,%eax,2),%edi
4073b2:	66 83 3f 77          	cmpw   $0x77,(%edi)
4073b6:	74 d2                	je     0x40738a
4073b8:	8b c3                	mov    %ebx,%eax
4073ba:	5f                   	pop    %edi
4073bb:	5e                   	pop    %esi
4073bc:	5b                   	pop    %ebx
4073bd:	c9                   	leave
4073be:	c3                   	ret
4073bf:	8b 55 c4             	mov    -0x3c(%ebp),%edx
4073c2:	66 89 53 18          	mov    %dx,0x18(%ebx)
4073c6:	a8 01                	test   $0x1,%al
4073c8:	0f 85 c8 bd 07 00    	jne    0x483196
4073ce:	be 80 00 00 00       	mov    $0x80,%esi
4073d3:	83 4b 0c 10          	orl    $0x10,0xc(%ebx)
4073d7:	eb a7                	jmp    0x407380
4073d9:	f6 43 08 10          	testb  $0x10,0x8(%ebx)
4073dd:	75 67                	jne    0x407446
4073df:	8b 55 cc             	mov    -0x34(%ebp),%edx
4073e2:	66 89 53 1a          	mov    %dx,0x1a(%ebx)
4073e6:	a8 01                	test   $0x1,%al
4073e8:	74 21                	je     0x40740b
4073ea:	83 7d fc 00          	cmpl   $0x0,-0x4(%ebp)
4073ee:	74 60                	je     0x407450
4073f0:	66 3b d6             	cmp    %si,%dx
4073f3:	0f 83 14 be 07 00    	jae    0x48320d
4073f9:	8b 85 34 ff ff ff    	mov    -0xcc(%ebp),%eax
4073ff:	0f b7 ca             	movzwl %dx,%ecx
407402:	0f b6 04 01          	movzbl (%ecx,%eax,1),%eax
407406:	66 3b c2             	cmp    %dx,%ax
407409:	75 51                	jne    0x40745c
40740b:	83 4b 0c 40          	orl    $0x40,0xc(%ebx)
40740f:	e9 73 ff ff ff       	jmp    0x407387
407414:	6a 10                	push   $0x10
407416:	e9 21 b8 07 00       	jmp    0x482c3c
40741b:	6a 11                	push   $0x11
40741d:	eb 02                	jmp    0x407421
40741f:	6a 15                	push   $0x15
407421:	5e                   	pop    %esi
407422:	e9 27 bd 07 00       	jmp    0x48314e
407427:	89 55 e8             	mov    %edx,-0x18(%ebp)
40742a:	e9 6a fb ff ff       	jmp    0x406f99
40742f:	6a 4e                	push   $0x4e
407431:	e9 06 b8 07 00       	jmp    0x482c3c
407436:	89 4d fc             	mov    %ecx,-0x4(%ebp)
407439:	e9 93 fb ff ff       	jmp    0x406fd1
40743e:	6a 38                	push   $0x38
407440:	eb df                	jmp    0x407421
407442:	6a 14                	push   $0x14
407444:	eb db                	jmp    0x407421
407446:	a8 02                	test   $0x2,%al
407448:	0f 84 39 ff ff ff    	je     0x407387
40744e:	eb 8f                	jmp    0x4073df
407450:	b8 ff 00 00 00       	mov    $0xff,%eax
407455:	66 3b d0             	cmp    %ax,%dx
407458:	77 b1                	ja     0x40740b
40745a:	eb 9d                	jmp    0x4073f9
40745c:	09 73 0c             	or     %esi,0xc(%ebx)
40745f:	eb aa                	jmp    0x40740b
407461:	81 4b 0c 00 80 00 00 	orl    $0x8000,0xc(%ebx)
407468:	e9 4b ff ff ff       	jmp    0x4073b8
40746d:	33 c0                	xor    %eax,%eax
40746f:	e9 46 ff ff ff       	jmp    0x4073ba
407474:	55                   	push   %ebp
407475:	8b ec                	mov    %esp,%ebp
407477:	83 e4 f8             	and    $0xfffffff8,%esp
40747a:	83 ec 64             	sub    $0x64,%esp
40747d:	8b 45 08             	mov    0x8(%ebp),%eax
407480:	53                   	push   %ebx
407481:	8b 00                	mov    (%eax),%eax
407483:	56                   	push   %esi
407484:	8b 32                	mov    (%edx),%esi
407486:	57                   	push   %edi
407487:	8b 7d 34             	mov    0x34(%ebp),%edi
40748a:	89 44 24 20          	mov    %eax,0x20(%esp)
40748e:	8b 45 30             	mov    0x30(%ebp),%eax
407491:	89 44 24 68          	mov    %eax,0x68(%esp)
407495:	6a fe                	push   $0xfffffffe
407497:	58                   	pop    %eax
407498:	89 4c 24 40          	mov    %ecx,0x40(%esp)
40749c:	33 c9                	xor    %ecx,%ecx
40749e:	89 54 24 50          	mov    %edx,0x50(%esp)
4074a2:	8b 55 18             	mov    0x18(%ebp),%edx
4074a5:	89 44 24 10          	mov    %eax,0x10(%esp)
4074a9:	89 44 24 30          	mov    %eax,0x30(%esp)
4074ad:	89 4c 24 44          	mov    %ecx,0x44(%esp)
4074b1:	89 4c 24 48          	mov    %ecx,0x48(%esp)
4074b5:	89 4c 24 1c          	mov    %ecx,0x1c(%esp)
4074b9:	89 4c 24 2c          	mov    %ecx,0x2c(%esp)
4074bd:	b8 85 00 00 00       	mov    $0x85,%eax
4074c2:	89 74 24 6c          	mov    %esi,0x6c(%esp)
4074c6:	8d 4a 04             	lea    0x4(%edx),%ecx
4074c9:	89 74 24 14          	mov    %esi,0x14(%esp)
4074cd:	89 74 24 4c          	mov    %esi,0x4c(%esp)
4074d1:	89 4c 24 0c          	mov    %ecx,0xc(%esp)
4074d5:	66 39 06             	cmp    %ax,(%esi)
4074d8:	0f 84 95 01 00 00    	je     0x407673
4074de:	8d 46 02             	lea    0x2(%esi),%eax
4074e1:	33 db                	xor    %ebx,%ebx
4074e3:	89 44 24 5c          	mov    %eax,0x5c(%esp)
4074e7:	66 89 18             	mov    %bx,(%eax)
4074ea:	8d 04 55 04 00 00 00 	lea    0x4(,%edx,2),%eax
4074f1:	89 44 24 54          	mov    %eax,0x54(%esp)
4074f5:	03 f0                	add    %eax,%esi
4074f7:	8b 47 40             	mov    0x40(%edi),%eax
4074fa:	6a 7c                	push   $0x7c
4074fc:	89 44 24 38          	mov    %eax,0x38(%esp)
407500:	89 44 24 5c          	mov    %eax,0x5c(%esp)
407504:	5a                   	pop    %edx
407505:	83 7d 14 00          	cmpl   $0x0,0x14(%ebp)
407509:	89 74 24 18          	mov    %esi,0x18(%esp)
40750d:	0f 85 87 02 00 00    	jne    0x40779a
407513:	83 7d 10 00          	cmpl   $0x0,0x10(%ebp)
407517:	0f 85 ea af 07 00    	jne    0x482507
40751d:	8b 5d 38             	mov    0x38(%ebp),%ebx
407520:	8b c3                	mov    %ebx,%eax
407522:	f7 d8                	neg    %eax
407524:	1b c0                	sbb    %eax,%eax
407526:	8d 4c 24 0c          	lea    0xc(%esp),%ecx
40752a:	23 c1                	and    %ecx,%eax
40752c:	50                   	push   %eax
40752d:	57                   	push   %edi
40752e:	ff 75 1c             	push   0x1c(%ebp)
407531:	8d 44 24 74          	lea    0x74(%esp),%eax
407535:	50                   	push   %eax
407536:	8d 44 24 34          	lea    0x34(%esp),%eax
40753a:	50                   	push   %eax
40753b:	8d 44 24 3c          	lea    0x3c(%esp),%eax
40753f:	50                   	push   %eax
407540:	8d 44 24 50          	lea    0x50(%esp),%eax
407544:	50                   	push   %eax
407545:	8d 44 24 58          	lea    0x58(%esp),%eax
407549:	50                   	push   %eax
40754a:	ff 75 0c             	push   0xc(%ebp)
40754d:	8d 44 24 44          	lea    0x44(%esp),%eax
407551:	50                   	push   %eax
407552:	8d 54 24 40          	lea    0x40(%esp),%edx
407556:	8d 4c 24 68          	lea    0x68(%esp),%ecx
40755a:	e8 51 02 00 00       	call   0x4077b0
40755f:	83 c4 28             	add    $0x28,%esp
407562:	85 c0                	test   %eax,%eax
407564:	0f 84 20 b0 07 00    	je     0x48258a
40756a:	8b 44 24 34          	mov    0x34(%esp),%eax
40756e:	39 47 40             	cmp    %eax,0x40(%edi)
407571:	0f 87 43 01 00 00    	ja     0x4076ba
407577:	8b 74 24 18          	mov    0x18(%esp),%esi
40757b:	85 db                	test   %ebx,%ebx
40757d:	75 3a                	jne    0x4075b9
40757f:	8b 44 24 14          	mov    0x14(%esp),%eax
407583:	6a 77                	push   $0x77
407585:	59                   	pop    %ecx
407586:	66 39 08             	cmp    %cx,(%eax)
407589:	0f 84 62 01 00 00    	je     0x4076f1
40758f:	8b 4c 24 3c          	mov    0x3c(%esp),%ecx
407593:	8b 54 24 28          	mov    0x28(%esp),%edx
407597:	89 4c 24 2c          	mov    %ecx,0x2c(%esp)
40759b:	8b 4c 24 38          	mov    0x38(%esp),%ecx
40759f:	89 4c 24 30          	mov    %ecx,0x30(%esp)
4075a3:	8b 4c 24 24          	mov    0x24(%esp),%ecx
4075a7:	89 54 24 1c          	mov    %edx,0x1c(%esp)
4075ab:	89 4c 24 10          	mov    %ecx,0x10(%esp)
4075af:	83 7d 10 00          	cmpl   $0x0,0x10(%ebp)
4075b3:	0f 85 70 af 07 00    	jne    0x482529
4075b9:	8b 5c 24 20          	mov    0x20(%esp),%ebx
4075bd:	6a 7c                	push   $0x7c
4075bf:	5a                   	pop    %edx
4075c0:	66 39 13             	cmp    %dx,(%ebx)
4075c3:	0f 84 fd 00 00 00    	je     0x4076c6
4075c9:	83 7d 38 00          	cmpl   $0x0,0x38(%ebp)
4075cd:	75 22                	jne    0x4075f1
4075cf:	8b 7c 24 14          	mov    0x14(%esp),%edi
4075d3:	8b d6                	mov    %esi,%edx
4075d5:	2b d7                	sub    %edi,%edx
4075d7:	d1 fa                	sar    $1,%edx
4075d9:	0f b7 4f 02          	movzwl 0x2(%edi),%ecx
4075dd:	8b c1                	mov    %ecx,%eax
4075df:	f7 d8                	neg    %eax
4075e1:	66 89 57 02          	mov    %dx,0x2(%edi)
4075e5:	8b d1                	mov    %ecx,%edx
4075e7:	8d 3c 47             	lea    (%edi,%eax,2),%edi
4075ea:	85 c9                	test   %ecx,%ecx
4075ec:	7f eb                	jg     0x4075d9
4075ee:	8b 7d 34             	mov    0x34(%ebp),%edi
4075f1:	8b 4c 24 4c          	mov    0x4c(%esp),%ecx
4075f5:	6a 78                	push   $0x78
4075f7:	58                   	pop    %eax
4075f8:	66 89 06             	mov    %ax,(%esi)
4075fb:	8b c6                	mov    %esi,%eax
4075fd:	2b c1                	sub    %ecx,%eax
4075ff:	d1 f8                	sar    $1,%eax
407601:	66 89 46 02          	mov    %ax,0x2(%esi)
407605:	83 c6 04             	add    $0x4,%esi
407608:	83 7c 24 48 00       	cmpl   $0x0,0x48(%esp)
40760d:	0f 8f 87 00 00 00    	jg     0x40769a
407613:	8b 4c 24 0c          	mov    0xc(%esp),%ecx
407617:	8b 44 24 34          	mov    0x34(%esp),%eax
40761b:	8b 54 24 2c          	mov    0x2c(%esp),%edx
40761f:	89 47 40             	mov    %eax,0x40(%edi)
407622:	8b 44 24 50          	mov    0x50(%esp),%eax
407626:	89 30                	mov    %esi,(%eax)
407628:	8b 45 08             	mov    0x8(%ebp),%eax
40762b:	89 18                	mov    %ebx,(%eax)
40762d:	8b 45 20             	mov    0x20(%ebp),%eax
407630:	8b 5c 24 10          	mov    0x10(%esp),%ebx
407634:	89 10                	mov    %edx,(%eax)
407636:	8b 45 24             	mov    0x24(%ebp),%eax
407639:	8b 54 24 30          	mov    0x30(%esp),%edx
40763d:	89 10                	mov    %edx,(%eax)
40763f:	8b 45 28             	mov    0x28(%ebp),%eax
407642:	8b 54 24 1c          	mov    0x1c(%esp),%edx
407646:	89 10                	mov    %edx,(%eax)
407648:	8b 45 2c             	mov    0x2c(%ebp),%eax
40764b:	89 18                	mov    %ebx,(%eax)
40764d:	8b 5d 38             	mov    0x38(%ebp),%ebx
407650:	85 db                	test   %ebx,%ebx
407652:	74 15                	je     0x407669
407654:	8b 13                	mov    (%ebx),%edx
407656:	b8 eb ff ff 7f       	mov    $0x7fffffeb,%eax
40765b:	2b c2                	sub    %edx,%eax
40765d:	3b c1                	cmp    %ecx,%eax
40765f:	0f 8c 7e af 07 00    	jl     0x4825e3
407665:	03 ca                	add    %edx,%ecx
407667:	89 0b                	mov    %ecx,(%ebx)
407669:	33 c0                	xor    %eax,%eax
40766b:	40                   	inc    %eax
40766c:	5f                   	pop    %edi
40766d:	5e                   	pop    %esi
40766e:	5b                   	pop    %ebx
40766f:	8b e5                	mov    %ebp,%esp
407671:	5d                   	pop    %ebp
407672:	c3                   	ret
407673:	0f b7 5e 04          	movzwl 0x4(%esi),%ebx
407677:	8b 47 24             	mov    0x24(%edi),%eax
40767a:	89 44 24 60          	mov    %eax,0x60(%esp)
40767e:	33 c0                	xor    %eax,%eax
407680:	66 89 44 24 66       	mov    %ax,0x66(%esp)
407685:	8d 44 24 60          	lea    0x60(%esp),%eax
407689:	89 5c 24 48          	mov    %ebx,0x48(%esp)
40768d:	66 89 5c 24 64       	mov    %bx,0x64(%esp)
407692:	89 47 24             	mov    %eax,0x24(%edi)