40daed:	56                   	push   %esi
40daee:	8b 75 08             	mov    0x8(%ebp),%esi
40daf1:	57                   	push   %edi
40daf2:	8d 7e 0c             	lea    0xc(%esi),%edi
40daf5:	8b 07                	mov    (%edi),%eax
40daf7:	c1 e8 0d             	shr    $0xd,%eax
40dafa:	a8 01                	test   $0x1,%al
40dafc:	74 24                	je     0x40db22
40dafe:	8b 07                	mov    (%edi),%eax
40db00:	c1 e8 06             	shr    $0x6,%eax
40db03:	a8 01                	test   $0x1,%al
40db05:	74 1b                	je     0x40db22
40db07:	ff 76 04             	push   0x4(%esi)
40db0a:	e8 15 bd ff ff       	call   0x409824
40db0f:	59                   	pop    %ecx
40db10:	b8 bf fe ff ff       	mov    $0xfffffebf,%eax
40db15:	f0 21 07             	lock and %eax,(%edi)
40db18:	33 c0                	xor    %eax,%eax
40db1a:	89 46 04             	mov    %eax,0x4(%esi)
40db1d:	89 06                	mov    %eax,(%esi)
40db1f:	89 46 08             	mov    %eax,0x8(%esi)
40db22:	5f                   	pop    %edi
40db23:	5e                   	pop    %esi
40db24:	5d                   	pop    %ebp
40db25:	c3                   	ret
40db26:	8b ff                	mov    %edi,%edi
40db28:	55                   	push   %ebp
40db29:	8b ec                	mov    %esp,%ebp
40db2b:	8b 4d 08             	mov    0x8(%ebp),%ecx
40db2e:	56                   	push   %esi
40db2f:	8d 71 0c             	lea    0xc(%ecx),%esi
40db32:	8b 06                	mov    (%esi),%eax
40db34:	24 03                	and    $0x3,%al
40db36:	3c 02                	cmp    $0x2,%al
40db38:	74 04                	je     0x40db3e
40db3a:	33 c0                	xor    %eax,%eax
40db3c:	eb 4b                	jmp    0x40db89
40db3e:	8b 06                	mov    (%esi),%eax
40db40:	a8 c0                	test   $0xc0,%al
40db42:	74 f6                	je     0x40db3a
40db44:	8b 41 04             	mov    0x4(%ecx),%eax
40db47:	57                   	push   %edi
40db48:	8b 39                	mov    (%ecx),%edi
40db4a:	2b f8                	sub    %eax,%edi
40db4c:	89 01                	mov    %eax,(%ecx)
40db4e:	83 61 08 00          	andl   $0x0,0x8(%ecx)
40db52:	85 ff                	test   %edi,%edi
40db54:	7e 30                	jle    0x40db86
40db56:	57                   	push   %edi
40db57:	50                   	push   %eax
40db58:	51                   	push   %ecx
40db59:	e8 82 da ff ff       	call   0x40b5e0
40db5e:	59                   	pop    %ecx
40db5f:	50                   	push   %eax
40db60:	e8 57 0d 00 00       	call   0x40e8bc
40db65:	83 c4 0c             	add    $0xc,%esp
40db68:	3b f8                	cmp    %eax,%edi
40db6a:	74 0b                	je     0x40db77
40db6c:	6a 10                	push   $0x10
40db6e:	58                   	pop    %eax
40db6f:	f0 09 06             	lock or %eax,(%esi)
40db72:	83 c8 ff             	or     $0xffffffff,%eax
40db75:	eb 11                	jmp    0x40db88
40db77:	8b 06                	mov    (%esi),%eax
40db79:	c1 e8 02             	shr    $0x2,%eax
40db7c:	a8 01                	test   $0x1,%al
40db7e:	74 06                	je     0x40db86
40db80:	6a fd                	push   $0xfffffffd
40db82:	58                   	pop    %eax
40db83:	f0 21 06             	lock and %eax,(%esi)
40db86:	33 c0                	xor    %eax,%eax
40db88:	5f                   	pop    %edi
40db89:	5e                   	pop    %esi
40db8a:	5d                   	pop    %ebp
40db8b:	c3                   	ret
40db8c:	8b ff                	mov    %edi,%edi
40db8e:	55                   	push   %ebp
40db8f:	8b ec                	mov    %esp,%ebp
40db91:	56                   	push   %esi
40db92:	8b 75 08             	mov    0x8(%ebp),%esi
40db95:	85 f6                	test   %esi,%esi
40db97:	75 09                	jne    0x40dba2
40db99:	56                   	push   %esi
40db9a:	e8 3d 00 00 00       	call   0x40dbdc
40db9f:	59                   	pop    %ecx
40dba0:	eb 2e                	jmp    0x40dbd0
40dba2:	56                   	push   %esi
40dba3:	e8 7e ff ff ff       	call   0x40db26
40dba8:	59                   	pop    %ecx
40dba9:	85 c0                	test   %eax,%eax
40dbab:	74 05                	je     0x40dbb2
40dbad:	83 c8 ff             	or     $0xffffffff,%eax
40dbb0:	eb 1e                	jmp    0x40dbd0
40dbb2:	8b 46 0c             	mov    0xc(%esi),%eax
40dbb5:	c1 e8 0b             	shr    $0xb,%eax
40dbb8:	a8 01                	test   $0x1,%al
40dbba:	74 12                	je     0x40dbce
40dbbc:	56                   	push   %esi
40dbbd:	e8 1e da ff ff       	call   0x40b5e0
40dbc2:	50                   	push   %eax
40dbc3:	e8 c6 6b 00 00       	call   0x41478e
40dbc8:	59                   	pop    %ecx
40dbc9:	59                   	pop    %ecx
40dbca:	85 c0                	test   %eax,%eax
40dbcc:	75 df                	jne    0x40dbad
40dbce:	33 c0                	xor    %eax,%eax
40dbd0:	5e                   	pop    %esi
40dbd1:	5d                   	pop    %ebp
40dbd2:	c3                   	ret
40dbd3:	6a 01                	push   $0x1
40dbd5:	e8 02 00 00 00       	call   0x40dbdc
40dbda:	59                   	pop    %ecx
40dbdb:	c3                   	ret
40dbdc:	6a 1c                	push   $0x1c
40dbde:	68 00 1e 42 00       	push   $0x421e00
40dbe3:	e8 68 5f ff ff       	call   0x403b50
40dbe8:	83 65 e4 00          	andl   $0x0,-0x1c(%ebp)
40dbec:	83 65 dc 00          	andl   $0x0,-0x24(%ebp)
40dbf0:	6a 08                	push   $0x8
40dbf2:	e8 ae 12 00 00       	call   0x40eea5
40dbf7:	59                   	pop    %ecx
40dbf8:	83 65 fc 00          	andl   $0x0,-0x4(%ebp)
40dbfc:	8b 35 a8 41 42 00    	mov    0x4241a8,%esi
40dc02:	a1 a4 41 42 00       	mov    0x4241a4,%eax
40dc07:	8d 04 86             	lea    (%esi,%eax,4),%eax
40dc0a:	89 45 d4             	mov    %eax,-0x2c(%ebp)
40dc0d:	8b 5d 08             	mov    0x8(%ebp),%ebx
40dc10:	89 75 e0             	mov    %esi,-0x20(%ebp)
40dc13:	3b f0                	cmp    %eax,%esi
40dc15:	74 74                	je     0x40dc8b
40dc17:	8b 3e                	mov    (%esi),%edi
40dc19:	89 7d d8             	mov    %edi,-0x28(%ebp)
40dc1c:	85 ff                	test   %edi,%edi
40dc1e:	74 56                	je     0x40dc76
40dc20:	57                   	push   %edi
40dc21:	e8 04 db ff ff       	call   0x40b72a
40dc26:	59                   	pop    %ecx
40dc27:	c7 45 fc 01 00 00 00 	movl   $0x1,-0x4(%ebp)
40dc2e:	8b 47 0c             	mov    0xc(%edi),%eax
40dc31:	c1 e8 0d             	shr    $0xd,%eax
40dc34:	a8 01                	test   $0x1,%al
40dc36:	74 32                	je     0x40dc6a
40dc38:	83 fb 01             	cmp    $0x1,%ebx
40dc3b:	75 11                	jne    0x40dc4e
40dc3d:	57                   	push   %edi
40dc3e:	e8 49 ff ff ff       	call   0x40db8c
40dc43:	59                   	pop    %ecx
40dc44:	83 f8 ff             	cmp    $0xffffffff,%eax
40dc47:	74 21                	je     0x40dc6a
40dc49:	ff 45 e4             	incl   -0x1c(%ebp)
40dc4c:	eb 1c                	jmp    0x40dc6a
40dc4e:	85 db                	test   %ebx,%ebx
40dc50:	75 18                	jne    0x40dc6a
40dc52:	8b 47 0c             	mov    0xc(%edi),%eax
40dc55:	d1 e8                	shr    $1,%eax
40dc57:	a8 01                	test   $0x1,%al
40dc59:	74 0f                	je     0x40dc6a
40dc5b:	57                   	push   %edi
40dc5c:	e8 2b ff ff ff       	call   0x40db8c
40dc61:	59                   	pop    %ecx
40dc62:	83 f8 ff             	cmp    $0xffffffff,%eax
40dc65:	75 03                	jne    0x40dc6a
40dc67:	09 45 dc             	or     %eax,-0x24(%ebp)
40dc6a:	83 65 fc 00          	andl   $0x0,-0x4(%ebp)
40dc6e:	e8 0e 00 00 00       	call   0x40dc81
40dc73:	8b 45 d4             	mov    -0x2c(%ebp),%eax
40dc76:	83 c6 04             	add    $0x4,%esi
40dc79:	eb 95                	jmp    0x40dc10
40dc7b:	8b 5d 08             	mov    0x8(%ebp),%ebx
40dc7e:	8b 75 e0             	mov    -0x20(%ebp),%esi
40dc81:	ff 75 d8             	push   -0x28(%ebp)
40dc84:	e8 b5 da ff ff       	call   0x40b73e
40dc89:	59                   	pop    %ecx
40dc8a:	c3                   	ret
40dc8b:	c7 45 fc fe ff ff ff 	movl   $0xfffffffe,-0x4(%ebp)
40dc92:	e8 14 00 00 00       	call   0x40dcab
40dc97:	83 fb 01             	cmp    $0x1,%ebx
40dc9a:	8b 45 e4             	mov    -0x1c(%ebp),%eax
40dc9d:	74 03                	je     0x40dca2
40dc9f:	8b 45 dc             	mov    -0x24(%ebp),%eax
40dca2:	e8 ef 5e ff ff       	call   0x403b96
40dca7:	c3                   	ret
40dca8:	8b 5d 08             	mov    0x8(%ebp),%ebx
40dcab:	6a 08                	push   $0x8
40dcad:	e8 3b 12 00 00       	call   0x40eeed
40dcb2:	59                   	pop    %ecx
40dcb3:	c3                   	ret
40dcb4:	8b ff                	mov    %edi,%edi
40dcb6:	55                   	push   %ebp
40dcb7:	8b ec                	mov    %esp,%ebp
40dcb9:	83 ec 10             	sub    $0x10,%esp
40dcbc:	83 7d 08 00          	cmpl   $0x0,0x8(%ebp)
40dcc0:	75 1a                	jne    0x40dcdc
40dcc2:	e8 40 a0 ff ff       	call   0x407d07
40dcc7:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
40dccd:	e8 5c 9f ff ff       	call   0x407c2e
40dcd2:	83 c8 ff             	or     $0xffffffff,%eax
40dcd5:	0b d0                	or     %eax,%edx
40dcd7:	e9 69 01 00 00       	jmp    0x40de45
40dcdc:	56                   	push   %esi
40dcdd:	ff 75 08             	push   0x8(%ebp)
40dce0:	e8 fb d8 ff ff       	call   0x40b5e0
40dce5:	59                   	pop    %ecx
40dce6:	8b 4d 08             	mov    0x8(%ebp),%ecx
40dce9:	8b f0                	mov    %eax,%esi
40dceb:	33 c0                	xor    %eax,%eax
40dced:	39 41 08             	cmp    %eax,0x8(%ecx)
40dcf0:	7d 03                	jge    0x40dcf5
40dcf2:	89 41 08             	mov    %eax,0x8(%ecx)
40dcf5:	53                   	push   %ebx
40dcf6:	57                   	push   %edi
40dcf7:	6a 01                	push   $0x1
40dcf9:	50                   	push   %eax
40dcfa:	50                   	push   %eax
40dcfb:	56                   	push   %esi
40dcfc:	e8 f5 05 00 00       	call   0x40e2f6
40dd01:	8b da                	mov    %edx,%ebx
40dd03:	83 c4 10             	add    $0x10,%esp
40dd06:	8b f8                	mov    %eax,%edi
40dd08:	89 7d f8             	mov    %edi,-0x8(%ebp)
40dd0b:	85 db                	test   %ebx,%ebx
40dd0d:	7f 0e                	jg     0x40dd1d
40dd0f:	0f 8c ec 00 00 00    	jl     0x40de01
40dd15:	85 ff                	test   %edi,%edi
40dd17:	0f 82 e4 00 00 00    	jb     0x40de01
40dd1d:	8b 45 08             	mov    0x8(%ebp),%eax
40dd20:	8b 40 0c             	mov    0xc(%eax),%eax
40dd23:	a8 c0                	test   $0xc0,%al
40dd25:	75 14                	jne    0x40dd3b
40dd27:	8b 45 08             	mov    0x8(%ebp),%eax
40dd2a:	8b 40 08             	mov    0x8(%eax),%eax
40dd2d:	99                   	cltd
40dd2e:	2b f8                	sub    %eax,%edi
40dd30:	8b c7                	mov    %edi,%eax
40dd32:	1b da                	sbb    %edx,%ebx
40dd34:	8b d3                	mov    %ebx,%edx
40dd36:	e9 07 01 00 00       	jmp    0x40de42
40dd3b:	8b c6                	mov    %esi,%eax
40dd3d:	83 e6 3f             	and    $0x3f,%esi
40dd40:	c1 f8 06             	sar    $0x6,%eax
40dd43:	6b ce 30             	imul   $0x30,%esi,%ecx
40dd46:	89 45 f4             	mov    %eax,-0xc(%ebp)
40dd49:	8b 04 85 c0 41 42 00 	mov    0x4241c0(,%eax,4),%eax
40dd50:	89 4d f0             	mov    %ecx,-0x10(%ebp)
40dd53:	8a 44 01 29          	mov    0x29(%ecx,%eax,1),%al
40dd57:	8b 4d 08             	mov    0x8(%ebp),%ecx
40dd5a:	88 45 ff             	mov    %al,-0x1(%ebp)
40dd5d:	8b 01                	mov    (%ecx),%eax
40dd5f:	2b 41 04             	sub    0x4(%ecx),%eax
40dd62:	8b 49 0c             	mov    0xc(%ecx),%ecx
40dd65:	99                   	cltd
40dd66:	8b f0                	mov    %eax,%esi
40dd68:	f6 c1 03             	test   $0x3,%cl
40dd6b:	74 7c                	je     0x40dde9
40dd6d:	80 7d ff 01          	cmpb   $0x1,-0x1(%ebp)
40dd71:	8b 4d f4             	mov    -0xc(%ebp),%ecx
40dd74:	75 26                	jne    0x40dd9c
40dd76:	8b 7d f0             	mov    -0x10(%ebp),%edi
40dd79:	8b 04 8d c0 41 42 00 	mov    0x4241c0(,%ecx,4),%eax
40dd80:	f6 44 07 2d 02       	testb  $0x2,0x2d(%edi,%eax,1)
40dd85:	8b 7d f8             	mov    -0x8(%ebp),%edi
40dd88:	74 12                	je     0x40dd9c
40dd8a:	53                   	push   %ebx
40dd8b:	57                   	push   %edi
40dd8c:	ff 75 08             	push   0x8(%ebp)
40dd8f:	e8 39 02 00 00       	call   0x40dfcd
40dd94:	83 c4 0c             	add    $0xc,%esp
40dd97:	e9 a6 00 00 00       	jmp    0x40de42
40dd9c:	8b 04 8d c0 41 42 00 	mov    0x4241c0(,%ecx,4),%eax
40dda3:	8b 4d f0             	mov    -0x10(%ebp),%ecx
40dda6:	f6 44 01 28 80       	testb  $0x80,0x28(%ecx,%eax,1)
40ddab:	74 5b                	je     0x40de08
40ddad:	8b 45 08             	mov    0x8(%ebp),%eax
40ddb0:	83 65 f0 00          	andl   $0x0,-0x10(%ebp)
40ddb4:	8b 08                	mov    (%eax),%ecx
40ddb6:	2b 48 04             	sub    0x4(%eax),%ecx
40ddb9:	8b 78 04             	mov    0x4(%eax),%edi
40ddbc:	39 38                	cmp    %edi,(%eax)
40ddbe:	1b ff                	sbb    %edi,%edi
40ddc0:	f7 d7                	not    %edi
40ddc2:	23 f9                	and    %ecx,%edi
40ddc4:	89 7d f4             	mov    %edi,-0xc(%ebp)
40ddc7:	8b 7d f8             	mov    -0x8(%ebp),%edi
40ddca:	74 3f                	je     0x40de0b
40ddcc:	8b 48 04             	mov    0x4(%eax),%ecx
40ddcf:	8b 7d f0             	mov    -0x10(%ebp),%edi
40ddd2:	80 39 0a             	cmpb   $0xa,(%ecx)
40ddd5:	75 06                	jne    0x40dddd
40ddd7:	83 c6 01             	add    $0x1,%esi
40ddda:	83 d2 00             	adc    $0x0,%edx
40dddd:	41                   	inc    %ecx
40ddde:	47                   	inc    %edi
40dddf:	3b 7d f4             	cmp    -0xc(%ebp),%edi
40dde2:	75 ee                	jne    0x40ddd2
40dde4:	8b 7d f8             	mov    -0x8(%ebp),%edi
40dde7:	eb 22                	jmp    0x40de0b
40dde9:	8b 45 08             	mov    0x8(%ebp),%eax
40ddec:	8b 40 0c             	mov    0xc(%eax),%eax
40ddef:	c1 e8 02             	shr    $0x2,%eax
40ddf2:	a8 01                	test   $0x1,%al
40ddf4:	75 12                	jne    0x40de08
40ddf6:	e8 0c 9f ff ff       	call   0x407d07
40ddfb:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
40de01:	83 c8 ff             	or     $0xffffffff,%eax
40de04:	0b d0                	or     %eax,%edx
40de06:	eb 3a                	jmp    0x40de42
40de08:	8b 45 08             	mov    0x8(%ebp),%eax
40de0b:	8b cf                	mov    %edi,%ecx
40de0d:	0b cb                	or     %ebx,%ecx
40de0f:	74 2f                	je     0x40de40
40de11:	8b 40 0c             	mov    0xc(%eax),%eax
40de14:	a8 01                	test   $0x1,%al
40de16:	74 11                	je     0x40de29
40de18:	52                   	push   %edx
40de19:	56                   	push   %esi
40de1a:	53                   	push   %ebx
40de1b:	57                   	push   %edi
40de1c:	ff 75 08             	push   0x8(%ebp)
40de1f:	e8 25 00 00 00       	call   0x40de49
40de24:	83 c4 14             	add    $0x14,%esp
40de27:	eb 19                	jmp    0x40de42
40de29:	80 7d ff 01          	cmpb   $0x1,-0x1(%ebp)
40de2d:	75 0d                	jne    0x40de3c
40de2f:	6a 00                	push   $0x0
40de31:	6a 02                	push   $0x2
40de33:	52                   	push   %edx
40de34:	56                   	push   %esi
40de35:	e8 56 a2 00 00       	call   0x418090
40de3a:	8b f0                	mov    %eax,%esi
40de3c:	03 f7                	add    %edi,%esi
40de3e:	13 d3                	adc    %ebx,%edx
40de40:	8b c6                	mov    %esi,%eax
40de42:	5f                   	pop    %edi
40de43:	5b                   	pop    %ebx
40de44:	5e                   	pop    %esi
40de45:	8b e5                	mov    %ebp,%esp
40de47:	5d                   	pop    %ebp
40de48:	c3                   	ret
40de49:	8b ff                	mov    %edi,%edi
40de4b:	55                   	push   %ebp
40de4c:	8b ec                	mov    %esp,%ebp
40de4e:	83 ec 1c             	sub    $0x1c,%esp
40de51:	57                   	push   %edi
40de52:	ff 75 08             	push   0x8(%ebp)
40de55:	e8 86 d7 ff ff       	call   0x40b5e0
40de5a:	59                   	pop    %ecx
40de5b:	8b c8                	mov    %eax,%ecx
40de5d:	89 45 f4             	mov    %eax,-0xc(%ebp)
40de60:	8b d0                	mov    %eax,%edx
40de62:	c7 45 f8 02 00 00 00 	movl   $0x2,-0x8(%ebp)