Obfuscation of C code

Below is a sample input file before obfuscation. This is the diffstat utility used to compute useful statistics on diff (also know as patch) files.

/******************************************************************************
 * Copyright 1994,1995,1996,1998,2000 by Thomas E. Dickey <dickey@clark.net>  *
 * All Rights Reserved.                                                       *
 *                                                                            *
 * Permission to use, copy, modify, and distribute this software and its      *
 * documentation for any purpose and without fee is hereby granted, provided  *
 * that the above copyright notice appear in all copies and that both that    *
 * copyright notice and this permission notice appear in supporting           *
 * documentation, and that the name of the above listed copyright holder(s)   *
 * not be used in advertising or publicity pertaining to distribution of the  *
 * software without specific, written prior permission.                       *
 *                                                                            *
 * THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD   *
 * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND  *
 * FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE  *
 * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES          *
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN      *
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR *
 * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.                *
 ******************************************************************************/

#ifndef	NO_IDENT
static char *Id = "$Id: INC-sample-orig.cxx.shtml,v 1.1 2004/07/27 17:25:27 hvv Exp $";
#endif

/*
 * Title:	diffstat.c
 * Author:	T.E.Dickey
 * Created:	02 Feb 1992
 * Modified:
 *		29 Mar 2000, add -c option.  Check for compressed input, read
 *			     via pipe.  Change to ANSI C.  Adapted change from
 *			     Troy Engel to add option that displays a number
 *			     only, rather than a histogram.
 *		17 May 1998, handle Debian diff files, which do not contain
 *			     dates on the header lines.
 *		16 Jan 1998, accommodate patches w/o tabs in header lines (e.g.,
 *			     from cut/paste).  Strip suffixes such as ".orig".
 *		24 Mar 1996, corrected -p0 logic, more fixes in merge_name.
 *		16 Mar 1996, corrected state-change for "Binary".  Added -p
 *			     option.
 *		17 Dec 1995, corrected matching algorithm in 'merge_name()'
 *		11 Dec 1995, mods to accommodate diffs against /dev/null or
 *			     /tmp/XXX (tempfiles).
 *		06 May 1995, limit scaling -- only shrink-to-fit.
 *		29 Apr 1995, recognize 'rcsdiff -u' format.
 *		26 Dec 1994, strip common pathname-prefix.
 *		13 Nov 1994, added '-n' option.  Corrected logic of 'match'.
 *		17 Jun 1994, ifdef-<string.h>
 *		12 Jun 1994, recognize unified diff, and output of makepatch.
 *		04 Oct 1993, merge multiple diff-files, busy message when the
 *			     output is piped to a file.
 *
 * Function:	this program reads the output of 'diff' and displays a histogram
 *		of the insertions/deletions/modifications per-file.
 */

#if	defined(HAVE_CONFIG_H)
#include <config.h>
#endif

#ifdef WIN32
#define HAVE_STDLIB_H
#define HAVE_STRING_H
#define HAVE_MALLOC_H
#define HAVE_GETOPT_H
#endif

#include <stdio.h>
#include <ctype.h>

#ifdef HAVE_STRING_H
#include <string.h>
#else
#include <strings.h>
#define strchr index
#define strrchr rindex
#endif

#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#else
extern int atoi();
#endif

#ifdef HAVE_UNISTD_H
#include <unistd.h>
#else
extern int isatty();
#endif

#ifdef HAVE_MALLOC_H
#include <malloc.h>
#else
extern char *malloc();
#endif

#ifdef HAVE_GETOPT_H
#include <getopt.h>
#else
extern int getopt();
extern char *optarg;
extern int optind;
#endif

#if !defined(TRUE) || (TRUE != 1)
#undef  TRUE
#undef  FALSE
#define	TRUE		1
#define	FALSE		0
#endif

#if !defined(EXIT_SUCCESS)
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1
#endif

/******************************************************************************/

#ifdef WIN32
#define PATHSEP '\\'
#else
#define PATHSEP '/'
#endif

#define EOS     '\0'
#define BLANK   ' '

#ifdef DEBUG
#define TRACE(p) printf p;
#else
#define TRACE(p)		/*nothing */
#endif

#define contain_any(s,reject) (strcspn(s,reject) != strlen(s))

#define HAVE_NOTHING 0
#define HAVE_GENERIC 1		/* e.g., "Index: foo" w/o pathname */
#define HAVE_PATH    2		/* reference-file from "diff dirname/foo" */
#define HAVE_PATH2   4		/* comparison-file from "diff dirname/foo" */

typedef enum comment {
    Normal, Only, Binary
} Comment;

typedef struct _data {
    struct _data *link;
    char *name;			/* the filename */
    int base;			/* beginning of name if -p option used */
    Comment cmt;
    long ins;			/* "+" count inserted lines */
    long del;			/* "-" count deleted lines */
    long mod;			/* "!" count modified lines */
} DATA;

static DATA *all_data;
static char *comment_opt = "";
static int format_opt = 1;
static int piped_output;
static int max_width;		/* the specified width-limit */
static int name_wide;		/* the amount reserved for filenames */
static int prefix_opt = -1;	/* if positive, controls stripping of PATHSEP */
static int plot_width;		/* the amount left over for histogram */
static long plot_scale;		/* the effective scale (1:maximum) */

/******************************************************************************/

static void
failed(char *s)
{
    perror(s);
    exit(EXIT_FAILURE);
}

static void
blip(int c)
{
    if (piped_output) {
	(void) fputc(c, stderr);
	(void) fflush(stderr);
    }
}

static char *
new_string(char *s)
{
    return strcpy(malloc((unsigned) (strlen(s) + 1)), s);
}

static DATA *
new_data(char *name)
{
    register DATA *p, *q, *r;

    TRACE(("new_data(%s)\n", name))

    /* insert into sorted list */
	for (p = all_data, q = 0; p != 0; q = p, p = p->link) {
	int cmp = strcmp(p->name, name);
	if (cmp == 0)
	    return p;
	if (cmp > 0) {
	    break;
	}
    }
    r = (DATA *) malloc(sizeof(DATA));
    if (q != 0)
	q->link = r;
    else
	all_data = r;

    r->link = p;
    r->name = new_string(name);
    r->base = 0;
    r->cmt = Normal;
    r->ins =
	r->del =
	r->mod = 0;

    return r;
}

/*
 * Remove a unneeded data item from the linked list.  Don't free the name,
 * since we may want it in another context.
 */
static void
delink(DATA * data)
{
    register DATA *p, *q;

    TRACE(("delink '%s'\n", data->name))

	for (p = all_data, q = 0; p != 0; q = p, p = p->link) {
	if (p == data) {
	    if (q != 0)
		q->link = p->link;
	    else
		all_data = p->link;
	    return;
	}
    }
}

/* like strncmp, but without the 3rd argument */
static int
match(char *s, char *p)
{
    int ok = FALSE;
    while (*s != EOS) {
	if (*p == EOS) {
	    ok = TRUE;
	    break;
	}
	if (*s++ != *p++)
	    break;
    }
    return ok;
}

static int
version_num(char *s)
{
    int main_ver, sub_ver;
    char temp[2];
    return (sscanf(s, "%d.%d%c", &main_ver, &sub_ver, temp) == 2);
}

static int
edit_range(char *s)
{
    int first, last;
    char temp[2];
    return (sscanf(s, "%d,%d%c", &first, &last, temp) == 2);
}

static int
HadDiffs(DATA * data)
{
    return data->ins != 0
	|| data->del != 0
	|| data->mod != 0;
}

/*
 * If the given path is not one of the "ignore" paths, then return true.
 */
static int
can_be_merged(char *path)
{
    if (strcmp(path, "")
	&& strcmp(path, "/dev/null")
	&& strncmp(path, "/tmp/", 5))
	return TRUE;
    return FALSE;
}

static
int
is_leaf(char *leaf, char *path)
{
    char *s;

    if (strchr(leaf, PATHSEP) == 0
	&& (s = strrchr(path, PATHSEP)) != 0
	&& !strcmp(++s, leaf))
	return TRUE;
    return FALSE;
}

static char *
merge_name(DATA * data, char *path)
{
    TRACE(("merge_name(%s,%s) diffs:%d\n", data->name, path, HadDiffs(data)))

	if (!HadDiffs(data)) {	/* the data was the first of 2 markers */
	if (is_leaf(data->name, path)) {
	    TRACE(("is_leaf: %s vs %s\n", data->name, path))
		delink(data);
	} else if (can_be_merged(data->name)
	    && can_be_merged(path)) {
	    size_t len1 = strlen(data->name);
	    size_t len2 = strlen(path);
	    unsigned n;
	    int matched = 0;
	    int diff = 0;

	    /* strip suffixes such as ".orig", ".bak" */
	    if (len1 > len2) {
		if (!strncmp(data->name, path, len2)) {
		    data->name[len1 = len2] = EOS;
		}
	    } else if (len1 < len2) {
		if (!strncmp(data->name, path, len1)) {
		    path[len2 = len1] = EOS;
		}
	    }

	    for (n = 1; n <= len1 && n <= len2; n++) {
		if (data->name[len1 - n] != path[len2 - n]) {
		    diff = n;
		    break;
		}
		if (path[len2 - n] == PATHSEP)
		    matched = n;
	    }

	    if (prefix_opt < 0
		&& matched != 0
		&& diff)
		path += len2 - matched + 1;

	    delink(data);
	    TRACE(("merge @%d, prefix_opt=%d matched=%d diff=%d\n",
		    __LINE__, prefix_opt, matched, diff))
	} else if (!can_be_merged(path)) {
	    TRACE(("merge @%d\n", __LINE__))
	    /* must not merge, retain existing name */
		path = data->name;
	} else {
	    TRACE(("merge @%d\n", __LINE__))
		delink(data);
	}
    } else if (!can_be_merged(path)) {
	path = data->name;
    }
    return path;
}

static int
begin_data(DATA * p)
{
    if (!can_be_merged(p->name)
	&& strchr(p->name, PATHSEP) != 0) {
	TRACE(("begin_data:HAVE_PATH\n"))
	    return HAVE_PATH;
    }
    TRACE(("begin_data:HAVE_GENERIC\n"))
	return HAVE_GENERIC;
}

static void
do_file(FILE * fp)
{
    DATA dummy, *this = &dummy;
    char buffer[BUFSIZ];
    int ok = HAVE_NOTHING;
    register char *s;

    dummy.name = "";
    dummy.ins =
	dummy.del =
	dummy.mod = 0;

    while (fgets(buffer, sizeof(buffer), fp)) {
	/*
	 * Trim trailing blanks (e.g., newline)
	 */
	for (s = buffer + strlen(buffer); s > buffer; s--) {
	    if (isspace(s[-1]))
		s[-1] = EOS;
	    else
		break;
	}

	/*
	 * The markers for unified diff are a little different from the
	 * normal context-diff.  Also, the edit-lines in a unified diff
	 * won't have a space in column 2.
	 */
	if (match(buffer, "+++ ")
	    || match(buffer, "--- "))
	    (void) strncpy(buffer, "***", 3);

	/*
	 * Use the first character of the input line to determine its
	 * type:
	 */
	switch (*buffer) {
	case 'O':		/* Only */
	    if (match(buffer, "Only in ")) {
		char *path = buffer + 8;
		int found = FALSE;
		for (s = path; *s != EOS; s++) {
		    if (match(s, ": ")) {
			found = TRUE;
			*s++ = PATHSEP;
			while ((s[0] = s[1]) != EOS)
			    s++;
			break;
		    }
		}
		if (found) {
		    blip('.');
		    this = new_data(path);
		    this->cmt = Only;
		    ok = HAVE_NOTHING;
		}
	    }
	    break;

	    /*
	     * Several different scripts produce "Index:" lines
	     * (e.g., "makepatch").  Not all bother to put the
	     * pathname of the files; some put only the leaf names.
	     */
	case 'I':
	    if (!match(buffer, "Index: "))
		break;
	    s = strrchr(buffer, BLANK);		/* last token is name */
	    blip('.');
	    this = new_data(s + 1);
	    ok = begin_data(this);
	    break;

	case 'd':		/* diff command trace */
	    if (!match(buffer, "diff "))
		break;
	    s = strrchr(buffer, BLANK);
	    blip('.');
	    this = new_data(s + 1);
	    ok = begin_data(this);
	    break;

	case '*':
	    TRACE(("@%d, ok=%d:%s\n", __LINE__, ok, buffer))
		if (!(ok & HAVE_PATH)) {
		char fname[BUFSIZ];
		char skip[BUFSIZ];
		char wday[BUFSIZ], mmm[BUFSIZ];
		int ddd, hour, minute, second;
		int day, month, year;

		/* check for tab-delimited first, so we can
		 * accept filenames containing spaces.
		 */
		if (sscanf(buffer,
			"*** %[^\t]\t%[^ ] %[^ ] %d %d:%d:%d %d",
			fname,
			wday, mmm, &ddd,
			&hour, &minute, &second, &year) == 8
		    || (sscanf(buffer,
			    "*** %[^\t]\t%d/%d/%d %d:%d:%d",
			    fname,
			    &year, &month, &day,
			    &hour, &minute, &second) == 7
			&& !version_num(fname))
		    || sscanf(buffer,
			"*** %[^\t ]%[\t ]%[^ ] %[^ ] %d %d:%d:%d %d",
			fname,
			skip,
			wday, mmm, &ddd,
			&hour, &minute, &second, &year) == 9
		    || (sscanf(buffer,
			    "*** %[^\t ]%[\t ]%d/%d/%d %d:%d:%d",
			    fname,
			    skip,
			    &year, &month, &day,
			    &hour, &minute, &second) == 8
			&& !version_num(fname))
		    || (sscanf(buffer,
			    "*** %[^\t ]%[\t ]",
			    fname,
			    skip) == 1
			&& !version_num(fname)
			&& !contain_any(fname, "*")
			&& !edit_range(fname))
		    ) {
		    s = merge_name(this, fname);
		    this = new_data(s);
		    ok = begin_data(this);
		    TRACE(("after merge:%d:%s\n", ok, s))
		}
	    }
	    break;

	case '+':
	    if (buffer[1] == buffer[0])
		break;
	    /* FALL-THRU */
	case '>':
	    if (!ok)
		break;
	    this->ins += 1;
	    break;

	case '-':
	    if (!ok)
		break;
	    if (buffer[1] == buffer[0])
		break;
	    /* fall-thru */
	case '<':
	    if (!ok)
		break;
	    this->del += 1;
	    break;

	case '!':
	    if (!ok)
		break;
	    this->mod += 1;
	    break;

	    /* Expecting "Binary files XXX and YYY differ" */
	case 'B':		/* Binary */
	    /* FALL-THRU */
	case 'b':		/* binary */
	    if (match(buffer + 1, "inary files ")) {
		s = strrchr(buffer, BLANK);
		if (!strcmp(s, " differ")) {
		    *s = EOS;
		    s = strrchr(buffer, BLANK);
		    blip('.');
		    this = new_data(s + 1);
		    this->cmt = Binary;
		    ok = HAVE_NOTHING;
		}
	    }
	    break;
	}
    }
    blip('\n');
}

/*
 * Each call to 'plot_num()' prints a scaled bar of 'c' characters.  The
 * 'extra' parameter is used to keep the accumulated error in the bar's total
 * length from getting large.
 */
static long
plot_num(long num_value, int c, long extra)
{
    switch (format_opt) {
    case 0:
	printf("\t%ld %c", num_value, c);
	return 0;
    default:
	/* the value to plot */
	/* character to display in the bar */
	/* accumulated error in the bar */
	{
	    long product = (plot_width * num_value) + extra;
	    long count = (product / plot_scale);
	    extra = product - (count * plot_scale);
	    while (--count >= 0)
		(void) putchar(c);
	    return extra;
	}
    }
}

static void
summarize(void)
{
    register DATA *p;
    long total_ins = 0, total_del = 0, total_mod = 0, temp;
    int num_files = 0, shortest_name = -1, longest_name = -1, prefix_len = -1;

    plot_scale = 0;
    for (p = all_data; p; p = p->link) {
	int len = strlen(p->name);

	/*
	 * "-p0" gives the whole pathname unmodified.  "-p1" strips
	 * through the first path-separator, etc.
	 */
	if (prefix_opt >= 0) {
	    int n, base;
	    for (n = prefix_opt, base = 0; n > 0; n--) {
		char *s = strchr(p->name + base, PATHSEP);
		if (s == 0 || *++s == EOS)
		    break;
		base = (int) (s - p->name);
	    }
	    p->base = base;
	    if (name_wide < (len - base))
		name_wide = (len - base);
	} else {
	    if (len < prefix_len || prefix_len < 0)
		prefix_len = len;
	    while (prefix_len > 0) {
		if (p->name[prefix_len - 1] != PATHSEP)
		    prefix_len--;
		else if (strncmp(all_data->name, p->name, (size_t) prefix_len))
		    prefix_len--;
		else
		    break;
	    }

	    if (len > longest_name)
		longest_name = len;
	    if (len < shortest_name || shortest_name < 0)
		shortest_name = len;
	}

	num_files++;
	total_ins += p->ins;
	total_del += p->del;
	total_mod += p->mod;
	temp = p->ins + p->del + p->mod;
	if (temp > plot_scale)
	    plot_scale = temp;
    }

    if (prefix_opt < 0) {
	if (prefix_len < 0)
	    prefix_len = 0;
	if ((longest_name - prefix_len) > name_wide)
	    name_wide = (longest_name - prefix_len);
    }

    name_wide++;		/* make sure it's nonzero */
    plot_width = (max_width - name_wide - 8);
    if (plot_width < 10)
	plot_width = 10;

    if (plot_scale < plot_width)
	plot_scale = plot_width;	/* 1:1 */

    for (p = all_data; p; p = p->link) {
	printf("%s %-*.*s|",
	    comment_opt,
	    name_wide, name_wide,
	    p->name + (prefix_opt >= 0 ? p->base : prefix_len));
	switch (p->cmt) {
	default:
	case Normal:
	    temp = 0;
	    printf("%5ld ", p->ins + p->del + p->mod);
	    temp = plot_num(p->ins, '+', temp);
	    (void) plot_num(p->del, '-', temp);
	    (void) plot_num(p->mod, '!', temp);
	    break;
	case Binary:
	    printf("binary");
	    break;
	case Only:
	    printf("only");
	    break;
	}
	printf("\n");
    }

    printf("%s %d files changed", comment_opt, num_files);
#define PLURAL(n) n, n != 1 ? "s" : ""
    if (total_ins)
	printf(", %ld insertion%s(+)", PLURAL(total_ins));
    if (total_del)
	printf(", %ld deletion%s(-)", PLURAL(total_del));
    if (total_mod)
	printf(", %ld modification%s(!)", PLURAL(total_mod));
    (void) putchar('\n');
}

#ifdef HAVE_POPEN
static char *
is_compressed(char *name)
{
    char *verb = 0;
    char *result = 0;
    size_t len = strlen(name);

    if (len > 2 && !strcmp(name + len - 2, ".Z")) {
	verb = "compress -dc %s";
    } else if (len > 3 && !strcmp(name + len - 3, ".gz")) {
	verb = "gzip -dc %s";
    }
    if (verb != 0) {
	result = malloc(strlen(verb) + len);
	sprintf(result, verb, name);
    }
    return result;

}
#endif

static void
usage(void)
{
    static char *msg[] =
    {
	"Usage: diffstat [options] [files]",
	"",
	"Reads from one or more input files which contain output from 'diff',",
	"producing a histogram of total lines changed for each file referenced.",
	"If no filename is given on the command line, reads from stdin.",
	"",
	"Options:",
	"  -c      prefix each line with comment (#)",
	"  -f NUM  format (0=concise, 1=normal)",
	"  -n NUM  specify minimum width for the filenames (default: auto)",
	"  -p NUM  specify number of pathname-separators to strip (default: common)",
	"  -w NUM  specify maximum width of the output (default: 80)",
	"  -V      prints the version number"
    };
    register unsigned j;
    for (j = 0; j < sizeof(msg) / sizeof(msg[0]); j++)
	fprintf(stderr, "%s\n", msg[j]);
    exit(EXIT_FAILURE);
}

int
main(int argc, char *argv[])
{
    register int j;
    char version[80];

    max_width = 80;
    piped_output = !isatty(fileno(stdout))
	&& isatty(fileno(stderr));

    while ((j = getopt(argc, argv, "cf:n:p:w:V")) != EOF) {
	switch (j) {
	case 'c':
	    comment_opt = "#";
	    break;
	case 'f':
	    format_opt = atoi(optarg);
	    break;
	case 'n':
	    name_wide = atoi(optarg);
	    break;
	case 'p':
	    prefix_opt = atoi(optarg);
	    break;
	case 'w':
	    max_width = atoi(optarg);
	    break;
	case 'V':
	    if (!sscanf(Id, "%*s %*s %s", version))
		(void) strcpy(version, "?");
	    printf("diffstat version %s\n", version);
	    exit(EXIT_SUCCESS);
	default:
	    usage();
	    /*NOTREACHED */
	}
    }

    if (optind < argc) {
	while (optind < argc) {
	    FILE *fp;
	    char *name = argv[optind++];
#ifdef HAVE_POPEN
	    char *command = is_compressed(name);
	    if (command != 0) {
		if ((fp = popen(command, "r")) != 0) {
		    if (piped_output) {
			(void) fprintf(stderr, "%s\n", name);
			(void) fflush(stderr);
		    }
		    do_file(fp);
		    (void) pclose(fp);
		    free(command);
		}
	    } else
#endif
	    if ((fp = fopen(name, "r")) != 0) {
		if (piped_output) {
		    (void) fprintf(stderr, "%s\n", name);
		    (void) fflush(stderr);
		}
		do_file(fp);
		(void) fclose(fp);
	    } else {
		failed(name);
	    }
	}
    } else {
	do_file(stdin);
    }
    summarize();
    exit(EXIT_SUCCESS);
    /*NOTREACHED */
}

Below is the same file with obfuscation applied. As you see, all identifiers in macros were replaced consistently, all comments are gone, extra white space is removed. The source was processed using the commandline

perl cxx-obfus -x xpg4 diffstat.c -o obfuscated-diffstat.c


#ifndef	z186deb3bb2
static char*zd904d243ce=
"\x24\x49\x64\x3a\x20\x64\x69\x66\x66\x73\x74\x61\x74\x2e\x63\x2c\x76\x20\x31\x2e\x32\x38\x20\x32\x30\x30\x30\x2f\x30\x33\x2f\x33\x30\x20\x30\x30\x3a\x30\x31\x3a\x31\x39\x20\x74\x6f\x6d\x20\x45\x78\x70\x20\x24"
;
#endif
#if	defined(z863a8162bc)
#include <config.h>
#endif
#ifdef WIN32
#define z0143994977
#define z9e60e34570
#define zdd31a60d5f
#define z8a0c6a09f3
#endif
#include <stdio.h>
#include <ctype.h>
#ifdef z9e60e34570
#include <string.h>
#else
#include <strings.h>
#define strchr index
#define strrchr rindex
#endif
#ifdef z0143994977
#include <stdlib.h>
#else
extern int atoi();
#endif
#ifdef z9932b0a88e
#include <unistd.h>
#else
extern int isatty();
#endif
#ifdef zdd31a60d5f
#include <malloc.h>
#else
extern char*malloc();
#endif
#ifdef z8a0c6a09f3
#include <getopt.h>
#else
extern int getopt();extern char*optarg;extern int optind;
#endif
#if !defined(TRUE) || (TRUE != (0x20+6494-0x197d))
#undef  TRUE
#undef  FALSE
#define	TRUE		(0x13d+544-0x35c)
#define	FALSE		(0x172f+2277-0x2014)
#endif
#if !defined(EXIT_SUCCESS)
#define EXIT_SUCCESS (0x689+3798-0x155f)
#define EXIT_FAILURE (0x10f3+5563-0x26ad)
#endif
#ifdef WIN32
#define z0cdcbd608f '\\'
#else
#define z0cdcbd608f ((char)(0x3b0+6985-0x1eca))
#endif
#define zea67ee7d6c     '\0'
#define z54688bf873   ((char)(0x12a8+2555-0x1c83))
#ifdef DEBUG
#define z7f02667ab7(z04eb77b88a) printf z04eb77b88a;
#else
#define z7f02667ab7(z04eb77b88a)		
#endif
#define zfb55c23c8f(s,z6ece532808) (strcspn(s,z6ece532808) != strlen(s))
#define z893fc27eba (0x10ea+4224-0x216a)
#define zf5e4a39a7e (0x229+1177-0x6c1)		
#define zb344408d04    (0xd00+4886-0x2014)		
#define z125b03f908   (0xda3+71-0xde6)		
typedef enum z5cd0c51a66{ze04ece0484,zcba65ad31a,zd18cd059dc}z455ce170db;typedef
 struct z99078d1100{struct z99078d1100*link;char*name;int base;z455ce170db 
z25cd54603c;long zc00bf817a3;long z9cbe16f057;long z8d69073f9f;}DATA;static DATA
*z16208f39bf;static char*zb37c9d1346="";static int z388d3293ac=
(0xba4+1467-0x115e);static int z99ec214447;static int za862d19cbc;static int 
z1c0ab7cf0c;static int z13f00839ad=-(0x10a5+1725-0x1761);static int z22204afdf5;
static long zbbec3834b1;static void z6aea0a920d(char*s){perror(s);exit(
EXIT_FAILURE);}static void zfe178f875a(int zab628eb42a){if(z99ec214447){(void)
fputc(zab628eb42a,stderr);(void)fflush(stderr);}}static char*z66f17a4c78(char*s)
{return strcpy(malloc((unsigned)(strlen(s)+(0xffa+212-0x10cd))),s);}static DATA*
z4f6e1f2cad(char*name){register DATA*z04eb77b88a,*z34d15a68ff,*z04526a1d1b;
z7f02667ab7(("\x6e\x65\x77\x5f\x64\x61\x74\x61\x28\x25\x73\x29" "\n",name))for(
z04eb77b88a=z16208f39bf,z34d15a68ff=(0x49b+7318-0x2131);z04eb77b88a!=
(0x5d0+3794-0x14a2);z34d15a68ff=z04eb77b88a,z04eb77b88a=z04eb77b88a->link){int 
z327a26f629=strcmp(z04eb77b88a->name,name);if(z327a26f629==(0xe0+6557-0x1a7d))
return z04eb77b88a;if(z327a26f629>(0xe20+1631-0x147f)){break;}}z04526a1d1b=(DATA
*)malloc(sizeof(DATA));if(z34d15a68ff!=(0x166+2883-0xca9))z34d15a68ff->link=
z04526a1d1b;else z16208f39bf=z04526a1d1b;z04526a1d1b->link=z04eb77b88a;
z04526a1d1b->name=z66f17a4c78(name);z04526a1d1b->base=(0x4ac+6313-0x1d55);
z04526a1d1b->z25cd54603c=ze04ece0484;z04526a1d1b->zc00bf817a3=z04526a1d1b->
z9cbe16f057=z04526a1d1b->z8d69073f9f=(0xe13+195-0xed6);return z04526a1d1b;}
static void z5316e268e7(DATA*data){register DATA*z04eb77b88a,*z34d15a68ff;
z7f02667ab7(("\x64\x65\x6c\x69\x6e\x6b\x20\x27\x25\x73\x27" "\n",data->name))for
(z04eb77b88a=z16208f39bf,z34d15a68ff=(0xb19+6252-0x2385);z04eb77b88a!=
(0x1f4+3518-0xfb2);z34d15a68ff=z04eb77b88a,z04eb77b88a=z04eb77b88a->link){if(
z04eb77b88a==data){if(z34d15a68ff!=(0xaa2+508-0xc9e))z34d15a68ff->link=
z04eb77b88a->link;else z16208f39bf=z04eb77b88a->link;return;}}}static int 
zbbfd55c027(char*s,char*z04eb77b88a){int zb0e5c4bb7a=FALSE;while(*s!=zea67ee7d6c
){if(*z04eb77b88a==zea67ee7d6c){zb0e5c4bb7a=TRUE;break;}if(*s++!=*z04eb77b88a++)
break;}return zb0e5c4bb7a;}static int zcb1f842b62(char*s){int z89f5a5b43f,
z0cf29f2b57;char z62f0684fee[(0x2163+856-0x24b9)];return(sscanf(s,
"\x25\x64\x2e\x25\x64\x25\x63",&z89f5a5b43f,&z0cf29f2b57,z62f0684fee)==
(0xa71+4236-0x1afb));}static int z79f5912bf3(char*s){int zceb2bba132,z5f19c843d2
;char z62f0684fee[(0x138a+1212-0x1844)];return(sscanf(s,
"\x25\x64\x2c\x25\x64\x25\x63",&zceb2bba132,&z5f19c843d2,z62f0684fee)==
(0xf69+2661-0x19cc));}static int z596d59bfd7(DATA*data){return data->zc00bf817a3
!=(0x964+864-0xcc4)||data->z9cbe16f057!=(0xd8f+2535-0x1776)||data->z8d69073f9f!=
(0x157d+2513-0x1f4e);}static int z37678ca415(char*z9efe2b215c){if(strcmp(
z9efe2b215c,"")&&strcmp(z9efe2b215c,"\x2f\x64\x65\x76\x2f\x6e\x75\x6c\x6c")&&
strncmp(z9efe2b215c,"\x2f\x74\x6d\x70\x2f",(0xcd9+4766-0x1f72)))return TRUE;
return FALSE;}static int zed205c55c0(char*leaf,char*z9efe2b215c){char*s;if(
strchr(leaf,z0cdcbd608f)==(0x1238+4205-0x22a5)&&(s=strrchr(z9efe2b215c,
z0cdcbd608f))!=(0xaf1+666-0xd8b)&&!strcmp(++s,leaf))return TRUE;return FALSE;}
static char*zae67baad1a(DATA*data,char*z9efe2b215c){z7f02667ab7((
"\x6d\x65\x72\x67\x65\x5f\x6e\x61\x6d\x65\x28\x25\x73\x2c\x25\x73\x29\x20\x64\x69\x66\x66\x73\x3a\x25\x64" "\n"
,data->name,z9efe2b215c,z596d59bfd7(data)))if(!z596d59bfd7(data)){if(zed205c55c0
(data->name,z9efe2b215c)){z7f02667ab7((
"\x69\x73\x5f\x6c\x65\x61\x66\x3a\x20\x25\x73\x20\x76\x73\x20\x25\x73" "\n",data
->name,z9efe2b215c))z5316e268e7(data);}else if(z37678ca415(data->name)&&
z37678ca415(z9efe2b215c)){size_t z83ede495e3=strlen(data->name);size_t 
z51dea41a1e=strlen(z9efe2b215c);unsigned z14851c4b0f;int z25968f7da7=
(0x199+6956-0x1cc5);int zbfd1795850=(0x11bb+3787-0x2086);if(z83ede495e3>
z51dea41a1e){if(!strncmp(data->name,z9efe2b215c,z51dea41a1e)){data->name[
z83ede495e3=z51dea41a1e]=zea67ee7d6c;}}else if(z83ede495e3<z51dea41a1e){if(!
strncmp(data->name,z9efe2b215c,z83ede495e3)){z9efe2b215c[z51dea41a1e=z83ede495e3
]=zea67ee7d6c;}}for(z14851c4b0f=(0xcf7+158-0xd94);z14851c4b0f<=z83ede495e3&&
z14851c4b0f<=z51dea41a1e;z14851c4b0f++){if(data->name[z83ede495e3-z14851c4b0f]!=
z9efe2b215c[z51dea41a1e-z14851c4b0f]){zbfd1795850=z14851c4b0f;break;}if(
z9efe2b215c[z51dea41a1e-z14851c4b0f]==z0cdcbd608f)z25968f7da7=z14851c4b0f;}if(
z13f00839ad<(0x2f6+6507-0x1c61)&&z25968f7da7!=(0xc31+5145-0x204a)&&zbfd1795850)
z9efe2b215c+=z51dea41a1e-z25968f7da7+(0x3f9+8901-0x26bd);z5316e268e7(data);
z7f02667ab7((
"\x6d\x65\x72\x67\x65\x20\x40\x25\x64\x2c\x20\x70\x72\x65\x66\x69\x78\x5f\x6f\x70\x74\x3d\x25\x64\x20\x6d\x61\x74\x63\x68\x65\x64\x3d\x25\x64\x20\x64\x69\x66\x66\x3d\x25\x64" "\n"
,__LINE__,z13f00839ad,z25968f7da7,zbfd1795850))}else if(!z37678ca415(z9efe2b215c
)){z7f02667ab7(("\x6d\x65\x72\x67\x65\x20\x40\x25\x64" "\n",__LINE__))
z9efe2b215c=data->name;}else{z7f02667ab7((
"\x6d\x65\x72\x67\x65\x20\x40\x25\x64" "\n",__LINE__))z5316e268e7(data);}}else 
if(!z37678ca415(z9efe2b215c)){z9efe2b215c=data->name;}return z9efe2b215c;}static
 int zf744cf0686(DATA*z04eb77b88a){if(!z37678ca415(z04eb77b88a->name)&&strchr(
z04eb77b88a->name,z0cdcbd608f)!=(0x10e8+3640-0x1f20)){z7f02667ab7((
"\x62\x65\x67\x69\x6e\x5f\x64\x61\x74\x61\x3a\x48\x41\x56\x45\x5f\x50\x41\x54\x48" "\n"
))return zb344408d04;}z7f02667ab7((
"\x62\x65\x67\x69\x6e\x5f\x64\x61\x74\x61\x3a\x48\x41\x56\x45\x5f\x47\x45\x4e\x45\x52\x49\x43" "\n"
))return zf5e4a39a7e;}static void z71e80df59d(FILE*za2f057b639){DATA z4108837f77
,*this=&z4108837f77;char zcc158ad3e0[BUFSIZ];int zb0e5c4bb7a=z893fc27eba;
register char*s;z4108837f77.name="";z4108837f77.zc00bf817a3=z4108837f77.
z9cbe16f057=z4108837f77.z8d69073f9f=(0x1256+492-0x1442);while(fgets(zcc158ad3e0,
sizeof(zcc158ad3e0),za2f057b639)){for(s=zcc158ad3e0+strlen(zcc158ad3e0);s>
zcc158ad3e0;s--){if(isspace(s[-(0x11a6+3582-0x1fa3)]))s[-(0xbfd+3740-0x1a98)]=
zea67ee7d6c;else break;}if(zbbfd55c027(zcc158ad3e0,"\x2b\x2b\x2b\x20")||
zbbfd55c027(zcc158ad3e0,"\x2d\x2d\x2d\x20"))(void)strncpy(zcc158ad3e0,
"\x2a\x2a\x2a",(0x11a8+4078-0x2193));switch(*zcc158ad3e0){case
((char)(0x679+5511-0x1bb1)):if(zbbfd55c027(zcc158ad3e0,
"\x4f\x6e\x6c\x79\x20\x69\x6e\x20")){char*z9efe2b215c=zcc158ad3e0+
(0x7f8+1256-0xcd8);int z8374cc586e=FALSE;for(s=z9efe2b215c;*s!=zea67ee7d6c;s++){
if(zbbfd55c027(s,"\x3a\x20")){z8374cc586e=TRUE;*s++=z0cdcbd608f;while((s[
(0x1844+1509-0x1e29)]=s[(0x884+6368-0x2163)])!=zea67ee7d6c)s++;break;}}if(
z8374cc586e){zfe178f875a(((char)(0x1350+127-0x13a1)));this=z4f6e1f2cad(
z9efe2b215c);this->z25cd54603c=zcba65ad31a;zb0e5c4bb7a=z893fc27eba;}}break;case
((char)(0xead+212-0xf38)):if(!zbbfd55c027(zcc158ad3e0,
"\x49\x6e\x64\x65\x78\x3a\x20"))break;s=strrchr(zcc158ad3e0,z54688bf873);
zfe178f875a(((char)(0x476+7445-0x215d)));this=z4f6e1f2cad(s+(0xc8d+3498-0x1a36))
;zb0e5c4bb7a=zf744cf0686(this);break;case((char)(0x1795+508-0x192d)):if(!
zbbfd55c027(zcc158ad3e0,"\x64\x69\x66\x66\x20"))break;s=strrchr(zcc158ad3e0,
z54688bf873);zfe178f875a(((char)(0x4e4+1402-0xa30)));this=z4f6e1f2cad(s+
(0xa0a+5783-0x20a0));zb0e5c4bb7a=zf744cf0686(this);break;case
((char)(0x1a5+6801-0x1c0c)):z7f02667ab7((
"\x40\x25\x64\x2c\x20\x6f\x6b\x3d\x25\x64\x3a\x25\x73" "\n",__LINE__,zb0e5c4bb7a
,zcc158ad3e0))if(!(zb0e5c4bb7a&zb344408d04)){char z5fb3e9a377[BUFSIZ];char 
z6a507b36dd[BUFSIZ];char z2e5bb045c7[BUFSIZ],z20e4662271[BUFSIZ];int z6165f6bb8a
,z77f2a73114,z896b9cd493,z2d63c7e83f;int z2b069dbaa9,zd6ce52ad59,z32ee5ba99f;if(
sscanf(zcc158ad3e0,
"\x2a\x2a\x2a\x20\x25\x5b\x5e" "\t" "\x5d" "\t" "\x25\x5b\x5e\x20\x5d\x20\x25\x5b\x5e\x20\x5d\x20\x25\x64\x20\x25\x64\x3a\x25\x64\x3a\x25\x64\x20\x25\x64"
,z5fb3e9a377,z2e5bb045c7,z20e4662271,&z6165f6bb8a,&z77f2a73114,&z896b9cd493,&
z2d63c7e83f,&z32ee5ba99f)==(0xb7f+6098-0x2349)||(sscanf(zcc158ad3e0,
"\x2a\x2a\x2a\x20\x25\x5b\x5e" "\t" "\x5d" "\t" "\x25\x64\x2f\x25\x64\x2f\x25\x64\x20\x25\x64\x3a\x25\x64\x3a\x25\x64"
,z5fb3e9a377,&z32ee5ba99f,&zd6ce52ad59,&z2b069dbaa9,&z77f2a73114,&z896b9cd493,&
z2d63c7e83f)==(0x4bb+5467-0x1a0f)&&!zcb1f842b62(z5fb3e9a377))||sscanf(
zcc158ad3e0,
"\x2a\x2a\x2a\x20\x25\x5b\x5e" "\t" "\x20\x5d\x25\x5b" "\t" "\x20\x5d\x25\x5b\x5e\x20\x5d\x20\x25\x5b\x5e\x20\x5d\x20\x25\x64\x20\x25\x64\x3a\x25\x64\x3a\x25\x64\x20\x25\x64"
,z5fb3e9a377,z6a507b36dd,z2e5bb045c7,z20e4662271,&z6165f6bb8a,&z77f2a73114,&
z896b9cd493,&z2d63c7e83f,&z32ee5ba99f)==(0x6e4+3699-0x154e)||(sscanf(zcc158ad3e0
,
"\x2a\x2a\x2a\x20\x25\x5b\x5e" "\t" "\x20\x5d\x25\x5b" "\t" "\x20\x5d\x25\x64\x2f\x25\x64\x2f\x25\x64\x20\x25\x64\x3a\x25\x64\x3a\x25\x64"
,z5fb3e9a377,z6a507b36dd,&z32ee5ba99f,&zd6ce52ad59,&z2b069dbaa9,&z77f2a73114,&
z896b9cd493,&z2d63c7e83f)==(0x46d+6174-0x1c83)&&!zcb1f842b62(z5fb3e9a377))||(
sscanf(zcc158ad3e0,
"\x2a\x2a\x2a\x20\x25\x5b\x5e" "\t" "\x20\x5d\x25\x5b" "\t" "\x20\x5d",
z5fb3e9a377,z6a507b36dd)==(0x1d2+745-0x4ba)&&!zcb1f842b62(z5fb3e9a377)&&!
zfb55c23c8f(z5fb3e9a377,"\x2a")&&!z79f5912bf3(z5fb3e9a377))){s=zae67baad1a(this,
z5fb3e9a377);this=z4f6e1f2cad(s);zb0e5c4bb7a=zf744cf0686(this);z7f02667ab7((
"\x61\x66\x74\x65\x72\x20\x6d\x65\x72\x67\x65\x3a\x25\x64\x3a\x25\x73" "\n",
zb0e5c4bb7a,s))}}break;case((char)(0xd61+6160-0x2546)):if(zcc158ad3e0[
(0xac4+1140-0xf37)]==zcc158ad3e0[(0x60f+2955-0x119a)])break;case
((char)(0xe2c+3922-0x1d40)):if(!zb0e5c4bb7a)break;this->zc00bf817a3+=
(0x224+3116-0xe4f);break;case((char)(0x1def+1039-0x21d1)):if(!zb0e5c4bb7a)break;
if(zcc158ad3e0[(0xaa4+575-0xce2)]==zcc158ad3e0[(0x1082+4261-0x2127)])break;case
((char)(0x200+6315-0x1a6f)):if(!zb0e5c4bb7a)break;this->z9cbe16f057+=
(0x676+3603-0x1488);break;case((char)(0xfa+9053-0x2436)):if(!zb0e5c4bb7a)break;
this->z8d69073f9f+=(0x109d+5227-0x2507);break;case((char)(0x1694+3787-0x251d)):
case((char)(0xb52+5944-0x2228)):if(zbbfd55c027(zcc158ad3e0+(0x10cf+5503-0x264d),
"\x69\x6e\x61\x72\x79\x20\x66\x69\x6c\x65\x73\x20")){s=strrchr(zcc158ad3e0,
z54688bf873);if(!strcmp(s,"\x20\x64\x69\x66\x66\x65\x72")){*s=zea67ee7d6c;s=
strrchr(zcc158ad3e0,z54688bf873);zfe178f875a(((char)(0x1ce9+86-0x1d11)));this=
z4f6e1f2cad(s+(0x817+6842-0x22d0));this->z25cd54603c=zd18cd059dc;zb0e5c4bb7a=
z893fc27eba;}}break;}}zfe178f875a('\n');}static long zd206cb04ff(long 
zdf7e34ff10,int zab628eb42a,long z411494a5b5){switch(z388d3293ac){case
(0xabd+1121-0xf1e):printf("\t" "\x25\x6c\x64\x20\x25\x63",zdf7e34ff10,
zab628eb42a);return(0x12b+7663-0x1f1a);default:{long z1dc5bcb0fe=(z22204afdf5*
zdf7e34ff10)+z411494a5b5;long z5ecce3ad51=(z1dc5bcb0fe/zbbec3834b1);z411494a5b5=
z1dc5bcb0fe-(z5ecce3ad51*zbbec3834b1);while(--z5ecce3ad51>=(0xb6c+5724-0x21c8))(
void)putchar(zab628eb42a);return z411494a5b5;}}}static void z6d9013aa42(void){
register DATA*z04eb77b88a;long z8b956321df=(0xdc8+5904-0x24d8),zcda440b80d=
(0xcab+5202-0x20fd),z5a9483c774=(0x121f+696-0x14d7),z62f0684fee;int zc1bb72c900=
(0x153b+3299-0x221e),z1ca2b945e7=-(0x1145+3526-0x1f0a),z4e3bce4c7f=-
(0xb03+5793-0x21a3),z1a7f8eadb2=-(0x86+7567-0x1e14);zbbec3834b1=
(0x304+3821-0x11f1);for(z04eb77b88a=z16208f39bf;z04eb77b88a;z04eb77b88a=
z04eb77b88a->link){int len=strlen(z04eb77b88a->name);if(z13f00839ad>=
(0xd34+2679-0x17ab)){int z14851c4b0f,base;for(z14851c4b0f=z13f00839ad,base=
(0xddf+2745-0x1898);z14851c4b0f>(0xb1f+21-0xb34);z14851c4b0f--){char*s=strchr(
z04eb77b88a->name+base,z0cdcbd608f);if(s==(0xdff+5512-0x2387)||*++s==zea67ee7d6c
)break;base=(int)(s-z04eb77b88a->name);}z04eb77b88a->base=base;if(z1c0ab7cf0c<(
len-base))z1c0ab7cf0c=(len-base);}else{if(len<z1a7f8eadb2||z1a7f8eadb2<
(0x8e6+1786-0xfe0))z1a7f8eadb2=len;while(z1a7f8eadb2>(0x147c+3939-0x23df)){if(
z04eb77b88a->name[z1a7f8eadb2-(0x934+5724-0x1f8f)]!=z0cdcbd608f)z1a7f8eadb2--;
else if(strncmp(z16208f39bf->name,z04eb77b88a->name,(size_t)z1a7f8eadb2))
z1a7f8eadb2--;else break;}if(len>z4e3bce4c7f)z4e3bce4c7f=len;if(len<z1ca2b945e7
||z1ca2b945e7<(0x7d1+5210-0x1c2b))z1ca2b945e7=len;}zc1bb72c900++;z8b956321df+=
z04eb77b88a->zc00bf817a3;zcda440b80d+=z04eb77b88a->z9cbe16f057;z5a9483c774+=
z04eb77b88a->z8d69073f9f;z62f0684fee=z04eb77b88a->zc00bf817a3+z04eb77b88a->
z9cbe16f057+z04eb77b88a->z8d69073f9f;if(z62f0684fee>zbbec3834b1)zbbec3834b1=
z62f0684fee;}if(z13f00839ad<(0x25a+3508-0x100e)){if(z1a7f8eadb2<
(0x2e7+4214-0x135d))z1a7f8eadb2=(0x6ba+1954-0xe5c);if((z4e3bce4c7f-z1a7f8eadb2)>
z1c0ab7cf0c)z1c0ab7cf0c=(z4e3bce4c7f-z1a7f8eadb2);}z1c0ab7cf0c++;z22204afdf5=(
za862d19cbc-z1c0ab7cf0c-(0x171b+1873-0x1e64));if(z22204afdf5<(0x2df+7666-0x20c7)
)z22204afdf5=(0xd5+6087-0x1892);if(zbbec3834b1<z22204afdf5)zbbec3834b1=
z22204afdf5;for(z04eb77b88a=z16208f39bf;z04eb77b88a;z04eb77b88a=z04eb77b88a->
link){printf("\x25\x73\x20\x25\x2d\x2a\x2e\x2a\x73\x7c",zb37c9d1346,z1c0ab7cf0c,
z1c0ab7cf0c,z04eb77b88a->name+(z13f00839ad>=(0x1149+1944-0x18e1)?z04eb77b88a->
base:z1a7f8eadb2));switch(z04eb77b88a->z25cd54603c){default:case ze04ece0484:
z62f0684fee=(0x1b04+480-0x1ce4);printf("\x25\x35\x6c\x64\x20",z04eb77b88a->
zc00bf817a3+z04eb77b88a->z9cbe16f057+z04eb77b88a->z8d69073f9f);z62f0684fee=
zd206cb04ff(z04eb77b88a->zc00bf817a3,((char)(0x985+1650-0xfcc)),z62f0684fee);(
void)zd206cb04ff(z04eb77b88a->z9cbe16f057,((char)(0x14f+8605-0x22bf)),
z62f0684fee);(void)zd206cb04ff(z04eb77b88a->z8d69073f9f,
((char)(0x11b2+1269-0x1686)),z62f0684fee);break;case zd18cd059dc:printf(
"\x62\x69\x6e\x61\x72\x79");break;case zcba65ad31a:printf("\x6f\x6e\x6c\x79");
break;}printf("\n");}printf(
"\x25\x73\x20\x25\x64\x20\x66\x69\x6c\x65\x73\x20\x63\x68\x61\x6e\x67\x65\x64",
zb37c9d1346,zc1bb72c900);
#define z03f6e96bfe(z14851c4b0f) z14851c4b0f, z14851c4b0f != (0x1426+695-0x16dc) ? "\x73" : ""
if(z8b956321df)printf(
"\x2c\x20\x25\x6c\x64\x20\x69\x6e\x73\x65\x72\x74\x69\x6f\x6e\x25\x73\x28\x2b\x29"
,z03f6e96bfe(z8b956321df));if(zcda440b80d)printf(
"\x2c\x20\x25\x6c\x64\x20\x64\x65\x6c\x65\x74\x69\x6f\x6e\x25\x73\x28\x2d\x29",
z03f6e96bfe(zcda440b80d));if(z5a9483c774)printf(
"\x2c\x20\x25\x6c\x64\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\x6f\x6e\x25\x73\x28\x21\x29"
,z03f6e96bfe(z5a9483c774));(void)putchar('\n');}
#ifdef zedbb9e305d
static char*z37634eac68(char*name){char*zee086921c6=(0xaaa+4214-0x1b20);char*
z69dcdbd6a5=(0x3f6+7143-0x1fdd);size_t len=strlen(name);if(len>
(0x8e8+5102-0x1cd4)&&!strcmp(name+len-(0x3d+9276-0x2477),"\x2e\x5a")){
zee086921c6="\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x2d\x64\x63\x20\x25\x73";}else
 if(len>(0x65a+6776-0x20cf)&&!strcmp(name+len-(0x497+8028-0x23f0),"\x2e\x67\x7a"
)){zee086921c6="\x67\x7a\x69\x70\x20\x2d\x64\x63\x20\x25\x73";}if(zee086921c6!=
(0x656+4764-0x18f2)){z69dcdbd6a5=malloc(strlen(zee086921c6)+len);sprintf(
z69dcdbd6a5,zee086921c6,name);}return z69dcdbd6a5;}
#endif
static void z31ca2050e2(void){static char*zde05b8b1b0[]={
"\x55\x73\x61\x67\x65\x3a\x20\x64\x69\x66\x66\x73\x74\x61\x74\x20\x5b\x6f\x70\x74\x69\x6f\x6e\x73\x5d\x20\x5b\x66\x69\x6c\x65\x73\x5d"
,"",
"\x52\x65\x61\x64\x73\x20\x66\x72\x6f\x6d\x20\x6f\x6e\x65\x20\x6f\x72\x20\x6d\x6f\x72\x65\x20\x69\x6e\x70\x75\x74\x20\x66\x69\x6c\x65\x73\x20\x77\x68\x69\x63\x68\x20\x63\x6f\x6e\x74\x61\x69\x6e\x20\x6f\x75\x74\x70\x75\x74\x20\x66\x72\x6f\x6d\x20\x27\x64\x69\x66\x66\x27\x2c"
,
"\x70\x72\x6f\x64\x75\x63\x69\x6e\x67\x20\x61\x20\x68\x69\x73\x74\x6f\x67\x72\x61\x6d\x20\x6f\x66\x20\x74\x6f\x74\x61\x6c\x20\x6c\x69\x6e\x65\x73\x20\x63\x68\x61\x6e\x67\x65\x64\x20\x66\x6f\x72\x20\x65\x61\x63\x68\x20\x66\x69\x6c\x65\x20\x72\x65\x66\x65\x72\x65\x6e\x63\x65\x64\x2e"
,
"\x49\x66\x20\x6e\x6f\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x20\x69\x73\x20\x67\x69\x76\x65\x6e\x20\x6f\x6e\x20\x74\x68\x65\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6c\x69\x6e\x65\x2c\x20\x72\x65\x61\x64\x73\x20\x66\x72\x6f\x6d\x20\x73\x74\x64\x69\x6e\x2e"
,"","\x4f\x70\x74\x69\x6f\x6e\x73\x3a",
"\x20\x20\x2d\x63\x20\x20\x20\x20\x20\x20\x70\x72\x65\x66\x69\x78\x20\x65\x61\x63\x68\x20\x6c\x69\x6e\x65\x20\x77\x69\x74\x68\x20\x63\x6f\x6d\x6d\x65\x6e\x74\x20\x28\x23\x29"
,
"\x20\x20\x2d\x66\x20\x4e\x55\x4d\x20\x20\x66\x6f\x72\x6d\x61\x74\x20\x28\x30\x3d\x63\x6f\x6e\x63\x69\x73\x65\x2c\x20\x31\x3d\x6e\x6f\x72\x6d\x61\x6c\x29"
,
"\x20\x20\x2d\x6e\x20\x4e\x55\x4d\x20\x20\x73\x70\x65\x63\x69\x66\x79\x20\x6d\x69\x6e\x69\x6d\x75\x6d\x20\x77\x69\x64\x74\x68\x20\x66\x6f\x72\x20\x74\x68\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x73\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x3a\x20\x61\x75\x74\x6f\x29"
,
"\x20\x20\x2d\x70\x20\x4e\x55\x4d\x20\x20\x73\x70\x65\x63\x69\x66\x79\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20\x70\x61\x74\x68\x6e\x61\x6d\x65\x2d\x73\x65\x70\x61\x72\x61\x74\x6f\x72\x73\x20\x74\x6f\x20\x73\x74\x72\x69\x70\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x3a\x20\x63\x6f\x6d\x6d\x6f\x6e\x29"
,
"\x20\x20\x2d\x77\x20\x4e\x55\x4d\x20\x20\x73\x70\x65\x63\x69\x66\x79\x20\x6d\x61\x78\x69\x6d\x75\x6d\x20\x77\x69\x64\x74\x68\x20\x6f\x66\x20\x74\x68\x65\x20\x6f\x75\x74\x70\x75\x74\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x3a\x20\x38\x30\x29"
,
"\x20\x20\x2d\x56\x20\x20\x20\x20\x20\x20\x70\x72\x69\x6e\x74\x73\x20\x74\x68\x65\x20\x76\x65\x72\x73\x69\x6f\x6e\x20\x6e\x75\x6d\x62\x65\x72"
};register unsigned z2d29194d43;for(z2d29194d43=(0x723+6394-0x201d);z2d29194d43<
sizeof(zde05b8b1b0)/sizeof(zde05b8b1b0[(0x22+6819-0x1ac5)]);z2d29194d43++)
fprintf(stderr,"\x25\x73" "\n",zde05b8b1b0[z2d29194d43]);exit(EXIT_FAILURE);}int
 main(int za82b547bcb,char*z6965940303[]){register int z2d29194d43;char version[
(0x428+1985-0xb99)];za862d19cbc=(0x664+266-0x71e);z99ec214447=!isatty(fileno(
stdout))&&isatty(fileno(stderr));while((z2d29194d43=getopt(za82b547bcb,
z6965940303,"\x63\x66\x3a\x6e\x3a\x70\x3a\x77\x3a\x56"))!=EOF){switch(
z2d29194d43){case((char)(0x1436+4890-0x26ed)):zb37c9d1346="\x23";break;case
((char)(0x1d8+6132-0x1966)):z388d3293ac=atoi(optarg);break;case
((char)(0x8c1+5528-0x1deb)):z1c0ab7cf0c=atoi(optarg);break;case
((char)(0x116+8133-0x206b)):z13f00839ad=atoi(optarg);break;case
((char)(0x1489+2870-0x1f48)):za862d19cbc=atoi(optarg);break;case
((char)(0x17e9+1240-0x1c6b)):if(!sscanf(zd904d243ce,
"\x25\x2a\x73\x20\x25\x2a\x73\x20\x25\x73",version))(void)strcpy(version,"\x3f")
;printf(
"\x64\x69\x66\x66\x73\x74\x61\x74\x20\x76\x65\x72\x73\x69\x6f\x6e\x20\x25\x73" "\n"
,version);exit(EXIT_SUCCESS);default:z31ca2050e2();}}if(optind<za82b547bcb){
while(optind<za82b547bcb){FILE*za2f057b639;char*name=z6965940303[optind++];
#ifdef zedbb9e305d
char*zcdbbd0e13c=z37634eac68(name);if(zcdbbd0e13c!=(0x320+4092-0x131c)){if((
za2f057b639=popen(zcdbbd0e13c,"\x72"))!=(0x12dc+679-0x1583)){if(z99ec214447){(
void)fprintf(stderr,"\x25\x73" "\n",name);(void)fflush(stderr);}z71e80df59d(
za2f057b639);(void)pclose(za2f057b639);free(zcdbbd0e13c);}}else
#endif
if((za2f057b639=fopen(name,"\x72"))!=(0xf70+3663-0x1dbf)){if(z99ec214447){(void)
fprintf(stderr,"\x25\x73" "\n",name);(void)fflush(stderr);}z71e80df59d(
za2f057b639);(void)fclose(za2f057b639);}else{z6aea0a920d(name);}}}else{
z71e80df59d(stdin);}z6d9013aa42();exit(EXIT_SUCCESS);}

See more C++ obfuscation samples and C++ obfuscation presets available in C++ Obfuscator.