586ffa:	53                   	push   %ebx
586ffb:	57                   	push   %edi
586ffc:	8b 7c 24 18          	mov    0x18(%esp),%edi
587000:	8b c7                	mov    %edi,%eax
587002:	99                   	cltd
587003:	2b c2                	sub    %edx,%eax
587005:	8b d8                	mov    %eax,%ebx
587007:	d1 fb                	sar    $1,%ebx
587009:	83 ff 04             	cmp    $0x4,%edi
58700c:	75 14                	jne    0x587022
58700e:	ff 74 24 14          	push   0x14(%esp)
587012:	ff 74 24 14          	push   0x14(%esp)
587016:	e8 c5 42 f4 ff       	call   0x4cb2e0
58701b:	83 c4 08             	add    $0x8,%esp
58701e:	5f                   	pop    %edi
58701f:	5b                   	pop    %ebx
587020:	59                   	pop    %ecx
587021:	c3                   	ret
587022:	83 ff 08             	cmp    $0x8,%edi
587025:	75 14                	jne    0x58703b
587027:	ff 74 24 14          	push   0x14(%esp)
58702b:	ff 74 24 14          	push   0x14(%esp)
58702f:	e8 0c 44 f4 ff       	call   0x4cb440
587034:	83 c4 08             	add    $0x8,%esp
587037:	5f                   	pop    %edi
587038:	5b                   	pop    %ebx
587039:	59                   	pop    %ecx
58703a:	c3                   	ret
58703b:	83 ff 10             	cmp    $0x10,%edi
58703e:	7d 19                	jge    0x587059
587040:	ff 74 24 1c          	push   0x1c(%esp)
587044:	57                   	push   %edi
587045:	ff 74 24 1c          	push   0x1c(%esp)
587049:	ff 74 24 1c          	push   0x1c(%esp)
58704d:	e8 de fe ff ff       	call   0x586f30
587052:	83 c4 10             	add    $0x10,%esp
587055:	5f                   	pop    %edi
587056:	5b                   	pop    %ebx
587057:	59                   	pop    %ecx
587058:	c3                   	ret
587059:	55                   	push   %ebp
58705a:	56                   	push   %esi
58705b:	8b 74 24 1c          	mov    0x1c(%esp),%esi
58705f:	53                   	push   %ebx
587060:	8d 04 9e             	lea    (%esi,%ebx,4),%eax
587063:	50                   	push   %eax
587064:	56                   	push   %esi
587065:	89 44 24 2c          	mov    %eax,0x2c(%esp)
587069:	e8 e2 c5 f2 ff       	call   0x4b3650
58706e:	8b 6c 24 30          	mov    0x30(%esp),%ebp
587072:	83 c4 0c             	add    $0xc,%esp
587075:	85 c0                	test   %eax,%eax
587077:	7e 13                	jle    0x58708c
587079:	53                   	push   %ebx
58707a:	ff 74 24 24          	push   0x24(%esp)
58707e:	56                   	push   %esi
58707f:	55                   	push   %ebp
587080:	e8 ab 49 f4 ff       	call   0x4cba30
587085:	83 c4 10             	add    $0x10,%esp
587088:	33 c0                	xor    %eax,%eax
58708a:	eb 1a                	jmp    0x5870a6
58708c:	79 13                	jns    0x5870a1
58708e:	53                   	push   %ebx
58708f:	56                   	push   %esi
587090:	ff 74 24 28          	push   0x28(%esp)
587094:	55                   	push   %ebp
587095:	e8 96 49 f4 ff       	call   0x4cba30
58709a:	83 c4 10             	add    $0x10,%esp
58709d:	33 c0                	xor    %eax,%eax
58709f:	eb 05                	jmp    0x5870a6
5870a1:	b8 01 00 00 00       	mov    $0x1,%eax
5870a6:	8d 0c fd 00 00 00 00 	lea    0x0(,%edi,8),%ecx
5870ad:	03 cd                	add    %ebp,%ecx
5870af:	85 c0                	test   %eax,%eax
5870b1:	8d 04 bd 00 00 00 00 	lea    0x0(,%edi,4),%eax
5870b8:	75 14                	jne    0x5870ce
5870ba:	51                   	push   %ecx
5870bb:	53                   	push   %ebx
5870bc:	03 c5                	add    %ebp,%eax
5870be:	55                   	push   %ebp
5870bf:	50                   	push   %eax
5870c0:	89 44 24 20          	mov    %eax,0x20(%esp)
5870c4:	e8 27 ff ff ff       	call   0x586ff0
5870c9:	83 c4 10             	add    $0x10,%esp
5870cc:	eb 13                	jmp    0x5870e1
5870ce:	50                   	push   %eax
5870cf:	8d 0c 28             	lea    (%eax,%ebp,1),%ecx
5870d2:	6a 00                	push   $0x0
5870d4:	51                   	push   %ecx
5870d5:	89 4c 24 1c          	mov    %ecx,0x1c(%esp)
5870d9:	e8 22 c9 05 00       	call   0x5e3a00
5870de:	83 c4 0c             	add    $0xc,%esp
5870e1:	8d 04 fd 00 00 00 00 	lea    0x0(,%edi,8),%eax
5870e8:	03 c5                	add    %ebp,%eax
5870ea:	50                   	push   %eax
5870eb:	53                   	push   %ebx
5870ec:	56                   	push   %esi
5870ed:	8b 74 24 24          	mov    0x24(%esp),%esi
5870f1:	56                   	push   %esi
5870f2:	e8 f9 fe ff ff       	call   0x586ff0
5870f7:	8d 04 fd 00 00 00 00 	lea    0x0(,%edi,8),%eax
5870fe:	03 c5                	add    %ebp,%eax
587100:	8d 34 be             	lea    (%esi,%edi,4),%esi
587103:	50                   	push   %eax
587104:	53                   	push   %ebx
587105:	ff 74 24 38          	push   0x38(%esp)
587109:	56                   	push   %esi
58710a:	e8 e1 fe ff ff       	call   0x586ff0
58710f:	8b 4c 24 38          	mov    0x38(%esp),%ecx
587113:	57                   	push   %edi
587114:	56                   	push   %esi
587115:	51                   	push   %ecx
587116:	55                   	push   %ebp
587117:	e8 34 37 f4 ff       	call   0x4ca850
58711c:	8b 74 24 40          	mov    0x40(%esp),%esi
587120:	57                   	push   %edi
587121:	56                   	push   %esi
587122:	55                   	push   %ebp
587123:	56                   	push   %esi
587124:	89 44 24 60          	mov    %eax,0x60(%esp)
587128:	e8 03 49 f4 ff       	call   0x4cba30
58712d:	8b 6c 24 60          	mov    0x60(%esp),%ebp
587131:	83 c4 40             	add    $0x40,%esp
587134:	2b e8                	sub    %eax,%ebp
587136:	8b 44 24 18          	mov    0x18(%esp),%eax
58713a:	57                   	push   %edi
58713b:	8d 0c 98             	lea    (%eax,%ebx,4),%ecx
58713e:	56                   	push   %esi
58713f:	51                   	push   %ecx
587140:	51                   	push   %ecx
587141:	e8 0a 37 f4 ff       	call   0x4ca850
587146:	83 c4 10             	add    $0x10,%esp
587149:	03 e8                	add    %eax,%ebp
58714b:	74 1d                	je     0x58716a
58714d:	8b 4c 24 18          	mov    0x18(%esp),%ecx
587151:	8d 04 3b             	lea    (%ebx,%edi,1),%eax
587154:	8d 0c 81             	lea    (%ecx,%eax,4),%ecx
587157:	8b 01                	mov    (%ecx),%eax
587159:	03 c5                	add    %ebp,%eax
58715b:	89 01                	mov    %eax,(%ecx)
58715d:	3b c5                	cmp    %ebp,%eax
58715f:	73 09                	jae    0x58716a
587161:	83 41 04 01          	addl   $0x1,0x4(%ecx)
587165:	8d 49 04             	lea    0x4(%ecx),%ecx
587168:	74 f7                	je     0x587161
58716a:	5e                   	pop    %esi
58716b:	5d                   	pop    %ebp
58716c:	5f                   	pop    %edi
58716d:	5b                   	pop    %ebx
58716e:	59                   	pop    %ecx
58716f:	c3                   	ret
587170:	56                   	push   %esi
587171:	8b 74 24 08          	mov    0x8(%esp),%esi
587175:	85 f6                	test   %esi,%esi
587177:	74 21                	je     0x58719a
587179:	56                   	push   %esi
58717a:	e8 61 c0 f2 ff       	call   0x4b31e0
58717f:	8d 46 14             	lea    0x14(%esi),%eax
587182:	50                   	push   %eax
587183:	e8 58 c0 f2 ff       	call   0x4b31e0
587188:	83 c4 08             	add    $0x8,%esp
58718b:	f6 46 30 01          	testb  $0x1,0x30(%esi)
58718f:	74 09                	je     0x58719a
587191:	56                   	push   %esi
587192:	e8 99 8f f1 ff       	call   0x4a0130
587197:	83 c4 04             	add    $0x4,%esp
58719a:	5e                   	pop    %esi
58719b:	c3                   	ret
58719c:	cc                   	int3
58719d:	cc                   	int3
58719e:	cc                   	int3
58719f:	cc                   	int3
5871a0:	56                   	push   %esi
5871a1:	8b 74 24 08          	mov    0x8(%esp),%esi
5871a5:	56                   	push   %esi
5871a6:	e8 75 c0 f2 ff       	call   0x4b3220
5871ab:	8d 46 14             	lea    0x14(%esi),%eax
5871ae:	50                   	push   %eax
5871af:	e8 6c c0 f2 ff       	call   0x4b3220
5871b4:	83 c4 08             	add    $0x8,%esp
5871b7:	c7 46 28 00 00 00 00 	movl   $0x0,0x28(%esi)
5871be:	c7 46 2c 00 00 00 00 	movl   $0x0,0x2c(%esi)
5871c5:	c7 46 30 00 00 00 00 	movl   $0x0,0x30(%esi)
5871cc:	5e                   	pop    %esi
5871cd:	c3                   	ret
5871ce:	cc                   	int3
5871cf:	cc                   	int3
5871d0:	56                   	push   %esi
5871d1:	ff 74 24 0c          	push   0xc(%esp)
5871d5:	8b 74 24 0c          	mov    0xc(%esp),%esi
5871d9:	56                   	push   %esi
5871da:	e8 f1 be f2 ff       	call   0x4b30d0
5871df:	83 c4 08             	add    $0x8,%esp
5871e2:	85 c0                	test   %eax,%eax
5871e4:	75 02                	jne    0x5871e8
5871e6:	5e                   	pop    %esi
5871e7:	c3                   	ret
5871e8:	8d 46 14             	lea    0x14(%esi),%eax
5871eb:	6a 00                	push   $0x0
5871ed:	50                   	push   %eax
5871ee:	e8 fd c2 f2 ff       	call   0x4b34f0
5871f3:	ff 74 24 14          	push   0x14(%esp)
5871f7:	e8 74 c1 f2 ff       	call   0x4b3370
5871fc:	83 c4 0c             	add    $0xc,%esp
5871ff:	89 46 28             	mov    %eax,0x28(%esi)
587202:	c7 46 2c 00 00 00 00 	movl   $0x0,0x2c(%esi)
587209:	b8 01 00 00 00       	mov    $0x1,%eax
58720e:	5e                   	pop    %esi
58720f:	c3                   	ret
587210:	b8 0c 00 00 00       	mov    $0xc,%eax
587215:	e8 d6 a2 05 00       	call   0x5e14f0
58721a:	53                   	push   %ebx
58721b:	8b 5c 24 24          	mov    0x24(%esp),%ebx
58721f:	55                   	push   %ebp
587220:	56                   	push   %esi
587221:	57                   	push   %edi
587222:	53                   	push   %ebx
587223:	c7 44 24 1c 00 00 00 	movl   $0x0,0x1c(%esp)
58722a:	00
58722b:	e8 70 0c f5 ff       	call   0x4d7ea0
587230:	53                   	push   %ebx
587231:	e8 8a 0b f5 ff       	call   0x4d7dc0
587236:	53                   	push   %ebx
587237:	89 44 24 20          	mov    %eax,0x20(%esp)
58723b:	e8 80 0b f5 ff       	call   0x4d7dc0
587240:	8b 6c 24 2c          	mov    0x2c(%esp),%ebp
587244:	83 c4 0c             	add    $0xc,%esp
587247:	8b f8                	mov    %eax,%edi
587249:	89 7c 24 10          	mov    %edi,0x10(%esp)
58724d:	85 ed                	test   %ebp,%ebp
58724f:	75 0b                	jne    0x58725c
587251:	53                   	push   %ebx
587252:	e8 69 0b f5 ff       	call   0x4d7dc0
587257:	83 c4 04             	add    $0x4,%esp
58725a:	8b e8                	mov    %eax,%ebp
58725c:	8b 74 24 24          	mov    0x24(%esp),%esi
587260:	85 f6                	test   %esi,%esi
587262:	75 0b                	jne    0x58726f
587264:	53                   	push   %ebx
587265:	e8 56 0b f5 ff       	call   0x4d7dc0
58726a:	83 c4 04             	add    $0x4,%esp
58726d:	8b f0                	mov    %eax,%esi
58726f:	83 7c 24 14 00       	cmpl   $0x0,0x14(%esp)
587274:	0f 84 e7 01 00 00    	je     0x587461
58727a:	85 ff                	test   %edi,%edi
58727c:	0f 84 df 01 00 00    	je     0x587461
587282:	85 ed                	test   %ebp,%ebp
587284:	0f 84 d7 01 00 00    	je     0x587461
58728a:	85 f6                	test   %esi,%esi
58728c:	0f 84 cf 01 00 00    	je     0x587461
587292:	8b 7c 24 2c          	mov    0x2c(%esp),%edi
587296:	57                   	push   %edi
587297:	ff 74 24 2c          	push   0x2c(%esp)
58729b:	e8 b0 c2 f2 ff       	call   0x4b3550
5872a0:	83 c4 08             	add    $0x8,%esp
5872a3:	85 c0                	test   %eax,%eax
5872a5:	79 41                	jns    0x5872e8
5872a7:	6a 00                	push   $0x0
5872a9:	55                   	push   %ebp
5872aa:	e8 41 c2 f2 ff       	call   0x4b34f0
5872af:	ff 74 24 30          	push   0x30(%esp)
5872b3:	56                   	push   %esi
5872b4:	e8 17 be f2 ff       	call   0x4b30d0
5872b9:	83 c4 10             	add    $0x10,%esp
5872bc:	53                   	push   %ebx
5872bd:	85 c0                	test   %eax,%eax
5872bf:	75 12                	jne    0x5872d3
5872c1:	e8 8a 0a f5 ff       	call   0x4d7d50
5872c6:	83 c4 04             	add    $0x4,%esp
5872c9:	33 c0                	xor    %eax,%eax
5872cb:	5f                   	pop    %edi
5872cc:	5e                   	pop    %esi
5872cd:	5d                   	pop    %ebp
5872ce:	5b                   	pop    %ebx
5872cf:	83 c4 0c             	add    $0xc,%esp
5872d2:	c3                   	ret
5872d3:	e8 78 0a f5 ff       	call   0x4d7d50
5872d8:	83 c4 04             	add    $0x4,%esp
5872db:	b8 01 00 00 00       	mov    $0x1,%eax
5872e0:	5f                   	pop    %edi
5872e1:	5e                   	pop    %esi
5872e2:	5d                   	pop    %ebp
5872e3:	5b                   	pop    %ebx
5872e4:	83 c4 0c             	add    $0xc,%esp
5872e7:	c3                   	ret
5872e8:	ff 74 24 28          	push   0x28(%esp)
5872ec:	e8 7f c0 f2 ff       	call   0x4b3370
5872f1:	8b c8                	mov    %eax,%ecx
5872f3:	83 c4 04             	add    $0x4,%esp
5872f6:	8b 47 28             	mov    0x28(%edi),%eax
5872f9:	03 c0                	add    %eax,%eax
5872fb:	3b c1                	cmp    %ecx,%eax
5872fd:	0f 4f c8             	cmovg  %eax,%ecx
587300:	89 4c 24 20          	mov    %ecx,0x20(%esp)
587304:	3b 4f 2c             	cmp    0x2c(%edi),%ecx
587307:	74 12                	je     0x58731b
587309:	53                   	push   %ebx
58730a:	51                   	push   %ecx
58730b:	8d 47 14             	lea    0x14(%edi),%eax
58730e:	57                   	push   %edi
58730f:	50                   	push   %eax
587310:	e8 eb 01 00 00       	call   0x587500
587315:	83 c4 10             	add    $0x10,%esp
587318:	89 47 2c             	mov    %eax,0x2c(%edi)
58731b:	83 7f 2c ff          	cmpl   $0xffffffff,0x2c(%edi)
58731f:	0f 84 3c 01 00 00    	je     0x587461
587325:	ff 77 28             	push   0x28(%edi)
587328:	ff 74 24 2c          	push   0x2c(%esp)
58732c:	ff 74 24 1c          	push   0x1c(%esp)
587330:	e8 eb d3 f2 ff       	call   0x4b4720
587335:	83 c4 0c             	add    $0xc,%esp
587338:	85 c0                	test   %eax,%eax
58733a:	0f 84 21 01 00 00    	je     0x587461
587340:	53                   	push   %ebx
587341:	8d 47 14             	lea    0x14(%edi),%eax
587344:	50                   	push   %eax
587345:	ff 74 24 1c          	push   0x1c(%esp)
587349:	ff 74 24 1c          	push   0x1c(%esp)
58734d:	e8 2e 11 f5 ff       	call   0x4d8480
587352:	83 c4 10             	add    $0x10,%esp
587355:	85 c0                	test   %eax,%eax
587357:	0f 84 04 01 00 00    	je     0x587461
58735d:	8b 44 24 20          	mov    0x20(%esp),%eax
587361:	2b 47 28             	sub    0x28(%edi),%eax
587364:	50                   	push   %eax
587365:	ff 74 24 14          	push   0x14(%esp)
587369:	55                   	push   %ebp
58736a:	e8 b1 d3 f2 ff       	call   0x4b4720
58736f:	83 c4 0c             	add    $0xc,%esp
587372:	85 c0                	test   %eax,%eax
587374:	0f 84 e7 00 00 00    	je     0x587461
58737a:	53                   	push   %ebx
58737b:	55                   	push   %ebp
58737c:	57                   	push   %edi
58737d:	ff 74 24 1c          	push   0x1c(%esp)
587381:	c7 45 0c 00 00 00 00 	movl   $0x0,0xc(%ebp)
587388:	e8 f3 10 f5 ff       	call   0x4d8480
58738d:	83 c4 10             	add    $0x10,%esp
587390:	85 c0                	test   %eax,%eax
587392:	0f 84 c9 00 00 00    	je     0x587461
587398:	ff 74 24 10          	push   0x10(%esp)
58739c:	ff 74 24 2c          	push   0x2c(%esp)
5873a0:	56                   	push   %esi
5873a1:	e8 5a 0f f5 ff       	call   0x4d8300
5873a6:	83 c4 0c             	add    $0xc,%esp
5873a9:	85 c0                	test   %eax,%eax
5873ab:	0f 84 b0 00 00 00    	je     0x587461
5873b1:	57                   	push   %edi
5873b2:	56                   	push   %esi
5873b3:	c7 46 0c 00 00 00 00 	movl   $0x0,0xc(%esi)