40e32e:	c1 e1 02             	shl    $0x2,%ecx
40e331:	83 c9 08             	or     $0x8,%ecx
40e334:	0b d9                	or     %ecx,%ebx
40e336:	8b 4d 0c             	mov    0xc(%ebp),%ecx
40e339:	0f b7 31             	movzwl (%ecx),%esi
40e33c:	83 c1 02             	add    $0x2,%ecx
40e33f:	89 4d 0c             	mov    %ecx,0xc(%ebp)
40e342:	e9 3f fe ff ff       	jmp    0x40e186
40e347:	56                   	push   %esi
40e348:	8d 4d 0c             	lea    0xc(%ebp),%ecx
40e34b:	e8 3b 35 00 00       	call   0x41188b
40e350:	f6 c3 08             	test   $0x8,%bl
40e353:	75 13                	jne    0x40e368
40e355:	8b 45 10             	mov    0x10(%ebp),%eax
40e358:	85 c0                	test   %eax,%eax
40e35a:	74 08                	je     0x40e364
40e35c:	8b 8d 70 ff ff ff    	mov    -0x90(%ebp),%ecx
40e362:	89 08                	mov    %ecx,(%eax)
40e364:	33 c0                	xor    %eax,%eax
40e366:	eb 65                	jmp    0x40e3cd
40e368:	8b 75 fc             	mov    -0x4(%ebp),%esi
40e36b:	56                   	push   %esi
40e36c:	53                   	push   %ebx
40e36d:	e8 b0 f7 ff ff       	call   0x40db22
40e372:	59                   	pop    %ecx
40e373:	59                   	pop    %ecx
40e374:	84 c0                	test   %al,%al
40e376:	74 40                	je     0x40e3b8
40e378:	8b 45 08             	mov    0x8(%ebp),%eax
40e37b:	c6 40 1c 01          	movb   $0x1,0x1c(%eax)
40e37f:	c7 40 18 22 00 00 00 	movl   $0x22,0x18(%eax)
40e386:	f6 c3 01             	test   $0x1,%bl
40e389:	75 05                	jne    0x40e390
40e38b:	83 ce ff             	or     $0xffffffff,%esi
40e38e:	eb 2f                	jmp    0x40e3bf
40e390:	8b 4d 10             	mov    0x10(%ebp),%ecx
40e393:	f6 c3 02             	test   $0x2,%bl
40e396:	74 10                	je     0x40e3a8
40e398:	85 c9                	test   %ecx,%ecx
40e39a:	74 05                	je     0x40e3a1
40e39c:	8b 45 0c             	mov    0xc(%ebp),%eax
40e39f:	89 01                	mov    %eax,(%ecx)
40e3a1:	b8 00 00 00 80       	mov    $0x80000000,%eax
40e3a6:	eb 25                	jmp    0x40e3cd
40e3a8:	85 c9                	test   %ecx,%ecx
40e3aa:	74 05                	je     0x40e3b1
40e3ac:	8b 45 0c             	mov    0xc(%ebp),%eax
40e3af:	89 01                	mov    %eax,(%ecx)
40e3b1:	b8 ff ff ff 7f       	mov    $0x7fffffff,%eax
40e3b6:	eb 15                	jmp    0x40e3cd
40e3b8:	f6 c3 02             	test   $0x2,%bl
40e3bb:	74 02                	je     0x40e3bf
40e3bd:	f7 de                	neg    %esi
40e3bf:	8b 55 10             	mov    0x10(%ebp),%edx
40e3c2:	85 d2                	test   %edx,%edx
40e3c4:	74 05                	je     0x40e3cb
40e3c6:	8b 4d 0c             	mov    0xc(%ebp),%ecx
40e3c9:	89 0a                	mov    %ecx,(%edx)
40e3cb:	8b c6                	mov    %esi,%eax
40e3cd:	5f                   	pop    %edi
40e3ce:	5e                   	pop    %esi
40e3cf:	5b                   	pop    %ebx
40e3d0:	c9                   	leave
40e3d1:	c3                   	ret
40e3d2:	8b ff                	mov    %edi,%edi
40e3d4:	56                   	push   %esi
40e3d5:	8b f1                	mov    %ecx,%esi
40e3d7:	57                   	push   %edi
40e3d8:	8b be 04 04 00 00    	mov    0x404(%esi),%edi
40e3de:	e8 0b f6 ff ff       	call   0x40d9ee
40e3e3:	85 ff                	test   %edi,%edi
40e3e5:	75 04                	jne    0x40e3eb
40e3e7:	03 c6                	add    %esi,%eax
40e3e9:	eb 02                	jmp    0x40e3ed
40e3eb:	03 c7                	add    %edi,%eax
40e3ed:	5f                   	pop    %edi
40e3ee:	5e                   	pop    %esi
40e3ef:	c3                   	ret
40e3f0:	8b ff                	mov    %edi,%edi
40e3f2:	55                   	push   %ebp
40e3f3:	8b ec                	mov    %esp,%ebp
40e3f5:	83 ec 0c             	sub    $0xc,%esp
40e3f8:	53                   	push   %ebx
40e3f9:	56                   	push   %esi
40e3fa:	8b f1                	mov    %ecx,%esi
40e3fc:	57                   	push   %edi
40e3fd:	ff 76 28             	push   0x28(%esi)
40e400:	e8 a8 2c 00 00       	call   0x4110ad
40e405:	59                   	pop    %ecx
40e406:	8b c8                	mov    %eax,%ecx
40e408:	89 45 f4             	mov    %eax,-0xc(%ebp)
40e40b:	6a 00                	push   $0x0
40e40d:	5b                   	pop    %ebx
40e40e:	83 e9 01             	sub    $0x1,%ecx
40e411:	0f 84 99 00 00 00    	je     0x40e4b0
40e417:	83 e9 01             	sub    $0x1,%ecx
40e41a:	74 75                	je     0x40e491
40e41c:	49                   	dec    %ecx
40e41d:	83 e9 01             	sub    $0x1,%ecx
40e420:	74 46                	je     0x40e468
40e422:	83 e9 04             	sub    $0x4,%ecx
40e425:	74 27                	je     0x40e44e
40e427:	8b 46 08             	mov    0x8(%esi),%eax
40e42a:	83 c0 18             	add    $0x18,%eax
40e42d:	c6 40 04 01          	movb   $0x1,0x4(%eax)
40e431:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
40e437:	ff 76 08             	push   0x8(%esi)
40e43a:	53                   	push   %ebx
40e43b:	53                   	push   %ebx
40e43c:	53                   	push   %ebx
40e43d:	53                   	push   %ebx
40e43e:	53                   	push   %ebx
40e43f:	e8 2d ef ff ff       	call   0x40d371
40e444:	83 c4 18             	add    $0x18,%esp
40e447:	32 c0                	xor    %al,%al
40e449:	e9 28 01 00 00       	jmp    0x40e576
40e44e:	8b 4e 10             	mov    0x10(%esi),%ecx
40e451:	8b 7e 1c             	mov    0x1c(%esi),%edi
40e454:	8b c7                	mov    %edi,%eax
40e456:	c1 e8 04             	shr    $0x4,%eax
40e459:	a8 01                	test   $0x1,%al
40e45b:	8d 41 08             	lea    0x8(%ecx),%eax
40e45e:	89 46 10             	mov    %eax,0x10(%esi)
40e461:	8b 01                	mov    (%ecx),%eax
40e463:	8b 51 04             	mov    0x4(%ecx),%edx
40e466:	eb 66                	jmp    0x40e4ce
40e468:	8b 7e 1c             	mov    0x1c(%esi),%edi
40e46b:	8b c7                	mov    %edi,%eax
40e46d:	c1 e8 04             	shr    $0x4,%eax
40e470:	a8 01                	test   $0x1,%al
40e472:	74 0d                	je     0x40e481
40e474:	8b 46 10             	mov    0x10(%esi),%eax
40e477:	8d 48 04             	lea    0x4(%eax),%ecx
40e47a:	89 4e 10             	mov    %ecx,0x10(%esi)
40e47d:	8b 00                	mov    (%eax),%eax
40e47f:	eb 4c                	jmp    0x40e4cd
40e481:	8b 4e 10             	mov    0x10(%esi),%ecx
40e484:	89 5d f8             	mov    %ebx,-0x8(%ebp)
40e487:	8d 41 04             	lea    0x4(%ecx),%eax
40e48a:	89 46 10             	mov    %eax,0x10(%esi)
40e48d:	8b 01                	mov    (%ecx),%eax
40e48f:	eb 40                	jmp    0x40e4d1
40e491:	8b 7e 1c             	mov    0x1c(%esi),%edi
40e494:	8b c7                	mov    %edi,%eax
40e496:	8b 4e 10             	mov    0x10(%esi),%ecx
40e499:	c1 e8 04             	shr    $0x4,%eax
40e49c:	a8 01                	test   $0x1,%al
40e49e:	8d 41 04             	lea    0x4(%ecx),%eax
40e4a1:	89 46 10             	mov    %eax,0x10(%esi)
40e4a4:	74 05                	je     0x40e4ab
40e4a6:	0f bf 01             	movswl (%ecx),%eax
40e4a9:	eb 22                	jmp    0x40e4cd
40e4ab:	0f b7 01             	movzwl (%ecx),%eax
40e4ae:	eb 1d                	jmp    0x40e4cd
40e4b0:	8b 7e 1c             	mov    0x1c(%esi),%edi
40e4b3:	8b c7                	mov    %edi,%eax
40e4b5:	8b 4e 10             	mov    0x10(%esi),%ecx
40e4b8:	c1 e8 04             	shr    $0x4,%eax
40e4bb:	a8 01                	test   $0x1,%al
40e4bd:	8d 41 04             	lea    0x4(%ecx),%eax
40e4c0:	89 46 10             	mov    %eax,0x10(%esi)
40e4c3:	74 05                	je     0x40e4ca
40e4c5:	0f be 01             	movsbl (%ecx),%eax
40e4c8:	eb 03                	jmp    0x40e4cd
40e4ca:	0f b6 01             	movzbl (%ecx),%eax
40e4cd:	99                   	cltd
40e4ce:	89 55 f8             	mov    %edx,-0x8(%ebp)
40e4d1:	8b 55 f8             	mov    -0x8(%ebp),%edx
40e4d4:	89 45 fc             	mov    %eax,-0x4(%ebp)
40e4d7:	8b c7                	mov    %edi,%eax
40e4d9:	8b 4d fc             	mov    -0x4(%ebp),%ecx
40e4dc:	c1 e8 04             	shr    $0x4,%eax
40e4df:	a8 01                	test   $0x1,%al
40e4e1:	74 16                	je     0x40e4f9
40e4e3:	3b d3                	cmp    %ebx,%edx
40e4e5:	7f 12                	jg     0x40e4f9
40e4e7:	7c 04                	jl     0x40e4ed
40e4e9:	3b cb                	cmp    %ebx,%ecx
40e4eb:	73 0c                	jae    0x40e4f9
40e4ed:	f7 d9                	neg    %ecx
40e4ef:	13 d3                	adc    %ebx,%edx
40e4f1:	f7 da                	neg    %edx
40e4f3:	83 cf 40             	or     $0x40,%edi
40e4f6:	89 7e 1c             	mov    %edi,0x1c(%esi)
40e4f9:	83 7e 24 00          	cmpl   $0x0,0x24(%esi)
40e4fd:	89 55 f8             	mov    %edx,-0x8(%ebp)
40e500:	89 4d fc             	mov    %ecx,-0x4(%ebp)
40e503:	7d 09                	jge    0x40e50e
40e505:	c7 46 24 01 00 00 00 	movl   $0x1,0x24(%esi)
40e50c:	eb 1a                	jmp    0x40e528
40e50e:	ff 76 08             	push   0x8(%esi)
40e511:	83 e7 f7             	and    $0xfffffff7,%edi
40e514:	8d 4e 3c             	lea    0x3c(%esi),%ecx
40e517:	ff 76 24             	push   0x24(%esi)
40e51a:	89 7e 1c             	mov    %edi,0x1c(%esi)
40e51d:	e8 fd f4 ff ff       	call   0x40da1f
40e522:	8b 4d fc             	mov    -0x4(%ebp),%ecx
40e525:	8b 55 f8             	mov    -0x8(%ebp),%edx
40e528:	8b c1                	mov    %ecx,%eax
40e52a:	0b c2                	or     %edx,%eax
40e52c:	75 04                	jne    0x40e532
40e52e:	83 66 1c df          	andl   $0xffffffdf,0x1c(%esi)
40e532:	83 7d f4 08          	cmpl   $0x8,-0xc(%ebp)
40e536:	ff 75 08             	push   0x8(%ebp)
40e539:	88 5e 38             	mov    %bl,0x38(%esi)
40e53c:	75 0b                	jne    0x40e549
40e53e:	52                   	push   %edx
40e53f:	51                   	push   %ecx
40e540:	8b ce                	mov    %esi,%ecx
40e542:	e8 06 0b 00 00       	call   0x40f04d
40e547:	eb 08                	jmp    0x40e551
40e549:	51                   	push   %ecx
40e54a:	8b ce                	mov    %esi,%ecx
40e54c:	e8 fc 07 00 00       	call   0x40ed4d
40e551:	8b 46 1c             	mov    0x1c(%esi),%eax
40e554:	c1 e8 07             	shr    $0x7,%eax
40e557:	a8 01                	test   $0x1,%al
40e559:	74 19                	je     0x40e574
40e55b:	39 5e 34             	cmp    %ebx,0x34(%esi)
40e55e:	74 08                	je     0x40e568
40e560:	8b 46 30             	mov    0x30(%esi),%eax
40e563:	80 38 30             	cmpb   $0x30,(%eax)
40e566:	74 0c                	je     0x40e574
40e568:	ff 4e 30             	decl   0x30(%esi)
40e56b:	8b 4e 30             	mov    0x30(%esi),%ecx
40e56e:	c6 01 30             	movb   $0x30,(%ecx)
40e571:	ff 46 34             	incl   0x34(%esi)
40e574:	b0 01                	mov    $0x1,%al
40e576:	5f                   	pop    %edi
40e577:	5e                   	pop    %esi
40e578:	5b                   	pop    %ebx
40e579:	c9                   	leave
40e57a:	c2 04 00             	ret    $0x4
40e57d:	8b ff                	mov    %edi,%edi
40e57f:	55                   	push   %ebp
40e580:	8b ec                	mov    %esp,%ebp
40e582:	83 ec 0c             	sub    $0xc,%esp
40e585:	53                   	push   %ebx
40e586:	56                   	push   %esi
40e587:	8b f1                	mov    %ecx,%esi
40e589:	57                   	push   %edi
40e58a:	ff 76 28             	push   0x28(%esi)
40e58d:	e8 1b 2b 00 00       	call   0x4110ad
40e592:	59                   	pop    %ecx
40e593:	8b c8                	mov    %eax,%ecx
40e595:	89 45 f4             	mov    %eax,-0xc(%ebp)
40e598:	6a 00                	push   $0x0
40e59a:	5b                   	pop    %ebx
40e59b:	83 e9 01             	sub    $0x1,%ecx
40e59e:	0f 84 99 00 00 00    	je     0x40e63d
40e5a4:	83 e9 01             	sub    $0x1,%ecx
40e5a7:	74 75                	je     0x40e61e
40e5a9:	49                   	dec    %ecx
40e5aa:	83 e9 01             	sub    $0x1,%ecx
40e5ad:	74 46                	je     0x40e5f5
40e5af:	83 e9 04             	sub    $0x4,%ecx
40e5b2:	74 27                	je     0x40e5db
40e5b4:	8b 46 08             	mov    0x8(%esi),%eax
40e5b7:	83 c0 18             	add    $0x18,%eax
40e5ba:	c6 40 04 01          	movb   $0x1,0x4(%eax)
40e5be:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
40e5c4:	ff 76 08             	push   0x8(%esi)
40e5c7:	53                   	push   %ebx
40e5c8:	53                   	push   %ebx
40e5c9:	53                   	push   %ebx
40e5ca:	53                   	push   %ebx
40e5cb:	53                   	push   %ebx
40e5cc:	e8 a0 ed ff ff       	call   0x40d371
40e5d1:	83 c4 18             	add    $0x18,%esp
40e5d4:	32 c0                	xor    %al,%al
40e5d6:	e9 2d 01 00 00       	jmp    0x40e708
40e5db:	8b 4e 10             	mov    0x10(%esi),%ecx
40e5de:	8b 7e 1c             	mov    0x1c(%esi),%edi
40e5e1:	8b c7                	mov    %edi,%eax
40e5e3:	c1 e8 04             	shr    $0x4,%eax
40e5e6:	a8 01                	test   $0x1,%al
40e5e8:	8d 41 08             	lea    0x8(%ecx),%eax
40e5eb:	89 46 10             	mov    %eax,0x10(%esi)
40e5ee:	8b 01                	mov    (%ecx),%eax
40e5f0:	8b 51 04             	mov    0x4(%ecx),%edx
40e5f3:	eb 66                	jmp    0x40e65b
40e5f5:	8b 7e 1c             	mov    0x1c(%esi),%edi
40e5f8:	8b c7                	mov    %edi,%eax
40e5fa:	c1 e8 04             	shr    $0x4,%eax
40e5fd:	a8 01                	test   $0x1,%al
40e5ff:	74 0d                	je     0x40e60e
40e601:	8b 46 10             	mov    0x10(%esi),%eax
40e604:	8d 48 04             	lea    0x4(%eax),%ecx
40e607:	89 4e 10             	mov    %ecx,0x10(%esi)
40e60a:	8b 00                	mov    (%eax),%eax
40e60c:	eb 4c                	jmp    0x40e65a
40e60e:	8b 4e 10             	mov    0x10(%esi),%ecx
40e611:	89 5d f8             	mov    %ebx,-0x8(%ebp)
40e614:	8d 41 04             	lea    0x4(%ecx),%eax
40e617:	89 46 10             	mov    %eax,0x10(%esi)
40e61a:	8b 01                	mov    (%ecx),%eax
40e61c:	eb 40                	jmp    0x40e65e
40e61e:	8b 7e 1c             	mov    0x1c(%esi),%edi
40e621:	8b c7                	mov    %edi,%eax
40e623:	8b 4e 10             	mov    0x10(%esi),%ecx
40e626:	c1 e8 04             	shr    $0x4,%eax
40e629:	a8 01                	test   $0x1,%al
40e62b:	8d 41 04             	lea    0x4(%ecx),%eax
40e62e:	89 46 10             	mov    %eax,0x10(%esi)
40e631:	74 05                	je     0x40e638
40e633:	0f bf 01             	movswl (%ecx),%eax
40e636:	eb 22                	jmp    0x40e65a
40e638:	0f b7 01             	movzwl (%ecx),%eax
40e63b:	eb 1d                	jmp    0x40e65a
40e63d:	8b 7e 1c             	mov    0x1c(%esi),%edi
40e640:	8b c7                	mov    %edi,%eax
40e642:	8b 4e 10             	mov    0x10(%esi),%ecx
40e645:	c1 e8 04             	shr    $0x4,%eax
40e648:	a8 01                	test   $0x1,%al
40e64a:	8d 41 04             	lea    0x4(%ecx),%eax
40e64d:	89 46 10             	mov    %eax,0x10(%esi)
40e650:	74 05                	je     0x40e657
40e652:	0f be 01             	movsbl (%ecx),%eax
40e655:	eb 03                	jmp    0x40e65a
40e657:	0f b6 01             	movzbl (%ecx),%eax
40e65a:	99                   	cltd
40e65b:	89 55 f8             	mov    %edx,-0x8(%ebp)
40e65e:	8b 55 f8             	mov    -0x8(%ebp),%edx
40e661:	89 45 fc             	mov    %eax,-0x4(%ebp)
40e664:	8b c7                	mov    %edi,%eax
40e666:	8b 4d fc             	mov    -0x4(%ebp),%ecx
40e669:	c1 e8 04             	shr    $0x4,%eax
40e66c:	a8 01                	test   $0x1,%al
40e66e:	74 16                	je     0x40e686
40e670:	3b d3                	cmp    %ebx,%edx
40e672:	7f 12                	jg     0x40e686
40e674:	7c 04                	jl     0x40e67a
40e676:	3b cb                	cmp    %ebx,%ecx
40e678:	73 0c                	jae    0x40e686
40e67a:	f7 d9                	neg    %ecx
40e67c:	13 d3                	adc    %ebx,%edx
40e67e:	f7 da                	neg    %edx
40e680:	83 cf 40             	or     $0x40,%edi
40e683:	89 7e 1c             	mov    %edi,0x1c(%esi)
40e686:	83 7e 24 00          	cmpl   $0x0,0x24(%esi)
40e68a:	89 55 f8             	mov    %edx,-0x8(%ebp)
40e68d:	89 4d fc             	mov    %ecx,-0x4(%ebp)
40e690:	7d 09                	jge    0x40e69b
40e692:	c7 46 24 01 00 00 00 	movl   $0x1,0x24(%esi)
40e699:	eb 1a                	jmp    0x40e6b5
40e69b:	ff 76 08             	push   0x8(%esi)
40e69e:	83 e7 f7             	and    $0xfffffff7,%edi
40e6a1:	8d 4e 3c             	lea    0x3c(%esi),%ecx
40e6a4:	ff 76 24             	push   0x24(%esi)
40e6a7:	89 7e 1c             	mov    %edi,0x1c(%esi)