// File: /workspace/github_c_makefile_star2_O0/dasJ[P]sd-zfs/src/mount.initrd_zfs.c
// Function: main
int main(int argc, char *argv[]) {
	char *dataset = NULL;
	char *mountpoint = NULL;
	char *options = NULL;
	// For parameter parsing
	char isOption = 0;
	char *newoptions;
	size_t size;
	// For snapshotting
	int ret;
	char *snapDS = NULL;
	char *snapMP = NULL;
	char *snapBase;
	char *snapPath;
	char *snaps;
	char *snapshot;
	char *at;
	// For mounting
	char *snap = NULL;
	char *lines = NULL;
	char *endLine;
	char *lineToken;
	char *mountpointToken;
	char *what;
	char *where;
	char *where_tmp = NULL;

	// Parse parameters
	if (argc < 3) {
		fprintf(stderr, "Call like: %s <dataset> <mount_point> [-o option[,...]]\n", argv[0]);
		exit(1);
	}
	for (int i = 1; i < argc; i++) {
		// This is an option
		if (isOption == 1) {
			size = strlen(argv[i]) + 2;
			if (options != NULL) {
				size += strlen(options);
			}
			newoptions = malloc(size * sizeof(char));
			if (options != NULL) {
				strcpy(newoptions, options);
			}
			strcat(newoptions, argv[i]);
			strcat(newoptions, ",");
			free(options);

			options = newoptions;
			isOption = 0;
			continue;
		}
		// Next will be an option
		if (strcmp(argv[i], "-o") == 0) {
			isOption = 1;
			continue;
		}
		// Next is the dataset
		if (dataset == NULL) {
			dataset = malloc((strlen(argv[i]) + 1) * sizeof(char));
			strcpy(dataset, argv[i]);
			continue;
		}
		// Next is the mountpoint
		if (mountpoint == NULL) {
			mountpoint = malloc((strlen(argv[i]) + 1) * sizeof(char));
			strcpy(mountpoint, argv[i]);
			continue;
		}
		// Call is broken
		free(dataset);
		free(mountpoint);
		fprintf(stderr, "Call like: %s <dataset> <mount_point> [-o option[,...]]\n", argv[0]);
		exit(1);
	}
	// Check if all parameters are supplied
	if (dataset == NULL || mountpoint == NULL) {
		fprintf(stderr, "Call like: %s <dataset> <mount_point> [-o option[,...]]\n", argv[0]);
		exit(1);
	}
	// Get rid of the trailing comma
	if (options != NULL) {
		newoptions = malloc(sizeof(options) - sizeof(char));
		strncpy(newoptions, options, strlen(options) - 1);
		free(options);
		options = newoptions;
	}

	// Split away snapshot name
	strtok(dataset, "@");
	snap = strtok(NULL, "@");

	// Check if we need to handle bootfs
	if (strncmp(dataset, "ZFS=AUTO", strlen("ZFS=AUTO")) == 0) {
		if (handleBootfs(&dataset) != 0) {
			fprintf(stderr, "Can not get bootfs value\n");
			free(dataset);
			free(mountpoint);
			free(options);
			exit(1);
		}
	}

	// Handle snapshot
	if (snap != NULL) {
		ret = zfs_snapshot_exists(dataset, snap);
		if (ret < 0) {
			fprintf(stderr, "Error while trying to check if snapshot exists\n");
			goto aftersnap;
		} else if (ret == 1) {
			goto aftersnap;
		}
		// Build name of temporary dataset
		snapDS = malloc((strlen(dataset) + strlen(snap) + strlen("_initrd_") + 1) * sizeof(char));
		strcpy(snapDS, dataset);
		strcat(snapDS, "_initrd_");
		strcat(snapDS, snap);
		// Remove temporary datasets if they exist
		ret = zfs_ds_exists(snapDS);
		if (ret < 0) {
			fprintf(stderr, "Error while trying to check if temporary dataset exists\n");
			goto aftersnap;
		} else if (ret == 0) {
			if (zfs_destroy_recursively(snapDS) != 0) {
				fprintf(stderr, "Failed to remove existing datasets for snapshotting\n");
				goto aftersnap;
			}
		}
		// Create new datasets
		ret = zfs_list_snapshots(dataset, snap, &snaps);
		if (ret != 0) {
			fprintf(stderr, "Error while trying to list snapshots\n");
			goto aftersnap;
		}
		snapshot = strtok(snaps, "\n");
		while (snapshot != NULL) {
			snapPath = malloc((strlen(snapDS) + strlen(&snapshot[strlen(dataset)]) + 1) * sizeof(char));
			strcpy(snapPath, snapDS);
			strcat(snapPath, &(snapshot[strlen(dataset)]));
			at = strrchr(snapPath, '@');
			if (at != 0) {
				*at = '\0';
			}
			snapBase = malloc((strlen(snapshot) + 1) * sizeof(char));
			strcpy(snapBase, snapshot);
			at = strrchr(snapBase, '@');
			if (at != 0) {
				*at = '\0';
			}
			snapMP = NULL;
			if (zfs_get_mountpoint(snapBase, &snapMP) != 0) {
				fprintf(stderr, "Can not get mountpoint of snapshot\n");
				goto aftersnap;
			}

			if (strcmp(snapMP, "/") == 0) {
				free(dataset);
				dataset = malloc((strlen(snapPath) + 1) * sizeof(char));
				strcpy(dataset, snapPath);
			}

			if (zfs_clone_snap(snapshot, snapPath, snapMP) != 0) {
				fprintf(stderr, "Can not clone snapshot to dataset\n");
				free(snapPath);
				goto aftersnap;
			}
			free(snapPath);

			snapshot = strtok(NULL, "\n");
		}
	}
aftersnap:
	free(snapDS);

	// Mount the dataset(s)
	ret = zfs_list_datasets_with_mp(dataset, &lines);
	if (ret != 0) {
		free(dataset);
		free(mountpoint);
		free(options);
		exit(1);
	}

	lineToken = strtok_r(lines, "\n", &endLine);
	while (lineToken != NULL) {
		what = strtok_r(lineToken, "\t", &mountpointToken);
		// Do not mount what we don't need to mount
		if (strcmp(mountpointToken, "-") == 0 || strcmp(mountpointToken, "legacy") == 0 || strcmp(mountpointToken, "none") == 0) {
			if (zfs_get_alt_mp(what, &where_tmp) != 0) {
				goto loopend;
			}
			if (strcmp(where_tmp, "-") == 0 || strcmp(where_tmp, "legacy") == 0 || strcmp(where_tmp, "none") == 0) {
				goto loopend;
			}
		}
		// Build where to mount
		where = malloc((strlen(mountpoint) + strlen((where_tmp == NULL) ? mountpointToken : where_tmp) + 1) * sizeof(char));
		strcpy(where, mountpoint);
		strcat(where, (where_tmp == NULL) ? mountpointToken : where_tmp);
		// Mount
		ret = zfs_mount(what, where, options);

		free(where_tmp);
		where_tmp = NULL;

		if (ret != 0) {
			fprintf(stderr, "ZFS command failed with exit code %d, bailing out\n", ret);
			free(where);
			break;
		}
		free(where);

loopend:
		lineToken = strtok_r(NULL, "\n", &endLine);
	}

	free(lines);
	free(dataset);
	free(mountpoint);
	free(options);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x120, %rsp            # imm = 0x120
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq $0x0, -0x18(%rbp)
movq $0x0, -0x20(%rbp)
movq $0x0, -0x28(%rbp)
movb $0x0, -0x29(%rbp)
movq $0x0, -0x50(%rbp)
movq $0x0, -0x58(%rbp)
movq $0x0, -0x88(%rbp)
movq $0x0, -0x90(%rbp)
movq $0x0, -0xc0(%rbp)
cmpl $0x3, -0x8(%rbp)
jge 0x4017c5
movq $0x4d4708, %rax         # imm = 0x4D4708
movq (%rax), %rdi
movq -0x10(%rbp), %rax
movq (%rax), %rdx
leaq 0xa285a(%rip), %rsi     # 0x4a400e
movb $0x0, %al
callq 0x40cd50
movl $0x1, %edi
callq 0x40c220
movl $0x1, -0xc4(%rbp)
movl -0xc4(%rbp), %eax
cmpl -0x8(%rbp), %eax
jge 0x401993
movsbl -0x29(%rbp), %eax
cmpl $0x1, %eax
jne 0x401886
movq -0x10(%rbp), %rax
movslq -0xc4(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x4010e0
addq $0x2, %rax
movq %rax, -0x40(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0x40181f
movq -0x28(%rbp), %rdi
callq 0x4010e0
addq -0x40(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rdi
shlq $0x0, %rdi
callq 0x421210
movq %rax, -0x38(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0x401844
movq -0x38(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x401020
movq -0x38(%rbp), %rdi
movq -0x10(%rbp), %rax
movslq -0xc4(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
callq 0x401058
movq -0x38(%rbp), %rdi
leaq 0xa27e0(%rip), %rsi     # 0x4a4047
callq 0x401058
movq -0x28(%rbp), %rdi
callq 0x421550
movq -0x38(%rbp), %rax
movq %rax, -0x28(%rbp)
movb $0x0, -0x29(%rbp)
jmp 0x40197f
movq -0x10(%rbp), %rax
movslq -0xc4(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0xa27ad(%rip), %rsi     # 0x4a4049
callq 0x4010b8
cmpl $0x0, %eax
jne 0x4018af
movb $0x1, -0x29(%rbp)
jmp 0x40197f
cmpq $0x0, -0x18(%rbp)
jne 0x4018fb
movq -0x10(%rbp), %rax
movslq -0xc4(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x4010e0
movq %rax, %rdi
addq $0x1, %rdi
shlq $0x0, %rdi
callq 0x421210
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
movq -0x10(%rbp), %rax
movslq -0xc4(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
callq 0x401020
jmp 0x40197f
cmpq $0x0, -0x20(%rbp)
jne 0x401944
movq -0x10(%rbp), %rax
movslq -0xc4(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x4010e0
movq %rax, %rdi
addq $0x1, %rdi
shlq $0x0, %rdi
callq 0x421210
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rdi
movq -0x10(%rbp), %rax
movslq -0xc4(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
callq 0x401020
jmp 0x40197f
movq -0x18(%rbp), %rdi
callq 0x421550
movq -0x20(%rbp), %rdi
callq 0x421550
movq $0x4d4708, %rax         # imm = 0x4D4708
movq (%rax), %rdi
movq -0x10(%rbp), %rax
movq (%rax), %rdx
leaq 0xa26a0(%rip), %rsi     # 0x4a400e
movb $0x0, %al
callq 0x40cd50
movl $0x1, %edi
callq 0x40c220
movl -0xc4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xc4(%rbp)
jmp 0x4017cf
cmpq $0x0, -0x18(%rbp)
je 0x4019a1
cmpq $0x0, -0x20(%rbp)
jne 0x4019ca
movq $0x4d4708, %rax         # imm = 0x4D4708
movq (%rax), %rdi
movq -0x10(%rbp), %rax
movq (%rax), %rdx
leaq 0xa2655(%rip), %rsi     # 0x4a400e
movb $0x0, %al
callq 0x40cd50
movl $0x1, %edi
callq 0x40c220
cmpq $0x0, -0x28(%rbp)
je 0x401a29
movl $0x7, %edi
callq 0x421210
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, -0xd8(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0xd0(%rbp)
movq -0x28(%rbp), %rdi
callq 0x4010e0
movq -0xd8(%rbp), %rdi
movq -0xd0(%rbp), %rsi
movq %rax, %rdx
subq $0x1, %rdx
callq 0x401088
movq -0x28(%rbp), %rdi
callq 0x421550
movq -0x38(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x18(%rbp), %rdi
leaq 0xa2618(%rip), %rsi     # 0x4a404c
callq 0x424430
xorl %eax, %eax
movl %eax, %edi
leaq 0xa2608(%rip), %rsi     # 0x4a404c
callq 0x424430
movq %rax, -0x88(%rbp)
movq -0x18(%rbp), %rdi
leaq 0xa25f3(%rip), %rsi     # 0x4a404e
movl $0x8, %edx
callq 0x401080
cmpl $0x0, %eax
jne 0x401ab7
leaq -0x18(%rbp), %rdi
callq 0x401690
cmpl $0x0, %eax
je 0x401ab5
movq $0x4d4708, %rax         # imm = 0x4D4708
movq (%rax), %rdi
leaq 0xa25ce(%rip), %rsi     # 0x4a4057
movb $0x0, %al
callq 0x40cd50
movq -0x18(%rbp), %rdi
callq 0x421550
movq -0x20(%rbp), %rdi
callq 0x421550
movq -0x28(%rbp), %rdi
callq 0x421550
movl $0x1, %edi
callq 0x40c220
jmp 0x401ab7
cmpq $0x0, -0x88(%rbp)
je 0x401e03
movq -0x18(%rbp), %rdi
movq -0x88(%rbp), %rsi
callq 0x402570
movl %eax, -0x44(%rbp)
cmpl $0x0, -0x44(%rbp)
jge 0x401afb
movq $0x4d4708, %rax         # imm = 0x4D4708
movq (%rax), %rdi
leaq 0xa2582(%rip), %rsi     # 0x4a4071
movb $0x0, %al
callq 0x40cd50
jmp 0x401e05
cmpl $0x1, -0x44(%rbp)
jne 0x401b06
jmp 0x401e05
jmp 0x401b08
movq -0x18(%rbp), %rdi
callq 0x4010e0
movq %rax, -0xe0(%rbp)
movq -0x88(%rbp), %rdi
callq 0x4010e0
movq -0xe0(%rbp), %rdi
addq %rax, %rdi
addq $0x8, %rdi
addq $0x1, %rdi
shlq $0x0, %rdi
callq 0x421210
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x401020
movq -0x50(%rbp), %rdi
leaq 0xa2546(%rip), %rsi     # 0x4a40a1
callq 0x401058
movq -0x50(%rbp), %rdi
movq -0x88(%rbp), %rsi
callq 0x401058
movq -0x50(%rbp), %rdi
callq 0x402600
movl %eax, -0x44(%rbp)
cmpl $0x0, -0x44(%rbp)
jge 0x401b9f
movq $0x4d4708, %rax         # imm = 0x4D4708
movq (%rax), %rdi
leaq 0xa2517(%rip), %rsi     # 0x4a40aa
movb $0x0, %al
callq 0x40cd50
jmp 0x401e05
cmpl $0x0, -0x44(%rbp)
jne 0x401bd2
movq -0x50(%rbp), %rdi
callq 0x4023f0
cmpl $0x0, %eax
je 0x401bd0
movq $0x4d4708, %rax         # imm = 0x4D4708
movq (%rax), %rdi
leaq 0xa251f(%rip), %rsi     # 0x4a40e3
movb $0x0, %al
callq 0x40cd50
jmp 0x401e05
jmp 0x401bd2
jmp 0x401bd4
movq -0x18(%rbp), %rdi
movq -0x88(%rbp), %rsi
leaq -0x70(%rbp), %rdx
callq 0x4028c0
movl %eax, -0x44(%rbp)
cmpl $0x0, -0x44(%rbp)
je 0x401c0e
movq $0x4d4708, %rax         # imm = 0x4D4708
movq (%rax), %rdi
leaq 0xa2516(%rip), %rsi     # 0x4a4118
movb $0x0, %al
callq 0x40cd50
jmp 0x401e05
movq -0x70(%rbp), %rdi
leaq 0xa2c91(%rip), %rsi     # 0x4a48aa
callq 0x424430
movq %rax, -0x78(%rbp)
cmpq $0x0, -0x78(%rbp)
je 0x401e01
movq -0x50(%rbp), %rdi
callq 0x4010e0
movq %rax, -0xf8(%rbp)
movq -0x78(%rbp), %rax
movq %rax, -0x100(%rbp)
movq -0x18(%rbp), %rdi
callq 0x4010e0
movq -0x100(%rbp), %rdi
addq %rax, %rdi
callq 0x4010e0
movq -0xf8(%rbp), %rdi
addq %rax, %rdi
addq $0x1, %rdi
shlq $0x0, %rdi
callq 0x421210
movq %rax, -0x68(%rbp)
movq -0x68(%rbp), %rdi
movq -0x50(%rbp), %rsi
callq 0x401020
movq -0x68(%rbp), %rax
movq %rax, -0xe8(%rbp)
movq -0x78(%rbp), %rax
movq %rax, -0xf0(%rbp)
movq -0x18(%rbp), %rdi
callq 0x4010e0
movq -0xf0(%rbp), %rsi
movq -0xe8(%rbp), %rdi
addq %rax, %rsi
callq 0x401058
movq -0x68(%rbp), %rdi
movl $0x40, %esi
callq 0x401050
movq %rax, -0x80(%rbp)
cmpq $0x0, -0x80(%rbp)
je 0x401cdd
movq -0x80(%rbp), %rax
movb $0x0, (%rax)
movq -0x78(%rbp), %rdi
callq 0x4010e0
movq %rax, %rdi
addq $0x1, %rdi
shlq $0x0, %rdi
callq 0x421210
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rdi
movq -0x78(%rbp), %rsi
callq 0x401020
movq -0x60(%rbp), %rdi
movl $0x40, %esi
callq 0x401050
movq %rax, -0x80(%rbp)
cmpq $0x0, -0x80(%rbp)
je 0x401d27
movq -0x80(%rbp), %rax
movb $0x0, (%rax)
movq $0x0, -0x58(%rbp)
movq -0x60(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x402c30
cmpl $0x0, %eax
je 0x401d5e
movq $0x4d4708, %rax         # imm = 0x4D4708
movq (%rax), %rdi
leaq 0xa23ec(%rip), %rsi     # 0x4a413e
movb $0x0, %al
callq 0x40cd50
jmp 0x401e05
movq -0x58(%rbp), %rdi
leaq 0xa97f3(%rip), %rsi     # 0x4ab55c
callq 0x4010b8
cmpl $0x0, %eax
jne 0x401da6
movq -0x18(%rbp), %rdi
callq 0x421550
movq -0x68(%rbp), %rdi
callq 0x4010e0
movq %rax, %rdi
addq $0x1, %rdi
shlq $0x0, %rdi
callq 0x421210
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
movq -0x68(%rbp), %rsi
callq 0x401020
movq -0x78(%rbp), %rdi
movq -0x68(%rbp), %rsi
movq -0x58(%rbp), %rdx
callq 0x402d00
cmpl $0x0, %eax
je 0x401ddf
movq $0x4d4708, %rax         # imm = 0x4D4708
movq (%rax), %rdi
leaq 0xa2395(%rip), %rsi     # 0x4a4162
movb $0x0, %al
callq 0x40cd50
movq -0x68(%rbp), %rdi
callq 0x421550
jmp 0x401e05
movq -0x68(%rbp), %rdi
callq 0x421550
xorl %eax, %eax
movl %eax, %edi
leaq 0xa2ab7(%rip), %rsi     # 0x4a48aa
callq 0x424430
movq %rax, -0x78(%rbp)
jmp 0x401c22
jmp 0x401e03
jmp 0x401e05
movq -0x50(%rbp), %rdi
callq 0x421550
movq -0x18(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x402800
movl %eax, -0x44(%rbp)
cmpl $0x0, -0x44(%rbp)
je 0x401e4c
movq -0x18(%rbp), %rdi
callq 0x421550
movq -0x20(%rbp), %rdi
callq 0x421550
movq -0x28(%rbp), %rdi
callq 0x421550
movl $0x1, %edi
callq 0x40c220
movq -0x90(%rbp), %rdi
leaq 0xa2a50(%rip), %rsi     # 0x4a48aa
leaq -0x98(%rbp), %rdx
callq 0x424440
movq %rax, -0xa0(%rbp)
cmpq $0x0, -0xa0(%rbp)
je 0x40209a
movq -0xa0(%rbp), %rdi
leaq 0xa22fc(%rip), %rsi     # 0x4a4185
leaq -0xa8(%rbp), %rdx
callq 0x424440
movq %rax, -0xb0(%rbp)
movq -0xa8(%rbp), %rdi
leaq 0xa7e20(%rip), %rsi     # 0x4a9cca
callq 0x4010b8
cmpl $0x0, %eax
je 0x401ee4
movq -0xa8(%rbp), %rdi
leaq 0xa22c5(%rip), %rsi     # 0x4a4187
callq 0x4010b8
cmpl $0x0, %eax
je 0x401ee4
movq -0xa8(%rbp), %rdi
leaq 0xa2442(%rip), %rsi     # 0x4a431c
callq 0x4010b8
cmpl $0x0, %eax
jne 0x401f50
movq -0xb0(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x402e20
cmpl $0x0, %eax
je 0x401f01
jmp 0x402077
movq -0xc0(%rbp), %rdi
leaq 0xa7dbb(%rip), %rsi     # 0x4a9cca
callq 0x4010b8
cmpl $0x0, %eax
je 0x401f49
movq -0xc0(%rbp), %rdi
leaq 0xa2260(%rip), %rsi     # 0x4a4187
callq 0x4010b8
cmpl $0x0, %eax
je 0x401f49
movq -0xc0(%rbp), %rdi
leaq 0xa23dd(%rip), %rsi     # 0x4a431c
callq 0x4010b8
cmpl $0x0, %eax
jne 0x401f4e
jmp 0x402077
jmp 0x401f50
movq -0x20(%rbp), %rdi
callq 0x4010e0
movq %rax, -0x108(%rbp)
cmpq $0x0, -0xc0(%rbp)
jne 0x401f7a
movq -0xa8(%rbp), %rax
movq %rax, -0x110(%rbp)
jmp 0x401f88
movq -0xc0(%rbp), %rax
movq %rax, -0x110(%rbp)
movq -0x110(%rbp), %rdi
callq 0x4010e0
movq -0x108(%rbp), %rdi
addq %rax, %rdi
addq $0x1, %rdi
shlq $0x0, %rdi
callq 0x421210
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x401020
movq -0xb8(%rbp), %rax
movq %rax, -0x118(%rbp)
cmpq $0x0, -0xc0(%rbp)
jne 0x401fea
movq -0xa8(%rbp), %rax
movq %rax, -0x120(%rbp)
jmp 0x401ff8
movq -0xc0(%rbp), %rax
movq %rax, -0x120(%rbp)
movq -0x118(%rbp), %rdi
movq -0x120(%rbp), %rsi
callq 0x401058
movq -0xb0(%rbp), %rdi
movq -0xb8(%rbp), %rsi
movq -0x28(%rbp), %rdx
callq 0x402b50
movl %eax, -0x44(%rbp)
movq -0xc0(%rbp), %rdi
callq 0x421550
movq $0x0, -0xc0(%rbp)
cmpl $0x0, -0x44(%rbp)
je 0x40206b
movq $0x4d4708, %rax         # imm = 0x4D4708
movq (%rax), %rdi
movl -0x44(%rbp), %edx
leaq 0xa2138(%rip), %rsi     # 0x4a418e
movb $0x0, %al
callq 0x40cd50
movq -0xb8(%rbp), %rdi
callq 0x421550
jmp 0x40209a
movq -0xb8(%rbp), %rdi
callq 0x421550
xorl %eax, %eax
movl %eax, %edi
leaq 0xa2828(%rip), %rsi     # 0x4a48aa
leaq -0x98(%rbp), %rdx
callq 0x424440
movq %rax, -0xa0(%rbp)
jmp 0x401e6d
movq -0x90(%rbp), %rdi
callq 0x421550
movq -0x18(%rbp), %rdi
callq 0x421550
movq -0x20(%rbp), %rdi
callq 0x421550
movq -0x28(%rbp), %rdi
callq 0x421550
movl -0x4(%rbp), %eax
addq $0x120, %rsp            # imm = 0x120
popq %rbp
retq
nopl (%rax)