]> arthur.barton.de Git - bup.git/commitdiff
rot13 the t/testfile* sample data files.
authorAvery Pennarun <apenwarr@gmail.com>
Mon, 6 Sep 2010 22:48:35 +0000 (15:48 -0700)
committerAvery Pennarun <apenwarr@gmail.com>
Mon, 6 Sep 2010 22:50:03 +0000 (15:50 -0700)
They were generated by catting bunches of bup source code together, which,
as it turns out, makes 'git grep' super annoying.  Let's rot13 them so
grepping doesn't do anything interesting but the other characteristics are
the same.

Signed-off-by: Avery Pennarun <apenwarr@gmail.com>
t/sampledata/y/testfile1
t/testfile1
t/testfile2

index afcd1f37ba621b8c453f61dd4e38a8cb40751ee4..31ee97900d92f636c55bbfdba7f00fb0174095eb 100644 (file)
-#!/usr/bin/env python
-from bup import options, drecurse
-from bup.helpers import *
+#!/hfe/ova/rai clguba
+sebz ohc vzcbeg bcgvbaf, qerphefr
+sebz ohc.urycref vzcbeg *
 
-optspec = """
-bup drecurse <path>
+bcgfcrp = """
+ohc qerphefr <cngu>
 --
-x,xdev,one-file-system   don't cross filesystem boundaries
-q,quiet  don't actually print filenames
-profile  run under the python profiler
+k,kqri,bar-svyr-flfgrz   qba'g pebff svyrflfgrz obhaqnevrf
+d,dhvrg  qba'g npghnyyl cevag svyranzrf
+cebsvyr  eha haqre gur clguba cebsvyre
 """
-o = options.Options('bup drecurse', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one filename expected")
-
-it = drecurse.recursive_dirlist(extra, opt.xdev)
-if opt.profile:
-    import cProfile
-    def do_it():
-        for i in it:
-            pass
-    cProfile.run('do_it()')
-else:
-    if opt.quiet:
-        for i in it:
-            pass
-    else:
-        for (name,st) in it:
-            print name
-
-if saved_errors:
-    log('WARNING: %d errors encountered.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, time, struct
-from bup import hashsplit, git, options, client
-from bup.helpers import *
-from subprocess import PIPE
-
-
-optspec = """
-bup split [-tcb] [-n name] [--bench] [filenames...]
+b = bcgvbaf.Bcgvbaf('ohc qerphefr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar svyranzr rkcrpgrq")
+
+vg = qerphefr.erphefvir_qveyvfg(rkgen, bcg.kqri)
+vs bcg.cebsvyr:
+    vzcbeg pCebsvyr
+    qrs qb_vg():
+        sbe v va vg:
+            cnff
+    pCebsvyr.eha('qb_vg()')
+ryfr:
+    vs bcg.dhvrg:
+        sbe v va vg:
+            cnff
+    ryfr:
+        sbe (anzr,fg) va vg:
+            cevag anzr
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr, fgehpg
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+sebz fhocebprff vzcbeg CVCR
+
+
+bcgfcrp = """
+ohc fcyvg [-gpo] [-a anzr] [--orapu] [svyranzrf...]
 --
-r,remote=  remote repository path
-b,blobs    output a series of blob ids
-t,tree     output a tree id
-c,commit   output a commit id
-n,name=    name of backup set to update (if any)
-N,noop     don't actually save the data anywhere
-q,quiet    don't print progress messages
-v,verbose  increase log output (can be used more than once)
-copy       just copy input to output, hashsplitting along the way
-bench      print benchmark timings to stderr
-max-pack-size=  maximum bytes in a single pack
-max-pack-objects=  maximum number of objects in a single pack
-fanout=  maximum number of blobs in a single tree
+e,erzbgr=  erzbgr ercbfvgbel cngu
+o,oybof    bhgchg n frevrf bs oybo vqf
+g,gerr     bhgchg n gerr vq
+p,pbzzvg   bhgchg n pbzzvg vq
+a,anzr=    anzr bs onpxhc frg gb hcqngr (vs nal)
+A,abbc     qba'g npghnyyl fnir gur qngn naljurer
+d,dhvrg    qba'g cevag cebterff zrffntrf
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
+pbcl       whfg pbcl vachg gb bhgchg, unfufcyvggvat nybat gur jnl
+orapu      cevag orapuznex gvzvatf gb fgqree
+znk-cnpx-fvmr=  znkvzhz olgrf va n fvatyr cnpx
+znk-cnpx-bowrpgf=  znkvzhz ahzore bs bowrpgf va n fvatyr cnpx
+snabhg=  znkvzhz ahzore bs oybof va n fvatyr gerr
 """
-o = options.Options('bup split', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-if not (opt.blobs or opt.tree or opt.commit or opt.name or
-        opt.noop or opt.copy):
-    o.fatal("use one or more of -b, -t, -c, -n, -N, --copy")
-if (opt.noop or opt.copy) and (opt.blobs or opt.tree or 
-                               opt.commit or opt.name):
-    o.fatal('-N is incompatible with -b, -t, -c, -n')
-
-if opt.verbose >= 2:
-    git.verbose = opt.verbose - 1
-    opt.bench = 1
-if opt.max_pack_size:
-    hashsplit.max_pack_size = parse_num(opt.max_pack_size)
-if opt.max_pack_objects:
-    hashsplit.max_pack_objects = parse_num(opt.max_pack_objects)
-if opt.fanout:
-    hashsplit.fanout = parse_num(opt.fanout)
-if opt.blobs:
-    hashsplit.fanout = 0
-
-is_reverse = os.environ.get('BUP_SERVER_REVERSE')
-if is_reverse and opt.remote:
-    o.fatal("don't use -r in reverse mode; it's automatic")
-start_time = time.time()
-
-refname = opt.name and 'refs/heads/%s' % opt.name or None
-if opt.noop or opt.copy:
-    cli = w = oldref = None
-elif opt.remote or is_reverse:
-    cli = client.Client(opt.remote)
-    oldref = refname and cli.read_ref(refname) or None
-    w = cli.new_packwriter()
-else:
-    cli = None
-    oldref = refname and git.read_ref(refname) or None
-    w = git.PackWriter()
-
-files = extra and (open(fn) for fn in extra) or [sys.stdin]
-if w:
-    shalist = hashsplit.split_to_shalist(w, files)
-    tree = w.new_tree(shalist)
-else:
-    last = 0
-    for (blob, bits) in hashsplit.hashsplit_iter(files):
-        hashsplit.total_split += len(blob)
-        if opt.copy:
-            sys.stdout.write(str(blob))
-        megs = hashsplit.total_split/1024/1024
-        if not opt.quiet and last != megs:
-            progress('%d Mbytes read\r' % megs)
-            last = megs
-    progress('%d Mbytes read, done.\n' % megs)
-
-if opt.verbose:
-    log('\n')
-if opt.blobs:
-    for (mode,name,bin) in shalist:
-        print bin.encode('hex')
-if opt.tree:
-    print tree.encode('hex')
-if opt.commit or opt.name:
-    msg = 'bup split\n\nGenerated by command:\n%r' % sys.argv
-    ref = opt.name and ('refs/heads/%s' % opt.name) or None
-    commit = w.new_commit(oldref, tree, msg)
-    if opt.commit:
-        print commit.encode('hex')
-
-if w:
-    w.close()  # must close before we can update the ref
+b = bcgvbaf.Bcgvbaf('ohc fcyvg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+vs abg (bcg.oybof be bcg.gerr be bcg.pbzzvg be bcg.anzr be
+        bcg.abbc be bcg.pbcl):
+    b.sngny("hfr bar be zber bs -o, -g, -p, -a, -A, --pbcl")
+vs (bcg.abbc be bcg.pbcl) naq (bcg.oybof be bcg.gerr be 
+                               bcg.pbzzvg be bcg.anzr):
+    b.sngny('-A vf vapbzcngvoyr jvgu -o, -g, -p, -a')
+
+vs bcg.ireobfr >= 2:
+    tvg.ireobfr = bcg.ireobfr - 1
+    bcg.orapu = 1
+vs bcg.znk_cnpx_fvmr:
+    unfufcyvg.znk_cnpx_fvmr = cnefr_ahz(bcg.znk_cnpx_fvmr)
+vs bcg.znk_cnpx_bowrpgf:
+    unfufcyvg.znk_cnpx_bowrpgf = cnefr_ahz(bcg.znk_cnpx_bowrpgf)
+vs bcg.snabhg:
+    unfufcyvg.snabhg = cnefr_ahz(bcg.snabhg)
+vs bcg.oybof:
+    unfufcyvg.snabhg = 0
+
+vf_erirefr = bf.raiveba.trg('OHC_FREIRE_ERIREFR')
+vs vf_erirefr naq bcg.erzbgr:
+    b.sngny("qba'g hfr -e va erirefr zbqr; vg'f nhgbzngvp")
+fgneg_gvzr = gvzr.gvzr()
+
+ersanzr = bcg.anzr naq 'ersf/urnqf/%f' % bcg.anzr be Abar
+vs bcg.abbc be bcg.pbcl:
+    pyv = j = byqers = Abar
+ryvs bcg.erzbgr be vf_erirefr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    byqers = ersanzr naq pyv.ernq_ers(ersanzr) be Abar
+    j = pyv.arj_cnpxjevgre()
+ryfr:
+    pyv = Abar
+    byqers = ersanzr naq tvg.ernq_ers(ersanzr) be Abar
+    j = tvg.CnpxJevgre()
+
+svyrf = rkgen naq (bcra(sa) sbe sa va rkgen) be [flf.fgqva]
+vs j:
+    funyvfg = unfufcyvg.fcyvg_gb_funyvfg(j, svyrf)
+    gerr = j.arj_gerr(funyvfg)
+ryfr:
+    ynfg = 0
+    sbe (oybo, ovgf) va unfufcyvg.unfufcyvg_vgre(svyrf):
+        unfufcyvg.gbgny_fcyvg += yra(oybo)
+        vs bcg.pbcl:
+            flf.fgqbhg.jevgr(fge(oybo))
+        zrtf = unfufcyvg.gbgny_fcyvg/1024/1024
+        vs abg bcg.dhvrg naq ynfg != zrtf:
+            cebterff('%q Zolgrf ernq\e' % zrtf)
+            ynfg = zrtf
+    cebterff('%q Zolgrf ernq, qbar.\a' % zrtf)
+
+vs bcg.ireobfr:
+    ybt('\a')
+vs bcg.oybof:
+    sbe (zbqr,anzr,ova) va funyvfg:
+        cevag ova.rapbqr('urk')
+vs bcg.gerr:
+    cevag gerr.rapbqr('urk')
+vs bcg.pbzzvg be bcg.anzr:
+    zft = 'ohc fcyvg\a\aTrarengrq ol pbzznaq:\a%e' % flf.neti
+    ers = bcg.anzr naq ('ersf/urnqf/%f' % bcg.anzr) be Abar
+    pbzzvg = j.arj_pbzzvg(byqers, gerr, zft)
+    vs bcg.pbzzvg:
+        cevag pbzzvg.rapbqr('urk')
+
+vs j:
+    j.pybfr()  # zhfg pybfr orsber jr pna hcqngr gur ers
         
-if opt.name:
-    if cli:
-        cli.update_ref(refname, commit, oldref)
-    else:
-        git.update_ref(refname, commit, oldref)
-
-if cli:
-    cli.close()
-
-secs = time.time() - start_time
-size = hashsplit.total_split
-if opt.bench:
-    log('\nbup: %.2fkbytes in %.2f secs = %.2f kbytes/sec\n'
-        % (size/1024., secs, size/1024./secs))
-#!/usr/bin/env python
-import sys, re, struct, mmap
-from bup import git, options
-from bup.helpers import *
-
-
-def s_from_bytes(bytes):
-    clist = [chr(b) for b in bytes]
-    return ''.join(clist)
-
-
-def report(count):
-    fields = ['VmSize', 'VmRSS', 'VmData', 'VmStk']
-    d = {}
-    for line in open('/proc/self/status').readlines():
-        l = re.split(r':\s*', line.strip(), 1)
-        d[l[0]] = l[1]
-    if count >= 0:
-        e1 = count
-        fields = [d[k] for k in fields]
-    else:
-        e1 = ''
-    print ('%9s  ' + ('%10s ' * len(fields))) % tuple([e1] + fields)
-    sys.stdout.flush()
-
-
-optspec = """
-bup memtest [-n elements] [-c cycles]
+vs bcg.anzr:
+    vs pyv:
+        pyv.hcqngr_ers(ersanzr, pbzzvg, byqers)
+    ryfr:
+        tvg.hcqngr_ers(ersanzr, pbzzvg, byqers)
+
+vs pyv:
+    pyv.pybfr()
+
+frpf = gvzr.gvzr() - fgneg_gvzr
+fvmr = unfufcyvg.gbgny_fcyvg
+vs bcg.orapu:
+    ybt('\aohc: %.2sxolgrf va %.2s frpf = %.2s xolgrf/frp\a'
+        % (fvmr/1024., frpf, fvmr/1024./frpf))
+#!/hfe/ova/rai clguba
+vzcbeg flf, er, fgehpg, zznc
+sebz ohc vzcbeg tvg, bcgvbaf
+sebz ohc.urycref vzcbeg *
+
+
+qrs f_sebz_olgrf(olgrf):
+    pyvfg = [pue(o) sbe o va olgrf]
+    erghea ''.wbva(pyvfg)
+
+
+qrs ercbeg(pbhag):
+    svryqf = ['IzFvmr', 'IzEFF', 'IzQngn', 'IzFgx']
+    q = {}
+    sbe yvar va bcra('/cebp/frys/fgnghf').ernqyvarf():
+        y = er.fcyvg(e':\f*', yvar.fgevc(), 1)
+        q[y[0]] = y[1]
+    vs pbhag >= 0:
+        r1 = pbhag
+        svryqf = [q[x] sbe x va svryqf]
+    ryfr:
+        r1 = ''
+    cevag ('%9f  ' + ('%10f ' * yra(svryqf))) % ghcyr([r1] + svryqf)
+    flf.fgqbhg.syhfu()
+
+
+bcgfcrp = """
+ohc zrzgrfg [-a ryrzragf] [-p plpyrf]
 --
-n,number=  number of objects per cycle
-c,cycles=  number of cycles to run
-ignore-midx  ignore .midx files, use only .idx files
+a,ahzore=  ahzore bs bowrpgf cre plpyr
+p,plpyrf=  ahzore bs plpyrf gb eha
+vtaber-zvqk  vtaber .zvqk svyrf, hfr bayl .vqk svyrf
 """
-o = options.Options('bup memtest', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal('no arguments expected')
-
-git.ignore_midx = opt.ignore_midx
-
-git.check_repo_or_die()
-m = git.PackIdxList(git.repo('objects/pack'))
-
-cycles = opt.cycles or 100
-number = opt.number or 10000
-
-report(-1)
-f = open('/dev/urandom')
-a = mmap.mmap(-1, 20)
-report(0)
-for c in xrange(cycles):
-    for n in xrange(number):
-        b = f.read(3)
-        if 0:
-            bytes = list(struct.unpack('!BBB', b)) + [0]*17
-            bytes[2] &= 0xf0
-            bin = struct.pack('!20s', s_from_bytes(bytes))
-        else:
-            a[0:2] = b[0:2]
-            a[2] = chr(ord(b[2]) & 0xf0)
-            bin = str(a[0:20])
-        #print bin.encode('hex')
-        m.exists(bin)
-    report((c+1)*number)
-#!/usr/bin/env python
-import sys, os, stat
-from bup import options, git, vfs
-from bup.helpers import *
-
-def print_node(text, n):
-    prefix = ''
-    if opt.hash:
-        prefix += "%s " % n.hash.encode('hex')
-    if stat.S_ISDIR(n.mode):
-        print '%s%s/' % (prefix, text)
-    elif stat.S_ISLNK(n.mode):
-        print '%s%s@' % (prefix, text)
-    else:
-        print '%s%s' % (prefix, text)
-
-
-optspec = """
-bup ls <dirs...>
+b = bcgvbaf.Bcgvbaf('ohc zrzgrfg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+tvg.vtaber_zvqk = bcg.vtaber_zvqk
+
+tvg.purpx_ercb_be_qvr()
+z = tvg.CnpxVqkYvfg(tvg.ercb('bowrpgf/cnpx'))
+
+plpyrf = bcg.plpyrf be 100
+ahzore = bcg.ahzore be 10000
+
+ercbeg(-1)
+s = bcra('/qri/henaqbz')
+n = zznc.zznc(-1, 20)
+ercbeg(0)
+sbe p va kenatr(plpyrf):
+    sbe a va kenatr(ahzore):
+        o = s.ernq(3)
+        vs 0:
+            olgrf = yvfg(fgehpg.hacnpx('!OOO', o)) + [0]*17
+            olgrf[2] &= 0ks0
+            ova = fgehpg.cnpx('!20f', f_sebz_olgrf(olgrf))
+        ryfr:
+            n[0:2] = o[0:2]
+            n[2] = pue(beq(o[2]) & 0ks0)
+            ova = fge(n[0:20])
+        #cevag ova.rapbqr('urk')
+        z.rkvfgf(ova)
+    ercbeg((p+1)*ahzore)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgng
+sebz ohc vzcbeg bcgvbaf, tvg, isf
+sebz ohc.urycref vzcbeg *
+
+qrs cevag_abqr(grkg, a):
+    cersvk = ''
+    vs bcg.unfu:
+        cersvk += "%f " % a.unfu.rapbqr('urk')
+    vs fgng.F_VFQVE(a.zbqr):
+        cevag '%f%f/' % (cersvk, grkg)
+    ryvs fgng.F_VFYAX(a.zbqr):
+        cevag '%f%f@' % (cersvk, grkg)
+    ryfr:
+        cevag '%f%f' % (cersvk, grkg)
+
+
+bcgfcrp = """
+ohc yf <qvef...>
 --
-s,hash   show hash for each file
+f,unfu   fubj unfu sbe rnpu svyr
 """
-o = options.Options('bup ls', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-top = vfs.RefList(None)
-
-if not extra:
-    extra = ['/']
-
-ret = 0
-for d in extra:
-    try:
-        n = top.lresolve(d)
-        if stat.S_ISDIR(n.mode):
-            for sub in n:
-                print_node(sub.name, sub)
-        else:
-            print_node(d, n)
-    except vfs.NodeError, e:
-        log('error: %s\n' % e)
-        ret = 1
-
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, os, re, stat, readline, fnmatch
-from bup import options, git, shquote, vfs
-from bup.helpers import *
-
-def node_name(text, n):
-    if stat.S_ISDIR(n.mode):
-        return '%s/' % text
-    elif stat.S_ISLNK(n.mode):
-        return '%s@' % text
-    else:
-        return '%s' % text
-
-
-def do_ls(path, n):
-    l = []
-    if stat.S_ISDIR(n.mode):
-        for sub in n:
-            l.append(node_name(sub.name, sub))
-    else:
-        l.append(node_name(path, n))
-    print columnate(l, '')
+b = bcgvbaf.Bcgvbaf('ohc yf', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+gbc = isf.ErsYvfg(Abar)
+
+vs abg rkgen:
+    rkgen = ['/']
+
+erg = 0
+sbe q va rkgen:
+    gel:
+        a = gbc.yerfbyir(q)
+        vs fgng.F_VFQVE(a.zbqr):
+            sbe fho va a:
+                cevag_abqr(fho.anzr, fho)
+        ryfr:
+            cevag_abqr(q, a)
+    rkprcg isf.AbqrReebe, r:
+        ybt('reebe: %f\a' % r)
+        erg = 1
+
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, er, fgng, ernqyvar, sazngpu
+sebz ohc vzcbeg bcgvbaf, tvg, fudhbgr, isf
+sebz ohc.urycref vzcbeg *
+
+qrs abqr_anzr(grkg, a):
+    vs fgng.F_VFQVE(a.zbqr):
+        erghea '%f/' % grkg
+    ryvs fgng.F_VFYAX(a.zbqr):
+        erghea '%f@' % grkg
+    ryfr:
+        erghea '%f' % grkg
+
+
+qrs qb_yf(cngu, a):
+    y = []
+    vs fgng.F_VFQVE(a.zbqr):
+        sbe fho va a:
+            y.nccraq(abqr_anzr(fho.anzr, fho))
+    ryfr:
+        y.nccraq(abqr_anzr(cngu, a))
+    cevag pbyhzangr(y, '')
     
 
-def write_to_file(inf, outf):
-    for blob in chunkyreader(inf):
-        outf.write(blob)
+qrs jevgr_gb_svyr(vas, bhgs):
+    sbe oybo va puhaxlernqre(vas):
+        bhgs.jevgr(oybo)
     
 
-def inputiter():
-    if os.isatty(sys.stdin.fileno()):
-        while 1:
-            try:
-                yield raw_input('bup> ')
-            except EOFError:
-                break
-    else:
-        for line in sys.stdin:
-            yield line
-
-
-def _completer_get_subs(line):
-    (qtype, lastword) = shquote.unfinished_word(line)
-    (dir,name) = os.path.split(lastword)
-    #log('\ncompleter: %r %r %r\n' % (qtype, lastword, text))
-    n = pwd.resolve(dir)
-    subs = list(filter(lambda x: x.name.startswith(name),
-                       n.subs()))
-    return (dir, name, qtype, lastword, subs)
-
-
-_last_line = None
-_last_res = None
-def completer(text, state):
-    global _last_line
-    global _last_res
-    try:
-        line = readline.get_line_buffer()[:readline.get_endidx()]
-        if _last_line != line:
-            _last_res = _completer_get_subs(line)
-            _last_line = line
-        (dir, name, qtype, lastword, subs) = _last_res
-        if state < len(subs):
-            sn = subs[state]
-            sn1 = sn.resolve('')  # deref symlinks
-            fullname = os.path.join(dir, sn.name)
-            if stat.S_ISDIR(sn1.mode):
-                ret = shquote.what_to_add(qtype, lastword, fullname+'/',
-                                          terminate=False)
-            else:
-                ret = shquote.what_to_add(qtype, lastword, fullname,
-                                          terminate=True) + ' '
-            return text + ret
-    except Exception, e:
-        log('\nerror in completion: %s\n' % e)
+qrs vachgvgre():
+    vs bf.vfnggl(flf.fgqva.svyrab()):
+        juvyr 1:
+            gel:
+                lvryq enj_vachg('ohc> ')
+            rkprcg RBSReebe:
+                oernx
+    ryfr:
+        sbe yvar va flf.fgqva:
+            lvryq yvar
+
+
+qrs _pbzcyrgre_trg_fhof(yvar):
+    (dglcr, ynfgjbeq) = fudhbgr.hasvavfurq_jbeq(yvar)
+    (qve,anzr) = bf.cngu.fcyvg(ynfgjbeq)
+    #ybt('\apbzcyrgre: %e %e %e\a' % (dglcr, ynfgjbeq, grkg))
+    a = cjq.erfbyir(qve)
+    fhof = yvfg(svygre(ynzoqn k: k.anzr.fgnegfjvgu(anzr),
+                       a.fhof()))
+    erghea (qve, anzr, dglcr, ynfgjbeq, fhof)
+
+
+_ynfg_yvar = Abar
+_ynfg_erf = Abar
+qrs pbzcyrgre(grkg, fgngr):
+    tybony _ynfg_yvar
+    tybony _ynfg_erf
+    gel:
+        yvar = ernqyvar.trg_yvar_ohssre()[:ernqyvar.trg_raqvqk()]
+        vs _ynfg_yvar != yvar:
+            _ynfg_erf = _pbzcyrgre_trg_fhof(yvar)
+            _ynfg_yvar = yvar
+        (qve, anzr, dglcr, ynfgjbeq, fhof) = _ynfg_erf
+        vs fgngr < yra(fhof):
+            fa = fhof[fgngr]
+            fa1 = fa.erfbyir('')  # qrers flzyvaxf
+            shyyanzr = bf.cngu.wbva(qve, fa.anzr)
+            vs fgng.F_VFQVE(fa1.zbqr):
+                erg = fudhbgr.jung_gb_nqq(dglcr, ynfgjbeq, shyyanzr+'/',
+                                          grezvangr=Snyfr)
+            ryfr:
+                erg = fudhbgr.jung_gb_nqq(dglcr, ynfgjbeq, shyyanzr,
+                                          grezvangr=Gehr) + ' '
+            erghea grkg + erg
+    rkprcg Rkprcgvba, r:
+        ybt('\areebe va pbzcyrgvba: %f\a' % r)
 
             
-optspec = """
-bup ftp
+bcgfcrp = """
+ohc sgc
 """
-o = options.Options('bup ftp', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-
-top = vfs.RefList(None)
-pwd = top
-
-if extra:
-    lines = extra
-else:
-    readline.set_completer_delims(' \t\n\r/')
-    readline.set_completer(completer)
-    readline.parse_and_bind("tab: complete")
-    lines = inputiter()
-
-for line in lines:
-    if not line.strip():
-        continue
-    words = [word for (wordstart,word) in shquote.quotesplit(line)]
-    cmd = words[0].lower()
-    #log('execute: %r %r\n' % (cmd, parm))
-    try:
-        if cmd == 'ls':
-            for parm in (words[1:] or ['.']):
-                do_ls(parm, pwd.resolve(parm))
-        elif cmd == 'cd':
-            for parm in words[1:]:
-                pwd = pwd.resolve(parm)
-        elif cmd == 'pwd':
-            print pwd.fullname()
-        elif cmd == 'cat':
-            for parm in words[1:]:
-                write_to_file(pwd.resolve(parm).open(), sys.stdout)
-        elif cmd == 'get':
-            if len(words) not in [2,3]:
-                raise Exception('Usage: get <filename> [localname]')
-            rname = words[1]
-            (dir,base) = os.path.split(rname)
-            lname = len(words)>2 and words[2] or base
-            inf = pwd.resolve(rname).open()
-            log('Saving %r\n' % lname)
-            write_to_file(inf, open(lname, 'wb'))
-        elif cmd == 'mget':
-            for parm in words[1:]:
-                (dir,base) = os.path.split(parm)
-                for n in pwd.resolve(dir).subs():
-                    if fnmatch.fnmatch(n.name, base):
-                        try:
-                            log('Saving %r\n' % n.name)
-                            inf = n.open()
-                            outf = open(n.name, 'wb')
-                            write_to_file(inf, outf)
-                            outf.close()
-                        except Exception, e:
-                            log('  error: %s\n' % e)
-        elif cmd == 'help' or cmd == '?':
-            log('Commands: ls cd pwd cat get mget help quit\n')
-        elif cmd == 'quit' or cmd == 'exit' or cmd == 'bye':
-            break
-        else:
-            raise Exception('no such command %r' % cmd)
-    except Exception, e:
-        log('error: %s\n' % e)
-        #raise
-#!/usr/bin/env python
-import sys, mmap
-from bup import options, _hashsplit
-from bup.helpers import *
-
-optspec = """
-bup random [-S seed] <numbytes>
+b = bcgvbaf.Bcgvbaf('ohc sgc', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+
+gbc = isf.ErsYvfg(Abar)
+cjq = gbc
+
+vs rkgen:
+    yvarf = rkgen
+ryfr:
+    ernqyvar.frg_pbzcyrgre_qryvzf(' \g\a\e/')
+    ernqyvar.frg_pbzcyrgre(pbzcyrgre)
+    ernqyvar.cnefr_naq_ovaq("gno: pbzcyrgr")
+    yvarf = vachgvgre()
+
+sbe yvar va yvarf:
+    vs abg yvar.fgevc():
+        pbagvahr
+    jbeqf = [jbeq sbe (jbeqfgneg,jbeq) va fudhbgr.dhbgrfcyvg(yvar)]
+    pzq = jbeqf[0].ybjre()
+    #ybt('rkrphgr: %e %e\a' % (pzq, cnez))
+    gel:
+        vs pzq == 'yf':
+            sbe cnez va (jbeqf[1:] be ['.']):
+                qb_yf(cnez, cjq.erfbyir(cnez))
+        ryvs pzq == 'pq':
+            sbe cnez va jbeqf[1:]:
+                cjq = cjq.erfbyir(cnez)
+        ryvs pzq == 'cjq':
+            cevag cjq.shyyanzr()
+        ryvs pzq == 'png':
+            sbe cnez va jbeqf[1:]:
+                jevgr_gb_svyr(cjq.erfbyir(cnez).bcra(), flf.fgqbhg)
+        ryvs pzq == 'trg':
+            vs yra(jbeqf) abg va [2,3]:
+                envfr Rkprcgvba('Hfntr: trg <svyranzr> [ybpnyanzr]')
+            eanzr = jbeqf[1]
+            (qve,onfr) = bf.cngu.fcyvg(eanzr)
+            yanzr = yra(jbeqf)>2 naq jbeqf[2] be onfr
+            vas = cjq.erfbyir(eanzr).bcra()
+            ybt('Fnivat %e\a' % yanzr)
+            jevgr_gb_svyr(vas, bcra(yanzr, 'jo'))
+        ryvs pzq == 'ztrg':
+            sbe cnez va jbeqf[1:]:
+                (qve,onfr) = bf.cngu.fcyvg(cnez)
+                sbe a va cjq.erfbyir(qve).fhof():
+                    vs sazngpu.sazngpu(a.anzr, onfr):
+                        gel:
+                            ybt('Fnivat %e\a' % a.anzr)
+                            vas = a.bcra()
+                            bhgs = bcra(a.anzr, 'jo')
+                            jevgr_gb_svyr(vas, bhgs)
+                            bhgs.pybfr()
+                        rkprcg Rkprcgvba, r:
+                            ybt('  reebe: %f\a' % r)
+        ryvs pzq == 'uryc' be pzq == '?':
+            ybt('Pbzznaqf: yf pq cjq png trg ztrg uryc dhvg\a')
+        ryvs pzq == 'dhvg' be pzq == 'rkvg' be pzq == 'olr':
+            oernx
+        ryfr:
+            envfr Rkprcgvba('ab fhpu pbzznaq %e' % pzq)
+    rkprcg Rkprcgvba, r:
+        ybt('reebe: %f\a' % r)
+        #envfr
+#!/hfe/ova/rai clguba
+vzcbeg flf, zznc
+sebz ohc vzcbeg bcgvbaf, _unfufcyvg
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+ohc enaqbz [-F frrq] <ahzolgrf>
 --
-S,seed=   optional random number seed (default 1)
-f,force   print random data to stdout even if it's a tty
+F,frrq=   bcgvbany enaqbz ahzore frrq (qrsnhyg 1)
+s,sbepr   cevag enaqbz qngn gb fgqbhg rira vs vg'f n ggl
 """
-o = options.Options('bup random', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one argument expected")
-
-total = parse_num(extra[0])
-
-if opt.force or (not os.isatty(1) and
-                 not atoi(os.environ.get('BUP_FORCE_TTY')) & 1):
-    _hashsplit.write_random(sys.stdout.fileno(), total, opt.seed or 0)
-else:
-    log('error: not writing binary data to a terminal. Use -f to force.\n')
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, os, glob
-from bup import options
-
-optspec = """
-bup help <command>
+b = bcgvbaf.Bcgvbaf('ohc enaqbz', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar nethzrag rkcrpgrq")
+
+gbgny = cnefr_ahz(rkgen[0])
+
+vs bcg.sbepr be (abg bf.vfnggl(1) naq
+                 abg ngbv(bf.raiveba.trg('OHC_SBEPR_GGL')) & 1):
+    _unfufcyvg.jevgr_enaqbz(flf.fgqbhg.svyrab(), gbgny, bcg.frrq be 0)
+ryfr:
+    ybt('reebe: abg jevgvat ovanel qngn gb n grezvany. Hfr -s gb sbepr.\a')
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, tybo
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc uryc <pbzznaq>
 """
-o = options.Options('bup help', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) == 0:
-    # the wrapper program provides the default usage string
-    os.execvp(os.environ['BUP_MAIN_EXE'], ['bup'])
-elif len(extra) == 1:
-    docname = (extra[0]=='bup' and 'bup' or ('bup-%s' % extra[0]))
-    exe = sys.argv[0]
-    (exepath, exefile) = os.path.split(exe)
-    manpath = os.path.join(exepath, '../Documentation/' + docname + '.[1-9]')
-    g = glob.glob(manpath)
-    if g:
-        os.execvp('man', ['man', '-l', g[0]])
-    else:
-        os.execvp('man', ['man', docname])
-else:
-    o.fatal("exactly one command name expected")
-#!/usr/bin/env python
-import sys, os, stat, errno, fuse, re, time, tempfile
-from bup import options, git, vfs
-from bup.helpers import *
-
-
-class Stat(fuse.Stat):
-    def __init__(self):
-        self.st_mode = 0
-        self.st_ino = 0
-        self.st_dev = 0
-        self.st_nlink = 0
-        self.st_uid = 0
-        self.st_gid = 0
-        self.st_size = 0
-        self.st_atime = 0
-        self.st_mtime = 0
-        self.st_ctime = 0
-        self.st_blocks = 0
-        self.st_blksize = 0
-        self.st_rdev = 0
-
-
-cache = {}
-def cache_get(top, path):
-    parts = path.split('/')
-    cache[('',)] = top
-    c = None
-    max = len(parts)
-    #log('cache: %r\n' % cache.keys())
-    for i in range(max):
-        pre = parts[:max-i]
-        #log('cache trying: %r\n' % pre)
-        c = cache.get(tuple(pre))
-        if c:
-            rest = parts[max-i:]
-            for r in rest:
-                #log('resolving %r from %r\n' % (r, c.fullname()))
-                c = c.lresolve(r)
-                key = tuple(pre + [r])
-                #log('saving: %r\n' % (key,))
-                cache[key] = c
-            break
-    assert(c)
-    return c
+b = bcgvbaf.Bcgvbaf('ohc uryc', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) == 0:
+    # gur jenccre cebtenz cebivqrf gur qrsnhyg hfntr fgevat
+    bf.rkrpic(bf.raiveba['OHC_ZNVA_RKR'], ['ohc'])
+ryvs yra(rkgen) == 1:
+    qbpanzr = (rkgen[0]=='ohc' naq 'ohc' be ('ohc-%f' % rkgen[0]))
+    rkr = flf.neti[0]
+    (rkrcngu, rkrsvyr) = bf.cngu.fcyvg(rkr)
+    znacngu = bf.cngu.wbva(rkrcngu, '../Qbphzragngvba/' + qbpanzr + '.[1-9]')
+    t = tybo.tybo(znacngu)
+    vs t:
+        bf.rkrpic('zna', ['zna', '-y', t[0]])
+    ryfr:
+        bf.rkrpic('zna', ['zna', qbpanzr])
+ryfr:
+    b.sngny("rknpgyl bar pbzznaq anzr rkcrpgrq")
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgng, reeab, shfr, er, gvzr, grzcsvyr
+sebz ohc vzcbeg bcgvbaf, tvg, isf
+sebz ohc.urycref vzcbeg *
+
+
+pynff Fgng(shfr.Fgng):
+    qrs __vavg__(frys):
+        frys.fg_zbqr = 0
+        frys.fg_vab = 0
+        frys.fg_qri = 0
+        frys.fg_ayvax = 0
+        frys.fg_hvq = 0
+        frys.fg_tvq = 0
+        frys.fg_fvmr = 0
+        frys.fg_ngvzr = 0
+        frys.fg_zgvzr = 0
+        frys.fg_pgvzr = 0
+        frys.fg_oybpxf = 0
+        frys.fg_oyxfvmr = 0
+        frys.fg_eqri = 0
+
+
+pnpur = {}
+qrs pnpur_trg(gbc, cngu):
+    cnegf = cngu.fcyvg('/')
+    pnpur[('',)] = gbc
+    p = Abar
+    znk = yra(cnegf)
+    #ybt('pnpur: %e\a' % pnpur.xrlf())
+    sbe v va enatr(znk):
+        cer = cnegf[:znk-v]
+        #ybt('pnpur gelvat: %e\a' % cer)
+        p = pnpur.trg(ghcyr(cer))
+        vs p:
+            erfg = cnegf[znk-v:]
+            sbe e va erfg:
+                #ybt('erfbyivat %e sebz %e\a' % (e, p.shyyanzr()))
+                p = p.yerfbyir(e)
+                xrl = ghcyr(cer + [e])
+                #ybt('fnivat: %e\a' % (xrl,))
+                pnpur[xrl] = p
+            oernx
+    nffreg(p)
+    erghea p
         
     
 
-class BupFs(fuse.Fuse):
-    def __init__(self, top):
-        fuse.Fuse.__init__(self)
-        self.top = top
+pynff OhcSf(shfr.Shfr):
+    qrs __vavg__(frys, gbc):
+        shfr.Shfr.__vavg__(frys)
+        frys.gbc = gbc
     
-    def getattr(self, path):
-        log('--getattr(%r)\n' % path)
-        try:
-            node = cache_get(self.top, path)
-            st = Stat()
-            st.st_mode = node.mode
-            st.st_nlink = node.nlinks()
-            st.st_size = node.size()
-            st.st_mtime = node.mtime
-            st.st_ctime = node.ctime
-            st.st_atime = node.atime
-            return st
-        except vfs.NoSuchFile:
-            return -errno.ENOENT
-
-    def readdir(self, path, offset):
-        log('--readdir(%r)\n' % path)
-        node = cache_get(self.top, path)
-        yield fuse.Direntry('.')
-        yield fuse.Direntry('..')
-        for sub in node.subs():
-            yield fuse.Direntry(sub.name)
-
-    def readlink(self, path):
-        log('--readlink(%r)\n' % path)
-        node = cache_get(self.top, path)
-        return node.readlink()
-
-    def open(self, path, flags):
-        log('--open(%r)\n' % path)
-        node = cache_get(self.top, path)
-        accmode = os.O_RDONLY | os.O_WRONLY | os.O_RDWR
-        if (flags & accmode) != os.O_RDONLY:
-            return -errno.EACCES
-        node.open()
-
-    def release(self, path, flags):
-        log('--release(%r)\n' % path)
-
-    def read(self, path, size, offset):
-        log('--read(%r)\n' % path)
-        n = cache_get(self.top, path)
-        o = n.open()
-        o.seek(offset)
-        return o.read(size)
-
-
-if not hasattr(fuse, '__version__'):
-    raise RuntimeError, "your fuse module is too old for fuse.__version__"
-fuse.fuse_python_api = (0, 2)
-
-
-optspec = """
-bup fuse [-d] [-f] <mountpoint>
+    qrs trgngge(frys, cngu):
+        ybt('--trgngge(%e)\a' % cngu)
+        gel:
+            abqr = pnpur_trg(frys.gbc, cngu)
+            fg = Fgng()
+            fg.fg_zbqr = abqr.zbqr
+            fg.fg_ayvax = abqr.ayvaxf()
+            fg.fg_fvmr = abqr.fvmr()
+            fg.fg_zgvzr = abqr.zgvzr
+            fg.fg_pgvzr = abqr.pgvzr
+            fg.fg_ngvzr = abqr.ngvzr
+            erghea fg
+        rkprcg isf.AbFhpuSvyr:
+            erghea -reeab.RABRAG
+
+    qrs ernqqve(frys, cngu, bssfrg):
+        ybt('--ernqqve(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        lvryq shfr.Qveragel('.')
+        lvryq shfr.Qveragel('..')
+        sbe fho va abqr.fhof():
+            lvryq shfr.Qveragel(fho.anzr)
+
+    qrs ernqyvax(frys, cngu):
+        ybt('--ernqyvax(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        erghea abqr.ernqyvax()
+
+    qrs bcra(frys, cngu, syntf):
+        ybt('--bcra(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        nppzbqr = bf.B_EQBAYL | bf.B_JEBAYL | bf.B_EQJE
+        vs (syntf & nppzbqr) != bf.B_EQBAYL:
+            erghea -reeab.RNPPRF
+        abqr.bcra()
+
+    qrs eryrnfr(frys, cngu, syntf):
+        ybt('--eryrnfr(%e)\a' % cngu)
+
+    qrs ernq(frys, cngu, fvmr, bssfrg):
+        ybt('--ernq(%e)\a' % cngu)
+        a = pnpur_trg(frys.gbc, cngu)
+        b = a.bcra()
+        b.frrx(bssfrg)
+        erghea b.ernq(fvmr)
+
+
+vs abg unfngge(shfr, '__irefvba__'):
+    envfr EhagvzrReebe, "lbhe shfr zbqhyr vf gbb byq sbe shfr.__irefvba__"
+shfr.shfr_clguba_ncv = (0, 2)
+
+
+bcgfcrp = """
+ohc shfr [-q] [-s] <zbhagcbvag>
 --
-d,debug   increase debug level
-f,foreground  run in foreground
+q,qroht   vapernfr qroht yriry
+s,sbertebhaq  eha va sbertebhaq
 """
-o = options.Options('bup fuse', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one argument expected")
-
-git.check_repo_or_die()
-top = vfs.RefList(None)
-f = BupFs(top)
-f.fuse_args.mountpoint = extra[0]
-if opt.debug:
-    f.fuse_args.add('debug')
-if opt.foreground:
-    f.fuse_args.setmod('foreground')
-print f.multithreaded
-f.multithreaded = False
-
-f.main()
-#!/usr/bin/env python
-from bup import git, options, client
-from bup.helpers import *
-
-optspec = """
-[BUP_DIR=...] bup init [-r host:path]
+b = bcgvbaf.Bcgvbaf('ohc shfr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar nethzrag rkcrpgrq")
+
+tvg.purpx_ercb_be_qvr()
+gbc = isf.ErsYvfg(Abar)
+s = OhcSf(gbc)
+s.shfr_netf.zbhagcbvag = rkgen[0]
+vs bcg.qroht:
+    s.shfr_netf.nqq('qroht')
+vs bcg.sbertebhaq:
+    s.shfr_netf.frgzbq('sbertebhaq')
+cevag s.zhygvguernqrq
+s.zhygvguernqrq = Snyfr
+
+s.znva()
+#!/hfe/ova/rai clguba
+sebz ohc vzcbeg tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+[OHC_QVE=...] ohc vavg [-e ubfg:cngu]
 --
-r,remote=  remote repository path
+e,erzbgr=  erzbgr ercbfvgbel cngu
 """
-o = options.Options('bup init', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-
-if opt.remote:
-    git.init_repo()  # local repo
-    git.check_repo_or_die()
-    cli = client.Client(opt.remote, create=True)
-    cli.close()
-else:
-    git.init_repo()
-#!/usr/bin/env python
-import sys, math, struct, glob
-from bup import options, git
-from bup.helpers import *
-
-PAGE_SIZE=4096
-SHA_PER_PAGE=PAGE_SIZE/200.
-
-
-def merge(idxlist, bits, table):
-    count = 0
-    for e in git.idxmerge(idxlist):
-        count += 1
-        prefix = git.extract_bits(e, bits)
-        table[prefix] = count
-        yield e
-
-
-def do_midx(outdir, outfilename, infilenames):
-    if not outfilename:
-        assert(outdir)
-        sum = Sha1('\0'.join(infilenames)).hexdigest()
-        outfilename = '%s/midx-%s.midx' % (outdir, sum)
+b = bcgvbaf.Bcgvbaf('ohc vavg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+
+vs bcg.erzbgr:
+    tvg.vavg_ercb()  # ybpny ercb
+    tvg.purpx_ercb_be_qvr()
+    pyv = pyvrag.Pyvrag(bcg.erzbgr, perngr=Gehr)
+    pyv.pybfr()
+ryfr:
+    tvg.vavg_ercb()
+#!/hfe/ova/rai clguba
+vzcbeg flf, zngu, fgehpg, tybo
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+CNTR_FVMR=4096
+FUN_CRE_CNTR=CNTR_FVMR/200.
+
+
+qrs zretr(vqkyvfg, ovgf, gnoyr):
+    pbhag = 0
+    sbe r va tvg.vqkzretr(vqkyvfg):
+        pbhag += 1
+        cersvk = tvg.rkgenpg_ovgf(r, ovgf)
+        gnoyr[cersvk] = pbhag
+        lvryq r
+
+
+qrs qb_zvqk(bhgqve, bhgsvyranzr, vasvyranzrf):
+    vs abg bhgsvyranzr:
+        nffreg(bhgqve)
+        fhz = Fun1('\0'.wbva(vasvyranzrf)).urkqvtrfg()
+        bhgsvyranzr = '%f/zvqk-%f.zvqk' % (bhgqve, fhz)
     
-    inp = []
-    total = 0
-    for name in infilenames:
-        ix = git.PackIdx(name)
-        inp.append(ix)
-        total += len(ix)
-
-    log('Merging %d indexes (%d objects).\n' % (len(infilenames), total))
-    if (not opt.force and (total < 1024 and len(infilenames) < 3)) \
-       or (opt.force and not total):
-        log('midx: nothing to do.\n')
-        return
-
-    pages = int(total/SHA_PER_PAGE) or 1
-    bits = int(math.ceil(math.log(pages, 2)))
-    entries = 2**bits
-    log('Table size: %d (%d bits)\n' % (entries*4, bits))
+    vac = []
+    gbgny = 0
+    sbe anzr va vasvyranzrf:
+        vk = tvg.CnpxVqk(anzr)
+        vac.nccraq(vk)
+        gbgny += yra(vk)
+
+    ybt('Zretvat %q vaqrkrf (%q bowrpgf).\a' % (yra(vasvyranzrf), gbgny))
+    vs (abg bcg.sbepr naq (gbgny < 1024 naq yra(vasvyranzrf) < 3)) \
+       be (bcg.sbepr naq abg gbgny):
+        ybt('zvqk: abguvat gb qb.\a')
+        erghea
+
+    cntrf = vag(gbgny/FUN_CRE_CNTR) be 1
+    ovgf = vag(zngu.prvy(zngu.ybt(cntrf, 2)))
+    ragevrf = 2**ovgf
+    ybt('Gnoyr fvmr: %q (%q ovgf)\a' % (ragevrf*4, ovgf))
     
-    table = [0]*entries
-
-    try:
-        os.unlink(outfilename)
-    except OSError:
-        pass
-    f = open(outfilename + '.tmp', 'w+')
-    f.write('MIDX\0\0\0\2')
-    f.write(struct.pack('!I', bits))
-    assert(f.tell() == 12)
-    f.write('\0'*4*entries)
+    gnoyr = [0]*ragevrf
+
+    gel:
+        bf.hayvax(bhgsvyranzr)
+    rkprcg BFReebe:
+        cnff
+    s = bcra(bhgsvyranzr + '.gzc', 'j+')
+    s.jevgr('ZVQK\0\0\0\2')
+    s.jevgr(fgehpg.cnpx('!V', ovgf))
+    nffreg(s.gryy() == 12)
+    s.jevgr('\0'*4*ragevrf)
     
-    for e in merge(inp, bits, table):
-        f.write(e)
+    sbe r va zretr(vac, ovgf, gnoyr):
+        s.jevgr(r)
         
-    f.write('\0'.join(os.path.basename(p) for p in infilenames))
-
-    f.seek(12)
-    f.write(struct.pack('!%dI' % entries, *table))
-    f.close()
-    os.rename(outfilename + '.tmp', outfilename)
-
-    # this is just for testing
-    if 0:
-        p = git.PackMidx(outfilename)
-        assert(len(p.idxnames) == len(infilenames))
-        print p.idxnames
-        assert(len(p) == total)
-        pi = iter(p)
-        for i in merge(inp, total, bits, table):
-            assert(i == pi.next())
-            assert(p.exists(i))
-
-    print outfilename
-
-optspec = """
-bup midx [options...] <idxnames...>
+    s.jevgr('\0'.wbva(bf.cngu.onfranzr(c) sbe c va vasvyranzrf))
+
+    s.frrx(12)
+    s.jevgr(fgehpg.cnpx('!%qV' % ragevrf, *gnoyr))
+    s.pybfr()
+    bf.eranzr(bhgsvyranzr + '.gzc', bhgsvyranzr)
+
+    # guvf vf whfg sbe grfgvat
+    vs 0:
+        c = tvg.CnpxZvqk(bhgsvyranzr)
+        nffreg(yra(c.vqkanzrf) == yra(vasvyranzrf))
+        cevag c.vqkanzrf
+        nffreg(yra(c) == gbgny)
+        cv = vgre(c)
+        sbe v va zretr(vac, gbgny, ovgf, gnoyr):
+            nffreg(v == cv.arkg())
+            nffreg(c.rkvfgf(v))
+
+    cevag bhgsvyranzr
+
+bcgfcrp = """
+ohc zvqk [bcgvbaf...] <vqkanzrf...>
 --
-o,output=  output midx filename (default: auto-generated)
-a,auto     automatically create .midx from any unindexed .idx files
-f,force    automatically create .midx from *all* .idx files
+b,bhgchg=  bhgchg zvqk svyranzr (qrsnhyg: nhgb-trarengrq)
+n,nhgb     nhgbzngvpnyyl perngr .zvqk sebz nal havaqrkrq .vqk svyrf
+s,sbepr    nhgbzngvpnyyl perngr .zvqk sebz *nyy* .vqk svyrf
 """
-o = options.Options('bup midx', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra and (opt.auto or opt.force):
-    o.fatal("you can't use -f/-a and also provide filenames")
-
-git.check_repo_or_die()
-
-if extra:
-    do_midx(git.repo('objects/pack'), opt.output, extra)
-elif opt.auto or opt.force:
-    paths = [git.repo('objects/pack')]
-    paths += glob.glob(git.repo('index-cache/*/.'))
-    for path in paths:
-        log('midx: scanning %s\n' % path)
-        if opt.force:
-            do_midx(path, opt.output, glob.glob('%s/*.idx' % path))
-        elif opt.auto:
-            m = git.PackIdxList(path)
-            needed = {}
-            for pack in m.packs:  # only .idx files without a .midx are open
-                if pack.name.endswith('.idx'):
-                    needed[pack.name] = 1
-            del m
-            do_midx(path, opt.output, needed.keys())
-        log('\n')
-else:
-    o.fatal("you must use -f or -a or provide input filenames")
-#!/usr/bin/env python
-import sys, os, random
-from bup import options
-from bup.helpers import *
-
-
-def randblock(n):
-    l = []
-    for i in xrange(n):
-        l.append(chr(random.randrange(0,256)))
-    return ''.join(l)
-
-
-optspec = """
-bup damage [-n count] [-s maxsize] [-S seed] <filenames...>
+b = bcgvbaf.Bcgvbaf('ohc zvqk', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen naq (bcg.nhgb be bcg.sbepr):
+    b.sngny("lbh pna'g hfr -s/-n naq nyfb cebivqr svyranzrf")
+
+tvg.purpx_ercb_be_qvr()
+
+vs rkgen:
+    qb_zvqk(tvg.ercb('bowrpgf/cnpx'), bcg.bhgchg, rkgen)
+ryvs bcg.nhgb be bcg.sbepr:
+    cnguf = [tvg.ercb('bowrpgf/cnpx')]
+    cnguf += tybo.tybo(tvg.ercb('vaqrk-pnpur/*/.'))
+    sbe cngu va cnguf:
+        ybt('zvqk: fpnaavat %f\a' % cngu)
+        vs bcg.sbepr:
+            qb_zvqk(cngu, bcg.bhgchg, tybo.tybo('%f/*.vqk' % cngu))
+        ryvs bcg.nhgb:
+            z = tvg.CnpxVqkYvfg(cngu)
+            arrqrq = {}
+            sbe cnpx va z.cnpxf:  # bayl .vqk svyrf jvgubhg n .zvqk ner bcra
+                vs cnpx.anzr.raqfjvgu('.vqk'):
+                    arrqrq[cnpx.anzr] = 1
+            qry z
+            qb_zvqk(cngu, bcg.bhgchg, arrqrq.xrlf())
+        ybt('\a')
+ryfr:
+    b.sngny("lbh zhfg hfr -s be -n be cebivqr vachg svyranzrf")
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, enaqbz
+sebz ohc vzcbeg bcgvbaf
+sebz ohc.urycref vzcbeg *
+
+
+qrs enaqoybpx(a):
+    y = []
+    sbe v va kenatr(a):
+        y.nccraq(pue(enaqbz.enaqenatr(0,256)))
+    erghea ''.wbva(y)
+
+
+bcgfcrp = """
+ohc qnzntr [-a pbhag] [-f znkfvmr] [-F frrq] <svyranzrf...>
 --
-   WARNING: THIS COMMAND IS EXTREMELY DANGEROUS
-n,num=   number of blocks to damage
-s,size=  maximum size of each damaged block
-percent= maximum size of each damaged block (as a percent of entire file)
-equal    spread damage evenly throughout the file
-S,seed=  random number seed (for repeatable tests)
+   JNEAVAT: GUVF PBZZNAQ VF RKGERZRYL QNATREBHF
+a,ahz=   ahzore bs oybpxf gb qnzntr
+f,fvmr=  znkvzhz fvmr bs rnpu qnzntrq oybpx
+creprag= znkvzhz fvmr bs rnpu qnzntrq oybpx (nf n creprag bs ragver svyr)
+rdhny    fcernq qnzntr rirayl guebhtubhg gur svyr
+F,frrq=  enaqbz ahzore frrq (sbe ercrngnoyr grfgf)
 """
-o = options.Options('bup damage', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if not extra:
-    o.fatal('filenames expected')
-
-if opt.seed != None:
-    random.seed(opt.seed)
-
-for name in extra:
-    log('Damaging "%s"...\n' % name)
-    f = open(name, 'r+b')
-    st = os.fstat(f.fileno())
-    size = st.st_size
-    if opt.percent or opt.size:
-        ms1 = int(float(opt.percent or 0)/100.0*size) or size
-        ms2 = opt.size or size
-        maxsize = min(ms1, ms2)
-    else:
-        maxsize = 1
-    chunks = opt.num or 10
-    chunksize = size/chunks
-    for r in range(chunks):
-        sz = random.randrange(1, maxsize+1)
-        if sz > size:
-            sz = size
-        if opt.equal:
-            ofs = r*chunksize
-        else:
-            ofs = random.randrange(0, size - sz + 1)
-        log('  %6d bytes at %d\n' % (sz, ofs))
-        f.seek(ofs)
-        f.write(randblock(sz))
-    f.close()
-#!/usr/bin/env python
-import sys, struct, mmap
-from bup import options, git
-from bup.helpers import *
-
-suspended_w = None
-
-
-def init_dir(conn, arg):
-    git.init_repo(arg)
-    log('bup server: bupdir initialized: %r\n' % git.repodir)
-    conn.ok()
-
-
-def set_dir(conn, arg):
-    git.check_repo_or_die(arg)
-    log('bup server: bupdir is %r\n' % git.repodir)
-    conn.ok()
+b = bcgvbaf.Bcgvbaf('ohc qnzntr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs abg rkgen:
+    b.sngny('svyranzrf rkcrpgrq')
+
+vs bcg.frrq != Abar:
+    enaqbz.frrq(bcg.frrq)
+
+sbe anzr va rkgen:
+    ybt('Qnzntvat "%f"...\a' % anzr)
+    s = bcra(anzr, 'e+o')
+    fg = bf.sfgng(s.svyrab())
+    fvmr = fg.fg_fvmr
+    vs bcg.creprag be bcg.fvmr:
+        zf1 = vag(sybng(bcg.creprag be 0)/100.0*fvmr) be fvmr
+        zf2 = bcg.fvmr be fvmr
+        znkfvmr = zva(zf1, zf2)
+    ryfr:
+        znkfvmr = 1
+    puhaxf = bcg.ahz be 10
+    puhaxfvmr = fvmr/puhaxf
+    sbe e va enatr(puhaxf):
+        fm = enaqbz.enaqenatr(1, znkfvmr+1)
+        vs fm > fvmr:
+            fm = fvmr
+        vs bcg.rdhny:
+            bsf = e*puhaxfvmr
+        ryfr:
+            bsf = enaqbz.enaqenatr(0, fvmr - fm + 1)
+        ybt('  %6q olgrf ng %q\a' % (fm, bsf))
+        s.frrx(bsf)
+        s.jevgr(enaqoybpx(fm))
+    s.pybfr()
+#!/hfe/ova/rai clguba
+vzcbeg flf, fgehpg, zznc
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+fhfcraqrq_j = Abar
+
+
+qrs vavg_qve(pbaa, net):
+    tvg.vavg_ercb(net)
+    ybt('ohc freire: ohcqve vavgvnyvmrq: %e\a' % tvg.ercbqve)
+    pbaa.bx()
+
+
+qrs frg_qve(pbaa, net):
+    tvg.purpx_ercb_be_qvr(net)
+    ybt('ohc freire: ohcqve vf %e\a' % tvg.ercbqve)
+    pbaa.bx()
 
     
-def list_indexes(conn, junk):
-    git.check_repo_or_die()
-    for f in os.listdir(git.repo('objects/pack')):
-        if f.endswith('.idx'):
-            conn.write('%s\n' % f)
-    conn.ok()
-
-
-def send_index(conn, name):
-    git.check_repo_or_die()
-    assert(name.find('/') < 0)
-    assert(name.endswith('.idx'))
-    idx = git.PackIdx(git.repo('objects/pack/%s' % name))
-    conn.write(struct.pack('!I', len(idx.map)))
-    conn.write(idx.map)
-    conn.ok()
-
-
-def receive_objects(conn, junk):
-    global suspended_w
-    git.check_repo_or_die()
-    suggested = {}
-    if suspended_w:
-        w = suspended_w
-        suspended_w = None
-    else:
-        w = git.PackWriter()
-    while 1:
-        ns = conn.read(4)
-        if not ns:
-            w.abort()
-            raise Exception('object read: expected length header, got EOF\n')
-        n = struct.unpack('!I', ns)[0]
-        #log('expecting %d bytes\n' % n)
-        if not n:
-            log('bup server: received %d object%s.\n
-                % (w.count, w.count!=1 and "s" or ''))
-            fullpath = w.close()
-            if fullpath:
-                (dir, name) = os.path.split(fullpath)
-                conn.write('%s.idx\n' % name)
-            conn.ok()
-            return
-        elif n == 0xffffffff:
-            log('bup server: receive-objects suspended.\n')
-            suspended_w = w
-            conn.ok()
-            return
+qrs yvfg_vaqrkrf(pbaa, whax):
+    tvg.purpx_ercb_be_qvr()
+    sbe s va bf.yvfgqve(tvg.ercb('bowrpgf/cnpx')):
+        vs s.raqfjvgu('.vqk'):
+            pbaa.jevgr('%f\a' % s)
+    pbaa.bx()
+
+
+qrs fraq_vaqrk(pbaa, anzr):
+    tvg.purpx_ercb_be_qvr()
+    nffreg(anzr.svaq('/') < 0)
+    nffreg(anzr.raqfjvgu('.vqk'))
+    vqk = tvg.CnpxVqk(tvg.ercb('bowrpgf/cnpx/%f' % anzr))
+    pbaa.jevgr(fgehpg.cnpx('!V', yra(vqk.znc)))
+    pbaa.jevgr(vqk.znc)
+    pbaa.bx()
+
+
+qrs erprvir_bowrpgf(pbaa, whax):
+    tybony fhfcraqrq_j
+    tvg.purpx_ercb_be_qvr()
+    fhttrfgrq = {}
+    vs fhfcraqrq_j:
+        j = fhfcraqrq_j
+        fhfcraqrq_j = Abar
+    ryfr:
+        j = tvg.CnpxJevgre()
+    juvyr 1:
+        af = pbaa.ernq(4)
+        vs abg af:
+            j.nobeg()
+            envfr Rkprcgvba('bowrpg ernq: rkcrpgrq yratgu urnqre, tbg RBS\a')
+        a = fgehpg.hacnpx('!V', af)[0]
+        #ybt('rkcrpgvat %q olgrf\a' % a)
+        vs abg a:
+            ybt('ohc freire: erprvirq %q bowrpg%f.\a
+                % (j.pbhag, j.pbhag!=1 naq "f" be ''))
+            shyycngu = j.pybfr()
+            vs shyycngu:
+                (qve, anzr) = bf.cngu.fcyvg(shyycngu)
+                pbaa.jevgr('%f.vqk\a' % anzr)
+            pbaa.bx()
+            erghea
+        ryvs a == 0kssssssss:
+            ybt('ohc freire: erprvir-bowrpgf fhfcraqrq.\a')
+            fhfcraqrq_j = j
+            pbaa.bx()
+            erghea
             
-        buf = conn.read(n)  # object sizes in bup are reasonably small
-        #log('read %d bytes\n' % n)
-        if len(buf) < n:
-            w.abort()
-            raise Exception('object read: expected %d bytes, got %d\n'
-                            % (n, len(buf)))
-        (type, content) = git._decode_packobj(buf)
-        sha = git.calc_hash(type, content)
-        oldpack = w.exists(sha)
-        # FIXME: we only suggest a single index per cycle, because the client
-        # is currently dumb to download more than one per cycle anyway.
-        # Actually we should fix the client, but this is a minor optimization
-        # on the server side.
-        if not suggested and \
-          oldpack and (oldpack == True or oldpack.endswith('.midx')):
-            # FIXME: we shouldn't really have to know about midx files
-            # at this layer.  But exists() on a midx doesn't return the
-            # packname (since it doesn't know)... probably we should just
-            # fix that deficiency of midx files eventually, although it'll
-            # make the files bigger.  This method is certainly not very
-            # efficient.
-            w.objcache.refresh(skip_midx = True)
-            oldpack = w.objcache.exists(sha)
-            log('new suggestion: %r\n' % oldpack)
-            assert(oldpack)
-            assert(oldpack != True)
-            assert(not oldpack.endswith('.midx'))
-            w.objcache.refresh(skip_midx = False)
-        if not suggested and oldpack:
-            assert(oldpack.endswith('.idx'))
-            (dir,name) = os.path.split(oldpack)
-            if not (name in suggested):
-                log("bup server: suggesting index %s\n" % name)
-                conn.write('index %s\n' % name)
-                suggested[name] = 1
-        else:
-            w._raw_write([buf])
-    # NOTREACHED
-
-
-def read_ref(conn, refname):
-    git.check_repo_or_die()
-    r = git.read_ref(refname)
-    conn.write('%s\n' % (r or '').encode('hex'))
-    conn.ok()
-
-
-def update_ref(conn, refname):
-    git.check_repo_or_die()
-    newval = conn.readline().strip()
-    oldval = conn.readline().strip()
-    git.update_ref(refname, newval.decode('hex'), oldval.decode('hex'))
-    conn.ok()
-
-
-def cat(conn, id):
-    git.check_repo_or_die()
-    try:
-        for blob in git.cat(id):
-            conn.write(struct.pack('!I', len(blob)))
-            conn.write(blob)
-    except KeyError, e:
-        log('server: error: %s\n' % e)
-        conn.write('\0\0\0\0')
-        conn.error(e)
-    else:
-        conn.write('\0\0\0\0')
-        conn.ok()
-
-
-optspec = """
-bup server
+        ohs = pbaa.ernq(a)  # bowrpg fvmrf va ohc ner ernfbanoyl fznyy
+        #ybt('ernq %q olgrf\a' % a)
+        vs yra(ohs) < a:
+            j.nobeg()
+            envfr Rkprcgvba('bowrpg ernq: rkcrpgrq %q olgrf, tbg %q\a'
+                            % (a, yra(ohs)))
+        (glcr, pbagrag) = tvg._qrpbqr_cnpxbow(ohs)
+        fun = tvg.pnyp_unfu(glcr, pbagrag)
+        byqcnpx = j.rkvfgf(fun)
+        # SVKZR: jr bayl fhttrfg n fvatyr vaqrk cre plpyr, orpnhfr gur pyvrag
+        # vf pheeragyl qhzo gb qbjaybnq zber guna bar cre plpyr naljnl.
+        # Npghnyyl jr fubhyq svk gur pyvrag, ohg guvf vf n zvabe bcgvzvmngvba
+        # ba gur freire fvqr.
+        vs abg fhttrfgrq naq \
+          byqcnpx naq (byqcnpx == Gehr be byqcnpx.raqfjvgu('.zvqk')):
+            # SVKZR: jr fubhyqa'g ernyyl unir gb xabj nobhg zvqk svyrf
+            # ng guvf ynlre.  Ohg rkvfgf() ba n zvqk qbrfa'g erghea gur
+            # cnpxanzr (fvapr vg qbrfa'g xabj)... cebonoyl jr fubhyq whfg
+            # svk gung qrsvpvrapl bs zvqk svyrf riraghnyyl, nygubhtu vg'yy
+            # znxr gur svyrf ovttre.  Guvf zrgubq vf pregnvayl abg irel
+            # rssvpvrag.
+            j.bowpnpur.erserfu(fxvc_zvqk = Gehr)
+            byqcnpx = j.bowpnpur.rkvfgf(fun)
+            ybt('arj fhttrfgvba: %e\a' % byqcnpx)
+            nffreg(byqcnpx)
+            nffreg(byqcnpx != Gehr)
+            nffreg(abg byqcnpx.raqfjvgu('.zvqk'))
+            j.bowpnpur.erserfu(fxvc_zvqk = Snyfr)
+        vs abg fhttrfgrq naq byqcnpx:
+            nffreg(byqcnpx.raqfjvgu('.vqk'))
+            (qve,anzr) = bf.cngu.fcyvg(byqcnpx)
+            vs abg (anzr va fhttrfgrq):
+                ybt("ohc freire: fhttrfgvat vaqrk %f\a" % anzr)
+                pbaa.jevgr('vaqrk %f\a' % anzr)
+                fhttrfgrq[anzr] = 1
+        ryfr:
+            j._enj_jevgr([ohs])
+    # ABGERNPURQ
+
+
+qrs ernq_ers(pbaa, ersanzr):
+    tvg.purpx_ercb_be_qvr()
+    e = tvg.ernq_ers(ersanzr)
+    pbaa.jevgr('%f\a' % (e be '').rapbqr('urk'))
+    pbaa.bx()
+
+
+qrs hcqngr_ers(pbaa, ersanzr):
+    tvg.purpx_ercb_be_qvr()
+    arjiny = pbaa.ernqyvar().fgevc()
+    byqiny = pbaa.ernqyvar().fgevc()
+    tvg.hcqngr_ers(ersanzr, arjiny.qrpbqr('urk'), byqiny.qrpbqr('urk'))
+    pbaa.bx()
+
+
+qrs png(pbaa, vq):
+    tvg.purpx_ercb_be_qvr()
+    gel:
+        sbe oybo va tvg.png(vq):
+            pbaa.jevgr(fgehpg.cnpx('!V', yra(oybo)))
+            pbaa.jevgr(oybo)
+    rkprcg XrlReebe, r:
+        ybt('freire: reebe: %f\a' % r)
+        pbaa.jevgr('\0\0\0\0')
+        pbaa.reebe(r)
+    ryfr:
+        pbaa.jevgr('\0\0\0\0')
+        pbaa.bx()
+
+
+bcgfcrp = """
+ohc freire
 """
-o = options.Options('bup server', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal('no arguments expected')
-
-log('bup server: reading from stdin.\n')
-
-commands = {
-    'init-dir': init_dir,
-    'set-dir': set_dir,
-    'list-indexes': list_indexes,
-    'send-index': send_index,
-    'receive-objects': receive_objects,
-    'read-ref': read_ref,
-    'update-ref': update_ref,
-    'cat': cat,
+b = bcgvbaf.Bcgvbaf('ohc freire', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+ybt('ohc freire: ernqvat sebz fgqva.\a')
+
+pbzznaqf = {
+    'vavg-qve': vavg_qve,
+    'frg-qve': frg_qve,
+    'yvfg-vaqrkrf': yvfg_vaqrkrf,
+    'fraq-vaqrk': fraq_vaqrk,
+    'erprvir-bowrpgf': erprvir_bowrpgf,
+    'ernq-ers': ernq_ers,
+    'hcqngr-ers': hcqngr_ers,
+    'png': png,
 }
 
-# FIXME: this protocol is totally lame and not at all future-proof.
-# (Especially since we abort completely as soon as *anything* bad happens)
-conn = Conn(sys.stdin, sys.stdout)
-lr = linereader(conn)
-for _line in lr:
-    line = _line.strip()
-    if not line:
-        continue
-    log('bup server: command: %r\n' % line)
-    words = line.split(' ', 1)
-    cmd = words[0]
-    rest = len(words)>1 and words[1] or ''
-    if cmd == 'quit':
-        break
-    else:
-        cmd = commands.get(cmd)
-        if cmd:
-            cmd(conn, rest)
-        else:
-            raise Exception('unknown server command: %r\n' % line)
-
-log('bup server: done\n')
-#!/usr/bin/env python
-import sys, time, struct
-from bup import hashsplit, git, options, client
-from bup.helpers import *
-from subprocess import PIPE
-
-
-optspec = """
-bup join [-r host:path] [refs or hashes...]
+# SVKZR: guvf cebgbpby vf gbgnyyl ynzr naq abg ng nyy shgher-cebbs.
+# (Rfcrpvnyyl fvapr jr nobeg pbzcyrgryl nf fbba nf *nalguvat* onq unccraf)
+pbaa = Pbaa(flf.fgqva, flf.fgqbhg)
+ye = yvarernqre(pbaa)
+sbe _yvar va ye:
+    yvar = _yvar.fgevc()
+    vs abg yvar:
+        pbagvahr
+    ybt('ohc freire: pbzznaq: %e\a' % yvar)
+    jbeqf = yvar.fcyvg(' ', 1)
+    pzq = jbeqf[0]
+    erfg = yra(jbeqf)>1 naq jbeqf[1] be ''
+    vs pzq == 'dhvg':
+        oernx
+    ryfr:
+        pzq = pbzznaqf.trg(pzq)
+        vs pzq:
+            pzq(pbaa, erfg)
+        ryfr:
+            envfr Rkprcgvba('haxabja freire pbzznaq: %e\a' % yvar)
+
+ybt('ohc freire: qbar\a')
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr, fgehpg
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+sebz fhocebprff vzcbeg CVCR
+
+
+bcgfcrp = """
+ohc wbva [-e ubfg:cngu] [ersf be unfurf...]
 --
-r,remote=  remote repository path
+e,erzbgr=  erzbgr ercbfvgbel cngu
 """
-o = options.Options('bup join', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
+b = bcgvbaf.Bcgvbaf('ohc wbva', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
 
-git.check_repo_or_die()
+tvg.purpx_ercb_be_qvr()
 
-if not extra:
-    extra = linereader(sys.stdin)
+vs abg rkgen:
+    rkgen = yvarernqre(flf.fgqva)
 
-ret = 0
+erg = 0
 
-if opt.remote:
-    cli = client.Client(opt.remote)
-    cat = cli.cat
-else:
-    cp = git.CatPipe()
-    cat = cp.join
+vs bcg.erzbgr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    png = pyv.png
+ryfr:
+    pc = tvg.PngCvcr()
+    png = pc.wbva
 
-for id in extra:
-    try:
-        for blob in cat(id):
-            sys.stdout.write(blob)
-    except KeyError, e:
-        sys.stdout.flush()
-        log('error: %s\n' % e)
-        ret = 1
+sbe vq va rkgen:
+    gel:
+        sbe oybo va png(vq):
+            flf.fgqbhg.jevgr(oybo)
+    rkprcg XrlReebe, r:
+        flf.fgqbhg.syhfu()
+        ybt('reebe: %f\a' % r)
+        erg = 1
 
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, re, errno, stat, time, math
-from bup import hashsplit, git, options, index, client
-from bup.helpers import *
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, er, reeab, fgng, gvzr, zngu
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, vaqrk, pyvrag
+sebz ohc.urycref vzcbeg *
 
 
-optspec = """
-bup save [-tc] [-n name] <filenames...>
+bcgfcrp = """
+ohc fnir [-gp] [-a anzr] <svyranzrf...>
 --
-r,remote=  remote repository path
-t,tree     output a tree id
-c,commit   output a commit id
-n,name=    name of backup set to update (if any)
-v,verbose  increase log output (can be used more than once)
-q,quiet    don't show progress meter
-smaller=   only back up files smaller than n bytes
+e,erzbgr=  erzbgr ercbfvgbel cngu
+g,gerr     bhgchg n gerr vq
+p,pbzzvg   bhgchg n pbzzvg vq
+a,anzr=    anzr bs onpxhc frg gb hcqngr (vs nal)
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
+d,dhvrg    qba'g fubj cebterff zrgre
+fznyyre=   bayl onpx hc svyrf fznyyre guna a olgrf
 """
-o = options.Options('bup save', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-if not (opt.tree or opt.commit or opt.name):
-    o.fatal("use one or more of -t, -c, -n")
-if not extra:
-    o.fatal("no filenames given")
-
-opt.progress = (istty and not opt.quiet)
-opt.smaller = parse_num(opt.smaller or 0)
-
-is_reverse = os.environ.get('BUP_SERVER_REVERSE')
-if is_reverse and opt.remote:
-    o.fatal("don't use -r in reverse mode; it's automatic")
-
-refname = opt.name and 'refs/heads/%s' % opt.name or None
-if opt.remote or is_reverse:
-    cli = client.Client(opt.remote)
-    oldref = refname and cli.read_ref(refname) or None
-    w = cli.new_packwriter()
-else:
-    cli = None
-    oldref = refname and git.read_ref(refname) or None
-    w = git.PackWriter()
-
-handle_ctrl_c()
-
-
-def eatslash(dir):
-    if dir.endswith('/'):
-        return dir[:-1]
-    else:
-        return dir
-
-
-parts = ['']
-shalists = [[]]
-
-def _push(part):
-    assert(part)
-    parts.append(part)
-    shalists.append([])
-
-def _pop(force_tree):
-    assert(len(parts) >= 1)
-    part = parts.pop()
-    shalist = shalists.pop()
-    tree = force_tree or w.new_tree(shalist)
-    if shalists:
-        shalists[-1].append(('40000', part, tree))
-    else:  # this was the toplevel, so put it back for sanity
-        shalists.append(shalist)
-    return tree
-
-lastremain = None
-def progress_report(n):
-    global count, subcount, lastremain
-    subcount += n
-    cc = count + subcount
-    pct = total and (cc*100.0/total) or 0
-    now = time.time()
-    elapsed = now - tstart
-    kps = elapsed and int(cc/1024./elapsed)
-    kps_frac = 10 ** int(math.log(kps+1, 10) - 1)
-    kps = int(kps/kps_frac)*kps_frac
-    if cc:
-        remain = elapsed*1.0/cc * (total-cc)
-    else:
-        remain = 0.0
-    if (lastremain and (remain > lastremain)
-          and ((remain - lastremain)/lastremain < 0.05)):
-        remain = lastremain
-    else:
-        lastremain = remain
-    hours = int(remain/60/60)
-    mins = int(remain/60 - hours*60)
-    secs = int(remain - hours*60*60 - mins*60)
-    if elapsed < 30:
-        remainstr = ''
-        kpsstr = ''
-    else:
-        kpsstr = '%dk/s' % kps
-        if hours:
-            remainstr = '%dh%dm' % (hours, mins)
-        elif mins:
-            remainstr = '%dm%d' % (mins, secs)
-        else:
-            remainstr = '%ds' % secs
-    progress('Saving: %.2f%% (%d/%dk, %d/%d files) %s %s\r'
-             % (pct, cc/1024, total/1024, fcount, ftotal,
-                remainstr, kpsstr))
-
-
-r = index.Reader(git.repo('bupindex'))
-
-def already_saved(ent):
-    return ent.is_valid() and w.exists(ent.sha) and ent.sha
-
-def wantrecurse_pre(ent):
-    return not already_saved(ent)
-
-def wantrecurse_during(ent):
-    return not already_saved(ent) or ent.sha_missing()
-
-total = ftotal = 0
-if opt.progress:
-    for (transname,ent) in r.filter(extra, wantrecurse=wantrecurse_pre):
-        if not (ftotal % 10024):
-            progress('Reading index: %d\r' % ftotal)
-        exists = ent.exists()
-        hashvalid = already_saved(ent)
-        ent.set_sha_missing(not hashvalid)
-        if not opt.smaller or ent.size < opt.smaller:
-            if exists and not hashvalid:
-                total += ent.size
-        ftotal += 1
-    progress('Reading index: %d, done.\n' % ftotal)
-    hashsplit.progress_callback = progress_report
-
-tstart = time.time()
-count = subcount = fcount = 0
-lastskip_name = None
-lastdir = ''
-for (transname,ent) in r.filter(extra, wantrecurse=wantrecurse_during):
-    (dir, file) = os.path.split(ent.name)
-    exists = (ent.flags & index.IX_EXISTS)
-    hashvalid = already_saved(ent)
-    wasmissing = ent.sha_missing()
-    oldsize = ent.size
-    if opt.verbose:
-        if not exists:
-            status = 'D'
-        elif not hashvalid:
-            if ent.sha == index.EMPTY_SHA:
-                status = 'A'
-            else:
-                status = 'M'
-        else:
-            status = ' '
-        if opt.verbose >= 2:
-            log('%s %-70s\n' % (status, ent.name))
-        elif not stat.S_ISDIR(ent.mode) and lastdir != dir:
-            if not lastdir.startswith(dir):
-                log('%s %-70s\n' % (status, os.path.join(dir, '')))
-            lastdir = dir
-
-    if opt.progress:
-        progress_report(0)
-    fcount += 1
+b = bcgvbaf.Bcgvbaf('ohc fnir', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+vs abg (bcg.gerr be bcg.pbzzvg be bcg.anzr):
+    b.sngny("hfr bar be zber bs -g, -p, -a")
+vs abg rkgen:
+    b.sngny("ab svyranzrf tvira")
+
+bcg.cebterff = (vfggl naq abg bcg.dhvrg)
+bcg.fznyyre = cnefr_ahz(bcg.fznyyre be 0)
+
+vf_erirefr = bf.raiveba.trg('OHC_FREIRE_ERIREFR')
+vs vf_erirefr naq bcg.erzbgr:
+    b.sngny("qba'g hfr -e va erirefr zbqr; vg'f nhgbzngvp")
+
+ersanzr = bcg.anzr naq 'ersf/urnqf/%f' % bcg.anzr be Abar
+vs bcg.erzbgr be vf_erirefr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    byqers = ersanzr naq pyv.ernq_ers(ersanzr) be Abar
+    j = pyv.arj_cnpxjevgre()
+ryfr:
+    pyv = Abar
+    byqers = ersanzr naq tvg.ernq_ers(ersanzr) be Abar
+    j = tvg.CnpxJevgre()
+
+unaqyr_pgey_p()
+
+
+qrs rngfynfu(qve):
+    vs qve.raqfjvgu('/'):
+        erghea qve[:-1]
+    ryfr:
+        erghea qve
+
+
+cnegf = ['']
+funyvfgf = [[]]
+
+qrs _chfu(cneg):
+    nffreg(cneg)
+    cnegf.nccraq(cneg)
+    funyvfgf.nccraq([])
+
+qrs _cbc(sbepr_gerr):
+    nffreg(yra(cnegf) >= 1)
+    cneg = cnegf.cbc()
+    funyvfg = funyvfgf.cbc()
+    gerr = sbepr_gerr be j.arj_gerr(funyvfg)
+    vs funyvfgf:
+        funyvfgf[-1].nccraq(('40000', cneg, gerr))
+    ryfr:  # guvf jnf gur gbcyriry, fb chg vg onpx sbe fnavgl
+        funyvfgf.nccraq(funyvfg)
+    erghea gerr
+
+ynfgerznva = Abar
+qrs cebterff_ercbeg(a):
+    tybony pbhag, fhopbhag, ynfgerznva
+    fhopbhag += a
+    pp = pbhag + fhopbhag
+    cpg = gbgny naq (pp*100.0/gbgny) be 0
+    abj = gvzr.gvzr()
+    ryncfrq = abj - gfgneg
+    xcf = ryncfrq naq vag(pp/1024./ryncfrq)
+    xcf_senp = 10 ** vag(zngu.ybt(xcf+1, 10) - 1)
+    xcf = vag(xcf/xcf_senp)*xcf_senp
+    vs pp:
+        erznva = ryncfrq*1.0/pp * (gbgny-pp)
+    ryfr:
+        erznva = 0.0
+    vs (ynfgerznva naq (erznva > ynfgerznva)
+          naq ((erznva - ynfgerznva)/ynfgerznva < 0.05)):
+        erznva = ynfgerznva
+    ryfr:
+        ynfgerznva = erznva
+    ubhef = vag(erznva/60/60)
+    zvaf = vag(erznva/60 - ubhef*60)
+    frpf = vag(erznva - ubhef*60*60 - zvaf*60)
+    vs ryncfrq < 30:
+        erznvafge = ''
+        xcffge = ''
+    ryfr:
+        xcffge = '%qx/f' % xcf
+        vs ubhef:
+            erznvafge = '%qu%qz' % (ubhef, zvaf)
+        ryvs zvaf:
+            erznvafge = '%qz%q' % (zvaf, frpf)
+        ryfr:
+            erznvafge = '%qf' % frpf
+    cebterff('Fnivat: %.2s%% (%q/%qx, %q/%q svyrf) %f %f\e'
+             % (cpg, pp/1024, gbgny/1024, spbhag, sgbgny,
+                erznvafge, xcffge))
+
+
+e = vaqrk.Ernqre(tvg.ercb('ohcvaqrk'))
+
+qrs nyernql_fnirq(rag):
+    erghea rag.vf_inyvq() naq j.rkvfgf(rag.fun) naq rag.fun
+
+qrs jnagerphefr_cer(rag):
+    erghea abg nyernql_fnirq(rag)
+
+qrs jnagerphefr_qhevat(rag):
+    erghea abg nyernql_fnirq(rag) be rag.fun_zvffvat()
+
+gbgny = sgbgny = 0
+vs bcg.cebterff:
+    sbe (genafanzr,rag) va e.svygre(rkgen, jnagerphefr=jnagerphefr_cer):
+        vs abg (sgbgny % 10024):
+            cebterff('Ernqvat vaqrk: %q\e' % sgbgny)
+        rkvfgf = rag.rkvfgf()
+        unfuinyvq = nyernql_fnirq(rag)
+        rag.frg_fun_zvffvat(abg unfuinyvq)
+        vs abg bcg.fznyyre be rag.fvmr < bcg.fznyyre:
+            vs rkvfgf naq abg unfuinyvq:
+                gbgny += rag.fvmr
+        sgbgny += 1
+    cebterff('Ernqvat vaqrk: %q, qbar.\a' % sgbgny)
+    unfufcyvg.cebterff_pnyyonpx = cebterff_ercbeg
+
+gfgneg = gvzr.gvzr()
+pbhag = fhopbhag = spbhag = 0
+ynfgfxvc_anzr = Abar
+ynfgqve = ''
+sbe (genafanzr,rag) va e.svygre(rkgen, jnagerphefr=jnagerphefr_qhevat):
+    (qve, svyr) = bf.cngu.fcyvg(rag.anzr)
+    rkvfgf = (rag.syntf & vaqrk.VK_RKVFGF)
+    unfuinyvq = nyernql_fnirq(rag)
+    jnfzvffvat = rag.fun_zvffvat()
+    byqfvmr = rag.fvmr
+    vs bcg.ireobfr:
+        vs abg rkvfgf:
+            fgnghf = 'Q'
+        ryvs abg unfuinyvq:
+            vs rag.fun == vaqrk.RZCGL_FUN:
+                fgnghf = 'N'
+            ryfr:
+                fgnghf = 'Z'
+        ryfr:
+            fgnghf = ' '
+        vs bcg.ireobfr >= 2:
+            ybt('%f %-70f\a' % (fgnghf, rag.anzr))
+        ryvs abg fgng.F_VFQVE(rag.zbqr) naq ynfgqve != qve:
+            vs abg ynfgqve.fgnegfjvgu(qve):
+                ybt('%f %-70f\a' % (fgnghf, bf.cngu.wbva(qve, '')))
+            ynfgqve = qve
+
+    vs bcg.cebterff:
+        cebterff_ercbeg(0)
+    spbhag += 1
     
-    if not exists:
-        continue
-    if opt.smaller and ent.size >= opt.smaller:
-        if exists and not hashvalid:
-            add_error('skipping large file "%s"' % ent.name)
-            lastskip_name = ent.name
-        continue
-
-    assert(dir.startswith('/'))
-    dirp = dir.split('/')
-    while parts > dirp:
-        _pop(force_tree = None)
-    if dir != '/':
-        for part in dirp[len(parts):]:
-            _push(part)
-
-    if not file:
-        # no filename portion means this is a subdir.  But
-        # sub/parentdirectories already handled in the pop/push() part above.
-        oldtree = already_saved(ent) # may be None
-        newtree = _pop(force_tree = oldtree)
-        if not oldtree:
-            if lastskip_name and lastskip_name.startswith(ent.name):
-                ent.invalidate()
-            else:
-                ent.validate(040000, newtree)
-            ent.repack()
-        if exists and wasmissing:
-            count += oldsize
-        continue
-
-    # it's not a directory
-    id = None
-    if hashvalid:
-        mode = '%o' % ent.gitmode
-        id = ent.sha
-        shalists[-1].append((mode
-                             git.mangle_name(file, ent.mode, ent.gitmode),
-                             id))
-    else:
-        if stat.S_ISREG(ent.mode):
-            try:
-                f = hashsplit.open_noatime(ent.name)
-            except IOError, e:
-                add_error(e)
-                lastskip_name = ent.name
-            except OSError, e:
-                add_error(e)
-                lastskip_name = ent.name
-            else:
-                (mode, id) = hashsplit.split_to_blob_or_tree(w, [f])
-        else:
-            if stat.S_ISDIR(ent.mode):
-                assert(0)  # handled above
-            elif stat.S_ISLNK(ent.mode):
-                try:
-                    rl = os.readlink(ent.name)
-                except OSError, e:
-                    add_error(e)
-                    lastskip_name = ent.name
-                except IOError, e:
-                    add_error(e)
-                    lastskip_name = ent.name
-                else:
-                    (mode, id) = ('120000', w.new_blob(rl))
-            else:
-                add_error(Exception('skipping special file "%s"' % ent.name))
-                lastskip_name = ent.name
-        if id:
-            ent.validate(int(mode, 8), id)
-            ent.repack()
-            shalists[-1].append((mode,
-                                 git.mangle_name(file, ent.mode, ent.gitmode),
-                                 id))
-    if exists and wasmissing:
-        count += oldsize
-        subcount = 0
-
-
-if opt.progress:
-    pct = total and count*100.0/total or 100
-    progress('Saving: %.2f%% (%d/%dk, %d/%d files), done.    \n'
-             % (pct, count/1024, total/1024, fcount, ftotal))
-
-while len(parts) > 1:
-    _pop(force_tree = None)
-assert(len(shalists) == 1)
-tree = w.new_tree(shalists[-1])
-if opt.tree:
-    print tree.encode('hex')
-if opt.commit or opt.name:
-    msg = 'bup save\n\nGenerated by command:\n%r' % sys.argv
-    ref = opt.name and ('refs/heads/%s' % opt.name) or None
-    commit = w.new_commit(oldref, tree, msg)
-    if opt.commit:
-        print commit.encode('hex')
-
-w.close()  # must close before we can update the ref
+    vs abg rkvfgf:
+        pbagvahr
+    vs bcg.fznyyre naq rag.fvmr >= bcg.fznyyre:
+        vs rkvfgf naq abg unfuinyvq:
+            nqq_reebe('fxvccvat ynetr svyr "%f"' % rag.anzr)
+            ynfgfxvc_anzr = rag.anzr
+        pbagvahr
+
+    nffreg(qve.fgnegfjvgu('/'))
+    qvec = qve.fcyvg('/')
+    juvyr cnegf > qvec:
+        _cbc(sbepr_gerr = Abar)
+    vs qve != '/':
+        sbe cneg va qvec[yra(cnegf):]:
+            _chfu(cneg)
+
+    vs abg svyr:
+        # ab svyranzr cbegvba zrnaf guvf vf n fhoqve.  Ohg
+        # fho/cneragqverpgbevrf nyernql unaqyrq va gur cbc/chfu() cneg nobir.
+        byqgerr = nyernql_fnirq(rag) # znl or Abar
+        arjgerr = _cbc(sbepr_gerr = byqgerr)
+        vs abg byqgerr:
+            vs ynfgfxvc_anzr naq ynfgfxvc_anzr.fgnegfjvgu(rag.anzr):
+                rag.vainyvqngr()
+            ryfr:
+                rag.inyvqngr(040000, arjgerr)
+            rag.ercnpx()
+        vs rkvfgf naq jnfzvffvat:
+            pbhag += byqfvmr
+        pbagvahr
+
+    # vg'f abg n qverpgbel
+    vq = Abar
+    vs unfuinyvq:
+        zbqr = '%b' % rag.tvgzbqr
+        vq = rag.fun
+        funyvfgf[-1].nccraq((zbqr
+                             tvg.znatyr_anzr(svyr, rag.zbqr, rag.tvgzbqr),
+                             vq))
+    ryfr:
+        vs fgng.F_VFERT(rag.zbqr):
+            gel:
+                s = unfufcyvg.bcra_abngvzr(rag.anzr)
+            rkprcg VBReebe, r:
+                nqq_reebe(r)
+                ynfgfxvc_anzr = rag.anzr
+            rkprcg BFReebe, r:
+                nqq_reebe(r)
+                ynfgfxvc_anzr = rag.anzr
+            ryfr:
+                (zbqr, vq) = unfufcyvg.fcyvg_gb_oybo_be_gerr(j, [s])
+        ryfr:
+            vs fgng.F_VFQVE(rag.zbqr):
+                nffreg(0)  # unaqyrq nobir
+            ryvs fgng.F_VFYAX(rag.zbqr):
+                gel:
+                    ey = bf.ernqyvax(rag.anzr)
+                rkprcg BFReebe, r:
+                    nqq_reebe(r)
+                    ynfgfxvc_anzr = rag.anzr
+                rkprcg VBReebe, r:
+                    nqq_reebe(r)
+                    ynfgfxvc_anzr = rag.anzr
+                ryfr:
+                    (zbqr, vq) = ('120000', j.arj_oybo(ey))
+            ryfr:
+                nqq_reebe(Rkprcgvba('fxvccvat fcrpvny svyr "%f"' % rag.anzr))
+                ynfgfxvc_anzr = rag.anzr
+        vs vq:
+            rag.inyvqngr(vag(zbqr, 8), vq)
+            rag.ercnpx()
+            funyvfgf[-1].nccraq((zbqr,
+                                 tvg.znatyr_anzr(svyr, rag.zbqr, rag.tvgzbqr),
+                                 vq))
+    vs rkvfgf naq jnfzvffvat:
+        pbhag += byqfvmr
+        fhopbhag = 0
+
+
+vs bcg.cebterff:
+    cpg = gbgny naq pbhag*100.0/gbgny be 100
+    cebterff('Fnivat: %.2s%% (%q/%qx, %q/%q svyrf), qbar.    \a'
+             % (cpg, pbhag/1024, gbgny/1024, spbhag, sgbgny))
+
+juvyr yra(cnegf) > 1:
+    _cbc(sbepr_gerr = Abar)
+nffreg(yra(funyvfgf) == 1)
+gerr = j.arj_gerr(funyvfgf[-1])
+vs bcg.gerr:
+    cevag gerr.rapbqr('urk')
+vs bcg.pbzzvg be bcg.anzr:
+    zft = 'ohc fnir\a\aTrarengrq ol pbzznaq:\a%e' % flf.neti
+    ers = bcg.anzr naq ('ersf/urnqf/%f' % bcg.anzr) be Abar
+    pbzzvg = j.arj_pbzzvg(byqers, gerr, zft)
+    vs bcg.pbzzvg:
+        cevag pbzzvg.rapbqr('urk')
+
+j.pybfr()  # zhfg pybfr orsber jr pna hcqngr gur ers
         
-if opt.name:
-    if cli:
-        cli.update_ref(refname, commit, oldref)
-    else:
-        git.update_ref(refname, commit, oldref)
-
-if cli:
-    cli.close()
-
-if saved_errors:
-    log('WARNING: %d errors encountered while saving.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, time
-from bup import options
-
-optspec = """
-bup tick
+vs bcg.anzr:
+    vs pyv:
+        pyv.hcqngr_ers(ersanzr, pbzzvg, byqers)
+    ryfr:
+        tvg.hcqngr_ers(ersanzr, pbzzvg, byqers)
+
+vs pyv:
+    pyv.pybfr()
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq juvyr fnivat.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc gvpx
 """
-o = options.Options('bup tick', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-t = time.time()
-tleft = 1 - (t - int(t))
-time.sleep(tleft)
-#!/usr/bin/env python
-import os, sys, stat, time
-from bup import options, git, index, drecurse
-from bup.helpers import *
-
-
-def merge_indexes(out, r1, r2):
-    for e in index.MergeIter([r1, r2]):
-        # FIXME: shouldn't we remove deleted entries eventually?  When?
-        out.add_ixentry(e)
-
-
-class IterHelper:
-    def __init__(self, l):
-        self.i = iter(l)
-        self.cur = None
-        self.next()
-
-    def next(self):
-        try:
-            self.cur = self.i.next()
-        except StopIteration:
-            self.cur = None
-        return self.cur
-
-
-def check_index(reader):
-    try:
-        log('check: checking forward iteration...\n')
-        e = None
-        d = {}
-        for e in reader.forward_iter():
-            if e.children_n:
-                if opt.verbose:
-                    log('%08x+%-4d %r\n' % (e.children_ofs, e.children_n,
-                                            e.name))
-                assert(e.children_ofs)
-                assert(e.name.endswith('/'))
-                assert(not d.get(e.children_ofs))
-                d[e.children_ofs] = 1
-            if e.flags & index.IX_HASHVALID:
-                assert(e.sha != index.EMPTY_SHA)
-                assert(e.gitmode)
-        assert(not e or e.name == '/')  # last entry is *always* /
-        log('check: checking normal iteration...\n')
-        last = None
-        for e in reader:
-            if last:
-                assert(last > e.name)
-            last = e.name
-    except:
-        log('index error! at %r\n' % e)
-        raise
-    log('check: passed.\n')
-
-
-def update_index(top):
-    ri = index.Reader(indexfile)
-    wi = index.Writer(indexfile)
-    rig = IterHelper(ri.iter(name=top))
-    tstart = int(time.time())
-
-    hashgen = None
-    if opt.fake_valid:
-        def hashgen(name):
-            return (0100644, index.FAKE_SHA)
-
-    total = 0
-    for (path,pst) in drecurse.recursive_dirlist([top], xdev=opt.xdev):
-        if opt.verbose>=2 or (opt.verbose==1 and stat.S_ISDIR(pst.st_mode)):
-            sys.stdout.write('%s\n' % path)
-            sys.stdout.flush()
-            progress('Indexing: %d\r' % total)
-        elif not (total % 128):
-            progress('Indexing: %d\r' % total)
-        total += 1
-        while rig.cur and rig.cur.name > path:  # deleted paths
-            if rig.cur.exists():
-                rig.cur.set_deleted()
-                rig.cur.repack()
-            rig.next()
-        if rig.cur and rig.cur.name == path:    # paths that already existed
-            if pst:
-                rig.cur.from_stat(pst, tstart)
-            if not (rig.cur.flags & index.IX_HASHVALID):
-                if hashgen:
-                    (rig.cur.gitmode, rig.cur.sha) = hashgen(path)
-                    rig.cur.flags |= index.IX_HASHVALID
-            if opt.fake_invalid:
-                rig.cur.invalidate()
-            rig.cur.repack()
-            rig.next()
-        else:  # new paths
-            wi.add(path, pst, hashgen = hashgen)
-    progress('Indexing: %d, done.\n' % total)
+b = bcgvbaf.Bcgvbaf('ohc gvpx', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+g = gvzr.gvzr()
+gyrsg = 1 - (g - vag(g))
+gvzr.fyrrc(gyrsg)
+#!/hfe/ova/rai clguba
+vzcbeg bf, flf, fgng, gvzr
+sebz ohc vzcbeg bcgvbaf, tvg, vaqrk, qerphefr
+sebz ohc.urycref vzcbeg *
+
+
+qrs zretr_vaqrkrf(bhg, e1, e2):
+    sbe r va vaqrk.ZretrVgre([e1, e2]):
+        # SVKZR: fubhyqa'g jr erzbir qryrgrq ragevrf riraghnyyl?  Jura?
+        bhg.nqq_vkragel(r)
+
+
+pynff VgreUrycre:
+    qrs __vavg__(frys, y):
+        frys.v = vgre(y)
+        frys.phe = Abar
+        frys.arkg()
+
+    qrs arkg(frys):
+        gel:
+            frys.phe = frys.v.arkg()
+        rkprcg FgbcVgrengvba:
+            frys.phe = Abar
+        erghea frys.phe
+
+
+qrs purpx_vaqrk(ernqre):
+    gel:
+        ybt('purpx: purpxvat sbejneq vgrengvba...\a')
+        r = Abar
+        q = {}
+        sbe r va ernqre.sbejneq_vgre():
+            vs r.puvyqera_a:
+                vs bcg.ireobfr:
+                    ybt('%08k+%-4q %e\a' % (r.puvyqera_bsf, r.puvyqera_a,
+                                            r.anzr))
+                nffreg(r.puvyqera_bsf)
+                nffreg(r.anzr.raqfjvgu('/'))
+                nffreg(abg q.trg(r.puvyqera_bsf))
+                q[r.puvyqera_bsf] = 1
+            vs r.syntf & vaqrk.VK_UNFUINYVQ:
+                nffreg(r.fun != vaqrk.RZCGL_FUN)
+                nffreg(r.tvgzbqr)
+        nffreg(abg r be r.anzr == '/')  # ynfg ragel vf *nyjnlf* /
+        ybt('purpx: purpxvat abezny vgrengvba...\a')
+        ynfg = Abar
+        sbe r va ernqre:
+            vs ynfg:
+                nffreg(ynfg > r.anzr)
+            ynfg = r.anzr
+    rkprcg:
+        ybt('vaqrk reebe! ng %e\a' % r)
+        envfr
+    ybt('purpx: cnffrq.\a')
+
+
+qrs hcqngr_vaqrk(gbc):
+    ev = vaqrk.Ernqre(vaqrksvyr)
+    jv = vaqrk.Jevgre(vaqrksvyr)
+    evt = VgreUrycre(ev.vgre(anzr=gbc))
+    gfgneg = vag(gvzr.gvzr())
+
+    unfutra = Abar
+    vs bcg.snxr_inyvq:
+        qrs unfutra(anzr):
+            erghea (0100644, vaqrk.SNXR_FUN)
+
+    gbgny = 0
+    sbe (cngu,cfg) va qerphefr.erphefvir_qveyvfg([gbc], kqri=bcg.kqri):
+        vs bcg.ireobfr>=2 be (bcg.ireobfr==1 naq fgng.F_VFQVE(cfg.fg_zbqr)):
+            flf.fgqbhg.jevgr('%f\a' % cngu)
+            flf.fgqbhg.syhfu()
+            cebterff('Vaqrkvat: %q\e' % gbgny)
+        ryvs abg (gbgny % 128):
+            cebterff('Vaqrkvat: %q\e' % gbgny)
+        gbgny += 1
+        juvyr evt.phe naq evt.phe.anzr > cngu:  # qryrgrq cnguf
+            vs evt.phe.rkvfgf():
+                evt.phe.frg_qryrgrq()
+                evt.phe.ercnpx()
+            evt.arkg()
+        vs evt.phe naq evt.phe.anzr == cngu:    # cnguf gung nyernql rkvfgrq
+            vs cfg:
+                evt.phe.sebz_fgng(cfg, gfgneg)
+            vs abg (evt.phe.syntf & vaqrk.VK_UNFUINYVQ):
+                vs unfutra:
+                    (evt.phe.tvgzbqr, evt.phe.fun) = unfutra(cngu)
+                    evt.phe.syntf |= vaqrk.VK_UNFUINYVQ
+            vs bcg.snxr_vainyvq:
+                evt.phe.vainyvqngr()
+            evt.phe.ercnpx()
+            evt.arkg()
+        ryfr:  # arj cnguf
+            jv.nqq(cngu, cfg, unfutra = unfutra)
+    cebterff('Vaqrkvat: %q, qbar.\a' % gbgny)
     
-    if ri.exists():
-        ri.save()
-        wi.flush()
-        if wi.count:
-            wr = wi.new_reader()
-            if opt.check:
-                log('check: before merging: oldfile\n')
-                check_index(ri)
-                log('check: before merging: newfile\n')
-                check_index(wr)
-            mi = index.Writer(indexfile)
-            merge_indexes(mi, ri, wr)
-            ri.close()
-            mi.close()
-            wr.close()
-        wi.abort()
-    else:
-        wi.close()
-
-
-optspec = """
-bup index <-p|m|u> [options...] <filenames...>
+    vs ev.rkvfgf():
+        ev.fnir()
+        jv.syhfu()
+        vs jv.pbhag:
+            je = jv.arj_ernqre()
+            vs bcg.purpx:
+                ybt('purpx: orsber zretvat: byqsvyr\a')
+                purpx_vaqrk(ev)
+                ybt('purpx: orsber zretvat: arjsvyr\a')
+                purpx_vaqrk(je)
+            zv = vaqrk.Jevgre(vaqrksvyr)
+            zretr_vaqrkrf(zv, ev, je)
+            ev.pybfr()
+            zv.pybfr()
+            je.pybfr()
+        jv.nobeg()
+    ryfr:
+        jv.pybfr()
+
+
+bcgfcrp = """
+ohc vaqrk <-c|z|h> [bcgvbaf...] <svyranzrf...>
 --
-p,print    print the index entries for the given names (also works with -u)
-m,modified print only added/deleted/modified files (implies -p)
-s,status   print each filename with a status char (A/M/D) (implies -p)
-H,hash     print the hash for each object next to its name (implies -p)
-l,long     print more information about each file
-u,update   (recursively) update the index entries for the given filenames
-x,xdev,one-file-system  don't cross filesystem boundaries
-fake-valid mark all index entries as up-to-date even if they aren't
-fake-invalid mark all index entries as invalid
-check      carefully check index file integrity
-f,indexfile=  the name of the index file (default 'index')
-v,verbose  increase log output (can be used more than once)
+c,cevag    cevag gur vaqrk ragevrf sbe gur tvira anzrf (nyfb jbexf jvgu -h)
+z,zbqvsvrq cevag bayl nqqrq/qryrgrq/zbqvsvrq svyrf (vzcyvrf -c)
+f,fgnghf   cevag rnpu svyranzr jvgu n fgnghf pune (N/Z/Q) (vzcyvrf -c)
+U,unfu     cevag gur unfu sbe rnpu bowrpg arkg gb vgf anzr (vzcyvrf -c)
+y,ybat     cevag zber vasbezngvba nobhg rnpu svyr
+h,hcqngr   (erphefviryl) hcqngr gur vaqrk ragevrf sbe gur tvira svyranzrf
+k,kqri,bar-svyr-flfgrz  qba'g pebff svyrflfgrz obhaqnevrf
+snxr-inyvq znex nyy vaqrk ragevrf nf hc-gb-qngr rira vs gurl nera'g
+snxr-vainyvq znex nyy vaqrk ragevrf nf vainyvq
+purpx      pnershyyl purpx vaqrk svyr vagrtevgl
+s,vaqrksvyr=  gur anzr bs gur vaqrk svyr (qrsnhyg 'vaqrk')
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
 """
-o = options.Options('bup index', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if not (opt.modified or opt['print'] or opt.status or opt.update or opt.check):
-    o.fatal('supply one or more of -p, -s, -m, -u, or --check')
-if (opt.fake_valid or opt.fake_invalid) and not opt.update:
-    o.fatal('--fake-{in,}valid are meaningless without -u')
-if opt.fake_valid and opt.fake_invalid:
-    o.fatal('--fake-valid is incompatible with --fake-invalid')
-
-git.check_repo_or_die()
-indexfile = opt.indexfile or git.repo('bupindex')
-
-handle_ctrl_c()
-
-if opt.check:
-    log('check: starting initial check.\n')
-    check_index(index.Reader(indexfile))
-
-paths = index.reduce_paths(extra)
-
-if opt.update:
-    if not paths:
-        o.fatal('update (-u) requested but no paths given')
-    for (rp,path) in paths:
-        update_index(rp)
-
-if opt['print'] or opt.status or opt.modified:
-    for (name, ent) in index.Reader(indexfile).filter(extra or ['']):
-        if (opt.modified 
-            and (ent.is_valid() or ent.is_deleted() or not ent.mode)):
-            continue
-        line = ''
-        if opt.status:
-            if ent.is_deleted():
-                line += 'D '
-            elif not ent.is_valid():
-                if ent.sha == index.EMPTY_SHA:
-                    line += 'A '
-                else:
-                    line += 'M '
-            else:
-                line += '  '
-        if opt.hash:
-            line += ent.sha.encode('hex') + ' '
-        if opt.long:
-            line += "%7s %7s " % (oct(ent.mode), oct(ent.gitmode))
-        print line + (name or './')
-
-if opt.check and (opt['print'] or opt.status or opt.modified or opt.update):
-    log('check: starting final check.\n')
-    check_index(index.Reader(indexfile))
-
-if saved_errors:
-    log('WARNING: %d errors encountered.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, os, struct
-from bup import options, helpers
-
-optspec = """
-bup rbackup-server
+b = bcgvbaf.Bcgvbaf('ohc vaqrk', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs abg (bcg.zbqvsvrq be bcg['cevag'] be bcg.fgnghf be bcg.hcqngr be bcg.purpx):
+    b.sngny('fhccyl bar be zber bs -c, -f, -z, -h, be --purpx')
+vs (bcg.snxr_inyvq be bcg.snxr_vainyvq) naq abg bcg.hcqngr:
+    b.sngny('--snxr-{va,}inyvq ner zrnavatyrff jvgubhg -h')
+vs bcg.snxr_inyvq naq bcg.snxr_vainyvq:
+    b.sngny('--snxr-inyvq vf vapbzcngvoyr jvgu --snxr-vainyvq')
+
+tvg.purpx_ercb_be_qvr()
+vaqrksvyr = bcg.vaqrksvyr be tvg.ercb('ohcvaqrk')
+
+unaqyr_pgey_p()
+
+vs bcg.purpx:
+    ybt('purpx: fgnegvat vavgvny purpx.\a')
+    purpx_vaqrk(vaqrk.Ernqre(vaqrksvyr))
+
+cnguf = vaqrk.erqhpr_cnguf(rkgen)
+
+vs bcg.hcqngr:
+    vs abg cnguf:
+        b.sngny('hcqngr (-h) erdhrfgrq ohg ab cnguf tvira')
+    sbe (ec,cngu) va cnguf:
+        hcqngr_vaqrk(ec)
+
+vs bcg['cevag'] be bcg.fgnghf be bcg.zbqvsvrq:
+    sbe (anzr, rag) va vaqrk.Ernqre(vaqrksvyr).svygre(rkgen be ['']):
+        vs (bcg.zbqvsvrq 
+            naq (rag.vf_inyvq() be rag.vf_qryrgrq() be abg rag.zbqr)):
+            pbagvahr
+        yvar = ''
+        vs bcg.fgnghf:
+            vs rag.vf_qryrgrq():
+                yvar += 'Q '
+            ryvs abg rag.vf_inyvq():
+                vs rag.fun == vaqrk.RZCGL_FUN:
+                    yvar += 'N '
+                ryfr:
+                    yvar += 'Z '
+            ryfr:
+                yvar += '  '
+        vs bcg.unfu:
+            yvar += rag.fun.rapbqr('urk') + ' '
+        vs bcg.ybat:
+            yvar += "%7f %7f " % (bpg(rag.zbqr), bpg(rag.tvgzbqr))
+        cevag yvar + (anzr be './')
+
+vs bcg.purpx naq (bcg['cevag'] be bcg.fgnghf be bcg.zbqvsvrq be bcg.hcqngr):
+    ybt('purpx: fgnegvat svany purpx.\a')
+    purpx_vaqrk(vaqrk.Ernqre(vaqrksvyr))
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgehpg
+sebz ohc vzcbeg bcgvbaf, urycref
+
+bcgfcrp = """
+ohc eonpxhc-freire
 --
-    This command is not intended to be run manually.
+    Guvf pbzznaq vf abg vagraqrq gb or eha znahnyyl.
 """
-o = options.Options('bup rbackup-server', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-if extra:
-    o.fatal('no arguments expected')
-
-# get the subcommand's argv.
-# Normally we could just pass this on the command line, but since we'll often
-# be getting called on the other end of an ssh pipe, which tends to mangle
-# argv (by sending it via the shell), this way is much safer.
-buf = sys.stdin.read(4)
-sz = struct.unpack('!I', buf)[0]
-assert(sz > 0)
-assert(sz < 1000000)
-buf = sys.stdin.read(sz)
-assert(len(buf) == sz)
-argv = buf.split('\0')
-
-# stdin/stdout are supposedly connected to 'bup server' that the caller
-# started for us (often on the other end of an ssh tunnel), so we don't want
-# to misuse them.  Move them out of the way, then replace stdout with
-# a pointer to stderr in case our subcommand wants to do something with it.
+b = bcgvbaf.Bcgvbaf('ohc eonpxhc-freire', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+# trg gur fhopbzznaq'f neti.
+# Abeznyyl jr pbhyq whfg cnff guvf ba gur pbzznaq yvar, ohg fvapr jr'yy bsgra
+# or trggvat pnyyrq ba gur bgure raq bs na ffu cvcr, juvpu graqf gb znatyr
+# neti (ol fraqvat vg ivn gur furyy), guvf jnl vf zhpu fnsre.
+ohs = flf.fgqva.ernq(4)
+fm = fgehpg.hacnpx('!V', ohs)[0]
+nffreg(fm > 0)
+nffreg(fm < 1000000)
+ohs = flf.fgqva.ernq(fm)
+nffreg(yra(ohs) == fm)
+neti = ohs.fcyvg('\0')
+
+# fgqva/fgqbhg ner fhccbfrqyl pbaarpgrq gb 'ohc freire' gung gur pnyyre
+# fgnegrq sbe hf (bsgra ba gur bgure raq bs na ffu ghaary), fb jr qba'g jnag
+# gb zvfhfr gurz.  Zbir gurz bhg bs gur jnl, gura ercynpr fgqbhg jvgu
+# n cbvagre gb fgqree va pnfr bhe fhopbzznaq jnagf gb qb fbzrguvat jvgu vg.
 #
-# It might be nice to do the same with stdin, but my experiments showed that
-# ssh seems to make its child's stderr a readable-but-never-reads-anything
-# socket.  They really should have used shutdown(SHUT_WR) on the other end
-# of it, but probably didn't.  Anyway, it's too messy, so let's just make sure
-# anyone reading from stdin is disappointed.
+# Vg zvtug or avpr gb qb gur fnzr jvgu fgqva, ohg zl rkcrevzragf fubjrq gung
+# ffu frrzf gb znxr vgf puvyq'f fgqree n ernqnoyr-ohg-arire-ernqf-nalguvat
+# fbpxrg.  Gurl ernyyl fubhyq unir hfrq fuhgqbja(FUHG_JE) ba gur bgure raq
+# bs vg, ohg cebonoyl qvqa'g.  Naljnl, vg'f gbb zrffl, fb yrg'f whfg znxr fher
+# nalbar ernqvat sebz fgqva vf qvfnccbvagrq.
 #
-# (You can't just leave stdin/stdout "not open" by closing the file
-# descriptors.  Then the next file that opens is automatically assigned 0 or 1,
-# and people *trying* to read/write stdin/stdout get screwed.)
-os.dup2(0, 3)
-os.dup2(1, 4)
-os.dup2(2, 1)
-fd = os.open('/dev/null', os.O_RDONLY)
-os.dup2(fd, 0)
-os.close(fd)
-
-os.environ['BUP_SERVER_REVERSE'] = helpers.hostname()
-os.execvp(argv[0], argv)
-sys.exit(99)
-#!/usr/bin/env python
-import sys, os, glob, subprocess, time
-from bup import options, git
-from bup.helpers import *
-
-par2_ok = 0
-nullf = open('/dev/null')
-
-def debug(s):
-    if opt.verbose:
-        log(s)
-
-def run(argv):
-    # at least in python 2.5, using "stdout=2" or "stdout=sys.stderr" below
-    # doesn't actually work, because subprocess closes fd #2 right before
-    # execing for some reason.  So we work around it by duplicating the fd
-    # first.
-    fd = os.dup(2)  # copy stderr
-    try:
-        p = subprocess.Popen(argv, stdout=fd, close_fds=False)
-        return p.wait()
-    finally:
-        os.close(fd)
-
-def par2_setup():
-    global par2_ok
-    rv = 1
-    try:
-        p = subprocess.Popen(['par2', '--help'],
-                             stdout=nullf, stderr=nullf, stdin=nullf)
-        rv = p.wait()
-    except OSError:
-        log('fsck: warning: par2 not found; disabling recovery features.\n')
-    else:
-        par2_ok = 1
-
-def parv(lvl):
-    if opt.verbose >= lvl:
-        if istty:
-            return []
-        else:
-            return ['-q']
-    else:
-        return ['-qq']
-
-def par2_generate(base):
-    return run(['par2', 'create', '-n1', '-c200'] + parv(2)
-               + ['--', base, base+'.pack', base+'.idx'])
-
-def par2_verify(base):
-    return run(['par2', 'verify'] + parv(3) + ['--', base])
-
-def par2_repair(base):
-    return run(['par2', 'repair'] + parv(2) + ['--', base])
-
-def quick_verify(base):
-    f = open(base + '.pack', 'rb')
-    f.seek(-20, 2)
-    wantsum = f.read(20)
-    assert(len(wantsum) == 20)
-    f.seek(0)
-    sum = Sha1()
-    for b in chunkyreader(f, os.fstat(f.fileno()).st_size - 20):
-        sum.update(b)
-    if sum.digest() != wantsum:
-        raise ValueError('expected %r, got %r' % (wantsum.encode('hex'),
-                                                  sum.hexdigest()))
+# (Lbh pna'g whfg yrnir fgqva/fgqbhg "abg bcra" ol pybfvat gur svyr
+# qrfpevcgbef.  Gura gur arkg svyr gung bcraf vf nhgbzngvpnyyl nffvtarq 0 be 1,
+# naq crbcyr *gelvat* gb ernq/jevgr fgqva/fgqbhg trg fperjrq.)
+bf.qhc2(0, 3)
+bf.qhc2(1, 4)
+bf.qhc2(2, 1)
+sq = bf.bcra('/qri/ahyy', bf.B_EQBAYL)
+bf.qhc2(sq, 0)
+bf.pybfr(sq)
+
+bf.raiveba['OHC_FREIRE_ERIREFR'] = urycref.ubfganzr()
+bf.rkrpic(neti[0], neti)
+flf.rkvg(99)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, tybo, fhocebprff, gvzr
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+cne2_bx = 0
+ahyys = bcra('/qri/ahyy')
+
+qrs qroht(f):
+    vs bcg.ireobfr:
+        ybt(f)
+
+qrs eha(neti):
+    # ng yrnfg va clguba 2.5, hfvat "fgqbhg=2" be "fgqbhg=flf.fgqree" orybj
+    # qbrfa'g npghnyyl jbex, orpnhfr fhocebprff pybfrf sq #2 evtug orsber
+    # rkrpvat sbe fbzr ernfba.  Fb jr jbex nebhaq vg ol qhcyvpngvat gur sq
+    # svefg.
+    sq = bf.qhc(2)  # pbcl fgqree
+    gel:
+        c = fhocebprff.Cbcra(neti, fgqbhg=sq, pybfr_sqf=Snyfr)
+        erghea c.jnvg()
+    svanyyl:
+        bf.pybfr(sq)
+
+qrs cne2_frghc():
+    tybony cne2_bx
+    ei = 1
+    gel:
+        c = fhocebprff.Cbcra(['cne2', '--uryc'],
+                             fgqbhg=ahyys, fgqree=ahyys, fgqva=ahyys)
+        ei = c.jnvg()
+    rkprcg BFReebe:
+        ybt('sfpx: jneavat: cne2 abg sbhaq; qvfnoyvat erpbirel srngherf.\a')
+    ryfr:
+        cne2_bx = 1
+
+qrs cnei(yiy):
+    vs bcg.ireobfr >= yiy:
+        vs vfggl:
+            erghea []
+        ryfr:
+            erghea ['-d']
+    ryfr:
+        erghea ['-dd']
+
+qrs cne2_trarengr(onfr):
+    erghea eha(['cne2', 'perngr', '-a1', '-p200'] + cnei(2)
+               + ['--', onfr, onfr+'.cnpx', onfr+'.vqk'])
+
+qrs cne2_irevsl(onfr):
+    erghea eha(['cne2', 'irevsl'] + cnei(3) + ['--', onfr])
+
+qrs cne2_ercnve(onfr):
+    erghea eha(['cne2', 'ercnve'] + cnei(2) + ['--', onfr])
+
+qrs dhvpx_irevsl(onfr):
+    s = bcra(onfr + '.cnpx', 'eo')
+    s.frrx(-20, 2)
+    jnagfhz = s.ernq(20)
+    nffreg(yra(jnagfhz) == 20)
+    s.frrx(0)
+    fhz = Fun1()
+    sbe o va puhaxlernqre(s, bf.sfgng(s.svyrab()).fg_fvmr - 20):
+        fhz.hcqngr(o)
+    vs fhz.qvtrfg() != jnagfhz:
+        envfr InyhrReebe('rkcrpgrq %e, tbg %e' % (jnagfhz.rapbqr('urk'),
+                                                  fhz.urkqvtrfg()))
         
 
-def git_verify(base):
-    if opt.quick:
-        try:
-            quick_verify(base)
-        except Exception, e:
-            debug('error: %s\n' % e)
-            return 1
-        return 0
-    else:
-        return run(['git', 'verify-pack', '--', base])
+qrs tvg_irevsl(onfr):
+    vs bcg.dhvpx:
+        gel:
+            dhvpx_irevsl(onfr)
+        rkprcg Rkprcgvba, r:
+            qroht('reebe: %f\a' % r)
+            erghea 1
+        erghea 0
+    ryfr:
+        erghea eha(['tvg', 'irevsl-cnpx', '--', onfr])
     
     
-def do_pack(base, last):
-    code = 0
-    if par2_ok and par2_exists and (opt.repair or not opt.generate):
-        vresult = par2_verify(base)
-        if vresult != 0:
-            if opt.repair:
-                rresult = par2_repair(base)
-                if rresult != 0:
-                    print '%s par2 repair: failed (%d)' % (last, rresult)
-                    code = rresult
-                else:
-                    print '%s par2 repair: succeeded (0)' % last
-                    code = 100
-            else:
-                print '%s par2 verify: failed (%d)' % (last, vresult)
-                code = vresult
-        else:
-            print '%s ok' % last
-    elif not opt.generate or (par2_ok and not par2_exists):
-        gresult = git_verify(base)
-        if gresult != 0:
-            print '%s git verify: failed (%d)' % (last, gresult)
-            code = gresult
-        else:
-            if par2_ok and opt.generate:
-                presult = par2_generate(base)
-                if presult != 0:
-                    print '%s par2 create: failed (%d)' % (last, presult)
-                    code = presult
-                else:
-                    print '%s ok' % last
-            else:
-                print '%s ok' % last
-    else:
-        assert(opt.generate and (not par2_ok or par2_exists))
-        debug('    skipped: par2 file already generated.\n')
-    return code
-
-
-optspec = """
-bup fsck [options...] [filenames...]
+qrs qb_cnpx(onfr, ynfg):
+    pbqr = 0
+    vs cne2_bx naq cne2_rkvfgf naq (bcg.ercnve be abg bcg.trarengr):
+        ierfhyg = cne2_irevsl(onfr)
+        vs ierfhyg != 0:
+            vs bcg.ercnve:
+                eerfhyg = cne2_ercnve(onfr)
+                vs eerfhyg != 0:
+                    cevag '%f cne2 ercnve: snvyrq (%q)' % (ynfg, eerfhyg)
+                    pbqr = eerfhyg
+                ryfr:
+                    cevag '%f cne2 ercnve: fhpprrqrq (0)' % ynfg
+                    pbqr = 100
+            ryfr:
+                cevag '%f cne2 irevsl: snvyrq (%q)' % (ynfg, ierfhyg)
+                pbqr = ierfhyg
+        ryfr:
+            cevag '%f bx' % ynfg
+    ryvs abg bcg.trarengr be (cne2_bx naq abg cne2_rkvfgf):
+        terfhyg = tvg_irevsl(onfr)
+        vs terfhyg != 0:
+            cevag '%f tvg irevsl: snvyrq (%q)' % (ynfg, terfhyg)
+            pbqr = terfhyg
+        ryfr:
+            vs cne2_bx naq bcg.trarengr:
+                cerfhyg = cne2_trarengr(onfr)
+                vs cerfhyg != 0:
+                    cevag '%f cne2 perngr: snvyrq (%q)' % (ynfg, cerfhyg)
+                    pbqr = cerfhyg
+                ryfr:
+                    cevag '%f bx' % ynfg
+            ryfr:
+                cevag '%f bx' % ynfg
+    ryfr:
+        nffreg(bcg.trarengr naq (abg cne2_bx be cne2_rkvfgf))
+        qroht('    fxvccrq: cne2 svyr nyernql trarengrq.\a')
+    erghea pbqr
+
+
+bcgfcrp = """
+ohc sfpx [bcgvbaf...] [svyranzrf...]
 --
-r,repair    attempt to repair errors using par2 (dangerous!)
-g,generate  generate auto-repair information using par2
-v,verbose   increase verbosity (can be used more than once)
-quick       just check pack sha1sum, don't use git verify-pack
-j,jobs=     run 'n' jobs in parallel
-par2-ok     immediately return 0 if par2 is ok, 1 if not
-disable-par2  ignore par2 even if it is available
+e,ercnve    nggrzcg gb ercnve reebef hfvat cne2 (qnatrebhf!)
+t,trarengr  trarengr nhgb-ercnve vasbezngvba hfvat cne2
+i,ireobfr   vapernfr ireobfvgl (pna or hfrq zber guna bapr)
+dhvpx       whfg purpx cnpx fun1fhz, qba'g hfr tvg irevsl-cnpx
+w,wbof=     eha 'a' wbof va cnenyyry
+cne2-bx     vzzrqvngryl erghea 0 vs cne2 vf bx, 1 vs abg
+qvfnoyr-cne2  vtaber cne2 rira vs vg vf ninvynoyr
 """
-o = options.Options('bup fsck', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-par2_setup()
-if opt.par2_ok:
-    if par2_ok:
-        sys.exit(0)  # 'true' in sh
-    else:
-        sys.exit(1)
-if opt.disable_par2:
-    par2_ok = 0
-
-git.check_repo_or_die()
-
-if not extra:
-    debug('fsck: No filenames given: checking all packs.\n')
-    extra = glob.glob(git.repo('objects/pack/*.pack'))
-
-code = 0
-count = 0
-outstanding = {}
-for name in extra:
-    if name.endswith('.pack'):
-        base = name[:-5]
-    elif name.endswith('.idx'):
-        base = name[:-4]
-    elif name.endswith('.par2'):
-        base = name[:-5]
-    elif os.path.exists(name + '.pack'):
-        base = name
-    else:
-        raise Exception('%s is not a pack file!' % name)
-    (dir,last) = os.path.split(base)
-    par2_exists = os.path.exists(base + '.par2')
-    if par2_exists and os.stat(base + '.par2').st_size == 0:
-        par2_exists = 0
-    sys.stdout.flush()
-    debug('fsck: checking %s (%s)\n
-          % (last, par2_ok and par2_exists and 'par2' or 'git'))
-    if not opt.verbose:
-        progress('fsck (%d/%d)\r' % (count, len(extra)))
+b = bcgvbaf.Bcgvbaf('ohc sfpx', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+cne2_frghc()
+vs bcg.cne2_bx:
+    vs cne2_bx:
+        flf.rkvg(0)  # 'gehr' va fu
+    ryfr:
+        flf.rkvg(1)
+vs bcg.qvfnoyr_cne2:
+    cne2_bx = 0
+
+tvg.purpx_ercb_be_qvr()
+
+vs abg rkgen:
+    qroht('sfpx: Ab svyranzrf tvira: purpxvat nyy cnpxf.\a')
+    rkgen = tybo.tybo(tvg.ercb('bowrpgf/cnpx/*.cnpx'))
+
+pbqr = 0
+pbhag = 0
+bhgfgnaqvat = {}
+sbe anzr va rkgen:
+    vs anzr.raqfjvgu('.cnpx'):
+        onfr = anzr[:-5]
+    ryvs anzr.raqfjvgu('.vqk'):
+        onfr = anzr[:-4]
+    ryvs anzr.raqfjvgu('.cne2'):
+        onfr = anzr[:-5]
+    ryvs bf.cngu.rkvfgf(anzr + '.cnpx'):
+        onfr = anzr
+    ryfr:
+        envfr Rkprcgvba('%f vf abg n cnpx svyr!' % anzr)
+    (qve,ynfg) = bf.cngu.fcyvg(onfr)
+    cne2_rkvfgf = bf.cngu.rkvfgf(onfr + '.cne2')
+    vs cne2_rkvfgf naq bf.fgng(onfr + '.cne2').fg_fvmr == 0:
+        cne2_rkvfgf = 0
+    flf.fgqbhg.syhfu()
+    qroht('sfpx: purpxvat %f (%f)\a
+          % (ynfg, cne2_bx naq cne2_rkvfgf naq 'cne2' be 'tvg'))
+    vs abg bcg.ireobfr:
+        cebterff('sfpx (%q/%q)\e' % (pbhag, yra(rkgen)))
     
-    if not opt.jobs:
-        nc = do_pack(base, last)
-        code = code or nc
-        count += 1
-    else:
-        while len(outstanding) >= opt.jobs:
-            (pid,nc) = os.wait()
-            nc >>= 8
-            if pid in outstanding:
-                del outstanding[pid]
-                code = code or nc
-                count += 1
-        pid = os.fork()
-        if pid:  # parent
-            outstanding[pid] = 1
-        else: # child
-            try:
-                sys.exit(do_pack(base, last))
-            except Exception, e:
-                log('exception: %r\n' % e)
-                sys.exit(99)
+    vs abg bcg.wbof:
+        ap = qb_cnpx(onfr, ynfg)
+        pbqr = pbqr be ap
+        pbhag += 1
+    ryfr:
+        juvyr yra(bhgfgnaqvat) >= bcg.wbof:
+            (cvq,ap) = bf.jnvg()
+            ap >>= 8
+            vs cvq va bhgfgnaqvat:
+                qry bhgfgnaqvat[cvq]
+                pbqr = pbqr be ap
+                pbhag += 1
+        cvq = bf.sbex()
+        vs cvq:  # cnerag
+            bhgfgnaqvat[cvq] = 1
+        ryfr: # puvyq
+            gel:
+                flf.rkvg(qb_cnpx(onfr, ynfg))
+            rkprcg Rkprcgvba, r:
+                ybt('rkprcgvba: %e\a' % r)
+                flf.rkvg(99)
                 
-while len(outstanding):
-    (pid,nc) = os.wait()
-    nc >>= 8
-    if pid in outstanding:
-        del outstanding[pid]
-        code = code or nc
-        count += 1
-    if not opt.verbose:
-        progress('fsck (%d/%d)\r' % (count, len(extra)))
-
-if not opt.verbose and istty:
-    log('fsck done.           \n')
-sys.exit(code)
-#!/usr/bin/env python
-import sys, os, struct, getopt, subprocess, signal
-from bup import options, ssh
-from bup.helpers import *
-
-optspec = """
-bup rbackup <hostname> index ...
-bup rbackup <hostname> save ...
-bup rbackup <hostname> split ...
+juvyr yra(bhgfgnaqvat):
+    (cvq,ap) = bf.jnvg()
+    ap >>= 8
+    vs cvq va bhgfgnaqvat:
+        qry bhgfgnaqvat[cvq]
+        pbqr = pbqr be ap
+        pbhag += 1
+    vs abg bcg.ireobfr:
+        cebterff('sfpx (%q/%q)\e' % (pbhag, yra(rkgen)))
+
+vs abg bcg.ireobfr naq vfggl:
+    ybt('sfpx qbar.           \a')
+flf.rkvg(pbqr)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgehpg, trgbcg, fhocebprff, fvtany
+sebz ohc vzcbeg bcgvbaf, ffu
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+ohc eonpxhc <ubfganzr> vaqrk ...
+ohc eonpxhc <ubfganzr> fnir ...
+ohc eonpxhc <ubfganzr> fcyvg ...
 """
-o = options.Options('bup rbackup', optspec, optfunc=getopt.getopt)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-if len(extra) < 2:
-    o.fatal('arguments expected')
-
-class SigException(Exception):
-    def __init__(self, signum):
-        self.signum = signum
-        Exception.__init__(self, 'signal %d received' % signum)
-def handler(signum, frame):
-    raise SigException(signum)
-
-signal.signal(signal.SIGTERM, handler)
-signal.signal(signal.SIGINT, handler)
-
-sp = None
-p = None
-ret = 99
-
-try:
-    hostname = extra[0]
-    argv = extra[1:]
-    p = ssh.connect(hostname, 'rbackup-server')
-
-    argvs = '\0'.join(['bup'] + argv)
-    p.stdin.write(struct.pack('!I', len(argvs)) + argvs)
-    p.stdin.flush()
-
-    main_exe = os.environ.get('BUP_MAIN_EXE') or sys.argv[0]
-    sp = subprocess.Popen([main_exe, 'server'], stdin=p.stdout, stdout=p.stdin)
-
-    p.stdin.close()
-    p.stdout.close()
-
-finally:
-    while 1:
-        # if we get a signal while waiting, we have to keep waiting, just
-        # in case our child doesn't die.
-        try:
-            ret = p.wait()
-            sp.wait()
-            break
-        except SigException, e:
-            log('\nbup rbackup: %s\n' % e)
-            os.kill(p.pid, e.signum)
-            ret = 84
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, os, re
-from bup import options
-
-optspec = """
-bup newliner
+b = bcgvbaf.Bcgvbaf('ohc eonpxhc', bcgfcrp, bcgshap=trgbcg.trgbcg)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+vs yra(rkgen) < 2:
+    b.sngny('nethzragf rkcrpgrq')
+
+pynff FvtRkprcgvba(Rkprcgvba):
+    qrs __vavg__(frys, fvtahz):
+        frys.fvtahz = fvtahz
+        Rkprcgvba.__vavg__(frys, 'fvtany %q erprvirq' % fvtahz)
+qrs unaqyre(fvtahz, senzr):
+    envfr FvtRkprcgvba(fvtahz)
+
+fvtany.fvtany(fvtany.FVTGREZ, unaqyre)
+fvtany.fvtany(fvtany.FVTVAG, unaqyre)
+
+fc = Abar
+c = Abar
+erg = 99
+
+gel:
+    ubfganzr = rkgen[0]
+    neti = rkgen[1:]
+    c = ffu.pbaarpg(ubfganzr, 'eonpxhc-freire')
+
+    netif = '\0'.wbva(['ohc'] + neti)
+    c.fgqva.jevgr(fgehpg.cnpx('!V', yra(netif)) + netif)
+    c.fgqva.syhfu()
+
+    znva_rkr = bf.raiveba.trg('OHC_ZNVA_RKR') be flf.neti[0]
+    fc = fhocebprff.Cbcra([znva_rkr, 'freire'], fgqva=c.fgqbhg, fgqbhg=c.fgqva)
+
+    c.fgqva.pybfr()
+    c.fgqbhg.pybfr()
+
+svanyyl:
+    juvyr 1:
+        # vs jr trg n fvtany juvyr jnvgvat, jr unir gb xrrc jnvgvat, whfg
+        # va pnfr bhe puvyq qbrfa'g qvr.
+        gel:
+            erg = c.jnvg()
+            fc.jnvg()
+            oernx
+        rkprcg FvtRkprcgvba, r:
+            ybt('\aohc eonpxhc: %f\a' % r)
+            bf.xvyy(c.cvq, r.fvtahz)
+            erg = 84
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, er
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc arjyvare
 """
-o = options.Options('bup newliner', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-r = re.compile(r'([\r\n])')
-lastlen = 0
-all = ''
-while 1:
-    l = r.split(all, 1)
-    if len(l) <= 1:
-        try:
-            b = os.read(sys.stdin.fileno(), 4096)
-        except KeyboardInterrupt:
-            break
-        if not b:
-            break
-        all += b
-    else:
-        assert(len(l) == 3)
-        (line, splitchar, all) = l
-        #splitchar = '\n'
-        sys.stdout.write('%-*s%s' % (lastlen, line, splitchar))
-        if splitchar == '\r':
-            lastlen = len(line)
-        else:
-            lastlen = 0
-        sys.stdout.flush()
-
-if lastlen or all:
-    sys.stdout.write('%-*s\n' % (lastlen, all))
-#!/usr/bin/env python
-import sys
-from bup import options, git, _hashsplit
-from bup.helpers import *
-
-
-optspec = """
-bup margin
+b = bcgvbaf.Bcgvbaf('ohc arjyvare', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+e = er.pbzcvyr(e'([\e\a])')
+ynfgyra = 0
+nyy = ''
+juvyr 1:
+    y = e.fcyvg(nyy, 1)
+    vs yra(y) <= 1:
+        gel:
+            o = bf.ernq(flf.fgqva.svyrab(), 4096)
+        rkprcg XrlobneqVagreehcg:
+            oernx
+        vs abg o:
+            oernx
+        nyy += o
+    ryfr:
+        nffreg(yra(y) == 3)
+        (yvar, fcyvgpune, nyy) = y
+        #fcyvgpune = '\a'
+        flf.fgqbhg.jevgr('%-*f%f' % (ynfgyra, yvar, fcyvgpune))
+        vs fcyvgpune == '\e':
+            ynfgyra = yra(yvar)
+        ryfr:
+            ynfgyra = 0
+        flf.fgqbhg.syhfu()
+
+vs ynfgyra be nyy:
+    flf.fgqbhg.jevgr('%-*f\a' % (ynfgyra, nyy))
+#!/hfe/ova/rai clguba
+vzcbeg flf
+sebz ohc vzcbeg bcgvbaf, tvg, _unfufcyvg
+sebz ohc.urycref vzcbeg *
+
+
+bcgfcrp = """
+ohc znetva
 """
-o = options.Options('bup margin', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-git.check_repo_or_die()
-#git.ignore_midx = 1
-
-mi = git.PackIdxList(git.repo('objects/pack'))
-last = '\0'*20
-longmatch = 0
-for i in mi:
-    if i == last:
-        continue
-    #assert(str(i) >= last)
-    pm = _hashsplit.bitmatch(last, i)
-    longmatch = max(longmatch, pm)
-    last = i
-print longmatch
-#!/usr/bin/env python
-from bup import options, drecurse
-from bup.helpers import *
-
-optspec = """
-bup drecurse <path>
+b = bcgvbaf.Bcgvbaf('ohc znetva', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+tvg.purpx_ercb_be_qvr()
+#tvg.vtaber_zvqk = 1
+
+zv = tvg.CnpxVqkYvfg(tvg.ercb('bowrpgf/cnpx'))
+ynfg = '\0'*20
+ybatzngpu = 0
+sbe v va zv:
+    vs v == ynfg:
+        pbagvahr
+    #nffreg(fge(v) >= ynfg)
+    cz = _unfufcyvg.ovgzngpu(ynfg, v)
+    ybatzngpu = znk(ybatzngpu, cz)
+    ynfg = v
+cevag ybatzngpu
+#!/hfe/ova/rai clguba
+sebz ohc vzcbeg bcgvbaf, qerphefr
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+ohc qerphefr <cngu>
 --
-x,xdev,one-file-system   don't cross filesystem boundaries
-q,quiet  don't actually print filenames
-profile  run under the python profiler
+k,kqri,bar-svyr-flfgrz   qba'g pebff svyrflfgrz obhaqnevrf
+d,dhvrg  qba'g npghnyyl cevag svyranzrf
+cebsvyr  eha haqre gur clguba cebsvyre
 """
-o = options.Options('bup drecurse', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one filename expected")
-
-it = drecurse.recursive_dirlist(extra, opt.xdev)
-if opt.profile:
-    import cProfile
-    def do_it():
-        for i in it:
-            pass
-    cProfile.run('do_it()')
-else:
-    if opt.quiet:
-        for i in it:
-            pass
-    else:
-        for (name,st) in it:
-            print name
-
-if saved_errors:
-    log('WARNING: %d errors encountered.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, time, struct
-from bup import hashsplit, git, options, client
-from bup.helpers import *
-from subprocess import PIPE
-
-
-optspec = """
-bup split [-tcb] [-n name] [--bench] [filenames...]
+b = bcgvbaf.Bcgvbaf('ohc qerphefr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar svyranzr rkcrpgrq")
+
+vg = qerphefr.erphefvir_qveyvfg(rkgen, bcg.kqri)
+vs bcg.cebsvyr:
+    vzcbeg pCebsvyr
+    qrs qb_vg():
+        sbe v va vg:
+            cnff
+    pCebsvyr.eha('qb_vg()')
+ryfr:
+    vs bcg.dhvrg:
+        sbe v va vg:
+            cnff
+    ryfr:
+        sbe (anzr,fg) va vg:
+            cevag anzr
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr, fgehpg
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+sebz fhocebprff vzcbeg CVCR
+
+
+bcgfcrp = """
+ohc fcyvg [-gpo] [-a anzr] [--orapu] [svyranzrf...]
 --
-r,remote=  remote repository path
-b,blobs    output a series of blob ids
-t,tree     output a tree id
-c,commit   output a commit id
-n,name=    name of backup set to update (if any)
-N,noop     don't actually save the data anywhere
-q,quiet    don't print progress messages
-v,verbose  increase log output (can be used more than once)
-copy       just copy input to output, hashsplitting along the way
-bench      print benchmark timings to stderr
-max-pack-size=  maximum bytes in a single pack
-max-pack-objects=  maximum number of objects in a single pack
-fanout=  maximum number of blobs in a single tree
+e,erzbgr=  erzbgr ercbfvgbel cngu
+o,oybof    bhgchg n frevrf bs oybo vqf
+g,gerr     bhgchg n gerr vq
+p,pbzzvg   bhgchg n pbzzvg vq
+a,anzr=    anzr bs onpxhc frg gb hcqngr (vs nal)
+A,abbc     qba'g npghnyyl fnir gur qngn naljurer
+d,dhvrg    qba'g cevag cebterff zrffntrf
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
+pbcl       whfg pbcl vachg gb bhgchg, unfufcyvggvat nybat gur jnl
+orapu      cevag orapuznex gvzvatf gb fgqree
+znk-cnpx-fvmr=  znkvzhz olgrf va n fvatyr cnpx
+znk-cnpx-bowrpgf=  znkvzhz ahzore bs bowrpgf va n fvatyr cnpx
+snabhg=  znkvzhz ahzore bs oybof va n fvatyr gerr
 """
-o = options.Options('bup split', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-if not (opt.blobs or opt.tree or opt.commit or opt.name or
-        opt.noop or opt.copy):
-    o.fatal("use one or more of -b, -t, -c, -n, -N, --copy")
-if (opt.noop or opt.copy) and (opt.blobs or opt.tree or 
-                               opt.commit or opt.name):
-    o.fatal('-N is incompatible with -b, -t, -c, -n')
-
-if opt.verbose >= 2:
-    git.verbose = opt.verbose - 1
-    opt.bench = 1
-if opt.max_pack_size:
-    hashsplit.max_pack_size = parse_num(opt.max_pack_size)
-if opt.max_pack_objects:
-    hashsplit.max_pack_objects = parse_num(opt.max_pack_objects)
-if opt.fanout:
-    hashsplit.fanout = parse_num(opt.fanout)
-if opt.blobs:
-    hashsplit.fanout = 0
-
-is_reverse = os.environ.get('BUP_SERVER_REVERSE')
-if is_reverse and opt.remote:
-    o.fatal("don't use -r in reverse mode; it's automatic")
-start_time = time.time()
-
-refname = opt.name and 'refs/heads/%s' % opt.name or None
-if opt.noop or opt.copy:
-    cli = w = oldref = None
-elif opt.remote or is_reverse:
-    cli = client.Client(opt.remote)
-    oldref = refname and cli.read_ref(refname) or None
-    w = cli.new_packwriter()
-else:
-    cli = None
-    oldref = refname and git.read_ref(refname) or None
-    w = git.PackWriter()
-
-files = extra and (open(fn) for fn in extra) or [sys.stdin]
-if w:
-    shalist = hashsplit.split_to_shalist(w, files)
-    tree = w.new_tree(shalist)
-else:
-    last = 0
-    for (blob, bits) in hashsplit.hashsplit_iter(files):
-        hashsplit.total_split += len(blob)
-        if opt.copy:
-            sys.stdout.write(str(blob))
-        megs = hashsplit.total_split/1024/1024
-        if not opt.quiet and last != megs:
-            progress('%d Mbytes read\r' % megs)
-            last = megs
-    progress('%d Mbytes read, done.\n' % megs)
-
-if opt.verbose:
-    log('\n')
-if opt.blobs:
-    for (mode,name,bin) in shalist:
-        print bin.encode('hex')
-if opt.tree:
-    print tree.encode('hex')
-if opt.commit or opt.name:
-    msg = 'bup split\n\nGenerated by command:\n%r' % sys.argv
-    ref = opt.name and ('refs/heads/%s' % opt.name) or None
-    commit = w.new_commit(oldref, tree, msg)
-    if opt.commit:
-        print commit.encode('hex')
-
-if w:
-    w.close()  # must close before we can update the ref
+b = bcgvbaf.Bcgvbaf('ohc fcyvg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+vs abg (bcg.oybof be bcg.gerr be bcg.pbzzvg be bcg.anzr be
+        bcg.abbc be bcg.pbcl):
+    b.sngny("hfr bar be zber bs -o, -g, -p, -a, -A, --pbcl")
+vs (bcg.abbc be bcg.pbcl) naq (bcg.oybof be bcg.gerr be 
+                               bcg.pbzzvg be bcg.anzr):
+    b.sngny('-A vf vapbzcngvoyr jvgu -o, -g, -p, -a')
+
+vs bcg.ireobfr >= 2:
+    tvg.ireobfr = bcg.ireobfr - 1
+    bcg.orapu = 1
+vs bcg.znk_cnpx_fvmr:
+    unfufcyvg.znk_cnpx_fvmr = cnefr_ahz(bcg.znk_cnpx_fvmr)
+vs bcg.znk_cnpx_bowrpgf:
+    unfufcyvg.znk_cnpx_bowrpgf = cnefr_ahz(bcg.znk_cnpx_bowrpgf)
+vs bcg.snabhg:
+    unfufcyvg.snabhg = cnefr_ahz(bcg.snabhg)
+vs bcg.oybof:
+    unfufcyvg.snabhg = 0
+
+vf_erirefr = bf.raiveba.trg('OHC_FREIRE_ERIREFR')
+vs vf_erirefr naq bcg.erzbgr:
+    b.sngny("qba'g hfr -e va erirefr zbqr; vg'f nhgbzngvp")
+fgneg_gvzr = gvzr.gvzr()
+
+ersanzr = bcg.anzr naq 'ersf/urnqf/%f' % bcg.anzr be Abar
+vs bcg.abbc be bcg.pbcl:
+    pyv = j = byqers = Abar
+ryvs bcg.erzbgr be vf_erirefr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    byqers = ersanzr naq pyv.ernq_ers(ersanzr) be Abar
+    j = pyv.arj_cnpxjevgre()
+ryfr:
+    pyv = Abar
+    byqers = ersanzr naq tvg.ernq_ers(ersanzr) be Abar
+    j = tvg.CnpxJevgre()
+
+svyrf = rkgen naq (bcra(sa) sbe sa va rkgen) be [flf.fgqva]
+vs j:
+    funyvfg = unfufcyvg.fcyvg_gb_funyvfg(j, svyrf)
+    gerr = j.arj_gerr(funyvfg)
+ryfr:
+    ynfg = 0
+    sbe (oybo, ovgf) va unfufcyvg.unfufcyvg_vgre(svyrf):
+        unfufcyvg.gbgny_fcyvg += yra(oybo)
+        vs bcg.pbcl:
+            flf.fgqbhg.jevgr(fge(oybo))
+        zrtf = unfufcyvg.gbgny_fcyvg/1024/1024
+        vs abg bcg.dhvrg naq ynfg != zrtf:
+            cebterff('%q Zolgrf ernq\e' % zrtf)
+            ynfg = zrtf
+    cebterff('%q Zolgrf ernq, qbar.\a' % zrtf)
+
+vs bcg.ireobfr:
+    ybt('\a')
+vs bcg.oybof:
+    sbe (zbqr,anzr,ova) va funyvfg:
+        cevag ova.rapbqr('urk')
+vs bcg.gerr:
+    cevag gerr.rapbqr('urk')
+vs bcg.pbzzvg be bcg.anzr:
+    zft = 'ohc fcyvg\a\aTrarengrq ol pbzznaq:\a%e' % flf.neti
+    ers = bcg.anzr naq ('ersf/urnqf/%f' % bcg.anzr) be Abar
+    pbzzvg = j.arj_pbzzvg(byqers, gerr, zft)
+    vs bcg.pbzzvg:
+        cevag pbzzvg.rapbqr('urk')
+
+vs j:
+    j.pybfr()  # zhfg pybfr orsber jr pna hcqngr gur ers
         
-if opt.name:
-    if cli:
-        cli.update_ref(refname, commit, oldref)
-    else:
-        git.update_ref(refname, commit, oldref)
-
-if cli:
-    cli.close()
-
-secs = time.time() - start_time
-size = hashsplit.total_split
-if opt.bench:
-    log('\nbup: %.2fkbytes in %.2f secs = %.2f kbytes/sec\n'
-        % (size/1024., secs, size/1024./secs))
-#!/usr/bin/env python
-import sys, re, struct, mmap
-from bup import git, options
-from bup.helpers import *
-
-
-def s_from_bytes(bytes):
-    clist = [chr(b) for b in bytes]
-    return ''.join(clist)
-
-
-def report(count):
-    fields = ['VmSize', 'VmRSS', 'VmData', 'VmStk']
-    d = {}
-    for line in open('/proc/self/status').readlines():
-        l = re.split(r':\s*', line.strip(), 1)
-        d[l[0]] = l[1]
-    if count >= 0:
-        e1 = count
-        fields = [d[k] for k in fields]
-    else:
-        e1 = ''
-    print ('%9s  ' + ('%10s ' * len(fields))) % tuple([e1] + fields)
-    sys.stdout.flush()
-
-
-optspec = """
-bup memtest [-n elements] [-c cycles]
+vs bcg.anzr:
+    vs pyv:
+        pyv.hcqngr_ers(ersanzr, pbzzvg, byqers)
+    ryfr:
+        tvg.hcqngr_ers(ersanzr, pbzzvg, byqers)
+
+vs pyv:
+    pyv.pybfr()
+
+frpf = gvzr.gvzr() - fgneg_gvzr
+fvmr = unfufcyvg.gbgny_fcyvg
+vs bcg.orapu:
+    ybt('\aohc: %.2sxolgrf va %.2s frpf = %.2s xolgrf/frp\a'
+        % (fvmr/1024., frpf, fvmr/1024./frpf))
+#!/hfe/ova/rai clguba
+vzcbeg flf, er, fgehpg, zznc
+sebz ohc vzcbeg tvg, bcgvbaf
+sebz ohc.urycref vzcbeg *
+
+
+qrs f_sebz_olgrf(olgrf):
+    pyvfg = [pue(o) sbe o va olgrf]
+    erghea ''.wbva(pyvfg)
+
+
+qrs ercbeg(pbhag):
+    svryqf = ['IzFvmr', 'IzEFF', 'IzQngn', 'IzFgx']
+    q = {}
+    sbe yvar va bcra('/cebp/frys/fgnghf').ernqyvarf():
+        y = er.fcyvg(e':\f*', yvar.fgevc(), 1)
+        q[y[0]] = y[1]
+    vs pbhag >= 0:
+        r1 = pbhag
+        svryqf = [q[x] sbe x va svryqf]
+    ryfr:
+        r1 = ''
+    cevag ('%9f  ' + ('%10f ' * yra(svryqf))) % ghcyr([r1] + svryqf)
+    flf.fgqbhg.syhfu()
+
+
+bcgfcrp = """
+ohc zrzgrfg [-a ryrzragf] [-p plpyrf]
 --
-n,number=  number of objects per cycle
-c,cycles=  number of cycles to run
-ignore-midx  ignore .midx files, use only .idx files
+a,ahzore=  ahzore bs bowrpgf cre plpyr
+p,plpyrf=  ahzore bs plpyrf gb eha
+vtaber-zvqk  vtaber .zvqk svyrf, hfr bayl .vqk svyrf
 """
-o = options.Options('bup memtest', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal('no arguments expected')
-
-git.ignore_midx = opt.ignore_midx
-
-git.check_repo_or_die()
-m = git.PackIdxList(git.repo('objects/pack'))
-
-cycles = opt.cycles or 100
-number = opt.number or 10000
-
-report(-1)
-f = open('/dev/urandom')
-a = mmap.mmap(-1, 20)
-report(0)
-for c in xrange(cycles):
-    for n in xrange(number):
-        b = f.read(3)
-        if 0:
-            bytes = list(struct.unpack('!BBB', b)) + [0]*17
-            bytes[2] &= 0xf0
-            bin = struct.pack('!20s', s_from_bytes(bytes))
-        else:
-            a[0:2] = b[0:2]
-            a[2] = chr(ord(b[2]) & 0xf0)
-            bin = str(a[0:20])
-        #print bin.encode('hex')
-        m.exists(bin)
-    report((c+1)*number)
-#!/usr/bin/env python
-import sys, os, stat
-from bup import options, git, vfs
-from bup.helpers import *
-
-def print_node(text, n):
-    prefix = ''
-    if opt.hash:
-        prefix += "%s " % n.hash.encode('hex')
-    if stat.S_ISDIR(n.mode):
-        print '%s%s/' % (prefix, text)
-    elif stat.S_ISLNK(n.mode):
-        print '%s%s@' % (prefix, text)
-    else:
-        print '%s%s' % (prefix, text)
-
-
-optspec = """
-bup ls <dirs...>
+b = bcgvbaf.Bcgvbaf('ohc zrzgrfg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+tvg.vtaber_zvqk = bcg.vtaber_zvqk
+
+tvg.purpx_ercb_be_qvr()
+z = tvg.CnpxVqkYvfg(tvg.ercb('bowrpgf/cnpx'))
+
+plpyrf = bcg.plpyrf be 100
+ahzore = bcg.ahzore be 10000
+
+ercbeg(-1)
+s = bcra('/qri/henaqbz')
+n = zznc.zznc(-1, 20)
+ercbeg(0)
+sbe p va kenatr(plpyrf):
+    sbe a va kenatr(ahzore):
+        o = s.ernq(3)
+        vs 0:
+            olgrf = yvfg(fgehpg.hacnpx('!OOO', o)) + [0]*17
+            olgrf[2] &= 0ks0
+            ova = fgehpg.cnpx('!20f', f_sebz_olgrf(olgrf))
+        ryfr:
+            n[0:2] = o[0:2]
+            n[2] = pue(beq(o[2]) & 0ks0)
+            ova = fge(n[0:20])
+        #cevag ova.rapbqr('urk')
+        z.rkvfgf(ova)
+    ercbeg((p+1)*ahzore)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgng
+sebz ohc vzcbeg bcgvbaf, tvg, isf
+sebz ohc.urycref vzcbeg *
+
+qrs cevag_abqr(grkg, a):
+    cersvk = ''
+    vs bcg.unfu:
+        cersvk += "%f " % a.unfu.rapbqr('urk')
+    vs fgng.F_VFQVE(a.zbqr):
+        cevag '%f%f/' % (cersvk, grkg)
+    ryvs fgng.F_VFYAX(a.zbqr):
+        cevag '%f%f@' % (cersvk, grkg)
+    ryfr:
+        cevag '%f%f' % (cersvk, grkg)
+
+
+bcgfcrp = """
+ohc yf <qvef...>
 --
-s,hash   show hash for each file
+f,unfu   fubj unfu sbe rnpu svyr
 """
-o = options.Options('bup ls', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-top = vfs.RefList(None)
-
-if not extra:
-    extra = ['/']
-
-ret = 0
-for d in extra:
-    try:
-        n = top.lresolve(d)
-        if stat.S_ISDIR(n.mode):
-            for sub in n:
-                print_node(sub.name, sub)
-        else:
-            print_node(d, n)
-    except vfs.NodeError, e:
-        log('error: %s\n' % e)
-        ret = 1
-
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, os, re, stat, readline, fnmatch
-from bup import options, git, shquote, vfs
-from bup.helpers import *
-
-def node_name(text, n):
-    if stat.S_ISDIR(n.mode):
-        return '%s/' % text
-    elif stat.S_ISLNK(n.mode):
-        return '%s@' % text
-    else:
-        return '%s' % text
-
-
-def do_ls(path, n):
-    l = []
-    if stat.S_ISDIR(n.mode):
-        for sub in n:
-            l.append(node_name(sub.name, sub))
-    else:
-        l.append(node_name(path, n))
-    print columnate(l, '')
+b = bcgvbaf.Bcgvbaf('ohc yf', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+gbc = isf.ErsYvfg(Abar)
+
+vs abg rkgen:
+    rkgen = ['/']
+
+erg = 0
+sbe q va rkgen:
+    gel:
+        a = gbc.yerfbyir(q)
+        vs fgng.F_VFQVE(a.zbqr):
+            sbe fho va a:
+                cevag_abqr(fho.anzr, fho)
+        ryfr:
+            cevag_abqr(q, a)
+    rkprcg isf.AbqrReebe, r:
+        ybt('reebe: %f\a' % r)
+        erg = 1
+
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, er, fgng, ernqyvar, sazngpu
+sebz ohc vzcbeg bcgvbaf, tvg, fudhbgr, isf
+sebz ohc.urycref vzcbeg *
+
+qrs abqr_anzr(grkg, a):
+    vs fgng.F_VFQVE(a.zbqr):
+        erghea '%f/' % grkg
+    ryvs fgng.F_VFYAX(a.zbqr):
+        erghea '%f@' % grkg
+    ryfr:
+        erghea '%f' % grkg
+
+
+qrs qb_yf(cngu, a):
+    y = []
+    vs fgng.F_VFQVE(a.zbqr):
+        sbe fho va a:
+            y.nccraq(abqr_anzr(fho.anzr, fho))
+    ryfr:
+        y.nccraq(abqr_anzr(cngu, a))
+    cevag pbyhzangr(y, '')
     
 
-def write_to_file(inf, outf):
-    for blob in chunkyreader(inf):
-        outf.write(blob)
+qrs jevgr_gb_svyr(vas, bhgs):
+    sbe oybo va puhaxlernqre(vas):
+        bhgs.jevgr(oybo)
     
 
-def inputiter():
-    if os.isatty(sys.stdin.fileno()):
-        while 1:
-            try:
-                yield raw_input('bup> ')
-            except EOFError:
-                break
-    else:
-        for line in sys.stdin:
-            yield line
-
-
-def _completer_get_subs(line):
-    (qtype, lastword) = shquote.unfinished_word(line)
-    (dir,name) = os.path.split(lastword)
-    #log('\ncompleter: %r %r %r\n' % (qtype, lastword, text))
-    n = pwd.resolve(dir)
-    subs = list(filter(lambda x: x.name.startswith(name),
-                       n.subs()))
-    return (dir, name, qtype, lastword, subs)
-
-
-_last_line = None
-_last_res = None
-def completer(text, state):
-    global _last_line
-    global _last_res
-    try:
-        line = readline.get_line_buffer()[:readline.get_endidx()]
-        if _last_line != line:
-            _last_res = _completer_get_subs(line)
-            _last_line = line
-        (dir, name, qtype, lastword, subs) = _last_res
-        if state < len(subs):
-            sn = subs[state]
-            sn1 = sn.resolve('')  # deref symlinks
-            fullname = os.path.join(dir, sn.name)
-            if stat.S_ISDIR(sn1.mode):
-                ret = shquote.what_to_add(qtype, lastword, fullname+'/',
-                                          terminate=False)
-            else:
-                ret = shquote.what_to_add(qtype, lastword, fullname,
-                                          terminate=True) + ' '
-            return text + ret
-    except Exception, e:
-        log('\nerror in completion: %s\n' % e)
+qrs vachgvgre():
+    vs bf.vfnggl(flf.fgqva.svyrab()):
+        juvyr 1:
+            gel:
+                lvryq enj_vachg('ohc> ')
+            rkprcg RBSReebe:
+                oernx
+    ryfr:
+        sbe yvar va flf.fgqva:
+            lvryq yvar
+
+
+qrs _pbzcyrgre_trg_fhof(yvar):
+    (dglcr, ynfgjbeq) = fudhbgr.hasvavfurq_jbeq(yvar)
+    (qve,anzr) = bf.cngu.fcyvg(ynfgjbeq)
+    #ybt('\apbzcyrgre: %e %e %e\a' % (dglcr, ynfgjbeq, grkg))
+    a = cjq.erfbyir(qve)
+    fhof = yvfg(svygre(ynzoqn k: k.anzr.fgnegfjvgu(anzr),
+                       a.fhof()))
+    erghea (qve, anzr, dglcr, ynfgjbeq, fhof)
+
+
+_ynfg_yvar = Abar
+_ynfg_erf = Abar
+qrs pbzcyrgre(grkg, fgngr):
+    tybony _ynfg_yvar
+    tybony _ynfg_erf
+    gel:
+        yvar = ernqyvar.trg_yvar_ohssre()[:ernqyvar.trg_raqvqk()]
+        vs _ynfg_yvar != yvar:
+            _ynfg_erf = _pbzcyrgre_trg_fhof(yvar)
+            _ynfg_yvar = yvar
+        (qve, anzr, dglcr, ynfgjbeq, fhof) = _ynfg_erf
+        vs fgngr < yra(fhof):
+            fa = fhof[fgngr]
+            fa1 = fa.erfbyir('')  # qrers flzyvaxf
+            shyyanzr = bf.cngu.wbva(qve, fa.anzr)
+            vs fgng.F_VFQVE(fa1.zbqr):
+                erg = fudhbgr.jung_gb_nqq(dglcr, ynfgjbeq, shyyanzr+'/',
+                                          grezvangr=Snyfr)
+            ryfr:
+                erg = fudhbgr.jung_gb_nqq(dglcr, ynfgjbeq, shyyanzr,
+                                          grezvangr=Gehr) + ' '
+            erghea grkg + erg
+    rkprcg Rkprcgvba, r:
+        ybt('\areebe va pbzcyrgvba: %f\a' % r)
 
             
-optspec = """
-bup ftp
+bcgfcrp = """
+ohc sgc
 """
-o = options.Options('bup ftp', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-
-top = vfs.RefList(None)
-pwd = top
-
-if extra:
-    lines = extra
-else:
-    readline.set_completer_delims(' \t\n\r/')
-    readline.set_completer(completer)
-    readline.parse_and_bind("tab: complete")
-    lines = inputiter()
-
-for line in lines:
-    if not line.strip():
-        continue
-    words = [word for (wordstart,word) in shquote.quotesplit(line)]
-    cmd = words[0].lower()
-    #log('execute: %r %r\n' % (cmd, parm))
-    try:
-        if cmd == 'ls':
-            for parm in (words[1:] or ['.']):
-                do_ls(parm, pwd.resolve(parm))
-        elif cmd == 'cd':
-            for parm in words[1:]:
-                pwd = pwd.resolve(parm)
-        elif cmd == 'pwd':
-            print pwd.fullname()
-        elif cmd == 'cat':
-            for parm in words[1:]:
-                write_to_file(pwd.resolve(parm).open(), sys.stdout)
-        elif cmd == 'get':
-            if len(words) not in [2,3]:
-                raise Exception('Usage: get <filename> [localname]')
-            rname = words[1]
-            (dir,base) = os.path.split(rname)
-            lname = len(words)>2 and words[2] or base
-            inf = pwd.resolve(rname).open()
-            log('Saving %r\n' % lname)
-            write_to_file(inf, open(lname, 'wb'))
-        elif cmd == 'mget':
-            for parm in words[1:]:
-                (dir,base) = os.path.split(parm)
-                for n in pwd.resolve(dir).subs():
-                    if fnmatch.fnmatch(n.name, base):
-                        try:
-                            log('Saving %r\n' % n.name)
-                            inf = n.open()
-                            outf = open(n.name, 'wb')
-                            write_to_file(inf, outf)
-                            outf.close()
-                        except Exception, e:
-                            log('  error: %s\n' % e)
-        elif cmd == 'help' or cmd == '?':
-            log('Commands: ls cd pwd cat get mget help quit\n')
-        elif cmd == 'quit' or cmd == 'exit' or cmd == 'bye':
-            break
-        else:
-            raise Exception('no such command %r' % cmd)
-    except Exception, e:
-        log('error: %s\n' % e)
-        #raise
-#!/usr/bin/env python
-import sys, mmap
-from bup import options, _hashsplit
-from bup.helpers import *
-
-optspec = """
-bup random [-S seed] <numbytes>
+b = bcgvbaf.Bcgvbaf('ohc sgc', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+
+gbc = isf.ErsYvfg(Abar)
+cjq = gbc
+
+vs rkgen:
+    yvarf = rkgen
+ryfr:
+    ernqyvar.frg_pbzcyrgre_qryvzf(' \g\a\e/')
+    ernqyvar.frg_pbzcyrgre(pbzcyrgre)
+    ernqyvar.cnefr_naq_ovaq("gno: pbzcyrgr")
+    yvarf = vachgvgre()
+
+sbe yvar va yvarf:
+    vs abg yvar.fgevc():
+        pbagvahr
+    jbeqf = [jbeq sbe (jbeqfgneg,jbeq) va fudhbgr.dhbgrfcyvg(yvar)]
+    pzq = jbeqf[0].ybjre()
+    #ybt('rkrphgr: %e %e\a' % (pzq, cnez))
+    gel:
+        vs pzq == 'yf':
+            sbe cnez va (jbeqf[1:] be ['.']):
+                qb_yf(cnez, cjq.erfbyir(cnez))
+        ryvs pzq == 'pq':
+            sbe cnez va jbeqf[1:]:
+                cjq = cjq.erfbyir(cnez)
+        ryvs pzq == 'cjq':
+            cevag cjq.shyyanzr()
+        ryvs pzq == 'png':
+            sbe cnez va jbeqf[1:]:
+                jevgr_gb_svyr(cjq.erfbyir(cnez).bcra(), flf.fgqbhg)
+        ryvs pzq == 'trg':
+            vs yra(jbeqf) abg va [2,3]:
+                envfr Rkprcgvba('Hfntr: trg <svyranzr> [ybpnyanzr]')
+            eanzr = jbeqf[1]
+            (qve,onfr) = bf.cngu.fcyvg(eanzr)
+            yanzr = yra(jbeqf)>2 naq jbeqf[2] be onfr
+            vas = cjq.erfbyir(eanzr).bcra()
+            ybt('Fnivat %e\a' % yanzr)
+            jevgr_gb_svyr(vas, bcra(yanzr, 'jo'))
+        ryvs pzq == 'ztrg':
+            sbe cnez va jbeqf[1:]:
+                (qve,onfr) = bf.cngu.fcyvg(cnez)
+                sbe a va cjq.erfbyir(qve).fhof():
+                    vs sazngpu.sazngpu(a.anzr, onfr):
+                        gel:
+                            ybt('Fnivat %e\a' % a.anzr)
+                            vas = a.bcra()
+                            bhgs = bcra(a.anzr, 'jo')
+                            jevgr_gb_svyr(vas, bhgs)
+                            bhgs.pybfr()
+                        rkprcg Rkprcgvba, r:
+                            ybt('  reebe: %f\a' % r)
+        ryvs pzq == 'uryc' be pzq == '?':
+            ybt('Pbzznaqf: yf pq cjq png trg ztrg uryc dhvg\a')
+        ryvs pzq == 'dhvg' be pzq == 'rkvg' be pzq == 'olr':
+            oernx
+        ryfr:
+            envfr Rkprcgvba('ab fhpu pbzznaq %e' % pzq)
+    rkprcg Rkprcgvba, r:
+        ybt('reebe: %f\a' % r)
+        #envfr
+#!/hfe/ova/rai clguba
+vzcbeg flf, zznc
+sebz ohc vzcbeg bcgvbaf, _unfufcyvg
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+ohc enaqbz [-F frrq] <ahzolgrf>
 --
-S,seed=   optional random number seed (default 1)
-f,force   print random data to stdout even if it's a tty
+F,frrq=   bcgvbany enaqbz ahzore frrq (qrsnhyg 1)
+s,sbepr   cevag enaqbz qngn gb fgqbhg rira vs vg'f n ggl
 """
-o = options.Options('bup random', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one argument expected")
-
-total = parse_num(extra[0])
-
-if opt.force or (not os.isatty(1) and
-                 not atoi(os.environ.get('BUP_FORCE_TTY')) & 1):
-    _hashsplit.write_random(sys.stdout.fileno(), total, opt.seed or 0)
-else:
-    log('error: not writing binary data to a terminal. Use -f to force.\n')
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, os, glob
-from bup import options
-
-optspec = """
-bup help <command>
+b = bcgvbaf.Bcgvbaf('ohc enaqbz', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar nethzrag rkcrpgrq")
+
+gbgny = cnefr_ahz(rkgen[0])
+
+vs bcg.sbepr be (abg bf.vfnggl(1) naq
+                 abg ngbv(bf.raiveba.trg('OHC_SBEPR_GGL')) & 1):
+    _unfufcyvg.jevgr_enaqbz(flf.fgqbhg.svyrab(), gbgny, bcg.frrq be 0)
+ryfr:
+    ybt('reebe: abg jevgvat ovanel qngn gb n grezvany. Hfr -s gb sbepr.\a')
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, tybo
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc uryc <pbzznaq>
 """
-o = options.Options('bup help', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) == 0:
-    # the wrapper program provides the default usage string
-    os.execvp(os.environ['BUP_MAIN_EXE'], ['bup'])
-elif len(extra) == 1:
-    docname = (extra[0]=='bup' and 'bup' or ('bup-%s' % extra[0]))
-    exe = sys.argv[0]
-    (exepath, exefile) = os.path.split(exe)
-    manpath = os.path.join(exepath, '../Documentation/' + docname + '.[1-9]')
-    g = glob.glob(manpath)
-    if g:
-        os.execvp('man', ['man', '-l', g[0]])
-    else:
-        os.execvp('man', ['man', docname])
-else:
-    o.fatal("exactly one command name expected")
-#!/usr/bin/env python
-import sys, os, stat, errno, fuse, re, time, tempfile
-from bup import options, git, vfs
-from bup.helpers import *
-
-
-class Stat(fuse.Stat):
-    def __init__(self):
-        self.st_mode = 0
-        self.st_ino = 0
-        self.st_dev = 0
-        self.st_nlink = 0
-        self.st_uid = 0
-        self.st_gid = 0
-        self.st_size = 0
-        self.st_atime = 0
-        self.st_mtime = 0
-        self.st_ctime = 0
-        self.st_blocks = 0
-        self.st_blksize = 0
-        self.st_rdev = 0
-
-
-cache = {}
-def cache_get(top, path):
-    parts = path.split('/')
-    cache[('',)] = top
-    c = None
-    max = len(parts)
-    #log('cache: %r\n' % cache.keys())
-    for i in range(max):
-        pre = parts[:max-i]
-        #log('cache trying: %r\n' % pre)
-        c = cache.get(tuple(pre))
-        if c:
-            rest = parts[max-i:]
-            for r in rest:
-                #log('resolving %r from %r\n' % (r, c.fullname()))
-                c = c.lresolve(r)
-                key = tuple(pre + [r])
-                #log('saving: %r\n' % (key,))
-                cache[key] = c
-            break
-    assert(c)
-    return c
+b = bcgvbaf.Bcgvbaf('ohc uryc', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) == 0:
+    # gur jenccre cebtenz cebivqrf gur qrsnhyg hfntr fgevat
+    bf.rkrpic(bf.raiveba['OHC_ZNVA_RKR'], ['ohc'])
+ryvs yra(rkgen) == 1:
+    qbpanzr = (rkgen[0]=='ohc' naq 'ohc' be ('ohc-%f' % rkgen[0]))
+    rkr = flf.neti[0]
+    (rkrcngu, rkrsvyr) = bf.cngu.fcyvg(rkr)
+    znacngu = bf.cngu.wbva(rkrcngu, '../Qbphzragngvba/' + qbpanzr + '.[1-9]')
+    t = tybo.tybo(znacngu)
+    vs t:
+        bf.rkrpic('zna', ['zna', '-y', t[0]])
+    ryfr:
+        bf.rkrpic('zna', ['zna', qbpanzr])
+ryfr:
+    b.sngny("rknpgyl bar pbzznaq anzr rkcrpgrq")
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgng, reeab, shfr, er, gvzr, grzcsvyr
+sebz ohc vzcbeg bcgvbaf, tvg, isf
+sebz ohc.urycref vzcbeg *
+
+
+pynff Fgng(shfr.Fgng):
+    qrs __vavg__(frys):
+        frys.fg_zbqr = 0
+        frys.fg_vab = 0
+        frys.fg_qri = 0
+        frys.fg_ayvax = 0
+        frys.fg_hvq = 0
+        frys.fg_tvq = 0
+        frys.fg_fvmr = 0
+        frys.fg_ngvzr = 0
+        frys.fg_zgvzr = 0
+        frys.fg_pgvzr = 0
+        frys.fg_oybpxf = 0
+        frys.fg_oyxfvmr = 0
+        frys.fg_eqri = 0
+
+
+pnpur = {}
+qrs pnpur_trg(gbc, cngu):
+    cnegf = cngu.fcyvg('/')
+    pnpur[('',)] = gbc
+    p = Abar
+    znk = yra(cnegf)
+    #ybt('pnpur: %e\a' % pnpur.xrlf())
+    sbe v va enatr(znk):
+        cer = cnegf[:znk-v]
+        #ybt('pnpur gelvat: %e\a' % cer)
+        p = pnpur.trg(ghcyr(cer))
+        vs p:
+            erfg = cnegf[znk-v:]
+            sbe e va erfg:
+                #ybt('erfbyivat %e sebz %e\a' % (e, p.shyyanzr()))
+                p = p.yerfbyir(e)
+                xrl = ghcyr(cer + [e])
+                #ybt('fnivat: %e\a' % (xrl,))
+                pnpur[xrl] = p
+            oernx
+    nffreg(p)
+    erghea p
         
     
 
-class BupFs(fuse.Fuse):
-    def __init__(self, top):
-        fuse.Fuse.__init__(self)
-        self.top = top
+pynff OhcSf(shfr.Shfr):
+    qrs __vavg__(frys, gbc):
+        shfr.Shfr.__vavg__(frys)
+        frys.gbc = gbc
     
-    def getattr(self, path):
-        log('--getattr(%r)\n' % path)
-        try:
-            node = cache_get(self.top, path)
-            st = Stat()
-            st.st_mode = node.mode
-            st.st_nlink = node.nlinks()
-            st.st_size = node.size()
-            st.st_mtime = node.mtime
-            st.st_ctime = node.ctime
-            st.st_atime = node.atime
-            return st
-        except vfs.NoSuchFile:
-            return -errno.ENOENT
-
-    def readdir(self, path, offset):
-        log('--readdir(%r)\n' % path)
-        node = cache_get(self.top, path)
-        yield fuse.Direntry('.')
-        yield fuse.Direntry('..')
-        for sub in node.subs():
-            yield fuse.Direntry(sub.name)
-
-    def readlink(self, path):
-        log('--readlink(%r)\n' % path)
-        node = cache_get(self.top, path)
-        return node.readlink()
-
-    def open(self, path, flags):
-        log('--open(%r)\n' % path)
-        node = cache_get(self.top, path)
-        accmode = os.O_RDONLY | os.O_WRONLY | os.O_RDWR
-        if (flags & accmode) != os.O_RDONLY:
-            return -errno.EACCES
-        node.open()
-
-    def release(self, path, flags):
-        log('--release(%r)\n' % path)
-
-    def read(self, path, size, offset):
-        log('--read(%r)\n' % path)
-        n = cache_get(self.top, path)
-        o = n.open()
-        o.seek(offset)
-        return o.read(size)
-
-
-if not hasattr(fuse, '__version__'):
-    raise RuntimeError, "your fuse module is too old for fuse.__version__"
-fuse.fuse_python_api = (0, 2)
-
-
-optspec = """
-bup fuse [-d] [-f] <mountpoint>
+    qrs trgngge(frys, cngu):
+        ybt('--trgngge(%e)\a' % cngu)
+        gel:
+            abqr = pnpur_trg(frys.gbc, cngu)
+            fg = Fgng()
+            fg.fg_zbqr = abqr.zbqr
+            fg.fg_ayvax = abqr.ayvaxf()
+            fg.fg_fvmr = abqr.fvmr()
+            fg.fg_zgvzr = abqr.zgvzr
+            fg.fg_pgvzr = abqr.pgvzr
+            fg.fg_ngvzr = abqr.ngvzr
+            erghea fg
+        rkprcg isf.AbFhpuSvyr:
+            erghea -reeab.RABRAG
+
+    qrs ernqqve(frys, cngu, bssfrg):
+        ybt('--ernqqve(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        lvryq shfr.Qveragel('.')
+        lvryq shfr.Qveragel('..')
+        sbe fho va abqr.fhof():
+            lvryq shfr.Qveragel(fho.anzr)
+
+    qrs ernqyvax(frys, cngu):
+        ybt('--ernqyvax(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        erghea abqr.ernqyvax()
+
+    qrs bcra(frys, cngu, syntf):
+        ybt('--bcra(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        nppzbqr = bf.B_EQBAYL | bf.B_JEBAYL | bf.B_EQJE
+        vs (syntf & nppzbqr) != bf.B_EQBAYL:
+            erghea -reeab.RNPPRF
+        abqr.bcra()
+
+    qrs eryrnfr(frys, cngu, syntf):
+        ybt('--eryrnfr(%e)\a' % cngu)
+
+    qrs ernq(frys, cngu, fvmr, bssfrg):
+        ybt('--ernq(%e)\a' % cngu)
+        a = pnpur_trg(frys.gbc, cngu)
+        b = a.bcra()
+        b.frrx(bssfrg)
+        erghea b.ernq(fvmr)
+
+
+vs abg unfngge(shfr, '__irefvba__'):
+    envfr EhagvzrReebe, "lbhe shfr zbqhyr vf gbb byq sbe shfr.__irefvba__"
+shfr.shfr_clguba_ncv = (0, 2)
+
+
+bcgfcrp = """
+ohc shfr [-q] [-s] <zbhagcbvag>
 --
-d,debug   increase debug level
-f,foreground  run in foreground
+q,qroht   vapernfr qroht yriry
+s,sbertebhaq  eha va sbertebhaq
 """
-o = options.Options('bup fuse', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one argument expected")
-
-git.check_repo_or_die()
-top = vfs.RefList(None)
-f = BupFs(top)
-f.fuse_args.mountpoint = extra[0]
-if opt.debug:
-    f.fuse_args.add('debug')
-if opt.foreground:
-    f.fuse_args.setmod('foreground')
-print f.multithreaded
-f.multithreaded = False
-
-f.main()
-#!/usr/bin/env python
-from bup import git, options, client
-from bup.helpers import *
-
-optspec = """
-[BUP_DIR=...] bup init [-r host:path]
+b = bcgvbaf.Bcgvbaf('ohc shfr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar nethzrag rkcrpgrq")
+
+tvg.purpx_ercb_be_qvr()
+gbc = isf.ErsYvfg(Abar)
+s = OhcSf(gbc)
+s.shfr_netf.zbhagcbvag = rkgen[0]
+vs bcg.qroht:
+    s.shfr_netf.nqq('qroht')
+vs bcg.sbertebhaq:
+    s.shfr_netf.frgzbq('sbertebhaq')
+cevag s.zhygvguernqrq
+s.zhygvguernqrq = Snyfr
+
+s.znva()
+#!/hfe/ova/rai clguba
+sebz ohc vzcbeg tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+[OHC_QVE=...] ohc vavg [-e ubfg:cngu]
 --
-r,remote=  remote repository path
+e,erzbgr=  erzbgr ercbfvgbel cngu
 """
-o = options.Options('bup init', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-
-if opt.remote:
-    git.init_repo()  # local repo
-    git.check_repo_or_die()
-    cli = client.Client(opt.remote, create=True)
-    cli.close()
-else:
-    git.init_repo()
-#!/usr/bin/env python
-import sys, math, struct, glob
-from bup import options, git
-from bup.helpers import *
-
-PAGE_SIZE=4096
-SHA_PER_PAGE=PAGE_SIZE/200.
-
-
-def merge(idxlist, bits, table):
-    count = 0
-    for e in git.idxmerge(idxlist):
-        count += 1
-        prefix = git.extract_bits(e, bits)
-        table[prefix] = count
-        yield e
-
-
-def do_midx(outdir, outfilename, infilenames):
-    if not outfilename:
-        assert(outdir)
-        sum = Sha1('\0'.join(infilenames)).hexdigest()
-        outfilename = '%s/midx-%s.midx' % (outdir, sum)
+b = bcgvbaf.Bcgvbaf('ohc vavg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+
+vs bcg.erzbgr:
+    tvg.vavg_ercb()  # ybpny ercb
+    tvg.purpx_ercb_be_qvr()
+    pyv = pyvrag.Pyvrag(bcg.erzbgr, perngr=Gehr)
+    pyv.pybfr()
+ryfr:
+    tvg.vavg_ercb()
+#!/hfe/ova/rai clguba
+vzcbeg flf, zngu, fgehpg, tybo
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+CNTR_FVMR=4096
+FUN_CRE_CNTR=CNTR_FVMR/200.
+
+
+qrs zretr(vqkyvfg, ovgf, gnoyr):
+    pbhag = 0
+    sbe r va tvg.vqkzretr(vqkyvfg):
+        pbhag += 1
+        cersvk = tvg.rkgenpg_ovgf(r, ovgf)
+        gnoyr[cersvk] = pbhag
+        lvryq r
+
+
+qrs qb_zvqk(bhgqve, bhgsvyranzr, vasvyranzrf):
+    vs abg bhgsvyranzr:
+        nffreg(bhgqve)
+        fhz = Fun1('\0'.wbva(vasvyranzrf)).urkqvtrfg()
+        bhgsvyranzr = '%f/zvqk-%f.zvqk' % (bhgqve, fhz)
     
-    inp = []
-    total = 0
-    for name in infilenames:
-        ix = git.PackIdx(name)
-        inp.append(ix)
-        total += len(ix)
-
-    log('Merging %d indexes (%d objects).\n' % (len(infilenames), total))
-    if (not opt.force and (total < 1024 and len(infilenames) < 3)) \
-       or (opt.force and not total):
-        log('midx: nothing to do.\n')
-        return
-
-    pages = int(total/SHA_PER_PAGE) or 1
-    bits = int(math.ceil(math.log(pages, 2)))
-    entries = 2**bits
-    log('Table size: %d (%d bits)\n' % (entries*4, bits))
+    vac = []
+    gbgny = 0
+    sbe anzr va vasvyranzrf:
+        vk = tvg.CnpxVqk(anzr)
+        vac.nccraq(vk)
+        gbgny += yra(vk)
+
+    ybt('Zretvat %q vaqrkrf (%q bowrpgf).\a' % (yra(vasvyranzrf), gbgny))
+    vs (abg bcg.sbepr naq (gbgny < 1024 naq yra(vasvyranzrf) < 3)) \
+       be (bcg.sbepr naq abg gbgny):
+        ybt('zvqk: abguvat gb qb.\a')
+        erghea
+
+    cntrf = vag(gbgny/FUN_CRE_CNTR) be 1
+    ovgf = vag(zngu.prvy(zngu.ybt(cntrf, 2)))
+    ragevrf = 2**ovgf
+    ybt('Gnoyr fvmr: %q (%q ovgf)\a' % (ragevrf*4, ovgf))
     
-    table = [0]*entries
-
-    try:
-        os.unlink(outfilename)
-    except OSError:
-        pass
-    f = open(outfilename + '.tmp', 'w+')
-    f.write('MIDX\0\0\0\2')
-    f.write(struct.pack('!I', bits))
-    assert(f.tell() == 12)
-    f.write('\0'*4*entries)
+    gnoyr = [0]*ragevrf
+
+    gel:
+        bf.hayvax(bhgsvyranzr)
+    rkprcg BFReebe:
+        cnff
+    s = bcra(bhgsvyranzr + '.gzc', 'j+')
+    s.jevgr('ZVQK\0\0\0\2')
+    s.jevgr(fgehpg.cnpx('!V', ovgf))
+    nffreg(s.gryy() == 12)
+    s.jevgr('\0'*4*ragevrf)
     
-    for e in merge(inp, bits, table):
-        f.write(e)
+    sbe r va zretr(vac, ovgf, gnoyr):
+        s.jevgr(r)
         
-    f.write('\0'.join(os.path.basename(p) for p in infilenames))
-
-    f.seek(12)
-    f.write(struct.pack('!%dI' % entries, *table))
-    f.close()
-    os.rename(outfilename + '.tmp', outfilename)
-
-    # this is just for testing
-    if 0:
-        p = git.PackMidx(outfilename)
-        assert(len(p.idxnames) == len(infilenames))
-        print p.idxnames
-        assert(len(p) == total)
-        pi = iter(p)
-        for i in merge(inp, total, bits, table):
-            assert(i == pi.next())
-            assert(p.exists(i))
-
-    print outfilename
-
-optspec = """
-bup midx [options...] <idxnames...>
+    s.jevgr('\0'.wbva(bf.cngu.onfranzr(c) sbe c va vasvyranzrf))
+
+    s.frrx(12)
+    s.jevgr(fgehpg.cnpx('!%qV' % ragevrf, *gnoyr))
+    s.pybfr()
+    bf.eranzr(bhgsvyranzr + '.gzc', bhgsvyranzr)
+
+    # guvf vf whfg sbe grfgvat
+    vs 0:
+        c = tvg.CnpxZvqk(bhgsvyranzr)
+        nffreg(yra(c.vqkanzrf) == yra(vasvyranzrf))
+        cevag c.vqkanzrf
+        nffreg(yra(c) == gbgny)
+        cv = vgre(c)
+        sbe v va zretr(vac, gbgny, ovgf, gnoyr):
+            nffreg(v == cv.arkg())
+            nffreg(c.rkvfgf(v))
+
+    cevag bhgsvyranzr
+
+bcgfcrp = """
+ohc zvqk [bcgvbaf...] <vqkanzrf...>
 --
-o,output=  output midx filename (default: auto-generated)
-a,auto     automatically create .midx from any unindexed .idx files
-f,force    automatically create .midx from *all* .idx files
+b,bhgchg=  bhgchg zvqk svyranzr (qrsnhyg: nhgb-trarengrq)
+n,nhgb     nhgbzngvpnyyl perngr .zvqk sebz nal havaqrkrq .vqk svyrf
+s,sbepr    nhgbzngvpnyyl perngr .zvqk sebz *nyy* .vqk svyrf
 """
-o = options.Options('bup midx', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra and (opt.auto or opt.force):
-    o.fatal("you can't use -f/-a and also provide filenames")
-
-git.check_repo_or_die()
-
-if extra:
-    do_midx(git.repo('objects/pack'), opt.output, extra)
-elif opt.auto or opt.force:
-    paths = [git.repo('objects/pack')]
-    paths += glob.glob(git.repo('index-cache/*/.'))
-    for path in paths:
-        log('midx: scanning %s\n' % path)
-        if opt.force:
-            do_midx(path, opt.output, glob.glob('%s/*.idx' % path))
-        elif opt.auto:
-            m = git.PackIdxList(path)
-            needed = {}
-            for pack in m.packs:  # only .idx files without a .midx are open
-                if pack.name.endswith('.idx'):
-                    needed[pack.name] = 1
-            del m
-            do_midx(path, opt.output, needed.keys())
-        log('\n')
-else:
-    o.fatal("you must use -f or -a or provide input filenames")
-#!/usr/bin/env python
-import sys, os, random
-from bup import options
-from bup.helpers import *
-
-
-def randblock(n):
-    l = []
-    for i in xrange(n):
-        l.append(chr(random.randrange(0,256)))
-    return ''.join(l)
-
-
-optspec = """
-bup damage [-n count] [-s maxsize] [-S seed] <filenames...>
+b = bcgvbaf.Bcgvbaf('ohc zvqk', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen naq (bcg.nhgb be bcg.sbepr):
+    b.sngny("lbh pna'g hfr -s/-n naq nyfb cebivqr svyranzrf")
+
+tvg.purpx_ercb_be_qvr()
+
+vs rkgen:
+    qb_zvqk(tvg.ercb('bowrpgf/cnpx'), bcg.bhgchg, rkgen)
+ryvs bcg.nhgb be bcg.sbepr:
+    cnguf = [tvg.ercb('bowrpgf/cnpx')]
+    cnguf += tybo.tybo(tvg.ercb('vaqrk-pnpur/*/.'))
+    sbe cngu va cnguf:
+        ybt('zvqk: fpnaavat %f\a' % cngu)
+        vs bcg.sbepr:
+            qb_zvqk(cngu, bcg.bhgchg, tybo.tybo('%f/*.vqk' % cngu))
+        ryvs bcg.nhgb:
+            z = tvg.CnpxVqkYvfg(cngu)
+            arrqrq = {}
+            sbe cnpx va z.cnpxf:  # bayl .vqk svyrf jvgubhg n .zvqk ner bcra
+                vs cnpx.anzr.raqfjvgu('.vqk'):
+                    arrqrq[cnpx.anzr] = 1
+            qry z
+            qb_zvqk(cngu, bcg.bhgchg, arrqrq.xrlf())
+        ybt('\a')
+ryfr:
+    b.sngny("lbh zhfg hfr -s be -n be cebivqr vachg svyranzrf")
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, enaqbz
+sebz ohc vzcbeg bcgvbaf
+sebz ohc.urycref vzcbeg *
+
+
+qrs enaqoybpx(a):
+    y = []
+    sbe v va kenatr(a):
+        y.nccraq(pue(enaqbz.enaqenatr(0,256)))
+    erghea ''.wbva(y)
+
+
+bcgfcrp = """
+ohc qnzntr [-a pbhag] [-f znkfvmr] [-F frrq] <svyranzrf...>
 --
-   WARNING: THIS COMMAND IS EXTREMELY DANGEROUS
-n,num=   number of blocks to damage
-s,size=  maximum size of each damaged block
-percent= maximum size of each damaged block (as a percent of entire file)
-equal    spread damage evenly throughout the file
-S,seed=  random number seed (for repeatable tests)
+   JNEAVAT: GUVF PBZZNAQ VF RKGERZRYL QNATREBHF
+a,ahz=   ahzore bs oybpxf gb qnzntr
+f,fvmr=  znkvzhz fvmr bs rnpu qnzntrq oybpx
+creprag= znkvzhz fvmr bs rnpu qnzntrq oybpx (nf n creprag bs ragver svyr)
+rdhny    fcernq qnzntr rirayl guebhtubhg gur svyr
+F,frrq=  enaqbz ahzore frrq (sbe ercrngnoyr grfgf)
 """
-o = options.Options('bup damage', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if not extra:
-    o.fatal('filenames expected')
-
-if opt.seed != None:
-    random.seed(opt.seed)
-
-for name in extra:
-    log('Damaging "%s"...\n' % name)
-    f = open(name, 'r+b')
-    st = os.fstat(f.fileno())
-    size = st.st_size
-    if opt.percent or opt.size:
-        ms1 = int(float(opt.percent or 0)/100.0*size) or size
-        ms2 = opt.size or size
-        maxsize = min(ms1, ms2)
-    else:
-        maxsize = 1
-    chunks = opt.num or 10
-    chunksize = size/chunks
-    for r in range(chunks):
-        sz = random.randrange(1, maxsize+1)
-        if sz > size:
-            sz = size
-        if opt.equal:
-            ofs = r*chunksize
-        else:
-            ofs = random.randrange(0, size - sz + 1)
-        log('  %6d bytes at %d\n' % (sz, ofs))
-        f.seek(ofs)
-        f.write(randblock(sz))
-    f.close()
-#!/usr/bin/env python
-import sys, struct, mmap
-from bup import options, git
-from bup.helpers import *
-
-suspended_w = None
-
-
-def init_dir(conn, arg):
-    git.init_repo(arg)
-    log('bup server: bupdir initialized: %r\n' % git.repodir)
-    conn.ok()
-
-
-def set_dir(conn, arg):
-    git.check_repo_or_die(arg)
-    log('bup server: bupdir is %r\n' % git.repodir)
-    conn.ok()
+b = bcgvbaf.Bcgvbaf('ohc qnzntr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs abg rkgen:
+    b.sngny('svyranzrf rkcrpgrq')
+
+vs bcg.frrq != Abar:
+    enaqbz.frrq(bcg.frrq)
+
+sbe anzr va rkgen:
+    ybt('Qnzntvat "%f"...\a' % anzr)
+    s = bcra(anzr, 'e+o')
+    fg = bf.sfgng(s.svyrab())
+    fvmr = fg.fg_fvmr
+    vs bcg.creprag be bcg.fvmr:
+        zf1 = vag(sybng(bcg.creprag be 0)/100.0*fvmr) be fvmr
+        zf2 = bcg.fvmr be fvmr
+        znkfvmr = zva(zf1, zf2)
+    ryfr:
+        znkfvmr = 1
+    puhaxf = bcg.ahz be 10
+    puhaxfvmr = fvmr/puhaxf
+    sbe e va enatr(puhaxf):
+        fm = enaqbz.enaqenatr(1, znkfvmr+1)
+        vs fm > fvmr:
+            fm = fvmr
+        vs bcg.rdhny:
+            bsf = e*puhaxfvmr
+        ryfr:
+            bsf = enaqbz.enaqenatr(0, fvmr - fm + 1)
+        ybt('  %6q olgrf ng %q\a' % (fm, bsf))
+        s.frrx(bsf)
+        s.jevgr(enaqoybpx(fm))
+    s.pybfr()
+#!/hfe/ova/rai clguba
+vzcbeg flf, fgehpg, zznc
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+fhfcraqrq_j = Abar
+
+
+qrs vavg_qve(pbaa, net):
+    tvg.vavg_ercb(net)
+    ybt('ohc freire: ohcqve vavgvnyvmrq: %e\a' % tvg.ercbqve)
+    pbaa.bx()
+
+
+qrs frg_qve(pbaa, net):
+    tvg.purpx_ercb_be_qvr(net)
+    ybt('ohc freire: ohcqve vf %e\a' % tvg.ercbqve)
+    pbaa.bx()
 
     
-def list_indexes(conn, junk):
-    git.check_repo_or_die()
-    for f in os.listdir(git.repo('objects/pack')):
-        if f.endswith('.idx'):
-            conn.write('%s\n' % f)
-    conn.ok()
-
-
-def send_index(conn, name):
-    git.check_repo_or_die()
-    assert(name.find('/') < 0)
-    assert(name.endswith('.idx'))
-    idx = git.PackIdx(git.repo('objects/pack/%s' % name))
-    conn.write(struct.pack('!I', len(idx.map)))
-    conn.write(idx.map)
-    conn.ok()
-
-
-def receive_objects(conn, junk):
-    global suspended_w
-    git.check_repo_or_die()
-    suggested = {}
-    if suspended_w:
-        w = suspended_w
-        suspended_w = None
-    else:
-        w = git.PackWriter()
-    while 1:
-        ns = conn.read(4)
-        if not ns:
-            w.abort()
-            raise Exception('object read: expected length header, got EOF\n')
-        n = struct.unpack('!I', ns)[0]
-        #log('expecting %d bytes\n' % n)
-        if not n:
-            log('bup server: received %d object%s.\n
-                % (w.count, w.count!=1 and "s" or ''))
-            fullpath = w.close()
-            if fullpath:
-                (dir, name) = os.path.split(fullpath)
-                conn.write('%s.idx\n' % name)
-            conn.ok()
-            return
-        elif n == 0xffffffff:
-            log('bup server: receive-objects suspended.\n')
-            suspended_w = w
-            conn.ok()
-            return
+qrs yvfg_vaqrkrf(pbaa, whax):
+    tvg.purpx_ercb_be_qvr()
+    sbe s va bf.yvfgqve(tvg.ercb('bowrpgf/cnpx')):
+        vs s.raqfjvgu('.vqk'):
+            pbaa.jevgr('%f\a' % s)
+    pbaa.bx()
+
+
+qrs fraq_vaqrk(pbaa, anzr):
+    tvg.purpx_ercb_be_qvr()
+    nffreg(anzr.svaq('/') < 0)
+    nffreg(anzr.raqfjvgu('.vqk'))
+    vqk = tvg.CnpxVqk(tvg.ercb('bowrpgf/cnpx/%f' % anzr))
+    pbaa.jevgr(fgehpg.cnpx('!V', yra(vqk.znc)))
+    pbaa.jevgr(vqk.znc)
+    pbaa.bx()
+
+
+qrs erprvir_bowrpgf(pbaa, whax):
+    tybony fhfcraqrq_j
+    tvg.purpx_ercb_be_qvr()
+    fhttrfgrq = {}
+    vs fhfcraqrq_j:
+        j = fhfcraqrq_j
+        fhfcraqrq_j = Abar
+    ryfr:
+        j = tvg.CnpxJevgre()
+    juvyr 1:
+        af = pbaa.ernq(4)
+        vs abg af:
+            j.nobeg()
+            envfr Rkprcgvba('bowrpg ernq: rkcrpgrq yratgu urnqre, tbg RBS\a')
+        a = fgehpg.hacnpx('!V', af)[0]
+        #ybt('rkcrpgvat %q olgrf\a' % a)
+        vs abg a:
+            ybt('ohc freire: erprvirq %q bowrpg%f.\a
+                % (j.pbhag, j.pbhag!=1 naq "f" be ''))
+            shyycngu = j.pybfr()
+            vs shyycngu:
+                (qve, anzr) = bf.cngu.fcyvg(shyycngu)
+                pbaa.jevgr('%f.vqk\a' % anzr)
+            pbaa.bx()
+            erghea
+        ryvs a == 0kssssssss:
+            ybt('ohc freire: erprvir-bowrpgf fhfcraqrq.\a')
+            fhfcraqrq_j = j
+            pbaa.bx()
+            erghea
             
-        buf = conn.read(n)  # object sizes in bup are reasonably small
-        #log('read %d bytes\n' % n)
-        if len(buf) < n:
-            w.abort()
-            raise Exception('object read: expected %d bytes, got %d\n'
-                            % (n, len(buf)))
-        (type, content) = git._decode_packobj(buf)
-        sha = git.calc_hash(type, content)
-        oldpack = w.exists(sha)
-        # FIXME: we only suggest a single index per cycle, because the client
-        # is currently dumb to download more than one per cycle anyway.
-        # Actually we should fix the client, but this is a minor optimization
-        # on the server side.
-        if not suggested and \
-          oldpack and (oldpack == True or oldpack.endswith('.midx')):
-            # FIXME: we shouldn't really have to know about midx files
-            # at this layer.  But exists() on a midx doesn't return the
-            # packname (since it doesn't know)... probably we should just
-            # fix that deficiency of midx files eventually, although it'll
-            # make the files bigger.  This method is certainly not very
-            # efficient.
-            w.objcache.refresh(skip_midx = True)
-            oldpack = w.objcache.exists(sha)
-            log('new suggestion: %r\n' % oldpack)
-            assert(oldpack)
-            assert(oldpack != True)
-            assert(not oldpack.endswith('.midx'))
-            w.objcache.refresh(skip_midx = False)
-        if not suggested and oldpack:
-            assert(oldpack.endswith('.idx'))
-            (dir,name) = os.path.split(oldpack)
-            if not (name in suggested):
-                log("bup server: suggesting index %s\n" % name)
-                conn.write('index %s\n' % name)
-                suggested[name] = 1
-        else:
-            w._raw_write([buf])
-    # NOTREACHED
-
-
-def read_ref(conn, refname):
-    git.check_repo_or_die()
-    r = git.read_ref(refname)
-    conn.write('%s\n' % (r or '').encode('hex'))
-    conn.ok()
-
-
-def update_ref(conn, refname):
-    git.check_repo_or_die()
-    newval = conn.readline().strip()
-    oldval = conn.readline().strip()
-    git.update_ref(refname, newval.decode('hex'), oldval.decode('hex'))
-    conn.ok()
-
-
-def cat(conn, id):
-    git.check_repo_or_die()
-    try:
-        for blob in git.cat(id):
-            conn.write(struct.pack('!I', len(blob)))
-            conn.write(blob)
-    except KeyError, e:
-        log('server: error: %s\n' % e)
-        conn.write('\0\0\0\0')
-        conn.error(e)
-    else:
-        conn.write('\0\0\0\0')
-        conn.ok()
-
-
-optspec = """
-bup server
+        ohs = pbaa.ernq(a)  # bowrpg fvmrf va ohc ner ernfbanoyl fznyy
+        #ybt('ernq %q olgrf\a' % a)
+        vs yra(ohs) < a:
+            j.nobeg()
+            envfr Rkprcgvba('bowrpg ernq: rkcrpgrq %q olgrf, tbg %q\a'
+                            % (a, yra(ohs)))
+        (glcr, pbagrag) = tvg._qrpbqr_cnpxbow(ohs)
+        fun = tvg.pnyp_unfu(glcr, pbagrag)
+        byqcnpx = j.rkvfgf(fun)
+        # SVKZR: jr bayl fhttrfg n fvatyr vaqrk cre plpyr, orpnhfr gur pyvrag
+        # vf pheeragyl qhzo gb qbjaybnq zber guna bar cre plpyr naljnl.
+        # Npghnyyl jr fubhyq svk gur pyvrag, ohg guvf vf n zvabe bcgvzvmngvba
+        # ba gur freire fvqr.
+        vs abg fhttrfgrq naq \
+          byqcnpx naq (byqcnpx == Gehr be byqcnpx.raqfjvgu('.zvqk')):
+            # SVKZR: jr fubhyqa'g ernyyl unir gb xabj nobhg zvqk svyrf
+            # ng guvf ynlre.  Ohg rkvfgf() ba n zvqk qbrfa'g erghea gur
+            # cnpxanzr (fvapr vg qbrfa'g xabj)... cebonoyl jr fubhyq whfg
+            # svk gung qrsvpvrapl bs zvqk svyrf riraghnyyl, nygubhtu vg'yy
+            # znxr gur svyrf ovttre.  Guvf zrgubq vf pregnvayl abg irel
+            # rssvpvrag.
+            j.bowpnpur.erserfu(fxvc_zvqk = Gehr)
+            byqcnpx = j.bowpnpur.rkvfgf(fun)
+            ybt('arj fhttrfgvba: %e\a' % byqcnpx)
+            nffreg(byqcnpx)
+            nffreg(byqcnpx != Gehr)
+            nffreg(abg byqcnpx.raqfjvgu('.zvqk'))
+            j.bowpnpur.erserfu(fxvc_zvqk = Snyfr)
+        vs abg fhttrfgrq naq byqcnpx:
+            nffreg(byqcnpx.raqfjvgu('.vqk'))
+            (qve,anzr) = bf.cngu.fcyvg(byqcnpx)
+            vs abg (anzr va fhttrfgrq):
+                ybt("ohc freire: fhttrfgvat vaqrk %f\a" % anzr)
+                pbaa.jevgr('vaqrk %f\a' % anzr)
+                fhttrfgrq[anzr] = 1
+        ryfr:
+            j._enj_jevgr([ohs])
+    # ABGERNPURQ
+
+
+qrs ernq_ers(pbaa, ersanzr):
+    tvg.purpx_ercb_be_qvr()
+    e = tvg.ernq_ers(ersanzr)
+    pbaa.jevgr('%f\a' % (e be '').rapbqr('urk'))
+    pbaa.bx()
+
+
+qrs hcqngr_ers(pbaa, ersanzr):
+    tvg.purpx_ercb_be_qvr()
+    arjiny = pbaa.ernqyvar().fgevc()
+    byqiny = pbaa.ernqyvar().fgevc()
+    tvg.hcqngr_ers(ersanzr, arjiny.qrpbqr('urk'), byqiny.qrpbqr('urk'))
+    pbaa.bx()
+
+
+qrs png(pbaa, vq):
+    tvg.purpx_ercb_be_qvr()
+    gel:
+        sbe oybo va tvg.png(vq):
+            pbaa.jevgr(fgehpg.cnpx('!V', yra(oybo)))
+            pbaa.jevgr(oybo)
+    rkprcg XrlReebe, r:
+        ybt('freire: reebe: %f\a' % r)
+        pbaa.jevgr('\0\0\0\0')
+        pbaa.reebe(r)
+    ryfr:
+        pbaa.jevgr('\0\0\0\0')
+        pbaa.bx()
+
+
+bcgfcrp = """
+ohc freire
 """
-o = options.Options('bup server', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal('no arguments expected')
-
-log('bup server: reading from stdin.\n')
-
-commands = {
-    'init-dir': init_dir,
-    'set-dir': set_dir,
-    'list-indexes': list_indexes,
-    'send-index': send_index,
-    'receive-objects': receive_objects,
-    'read-ref': read_ref,
-    'update-ref': update_ref,
-    'cat': cat,
+b = bcgvbaf.Bcgvbaf('ohc freire', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+ybt('ohc freire: ernqvat sebz fgqva.\a')
+
+pbzznaqf = {
+    'vavg-qve': vavg_qve,
+    'frg-qve': frg_qve,
+    'yvfg-vaqrkrf': yvfg_vaqrkrf,
+    'fraq-vaqrk': fraq_vaqrk,
+    'erprvir-bowrpgf': erprvir_bowrpgf,
+    'ernq-ers': ernq_ers,
+    'hcqngr-ers': hcqngr_ers,
+    'png': png,
 }
 
-# FIXME: this protocol is totally lame and not at all future-proof.
-# (Especially since we abort completely as soon as *anything* bad happens)
-conn = Conn(sys.stdin, sys.stdout)
-lr = linereader(conn)
-for _line in lr:
-    line = _line.strip()
-    if not line:
-        continue
-    log('bup server: command: %r\n' % line)
-    words = line.split(' ', 1)
-    cmd = words[0]
-    rest = len(words)>1 and words[1] or ''
-    if cmd == 'quit':
-        break
-    else:
-        cmd = commands.get(cmd)
-        if cmd:
-            cmd(conn, rest)
-        else:
-            raise Exception('unknown server command: %r\n' % line)
-
-log('bup server: done\n')
-#!/usr/bin/env python
-import sys, time, struct
-from bup import hashsplit, git, options, client
-from bup.helpers import *
-from subprocess import PIPE
-
-
-optspec = """
-bup join [-r host:path] [refs or hashes...]
+# SVKZR: guvf cebgbpby vf gbgnyyl ynzr naq abg ng nyy shgher-cebbs.
+# (Rfcrpvnyyl fvapr jr nobeg pbzcyrgryl nf fbba nf *nalguvat* onq unccraf)
+pbaa = Pbaa(flf.fgqva, flf.fgqbhg)
+ye = yvarernqre(pbaa)
+sbe _yvar va ye:
+    yvar = _yvar.fgevc()
+    vs abg yvar:
+        pbagvahr
+    ybt('ohc freire: pbzznaq: %e\a' % yvar)
+    jbeqf = yvar.fcyvg(' ', 1)
+    pzq = jbeqf[0]
+    erfg = yra(jbeqf)>1 naq jbeqf[1] be ''
+    vs pzq == 'dhvg':
+        oernx
+    ryfr:
+        pzq = pbzznaqf.trg(pzq)
+        vs pzq:
+            pzq(pbaa, erfg)
+        ryfr:
+            envfr Rkprcgvba('haxabja freire pbzznaq: %e\a' % yvar)
+
+ybt('ohc freire: qbar\a')
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr, fgehpg
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+sebz fhocebprff vzcbeg CVCR
+
+
+bcgfcrp = """
+ohc wbva [-e ubfg:cngu] [ersf be unfurf...]
 --
-r,remote=  remote repository path
+e,erzbgr=  erzbgr ercbfvgbel cngu
 """
-o = options.Options('bup join', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
+b = bcgvbaf.Bcgvbaf('ohc wbva', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
 
-git.check_repo_or_die()
+tvg.purpx_ercb_be_qvr()
 
-if not extra:
-    extra = linereader(sys.stdin)
+vs abg rkgen:
+    rkgen = yvarernqre(flf.fgqva)
 
-ret = 0
+erg = 0
 
-if opt.remote:
-    cli = client.Client(opt.remote)
-    cat = cli.cat
-else:
-    cp = git.CatPipe()
-    cat = cp.join
+vs bcg.erzbgr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    png = pyv.png
+ryfr:
+    pc = tvg.PngCvcr()
+    png = pc.wbva
 
-for id in extra:
-    try:
-        for blob in cat(id):
-            sys.stdout.write(blob)
-    except KeyError, e:
-        sys.stdout.flush()
-        log('error: %s\n' % e)
-        ret = 1
+sbe vq va rkgen:
+    gel:
+        sbe oybo va png(vq):
+            flf.fgqbhg.jevgr(oybo)
+    rkprcg XrlReebe, r:
+        flf.fgqbhg.syhfu()
+        ybt('reebe: %f\a' % r)
+        erg = 1
 
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, re, errno, stat, time, math
-from bup import hashsplit, git, options, index, client
-from bup.helpers import *
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, er, reeab, fgng, gvzr, zngu
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, vaqrk, pyvrag
+sebz ohc.urycref vzcbeg *
 
 
-optspec = """
-bup save [-tc] [-n name] <filenames...>
+bcgfcrp = """
+ohc fnir [-gp] [-a anzr] <svyranzrf...>
 --
-r,remote=  remote repository path
-t,tree     output a tree id
-c,commit   output a commit id
-n,name=    name of backup set to update (if any)
-v,verbose  increase log output (can be used more than once)
-q,quiet    don't show progress meter
-smaller=   only back up files smaller than n bytes
+e,erzbgr=  erzbgr ercbfvgbel cngu
+g,gerr     bhgchg n gerr vq
+p,pbzzvg   bhgchg n pbzzvg vq
+a,anzr=    anzr bs onpxhc frg gb hcqngr (vs nal)
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
+d,dhvrg    qba'g fubj cebterff zrgre
+fznyyre=   bayl onpx hc svyrf fznyyre guna a olgrf
 """
-o = options.Options('bup save', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-if not (opt.tree or opt.commit or opt.name):
-    o.fatal("use one or more of -t, -c, -n")
-if not extra:
-    o.fatal("no filenames given")
-
-opt.progress = (istty and not opt.quiet)
-opt.smaller = parse_num(opt.smaller or 0)
-
-is_reverse = os.environ.get('BUP_SERVER_REVERSE')
-if is_reverse and opt.remote:
-    o.fatal("don't use -r in reverse mode; it's automatic")
-
-refname = opt.name and 'refs/heads/%s' % opt.name or None
-if opt.remote or is_reverse:
-    cli = client.Client(opt.remote)
-    oldref = refname and cli.read_ref(refname) or None
-    w = cli.new_packwriter()
-else:
-    cli = None
-    oldref = refname and git.read_ref(refname) or None
-    w = git.PackWriter()
-
-handle_ctrl_c()
-
-
-def eatslash(dir):
-    if dir.endswith('/'):
-        return dir[:-1]
-    else:
-        return dir
-
-
-parts = ['']
-shalists = [[]]
-
-def _push(part):
-    assert(part)
-    parts.append(part)
-    shalists.append([])
-
-def _pop(force_tree):
-    assert(len(parts) >= 1)
-    part = parts.pop()
-    shalist = shalists.pop()
-    tree = force_tree or w.new_tree(shalist)
-    if shalists:
-        shalists[-1].append(('40000', part, tree))
-    else:  # this was the toplevel, so put it back for sanity
-        shalists.append(shalist)
-    return tree
-
-lastremain = None
-def progress_report(n):
-    global count, subcount, lastremain
-    subcount += n
-    cc = count + subcount
-    pct = total and (cc*100.0/total) or 0
-    now = time.time()
-    elapsed = now - tstart
-    kps = elapsed and int(cc/1024./elapsed)
-    kps_frac = 10 ** int(math.log(kps+1, 10) - 1)
-    kps = int(kps/kps_frac)*kps_frac
-    if cc:
-        remain = elapsed*1.0/cc * (total-cc)
-    else:
-        remain = 0.0
-    if (lastremain and (remain > lastremain)
-          and ((remain - lastremain)/lastremain < 0.05)):
-        remain = lastremain
-    else:
-        lastremain = remain
-    hours = int(remain/60/60)
-    mins = int(remain/60 - hours*60)
-    secs = int(remain - hours*60*60 - mins*60)
-    if elapsed < 30:
-        remainstr = ''
-        kpsstr = ''
-    else:
-        kpsstr = '%dk/s' % kps
-        if hours:
-            remainstr = '%dh%dm' % (hours, mins)
-        elif mins:
-            remainstr = '%dm%d' % (mins, secs)
-        else:
-            remainstr = '%ds' % secs
-    progress('Saving: %.2f%% (%d/%dk, %d/%d files) %s %s\r'
-             % (pct, cc/1024, total/1024, fcount, ftotal,
-                remainstr, kpsstr))
-
-
-r = index.Reader(git.repo('bupindex'))
-
-def already_saved(ent):
-    return ent.is_valid() and w.exists(ent.sha) and ent.sha
-
-def wantrecurse_pre(ent):
-    return not already_saved(ent)
-
-def wantrecurse_during(ent):
-    return not already_saved(ent) or ent.sha_missing()
-
-total = ftotal = 0
-if opt.progress:
-    for (transname,ent) in r.filter(extra, wantrecurse=wantrecurse_pre):
-        if not (ftotal % 10024):
-            progress('Reading index: %d\r' % ftotal)
-        exists = ent.exists()
-        hashvalid = already_saved(ent)
-        ent.set_sha_missing(not hashvalid)
-        if not opt.smaller or ent.size < opt.smaller:
-            if exists and not hashvalid:
-                total += ent.size
-        ftotal += 1
-    progress('Reading index: %d, done.\n' % ftotal)
-    hashsplit.progress_callback = progress_report
-
-tstart = time.time()
-count = subcount = fcount = 0
-lastskip_name = None
-lastdir = ''
-for (transname,ent) in r.filter(extra, wantrecurse=wantrecurse_during):
-    (dir, file) = os.path.split(ent.name)
-    exists = (ent.flags & index.IX_EXISTS)
-    hashvalid = already_saved(ent)
-    wasmissing = ent.sha_missing()
-    oldsize = ent.size
-    if opt.verbose:
-        if not exists:
-            status = 'D'
-        elif not hashvalid:
-            if ent.sha == index.EMPTY_SHA:
-                status = 'A'
-            else:
-                status = 'M'
-        else:
-            status = ' '
-        if opt.verbose >= 2:
-            log('%s %-70s\n' % (status, ent.name))
-        elif not stat.S_ISDIR(ent.mode) and lastdir != dir:
-            if not lastdir.startswith(dir):
-                log('%s %-70s\n' % (status, os.path.join(dir, '')))
-            lastdir = dir
-
-    if opt.progress:
-        progress_report(0)
-    fcount += 1
+b = bcgvbaf.Bcgvbaf('ohc fnir', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+vs abg (bcg.gerr be bcg.pbzzvg be bcg.anzr):
+    b.sngny("hfr bar be zber bs -g, -p, -a")
+vs abg rkgen:
+    b.sngny("ab svyranzrf tvira")
+
+bcg.cebterff = (vfggl naq abg bcg.dhvrg)
+bcg.fznyyre = cnefr_ahz(bcg.fznyyre be 0)
+
+vf_erirefr = bf.raiveba.trg('OHC_FREIRE_ERIREFR')
+vs vf_erirefr naq bcg.erzbgr:
+    b.sngny("qba'g hfr -e va erirefr zbqr; vg'f nhgbzngvp")
+
+ersanzr = bcg.anzr naq 'ersf/urnqf/%f' % bcg.anzr be Abar
+vs bcg.erzbgr be vf_erirefr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    byqers = ersanzr naq pyv.ernq_ers(ersanzr) be Abar
+    j = pyv.arj_cnpxjevgre()
+ryfr:
+    pyv = Abar
+    byqers = ersanzr naq tvg.ernq_ers(ersanzr) be Abar
+    j = tvg.CnpxJevgre()
+
+unaqyr_pgey_p()
+
+
+qrs rngfynfu(qve):
+    vs qve.raqfjvgu('/'):
+        erghea qve[:-1]
+    ryfr:
+        erghea qve
+
+
+cnegf = ['']
+funyvfgf = [[]]
+
+qrs _chfu(cneg):
+    nffreg(cneg)
+    cnegf.nccraq(cneg)
+    funyvfgf.nccraq([])
+
+qrs _cbc(sbepr_gerr):
+    nffreg(yra(cnegf) >= 1)
+    cneg = cnegf.cbc()
+    funyvfg = funyvfgf.cbc()
+    gerr = sbepr_gerr be j.arj_gerr(funyvfg)
+    vs funyvfgf:
+        funyvfgf[-1].nccraq(('40000', cneg, gerr))
+    ryfr:  # guvf jnf gur gbcyriry, fb chg vg onpx sbe fnavgl
+        funyvfgf.nccraq(funyvfg)
+    erghea gerr
+
+ynfgerznva = Abar
+qrs cebterff_ercbeg(a):
+    tybony pbhag, fhopbhag, ynfgerznva
+    fhopbhag += a
+    pp = pbhag + fhopbhag
+    cpg = gbgny naq (pp*100.0/gbgny) be 0
+    abj = gvzr.gvzr()
+    ryncfrq = abj - gfgneg
+    xcf = ryncfrq naq vag(pp/1024./ryncfrq)
+    xcf_senp = 10 ** vag(zngu.ybt(xcf+1, 10) - 1)
+    xcf = vag(xcf/xcf_senp)*xcf_senp
+    vs pp:
+        erznva = ryncfrq*1.0/pp * (gbgny-pp)
+    ryfr:
+        erznva = 0.0
+    vs (ynfgerznva naq (erznva > ynfgerznva)
+          naq ((erznva - ynfgerznva)/ynfgerznva < 0.05)):
+        erznva = ynfgerznva
+    ryfr:
+        ynfgerznva = erznva
+    ubhef = vag(erznva/60/60)
+    zvaf = vag(erznva/60 - ubhef*60)
+    frpf = vag(erznva - ubhef*60*60 - zvaf*60)
+    vs ryncfrq < 30:
+        erznvafge = ''
+        xcffge = ''
+    ryfr:
+        xcffge = '%qx/f' % xcf
+        vs ubhef:
+            erznvafge = '%qu%qz' % (ubhef, zvaf)
+        ryvs zvaf:
+            erznvafge = '%qz%q' % (zvaf, frpf)
+        ryfr:
+            erznvafge = '%qf' % frpf
+    cebterff('Fnivat: %.2s%% (%q/%qx, %q/%q svyrf) %f %f\e'
+             % (cpg, pp/1024, gbgny/1024, spbhag, sgbgny,
+                erznvafge, xcffge))
+
+
+e = vaqrk.Ernqre(tvg.ercb('ohcvaqrk'))
+
+qrs nyernql_fnirq(rag):
+    erghea rag.vf_inyvq() naq j.rkvfgf(rag.fun) naq rag.fun
+
+qrs jnagerphefr_cer(rag):
+    erghea abg nyernql_fnirq(rag)
+
+qrs jnagerphefr_qhevat(rag):
+    erghea abg nyernql_fnirq(rag) be rag.fun_zvffvat()
+
+gbgny = sgbgny = 0
+vs bcg.cebterff:
+    sbe (genafanzr,rag) va e.svygre(rkgen, jnagerphefr=jnagerphefr_cer):
+        vs abg (sgbgny % 10024):
+            cebterff('Ernqvat vaqrk: %q\e' % sgbgny)
+        rkvfgf = rag.rkvfgf()
+        unfuinyvq = nyernql_fnirq(rag)
+        rag.frg_fun_zvffvat(abg unfuinyvq)
+        vs abg bcg.fznyyre be rag.fvmr < bcg.fznyyre:
+            vs rkvfgf naq abg unfuinyvq:
+                gbgny += rag.fvmr
+        sgbgny += 1
+    cebterff('Ernqvat vaqrk: %q, qbar.\a' % sgbgny)
+    unfufcyvg.cebterff_pnyyonpx = cebterff_ercbeg
+
+gfgneg = gvzr.gvzr()
+pbhag = fhopbhag = spbhag = 0
+ynfgfxvc_anzr = Abar
+ynfgqve = ''
+sbe (genafanzr,rag) va e.svygre(rkgen, jnagerphefr=jnagerphefr_qhevat):
+    (qve, svyr) = bf.cngu.fcyvg(rag.anzr)
+    rkvfgf = (rag.syntf & vaqrk.VK_RKVFGF)
+    unfuinyvq = nyernql_fnirq(rag)
+    jnfzvffvat = rag.fun_zvffvat()
+    byqfvmr = rag.fvmr
+    vs bcg.ireobfr:
+        vs abg rkvfgf:
+            fgnghf = 'Q'
+        ryvs abg unfuinyvq:
+            vs rag.fun == vaqrk.RZCGL_FUN:
+                fgnghf = 'N'
+            ryfr:
+                fgnghf = 'Z'
+        ryfr:
+            fgnghf = ' '
+        vs bcg.ireobfr >= 2:
+            ybt('%f %-70f\a' % (fgnghf, rag.anzr))
+        ryvs abg fgng.F_VFQVE(rag.zbqr) naq ynfgqve != qve:
+            vs abg ynfgqve.fgnegfjvgu(qve):
+                ybt('%f %-70f\a' % (fgnghf, bf.cngu.wbva(qve, '')))
+            ynfgqve = qve
+
+    vs bcg.cebterff:
+        cebterff_ercbeg(0)
+    spbhag += 1
     
-    if not exists:
-        continue
-    if opt.smaller and ent.size >= opt.smaller:
-        if exists and not hashvalid:
-            add_error('skipping large file "%s"' % ent.name)
-            lastskip_name = ent.name
-        continue
-
-    assert(dir.startswith('/'))
-    dirp = dir.split('/')
-    while parts > dirp:
-        _pop(force_tree = None)
-    if dir != '/':
-        for part in dirp[len(parts):]:
-            _push(part)
-
-    if not file:
-        # no filename portion means this is a subdir.  But
-        # sub/parentdirectories already handled in the pop/push() part above.
-        oldtree = already_saved(ent) # may be None
-        newtree = _pop(force_tree = oldtree)
-        if not oldtree:
-            if lastskip_name and lastskip_name.startswith(ent.name):
-                ent.invalidate()
-            else:
-                ent.validate(040000, newtree)
-            ent.repack()
-        if exists and wasmissing:
-            count += oldsize
-        continue
-
-    # it's not a directory
-    id = None
-    if hashvalid:
-        mode = '%o' % ent.gitmode
-        id = ent.sha
-        shalists[-1].append((mode
-                             git.mangle_name(file, ent.mode, ent.gitmode),
-                             id))
-    else:
-        if stat.S_ISREG(ent.mode):
-            try:
-                f = hashsplit.open_noatime(ent.name)
-            except IOError, e:
-                add_error(e)
-                lastskip_name = ent.name
-            except OSError, e:
-                add_error(e)
-                lastskip_name = ent.name
-            else:
-                (mode, id) = hashsplit.split_to_blob_or_tree(w, [f])
-        else:
-            if stat.S_ISDIR(ent.mode):
-                assert(0)  # handled above
-            elif stat.S_ISLNK(ent.mode):
-                try:
-                    rl = os.readlink(ent.name)
-                except OSError, e:
-                    add_error(e)
-                    lastskip_name = ent.name
-                except IOError, e:
-                    add_error(e)
-                    lastskip_name = ent.name
-                else:
-                    (mode, id) = ('120000', w.new_blob(rl))
-            else:
-                add_error(Exception('skipping special file "%s"' % ent.name))
-                lastskip_name = ent.name
-        if id:
-            ent.validate(int(mode, 8), id)
-            ent.repack()
-            shalists[-1].append((mode,
-                                 git.mangle_name(file, ent.mode, ent.gitmode),
-                                 id))
-    if exists and wasmissing:
-        count += oldsize
-        subcount = 0
-
-
-if opt.progress:
-    pct = total and count*100.0/total or 100
-    progress('Saving: %.2f%% (%d/%dk, %d/%d files), done.    \n'
-             % (pct, count/1024, total/1024, fcount, ftotal))
-
-while len(parts) > 1:
-    _pop(force_tree = None)
-assert(len(shalists) == 1)
-tree = w.new_tree(shalists[-1])
-if opt.tree:
-    print tree.encode('hex')
-if opt.commit or opt.name:
-    msg = 'bup save\n\nGenerated by command:\n%r' % sys.argv
-    ref = opt.name and ('refs/heads/%s' % opt.name) or None
-    commit = w.new_commit(oldref, tree, msg)
-    if opt.commit:
-        print commit.encode('hex')
-
-w.close()  # must close before we can update the ref
+    vs abg rkvfgf:
+        pbagvahr
+    vs bcg.fznyyre naq rag.fvmr >= bcg.fznyyre:
+        vs rkvfgf naq abg unfuinyvq:
+            nqq_reebe('fxvccvat ynetr svyr "%f"' % rag.anzr)
+            ynfgfxvc_anzr = rag.anzr
+        pbagvahr
+
+    nffreg(qve.fgnegfjvgu('/'))
+    qvec = qve.fcyvg('/')
+    juvyr cnegf > qvec:
+        _cbc(sbepr_gerr = Abar)
+    vs qve != '/':
+        sbe cneg va qvec[yra(cnegf):]:
+            _chfu(cneg)
+
+    vs abg svyr:
+        # ab svyranzr cbegvba zrnaf guvf vf n fhoqve.  Ohg
+        # fho/cneragqverpgbevrf nyernql unaqyrq va gur cbc/chfu() cneg nobir.
+        byqgerr = nyernql_fnirq(rag) # znl or Abar
+        arjgerr = _cbc(sbepr_gerr = byqgerr)
+        vs abg byqgerr:
+            vs ynfgfxvc_anzr naq ynfgfxvc_anzr.fgnegfjvgu(rag.anzr):
+                rag.vainyvqngr()
+            ryfr:
+                rag.inyvqngr(040000, arjgerr)
+            rag.ercnpx()
+        vs rkvfgf naq jnfzvffvat:
+            pbhag += byqfvmr
+        pbagvahr
+
+    # vg'f abg n qverpgbel
+    vq = Abar
+    vs unfuinyvq:
+        zbqr = '%b' % rag.tvgzbqr
+        vq = rag.fun
+        funyvfgf[-1].nccraq((zbqr
+                             tvg.znatyr_anzr(svyr, rag.zbqr, rag.tvgzbqr),
+                             vq))
+    ryfr:
+        vs fgng.F_VFERT(rag.zbqr):
+            gel:
+                s = unfufcyvg.bcra_abngvzr(rag.anzr)
+            rkprcg VBReebe, r:
+                nqq_reebe(r)
+                ynfgfxvc_anzr = rag.anzr
+            rkprcg BFReebe, r:
+                nqq_reebe(r)
+                ynfgfxvc_anzr = rag.anzr
+            ryfr:
+                (zbqr, vq) = unfufcyvg.fcyvg_gb_oybo_be_gerr(j, [s])
+        ryfr:
+            vs fgng.F_VFQVE(rag.zbqr):
+                nffreg(0)  # unaqyrq nobir
+            ryvs fgng.F_VFYAX(rag.zbqr):
+                gel:
+                    ey = bf.ernqyvax(rag.anzr)
+                rkprcg BFReebe, r:
+                    nqq_reebe(r)
+                    ynfgfxvc_anzr = rag.anzr
+                rkprcg VBReebe, r:
+                    nqq_reebe(r)
+                    ynfgfxvc_anzr = rag.anzr
+                ryfr:
+                    (zbqr, vq) = ('120000', j.arj_oybo(ey))
+            ryfr:
+                nqq_reebe(Rkprcgvba('fxvccvat fcrpvny svyr "%f"' % rag.anzr))
+                ynfgfxvc_anzr = rag.anzr
+        vs vq:
+            rag.inyvqngr(vag(zbqr, 8), vq)
+            rag.ercnpx()
+            funyvfgf[-1].nccraq((zbqr,
+                                 tvg.znatyr_anzr(svyr, rag.zbqr, rag.tvgzbqr),
+                                 vq))
+    vs rkvfgf naq jnfzvffvat:
+        pbhag += byqfvmr
+        fhopbhag = 0
+
+
+vs bcg.cebterff:
+    cpg = gbgny naq pbhag*100.0/gbgny be 100
+    cebterff('Fnivat: %.2s%% (%q/%qx, %q/%q svyrf), qbar.    \a'
+             % (cpg, pbhag/1024, gbgny/1024, spbhag, sgbgny))
+
+juvyr yra(cnegf) > 1:
+    _cbc(sbepr_gerr = Abar)
+nffreg(yra(funyvfgf) == 1)
+gerr = j.arj_gerr(funyvfgf[-1])
+vs bcg.gerr:
+    cevag gerr.rapbqr('urk')
+vs bcg.pbzzvg be bcg.anzr:
+    zft = 'ohc fnir\a\aTrarengrq ol pbzznaq:\a%e' % flf.neti
+    ers = bcg.anzr naq ('ersf/urnqf/%f' % bcg.anzr) be Abar
+    pbzzvg = j.arj_pbzzvg(byqers, gerr, zft)
+    vs bcg.pbzzvg:
+        cevag pbzzvg.rapbqr('urk')
+
+j.pybfr()  # zhfg pybfr orsber jr pna hcqngr gur ers
         
-if opt.name:
-    if cli:
-        cli.update_ref(refname, commit, oldref)
-    else:
-        git.update_ref(refname, commit, oldref)
-
-if cli:
-    cli.close()
-
-if saved_errors:
-    log('WARNING: %d errors encountered while saving.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, time
-from bup import options
-
-optspec = """
-bup tick
+vs bcg.anzr:
+    vs pyv:
+        pyv.hcqngr_ers(ersanzr, pbzzvg, byqers)
+    ryfr:
+        tvg.hcqngr_ers(ersanzr, pbzzvg, byqers)
+
+vs pyv:
+    pyv.pybfr()
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq juvyr fnivat.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc gvpx
 """
-o = options.Options('bup tick', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-t = time.time()
-tleft = 1 - (t - int(t))
-time.sleep(tleft)
-#!/usr/bin/env python
-import os, sys, stat, time
-from bup import options, git, index, drecurse
-from bup.helpers import *
-
-
-def merge_indexes(out, r1, r2):
-    for e in index.MergeIter([r1, r2]):
-        # FIXME: shouldn't we remove deleted entries eventually?  When?
-        out.add_ixentry(e)
-
-
-class IterHelper:
-    def __init__(self, l):
-        self.i = iter(l)
-        self.cur = None
-        self.next()
-
-    def next(self):
-        try:
-            self.cur = self.i.next()
-        except StopIteration:
-            self.cur = None
-        return self.cur
-
-
-def check_index(reader):
-    try:
-        log('check: checking forward iteration...\n')
-        e = None
-        d = {}
-        for e in reader.forward_iter():
-            if e.children_n:
-                if opt.verbose:
-                    log('%08x+%-4d %r\n' % (e.children_ofs, e.children_n,
-                                            e.name))
-                assert(e.children_ofs)
-                assert(e.name.endswith('/'))
-                assert(not d.get(e.children_ofs))
-                d[e.children_ofs] = 1
-            if e.flags & index.IX_HASHVALID:
-                assert(e.sha != index.EMPTY_SHA)
-                assert(e.gitmode)
-        assert(not e or e.name == '/')  # last entry is *always* /
-        log('check: checking normal iteration...\n')
-        last = None
-        for e in reader:
-            if last:
-                assert(last > e.name)
-            last = e.name
-    except:
-        log('index error! at %r\n' % e)
-        raise
-    log('check: passed.\n')
-
-
-def update_index(top):
-    ri = index.Reader(indexfile)
-    wi = index.Writer(indexfile)
-    rig = IterHelper(ri.iter(name=top))
-    tstart = int(time.time())
-
-    hashgen = None
-    if opt.fake_valid:
-        def hashgen(name):
-            return (0100644, index.FAKE_SHA)
-
-    total = 0
-    for (path,pst) in drecurse.recursive_dirlist([top], xdev=opt.xdev):
-        if opt.verbose>=2 or (opt.verbose==1 and stat.S_ISDIR(pst.st_mode)):
-            sys.stdout.write('%s\n' % path)
-            sys.stdout.flush()
-            progress('Indexing: %d\r' % total)
-        elif not (total % 128):
-            progress('Indexing: %d\r' % total)
-        total += 1
-        while rig.cur and rig.cur.name > path:  # deleted paths
-            if rig.cur.exists():
-                rig.cur.set_deleted()
-                rig.cur.repack()
-            rig.next()
-        if rig.cur and rig.cur.name == path:    # paths that already existed
-            if pst:
-                rig.cur.from_stat(pst, tstart)
-            if not (rig.cur.flags & index.IX_HASHVALID):
-                if hashgen:
-                    (rig.cur.gitmode, rig.cur.sha) = hashgen(path)
-                    rig.cur.flags |= index.IX_HASHVALID
-            if opt.fake_invalid:
-                rig.cur.invalidate()
-            rig.cur.repack()
-            rig.next()
-        else:  # new paths
-            wi.add(path, pst, hashgen = hashgen)
-    progress('Indexing: %d, done.\n' % total)
+b = bcgvbaf.Bcgvbaf('ohc gvpx', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+g = gvzr.gvzr()
+gyrsg = 1 - (g - vag(g))
+gvzr.fyrrc(gyrsg)
+#!/hfe/ova/rai clguba
+vzcbeg bf, flf, fgng, gvzr
+sebz ohc vzcbeg bcgvbaf, tvg, vaqrk, qerphefr
+sebz ohc.urycref vzcbeg *
+
+
+qrs zretr_vaqrkrf(bhg, e1, e2):
+    sbe r va vaqrk.ZretrVgre([e1, e2]):
+        # SVKZR: fubhyqa'g jr erzbir qryrgrq ragevrf riraghnyyl?  Jura?
+        bhg.nqq_vkragel(r)
+
+
+pynff VgreUrycre:
+    qrs __vavg__(frys, y):
+        frys.v = vgre(y)
+        frys.phe = Abar
+        frys.arkg()
+
+    qrs arkg(frys):
+        gel:
+            frys.phe = frys.v.arkg()
+        rkprcg FgbcVgrengvba:
+            frys.phe = Abar
+        erghea frys.phe
+
+
+qrs purpx_vaqrk(ernqre):
+    gel:
+        ybt('purpx: purpxvat sbejneq vgrengvba...\a')
+        r = Abar
+        q = {}
+        sbe r va ernqre.sbejneq_vgre():
+            vs r.puvyqera_a:
+                vs bcg.ireobfr:
+                    ybt('%08k+%-4q %e\a' % (r.puvyqera_bsf, r.puvyqera_a,
+                                            r.anzr))
+                nffreg(r.puvyqera_bsf)
+                nffreg(r.anzr.raqfjvgu('/'))
+                nffreg(abg q.trg(r.puvyqera_bsf))
+                q[r.puvyqera_bsf] = 1
+            vs r.syntf & vaqrk.VK_UNFUINYVQ:
+                nffreg(r.fun != vaqrk.RZCGL_FUN)
+                nffreg(r.tvgzbqr)
+        nffreg(abg r be r.anzr == '/')  # ynfg ragel vf *nyjnlf* /
+        ybt('purpx: purpxvat abezny vgrengvba...\a')
+        ynfg = Abar
+        sbe r va ernqre:
+            vs ynfg:
+                nffreg(ynfg > r.anzr)
+            ynfg = r.anzr
+    rkprcg:
+        ybt('vaqrk reebe! ng %e\a' % r)
+        envfr
+    ybt('purpx: cnffrq.\a')
+
+
+qrs hcqngr_vaqrk(gbc):
+    ev = vaqrk.Ernqre(vaqrksvyr)
+    jv = vaqrk.Jevgre(vaqrksvyr)
+    evt = VgreUrycre(ev.vgre(anzr=gbc))
+    gfgneg = vag(gvzr.gvzr())
+
+    unfutra = Abar
+    vs bcg.snxr_inyvq:
+        qrs unfutra(anzr):
+            erghea (0100644, vaqrk.SNXR_FUN)
+
+    gbgny = 0
+    sbe (cngu,cfg) va qerphefr.erphefvir_qveyvfg([gbc], kqri=bcg.kqri):
+        vs bcg.ireobfr>=2 be (bcg.ireobfr==1 naq fgng.F_VFQVE(cfg.fg_zbqr)):
+            flf.fgqbhg.jevgr('%f\a' % cngu)
+            flf.fgqbhg.syhfu()
+            cebterff('Vaqrkvat: %q\e' % gbgny)
+        ryvs abg (gbgny % 128):
+            cebterff('Vaqrkvat: %q\e' % gbgny)
+        gbgny += 1
+        juvyr evt.phe naq evt.phe.anzr > cngu:  # qryrgrq cnguf
+            vs evt.phe.rkvfgf():
+                evt.phe.frg_qryrgrq()
+                evt.phe.ercnpx()
+            evt.arkg()
+        vs evt.phe naq evt.phe.anzr == cngu:    # cnguf gung nyernql rkvfgrq
+            vs cfg:
+                evt.phe.sebz_fgng(cfg, gfgneg)
+            vs abg (evt.phe.syntf & vaqrk.VK_UNFUINYVQ):
+                vs unfutra:
+                    (evt.phe.tvgzbqr, evt.phe.fun) = unfutra(cngu)
+                    evt.phe.syntf |= vaqrk.VK_UNFUINYVQ
+            vs bcg.snxr_vainyvq:
+                evt.phe.vainyvqngr()
+            evt.phe.ercnpx()
+            evt.arkg()
+        ryfr:  # arj cnguf
+            jv.nqq(cngu, cfg, unfutra = unfutra)
+    cebterff('Vaqrkvat: %q, qbar.\a' % gbgny)
     
-    if ri.exists():
-        ri.save()
-        wi.flush()
-        if wi.count:
-            wr = wi.new_reader()
-            if opt.check:
-                log('check: before merging: oldfile\n')
-                check_index(ri)
-                log('check: before merging: newfile\n')
-                check_index(wr)
-            mi = index.Writer(indexfile)
-            merge_indexes(mi, ri, wr)
-            ri.close()
-            mi.close()
-            wr.close()
-        wi.abort()
-    else:
-        wi.close()
-
-
-optspec = """
-bup index <-p|m|u> [options...] <filenames...>
+    vs ev.rkvfgf():
+        ev.fnir()
+        jv.syhfu()
+        vs jv.pbhag:
+            je = jv.arj_ernqre()
+            vs bcg.purpx:
+                ybt('purpx: orsber zretvat: byqsvyr\a')
+                purpx_vaqrk(ev)
+                ybt('purpx: orsber zretvat: arjsvyr\a')
+                purpx_vaqrk(je)
+            zv = vaqrk.Jevgre(vaqrksvyr)
+            zretr_vaqrkrf(zv, ev, je)
+            ev.pybfr()
+            zv.pybfr()
+            je.pybfr()
+        jv.nobeg()
+    ryfr:
+        jv.pybfr()
+
+
+bcgfcrp = """
+ohc vaqrk <-c|z|h> [bcgvbaf...] <svyranzrf...>
 --
-p,print    print the index entries for the given names (also works with -u)
-m,modified print only added/deleted/modified files (implies -p)
-s,status   print each filename with a status char (A/M/D) (implies -p)
-H,hash     print the hash for each object next to its name (implies -p)
-l,long     print more information about each file
-u,update   (recursively) update the index entries for the given filenames
-x,xdev,one-file-system  don't cross filesystem boundaries
-fake-valid mark all index entries as up-to-date even if they aren't
-fake-invalid mark all index entries as invalid
-check      carefully check index file integrity
-f,indexfile=  the name of the index file (default 'index')
-v,verbose  increase log output (can be used more than once)
+c,cevag    cevag gur vaqrk ragevrf sbe gur tvira anzrf (nyfb jbexf jvgu -h)
+z,zbqvsvrq cevag bayl nqqrq/qryrgrq/zbqvsvrq svyrf (vzcyvrf -c)
+f,fgnghf   cevag rnpu svyranzr jvgu n fgnghf pune (N/Z/Q) (vzcyvrf -c)
+U,unfu     cevag gur unfu sbe rnpu bowrpg arkg gb vgf anzr (vzcyvrf -c)
+y,ybat     cevag zber vasbezngvba nobhg rnpu svyr
+h,hcqngr   (erphefviryl) hcqngr gur vaqrk ragevrf sbe gur tvira svyranzrf
+k,kqri,bar-svyr-flfgrz  qba'g pebff svyrflfgrz obhaqnevrf
+snxr-inyvq znex nyy vaqrk ragevrf nf hc-gb-qngr rira vs gurl nera'g
+snxr-vainyvq znex nyy vaqrk ragevrf nf vainyvq
+purpx      pnershyyl purpx vaqrk svyr vagrtevgl
+s,vaqrksvyr=  gur anzr bs gur vaqrk svyr (qrsnhyg 'vaqrk')
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
 """
-o = options.Options('bup index', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if not (opt.modified or opt['print'] or opt.status or opt.update or opt.check):
-    o.fatal('supply one or more of -p, -s, -m, -u, or --check')
-if (opt.fake_valid or opt.fake_invalid) and not opt.update:
-    o.fatal('--fake-{in,}valid are meaningless without -u')
-if opt.fake_valid and opt.fake_invalid:
-    o.fatal('--fake-valid is incompatible with --fake-invalid')
-
-git.check_repo_or_die()
-indexfile = opt.indexfile or git.repo('bupindex')
-
-handle_ctrl_c()
-
-if opt.check:
-    log('check: starting initial check.\n')
-    check_index(index.Reader(indexfile))
-
-paths = index.reduce_paths(extra)
-
-if opt.update:
-    if not paths:
-        o.fatal('update (-u) requested but no paths given')
-    for (rp,path) in paths:
-        update_index(rp)
-
-if opt['print'] or opt.status or opt.modified:
-    for (name, ent) in index.Reader(indexfile).filter(extra or ['']):
-        if (opt.modified 
-            and (ent.is_valid() or ent.is_deleted() or not ent.mode)):
-            continue
-        line = ''
-        if opt.status:
-            if ent.is_deleted():
-                line += 'D '
-            elif not ent.is_valid():
-                if ent.sha == index.EMPTY_SHA:
-                    line += 'A '
-                else:
-                    line += 'M '
-            else:
-                line += '  '
-        if opt.hash:
-            line += ent.sha.encode('hex') + ' '
-        if opt.long:
-            line += "%7s %7s " % (oct(ent.mode), oct(ent.gitmode))
-        print line + (name or './')
-
-if opt.check and (opt['print'] or opt.status or opt.modified or opt.update):
-    log('check: starting final check.\n')
-    check_index(index.Reader(indexfile))
-
-if saved_errors:
-    log('WARNING: %d errors encountered.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, os, struct
-from bup import options, helpers
-
-optspec = """
-bup rbackup-server
+b = bcgvbaf.Bcgvbaf('ohc vaqrk', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs abg (bcg.zbqvsvrq be bcg['cevag'] be bcg.fgnghf be bcg.hcqngr be bcg.purpx):
+    b.sngny('fhccyl bar be zber bs -c, -f, -z, -h, be --purpx')
+vs (bcg.snxr_inyvq be bcg.snxr_vainyvq) naq abg bcg.hcqngr:
+    b.sngny('--snxr-{va,}inyvq ner zrnavatyrff jvgubhg -h')
+vs bcg.snxr_inyvq naq bcg.snxr_vainyvq:
+    b.sngny('--snxr-inyvq vf vapbzcngvoyr jvgu --snxr-vainyvq')
+
+tvg.purpx_ercb_be_qvr()
+vaqrksvyr = bcg.vaqrksvyr be tvg.ercb('ohcvaqrk')
+
+unaqyr_pgey_p()
+
+vs bcg.purpx:
+    ybt('purpx: fgnegvat vavgvny purpx.\a')
+    purpx_vaqrk(vaqrk.Ernqre(vaqrksvyr))
+
+cnguf = vaqrk.erqhpr_cnguf(rkgen)
+
+vs bcg.hcqngr:
+    vs abg cnguf:
+        b.sngny('hcqngr (-h) erdhrfgrq ohg ab cnguf tvira')
+    sbe (ec,cngu) va cnguf:
+        hcqngr_vaqrk(ec)
+
+vs bcg['cevag'] be bcg.fgnghf be bcg.zbqvsvrq:
+    sbe (anzr, rag) va vaqrk.Ernqre(vaqrksvyr).svygre(rkgen be ['']):
+        vs (bcg.zbqvsvrq 
+            naq (rag.vf_inyvq() be rag.vf_qryrgrq() be abg rag.zbqr)):
+            pbagvahr
+        yvar = ''
+        vs bcg.fgnghf:
+            vs rag.vf_qryrgrq():
+                yvar += 'Q '
+            ryvs abg rag.vf_inyvq():
+                vs rag.fun == vaqrk.RZCGL_FUN:
+                    yvar += 'N '
+                ryfr:
+                    yvar += 'Z '
+            ryfr:
+                yvar += '  '
+        vs bcg.unfu:
+            yvar += rag.fun.rapbqr('urk') + ' '
+        vs bcg.ybat:
+            yvar += "%7f %7f " % (bpg(rag.zbqr), bpg(rag.tvgzbqr))
+        cevag yvar + (anzr be './')
+
+vs bcg.purpx naq (bcg['cevag'] be bcg.fgnghf be bcg.zbqvsvrq be bcg.hcqngr):
+    ybt('purpx: fgnegvat svany purpx.\a')
+    purpx_vaqrk(vaqrk.Ernqre(vaqrksvyr))
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgehpg
+sebz ohc vzcbeg bcgvbaf, urycref
+
+bcgfcrp = """
+ohc eonpxhc-freire
 --
-    This command is not intended to be run manually.
+    Guvf pbzznaq vf abg vagraqrq gb or eha znahnyyl.
 """
-o = options.Options('bup rbackup-server', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-if extra:
-    o.fatal('no arguments expected')
-
-# get the subcommand's argv.
-# Normally we could just pass this on the command line, but since we'll often
-# be getting called on the other end of an ssh pipe, which tends to mangle
-# argv (by sending it via the shell), this way is much safer.
-buf = sys.stdin.read(4)
-sz = struct.unpack('!I', buf)[0]
-assert(sz > 0)
-assert(sz < 1000000)
-buf = sys.stdin.read(sz)
-assert(len(buf) == sz)
-argv = buf.split('\0')
-
-# stdin/stdout are supposedly connected to 'bup server' that the caller
-# started for us (often on the other end of an ssh tunnel), so we don't want
-# to misuse them.  Move them out of the way, then replace stdout with
-# a pointer to stderr in case our subcommand wants to do something with it.
+b = bcgvbaf.Bcgvbaf('ohc eonpxhc-freire', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+# trg gur fhopbzznaq'f neti.
+# Abeznyyl jr pbhyq whfg cnff guvf ba gur pbzznaq yvar, ohg fvapr jr'yy bsgra
+# or trggvat pnyyrq ba gur bgure raq bs na ffu cvcr, juvpu graqf gb znatyr
+# neti (ol fraqvat vg ivn gur furyy), guvf jnl vf zhpu fnsre.
+ohs = flf.fgqva.ernq(4)
+fm = fgehpg.hacnpx('!V', ohs)[0]
+nffreg(fm > 0)
+nffreg(fm < 1000000)
+ohs = flf.fgqva.ernq(fm)
+nffreg(yra(ohs) == fm)
+neti = ohs.fcyvg('\0')
+
+# fgqva/fgqbhg ner fhccbfrqyl pbaarpgrq gb 'ohc freire' gung gur pnyyre
+# fgnegrq sbe hf (bsgra ba gur bgure raq bs na ffu ghaary), fb jr qba'g jnag
+# gb zvfhfr gurz.  Zbir gurz bhg bs gur jnl, gura ercynpr fgqbhg jvgu
+# n cbvagre gb fgqree va pnfr bhe fhopbzznaq jnagf gb qb fbzrguvat jvgu vg.
 #
-# It might be nice to do the same with stdin, but my experiments showed that
-# ssh seems to make its child's stderr a readable-but-never-reads-anything
-# socket.  They really should have used shutdown(SHUT_WR) on the other end
-# of it, but probably didn't.  Anyway, it's too messy, so let's just make sure
-# anyone reading from stdin is disappointed.
+# Vg zvtug or avpr gb qb gur fnzr jvgu fgqva, ohg zl rkcrevzragf fubjrq gung
+# ffu frrzf gb znxr vgf puvyq'f fgqree n ernqnoyr-ohg-arire-ernqf-nalguvat
+# fbpxrg.  Gurl ernyyl fubhyq unir hfrq fuhgqbja(FUHG_JE) ba gur bgure raq
+# bs vg, ohg cebonoyl qvqa'g.  Naljnl, vg'f gbb zrffl, fb yrg'f whfg znxr fher
+# nalbar ernqvat sebz fgqva vf qvfnccbvagrq.
 #
-# (You can't just leave stdin/stdout "not open" by closing the file
-# descriptors.  Then the next file that opens is automatically assigned 0 or 1,
-# and people *trying* to read/write stdin/stdout get screwed.)
-os.dup2(0, 3)
-os.dup2(1, 4)
-os.dup2(2, 1)
-fd = os.open('/dev/null', os.O_RDONLY)
-os.dup2(fd, 0)
-os.close(fd)
-
-os.environ['BUP_SERVER_REVERSE'] = helpers.hostname()
-os.execvp(argv[0], argv)
-sys.exit(99)
-#!/usr/bin/env python
-import sys, os, glob, subprocess, time
-from bup import options, git
-from bup.helpers import *
-
-par2_ok = 0
-nullf = open('/dev/null')
-
-def debug(s):
-    if opt.verbose:
-        log(s)
-
-def run(argv):
-    # at least in python 2.5, using "stdout=2" or "stdout=sys.stderr" below
-    # doesn't actually work, because subprocess closes fd #2 right before
-    # execing for some reason.  So we work around it by duplicating the fd
-    # first.
-    fd = os.dup(2)  # copy stderr
-    try:
-        p = subprocess.Popen(argv, stdout=fd, close_fds=False)
-        return p.wait()
-    finally:
-        os.close(fd)
-
-def par2_setup():
-    global par2_ok
-    rv = 1
-    try:
-        p = subprocess.Popen(['par2', '--help'],
-                             stdout=nullf, stderr=nullf, stdin=nullf)
-        rv = p.wait()
-    except OSError:
-        log('fsck: warning: par2 not found; disabling recovery features.\n')
-    else:
-        par2_ok = 1
-
-def parv(lvl):
-    if opt.verbose >= lvl:
-        if istty:
-            return []
-        else:
-            return ['-q']
-    else:
-        return ['-qq']
-
-def par2_generate(base):
-    return run(['par2', 'create', '-n1', '-c200'] + parv(2)
-               + ['--', base, base+'.pack', base+'.idx'])
-
-def par2_verify(base):
-    return run(['par2', 'verify'] + parv(3) + ['--', base])
-
-def par2_repair(base):
-    return run(['par2', 'repair'] + parv(2) + ['--', base])
-
-def quick_verify(base):
-    f = open(base + '.pack', 'rb')
-    f.seek(-20, 2)
-    wantsum = f.read(20)
-    assert(len(wantsum) == 20)
-    f.seek(0)
-    sum = Sha1()
-    for b in chunkyreader(f, os.fstat(f.fileno()).st_size - 20):
-        sum.update(b)
-    if sum.digest() != wantsum:
-        raise ValueError('expected %r, got %r' % (wantsum.encode('hex'),
-                                                  sum.hexdigest()))
+# (Lbh pna'g whfg yrnir fgqva/fgqbhg "abg bcra" ol pybfvat gur svyr
+# qrfpevcgbef.  Gura gur arkg svyr gung bcraf vf nhgbzngvpnyyl nffvtarq 0 be 1,
+# naq crbcyr *gelvat* gb ernq/jevgr fgqva/fgqbhg trg fperjrq.)
+bf.qhc2(0, 3)
+bf.qhc2(1, 4)
+bf.qhc2(2, 1)
+sq = bf.bcra('/qri/ahyy', bf.B_EQBAYL)
+bf.qhc2(sq, 0)
+bf.pybfr(sq)
+
+bf.raiveba['OHC_FREIRE_ERIREFR'] = urycref.ubfganzr()
+bf.rkrpic(neti[0], neti)
+flf.rkvg(99)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, tybo, fhocebprff, gvzr
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+cne2_bx = 0
+ahyys = bcra('/qri/ahyy')
+
+qrs qroht(f):
+    vs bcg.ireobfr:
+        ybt(f)
+
+qrs eha(neti):
+    # ng yrnfg va clguba 2.5, hfvat "fgqbhg=2" be "fgqbhg=flf.fgqree" orybj
+    # qbrfa'g npghnyyl jbex, orpnhfr fhocebprff pybfrf sq #2 evtug orsber
+    # rkrpvat sbe fbzr ernfba.  Fb jr jbex nebhaq vg ol qhcyvpngvat gur sq
+    # svefg.
+    sq = bf.qhc(2)  # pbcl fgqree
+    gel:
+        c = fhocebprff.Cbcra(neti, fgqbhg=sq, pybfr_sqf=Snyfr)
+        erghea c.jnvg()
+    svanyyl:
+        bf.pybfr(sq)
+
+qrs cne2_frghc():
+    tybony cne2_bx
+    ei = 1
+    gel:
+        c = fhocebprff.Cbcra(['cne2', '--uryc'],
+                             fgqbhg=ahyys, fgqree=ahyys, fgqva=ahyys)
+        ei = c.jnvg()
+    rkprcg BFReebe:
+        ybt('sfpx: jneavat: cne2 abg sbhaq; qvfnoyvat erpbirel srngherf.\a')
+    ryfr:
+        cne2_bx = 1
+
+qrs cnei(yiy):
+    vs bcg.ireobfr >= yiy:
+        vs vfggl:
+            erghea []
+        ryfr:
+            erghea ['-d']
+    ryfr:
+        erghea ['-dd']
+
+qrs cne2_trarengr(onfr):
+    erghea eha(['cne2', 'perngr', '-a1', '-p200'] + cnei(2)
+               + ['--', onfr, onfr+'.cnpx', onfr+'.vqk'])
+
+qrs cne2_irevsl(onfr):
+    erghea eha(['cne2', 'irevsl'] + cnei(3) + ['--', onfr])
+
+qrs cne2_ercnve(onfr):
+    erghea eha(['cne2', 'ercnve'] + cnei(2) + ['--', onfr])
+
+qrs dhvpx_irevsl(onfr):
+    s = bcra(onfr + '.cnpx', 'eo')
+    s.frrx(-20, 2)
+    jnagfhz = s.ernq(20)
+    nffreg(yra(jnagfhz) == 20)
+    s.frrx(0)
+    fhz = Fun1()
+    sbe o va puhaxlernqre(s, bf.sfgng(s.svyrab()).fg_fvmr - 20):
+        fhz.hcqngr(o)
+    vs fhz.qvtrfg() != jnagfhz:
+        envfr InyhrReebe('rkcrpgrq %e, tbg %e' % (jnagfhz.rapbqr('urk'),
+                                                  fhz.urkqvtrfg()))
         
 
-def git_verify(base):
-    if opt.quick:
-        try:
-            quick_verify(base)
-        except Exception, e:
-            debug('error: %s\n' % e)
-            return 1
-        return 0
-    else:
-        return run(['git', 'verify-pack', '--', base])
+qrs tvg_irevsl(onfr):
+    vs bcg.dhvpx:
+        gel:
+            dhvpx_irevsl(onfr)
+        rkprcg Rkprcgvba, r:
+            qroht('reebe: %f\a' % r)
+            erghea 1
+        erghea 0
+    ryfr:
+        erghea eha(['tvg', 'irevsl-cnpx', '--', onfr])
     
     
-def do_pack(base, last):
-    code = 0
-    if par2_ok and par2_exists and (opt.repair or not opt.generate):
-        vresult = par2_verify(base)
-        if vresult != 0:
-            if opt.repair:
-                rresult = par2_repair(base)
-                if rresult != 0:
-                    print '%s par2 repair: failed (%d)' % (last, rresult)
-                    code = rresult
-                else:
-                    print '%s par2 repair: succeeded (0)' % last
-                    code = 100
-            else:
-                print '%s par2 verify: failed (%d)' % (last, vresult)
-                code = vresult
-        else:
-            print '%s ok' % last
-    elif not opt.generate or (par2_ok and not par2_exists):
-        gresult = git_verify(base)
-        if gresult != 0:
-            print '%s git verify: failed (%d)' % (last, gresult)
-            code = gresult
-        else:
-            if par2_ok and opt.generate:
-                presult = par2_generate(base)
-                if presult != 0:
-                    print '%s par2 create: failed (%d)' % (last, presult)
-                    code = presult
-                else:
-                    print '%s ok' % last
-            else:
-                print '%s ok' % last
-    else:
-        assert(opt.generate and (not par2_ok or par2_exists))
-        debug('    skipped: par2 file already generated.\n')
-    return code
-
-
-optspec = """
-bup fsck [options...] [filenames...]
+qrs qb_cnpx(onfr, ynfg):
+    pbqr = 0
+    vs cne2_bx naq cne2_rkvfgf naq (bcg.ercnve be abg bcg.trarengr):
+        ierfhyg = cne2_irevsl(onfr)
+        vs ierfhyg != 0:
+            vs bcg.ercnve:
+                eerfhyg = cne2_ercnve(onfr)
+                vs eerfhyg != 0:
+                    cevag '%f cne2 ercnve: snvyrq (%q)' % (ynfg, eerfhyg)
+                    pbqr = eerfhyg
+                ryfr:
+                    cevag '%f cne2 ercnve: fhpprrqrq (0)' % ynfg
+                    pbqr = 100
+            ryfr:
+                cevag '%f cne2 irevsl: snvyrq (%q)' % (ynfg, ierfhyg)
+                pbqr = ierfhyg
+        ryfr:
+            cevag '%f bx' % ynfg
+    ryvs abg bcg.trarengr be (cne2_bx naq abg cne2_rkvfgf):
+        terfhyg = tvg_irevsl(onfr)
+        vs terfhyg != 0:
+            cevag '%f tvg irevsl: snvyrq (%q)' % (ynfg, terfhyg)
+            pbqr = terfhyg
+        ryfr:
+            vs cne2_bx naq bcg.trarengr:
+                cerfhyg = cne2_trarengr(onfr)
+                vs cerfhyg != 0:
+                    cevag '%f cne2 perngr: snvyrq (%q)' % (ynfg, cerfhyg)
+                    pbqr = cerfhyg
+                ryfr:
+                    cevag '%f bx' % ynfg
+            ryfr:
+                cevag '%f bx' % ynfg
+    ryfr:
+        nffreg(bcg.trarengr naq (abg cne2_bx be cne2_rkvfgf))
+        qroht('    fxvccrq: cne2 svyr nyernql trarengrq.\a')
+    erghea pbqr
+
+
+bcgfcrp = """
+ohc sfpx [bcgvbaf...] [svyranzrf...]
 --
-r,repair    attempt to repair errors using par2 (dangerous!)
-g,generate  generate auto-repair information using par2
-v,verbose   increase verbosity (can be used more than once)
-quick       just check pack sha1sum, don't use git verify-pack
-j,jobs=     run 'n' jobs in parallel
-par2-ok     immediately return 0 if par2 is ok, 1 if not
-disable-par2  ignore par2 even if it is available
+e,ercnve    nggrzcg gb ercnve reebef hfvat cne2 (qnatrebhf!)
+t,trarengr  trarengr nhgb-ercnve vasbezngvba hfvat cne2
+i,ireobfr   vapernfr ireobfvgl (pna or hfrq zber guna bapr)
+dhvpx       whfg purpx cnpx fun1fhz, qba'g hfr tvg irevsl-cnpx
+w,wbof=     eha 'a' wbof va cnenyyry
+cne2-bx     vzzrqvngryl erghea 0 vs cne2 vf bx, 1 vs abg
+qvfnoyr-cne2  vtaber cne2 rira vs vg vf ninvynoyr
 """
-o = options.Options('bup fsck', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-par2_setup()
-if opt.par2_ok:
-    if par2_ok:
-        sys.exit(0)  # 'true' in sh
-    else:
-        sys.exit(1)
-if opt.disable_par2:
-    par2_ok = 0
-
-git.check_repo_or_die()
-
-if not extra:
-    debug('fsck: No filenames given: checking all packs.\n')
-    extra = glob.glob(git.repo('objects/pack/*.pack'))
-
-code = 0
-count = 0
-outstanding = {}
-for name in extra:
-    if name.endswith('.pack'):
-        base = name[:-5]
-    elif name.endswith('.idx'):
-        base = name[:-4]
-    elif name.endswith('.par2'):
-        base = name[:-5]
-    elif os.path.exists(name + '.pack'):
-        base = name
-    else:
-        raise Exception('%s is not a pack file!' % name)
-    (dir,last) = os.path.split(base)
-    par2_exists = os.path.exists(base + '.par2')
-    if par2_exists and os.stat(base + '.par2').st_size == 0:
-        par2_exists = 0
-    sys.stdout.flush()
-    debug('fsck: checking %s (%s)\n
-          % (last, par2_ok and par2_exists and 'par2' or 'git'))
-    if not opt.verbose:
-        progress('fsck (%d/%d)\r' % (count, len(extra)))
+b = bcgvbaf.Bcgvbaf('ohc sfpx', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+cne2_frghc()
+vs bcg.cne2_bx:
+    vs cne2_bx:
+        flf.rkvg(0)  # 'gehr' va fu
+    ryfr:
+        flf.rkvg(1)
+vs bcg.qvfnoyr_cne2:
+    cne2_bx = 0
+
+tvg.purpx_ercb_be_qvr()
+
+vs abg rkgen:
+    qroht('sfpx: Ab svyranzrf tvira: purpxvat nyy cnpxf.\a')
+    rkgen = tybo.tybo(tvg.ercb('bowrpgf/cnpx/*.cnpx'))
+
+pbqr = 0
+pbhag = 0
+bhgfgnaqvat = {}
+sbe anzr va rkgen:
+    vs anzr.raqfjvgu('.cnpx'):
+        onfr = anzr[:-5]
+    ryvs anzr.raqfjvgu('.vqk'):
+        onfr = anzr[:-4]
+    ryvs anzr.raqfjvgu('.cne2'):
+        onfr = anzr[:-5]
+    ryvs bf.cngu.rkvfgf(anzr + '.cnpx'):
+        onfr = anzr
+    ryfr:
+        envfr Rkprcgvba('%f vf abg n cnpx svyr!' % anzr)
+    (qve,ynfg) = bf.cngu.fcyvg(onfr)
+    cne2_rkvfgf = bf.cngu.rkvfgf(onfr + '.cne2')
+    vs cne2_rkvfgf naq bf.fgng(onfr + '.cne2').fg_fvmr == 0:
+        cne2_rkvfgf = 0
+    flf.fgqbhg.syhfu()
+    qroht('sfpx: purpxvat %f (%f)\a
+          % (ynfg, cne2_bx naq cne2_rkvfgf naq 'cne2' be 'tvg'))
+    vs abg bcg.ireobfr:
+        cebterff('sfpx (%q/%q)\e' % (pbhag, yra(rkgen)))
     
-    if not opt.jobs:
-        nc = do_pack(base, last)
-        code = code or nc
-        count += 1
-    else:
-        while len(outstanding) >= opt.jobs:
-            (pid,nc) = os.wait()
-            nc >>= 8
-            if pid in outstanding:
-                del outstanding[pid]
-                code = code or nc
-                count += 1
-        pid = os.fork()
-        if pid:  # parent
-            outstanding[pid] = 1
-        else: # child
-            try:
-                sys.exit(do_pack(base, last))
-            except Exception, e:
-                log('exception: %r\n' % e)
-                sys.exit(99)
+    vs abg bcg.wbof:
+        ap = qb_cnpx(onfr, ynfg)
+        pbqr = pbqr be ap
+        pbhag += 1
+    ryfr:
+        juvyr yra(bhgfgnaqvat) >= bcg.wbof:
+            (cvq,ap) = bf.jnvg()
+            ap >>= 8
+            vs cvq va bhgfgnaqvat:
+                qry bhgfgnaqvat[cvq]
+                pbqr = pbqr be ap
+                pbhag += 1
+        cvq = bf.sbex()
+        vs cvq:  # cnerag
+            bhgfgnaqvat[cvq] = 1
+        ryfr: # puvyq
+            gel:
+                flf.rkvg(qb_cnpx(onfr, ynfg))
+            rkprcg Rkprcgvba, r:
+                ybt('rkprcgvba: %e\a' % r)
+                flf.rkvg(99)
                 
-while len(outstanding):
-    (pid,nc) = os.wait()
-    nc >>= 8
-    if pid in outstanding:
-        del outstanding[pid]
-        code = code or nc
-        count += 1
-    if not opt.verbose:
-        progress('fsck (%d/%d)\r' % (count, len(extra)))
-
-if not opt.verbose and istty:
-    log('fsck done.           \n')
-sys.exit(code)
-#!/usr/bin/env python
-import sys, os, struct, getopt, subprocess, signal
-from bup import options, ssh
-from bup.helpers import *
-
-optspec = """
-bup rbackup <hostname> index ...
-bup rbackup <hostname> save ...
-bup rbackup <hostname> split ...
+juvyr yra(bhgfgnaqvat):
+    (cvq,ap) = bf.jnvg()
+    ap >>= 8
+    vs cvq va bhgfgnaqvat:
+        qry bhgfgnaqvat[cvq]
+        pbqr = pbqr be ap
+        pbhag += 1
+    vs abg bcg.ireobfr:
+        cebterff('sfpx (%q/%q)\e' % (pbhag, yra(rkgen)))
+
+vs abg bcg.ireobfr naq vfggl:
+    ybt('sfpx qbar.           \a')
+flf.rkvg(pbqr)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgehpg, trgbcg, fhocebprff, fvtany
+sebz ohc vzcbeg bcgvbaf, ffu
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+ohc eonpxhc <ubfganzr> vaqrk ...
+ohc eonpxhc <ubfganzr> fnir ...
+ohc eonpxhc <ubfganzr> fcyvg ...
 """
-o = options.Options('bup rbackup', optspec, optfunc=getopt.getopt)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-if len(extra) < 2:
-    o.fatal('arguments expected')
-
-class SigException(Exception):
-    def __init__(self, signum):
-        self.signum = signum
-        Exception.__init__(self, 'signal %d received' % signum)
-def handler(signum, frame):
-    raise SigException(signum)
-
-signal.signal(signal.SIGTERM, handler)
-signal.signal(signal.SIGINT, handler)
-
-sp = None
-p = None
-ret = 99
-
-try:
-    hostname = extra[0]
-    argv = extra[1:]
-    p = ssh.connect(hostname, 'rbackup-server')
-
-    argvs = '\0'.join(['bup'] + argv)
-    p.stdin.write(struct.pack('!I', len(argvs)) + argvs)
-    p.stdin.flush()
-
-    main_exe = os.environ.get('BUP_MAIN_EXE') or sys.argv[0]
-    sp = subprocess.Popen([main_exe, 'server'], stdin=p.stdout, stdout=p.stdin)
-
-    p.stdin.close()
-    p.stdout.close()
-
-finally:
-    while 1:
-        # if we get a signal while waiting, we have to keep waiting, just
-        # in case our child doesn't die.
-        try:
-            ret = p.wait()
-            sp.wait()
-            break
-        except SigException, e:
-            log('\nbup rbackup: %s\n' % e)
-            os.kill(p.pid, e.signum)
-            ret = 84
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, os, re
-from bup import options
-
-optspec = """
-bup newliner
+b = bcgvbaf.Bcgvbaf('ohc eonpxhc', bcgfcrp, bcgshap=trgbcg.trgbcg)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+vs yra(rkgen) < 2:
+    b.sngny('nethzragf rkcrpgrq')
+
+pynff FvtRkprcgvba(Rkprcgvba):
+    qrs __vavg__(frys, fvtahz):
+        frys.fvtahz = fvtahz
+        Rkprcgvba.__vavg__(frys, 'fvtany %q erprvirq' % fvtahz)
+qrs unaqyre(fvtahz, senzr):
+    envfr FvtRkprcgvba(fvtahz)
+
+fvtany.fvtany(fvtany.FVTGREZ, unaqyre)
+fvtany.fvtany(fvtany.FVTVAG, unaqyre)
+
+fc = Abar
+c = Abar
+erg = 99
+
+gel:
+    ubfganzr = rkgen[0]
+    neti = rkgen[1:]
+    c = ffu.pbaarpg(ubfganzr, 'eonpxhc-freire')
+
+    netif = '\0'.wbva(['ohc'] + neti)
+    c.fgqva.jevgr(fgehpg.cnpx('!V', yra(netif)) + netif)
+    c.fgqva.syhfu()
+
+    znva_rkr = bf.raiveba.trg('OHC_ZNVA_RKR') be flf.neti[0]
+    fc = fhocebprff.Cbcra([znva_rkr, 'freire'], fgqva=c.fgqbhg, fgqbhg=c.fgqva)
+
+    c.fgqva.pybfr()
+    c.fgqbhg.pybfr()
+
+svanyyl:
+    juvyr 1:
+        # vs jr trg n fvtany juvyr jnvgvat, jr unir gb xrrc jnvgvat, whfg
+        # va pnfr bhe puvyq qbrfa'g qvr.
+        gel:
+            erg = c.jnvg()
+            fc.jnvg()
+            oernx
+        rkprcg FvtRkprcgvba, r:
+            ybt('\aohc eonpxhc: %f\a' % r)
+            bf.xvyy(c.cvq, r.fvtahz)
+            erg = 84
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, er
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc arjyvare
 """
-o = options.Options('bup newliner', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-r = re.compile(r'([\r\n])')
-lastlen = 0
-all = ''
-while 1:
-    l = r.split(all, 1)
-    if len(l) <= 1:
-        try:
-            b = os.read(sys.stdin.fileno(), 4096)
-        except KeyboardInterrupt:
-            break
-        if not b:
-            break
-        all += b
-    else:
-        assert(len(l) == 3)
-        (line, splitchar, all) = l
-        #splitchar = '\n'
-        sys.stdout.write('%-*s%s' % (lastlen, line, splitchar))
-        if splitchar == '\r':
-            lastlen = len(line)
-        else:
-            lastlen = 0
-        sys.stdout.flush()
-
-if lastlen or all:
-    sys.stdout.write('%-*s\n' % (lastlen, all))
-#!/usr/bin/env python
-import sys
-from bup import options, git, _hashsplit
-from bup.helpers import *
-
-
-optspec = """
-bup margin
+b = bcgvbaf.Bcgvbaf('ohc arjyvare', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+e = er.pbzcvyr(e'([\e\a])')
+ynfgyra = 0
+nyy = ''
+juvyr 1:
+    y = e.fcyvg(nyy, 1)
+    vs yra(y) <= 1:
+        gel:
+            o = bf.ernq(flf.fgqva.svyrab(), 4096)
+        rkprcg XrlobneqVagreehcg:
+            oernx
+        vs abg o:
+            oernx
+        nyy += o
+    ryfr:
+        nffreg(yra(y) == 3)
+        (yvar, fcyvgpune, nyy) = y
+        #fcyvgpune = '\a'
+        flf.fgqbhg.jevgr('%-*f%f' % (ynfgyra, yvar, fcyvgpune))
+        vs fcyvgpune == '\e':
+            ynfgyra = yra(yvar)
+        ryfr:
+            ynfgyra = 0
+        flf.fgqbhg.syhfu()
+
+vs ynfgyra be nyy:
+    flf.fgqbhg.jevgr('%-*f\a' % (ynfgyra, nyy))
+#!/hfe/ova/rai clguba
+vzcbeg flf
+sebz ohc vzcbeg bcgvbaf, tvg, _unfufcyvg
+sebz ohc.urycref vzcbeg *
+
+
+bcgfcrp = """
+ohc znetva
 """
-o = options.Options('bup margin', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-git.check_repo_or_die()
-#git.ignore_midx = 1
-
-mi = git.PackIdxList(git.repo('objects/pack'))
-last = '\0'*20
-longmatch = 0
-for i in mi:
-    if i == last:
-        continue
-    #assert(str(i) >= last)
-    pm = _hashsplit.bitmatch(last, i)
-    longmatch = max(longmatch, pm)
-    last = i
-print longmatch
-#!/usr/bin/env python
-from bup import options, drecurse
-from bup.helpers import *
-
-optspec = """
-bup drecurse <path>
+b = bcgvbaf.Bcgvbaf('ohc znetva', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+tvg.purpx_ercb_be_qvr()
+#tvg.vtaber_zvqk = 1
+
+zv = tvg.CnpxVqkYvfg(tvg.ercb('bowrpgf/cnpx'))
+ynfg = '\0'*20
+ybatzngpu = 0
+sbe v va zv:
+    vs v == ynfg:
+        pbagvahr
+    #nffreg(fge(v) >= ynfg)
+    cz = _unfufcyvg.ovgzngpu(ynfg, v)
+    ybatzngpu = znk(ybatzngpu, cz)
+    ynfg = v
+cevag ybatzngpu
+#!/hfe/ova/rai clguba
+sebz ohc vzcbeg bcgvbaf, qerphefr
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+ohc qerphefr <cngu>
 --
-x,xdev,one-file-system   don't cross filesystem boundaries
-q,quiet  don't actually print filenames
-profile  run under the python profiler
+k,kqri,bar-svyr-flfgrz   qba'g pebff svyrflfgrz obhaqnevrf
+d,dhvrg  qba'g npghnyyl cevag svyranzrf
+cebsvyr  eha haqre gur clguba cebsvyre
 """
-o = options.Options('bup drecurse', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one filename expected")
-
-it = drecurse.recursive_dirlist(extra, opt.xdev)
-if opt.profile:
-    import cProfile
-    def do_it():
-        for i in it:
-            pass
-    cProfile.run('do_it()')
-else:
-    if opt.quiet:
-        for i in it:
-            pass
-    else:
-        for (name,st) in it:
-            print name
-
-if saved_errors:
-    log('WARNING: %d errors encountered.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, time, struct
-from bup import hashsplit, git, options, client
-from bup.helpers import *
-from subprocess import PIPE
-
-
-optspec = """
-bup split [-tcb] [-n name] [--bench] [filenames...]
+b = bcgvbaf.Bcgvbaf('ohc qerphefr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar svyranzr rkcrpgrq")
+
+vg = qerphefr.erphefvir_qveyvfg(rkgen, bcg.kqri)
+vs bcg.cebsvyr:
+    vzcbeg pCebsvyr
+    qrs qb_vg():
+        sbe v va vg:
+            cnff
+    pCebsvyr.eha('qb_vg()')
+ryfr:
+    vs bcg.dhvrg:
+        sbe v va vg:
+            cnff
+    ryfr:
+        sbe (anzr,fg) va vg:
+            cevag anzr
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr, fgehpg
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+sebz fhocebprff vzcbeg CVCR
+
+
+bcgfcrp = """
+ohc fcyvg [-gpo] [-a anzr] [--orapu] [svyranzrf...]
 --
-r,remote=  remote repository path
-b,blobs    output a series of blob ids
-t,tree     output a tree id
-c,commit   output a commit id
-n,name=    name of backup set to update (if any)
-N,noop     don't actually save the data anywhere
-q,quiet    don't print progress messages
-v,verbose  increase log output (can be used more than once)
-copy       just copy input to output, hashsplitting along the way
-bench      print benchmark timings to stderr
-max-pack-size=  maximum bytes in a single pack
-max-pack-objects=  maximum number of objects in a single pack
-fanout=  maximum number of blobs in a single tree
+e,erzbgr=  erzbgr ercbfvgbel cngu
+o,oybof    bhgchg n frevrf bs oybo vqf
+g,gerr     bhgchg n gerr vq
+p,pbzzvg   bhgchg n pbzzvg vq
+a,anzr=    anzr bs onpxhc frg gb hcqngr (vs nal)
+A,abbc     qba'g npghnyyl fnir gur qngn naljurer
+d,dhvrg    qba'g cevag cebterff zrffntrf
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
+pbcl       whfg pbcl vachg gb bhgchg, unfufcyvggvat nybat gur jnl
+orapu      cevag orapuznex gvzvatf gb fgqree
+znk-cnpx-fvmr=  znkvzhz olgrf va n fvatyr cnpx
+znk-cnpx-bowrpgf=  znkvzhz ahzore bs bowrpgf va n fvatyr cnpx
+snabhg=  znkvzhz ahzore bs oybof va n fvatyr gerr
 """
-o = options.Options('bup split', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-if not (opt.blobs or opt.tree or opt.commit or opt.name or
-        opt.noop or opt.copy):
-    o.fatal("use one or more of -b, -t, -c, -n, -N, --copy")
-if (opt.noop or opt.copy) and (opt.blobs or opt.tree or 
-                               opt.commit or opt.name):
-    o.fatal('-N is incompatible with -b, -t, -c, -n')
-
-if opt.verbose >= 2:
-    git.verbose = opt.verbose - 1
-    opt.bench = 1
-if opt.max_pack_size:
-    hashsplit.max_pack_size = parse_num(opt.max_pack_size)
-if opt.max_pack_objects:
-    hashsplit.max_pack_objects = parse_num(opt.max_pack_objects)
-if opt.fanout:
-    hashsplit.fanout = parse_num(opt.fanout)
-if opt.blobs:
-    hashsplit.fanout = 0
-
-is_reverse = os.environ.get('BUP_SERVER_REVERSE')
-if is_reverse and opt.remote:
-    o.fatal("don't use -r in reverse mode; it's automatic")
-start_time = time.time()
-
-refname = opt.name and 'refs/heads/%s' % opt.name or None
-if opt.noop or opt.copy:
-    cli = w = oldref = None
-elif opt.remote or is_reverse:
-    cli = client.Client(opt.remote)
-    oldref = refname and cli.read_ref(refname) or None
-    w = cli.new_packwriter()
-else:
-    cli = None
-    oldref = refname and git.read_ref(refname) or None
-    w = git.PackWriter()
-
-files = extra and (open(fn) for fn in extra) or [sys.stdin]
-if w:
-    shalist = hashsplit.split_to_shalist(w, files)
-    tree = w.new_tree(shalist)
-else:
-    last = 0
-    for (blob, bits) in hashsplit.hashsplit_iter(files):
-        hashsplit.total_split += len(blob)
-        if opt.copy:
-            sys.stdout.write(str(blob))
-        megs = hashsplit.total_split/1024/1024
-        if not opt.quiet and last != megs:
-            progress('%d Mbytes read\r' % megs)
-            last = megs
-    progress('%d Mbytes read, done.\n' % megs)
-
-if opt.verbose:
-    log('\n')
-if opt.blobs:
-    for (mode,name,bin) in shalist:
-        print bin.encode('hex')
-if opt.tree:
-    print tree.encode('hex')
-if opt.commit or opt.name:
-    msg = 'bup split\n\nGenerated by command:\n%r' % sys.argv
-    ref = opt.name and ('refs/heads/%s' % opt.name) or None
-    commit = w.new_commit(oldref, tree, msg)
-    if opt.commit:
-        print commit.encode('hex')
-
-if w:
-    w.close()  # must close before we can update the ref
+b = bcgvbaf.Bcgvbaf('ohc fcyvg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+vs abg (bcg.oybof be bcg.gerr be bcg.pbzzvg be bcg.anzr be
+        bcg.abbc be bcg.pbcl):
+    b.sngny("hfr bar be zber bs -o, -g, -p, -a, -A, --pbcl")
+vs (bcg.abbc be bcg.pbcl) naq (bcg.oybof be bcg.gerr be 
+                               bcg.pbzzvg be bcg.anzr):
+    b.sngny('-A vf vapbzcngvoyr jvgu -o, -g, -p, -a')
+
+vs bcg.ireobfr >= 2:
+    tvg.ireobfr = bcg.ireobfr - 1
+    bcg.orapu = 1
+vs bcg.znk_cnpx_fvmr:
+    unfufcyvg.znk_cnpx_fvmr = cnefr_ahz(bcg.znk_cnpx_fvmr)
+vs bcg.znk_cnpx_bowrpgf:
+    unfufcyvg.znk_cnpx_bowrpgf = cnefr_ahz(bcg.znk_cnpx_bowrpgf)
+vs bcg.snabhg:
+    unfufcyvg.snabhg = cnefr_ahz(bcg.snabhg)
+vs bcg.oybof:
+    unfufcyvg.snabhg = 0
+
+vf_erirefr = bf.raiveba.trg('OHC_FREIRE_ERIREFR')
+vs vf_erirefr naq bcg.erzbgr:
+    b.sngny("qba'g hfr -e va erirefr zbqr; vg'f nhgbzngvp")
+fgneg_gvzr = gvzr.gvzr()
+
+ersanzr = bcg.anzr naq 'ersf/urnqf/%f' % bcg.anzr be Abar
+vs bcg.abbc be bcg.pbcl:
+    pyv = j = byqers = Abar
+ryvs bcg.erzbgr be vf_erirefr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    byqers = ersanzr naq pyv.ernq_ers(ersanzr) be Abar
+    j = pyv.arj_cnpxjevgre()
+ryfr:
+    pyv = Abar
+    byqers = ersanzr naq tvg.ernq_ers(ersanzr) be Abar
+    j = tvg.CnpxJevgre()
+
+svyrf = rkgen naq (bcra(sa) sbe sa va rkgen) be [flf.fgqva]
+vs j:
+    funyvfg = unfufcyvg.fcyvg_gb_funyvfg(j, svyrf)
+    gerr = j.arj_gerr(funyvfg)
+ryfr:
+    ynfg = 0
+    sbe (oybo, ovgf) va unfufcyvg.unfufcyvg_vgre(svyrf):
+        unfufcyvg.gbgny_fcyvg += yra(oybo)
+        vs bcg.pbcl:
+            flf.fgqbhg.jevgr(fge(oybo))
+        zrtf = unfufcyvg.gbgny_fcyvg/1024/1024
+        vs abg bcg.dhvrg naq ynfg != zrtf:
+            cebterff('%q Zolgrf ernq\e' % zrtf)
+            ynfg = zrtf
+    cebterff('%q Zolgrf ernq, qbar.\a' % zrtf)
+
+vs bcg.ireobfr:
+    ybt('\a')
+vs bcg.oybof:
+    sbe (zbqr,anzr,ova) va funyvfg:
+        cevag ova.rapbqr('urk')
+vs bcg.gerr:
+    cevag gerr.rapbqr('urk')
+vs bcg.pbzzvg be bcg.anzr:
+    zft = 'ohc fcyvg\a\aTrarengrq ol pbzznaq:\a%e' % flf.neti
+    ers = bcg.anzr naq ('ersf/urnqf/%f' % bcg.anzr) be Abar
+    pbzzvg = j.arj_pbzzvg(byqers, gerr, zft)
+    vs bcg.pbzzvg:
+        cevag pbzzvg.rapbqr('urk')
+
+vs j:
+    j.pybfr()  # zhfg pybfr orsber jr pna hcqngr gur ers
         
-if opt.name:
-    if cli:
-        cli.update_ref(refname, commit, oldref)
-    else:
-        git.update_ref(refname, commit, oldref)
-
-if cli:
-    cli.close()
-
-secs = time.time() - start_time
-size = hashsplit.total_split
-if opt.bench:
-    log('\nbup: %.2fkbytes in %.2f secs = %.2f kbytes/sec\n'
-        % (size/1024., secs, size/1024./secs))
-#!/usr/bin/env python
-import sys, re, struct, mmap
-from bup import git, options
-from bup.helpers import *
-
-
-def s_from_bytes(bytes):
-    clist = [chr(b) for b in bytes]
-    return ''.join(clist)
-
-
-def report(count):
-    fields = ['VmSize', 'VmRSS', 'VmData', 'VmStk']
-    d = {}
-    for line in open('/proc/self/status').readlines():
-        l = re.split(r':\s*', line.strip(), 1)
-        d[l[0]] = l[1]
-    if count >= 0:
-        e1 = count
-        fields = [d[k] for k in fields]
-    else:
-        e1 = ''
-    print ('%9s  ' + ('%10s ' * len(fields))) % tuple([e1] + fields)
-    sys.stdout.flush()
-
-
-optspec = """
-bup memtest [-n elements] [-c cycles]
+vs bcg.anzr:
+    vs pyv:
+        pyv.hcqngr_ers(ersanzr, pbzzvg, byqers)
+    ryfr:
+        tvg.hcqngr_ers(ersanzr, pbzzvg, byqers)
+
+vs pyv:
+    pyv.pybfr()
+
+frpf = gvzr.gvzr() - fgneg_gvzr
+fvmr = unfufcyvg.gbgny_fcyvg
+vs bcg.orapu:
+    ybt('\aohc: %.2sxolgrf va %.2s frpf = %.2s xolgrf/frp\a'
+        % (fvmr/1024., frpf, fvmr/1024./frpf))
+#!/hfe/ova/rai clguba
+vzcbeg flf, er, fgehpg, zznc
+sebz ohc vzcbeg tvg, bcgvbaf
+sebz ohc.urycref vzcbeg *
+
+
+qrs f_sebz_olgrf(olgrf):
+    pyvfg = [pue(o) sbe o va olgrf]
+    erghea ''.wbva(pyvfg)
+
+
+qrs ercbeg(pbhag):
+    svryqf = ['IzFvmr', 'IzEFF', 'IzQngn', 'IzFgx']
+    q = {}
+    sbe yvar va bcra('/cebp/frys/fgnghf').ernqyvarf():
+        y = er.fcyvg(e':\f*', yvar.fgevc(), 1)
+        q[y[0]] = y[1]
+    vs pbhag >= 0:
+        r1 = pbhag
+        svryqf = [q[x] sbe x va svryqf]
+    ryfr:
+        r1 = ''
+    cevag ('%9f  ' + ('%10f ' * yra(svryqf))) % ghcyr([r1] + svryqf)
+    flf.fgqbhg.syhfu()
+
+
+bcgfcrp = """
+ohc zrzgrfg [-a ryrzragf] [-p plpyrf]
 --
-n,number=  number of objects per cycle
-c,cycles=  number of cycles to run
-ignore-midx  ignore .midx files, use only .idx files
+a,ahzore=  ahzore bs bowrpgf cre plpyr
+p,plpyrf=  ahzore bs plpyrf gb eha
+vtaber-zvqk  vtaber .zvqk svyrf, hfr bayl .vqk svyrf
 """
-o = options.Options('bup memtest', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal('no arguments expected')
-
-git.ignore_midx = opt.ignore_midx
-
-git.check_repo_or_die()
-m = git.PackIdxList(git.repo('objects/pack'))
-
-cycles = opt.cycles or 100
-number = opt.number or 10000
-
-report(-1)
-f = open('/dev/urandom')
-a = mmap.mmap(-1, 20)
-report(0)
-for c in xrange(cycles):
-    for n in xrange(number):
-        b = f.read(3)
-        if 0:
-            bytes = list(struct.unpack('!BBB', b)) + [0]*17
-            bytes[2] &= 0xf0
-            bin = struct.pack('!20s', s_from_bytes(bytes))
-        else:
-            a[0:2] = b[0:2]
-            a[2] = chr(ord(b[2]) & 0xf0)
-            bin = str(a[0:20])
-        #print bin.encode('hex')
-        m.exists(bin)
-    report((c+1)*number)
-#!/usr/bin/env python
-import sys, os, stat
-from bup import options, git, vfs
-from bup.helpers import *
-
-def print_node(text, n):
-    prefix = ''
-    if opt.hash:
-        prefix += "%s " % n.hash.encode('hex')
-    if stat.S_ISDIR(n.mode):
-        print '%s%s/' % (prefix, text)
-    elif stat.S_ISLNK(n.mode):
-        print '%s%s@' % (prefix, text)
-    else:
-        print '%s%s' % (prefix, text)
-
-
-optspec = """
-bup ls <dirs...>
+b = bcgvbaf.Bcgvbaf('ohc zrzgrfg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+tvg.vtaber_zvqk = bcg.vtaber_zvqk
+
+tvg.purpx_ercb_be_qvr()
+z = tvg.CnpxVqkYvfg(tvg.ercb('bowrpgf/cnpx'))
+
+plpyrf = bcg.plpyrf be 100
+ahzore = bcg.ahzore be 10000
+
+ercbeg(-1)
+s = bcra('/qri/henaqbz')
+n = zznc.zznc(-1, 20)
+ercbeg(0)
+sbe p va kenatr(plpyrf):
+    sbe a va kenatr(ahzore):
+        o = s.ernq(3)
+        vs 0:
+            olgrf = yvfg(fgehpg.hacnpx('!OOO', o)) + [0]*17
+            olgrf[2] &= 0ks0
+            ova = fgehpg.cnpx('!20f', f_sebz_olgrf(olgrf))
+        ryfr:
+            n[0:2] = o[0:2]
+            n[2] = pue(beq(o[2]) & 0ks0)
+            ova = fge(n[0:20])
+        #cevag ova.rapbqr('urk')
+        z.rkvfgf(ova)
+    ercbeg((p+1)*ahzore)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgng
+sebz ohc vzcbeg bcgvbaf, tvg, isf
+sebz ohc.urycref vzcbeg *
+
+qrs cevag_abqr(grkg, a):
+    cersvk = ''
+    vs bcg.unfu:
+        cersvk += "%f " % a.unfu.rapbqr('urk')
+    vs fgng.F_VFQVE(a.zbqr):
+        cevag '%f%f/' % (cersvk, grkg)
+    ryvs fgng.F_VFYAX(a.zbqr):
+        cevag '%f%f@' % (cersvk, grkg)
+    ryfr:
+        cevag '%f%f' % (cersvk, grkg)
+
+
+bcgfcrp = """
+ohc yf <qvef...>
 --
-s,hash   show hash for each file
+f,unfu   fubj unfu sbe rnpu svyr
 """
-o = options.Options('bup ls', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-top = vfs.RefList(None)
-
-if not extra:
-    extra = ['/']
-
-ret = 0
-for d in extra:
-    try:
-        n = top.lresolve(d)
-        if stat.S_ISDIR(n.mode):
-            for sub in n:
-                print_node(sub.name, sub)
-        else:
-            print_node(d, n)
-    except vfs.NodeError, e:
-        log('error: %s\n' % e)
-        ret = 1
-
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, os, re, stat, readline, fnmatch
-from bup import options, git, shquote, vfs
-from bup.helpers import *
-
-def node_name(text, n):
-    if stat.S_ISDIR(n.mode):
-        return '%s/' % text
-    elif stat.S_ISLNK(n.mode):
-        return '%s@' % text
-    else:
-        return '%s' % text
-
-
-def do_ls(path, n):
-    l = []
-    if stat.S_ISDIR(n.mode):
-        for sub in n:
-            l.append(node_name(sub.name, sub))
-    else:
-        l.append(node_name(path, n))
-    print columnate(l, '')
+b = bcgvbaf.Bcgvbaf('ohc yf', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+gbc = isf.ErsYvfg(Abar)
+
+vs abg rkgen:
+    rkgen = ['/']
+
+erg = 0
+sbe q va rkgen:
+    gel:
+        a = gbc.yerfbyir(q)
+        vs fgng.F_VFQVE(a.zbqr):
+            sbe fho va a:
+                cevag_abqr(fho.anzr, fho)
+        ryfr:
+            cevag_abqr(q, a)
+    rkprcg isf.AbqrReebe, r:
+        ybt('reebe: %f\a' % r)
+        erg = 1
+
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, er, fgng, ernqyvar, sazngpu
+sebz ohc vzcbeg bcgvbaf, tvg, fudhbgr, isf
+sebz ohc.urycref vzcbeg *
+
+qrs abqr_anzr(grkg, a):
+    vs fgng.F_VFQVE(a.zbqr):
+        erghea '%f/' % grkg
+    ryvs fgng.F_VFYAX(a.zbqr):
+        erghea '%f@' % grkg
+    ryfr:
+        erghea '%f' % grkg
+
+
+qrs qb_yf(cngu, a):
+    y = []
+    vs fgng.F_VFQVE(a.zbqr):
+        sbe fho va a:
+            y.nccraq(abqr_anzr(fho.anzr, fho))
+    ryfr:
+        y.nccraq(abqr_anzr(cngu, a))
+    cevag pbyhzangr(y, '')
     
 
-def write_to_file(inf, outf):
-    for blob in chunkyreader(inf):
-        outf.write(blob)
+qrs jevgr_gb_svyr(vas, bhgs):
+    sbe oybo va puhaxlernqre(vas):
+        bhgs.jevgr(oybo)
     
 
-def inputiter():
-    if os.isatty(sys.stdin.fileno()):
-        while 1:
-            try:
-                yield raw_input('bup> ')
-            except EOFError:
-                break
-    else:
-        for line in sys.stdin:
-            yield line
-
-
-def _completer_get_subs(line):
-    (qtype, lastword) = shquote.unfinished_word(line)
-    (dir,name) = os.path.split(lastword)
-    #log('\ncompleter: %r %r %r\n' % (qtype, lastword, text))
-    n = pwd.resolve(dir)
-    subs = list(filter(lambda x: x.name.startswith(name),
-                       n.subs()))
-    return (dir, name, qtype, lastword, subs)
-
-
-_last_line = None
-_last_res = None
-def completer(text, state):
-    global _last_line
-    global _last_res
-    try:
-        line = readline.get_line_buffer()[:readline.get_endidx()]
-        if _last_line != line:
-            _last_res = _completer_get_subs(line)
-            _last_line = line
-        (dir, name, qtype, lastword, subs) = _last_res
-        if state < len(subs):
-            sn = subs[state]
-            sn1 = sn.resolve('')  # deref symlinks
-            fullname = os.path.join(dir, sn.name)
-            if stat.S_ISDIR(sn1.mode):
-                ret = shquote.what_to_add(qtype, lastword, fullname+'/',
-                                          terminate=False)
-            else:
-                ret = shquote.what_to_add(qtype, lastword, fullname,
-                                          terminate=True) + ' '
-            return text + ret
-    except Exception, e:
-        log('\nerror in completion: %s\n' % e)
+qrs vachgvgre():
+    vs bf.vfnggl(flf.fgqva.svyrab()):
+        juvyr 1:
+            gel:
+                lvryq enj_vachg('ohc> ')
+            rkprcg RBSReebe:
+                oernx
+    ryfr:
+        sbe yvar va flf.fgqva:
+            lvryq yvar
+
+
+qrs _pbzcyrgre_trg_fhof(yvar):
+    (dglcr, ynfgjbeq) = fudhbgr.hasvavfurq_jbeq(yvar)
+    (qve,anzr) = bf.cngu.fcyvg(ynfgjbeq)
+    #ybt('\apbzcyrgre: %e %e %e\a' % (dglcr, ynfgjbeq, grkg))
+    a = cjq.erfbyir(qve)
+    fhof = yvfg(svygre(ynzoqn k: k.anzr.fgnegfjvgu(anzr),
+                       a.fhof()))
+    erghea (qve, anzr, dglcr, ynfgjbeq, fhof)
+
+
+_ynfg_yvar = Abar
+_ynfg_erf = Abar
+qrs pbzcyrgre(grkg, fgngr):
+    tybony _ynfg_yvar
+    tybony _ynfg_erf
+    gel:
+        yvar = ernqyvar.trg_yvar_ohssre()[:ernqyvar.trg_raqvqk()]
+        vs _ynfg_yvar != yvar:
+            _ynfg_erf = _pbzcyrgre_trg_fhof(yvar)
+            _ynfg_yvar = yvar
+        (qve, anzr, dglcr, ynfgjbeq, fhof) = _ynfg_erf
+        vs fgngr < yra(fhof):
+            fa = fhof[fgngr]
+            fa1 = fa.erfbyir('')  # qrers flzyvaxf
+            shyyanzr = bf.cngu.wbva(qve, fa.anzr)
+            vs fgng.F_VFQVE(fa1.zbqr):
+                erg = fudhbgr.jung_gb_nqq(dglcr, ynfgjbeq, shyyanzr+'/',
+                                          grezvangr=Snyfr)
+            ryfr:
+                erg = fudhbgr.jung_gb_nqq(dglcr, ynfgjbeq, shyyanzr,
+                                          grezvangr=Gehr) + ' '
+            erghea grkg + erg
+    rkprcg Rkprcgvba, r:
+        ybt('\areebe va pbzcyrgvba: %f\a' % r)
 
             
-optspec = """
-bup ftp
+bcgfcrp = """
+ohc sgc
 """
-o = options.Options('bup ftp', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-
-top = vfs.RefList(None)
-pwd = top
-
-if extra:
-    lines = extra
-else:
-    readline.set_completer_delims(' \t\n\r/')
-    readline.set_completer(completer)
-    readline.parse_and_bind("tab: complete")
-    lines = inputiter()
-
-for line in lines:
-    if not line.strip():
-        continue
-    words = [word for (wordstart,word) in shquote.quotesplit(line)]
-    cmd = words[0].lower()
-    #log('execute: %r %r\n' % (cmd, parm))
-    try:
-        if cmd == 'ls':
-            for parm in (words[1:] or ['.']):
-                do_ls(parm, pwd.resolve(parm))
-        elif cmd == 'cd':
-            for parm in words[1:]:
-                pwd = pwd.resolve(parm)
-        elif cmd == 'pwd':
-            print pwd.fullname()
-        elif cmd == 'cat':
-            for parm in words[1:]:
-                write_to_file(pwd.resolve(parm).open(), sys.stdout)
-        elif cmd == 'get':
-            if len(words) not in [2,3]:
-                raise Exception('Usage: get <filename> [localname]')
-            rname = words[1]
-            (dir,base) = os.path.split(rname)
-            lname = len(words)>2 and words[2] or base
-            inf = pwd.resolve(rname).open()
-            log('Saving %r\n' % lname)
-            write_to_file(inf, open(lname, 'wb'))
-        elif cmd == 'mget':
-            for parm in words[1:]:
-                (dir,base) = os.path.split(parm)
-                for n in pwd.resolve(dir).subs():
-                    if fnmatch.fnmatch(n.name, base):
-                        try:
-                            log('Saving %r\n' % n.name)
-                            inf = n.open()
-                            outf = open(n.name, 'wb')
-                            write_to_file(inf, outf)
-                            outf.close()
-                        except Exception, e:
-                            log('  error: %s\n' % e)
-        elif cmd == 'help' or cmd == '?':
-            log('Commands: ls cd pwd cat get mget help quit\n')
-        elif cmd == 'quit' or cmd == 'exit' or cmd == 'bye':
-            break
-        else:
-            raise Exception('no such command %r' % cmd)
-    except Exception, e:
-        log('error: %s\n' % e)
-        #raise
-#!/usr/bin/env python
-import sys, mmap
-from bup import options, _hashsplit
-from bup.helpers import *
-
-optspec = """
-bup random [-S seed] <numbytes>
+b = bcgvbaf.Bcgvbaf('ohc sgc', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+
+gbc = isf.ErsYvfg(Abar)
+cjq = gbc
+
+vs rkgen:
+    yvarf = rkgen
+ryfr:
+    ernqyvar.frg_pbzcyrgre_qryvzf(' \g\a\e/')
+    ernqyvar.frg_pbzcyrgre(pbzcyrgre)
+    ernqyvar.cnefr_naq_ovaq("gno: pbzcyrgr")
+    yvarf = vachgvgre()
+
+sbe yvar va yvarf:
+    vs abg yvar.fgevc():
+        pbagvahr
+    jbeqf = [jbeq sbe (jbeqfgneg,jbeq) va fudhbgr.dhbgrfcyvg(yvar)]
+    pzq = jbeqf[0].ybjre()
+    #ybt('rkrphgr: %e %e\a' % (pzq, cnez))
+    gel:
+        vs pzq == 'yf':
+            sbe cnez va (jbeqf[1:] be ['.']):
+                qb_yf(cnez, cjq.erfbyir(cnez))
+        ryvs pzq == 'pq':
+            sbe cnez va jbeqf[1:]:
+                cjq = cjq.erfbyir(cnez)
+        ryvs pzq == 'cjq':
+            cevag cjq.shyyanzr()
+        ryvs pzq == 'png':
+            sbe cnez va jbeqf[1:]:
+                jevgr_gb_svyr(cjq.erfbyir(cnez).bcra(), flf.fgqbhg)
+        ryvs pzq == 'trg':
+            vs yra(jbeqf) abg va [2,3]:
+                envfr Rkprcgvba('Hfntr: trg <svyranzr> [ybpnyanzr]')
+            eanzr = jbeqf[1]
+            (qve,onfr) = bf.cngu.fcyvg(eanzr)
+            yanzr = yra(jbeqf)>2 naq jbeqf[2] be onfr
+            vas = cjq.erfbyir(eanzr).bcra()
+            ybt('Fnivat %e\a' % yanzr)
+            jevgr_gb_svyr(vas, bcra(yanzr, 'jo'))
+        ryvs pzq == 'ztrg':
+            sbe cnez va jbeqf[1:]:
+                (qve,onfr) = bf.cngu.fcyvg(cnez)
+                sbe a va cjq.erfbyir(qve).fhof():
+                    vs sazngpu.sazngpu(a.anzr, onfr):
+                        gel:
+                            ybt('Fnivat %e\a' % a.anzr)
+                            vas = a.bcra()
+                            bhgs = bcra(a.anzr, 'jo')
+                            jevgr_gb_svyr(vas, bhgs)
+                            bhgs.pybfr()
+                        rkprcg Rkprcgvba, r:
+                            ybt('  reebe: %f\a' % r)
+        ryvs pzq == 'uryc' be pzq == '?':
+            ybt('Pbzznaqf: yf pq cjq png trg ztrg uryc dhvg\a')
+        ryvs pzq == 'dhvg' be pzq == 'rkvg' be pzq == 'olr':
+            oernx
+        ryfr:
+            envfr Rkprcgvba('ab fhpu pbzznaq %e' % pzq)
+    rkprcg Rkprcgvba, r:
+        ybt('reebe: %f\a' % r)
+        #envfr
+#!/hfe/ova/rai clguba
+vzcbeg flf, zznc
+sebz ohc vzcbeg bcgvbaf, _unfufcyvg
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+ohc enaqbz [-F frrq] <ahzolgrf>
 --
-S,seed=   optional random number seed (default 1)
-f,force   print random data to stdout even if it's a tty
+F,frrq=   bcgvbany enaqbz ahzore frrq (qrsnhyg 1)
+s,sbepr   cevag enaqbz qngn gb fgqbhg rira vs vg'f n ggl
 """
-o = options.Options('bup random', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one argument expected")
-
-total = parse_num(extra[0])
-
-if opt.force or (not os.isatty(1) and
-                 not atoi(os.environ.get('BUP_FORCE_TTY')) & 1):
-    _hashsplit.write_random(sys.stdout.fileno(), total, opt.seed or 0)
-else:
-    log('error: not writing binary data to a terminal. Use -f to force.\n')
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, os, glob
-from bup import options
-
-optspec = """
-bup help <command>
+b = bcgvbaf.Bcgvbaf('ohc enaqbz', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar nethzrag rkcrpgrq")
+
+gbgny = cnefr_ahz(rkgen[0])
+
+vs bcg.sbepr be (abg bf.vfnggl(1) naq
+                 abg ngbv(bf.raiveba.trg('OHC_SBEPR_GGL')) & 1):
+    _unfufcyvg.jevgr_enaqbz(flf.fgqbhg.svyrab(), gbgny, bcg.frrq be 0)
+ryfr:
+    ybt('reebe: abg jevgvat ovanel qngn gb n grezvany. Hfr -s gb sbepr.\a')
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, tybo
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc uryc <pbzznaq>
 """
-o = options.Options('bup help', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) == 0:
-    # the wrapper program provides the default usage string
-    os.execvp(os.environ['BUP_MAIN_EXE'], ['bup'])
-elif len(extra) == 1:
-    docname = (extra[0]=='bup' and 'bup' or ('bup-%s' % extra[0]))
-    exe = sys.argv[0]
-    (exepath, exefile) = os.path.split(exe)
-    manpath = os.path.join(exepath, '../Documentation/' + docname + '.[1-9]')
-    g = glob.glob(manpath)
-    if g:
-        os.execvp('man', ['man', '-l', g[0]])
-    else:
-        os.execvp('man', ['man', docname])
-else:
-    o.fatal("exactly one command name expected")
-#!/usr/bin/env python
-import sys, os, stat, errno, fuse, re, time, tempfile
-from bup import options, git, vfs
-from bup.helpers import *
-
-
-class Stat(fuse.Stat):
-    def __init__(self):
-        self.st_mode = 0
-        self.st_ino = 0
-        self.st_dev = 0
-        self.st_nlink = 0
-        self.st_uid = 0
-        self.st_gid = 0
-        self.st_size = 0
-        self.st_atime = 0
-        self.st_mtime = 0
-        self.st_ctime = 0
-        self.st_blocks = 0
-        self.st_blksize = 0
-        self.st_rdev = 0
-
-
-cache = {}
-def cache_get(top, path):
-    parts = path.split('/')
-    cache[('',)] = top
-    c = None
-    max = len(parts)
-    #log('cache: %r\n' % cache.keys())
-    for i in range(max):
-        pre = parts[:max-i]
-        #log('cache trying: %r\n' % pre)
-        c = cache.get(tuple(pre))
-        if c:
-            rest = parts[max-i:]
-            for r in rest:
-                #log('resolving %r from %r\n' % (r, c.fullname()))
-                c = c.lresolve(r)
-                key = tuple(pre + [r])
-                #log('saving: %r\n' % (key,))
-                cache[key] = c
-            break
-    assert(c)
-    return c
+b = bcgvbaf.Bcgvbaf('ohc uryc', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) == 0:
+    # gur jenccre cebtenz cebivqrf gur qrsnhyg hfntr fgevat
+    bf.rkrpic(bf.raiveba['OHC_ZNVA_RKR'], ['ohc'])
+ryvs yra(rkgen) == 1:
+    qbpanzr = (rkgen[0]=='ohc' naq 'ohc' be ('ohc-%f' % rkgen[0]))
+    rkr = flf.neti[0]
+    (rkrcngu, rkrsvyr) = bf.cngu.fcyvg(rkr)
+    znacngu = bf.cngu.wbva(rkrcngu, '../Qbphzragngvba/' + qbpanzr + '.[1-9]')
+    t = tybo.tybo(znacngu)
+    vs t:
+        bf.rkrpic('zna', ['zna', '-y', t[0]])
+    ryfr:
+        bf.rkrpic('zna', ['zna', qbpanzr])
+ryfr:
+    b.sngny("rknpgyl bar pbzznaq anzr rkcrpgrq")
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgng, reeab, shfr, er, gvzr, grzcsvyr
+sebz ohc vzcbeg bcgvbaf, tvg, isf
+sebz ohc.urycref vzcbeg *
+
+
+pynff Fgng(shfr.Fgng):
+    qrs __vavg__(frys):
+        frys.fg_zbqr = 0
+        frys.fg_vab = 0
+        frys.fg_qri = 0
+        frys.fg_ayvax = 0
+        frys.fg_hvq = 0
+        frys.fg_tvq = 0
+        frys.fg_fvmr = 0
+        frys.fg_ngvzr = 0
+        frys.fg_zgvzr = 0
+        frys.fg_pgvzr = 0
+        frys.fg_oybpxf = 0
+        frys.fg_oyxfvmr = 0
+        frys.fg_eqri = 0
+
+
+pnpur = {}
+qrs pnpur_trg(gbc, cngu):
+    cnegf = cngu.fcyvg('/')
+    pnpur[('',)] = gbc
+    p = Abar
+    znk = yra(cnegf)
+    #ybt('pnpur: %e\a' % pnpur.xrlf())
+    sbe v va enatr(znk):
+        cer = cnegf[:znk-v]
+        #ybt('pnpur gelvat: %e\a' % cer)
+        p = pnpur.trg(ghcyr(cer))
+        vs p:
+            erfg = cnegf[znk-v:]
+            sbe e va erfg:
+                #ybt('erfbyivat %e sebz %e\a' % (e, p.shyyanzr()))
+                p = p.yerfbyir(e)
+                xrl = ghcyr(cer + [e])
+                #ybt('fnivat: %e\a' % (xrl,))
+                pnpur[xrl] = p
+            oernx
+    nffreg(p)
+    erghea p
         
     
 
-class BupFs(fuse.Fuse):
-    def __init__(self, top):
-        fuse.Fuse.__init__(self)
-        self.top = top
+pynff OhcSf(shfr.Shfr):
+    qrs __vavg__(frys, gbc):
+        shfr.Shfr.__vavg__(frys)
+        frys.gbc = gbc
     
-    def getattr(self, path):
-        log('--getattr(%r)\n' % path)
-        try:
-            node = cache_get(self.top, path)
-            st = Stat()
-            st.st_mode = node.mode
-            st.st_nlink = node.nlinks()
-            st.st_size = node.size()
-            st.st_mtime = node.mtime
-            st.st_ctime = node.ctime
-            st.st_atime = node.atime
-            return st
-        except vfs.NoSuchFile:
-            return -errno.ENOENT
-
-    def readdir(self, path, offset):
-        log('--readdir(%r)\n' % path)
-        node = cache_get(self.top, path)
-        yield fuse.Direntry('.')
-        yield fuse.Direntry('..')
-        for sub in node.subs():
-            yield fuse.Direntry(sub.name)
-
-    def readlink(self, path):
-        log('--readlink(%r)\n' % path)
-        node = cache_get(self.top, path)
-        return node.readlink()
-
-    def open(self, path, flags):
-        log('--open(%r)\n' % path)
-        node = cache_get(self.top, path)
-        accmode = os.O_RDONLY | os.O_WRONLY | os.O_RDWR
-        if (flags & accmode) != os.O_RDONLY:
-            return -errno.EACCES
-        node.open()
-
-    def release(self, path, flags):
-        log('--release(%r)\n' % path)
-
-    def read(self, path, size, offset):
-        log('--read(%r)\n' % path)
-        n = cache_get(self.top, path)
-        o = n.open()
-        o.seek(offset)
-        return o.read(size)
-
-
-if not hasattr(fuse, '__version__'):
-    raise RuntimeError, "your fuse module is too old for fuse.__version__"
-fuse.fuse_python_api = (0, 2)
-
-
-optspec = """
-bup fuse [-d] [-f] <mountpoint>
+    qrs trgngge(frys, cngu):
+        ybt('--trgngge(%e)\a' % cngu)
+        gel:
+            abqr = pnpur_trg(frys.gbc, cngu)
+            fg = Fgng()
+            fg.fg_zbqr = abqr.zbqr
+            fg.fg_ayvax = abqr.ayvaxf()
+            fg.fg_fvmr = abqr.fvmr()
+            fg.fg_zgvzr = abqr.zgvzr
+            fg.fg_pgvzr = abqr.pgvzr
+            fg.fg_ngvzr = abqr.ngvzr
+            erghea fg
+        rkprcg isf.AbFhpuSvyr:
+            erghea -reeab.RABRAG
+
+    qrs ernqqve(frys, cngu, bssfrg):
+        ybt('--ernqqve(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        lvryq shfr.Qveragel('.')
+        lvryq shfr.Qveragel('..')
+        sbe fho va abqr.fhof():
+            lvryq shfr.Qveragel(fho.anzr)
+
+    qrs ernqyvax(frys, cngu):
+        ybt('--ernqyvax(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        erghea abqr.ernqyvax()
+
+    qrs bcra(frys, cngu, syntf):
+        ybt('--bcra(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        nppzbqr = bf.B_EQBAYL | bf.B_JEBAYL | bf.B_EQJE
+        vs (syntf & nppzbqr) != bf.B_EQBAYL:
+            erghea -reeab.RNPPRF
+        abqr.bcra()
+
+    qrs eryrnfr(frys, cngu, syntf):
+        ybt('--eryrnfr(%e)\a' % cngu)
+
+    qrs ernq(frys, cngu, fvmr, bssfrg):
+        ybt('--ernq(%e)\a' % cngu)
+        a = pnpur_trg(frys.gbc, cngu)
+        b = a.bcra()
+        b.frrx(bssfrg)
+        erghea b.ernq(fvmr)
+
+
+vs abg unfngge(shfr, '__irefvba__'):
+    envfr EhagvzrReebe, "lbhe shfr zbqhyr vf gbb byq sbe shfr.__irefvba__"
+shfr.shfr_clguba_ncv = (0, 2)
+
+
+bcgfcrp = """
+ohc shfr [-q] [-s] <zbhagcbvag>
 --
-d,debug   increase debug level
-f,foreground  run in foreground
+q,qroht   vapernfr qroht yriry
+s,sbertebhaq  eha va sbertebhaq
 """
-o = options.Options('bup fuse', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one argument expected")
-
-git.check_repo_or_die()
-top = vfs.RefList(None)
-f = BupFs(top)
-f.fuse_args.mountpoint = extra[0]
-if opt.debug:
-    f.fuse_args.add('debug')
-if opt.foreground:
-    f.fuse_args.setmod('foreground')
-print f.multithreaded
-f.multithreaded = False
-
-f.main()
-#!/usr/bin/env python
-from bup import git, options, client
-from bup.helpers import *
-
-optspec = """
-[BUP_DIR=...] bup init [-r host:path]
+b = bcgvbaf.Bcgvbaf('ohc shfr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar nethzrag rkcrpgrq")
+
+tvg.purpx_ercb_be_qvr()
+gbc = isf.ErsYvfg(Abar)
+s = OhcSf(gbc)
+s.shfr_netf.zbhagcbvag = rkgen[0]
+vs bcg.qroht:
+    s.shfr_netf.nqq('qroht')
+vs bcg.sbertebhaq:
+    s.shfr_netf.frgzbq('sbertebhaq')
+cevag s.zhygvguernqrq
+s.zhygvguernqrq = Snyfr
+
+s.znva()
+#!/hfe/ova/rai clguba
+sebz ohc vzcbeg tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+[OHC_QVE=...] ohc vavg [-e ubfg:cngu]
 --
-r,remote=  remote repository path
+e,erzbgr=  erzbgr ercbfvgbel cngu
 """
-o = options.Options('bup init', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-
-if opt.remote:
-    git.init_repo()  # local repo
-    git.check_repo_or_die()
-    cli = client.Client(opt.remote, create=True)
-    cli.close()
-else:
-    git.init_repo()
-#!/usr/bin/env python
-import sys, math, struct, glob
-from bup import options, git
-from bup.helpers import *
-
-PAGE_SIZE=4096
-SHA_PER_PAGE=PAGE_SIZE/200.
-
-
-def merge(idxlist, bits, table):
-    count = 0
-    for e in git.idxmerge(idxlist):
-        count += 1
-        prefix = git.extract_bits(e, bits)
-        table[prefix] = count
-        yield e
-
-
-def do_midx(outdir, outfilename, infilenames):
-    if not outfilename:
-        assert(outdir)
-        sum = Sha1('\0'.join(infilenames)).hexdigest()
-        outfilename = '%s/midx-%s.midx' % (outdir, sum)
+b = bcgvbaf.Bcgvbaf('ohc vavg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+
+vs bcg.erzbgr:
+    tvg.vavg_ercb()  # ybpny ercb
+    tvg.purpx_ercb_be_qvr()
+    pyv = pyvrag.Pyvrag(bcg.erzbgr, perngr=Gehr)
+    pyv.pybfr()
+ryfr:
+    tvg.vavg_ercb()
+#!/hfe/ova/rai clguba
+vzcbeg flf, zngu, fgehpg, tybo
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+CNTR_FVMR=4096
+FUN_CRE_CNTR=CNTR_FVMR/200.
+
+
+qrs zretr(vqkyvfg, ovgf, gnoyr):
+    pbhag = 0
+    sbe r va tvg.vqkzretr(vqkyvfg):
+        pbhag += 1
+        cersvk = tvg.rkgenpg_ovgf(r, ovgf)
+        gnoyr[cersvk] = pbhag
+        lvryq r
+
+
+qrs qb_zvqk(bhgqve, bhgsvyranzr, vasvyranzrf):
+    vs abg bhgsvyranzr:
+        nffreg(bhgqve)
+        fhz = Fun1('\0'.wbva(vasvyranzrf)).urkqvtrfg()
+        bhgsvyranzr = '%f/zvqk-%f.zvqk' % (bhgqve, fhz)
     
-    inp = []
-    total = 0
-    for name in infilenames:
-        ix = git.PackIdx(name)
-        inp.append(ix)
-        total += len(ix)
-
-    log('Merging %d indexes (%d objects).\n' % (len(infilenames), total))
-    if (not opt.force and (total < 1024 and len(infilenames) < 3)) \
-       or (opt.force and not total):
-        log('midx: nothing to do.\n')
-        return
-
-    pages = int(total/SHA_PER_PAGE) or 1
-    bits = int(math.ceil(math.log(pages, 2)))
-    entries = 2**bits
-    log('Table size: %d (%d bits)\n' % (entries*4, bits))
+    vac = []
+    gbgny = 0
+    sbe anzr va vasvyranzrf:
+        vk = tvg.CnpxVqk(anzr)
+        vac.nccraq(vk)
+        gbgny += yra(vk)
+
+    ybt('Zretvat %q vaqrkrf (%q bowrpgf).\a' % (yra(vasvyranzrf), gbgny))
+    vs (abg bcg.sbepr naq (gbgny < 1024 naq yra(vasvyranzrf) < 3)) \
+       be (bcg.sbepr naq abg gbgny):
+        ybt('zvqk: abguvat gb qb.\a')
+        erghea
+
+    cntrf = vag(gbgny/FUN_CRE_CNTR) be 1
+    ovgf = vag(zngu.prvy(zngu.ybt(cntrf, 2)))
+    ragevrf = 2**ovgf
+    ybt('Gnoyr fvmr: %q (%q ovgf)\a' % (ragevrf*4, ovgf))
     
-    table = [0]*entries
-
-    try:
-        os.unlink(outfilename)
-    except OSError:
-        pass
-    f = open(outfilename + '.tmp', 'w+')
-    f.write('MIDX\0\0\0\2')
-    f.write(struct.pack('!I', bits))
-    assert(f.tell() == 12)
-    f.write('\0'*4*entries)
+    gnoyr = [0]*ragevrf
+
+    gel:
+        bf.hayvax(bhgsvyranzr)
+    rkprcg BFReebe:
+        cnff
+    s = bcra(bhgsvyranzr + '.gzc', 'j+')
+    s.jevgr('ZVQK\0\0\0\2')
+    s.jevgr(fgehpg.cnpx('!V', ovgf))
+    nffreg(s.gryy() == 12)
+    s.jevgr('\0'*4*ragevrf)
     
-    for e in merge(inp, bits, table):
-        f.write(e)
+    sbe r va zretr(vac, ovgf, gnoyr):
+        s.jevgr(r)
         
-    f.write('\0'.join(os.path.basename(p) for p in infilenames))
-
-    f.seek(12)
-    f.write(struct.pack('!%dI' % entries, *table))
-    f.close()
-    os.rename(outfilename + '.tmp', outfilename)
-
-    # this is just for testing
-    if 0:
-        p = git.PackMidx(outfilename)
-        assert(len(p.idxnames) == len(infilenames))
-        print p.idxnames
-        assert(len(p) == total)
-        pi = iter(p)
-        for i in merge(inp, total, bits, table):
-            assert(i == pi.next())
-            assert(p.exists(i))
-
-    print outfilename
-
-optspec = """
-bup midx [options...] <idxnames...>
+    s.jevgr('\0'.wbva(bf.cngu.onfranzr(c) sbe c va vasvyranzrf))
+
+    s.frrx(12)
+    s.jevgr(fgehpg.cnpx('!%qV' % ragevrf, *gnoyr))
+    s.pybfr()
+    bf.eranzr(bhgsvyranzr + '.gzc', bhgsvyranzr)
+
+    # guvf vf whfg sbe grfgvat
+    vs 0:
+        c = tvg.CnpxZvqk(bhgsvyranzr)
+        nffreg(yra(c.vqkanzrf) == yra(vasvyranzrf))
+        cevag c.vqkanzrf
+        nffreg(yra(c) == gbgny)
+        cv = vgre(c)
+        sbe v va zretr(vac, gbgny, ovgf, gnoyr):
+            nffreg(v == cv.arkg())
+            nffreg(c.rkvfgf(v))
+
+    cevag bhgsvyranzr
+
+bcgfcrp = """
+ohc zvqk [bcgvbaf...] <vqkanzrf...>
 --
-o,output=  output midx filename (default: auto-generated)
-a,auto     automatically create .midx from any unindexed .idx files
-f,force    automatically create .midx from *all* .idx files
+b,bhgchg=  bhgchg zvqk svyranzr (qrsnhyg: nhgb-trarengrq)
+n,nhgb     nhgbzngvpnyyl perngr .zvqk sebz nal havaqrkrq .vqk svyrf
+s,sbepr    nhgbzngvpnyyl perngr .zvqk sebz *nyy* .vqk svyrf
 """
-o = options.Options('bup midx', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra and (opt.auto or opt.force):
-    o.fatal("you can't use -f/-a and also provide filenames")
-
-git.check_repo_or_die()
-
-if extra:
-    do_midx(git.repo('objects/pack'), opt.output, extra)
-elif opt.auto or opt.force:
-    paths = [git.repo('objects/pack')]
-    paths += glob.glob(git.repo('index-cache/*/.'))
-    for path in paths:
-        log('midx: scanning %s\n' % path)
-        if opt.force:
-            do_midx(path, opt.output, glob.glob('%s/*.idx' % path))
-        elif opt.auto:
-            m = git.PackIdxList(path)
-            needed = {}
-            for pack in m.packs:  # only .idx files without a .midx are open
-                if pack.name.endswith('.idx'):
-                    needed[pack.name] = 1
-            del m
-            do_midx(path, opt.output, needed.keys())
-        log('\n')
-else:
-    o.fatal("you must use -f or -a or provide input filenames")
-#!/usr/bin/env python
-import sys, os, random
-from bup import options
-from bup.helpers import *
-
-
-def randblock(n):
-    l = []
-    for i in xrange(n):
-        l.append(chr(random.randrange(0,256)))
-    return ''.join(l)
-
-
-optspec = """
-bup damage [-n count] [-s maxsize] [-S seed] <filenames...>
+b = bcgvbaf.Bcgvbaf('ohc zvqk', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen naq (bcg.nhgb be bcg.sbepr):
+    b.sngny("lbh pna'g hfr -s/-n naq nyfb cebivqr svyranzrf")
+
+tvg.purpx_ercb_be_qvr()
+
+vs rkgen:
+    qb_zvqk(tvg.ercb('bowrpgf/cnpx'), bcg.bhgchg, rkgen)
+ryvs bcg.nhgb be bcg.sbepr:
+    cnguf = [tvg.ercb('bowrpgf/cnpx')]
+    cnguf += tybo.tybo(tvg.ercb('vaqrk-pnpur/*/.'))
+    sbe cngu va cnguf:
+        ybt('zvqk: fpnaavat %f\a' % cngu)
+        vs bcg.sbepr:
+            qb_zvqk(cngu, bcg.bhgchg, tybo.tybo('%f/*.vqk' % cngu))
+        ryvs bcg.nhgb:
+            z = tvg.CnpxVqkYvfg(cngu)
+            arrqrq = {}
+            sbe cnpx va z.cnpxf:  # bayl .vqk svyrf jvgubhg n .zvqk ner bcra
+                vs cnpx.anzr.raqfjvgu('.vqk'):
+                    arrqrq[cnpx.anzr] = 1
+            qry z
+            qb_zvqk(cngu, bcg.bhgchg, arrqrq.xrlf())
+        ybt('\a')
+ryfr:
+    b.sngny("lbh zhfg hfr -s be -n be cebivqr vachg svyranzrf")
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, enaqbz
+sebz ohc vzcbeg bcgvbaf
+sebz ohc.urycref vzcbeg *
+
+
+qrs enaqoybpx(a):
+    y = []
+    sbe v va kenatr(a):
+        y.nccraq(pue(enaqbz.enaqenatr(0,256)))
+    erghea ''.wbva(y)
+
+
+bcgfcrp = """
+ohc qnzntr [-a pbhag] [-f znkfvmr] [-F frrq] <svyranzrf...>
 --
-   WARNING: THIS COMMAND IS EXTREMELY DANGEROUS
-n,num=   number of blocks to damage
-s,size=  maximum size of each damaged block
-percent= maximum size of each damaged block (as a percent of entire file)
-equal    spread damage evenly throughout the file
-S,seed=  random number seed (for repeatable tests)
+   JNEAVAT: GUVF PBZZNAQ VF RKGERZRYL QNATREBHF
+a,ahz=   ahzore bs oybpxf gb qnzntr
+f,fvmr=  znkvzhz fvmr bs rnpu qnzntrq oybpx
+creprag= znkvzhz fvmr bs rnpu qnzntrq oybpx (nf n creprag bs ragver svyr)
+rdhny    fcernq qnzntr rirayl guebhtubhg gur svyr
+F,frrq=  enaqbz ahzore frrq (sbe ercrngnoyr grfgf)
 """
-o = options.Options('bup damage', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if not extra:
-    o.fatal('filenames expected')
-
-if opt.seed != None:
-    random.seed(opt.seed)
-
-for name in extra:
-    log('Damaging "%s"...\n' % name)
-    f = open(name, 'r+b')
-    st = os.fstat(f.fileno())
-    size = st.st_size
-    if opt.percent or opt.size:
-        ms1 = int(float(opt.percent or 0)/100.0*size) or size
-        ms2 = opt.size or size
-        maxsize = min(ms1, ms2)
-    else:
-        maxsize = 1
-    chunks = opt.num or 10
-    chunksize = size/chunks
-    for r in range(chunks):
-        sz = random.randrange(1, maxsize+1)
-        if sz > size:
-            sz = size
-        if opt.equal:
-            ofs = r*chunksize
-        else:
-            ofs = random.randrange(0, size - sz + 1)
-        log('  %6d bytes at %d\n' % (sz, ofs))
-        f.seek(ofs)
-        f.write(randblock(sz))
-    f.close()
-#!/usr/bin/env python
-import sys, struct, mmap
-from bup import options, git
-from bup.helpers import *
-
-suspended_w = None
-
-
-def init_dir(conn, arg):
-    git.init_repo(arg)
-    log('bup server: bupdir initialized: %r\n' % git.repodir)
-    conn.ok()
-
-
-def set_dir(conn, arg):
-    git.check_repo_or_die(arg)
-    log('bup server: bupdir is %r\n' % git.repodir)
-    conn.ok()
+b = bcgvbaf.Bcgvbaf('ohc qnzntr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs abg rkgen:
+    b.sngny('svyranzrf rkcrpgrq')
+
+vs bcg.frrq != Abar:
+    enaqbz.frrq(bcg.frrq)
+
+sbe anzr va rkgen:
+    ybt('Qnzntvat "%f"...\a' % anzr)
+    s = bcra(anzr, 'e+o')
+    fg = bf.sfgng(s.svyrab())
+    fvmr = fg.fg_fvmr
+    vs bcg.creprag be bcg.fvmr:
+        zf1 = vag(sybng(bcg.creprag be 0)/100.0*fvmr) be fvmr
+        zf2 = bcg.fvmr be fvmr
+        znkfvmr = zva(zf1, zf2)
+    ryfr:
+        znkfvmr = 1
+    puhaxf = bcg.ahz be 10
+    puhaxfvmr = fvmr/puhaxf
+    sbe e va enatr(puhaxf):
+        fm = enaqbz.enaqenatr(1, znkfvmr+1)
+        vs fm > fvmr:
+            fm = fvmr
+        vs bcg.rdhny:
+            bsf = e*puhaxfvmr
+        ryfr:
+            bsf = enaqbz.enaqenatr(0, fvmr - fm + 1)
+        ybt('  %6q olgrf ng %q\a' % (fm, bsf))
+        s.frrx(bsf)
+        s.jevgr(enaqoybpx(fm))
+    s.pybfr()
+#!/hfe/ova/rai clguba
+vzcbeg flf, fgehpg, zznc
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+fhfcraqrq_j = Abar
+
+
+qrs vavg_qve(pbaa, net):
+    tvg.vavg_ercb(net)
+    ybt('ohc freire: ohcqve vavgvnyvmrq: %e\a' % tvg.ercbqve)
+    pbaa.bx()
+
+
+qrs frg_qve(pbaa, net):
+    tvg.purpx_ercb_be_qvr(net)
+    ybt('ohc freire: ohcqve vf %e\a' % tvg.ercbqve)
+    pbaa.bx()
 
     
-def list_indexes(conn, junk):
-    git.check_repo_or_die()
-    for f in os.listdir(git.repo('objects/pack')):
-        if f.endswith('.idx'):
-            conn.write('%s\n' % f)
-    conn.ok()
-
-
-def send_index(conn, name):
-    git.check_repo_or_die()
-    assert(name.find('/') < 0)
-    assert(name.endswith('.idx'))
-    idx = git.PackIdx(git.repo('objects/pack/%s' % name))
-    conn.write(struct.pack('!I', len(idx.map)))
-    conn.write(idx.map)
-    conn.ok()
-
-
-def receive_objects(conn, junk):
-    global suspended_w
-    git.check_repo_or_die()
-    suggested = {}
-    if suspended_w:
-        w = suspended_w
-        suspended_w = None
-    else:
-        w = git.PackWriter()
-    while 1:
-        ns = conn.read(4)
-        if not ns:
-            w.abort()
-            raise Exception('object read: expected length header, got EOF\n')
-        n = struct.unpack('!I', ns)[0]
-        #log('expecting %d bytes\n' % n)
-        if not n:
-            log('bup server: received %d object%s.\n
-                % (w.count, w.count!=1 and "s" or ''))
-            fullpath = w.close()
-            if fullpath:
-                (dir, name) = os.path.split(fullpath)
-                conn.write('%s.idx\n' % name)
-            conn.ok()
-            return
-        elif n == 0xffffffff:
-            log('bup server: receive-objects suspended.\n')
-            suspended_w = w
-            conn.ok()
-            return
+qrs yvfg_vaqrkrf(pbaa, whax):
+    tvg.purpx_ercb_be_qvr()
+    sbe s va bf.yvfgqve(tvg.ercb('bowrpgf/cnpx')):
+        vs s.raqfjvgu('.vqk'):
+            pbaa.jevgr('%f\a' % s)
+    pbaa.bx()
+
+
+qrs fraq_vaqrk(pbaa, anzr):
+    tvg.purpx_ercb_be_qvr()
+    nffreg(anzr.svaq('/') < 0)
+    nffreg(anzr.raqfjvgu('.vqk'))
+    vqk = tvg.CnpxVqk(tvg.ercb('bowrpgf/cnpx/%f' % anzr))
+    pbaa.jevgr(fgehpg.cnpx('!V', yra(vqk.znc)))
+    pbaa.jevgr(vqk.znc)
+    pbaa.bx()
+
+
+qrs erprvir_bowrpgf(pbaa, whax):
+    tybony fhfcraqrq_j
+    tvg.purpx_ercb_be_qvr()
+    fhttrfgrq = {}
+    vs fhfcraqrq_j:
+        j = fhfcraqrq_j
+        fhfcraqrq_j = Abar
+    ryfr:
+        j = tvg.CnpxJevgre()
+    juvyr 1:
+        af = pbaa.ernq(4)
+        vs abg af:
+            j.nobeg()
+            envfr Rkprcgvba('bowrpg ernq: rkcrpgrq yratgu urnqre, tbg RBS\a')
+        a = fgehpg.hacnpx('!V', af)[0]
+        #ybt('rkcrpgvat %q olgrf\a' % a)
+        vs abg a:
+            ybt('ohc freire: erprvirq %q bowrpg%f.\a
+                % (j.pbhag, j.pbhag!=1 naq "f" be ''))
+            shyycngu = j.pybfr()
+            vs shyycngu:
+                (qve, anzr) = bf.cngu.fcyvg(shyycngu)
+                pbaa.jevgr('%f.vqk\a' % anzr)
+            pbaa.bx()
+            erghea
+        ryvs a == 0kssssssss:
+            ybt('ohc freire: erprvir-bowrpgf fhfcraqrq.\a')
+            fhfcraqrq_j = j
+            pbaa.bx()
+            erghea
             
-        buf = conn.read(n)  # object sizes in bup are reasonably small
-        #log('read %d bytes\n' % n)
-        if len(buf) < n:
-            w.abort()
-            raise Exception('object read: expected %d bytes, got %d\n'
-                            % (n, len(buf)))
-        (type, content) = git._decode_packobj(buf)
-        sha = git.calc_hash(type, content)
-        oldpack = w.exists(sha)
-        # FIXME: we only suggest a single index per cycle, because the client
-        # is currently dumb to download more than one per cycle anyway.
-        # Actually we should fix the client, but this is a minor optimization
-        # on the server side.
-        if not suggested and \
-          oldpack and (oldpack == True or oldpack.endswith('.midx')):
-            # FIXME: we shouldn't really have to know about midx files
-            # at this layer.  But exists() on a midx doesn't return the
-            # packname (since it doesn't know)... probably we should just
-            # fix that deficiency of midx files eventually, although it'll
-            # make the files bigger.  This method is certainly not very
-            # efficient.
-            w.objcache.refresh(skip_midx = True)
-            oldpack = w.objcache.exists(sha)
-            log('new suggestion: %r\n' % oldpack)
-            assert(oldpack)
-            assert(oldpack != True)
-            assert(not oldpack.endswith('.midx'))
-            w.objcache.refresh(skip_midx = False)
-        if not suggested and oldpack:
-            assert(oldpack.endswith('.idx'))
-            (dir,name) = os.path.split(oldpack)
-            if not (name in suggested):
-                log("bup server: suggesting index %s\n" % name)
-                conn.write('index %s\n' % name)
-                suggested[name] = 1
-        else:
-            w._raw_write([buf])
-    # NOTREACHED
-
-
-def read_ref(conn, refname):
-    git.check_repo_or_die()
-    r = git.read_ref(refname)
-    conn.write('%s\n' % (r or '').encode('hex'))
-    conn.ok()
-
-
-def update_ref(conn, refname):
-    git.check_repo_or_die()
-    newval = conn.readline().strip()
-    oldval = conn.readline().strip()
-    git.update_ref(refname, newval.decode('hex'), oldval.decode('hex'))
-    conn.ok()
-
-
-def cat(conn, id):
-    git.check_repo_or_die()
-    try:
-        for blob in git.cat(id):
-            conn.write(struct.pack('!I', len(blob)))
-            conn.write(blob)
-    except KeyError, e:
-        log('server: error: %s\n' % e)
-        conn.write('\0\0\0\0')
-        conn.error(e)
-    else:
-        conn.write('\0\0\0\0')
-        conn.ok()
-
-
-optspec = """
-bup server
+        ohs = pbaa.ernq(a)  # bowrpg fvmrf va ohc ner ernfbanoyl fznyy
+        #ybt('ernq %q olgrf\a' % a)
+        vs yra(ohs) < a:
+            j.nobeg()
+            envfr Rkprcgvba('bowrpg ernq: rkcrpgrq %q olgrf, tbg %q\a'
+                            % (a, yra(ohs)))
+        (glcr, pbagrag) = tvg._qrpbqr_cnpxbow(ohs)
+        fun = tvg.pnyp_unfu(glcr, pbagrag)
+        byqcnpx = j.rkvfgf(fun)
+        # SVKZR: jr bayl fhttrfg n fvatyr vaqrk cre plpyr, orpnhfr gur pyvrag
+        # vf pheeragyl qhzo gb qbjaybnq zber guna bar cre plpyr naljnl.
+        # Npghnyyl jr fubhyq svk gur pyvrag, ohg guvf vf n zvabe bcgvzvmngvba
+        # ba gur freire fvqr.
+        vs abg fhttrfgrq naq \
+          byqcnpx naq (byqcnpx == Gehr be byqcnpx.raqfjvgu('.zvqk')):
+            # SVKZR: jr fubhyqa'g ernyyl unir gb xabj nobhg zvqk svyrf
+            # ng guvf ynlre.  Ohg rkvfgf() ba n zvqk qbrfa'g erghea gur
+            # cnpxanzr (fvapr vg qbrfa'g xabj)... cebonoyl jr fubhyq whfg
+            # svk gung qrsvpvrapl bs zvqk svyrf riraghnyyl, nygubhtu vg'yy
+            # znxr gur svyrf ovttre.  Guvf zrgubq vf pregnvayl abg irel
+            # rssvpvrag.
+            j.bowpnpur.erserfu(fxvc_zvqk = Gehr)
+            byqcnpx = j.bowpnpur.rkvfgf(fun)
+            ybt('arj fhttrfgvba: %e\a' % byqcnpx)
+            nffreg(byqcnpx)
+            nffreg(byqcnpx != Gehr)
+            nffreg(abg byqcnpx.raqfjvgu('.zvqk'))
+            j.bowpnpur.erserfu(fxvc_zvqk = Snyfr)
+        vs abg fhttrfgrq naq byqcnpx:
+            nffreg(byqcnpx.raqfjvgu('.vqk'))
+            (qve,anzr) = bf.cngu.fcyvg(byqcnpx)
+            vs abg (anzr va fhttrfgrq):
+                ybt("ohc freire: fhttrfgvat vaqrk %f\a" % anzr)
+                pbaa.jevgr('vaqrk %f\a' % anzr)
+                fhttrfgrq[anzr] = 1
+        ryfr:
+            j._enj_jevgr([ohs])
+    # ABGERNPURQ
+
+
+qrs ernq_ers(pbaa, ersanzr):
+    tvg.purpx_ercb_be_qvr()
+    e = tvg.ernq_ers(ersanzr)
+    pbaa.jevgr('%f\a' % (e be '').rapbqr('urk'))
+    pbaa.bx()
+
+
+qrs hcqngr_ers(pbaa, ersanzr):
+    tvg.purpx_ercb_be_qvr()
+    arjiny = pbaa.ernqyvar().fgevc()
+    byqiny = pbaa.ernqyvar().fgevc()
+    tvg.hcqngr_ers(ersanzr, arjiny.qrpbqr('urk'), byqiny.qrpbqr('urk'))
+    pbaa.bx()
+
+
+qrs png(pbaa, vq):
+    tvg.purpx_ercb_be_qvr()
+    gel:
+        sbe oybo va tvg.png(vq):
+            pbaa.jevgr(fgehpg.cnpx('!V', yra(oybo)))
+            pbaa.jevgr(oybo)
+    rkprcg XrlReebe, r:
+        ybt('freire: reebe: %f\a' % r)
+        pbaa.jevgr('\0\0\0\0')
+        pbaa.reebe(r)
+    ryfr:
+        pbaa.jevgr('\0\0\0\0')
+        pbaa.bx()
+
+
+bcgfcrp = """
+ohc freire
 """
-o = options.Options('bup server', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal('no arguments expected')
-
-log('bup server: reading from stdin.\n')
-
-commands = {
-    'init-dir': init_dir,
-    'set-dir': set_dir,
-    'list-indexes': list_indexes,
-    'send-index': send_index,
-    'receive-objects': receive_objects,
-    'read-ref': read_ref,
-    'update-ref': update_ref,
-    'cat': cat,
+b = bcgvbaf.Bcgvbaf('ohc freire', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+ybt('ohc freire: ernqvat sebz fgqva.\a')
+
+pbzznaqf = {
+    'vavg-qve': vavg_qve,
+    'frg-qve': frg_qve,
+    'yvfg-vaqrkrf': yvfg_vaqrkrf,
+    'fraq-vaqrk': fraq_vaqrk,
+    'erprvir-bowrpgf': erprvir_bowrpgf,
+    'ernq-ers': ernq_ers,
+    'hcqngr-ers': hcqngr_ers,
+    'png': png,
 }
 
-# FIXME: this protocol is totally lame and not at all future-proof.
-# (Especially since we abort completely as soon as *anything* bad happens)
-conn = Conn(sys.stdin, sys.stdout)
-lr = linereader(conn)
-for _line in lr:
-    line = _line.strip()
-    if not line:
-        continue
-    log('bup server: command: %r\n' % line)
-    words = line.split(' ', 1)
-    cmd = words[0]
-    rest = len(words)>1 and words[1] or ''
-    if cmd == 'quit':
-        break
-    else:
-        cmd = commands.get(cmd)
-        if cmd:
-            cmd(conn, rest)
-        else:
-            raise Exception('unknown server command: %r\n' % line)
-
-log('bup server: done\n')
-#!/usr/bin/env python
-import sys, time, struct
-from bup import hashsplit, git, options, client
-from bup.helpers import *
-from subprocess import PIPE
-
-
-optspec = """
-bup join [-r host:path] [refs or hashes...]
+# SVKZR: guvf cebgbpby vf gbgnyyl ynzr naq abg ng nyy shgher-cebbs.
+# (Rfcrpvnyyl fvapr jr nobeg pbzcyrgryl nf fbba nf *nalguvat* onq unccraf)
+pbaa = Pbaa(flf.fgqva, flf.fgqbhg)
+ye = yvarernqre(pbaa)
+sbe _yvar va ye:
+    yvar = _yvar.fgevc()
+    vs abg yvar:
+        pbagvahr
+    ybt('ohc freire: pbzznaq: %e\a' % yvar)
+    jbeqf = yvar.fcyvg(' ', 1)
+    pzq = jbeqf[0]
+    erfg = yra(jbeqf)>1 naq jbeqf[1] be ''
+    vs pzq == 'dhvg':
+        oernx
+    ryfr:
+        pzq = pbzznaqf.trg(pzq)
+        vs pzq:
+            pzq(pbaa, erfg)
+        ryfr:
+            envfr Rkprcgvba('haxabja freire pbzznaq: %e\a' % yvar)
+
+ybt('ohc freire: qbar\a')
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr, fgehpg
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+sebz fhocebprff vzcbeg CVCR
+
+
+bcgfcrp = """
+ohc wbva [-e ubfg:cngu] [ersf be unfurf...]
 --
-r,remote=  remote repository path
+e,erzbgr=  erzbgr ercbfvgbel cngu
 """
-o = options.Options('bup join', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
+b = bcgvbaf.Bcgvbaf('ohc wbva', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
 
-git.check_repo_or_die()
+tvg.purpx_ercb_be_qvr()
 
-if not extra:
-    extra = linereader(sys.stdin)
+vs abg rkgen:
+    rkgen = yvarernqre(flf.fgqva)
 
-ret = 0
+erg = 0
 
-if opt.remote:
-    cli = client.Client(opt.remote)
-    cat = cli.cat
-else:
-    cp = git.CatPipe()
-    cat = cp.join
+vs bcg.erzbgr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    png = pyv.png
+ryfr:
+    pc = tvg.PngCvcr()
+    png = pc.wbva
 
-for id in extra:
-    try:
-        for blob in cat(id):
-            sys.stdout.write(blob)
-    except KeyError, e:
-        sys.stdout.flush()
-        log('error: %s\n' % e)
-        ret = 1
+sbe vq va rkgen:
+    gel:
+        sbe oybo va png(vq):
+            flf.fgqbhg.jevgr(oybo)
+    rkprcg XrlReebe, r:
+        flf.fgqbhg.syhfu()
+        ybt('reebe: %f\a' % r)
+        erg = 1
 
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, re, errno, stat, time, math
-from bup import hashsplit, git, options, index, client
-from bup.helpers import *
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, er, reeab, fgng, gvzr, zngu
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, vaqrk, pyvrag
+sebz ohc.urycref vzcbeg *
 
 
-optspec = """
-bup save [-tc] [-n name] <filenames...>
+bcgfcrp = """
+ohc fnir [-gp] [-a anzr] <svyranzrf...>
 --
-r,remote=  remote repository path
-t,tree     output a tree id
-c,commit   output a commit id
-n,name=    name of backup set to update (if any)
-v,verbose  increase log output (can be used more than once)
-q,quiet    don't show progress meter
-smaller=   only back up files smaller than n bytes
+e,erzbgr=  erzbgr ercbfvgbel cngu
+g,gerr     bhgchg n gerr vq
+p,pbzzvg   bhgchg n pbzzvg vq
+a,anzr=    anzr bs onpxhc frg gb hcqngr (vs nal)
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
+d,dhvrg    qba'g fubj cebterff zrgre
+fznyyre=   bayl onpx hc svyrf fznyyre guna a olgrf
 """
-o = options.Options('bup save', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-if not (opt.tree or opt.commit or opt.name):
-    o.fatal("use one or more of -t, -c, -n")
-if not extra:
-    o.fatal("no filenames given")
-
-opt.progress = (istty and not opt.quiet)
-opt.smaller = parse_num(opt.smaller or 0)
-
-is_reverse = os.environ.get('BUP_SERVER_REVERSE')
-if is_reverse and opt.remote:
-    o.fatal("don't use -r in reverse mode; it's automatic")
-
-refname = opt.name and 'refs/heads/%s' % opt.name or None
-if opt.remote or is_reverse:
-    cli = client.Client(opt.remote)
-    oldref = refname and cli.read_ref(refname) or None
-    w = cli.new_packwriter()
-else:
-    cli = None
-    oldref = refname and git.read_ref(refname) or None
-    w = git.PackWriter()
-
-handle_ctrl_c()
-
-
-def eatslash(dir):
-    if dir.endswith('/'):
-        return dir[:-1]
-    else:
-        return dir
-
-
-parts = ['']
-shalists = [[]]
-
-def _push(part):
-    assert(part)
-    parts.append(part)
-    shalists.append([])
-
-def _pop(force_tree):
-    assert(len(parts) >= 1)
-    part = parts.pop()
-    shalist = shalists.pop()
-    tree = force_tree or w.new_tree(shalist)
-    if shalists:
-        shalists[-1].append(('40000', part, tree))
-    else:  # this was the toplevel, so put it back for sanity
-        shalists.append(shalist)
-    return tree
-
-lastremain = None
-def progress_report(n):
-    global count, subcount, lastremain
-    subcount += n
-    cc = count + subcount
-    pct = total and (cc*100.0/total) or 0
-    now = time.time()
-    elapsed = now - tstart
-    kps = elapsed and int(cc/1024./elapsed)
-    kps_frac = 10 ** int(math.log(kps+1, 10) - 1)
-    kps = int(kps/kps_frac)*kps_frac
-    if cc:
-        remain = elapsed*1.0/cc * (total-cc)
-    else:
-        remain = 0.0
-    if (lastremain and (remain > lastremain)
-          and ((remain - lastremain)/lastremain < 0.05)):
-        remain = lastremain
-    else:
-        lastremain = remain
-    hours = int(remain/60/60)
-    mins = int(remain/60 - hours*60)
-    secs = int(remain - hours*60*60 - mins*60)
-    if elapsed < 30:
-        remainstr = ''
-        kpsstr = ''
-    else:
-        kpsstr = '%dk/s' % kps
-        if hours:
-            remainstr = '%dh%dm' % (hours, mins)
-        elif mins:
-            remainstr = '%dm%d' % (mins, secs)
-        else:
-            remainstr = '%ds' % secs
-    progress('Saving: %.2f%% (%d/%dk, %d/%d files) %s %s\r'
-             % (pct, cc/1024, total/1024, fcount, ftotal,
-                remainstr, kpsstr))
-
-
-r = index.Reader(git.repo('bupindex'))
-
-def already_saved(ent):
-    return ent.is_valid() and w.exists(ent.sha) and ent.sha
-
-def wantrecurse_pre(ent):
-    return not already_saved(ent)
-
-def wantrecurse_during(ent):
-    return not already_saved(ent) or ent.sha_missing()
-
-total = ftotal = 0
-if opt.progress:
-    for (transname,ent) in r.filter(extra, wantrecurse=wantrecurse_pre):
-        if not (ftotal % 10024):
-            progress('Reading index: %d\r' % ftotal)
-        exists = ent.exists()
-        hashvalid = already_saved(ent)
-        ent.set_sha_missing(not hashvalid)
-        if not opt.smaller or ent.size < opt.smaller:
-            if exists and not hashvalid:
-                total += ent.size
-        ftotal += 1
-    progress('Reading index: %d, done.\n' % ftotal)
-    hashsplit.progress_callback = progress_report
-
-tstart = time.time()
-count = subcount = fcount = 0
-lastskip_name = None
-lastdir = ''
-for (transname,ent) in r.filter(extra, wantrecurse=wantrecurse_during):
-    (dir, file) = os.path.split(ent.name)
-    exists = (ent.flags & index.IX_EXISTS)
-    hashvalid = already_saved(ent)
-    wasmissing = ent.sha_missing()
-    oldsize = ent.size
-    if opt.verbose:
-        if not exists:
-            status = 'D'
-        elif not hashvalid:
-            if ent.sha == index.EMPTY_SHA:
-                status = 'A'
-            else:
-                status = 'M'
-        else:
-            status = ' '
-        if opt.verbose >= 2:
-            log('%s %-70s\n' % (status, ent.name))
-        elif not stat.S_ISDIR(ent.mode) and lastdir != dir:
-            if not lastdir.startswith(dir):
-                log('%s %-70s\n' % (status, os.path.join(dir, '')))
-            lastdir = dir
-
-    if opt.progress:
-        progress_report(0)
-    fcount += 1
+b = bcgvbaf.Bcgvbaf('ohc fnir', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+vs abg (bcg.gerr be bcg.pbzzvg be bcg.anzr):
+    b.sngny("hfr bar be zber bs -g, -p, -a")
+vs abg rkgen:
+    b.sngny("ab svyranzrf tvira")
+
+bcg.cebterff = (vfggl naq abg bcg.dhvrg)
+bcg.fznyyre = cnefr_ahz(bcg.fznyyre be 0)
+
+vf_erirefr = bf.raiveba.trg('OHC_FREIRE_ERIREFR')
+vs vf_erirefr naq bcg.erzbgr:
+    b.sngny("qba'g hfr -e va erirefr zbqr; vg'f nhgbzngvp")
+
+ersanzr = bcg.anzr naq 'ersf/urnqf/%f' % bcg.anzr be Abar
+vs bcg.erzbgr be vf_erirefr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    byqers = ersanzr naq pyv.ernq_ers(ersanzr) be Abar
+    j = pyv.arj_cnpxjevgre()
+ryfr:
+    pyv = Abar
+    byqers = ersanzr naq tvg.ernq_ers(ersanzr) be Abar
+    j = tvg.CnpxJevgre()
+
+unaqyr_pgey_p()
+
+
+qrs rngfynfu(qve):
+    vs qve.raqfjvgu('/'):
+        erghea qve[:-1]
+    ryfr:
+        erghea qve
+
+
+cnegf = ['']
+funyvfgf = [[]]
+
+qrs _chfu(cneg):
+    nffreg(cneg)
+    cnegf.nccraq(cneg)
+    funyvfgf.nccraq([])
+
+qrs _cbc(sbepr_gerr):
+    nffreg(yra(cnegf) >= 1)
+    cneg = cnegf.cbc()
+    funyvfg = funyvfgf.cbc()
+    gerr = sbepr_gerr be j.arj_gerr(funyvfg)
+    vs funyvfgf:
+        funyvfgf[-1].nccraq(('40000', cneg, gerr))
+    ryfr:  # guvf jnf gur gbcyriry, fb chg vg onpx sbe fnavgl
+        funyvfgf.nccraq(funyvfg)
+    erghea gerr
+
+ynfgerznva = Abar
+qrs cebterff_ercbeg(a):
+    tybony pbhag, fhopbhag, ynfgerznva
+    fhopbhag += a
+    pp = pbhag + fhopbhag
+    cpg = gbgny naq (pp*100.0/gbgny) be 0
+    abj = gvzr.gvzr()
+    ryncfrq = abj - gfgneg
+    xcf = ryncfrq naq vag(pp/1024./ryncfrq)
+    xcf_senp = 10 ** vag(zngu.ybt(xcf+1, 10) - 1)
+    xcf = vag(xcf/xcf_senp)*xcf_senp
+    vs pp:
+        erznva = ryncfrq*1.0/pp * (gbgny-pp)
+    ryfr:
+        erznva = 0.0
+    vs (ynfgerznva naq (erznva > ynfgerznva)
+          naq ((erznva - ynfgerznva)/ynfgerznva < 0.05)):
+        erznva = ynfgerznva
+    ryfr:
+        ynfgerznva = erznva
+    ubhef = vag(erznva/60/60)
+    zvaf = vag(erznva/60 - ubhef*60)
+    frpf = vag(erznva - ubhef*60*60 - zvaf*60)
+    vs ryncfrq < 30:
+        erznvafge = ''
+        xcffge = ''
+    ryfr:
+        xcffge = '%qx/f' % xcf
+        vs ubhef:
+            erznvafge = '%qu%qz' % (ubhef, zvaf)
+        ryvs zvaf:
+            erznvafge = '%qz%q' % (zvaf, frpf)
+        ryfr:
+            erznvafge = '%qf' % frpf
+    cebterff('Fnivat: %.2s%% (%q/%qx, %q/%q svyrf) %f %f\e'
+             % (cpg, pp/1024, gbgny/1024, spbhag, sgbgny,
+                erznvafge, xcffge))
+
+
+e = vaqrk.Ernqre(tvg.ercb('ohcvaqrk'))
+
+qrs nyernql_fnirq(rag):
+    erghea rag.vf_inyvq() naq j.rkvfgf(rag.fun) naq rag.fun
+
+qrs jnagerphefr_cer(rag):
+    erghea abg nyernql_fnirq(rag)
+
+qrs jnagerphefr_qhevat(rag):
+    erghea abg nyernql_fnirq(rag) be rag.fun_zvffvat()
+
+gbgny = sgbgny = 0
+vs bcg.cebterff:
+    sbe (genafanzr,rag) va e.svygre(rkgen, jnagerphefr=jnagerphefr_cer):
+        vs abg (sgbgny % 10024):
+            cebterff('Ernqvat vaqrk: %q\e' % sgbgny)
+        rkvfgf = rag.rkvfgf()
+        unfuinyvq = nyernql_fnirq(rag)
+        rag.frg_fun_zvffvat(abg unfuinyvq)
+        vs abg bcg.fznyyre be rag.fvmr < bcg.fznyyre:
+            vs rkvfgf naq abg unfuinyvq:
+                gbgny += rag.fvmr
+        sgbgny += 1
+    cebterff('Ernqvat vaqrk: %q, qbar.\a' % sgbgny)
+    unfufcyvg.cebterff_pnyyonpx = cebterff_ercbeg
+
+gfgneg = gvzr.gvzr()
+pbhag = fhopbhag = spbhag = 0
+ynfgfxvc_anzr = Abar
+ynfgqve = ''
+sbe (genafanzr,rag) va e.svygre(rkgen, jnagerphefr=jnagerphefr_qhevat):
+    (qve, svyr) = bf.cngu.fcyvg(rag.anzr)
+    rkvfgf = (rag.syntf & vaqrk.VK_RKVFGF)
+    unfuinyvq = nyernql_fnirq(rag)
+    jnfzvffvat = rag.fun_zvffvat()
+    byqfvmr = rag.fvmr
+    vs bcg.ireobfr:
+        vs abg rkvfgf:
+            fgnghf = 'Q'
+        ryvs abg unfuinyvq:
+            vs rag.fun == vaqrk.RZCGL_FUN:
+                fgnghf = 'N'
+            ryfr:
+                fgnghf = 'Z'
+        ryfr:
+            fgnghf = ' '
+        vs bcg.ireobfr >= 2:
+            ybt('%f %-70f\a' % (fgnghf, rag.anzr))
+        ryvs abg fgng.F_VFQVE(rag.zbqr) naq ynfgqve != qve:
+            vs abg ynfgqve.fgnegfjvgu(qve):
+                ybt('%f %-70f\a' % (fgnghf, bf.cngu.wbva(qve, '')))
+            ynfgqve = qve
+
+    vs bcg.cebterff:
+        cebterff_ercbeg(0)
+    spbhag += 1
     
-    if not exists:
-        continue
-    if opt.smaller and ent.size >= opt.smaller:
-        if exists and not hashvalid:
-            add_error('skipping large file "%s"' % ent.name)
-            lastskip_name = ent.name
-        continue
-
-    assert(dir.startswith('/'))
-    dirp = dir.split('/')
-    while parts > dirp:
-        _pop(force_tree = None)
-    if dir != '/':
-        for part in dirp[len(parts):]:
-            _push(part)
-
-    if not file:
-        # no filename portion means this is a subdir.  But
-        # sub/parentdirectories already handled in the pop/push() part above.
-        oldtree = already_saved(ent) # may be None
-        newtree = _pop(force_tree = oldtree)
-        if not oldtree:
-            if lastskip_name and lastskip_name.startswith(ent.name):
-                ent.invalidate()
-            else:
-                ent.validate(040000, newtree)
-            ent.repack()
-        if exists and wasmissing:
-            count += oldsize
-        continue
-
-    # it's not a directory
-    id = None
-    if hashvalid:
-        mode = '%o' % ent.gitmode
-        id = ent.sha
-        shalists[-1].append((mode
-                             git.mangle_name(file, ent.mode, ent.gitmode),
-                             id))
-    else:
-        if stat.S_ISREG(ent.mode):
-            try:
-                f = hashsplit.open_noatime(ent.name)
-            except IOError, e:
-                add_error(e)
-                lastskip_name = ent.name
-            except OSError, e:
-                add_error(e)
-                lastskip_name = ent.name
-            else:
-                (mode, id) = hashsplit.split_to_blob_or_tree(w, [f])
-        else:
-            if stat.S_ISDIR(ent.mode):
-                assert(0)  # handled above
-            elif stat.S_ISLNK(ent.mode):
-                try:
-                    rl = os.readlink(ent.name)
-                except OSError, e:
-                    add_error(e)
-                    lastskip_name = ent.name
-                except IOError, e:
-                    add_error(e)
-                    lastskip_name = ent.name
-                else:
-                    (mode, id) = ('120000', w.new_blob(rl))
-            else:
-                add_error(Exception('skipping special file "%s"' % ent.name))
-                lastskip_name = ent.name
-        if id:
-            ent.validate(int(mode, 8), id)
-            ent.repack()
-            shalists[-1].append((mode,
-                                 git.mangle_name(file, ent.mode, ent.gitmode),
-                                 id))
-    if exists and wasmissing:
-        count += oldsize
-        subcount = 0
-
-
-if opt.progress:
-    pct = total and count*100.0/total or 100
-    progress('Saving: %.2f%% (%d/%dk, %d/%d files), done.    \n'
-             % (pct, count/1024, total/1024, fcount, ftotal))
-
-while len(parts) > 1:
-    _pop(force_tree = None)
-assert(len(shalists) == 1)
-tree = w.new_tree(shalists[-1])
-if opt.tree:
-    print tree.encode('hex')
-if opt.commit or opt.name:
-    msg = 'bup save\n\nGenerated by command:\n%r' % sys.argv
-    ref = opt.name and ('refs/heads/%s' % opt.name) or None
-    commit = w.new_commit(oldref, tree, msg)
-    if opt.commit:
-        print commit.encode('hex')
-
-w.close()  # must close before we can update the ref
+    vs abg rkvfgf:
+        pbagvahr
+    vs bcg.fznyyre naq rag.fvmr >= bcg.fznyyre:
+        vs rkvfgf naq abg unfuinyvq:
+            nqq_reebe('fxvccvat ynetr svyr "%f"' % rag.anzr)
+            ynfgfxvc_anzr = rag.anzr
+        pbagvahr
+
+    nffreg(qve.fgnegfjvgu('/'))
+    qvec = qve.fcyvg('/')
+    juvyr cnegf > qvec:
+        _cbc(sbepr_gerr = Abar)
+    vs qve != '/':
+        sbe cneg va qvec[yra(cnegf):]:
+            _chfu(cneg)
+
+    vs abg svyr:
+        # ab svyranzr cbegvba zrnaf guvf vf n fhoqve.  Ohg
+        # fho/cneragqverpgbevrf nyernql unaqyrq va gur cbc/chfu() cneg nobir.
+        byqgerr = nyernql_fnirq(rag) # znl or Abar
+        arjgerr = _cbc(sbepr_gerr = byqgerr)
+        vs abg byqgerr:
+            vs ynfgfxvc_anzr naq ynfgfxvc_anzr.fgnegfjvgu(rag.anzr):
+                rag.vainyvqngr()
+            ryfr:
+                rag.inyvqngr(040000, arjgerr)
+            rag.ercnpx()
+        vs rkvfgf naq jnfzvffvat:
+            pbhag += byqfvmr
+        pbagvahr
+
+    # vg'f abg n qverpgbel
+    vq = Abar
+    vs unfuinyvq:
+        zbqr = '%b' % rag.tvgzbqr
+        vq = rag.fun
+        funyvfgf[-1].nccraq((zbqr
+                             tvg.znatyr_anzr(svyr, rag.zbqr, rag.tvgzbqr),
+                             vq))
+    ryfr:
+        vs fgng.F_VFERT(rag.zbqr):
+            gel:
+                s = unfufcyvg.bcra_abngvzr(rag.anzr)
+            rkprcg VBReebe, r:
+                nqq_reebe(r)
+                ynfgfxvc_anzr = rag.anzr
+            rkprcg BFReebe, r:
+                nqq_reebe(r)
+                ynfgfxvc_anzr = rag.anzr
+            ryfr:
+                (zbqr, vq) = unfufcyvg.fcyvg_gb_oybo_be_gerr(j, [s])
+        ryfr:
+            vs fgng.F_VFQVE(rag.zbqr):
+                nffreg(0)  # unaqyrq nobir
+            ryvs fgng.F_VFYAX(rag.zbqr):
+                gel:
+                    ey = bf.ernqyvax(rag.anzr)
+                rkprcg BFReebe, r:
+                    nqq_reebe(r)
+                    ynfgfxvc_anzr = rag.anzr
+                rkprcg VBReebe, r:
+                    nqq_reebe(r)
+                    ynfgfxvc_anzr = rag.anzr
+                ryfr:
+                    (zbqr, vq) = ('120000', j.arj_oybo(ey))
+            ryfr:
+                nqq_reebe(Rkprcgvba('fxvccvat fcrpvny svyr "%f"' % rag.anzr))
+                ynfgfxvc_anzr = rag.anzr
+        vs vq:
+            rag.inyvqngr(vag(zbqr, 8), vq)
+            rag.ercnpx()
+            funyvfgf[-1].nccraq((zbqr,
+                                 tvg.znatyr_anzr(svyr, rag.zbqr, rag.tvgzbqr),
+                                 vq))
+    vs rkvfgf naq jnfzvffvat:
+        pbhag += byqfvmr
+        fhopbhag = 0
+
+
+vs bcg.cebterff:
+    cpg = gbgny naq pbhag*100.0/gbgny be 100
+    cebterff('Fnivat: %.2s%% (%q/%qx, %q/%q svyrf), qbar.    \a'
+             % (cpg, pbhag/1024, gbgny/1024, spbhag, sgbgny))
+
+juvyr yra(cnegf) > 1:
+    _cbc(sbepr_gerr = Abar)
+nffreg(yra(funyvfgf) == 1)
+gerr = j.arj_gerr(funyvfgf[-1])
+vs bcg.gerr:
+    cevag gerr.rapbqr('urk')
+vs bcg.pbzzvg be bcg.anzr:
+    zft = 'ohc fnir\a\aTrarengrq ol pbzznaq:\a%e' % flf.neti
+    ers = bcg.anzr naq ('ersf/urnqf/%f' % bcg.anzr) be Abar
+    pbzzvg = j.arj_pbzzvg(byqers, gerr, zft)
+    vs bcg.pbzzvg:
+        cevag pbzzvg.rapbqr('urk')
+
+j.pybfr()  # zhfg pybfr orsber jr pna hcqngr gur ers
         
-if opt.name:
-    if cli:
-        cli.update_ref(refname, commit, oldref)
-    else:
-        git.update_ref(refname, commit, oldref)
-
-if cli:
-    cli.close()
-
-if saved_errors:
-    log('WARNING: %d errors encountered while saving.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, time
-from bup import options
-
-optspec = """
-bup tick
+vs bcg.anzr:
+    vs pyv:
+        pyv.hcqngr_ers(ersanzr, pbzzvg, byqers)
+    ryfr:
+        tvg.hcqngr_ers(ersanzr, pbzzvg, byqers)
+
+vs pyv:
+    pyv.pybfr()
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq juvyr fnivat.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc gvpx
 """
-o = options.Options('bup tick', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-t = time.time()
-tleft = 1 - (t - int(t))
-time.sleep(tleft)
-#!/usr/bin/env python
-import os, sys, stat, time
-from bup import options, git, index, drecurse
-from bup.helpers import *
-
-
-def merge_indexes(out, r1, r2):
-    for e in index.MergeIter([r1, r2]):
-        # FIXME: shouldn't we remove deleted entries eventually?  When?
-        out.add_ixentry(e)
-
-
-class IterHelper:
-    def __init__(self, l):
-        self.i = iter(l)
-        self.cur = None
-        self.next()
-
-    def next(self):
-        try:
-            self.cur = self.i.next()
-        except StopIteration:
-            self.cur = None
-        return self.cur
-
-
-def check_index(reader):
-    try:
-        log('check: checking forward iteration...\n')
-        e = None
-        d = {}
-        for e in reader.forward_iter():
-            if e.children_n:
-                if opt.verbose:
-                    log('%08x+%-4d %r\n' % (e.children_ofs, e.children_n,
-                                            e.name))
-                assert(e.children_ofs)
-                assert(e.name.endswith('/'))
-                assert(not d.get(e.children_ofs))
-                d[e.children_ofs] = 1
-            if e.flags & index.IX_HASHVALID:
-                assert(e.sha != index.EMPTY_SHA)
-                assert(e.gitmode)
-        assert(not e or e.name == '/')  # last entry is *always* /
-        log('check: checking normal iteration...\n')
-        last = None
-        for e in reader:
-            if last:
-                assert(last > e.name)
-            last = e.name
-    except:
-        log('index error! at %r\n' % e)
-        raise
-    log('check: passed.\n')
-
-
-def update_index(top):
-    ri = index.Reader(indexfile)
-    wi = index.Writer(indexfile)
-    rig = IterHelper(ri.iter(name=top))
-    tstart = int(time.time())
-
-    hashgen = None
-    if opt.fake_valid:
-        def hashgen(name):
-            return (0100644, index.FAKE_SHA)
-
-    total = 0
-    for (path,pst) in drecurse.recursive_dirlist([top], xdev=opt.xdev):
-        if opt.verbose>=2 or (opt.verbose==1 and stat.S_ISDIR(pst.st_mode)):
-            sys.stdout.write('%s\n' % path)
-            sys.stdout.flush()
-            progress('Indexing: %d\r' % total)
-        elif not (total % 128):
-            progress('Indexing: %d\r' % total)
-        total += 1
-        while rig.cur and rig.cur.name > path:  # deleted paths
-            if rig.cur.exists():
-                rig.cur.set_deleted()
-                rig.cur.repack()
-            rig.next()
-        if rig.cur and rig.cur.name == path:    # paths that already existed
-            if pst:
-                rig.cur.from_stat(pst, tstart)
-            if not (rig.cur.flags & index.IX_HASHVALID):
-                if hashgen:
-                    (rig.cur.gitmode, rig.cur.sha) = hashgen(path)
-                    rig.cur.flags |= index.IX_HASHVALID
-            if opt.fake_invalid:
-                rig.cur.invalidate()
-            rig.cur.repack()
-            rig.next()
-        else:  # new paths
-            wi.add(path, pst, hashgen = hashgen)
-    progress('Indexing: %d, done.\n' % total)
+b = bcgvbaf.Bcgvbaf('ohc gvpx', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+g = gvzr.gvzr()
+gyrsg = 1 - (g - vag(g))
+gvzr.fyrrc(gyrsg)
+#!/hfe/ova/rai clguba
+vzcbeg bf, flf, fgng, gvzr
+sebz ohc vzcbeg bcgvbaf, tvg, vaqrk, qerphefr
+sebz ohc.urycref vzcbeg *
+
+
+qrs zretr_vaqrkrf(bhg, e1, e2):
+    sbe r va vaqrk.ZretrVgre([e1, e2]):
+        # SVKZR: fubhyqa'g jr erzbir qryrgrq ragevrf riraghnyyl?  Jura?
+        bhg.nqq_vkragel(r)
+
+
+pynff VgreUrycre:
+    qrs __vavg__(frys, y):
+        frys.v = vgre(y)
+        frys.phe = Abar
+        frys.arkg()
+
+    qrs arkg(frys):
+        gel:
+            frys.phe = frys.v.arkg()
+        rkprcg FgbcVgrengvba:
+            frys.phe = Abar
+        erghea frys.phe
+
+
+qrs purpx_vaqrk(ernqre):
+    gel:
+        ybt('purpx: purpxvat sbejneq vgrengvba...\a')
+        r = Abar
+        q = {}
+        sbe r va ernqre.sbejneq_vgre():
+            vs r.puvyqera_a:
+                vs bcg.ireobfr:
+                    ybt('%08k+%-4q %e\a' % (r.puvyqera_bsf, r.puvyqera_a,
+                                            r.anzr))
+                nffreg(r.puvyqera_bsf)
+                nffreg(r.anzr.raqfjvgu('/'))
+                nffreg(abg q.trg(r.puvyqera_bsf))
+                q[r.puvyqera_bsf] = 1
+            vs r.syntf & vaqrk.VK_UNFUINYVQ:
+                nffreg(r.fun != vaqrk.RZCGL_FUN)
+                nffreg(r.tvgzbqr)
+        nffreg(abg r be r.anzr == '/')  # ynfg ragel vf *nyjnlf* /
+        ybt('purpx: purpxvat abezny vgrengvba...\a')
+        ynfg = Abar
+        sbe r va ernqre:
+            vs ynfg:
+                nffreg(ynfg > r.anzr)
+            ynfg = r.anzr
+    rkprcg:
+        ybt('vaqrk reebe! ng %e\a' % r)
+        envfr
+    ybt('purpx: cnffrq.\a')
+
+
+qrs hcqngr_vaqrk(gbc):
+    ev = vaqrk.Ernqre(vaqrksvyr)
+    jv = vaqrk.Jevgre(vaqrksvyr)
+    evt = VgreUrycre(ev.vgre(anzr=gbc))
+    gfgneg = vag(gvzr.gvzr())
+
+    unfutra = Abar
+    vs bcg.snxr_inyvq:
+        qrs unfutra(anzr):
+            erghea (0100644, vaqrk.SNXR_FUN)
+
+    gbgny = 0
+    sbe (cngu,cfg) va qerphefr.erphefvir_qveyvfg([gbc], kqri=bcg.kqri):
+        vs bcg.ireobfr>=2 be (bcg.ireobfr==1 naq fgng.F_VFQVE(cfg.fg_zbqr)):
+            flf.fgqbhg.jevgr('%f\a' % cngu)
+            flf.fgqbhg.syhfu()
+            cebterff('Vaqrkvat: %q\e' % gbgny)
+        ryvs abg (gbgny % 128):
+            cebterff('Vaqrkvat: %q\e' % gbgny)
+        gbgny += 1
+        juvyr evt.phe naq evt.phe.anzr > cngu:  # qryrgrq cnguf
+            vs evt.phe.rkvfgf():
+                evt.phe.frg_qryrgrq()
+                evt.phe.ercnpx()
+            evt.arkg()
+        vs evt.phe naq evt.phe.anzr == cngu:    # cnguf gung nyernql rkvfgrq
+            vs cfg:
+                evt.phe.sebz_fgng(cfg, gfgneg)
+            vs abg (evt.phe.syntf & vaqrk.VK_UNFUINYVQ):
+                vs unfutra:
+                    (evt.phe.tvgzbqr, evt.phe.fun) = unfutra(cngu)
+                    evt.phe.syntf |= vaqrk.VK_UNFUINYVQ
+            vs bcg.snxr_vainyvq:
+                evt.phe.vainyvqngr()
+            evt.phe.ercnpx()
+            evt.arkg()
+        ryfr:  # arj cnguf
+            jv.nqq(cngu, cfg, unfutra = unfutra)
+    cebterff('Vaqrkvat: %q, qbar.\a' % gbgny)
     
-    if ri.exists():
-        ri.save()
-        wi.flush()
-        if wi.count:
-            wr = wi.new_reader()
-            if opt.check:
-                log('check: before merging: oldfile\n')
-                check_index(ri)
-                log('check: before merging: newfile\n')
-                check_index(wr)
-            mi = index.Writer(indexfile)
-            merge_indexes(mi, ri, wr)
-            ri.close()
-            mi.close()
-            wr.close()
-        wi.abort()
-    else:
-        wi.close()
-
-
-optspec = """
-bup index <-p|m|u> [options...] <filenames...>
+    vs ev.rkvfgf():
+        ev.fnir()
+        jv.syhfu()
+        vs jv.pbhag:
+            je = jv.arj_ernqre()
+            vs bcg.purpx:
+                ybt('purpx: orsber zretvat: byqsvyr\a')
+                purpx_vaqrk(ev)
+                ybt('purpx: orsber zretvat: arjsvyr\a')
+                purpx_vaqrk(je)
+            zv = vaqrk.Jevgre(vaqrksvyr)
+            zretr_vaqrkrf(zv, ev, je)
+            ev.pybfr()
+            zv.pybfr()
+            je.pybfr()
+        jv.nobeg()
+    ryfr:
+        jv.pybfr()
+
+
+bcgfcrp = """
+ohc vaqrk <-c|z|h> [bcgvbaf...] <svyranzrf...>
 --
-p,print    print the index entries for the given names (also works with -u)
-m,modified print only added/deleted/modified files (implies -p)
-s,status   print each filename with a status char (A/M/D) (implies -p)
-H,hash     print the hash for each object next to its name (implies -p)
-l,long     print more information about each file
-u,update   (recursively) update the index entries for the given filenames
-x,xdev,one-file-system  don't cross filesystem boundaries
-fake-valid mark all index entries as up-to-date even if they aren't
-fake-invalid mark all index entries as invalid
-check      carefully check index file integrity
-f,indexfile=  the name of the index file (default 'index')
-v,verbose  increase log output (can be used more than once)
+c,cevag    cevag gur vaqrk ragevrf sbe gur tvira anzrf (nyfb jbexf jvgu -h)
+z,zbqvsvrq cevag bayl nqqrq/qryrgrq/zbqvsvrq svyrf (vzcyvrf -c)
+f,fgnghf   cevag rnpu svyranzr jvgu n fgnghf pune (N/Z/Q) (vzcyvrf -c)
+U,unfu     cevag gur unfu sbe rnpu bowrpg arkg gb vgf anzr (vzcyvrf -c)
+y,ybat     cevag zber vasbezngvba nobhg rnpu svyr
+h,hcqngr   (erphefviryl) hcqngr gur vaqrk ragevrf sbe gur tvira svyranzrf
+k,kqri,bar-svyr-flfgrz  qba'g pebff svyrflfgrz obhaqnevrf
+snxr-inyvq znex nyy vaqrk ragevrf nf hc-gb-qngr rira vs gurl nera'g
+snxr-vainyvq znex nyy vaqrk ragevrf nf vainyvq
+purpx      pnershyyl purpx vaqrk svyr vagrtevgl
+s,vaqrksvyr=  gur anzr bs gur vaqrk svyr (qrsnhyg 'vaqrk')
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
 """
-o = options.Options('bup index', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if not (opt.modified or opt['print'] or opt.status or opt.update or opt.check):
-    o.fatal('supply one or more of -p, -s, -m, -u, or --check')
-if (opt.fake_valid or opt.fake_invalid) and not opt.update:
-    o.fatal('--fake-{in,}valid are meaningless without -u')
-if opt.fake_valid and opt.fake_invalid:
-    o.fatal('--fake-valid is incompatible with --fake-invalid')
-
-git.check_repo_or_die()
-indexfile = opt.indexfile or git.repo('bupindex')
-
-handle_ctrl_c()
-
-if opt.check:
-    log('check: starting initial check.\n')
-    check_index(index.Reader(indexfile))
-
-paths = index.reduce_paths(extra)
-
-if opt.update:
-    if not paths:
-        o.fatal('update (-u) requested but no paths given')
-    for (rp,path) in paths:
-        update_index(rp)
-
-if opt['print'] or opt.status or opt.modified:
-    for (name, ent) in index.Reader(indexfile).filter(extra or ['']):
-        if (opt.modified 
-            and (ent.is_valid() or ent.is_deleted() or not ent.mode)):
-            continue
-        line = ''
-        if opt.status:
-            if ent.is_deleted():
-                line += 'D '
-            elif not ent.is_valid():
-                if ent.sha == index.EMPTY_SHA:
-                    line += 'A '
-                else:
-                    line += 'M '
-            else:
-                line += '  '
-        if opt.hash:
-            line += ent.sha.encode('hex') + ' '
-        if opt.long:
-            line += "%7s %7s " % (oct(ent.mode), oct(ent.gitmode))
-        print line + (name or './')
-
-if opt.check and (opt['print'] or opt.status or opt.modified or opt.update):
-    log('check: starting final check.\n')
-    check_index(index.Reader(indexfile))
-
-if saved_errors:
-    log('WARNING: %d errors encountered.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, os, struct
-from bup import options, helpers
-
-optspec = """
-bup rbackup-server
+b = bcgvbaf.Bcgvbaf('ohc vaqrk', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs abg (bcg.zbqvsvrq be bcg['cevag'] be bcg.fgnghf be bcg.hcqngr be bcg.purpx):
+    b.sngny('fhccyl bar be zber bs -c, -f, -z, -h, be --purpx')
+vs (bcg.snxr_inyvq be bcg.snxr_vainyvq) naq abg bcg.hcqngr:
+    b.sngny('--snxr-{va,}inyvq ner zrnavatyrff jvgubhg -h')
+vs bcg.snxr_inyvq naq bcg.snxr_vainyvq:
+    b.sngny('--snxr-inyvq vf vapbzcngvoyr jvgu --snxr-vainyvq')
+
+tvg.purpx_ercb_be_qvr()
+vaqrksvyr = bcg.vaqrksvyr be tvg.ercb('ohcvaqrk')
+
+unaqyr_pgey_p()
+
+vs bcg.purpx:
+    ybt('purpx: fgnegvat vavgvny purpx.\a')
+    purpx_vaqrk(vaqrk.Ernqre(vaqrksvyr))
+
+cnguf = vaqrk.erqhpr_cnguf(rkgen)
+
+vs bcg.hcqngr:
+    vs abg cnguf:
+        b.sngny('hcqngr (-h) erdhrfgrq ohg ab cnguf tvira')
+    sbe (ec,cngu) va cnguf:
+        hcqngr_vaqrk(ec)
+
+vs bcg['cevag'] be bcg.fgnghf be bcg.zbqvsvrq:
+    sbe (anzr, rag) va vaqrk.Ernqre(vaqrksvyr).svygre(rkgen be ['']):
+        vs (bcg.zbqvsvrq 
+            naq (rag.vf_inyvq() be rag.vf_qryrgrq() be abg rag.zbqr)):
+            pbagvahr
+        yvar = ''
+        vs bcg.fgnghf:
+            vs rag.vf_qryrgrq():
+                yvar += 'Q '
+            ryvs abg rag.vf_inyvq():
+                vs rag.fun == vaqrk.RZCGL_FUN:
+                    yvar += 'N '
+                ryfr:
+                    yvar += 'Z '
+            ryfr:
+                yvar += '  '
+        vs bcg.unfu:
+            yvar += rag.fun.rapbqr('urk') + ' '
+        vs bcg.ybat:
+            yvar += "%7f %7f " % (bpg(rag.zbqr), bpg(rag.tvgzbqr))
+        cevag yvar + (anzr be './')
+
+vs bcg.purpx naq (bcg['cevag'] be bcg.fgnghf be bcg.zbqvsvrq be bcg.hcqngr):
+    ybt('purpx: fgnegvat svany purpx.\a')
+    purpx_vaqrk(vaqrk.Ernqre(vaqrksvyr))
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgehpg
+sebz ohc vzcbeg bcgvbaf, urycref
+
+bcgfcrp = """
+ohc eonpxhc-freire
 --
-    This command is not intended to be run manually.
+    Guvf pbzznaq vf abg vagraqrq gb or eha znahnyyl.
 """
-o = options.Options('bup rbackup-server', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-if extra:
-    o.fatal('no arguments expected')
-
-# get the subcommand's argv.
-# Normally we could just pass this on the command line, but since we'll often
-# be getting called on the other end of an ssh pipe, which tends to mangle
-# argv (by sending it via the shell), this way is much safer.
-buf = sys.stdin.read(4)
-sz = struct.unpack('!I', buf)[0]
-assert(sz > 0)
-assert(sz < 1000000)
-buf = sys.stdin.read(sz)
-assert(len(buf) == sz)
-argv = buf.split('\0')
-
-# stdin/stdout are supposedly connected to 'bup server' that the caller
-# started for us (often on the other end of an ssh tunnel), so we don't want
-# to misuse them.  Move them out of the way, then replace stdout with
-# a pointer to stderr in case our subcommand wants to do something with it.
+b = bcgvbaf.Bcgvbaf('ohc eonpxhc-freire', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+# trg gur fhopbzznaq'f neti.
+# Abeznyyl jr pbhyq whfg cnff guvf ba gur pbzznaq yvar, ohg fvapr jr'yy bsgra
+# or trggvat pnyyrq ba gur bgure raq bs na ffu cvcr, juvpu graqf gb znatyr
+# neti (ol fraqvat vg ivn gur furyy), guvf jnl vf zhpu fnsre.
+ohs = flf.fgqva.ernq(4)
+fm = fgehpg.hacnpx('!V', ohs)[0]
+nffreg(fm > 0)
+nffreg(fm < 1000000)
+ohs = flf.fgqva.ernq(fm)
+nffreg(yra(ohs) == fm)
+neti = ohs.fcyvg('\0')
+
+# fgqva/fgqbhg ner fhccbfrqyl pbaarpgrq gb 'ohc freire' gung gur pnyyre
+# fgnegrq sbe hf (bsgra ba gur bgure raq bs na ffu ghaary), fb jr qba'g jnag
+# gb zvfhfr gurz.  Zbir gurz bhg bs gur jnl, gura ercynpr fgqbhg jvgu
+# n cbvagre gb fgqree va pnfr bhe fhopbzznaq jnagf gb qb fbzrguvat jvgu vg.
 #
-# It might be nice to do the same with stdin, but my experiments showed that
-# ssh seems to make its child's stderr a readable-but-never-reads-anything
-# socket.  They really should have used shutdown(SHUT_WR) on the other end
-# of it, but probably didn't.  Anyway, it's too messy, so let's just make sure
-# anyone reading from stdin is disappointed.
+# Vg zvtug or avpr gb qb gur fnzr jvgu fgqva, ohg zl rkcrevzragf fubjrq gung
+# ffu frrzf gb znxr vgf puvyq'f fgqree n ernqnoyr-ohg-arire-ernqf-nalguvat
+# fbpxrg.  Gurl ernyyl fubhyq unir hfrq fuhgqbja(FUHG_JE) ba gur bgure raq
+# bs vg, ohg cebonoyl qvqa'g.  Naljnl, vg'f gbb zrffl, fb yrg'f whfg znxr fher
+# nalbar ernqvat sebz fgqva vf qvfnccbvagrq.
 #
-# (You can't just leave stdin/stdout "not open" by closing the file
-# descriptors.  Then the next file that opens is automatically assigned 0 or 1,
-# and people *trying* to read/write stdin/stdout get screwed.)
-os.dup2(0, 3)
-os.dup2(1, 4)
-os.dup2(2, 1)
-fd = os.open('/dev/null', os.O_RDONLY)
-os.dup2(fd, 0)
-os.close(fd)
-
-os.environ['BUP_SERVER_REVERSE'] = helpers.hostname()
-os.execvp(argv[0], argv)
-sys.exit(99)
-#!/usr/bin/env python
-import sys, os, glob, subprocess, time
-from bup import options, git
-from bup.helpers import *
-
-par2_ok = 0
-nullf = open('/dev/null')
-
-def debug(s):
-    if opt.verbose:
-        log(s)
-
-def run(argv):
-    # at least in python 2.5, using "stdout=2" or "stdout=sys.stderr" below
-    # doesn't actually work, because subprocess closes fd #2 right before
-    # execing for some reason.  So we work around it by duplicating the fd
-    # first.
-    fd = os.dup(2)  # copy stderr
-    try:
-        p = subprocess.Popen(argv, stdout=fd, close_fds=False)
-        return p.wait()
-    finally:
-        os.close(fd)
-
-def par2_setup():
-    global par2_ok
-    rv = 1
-    try:
-        p = subprocess.Popen(['par2', '--help'],
-                             stdout=nullf, stderr=nullf, stdin=nullf)
-        rv = p.wait()
-    except OSError:
-        log('fsck: warning: par2 not found; disabling recovery features.\n')
-    else:
-        par2_ok = 1
-
-def parv(lvl):
-    if opt.verbose >= lvl:
-        if istty:
-            return []
-        else:
-            return ['-q']
-    else:
-        return ['-qq']
-
-def par2_generate(base):
-    return run(['par2', 'create', '-n1', '-c200'] + parv(2)
-               + ['--', base, base+'.pack', base+'.idx'])
-
-def par2_verify(base):
-    return run(['par2', 'verify'] + parv(3) + ['--', base])
-
-def par2_repair(base):
-    return run(['par2', 'repair'] + parv(2) + ['--', base])
-
-def quick_verify(base):
-    f = open(base + '.pack', 'rb')
-    f.seek(-20, 2)
-    wantsum = f.read(20)
-    assert(len(wantsum) == 20)
-    f.seek(0)
-    sum = Sha1()
-    for b in chunkyreader(f, os.fstat(f.fileno()).st_size - 20):
-        sum.update(b)
-    if sum.digest() != wantsum:
-        raise ValueError('expected %r, got %r' % (wantsum.encode('hex'),
-                                                  sum.hexdigest()))
+# (Lbh pna'g whfg yrnir fgqva/fgqbhg "abg bcra" ol pybfvat gur svyr
+# qrfpevcgbef.  Gura gur arkg svyr gung bcraf vf nhgbzngvpnyyl nffvtarq 0 be 1,
+# naq crbcyr *gelvat* gb ernq/jevgr fgqva/fgqbhg trg fperjrq.)
+bf.qhc2(0, 3)
+bf.qhc2(1, 4)
+bf.qhc2(2, 1)
+sq = bf.bcra('/qri/ahyy', bf.B_EQBAYL)
+bf.qhc2(sq, 0)
+bf.pybfr(sq)
+
+bf.raiveba['OHC_FREIRE_ERIREFR'] = urycref.ubfganzr()
+bf.rkrpic(neti[0], neti)
+flf.rkvg(99)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, tybo, fhocebprff, gvzr
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+cne2_bx = 0
+ahyys = bcra('/qri/ahyy')
+
+qrs qroht(f):
+    vs bcg.ireobfr:
+        ybt(f)
+
+qrs eha(neti):
+    # ng yrnfg va clguba 2.5, hfvat "fgqbhg=2" be "fgqbhg=flf.fgqree" orybj
+    # qbrfa'g npghnyyl jbex, orpnhfr fhocebprff pybfrf sq #2 evtug orsber
+    # rkrpvat sbe fbzr ernfba.  Fb jr jbex nebhaq vg ol qhcyvpngvat gur sq
+    # svefg.
+    sq = bf.qhc(2)  # pbcl fgqree
+    gel:
+        c = fhocebprff.Cbcra(neti, fgqbhg=sq, pybfr_sqf=Snyfr)
+        erghea c.jnvg()
+    svanyyl:
+        bf.pybfr(sq)
+
+qrs cne2_frghc():
+    tybony cne2_bx
+    ei = 1
+    gel:
+        c = fhocebprff.Cbcra(['cne2', '--uryc'],
+                             fgqbhg=ahyys, fgqree=ahyys, fgqva=ahyys)
+        ei = c.jnvg()
+    rkprcg BFReebe:
+        ybt('sfpx: jneavat: cne2 abg sbhaq; qvfnoyvat erpbirel srngherf.\a')
+    ryfr:
+        cne2_bx = 1
+
+qrs cnei(yiy):
+    vs bcg.ireobfr >= yiy:
+        vs vfggl:
+            erghea []
+        ryfr:
+            erghea ['-d']
+    ryfr:
+        erghea ['-dd']
+
+qrs cne2_trarengr(onfr):
+    erghea eha(['cne2', 'perngr', '-a1', '-p200'] + cnei(2)
+               + ['--', onfr, onfr+'.cnpx', onfr+'.vqk'])
+
+qrs cne2_irevsl(onfr):
+    erghea eha(['cne2', 'irevsl'] + cnei(3) + ['--', onfr])
+
+qrs cne2_ercnve(onfr):
+    erghea eha(['cne2', 'ercnve'] + cnei(2) + ['--', onfr])
+
+qrs dhvpx_irevsl(onfr):
+    s = bcra(onfr + '.cnpx', 'eo')
+    s.frrx(-20, 2)
+    jnagfhz = s.ernq(20)
+    nffreg(yra(jnagfhz) == 20)
+    s.frrx(0)
+    fhz = Fun1()
+    sbe o va puhaxlernqre(s, bf.sfgng(s.svyrab()).fg_fvmr - 20):
+        fhz.hcqngr(o)
+    vs fhz.qvtrfg() != jnagfhz:
+        envfr InyhrReebe('rkcrpgrq %e, tbg %e' % (jnagfhz.rapbqr('urk'),
+                                                  fhz.urkqvtrfg()))
         
 
-def git_verify(base):
-    if opt.quick:
-        try:
-            quick_verify(base)
-        except Exception, e:
-            debug('error: %s\n' % e)
-            return 1
-        return 0
-    else:
-        return run(['git', 'verify-pack', '--', base])
+qrs tvg_irevsl(onfr):
+    vs bcg.dhvpx:
+        gel:
+            dhvpx_irevsl(onfr)
+        rkprcg Rkprcgvba, r:
+            qroht('reebe: %f\a' % r)
+            erghea 1
+        erghea 0
+    ryfr:
+        erghea eha(['tvg', 'irevsl-cnpx', '--', onfr])
     
     
-def do_pack(base, last):
-    code = 0
-    if par2_ok and par2_exists and (opt.repair or not opt.generate):
-        vresult = par2_verify(base)
-        if vresult != 0:
-            if opt.repair:
-                rresult = par2_repair(base)
-                if rresult != 0:
-                    print '%s par2 repair: failed (%d)' % (last, rresult)
-                    code = rresult
-                else:
-                    print '%s par2 repair: succeeded (0)' % last
-                    code = 100
-            else:
-                print '%s par2 verify: failed (%d)' % (last, vresult)
-                code = vresult
-        else:
-            print '%s ok' % last
-    elif not opt.generate or (par2_ok and not par2_exists):
-        gresult = git_verify(base)
-        if gresult != 0:
-            print '%s git verify: failed (%d)' % (last, gresult)
-            code = gresult
-        else:
-            if par2_ok and opt.generate:
-                presult = par2_generate(base)
-                if presult != 0:
-                    print '%s par2 create: failed (%d)' % (last, presult)
-                    code = presult
-                else:
-                    print '%s ok' % last
-            else:
-                print '%s ok' % last
-    else:
-        assert(opt.generate and (not par2_ok or par2_exists))
-        debug('    skipped: par2 file already generated.\n')
-    return code
-
-
-optspec = """
-bup fsck [options...] [filenames...]
+qrs qb_cnpx(onfr, ynfg):
+    pbqr = 0
+    vs cne2_bx naq cne2_rkvfgf naq (bcg.ercnve be abg bcg.trarengr):
+        ierfhyg = cne2_irevsl(onfr)
+        vs ierfhyg != 0:
+            vs bcg.ercnve:
+                eerfhyg = cne2_ercnve(onfr)
+                vs eerfhyg != 0:
+                    cevag '%f cne2 ercnve: snvyrq (%q)' % (ynfg, eerfhyg)
+                    pbqr = eerfhyg
+                ryfr:
+                    cevag '%f cne2 ercnve: fhpprrqrq (0)' % ynfg
+                    pbqr = 100
+            ryfr:
+                cevag '%f cne2 irevsl: snvyrq (%q)' % (ynfg, ierfhyg)
+                pbqr = ierfhyg
+        ryfr:
+            cevag '%f bx' % ynfg
+    ryvs abg bcg.trarengr be (cne2_bx naq abg cne2_rkvfgf):
+        terfhyg = tvg_irevsl(onfr)
+        vs terfhyg != 0:
+            cevag '%f tvg irevsl: snvyrq (%q)' % (ynfg, terfhyg)
+            pbqr = terfhyg
+        ryfr:
+            vs cne2_bx naq bcg.trarengr:
+                cerfhyg = cne2_trarengr(onfr)
+                vs cerfhyg != 0:
+                    cevag '%f cne2 perngr: snvyrq (%q)' % (ynfg, cerfhyg)
+                    pbqr = cerfhyg
+                ryfr:
+                    cevag '%f bx' % ynfg
+            ryfr:
+                cevag '%f bx' % ynfg
+    ryfr:
+        nffreg(bcg.trarengr naq (abg cne2_bx be cne2_rkvfgf))
+        qroht('    fxvccrq: cne2 svyr nyernql trarengrq.\a')
+    erghea pbqr
+
+
+bcgfcrp = """
+ohc sfpx [bcgvbaf...] [svyranzrf...]
 --
-r,repair    attempt to repair errors using par2 (dangerous!)
-g,generate  generate auto-repair information using par2
-v,verbose   increase verbosity (can be used more than once)
-quick       just check pack sha1sum, don't use git verify-pack
-j,jobs=     run 'n' jobs in parallel
-par2-ok     immediately return 0 if par2 is ok, 1 if not
-disable-par2  ignore par2 even if it is available
+e,ercnve    nggrzcg gb ercnve reebef hfvat cne2 (qnatrebhf!)
+t,trarengr  trarengr nhgb-ercnve vasbezngvba hfvat cne2
+i,ireobfr   vapernfr ireobfvgl (pna or hfrq zber guna bapr)
+dhvpx       whfg purpx cnpx fun1fhz, qba'g hfr tvg irevsl-cnpx
+w,wbof=     eha 'a' wbof va cnenyyry
+cne2-bx     vzzrqvngryl erghea 0 vs cne2 vf bx, 1 vs abg
+qvfnoyr-cne2  vtaber cne2 rira vs vg vf ninvynoyr
 """
-o = options.Options('bup fsck', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-par2_setup()
-if opt.par2_ok:
-    if par2_ok:
-        sys.exit(0)  # 'true' in sh
-    else:
-        sys.exit(1)
-if opt.disable_par2:
-    par2_ok = 0
-
-git.check_repo_or_die()
-
-if not extra:
-    debug('fsck: No filenames given: checking all packs.\n')
-    extra = glob.glob(git.repo('objects/pack/*.pack'))
-
-code = 0
-count = 0
-outstanding = {}
-for name in extra:
-    if name.endswith('.pack'):
-        base = name[:-5]
-    elif name.endswith('.idx'):
-        base = name[:-4]
-    elif name.endswith('.par2'):
-        base = name[:-5]
-    elif os.path.exists(name + '.pack'):
-        base = name
-    else:
-        raise Exception('%s is not a pack file!' % name)
-    (dir,last) = os.path.split(base)
-    par2_exists = os.path.exists(base + '.par2')
-    if par2_exists and os.stat(base + '.par2').st_size == 0:
-        par2_exists = 0
-    sys.stdout.flush()
-    debug('fsck: checking %s (%s)\n
-          % (last, par2_ok and par2_exists and 'par2' or 'git'))
-    if not opt.verbose:
-        progress('fsck (%d/%d)\r' % (count, len(extra)))
+b = bcgvbaf.Bcgvbaf('ohc sfpx', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+cne2_frghc()
+vs bcg.cne2_bx:
+    vs cne2_bx:
+        flf.rkvg(0)  # 'gehr' va fu
+    ryfr:
+        flf.rkvg(1)
+vs bcg.qvfnoyr_cne2:
+    cne2_bx = 0
+
+tvg.purpx_ercb_be_qvr()
+
+vs abg rkgen:
+    qroht('sfpx: Ab svyranzrf tvira: purpxvat nyy cnpxf.\a')
+    rkgen = tybo.tybo(tvg.ercb('bowrpgf/cnpx/*.cnpx'))
+
+pbqr = 0
+pbhag = 0
+bhgfgnaqvat = {}
+sbe anzr va rkgen:
+    vs anzr.raqfjvgu('.cnpx'):
+        onfr = anzr[:-5]
+    ryvs anzr.raqfjvgu('.vqk'):
+        onfr = anzr[:-4]
+    ryvs anzr.raqfjvgu('.cne2'):
+        onfr = anzr[:-5]
+    ryvs bf.cngu.rkvfgf(anzr + '.cnpx'):
+        onfr = anzr
+    ryfr:
+        envfr Rkprcgvba('%f vf abg n cnpx svyr!' % anzr)
+    (qve,ynfg) = bf.cngu.fcyvg(onfr)
+    cne2_rkvfgf = bf.cngu.rkvfgf(onfr + '.cne2')
+    vs cne2_rkvfgf naq bf.fgng(onfr + '.cne2').fg_fvmr == 0:
+        cne2_rkvfgf = 0
+    flf.fgqbhg.syhfu()
+    qroht('sfpx: purpxvat %f (%f)\a
+          % (ynfg, cne2_bx naq cne2_rkvfgf naq 'cne2' be 'tvg'))
+    vs abg bcg.ireobfr:
+        cebterff('sfpx (%q/%q)\e' % (pbhag, yra(rkgen)))
     
-    if not opt.jobs:
-        nc = do_pack(base, last)
-        code = code or nc
-        count += 1
-    else:
-        while len(outstanding) >= opt.jobs:
-            (pid,nc) = os.wait()
-            nc >>= 8
-            if pid in outstanding:
-                del outstanding[pid]
-                code = code or nc
-                count += 1
-        pid = os.fork()
-        if pid:  # parent
-            outstanding[pid] = 1
-        else: # child
-            try:
-                sys.exit(do_pack(base, last))
-            except Exception, e:
-                log('exception: %r\n' % e)
-                sys.exit(99)
+    vs abg bcg.wbof:
+        ap = qb_cnpx(onfr, ynfg)
+        pbqr = pbqr be ap
+        pbhag += 1
+    ryfr:
+        juvyr yra(bhgfgnaqvat) >= bcg.wbof:
+            (cvq,ap) = bf.jnvg()
+            ap >>= 8
+            vs cvq va bhgfgnaqvat:
+                qry bhgfgnaqvat[cvq]
+                pbqr = pbqr be ap
+                pbhag += 1
+        cvq = bf.sbex()
+        vs cvq:  # cnerag
+            bhgfgnaqvat[cvq] = 1
+        ryfr: # puvyq
+            gel:
+                flf.rkvg(qb_cnpx(onfr, ynfg))
+            rkprcg Rkprcgvba, r:
+                ybt('rkprcgvba: %e\a' % r)
+                flf.rkvg(99)
                 
-while len(outstanding):
-    (pid,nc) = os.wait()
-    nc >>= 8
-    if pid in outstanding:
-        del outstanding[pid]
-        code = code or nc
-        count += 1
-    if not opt.verbose:
-        progress('fsck (%d/%d)\r' % (count, len(extra)))
-
-if not opt.verbose and istty:
-    log('fsck done.           \n')
-sys.exit(code)
-#!/usr/bin/env python
-import sys, os, struct, getopt, subprocess, signal
-from bup import options, ssh
-from bup.helpers import *
-
-optspec = """
-bup rbackup <hostname> index ...
-bup rbackup <hostname> save ...
-bup rbackup <hostname> split ...
+juvyr yra(bhgfgnaqvat):
+    (cvq,ap) = bf.jnvg()
+    ap >>= 8
+    vs cvq va bhgfgnaqvat:
+        qry bhgfgnaqvat[cvq]
+        pbqr = pbqr be ap
+        pbhag += 1
+    vs abg bcg.ireobfr:
+        cebterff('sfpx (%q/%q)\e' % (pbhag, yra(rkgen)))
+
+vs abg bcg.ireobfr naq vfggl:
+    ybt('sfpx qbar.           \a')
+flf.rkvg(pbqr)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgehpg, trgbcg, fhocebprff, fvtany
+sebz ohc vzcbeg bcgvbaf, ffu
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+ohc eonpxhc <ubfganzr> vaqrk ...
+ohc eonpxhc <ubfganzr> fnir ...
+ohc eonpxhc <ubfganzr> fcyvg ...
 """
-o = options.Options('bup rbackup', optspec, optfunc=getopt.getopt)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-if len(extra) < 2:
-    o.fatal('arguments expected')
-
-class SigException(Exception):
-    def __init__(self, signum):
-        self.signum = signum
-        Exception.__init__(self, 'signal %d received' % signum)
-def handler(signum, frame):
-    raise SigException(signum)
-
-signal.signal(signal.SIGTERM, handler)
-signal.signal(signal.SIGINT, handler)
-
-sp = None
-p = None
-ret = 99
-
-try:
-    hostname = extra[0]
-    argv = extra[1:]
-    p = ssh.connect(hostname, 'rbackup-server')
-
-    argvs = '\0'.join(['bup'] + argv)
-    p.stdin.write(struct.pack('!I', len(argvs)) + argvs)
-    p.stdin.flush()
-
-    main_exe = os.environ.get('BUP_MAIN_EXE') or sys.argv[0]
-    sp = subprocess.Popen([main_exe, 'server'], stdin=p.stdout, stdout=p.stdin)
-
-    p.stdin.close()
-    p.stdout.close()
-
-finally:
-    while 1:
-        # if we get a signal while waiting, we have to keep waiting, just
-        # in case our child doesn't die.
-        try:
-            ret = p.wait()
-            sp.wait()
-            break
-        except SigException, e:
-            log('\nbup rbackup: %s\n' % e)
-            os.kill(p.pid, e.signum)
-            ret = 84
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, os, re
-from bup import options
-
-optspec = """
-bup newliner
+b = bcgvbaf.Bcgvbaf('ohc eonpxhc', bcgfcrp, bcgshap=trgbcg.trgbcg)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+vs yra(rkgen) < 2:
+    b.sngny('nethzragf rkcrpgrq')
+
+pynff FvtRkprcgvba(Rkprcgvba):
+    qrs __vavg__(frys, fvtahz):
+        frys.fvtahz = fvtahz
+        Rkprcgvba.__vavg__(frys, 'fvtany %q erprvirq' % fvtahz)
+qrs unaqyre(fvtahz, senzr):
+    envfr FvtRkprcgvba(fvtahz)
+
+fvtany.fvtany(fvtany.FVTGREZ, unaqyre)
+fvtany.fvtany(fvtany.FVTVAG, unaqyre)
+
+fc = Abar
+c = Abar
+erg = 99
+
+gel:
+    ubfganzr = rkgen[0]
+    neti = rkgen[1:]
+    c = ffu.pbaarpg(ubfganzr, 'eonpxhc-freire')
+
+    netif = '\0'.wbva(['ohc'] + neti)
+    c.fgqva.jevgr(fgehpg.cnpx('!V', yra(netif)) + netif)
+    c.fgqva.syhfu()
+
+    znva_rkr = bf.raiveba.trg('OHC_ZNVA_RKR') be flf.neti[0]
+    fc = fhocebprff.Cbcra([znva_rkr, 'freire'], fgqva=c.fgqbhg, fgqbhg=c.fgqva)
+
+    c.fgqva.pybfr()
+    c.fgqbhg.pybfr()
+
+svanyyl:
+    juvyr 1:
+        # vs jr trg n fvtany juvyr jnvgvat, jr unir gb xrrc jnvgvat, whfg
+        # va pnfr bhe puvyq qbrfa'g qvr.
+        gel:
+            erg = c.jnvg()
+            fc.jnvg()
+            oernx
+        rkprcg FvtRkprcgvba, r:
+            ybt('\aohc eonpxhc: %f\a' % r)
+            bf.xvyy(c.cvq, r.fvtahz)
+            erg = 84
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, er
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc arjyvare
 """
-o = options.Options('bup newliner', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-r = re.compile(r'([\r\n])')
-lastlen = 0
-all = ''
-while 1:
-    l = r.split(all, 1)
-    if len(l) <= 1:
-        try:
-            b = os.read(sys.stdin.fileno(), 4096)
-        except KeyboardInterrupt:
-            break
-        if not b:
-            break
-        all += b
-    else:
-        assert(len(l) == 3)
-        (line, splitchar, all) = l
-        #splitchar = '\n'
-        sys.stdout.write('%-*s%s' % (lastlen, line, splitchar))
-        if splitchar == '\r':
-            lastlen = len(line)
-        else:
-            lastlen = 0
-        sys.stdout.flush()
-
-if lastlen or all:
-    sys.stdout.write('%-*s\n' % (lastlen, all))
-#!/usr/bin/env python
-import sys
-from bup import options, git, _hashsplit
-from bup.helpers import *
-
-
-optspec = """
-bup margin
+b = bcgvbaf.Bcgvbaf('ohc arjyvare', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+e = er.pbzcvyr(e'([\e\a])')
+ynfgyra = 0
+nyy = ''
+juvyr 1:
+    y = e.fcyvg(nyy, 1)
+    vs yra(y) <= 1:
+        gel:
+            o = bf.ernq(flf.fgqva.svyrab(), 4096)
+        rkprcg XrlobneqVagreehcg:
+            oernx
+        vs abg o:
+            oernx
+        nyy += o
+    ryfr:
+        nffreg(yra(y) == 3)
+        (yvar, fcyvgpune, nyy) = y
+        #fcyvgpune = '\a'
+        flf.fgqbhg.jevgr('%-*f%f' % (ynfgyra, yvar, fcyvgpune))
+        vs fcyvgpune == '\e':
+            ynfgyra = yra(yvar)
+        ryfr:
+            ynfgyra = 0
+        flf.fgqbhg.syhfu()
+
+vs ynfgyra be nyy:
+    flf.fgqbhg.jevgr('%-*f\a' % (ynfgyra, nyy))
+#!/hfe/ova/rai clguba
+vzcbeg flf
+sebz ohc vzcbeg bcgvbaf, tvg, _unfufcyvg
+sebz ohc.urycref vzcbeg *
+
+
+bcgfcrp = """
+ohc znetva
 """
-o = options.Options('bup margin', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-git.check_repo_or_die()
-#git.ignore_midx = 1
-
-mi = git.PackIdxList(git.repo('objects/pack'))
-last = '\0'*20
-longmatch = 0
-for i in mi:
-    if i == last:
-        continue
-    #assert(str(i) >= last)
-    pm = _hashsplit.bitmatch(last, i)
-    longmatch = max(longmatch, pm)
-    last = i
-print longmatch
+b = bcgvbaf.Bcgvbaf('ohc znetva', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+tvg.purpx_ercb_be_qvr()
+#tvg.vtaber_zvqk = 1
+
+zv = tvg.CnpxVqkYvfg(tvg.ercb('bowrpgf/cnpx'))
+ynfg = '\0'*20
+ybatzngpu = 0
+sbe v va zv:
+    vs v == ynfg:
+        pbagvahr
+    #nffreg(fge(v) >= ynfg)
+    cz = _unfufcyvg.ovgzngpu(ynfg, v)
+    ybatzngpu = znk(ybatzngpu, cz)
+    ynfg = v
+cevag ybatzngpu
index afcd1f37ba621b8c453f61dd4e38a8cb40751ee4..31ee97900d92f636c55bbfdba7f00fb0174095eb 100644 (file)
-#!/usr/bin/env python
-from bup import options, drecurse
-from bup.helpers import *
+#!/hfe/ova/rai clguba
+sebz ohc vzcbeg bcgvbaf, qerphefr
+sebz ohc.urycref vzcbeg *
 
-optspec = """
-bup drecurse <path>
+bcgfcrp = """
+ohc qerphefr <cngu>
 --
-x,xdev,one-file-system   don't cross filesystem boundaries
-q,quiet  don't actually print filenames
-profile  run under the python profiler
+k,kqri,bar-svyr-flfgrz   qba'g pebff svyrflfgrz obhaqnevrf
+d,dhvrg  qba'g npghnyyl cevag svyranzrf
+cebsvyr  eha haqre gur clguba cebsvyre
 """
-o = options.Options('bup drecurse', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one filename expected")
-
-it = drecurse.recursive_dirlist(extra, opt.xdev)
-if opt.profile:
-    import cProfile
-    def do_it():
-        for i in it:
-            pass
-    cProfile.run('do_it()')
-else:
-    if opt.quiet:
-        for i in it:
-            pass
-    else:
-        for (name,st) in it:
-            print name
-
-if saved_errors:
-    log('WARNING: %d errors encountered.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, time, struct
-from bup import hashsplit, git, options, client
-from bup.helpers import *
-from subprocess import PIPE
-
-
-optspec = """
-bup split [-tcb] [-n name] [--bench] [filenames...]
+b = bcgvbaf.Bcgvbaf('ohc qerphefr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar svyranzr rkcrpgrq")
+
+vg = qerphefr.erphefvir_qveyvfg(rkgen, bcg.kqri)
+vs bcg.cebsvyr:
+    vzcbeg pCebsvyr
+    qrs qb_vg():
+        sbe v va vg:
+            cnff
+    pCebsvyr.eha('qb_vg()')
+ryfr:
+    vs bcg.dhvrg:
+        sbe v va vg:
+            cnff
+    ryfr:
+        sbe (anzr,fg) va vg:
+            cevag anzr
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr, fgehpg
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+sebz fhocebprff vzcbeg CVCR
+
+
+bcgfcrp = """
+ohc fcyvg [-gpo] [-a anzr] [--orapu] [svyranzrf...]
 --
-r,remote=  remote repository path
-b,blobs    output a series of blob ids
-t,tree     output a tree id
-c,commit   output a commit id
-n,name=    name of backup set to update (if any)
-N,noop     don't actually save the data anywhere
-q,quiet    don't print progress messages
-v,verbose  increase log output (can be used more than once)
-copy       just copy input to output, hashsplitting along the way
-bench      print benchmark timings to stderr
-max-pack-size=  maximum bytes in a single pack
-max-pack-objects=  maximum number of objects in a single pack
-fanout=  maximum number of blobs in a single tree
+e,erzbgr=  erzbgr ercbfvgbel cngu
+o,oybof    bhgchg n frevrf bs oybo vqf
+g,gerr     bhgchg n gerr vq
+p,pbzzvg   bhgchg n pbzzvg vq
+a,anzr=    anzr bs onpxhc frg gb hcqngr (vs nal)
+A,abbc     qba'g npghnyyl fnir gur qngn naljurer
+d,dhvrg    qba'g cevag cebterff zrffntrf
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
+pbcl       whfg pbcl vachg gb bhgchg, unfufcyvggvat nybat gur jnl
+orapu      cevag orapuznex gvzvatf gb fgqree
+znk-cnpx-fvmr=  znkvzhz olgrf va n fvatyr cnpx
+znk-cnpx-bowrpgf=  znkvzhz ahzore bs bowrpgf va n fvatyr cnpx
+snabhg=  znkvzhz ahzore bs oybof va n fvatyr gerr
 """
-o = options.Options('bup split', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-if not (opt.blobs or opt.tree or opt.commit or opt.name or
-        opt.noop or opt.copy):
-    o.fatal("use one or more of -b, -t, -c, -n, -N, --copy")
-if (opt.noop or opt.copy) and (opt.blobs or opt.tree or 
-                               opt.commit or opt.name):
-    o.fatal('-N is incompatible with -b, -t, -c, -n')
-
-if opt.verbose >= 2:
-    git.verbose = opt.verbose - 1
-    opt.bench = 1
-if opt.max_pack_size:
-    hashsplit.max_pack_size = parse_num(opt.max_pack_size)
-if opt.max_pack_objects:
-    hashsplit.max_pack_objects = parse_num(opt.max_pack_objects)
-if opt.fanout:
-    hashsplit.fanout = parse_num(opt.fanout)
-if opt.blobs:
-    hashsplit.fanout = 0
-
-is_reverse = os.environ.get('BUP_SERVER_REVERSE')
-if is_reverse and opt.remote:
-    o.fatal("don't use -r in reverse mode; it's automatic")
-start_time = time.time()
-
-refname = opt.name and 'refs/heads/%s' % opt.name or None
-if opt.noop or opt.copy:
-    cli = w = oldref = None
-elif opt.remote or is_reverse:
-    cli = client.Client(opt.remote)
-    oldref = refname and cli.read_ref(refname) or None
-    w = cli.new_packwriter()
-else:
-    cli = None
-    oldref = refname and git.read_ref(refname) or None
-    w = git.PackWriter()
-
-files = extra and (open(fn) for fn in extra) or [sys.stdin]
-if w:
-    shalist = hashsplit.split_to_shalist(w, files)
-    tree = w.new_tree(shalist)
-else:
-    last = 0
-    for (blob, bits) in hashsplit.hashsplit_iter(files):
-        hashsplit.total_split += len(blob)
-        if opt.copy:
-            sys.stdout.write(str(blob))
-        megs = hashsplit.total_split/1024/1024
-        if not opt.quiet and last != megs:
-            progress('%d Mbytes read\r' % megs)
-            last = megs
-    progress('%d Mbytes read, done.\n' % megs)
-
-if opt.verbose:
-    log('\n')
-if opt.blobs:
-    for (mode,name,bin) in shalist:
-        print bin.encode('hex')
-if opt.tree:
-    print tree.encode('hex')
-if opt.commit or opt.name:
-    msg = 'bup split\n\nGenerated by command:\n%r' % sys.argv
-    ref = opt.name and ('refs/heads/%s' % opt.name) or None
-    commit = w.new_commit(oldref, tree, msg)
-    if opt.commit:
-        print commit.encode('hex')
-
-if w:
-    w.close()  # must close before we can update the ref
+b = bcgvbaf.Bcgvbaf('ohc fcyvg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+vs abg (bcg.oybof be bcg.gerr be bcg.pbzzvg be bcg.anzr be
+        bcg.abbc be bcg.pbcl):
+    b.sngny("hfr bar be zber bs -o, -g, -p, -a, -A, --pbcl")
+vs (bcg.abbc be bcg.pbcl) naq (bcg.oybof be bcg.gerr be 
+                               bcg.pbzzvg be bcg.anzr):
+    b.sngny('-A vf vapbzcngvoyr jvgu -o, -g, -p, -a')
+
+vs bcg.ireobfr >= 2:
+    tvg.ireobfr = bcg.ireobfr - 1
+    bcg.orapu = 1
+vs bcg.znk_cnpx_fvmr:
+    unfufcyvg.znk_cnpx_fvmr = cnefr_ahz(bcg.znk_cnpx_fvmr)
+vs bcg.znk_cnpx_bowrpgf:
+    unfufcyvg.znk_cnpx_bowrpgf = cnefr_ahz(bcg.znk_cnpx_bowrpgf)
+vs bcg.snabhg:
+    unfufcyvg.snabhg = cnefr_ahz(bcg.snabhg)
+vs bcg.oybof:
+    unfufcyvg.snabhg = 0
+
+vf_erirefr = bf.raiveba.trg('OHC_FREIRE_ERIREFR')
+vs vf_erirefr naq bcg.erzbgr:
+    b.sngny("qba'g hfr -e va erirefr zbqr; vg'f nhgbzngvp")
+fgneg_gvzr = gvzr.gvzr()
+
+ersanzr = bcg.anzr naq 'ersf/urnqf/%f' % bcg.anzr be Abar
+vs bcg.abbc be bcg.pbcl:
+    pyv = j = byqers = Abar
+ryvs bcg.erzbgr be vf_erirefr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    byqers = ersanzr naq pyv.ernq_ers(ersanzr) be Abar
+    j = pyv.arj_cnpxjevgre()
+ryfr:
+    pyv = Abar
+    byqers = ersanzr naq tvg.ernq_ers(ersanzr) be Abar
+    j = tvg.CnpxJevgre()
+
+svyrf = rkgen naq (bcra(sa) sbe sa va rkgen) be [flf.fgqva]
+vs j:
+    funyvfg = unfufcyvg.fcyvg_gb_funyvfg(j, svyrf)
+    gerr = j.arj_gerr(funyvfg)
+ryfr:
+    ynfg = 0
+    sbe (oybo, ovgf) va unfufcyvg.unfufcyvg_vgre(svyrf):
+        unfufcyvg.gbgny_fcyvg += yra(oybo)
+        vs bcg.pbcl:
+            flf.fgqbhg.jevgr(fge(oybo))
+        zrtf = unfufcyvg.gbgny_fcyvg/1024/1024
+        vs abg bcg.dhvrg naq ynfg != zrtf:
+            cebterff('%q Zolgrf ernq\e' % zrtf)
+            ynfg = zrtf
+    cebterff('%q Zolgrf ernq, qbar.\a' % zrtf)
+
+vs bcg.ireobfr:
+    ybt('\a')
+vs bcg.oybof:
+    sbe (zbqr,anzr,ova) va funyvfg:
+        cevag ova.rapbqr('urk')
+vs bcg.gerr:
+    cevag gerr.rapbqr('urk')
+vs bcg.pbzzvg be bcg.anzr:
+    zft = 'ohc fcyvg\a\aTrarengrq ol pbzznaq:\a%e' % flf.neti
+    ers = bcg.anzr naq ('ersf/urnqf/%f' % bcg.anzr) be Abar
+    pbzzvg = j.arj_pbzzvg(byqers, gerr, zft)
+    vs bcg.pbzzvg:
+        cevag pbzzvg.rapbqr('urk')
+
+vs j:
+    j.pybfr()  # zhfg pybfr orsber jr pna hcqngr gur ers
         
-if opt.name:
-    if cli:
-        cli.update_ref(refname, commit, oldref)
-    else:
-        git.update_ref(refname, commit, oldref)
-
-if cli:
-    cli.close()
-
-secs = time.time() - start_time
-size = hashsplit.total_split
-if opt.bench:
-    log('\nbup: %.2fkbytes in %.2f secs = %.2f kbytes/sec\n'
-        % (size/1024., secs, size/1024./secs))
-#!/usr/bin/env python
-import sys, re, struct, mmap
-from bup import git, options
-from bup.helpers import *
-
-
-def s_from_bytes(bytes):
-    clist = [chr(b) for b in bytes]
-    return ''.join(clist)
-
-
-def report(count):
-    fields = ['VmSize', 'VmRSS', 'VmData', 'VmStk']
-    d = {}
-    for line in open('/proc/self/status').readlines():
-        l = re.split(r':\s*', line.strip(), 1)
-        d[l[0]] = l[1]
-    if count >= 0:
-        e1 = count
-        fields = [d[k] for k in fields]
-    else:
-        e1 = ''
-    print ('%9s  ' + ('%10s ' * len(fields))) % tuple([e1] + fields)
-    sys.stdout.flush()
-
-
-optspec = """
-bup memtest [-n elements] [-c cycles]
+vs bcg.anzr:
+    vs pyv:
+        pyv.hcqngr_ers(ersanzr, pbzzvg, byqers)
+    ryfr:
+        tvg.hcqngr_ers(ersanzr, pbzzvg, byqers)
+
+vs pyv:
+    pyv.pybfr()
+
+frpf = gvzr.gvzr() - fgneg_gvzr
+fvmr = unfufcyvg.gbgny_fcyvg
+vs bcg.orapu:
+    ybt('\aohc: %.2sxolgrf va %.2s frpf = %.2s xolgrf/frp\a'
+        % (fvmr/1024., frpf, fvmr/1024./frpf))
+#!/hfe/ova/rai clguba
+vzcbeg flf, er, fgehpg, zznc
+sebz ohc vzcbeg tvg, bcgvbaf
+sebz ohc.urycref vzcbeg *
+
+
+qrs f_sebz_olgrf(olgrf):
+    pyvfg = [pue(o) sbe o va olgrf]
+    erghea ''.wbva(pyvfg)
+
+
+qrs ercbeg(pbhag):
+    svryqf = ['IzFvmr', 'IzEFF', 'IzQngn', 'IzFgx']
+    q = {}
+    sbe yvar va bcra('/cebp/frys/fgnghf').ernqyvarf():
+        y = er.fcyvg(e':\f*', yvar.fgevc(), 1)
+        q[y[0]] = y[1]
+    vs pbhag >= 0:
+        r1 = pbhag
+        svryqf = [q[x] sbe x va svryqf]
+    ryfr:
+        r1 = ''
+    cevag ('%9f  ' + ('%10f ' * yra(svryqf))) % ghcyr([r1] + svryqf)
+    flf.fgqbhg.syhfu()
+
+
+bcgfcrp = """
+ohc zrzgrfg [-a ryrzragf] [-p plpyrf]
 --
-n,number=  number of objects per cycle
-c,cycles=  number of cycles to run
-ignore-midx  ignore .midx files, use only .idx files
+a,ahzore=  ahzore bs bowrpgf cre plpyr
+p,plpyrf=  ahzore bs plpyrf gb eha
+vtaber-zvqk  vtaber .zvqk svyrf, hfr bayl .vqk svyrf
 """
-o = options.Options('bup memtest', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal('no arguments expected')
-
-git.ignore_midx = opt.ignore_midx
-
-git.check_repo_or_die()
-m = git.PackIdxList(git.repo('objects/pack'))
-
-cycles = opt.cycles or 100
-number = opt.number or 10000
-
-report(-1)
-f = open('/dev/urandom')
-a = mmap.mmap(-1, 20)
-report(0)
-for c in xrange(cycles):
-    for n in xrange(number):
-        b = f.read(3)
-        if 0:
-            bytes = list(struct.unpack('!BBB', b)) + [0]*17
-            bytes[2] &= 0xf0
-            bin = struct.pack('!20s', s_from_bytes(bytes))
-        else:
-            a[0:2] = b[0:2]
-            a[2] = chr(ord(b[2]) & 0xf0)
-            bin = str(a[0:20])
-        #print bin.encode('hex')
-        m.exists(bin)
-    report((c+1)*number)
-#!/usr/bin/env python
-import sys, os, stat
-from bup import options, git, vfs
-from bup.helpers import *
-
-def print_node(text, n):
-    prefix = ''
-    if opt.hash:
-        prefix += "%s " % n.hash.encode('hex')
-    if stat.S_ISDIR(n.mode):
-        print '%s%s/' % (prefix, text)
-    elif stat.S_ISLNK(n.mode):
-        print '%s%s@' % (prefix, text)
-    else:
-        print '%s%s' % (prefix, text)
-
-
-optspec = """
-bup ls <dirs...>
+b = bcgvbaf.Bcgvbaf('ohc zrzgrfg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+tvg.vtaber_zvqk = bcg.vtaber_zvqk
+
+tvg.purpx_ercb_be_qvr()
+z = tvg.CnpxVqkYvfg(tvg.ercb('bowrpgf/cnpx'))
+
+plpyrf = bcg.plpyrf be 100
+ahzore = bcg.ahzore be 10000
+
+ercbeg(-1)
+s = bcra('/qri/henaqbz')
+n = zznc.zznc(-1, 20)
+ercbeg(0)
+sbe p va kenatr(plpyrf):
+    sbe a va kenatr(ahzore):
+        o = s.ernq(3)
+        vs 0:
+            olgrf = yvfg(fgehpg.hacnpx('!OOO', o)) + [0]*17
+            olgrf[2] &= 0ks0
+            ova = fgehpg.cnpx('!20f', f_sebz_olgrf(olgrf))
+        ryfr:
+            n[0:2] = o[0:2]
+            n[2] = pue(beq(o[2]) & 0ks0)
+            ova = fge(n[0:20])
+        #cevag ova.rapbqr('urk')
+        z.rkvfgf(ova)
+    ercbeg((p+1)*ahzore)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgng
+sebz ohc vzcbeg bcgvbaf, tvg, isf
+sebz ohc.urycref vzcbeg *
+
+qrs cevag_abqr(grkg, a):
+    cersvk = ''
+    vs bcg.unfu:
+        cersvk += "%f " % a.unfu.rapbqr('urk')
+    vs fgng.F_VFQVE(a.zbqr):
+        cevag '%f%f/' % (cersvk, grkg)
+    ryvs fgng.F_VFYAX(a.zbqr):
+        cevag '%f%f@' % (cersvk, grkg)
+    ryfr:
+        cevag '%f%f' % (cersvk, grkg)
+
+
+bcgfcrp = """
+ohc yf <qvef...>
 --
-s,hash   show hash for each file
+f,unfu   fubj unfu sbe rnpu svyr
 """
-o = options.Options('bup ls', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-top = vfs.RefList(None)
-
-if not extra:
-    extra = ['/']
-
-ret = 0
-for d in extra:
-    try:
-        n = top.lresolve(d)
-        if stat.S_ISDIR(n.mode):
-            for sub in n:
-                print_node(sub.name, sub)
-        else:
-            print_node(d, n)
-    except vfs.NodeError, e:
-        log('error: %s\n' % e)
-        ret = 1
-
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, os, re, stat, readline, fnmatch
-from bup import options, git, shquote, vfs
-from bup.helpers import *
-
-def node_name(text, n):
-    if stat.S_ISDIR(n.mode):
-        return '%s/' % text
-    elif stat.S_ISLNK(n.mode):
-        return '%s@' % text
-    else:
-        return '%s' % text
-
-
-def do_ls(path, n):
-    l = []
-    if stat.S_ISDIR(n.mode):
-        for sub in n:
-            l.append(node_name(sub.name, sub))
-    else:
-        l.append(node_name(path, n))
-    print columnate(l, '')
+b = bcgvbaf.Bcgvbaf('ohc yf', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+gbc = isf.ErsYvfg(Abar)
+
+vs abg rkgen:
+    rkgen = ['/']
+
+erg = 0
+sbe q va rkgen:
+    gel:
+        a = gbc.yerfbyir(q)
+        vs fgng.F_VFQVE(a.zbqr):
+            sbe fho va a:
+                cevag_abqr(fho.anzr, fho)
+        ryfr:
+            cevag_abqr(q, a)
+    rkprcg isf.AbqrReebe, r:
+        ybt('reebe: %f\a' % r)
+        erg = 1
+
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, er, fgng, ernqyvar, sazngpu
+sebz ohc vzcbeg bcgvbaf, tvg, fudhbgr, isf
+sebz ohc.urycref vzcbeg *
+
+qrs abqr_anzr(grkg, a):
+    vs fgng.F_VFQVE(a.zbqr):
+        erghea '%f/' % grkg
+    ryvs fgng.F_VFYAX(a.zbqr):
+        erghea '%f@' % grkg
+    ryfr:
+        erghea '%f' % grkg
+
+
+qrs qb_yf(cngu, a):
+    y = []
+    vs fgng.F_VFQVE(a.zbqr):
+        sbe fho va a:
+            y.nccraq(abqr_anzr(fho.anzr, fho))
+    ryfr:
+        y.nccraq(abqr_anzr(cngu, a))
+    cevag pbyhzangr(y, '')
     
 
-def write_to_file(inf, outf):
-    for blob in chunkyreader(inf):
-        outf.write(blob)
+qrs jevgr_gb_svyr(vas, bhgs):
+    sbe oybo va puhaxlernqre(vas):
+        bhgs.jevgr(oybo)
     
 
-def inputiter():
-    if os.isatty(sys.stdin.fileno()):
-        while 1:
-            try:
-                yield raw_input('bup> ')
-            except EOFError:
-                break
-    else:
-        for line in sys.stdin:
-            yield line
-
-
-def _completer_get_subs(line):
-    (qtype, lastword) = shquote.unfinished_word(line)
-    (dir,name) = os.path.split(lastword)
-    #log('\ncompleter: %r %r %r\n' % (qtype, lastword, text))
-    n = pwd.resolve(dir)
-    subs = list(filter(lambda x: x.name.startswith(name),
-                       n.subs()))
-    return (dir, name, qtype, lastword, subs)
-
-
-_last_line = None
-_last_res = None
-def completer(text, state):
-    global _last_line
-    global _last_res
-    try:
-        line = readline.get_line_buffer()[:readline.get_endidx()]
-        if _last_line != line:
-            _last_res = _completer_get_subs(line)
-            _last_line = line
-        (dir, name, qtype, lastword, subs) = _last_res
-        if state < len(subs):
-            sn = subs[state]
-            sn1 = sn.resolve('')  # deref symlinks
-            fullname = os.path.join(dir, sn.name)
-            if stat.S_ISDIR(sn1.mode):
-                ret = shquote.what_to_add(qtype, lastword, fullname+'/',
-                                          terminate=False)
-            else:
-                ret = shquote.what_to_add(qtype, lastword, fullname,
-                                          terminate=True) + ' '
-            return text + ret
-    except Exception, e:
-        log('\nerror in completion: %s\n' % e)
+qrs vachgvgre():
+    vs bf.vfnggl(flf.fgqva.svyrab()):
+        juvyr 1:
+            gel:
+                lvryq enj_vachg('ohc> ')
+            rkprcg RBSReebe:
+                oernx
+    ryfr:
+        sbe yvar va flf.fgqva:
+            lvryq yvar
+
+
+qrs _pbzcyrgre_trg_fhof(yvar):
+    (dglcr, ynfgjbeq) = fudhbgr.hasvavfurq_jbeq(yvar)
+    (qve,anzr) = bf.cngu.fcyvg(ynfgjbeq)
+    #ybt('\apbzcyrgre: %e %e %e\a' % (dglcr, ynfgjbeq, grkg))
+    a = cjq.erfbyir(qve)
+    fhof = yvfg(svygre(ynzoqn k: k.anzr.fgnegfjvgu(anzr),
+                       a.fhof()))
+    erghea (qve, anzr, dglcr, ynfgjbeq, fhof)
+
+
+_ynfg_yvar = Abar
+_ynfg_erf = Abar
+qrs pbzcyrgre(grkg, fgngr):
+    tybony _ynfg_yvar
+    tybony _ynfg_erf
+    gel:
+        yvar = ernqyvar.trg_yvar_ohssre()[:ernqyvar.trg_raqvqk()]
+        vs _ynfg_yvar != yvar:
+            _ynfg_erf = _pbzcyrgre_trg_fhof(yvar)
+            _ynfg_yvar = yvar
+        (qve, anzr, dglcr, ynfgjbeq, fhof) = _ynfg_erf
+        vs fgngr < yra(fhof):
+            fa = fhof[fgngr]
+            fa1 = fa.erfbyir('')  # qrers flzyvaxf
+            shyyanzr = bf.cngu.wbva(qve, fa.anzr)
+            vs fgng.F_VFQVE(fa1.zbqr):
+                erg = fudhbgr.jung_gb_nqq(dglcr, ynfgjbeq, shyyanzr+'/',
+                                          grezvangr=Snyfr)
+            ryfr:
+                erg = fudhbgr.jung_gb_nqq(dglcr, ynfgjbeq, shyyanzr,
+                                          grezvangr=Gehr) + ' '
+            erghea grkg + erg
+    rkprcg Rkprcgvba, r:
+        ybt('\areebe va pbzcyrgvba: %f\a' % r)
 
             
-optspec = """
-bup ftp
+bcgfcrp = """
+ohc sgc
 """
-o = options.Options('bup ftp', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-
-top = vfs.RefList(None)
-pwd = top
-
-if extra:
-    lines = extra
-else:
-    readline.set_completer_delims(' \t\n\r/')
-    readline.set_completer(completer)
-    readline.parse_and_bind("tab: complete")
-    lines = inputiter()
-
-for line in lines:
-    if not line.strip():
-        continue
-    words = [word for (wordstart,word) in shquote.quotesplit(line)]
-    cmd = words[0].lower()
-    #log('execute: %r %r\n' % (cmd, parm))
-    try:
-        if cmd == 'ls':
-            for parm in (words[1:] or ['.']):
-                do_ls(parm, pwd.resolve(parm))
-        elif cmd == 'cd':
-            for parm in words[1:]:
-                pwd = pwd.resolve(parm)
-        elif cmd == 'pwd':
-            print pwd.fullname()
-        elif cmd == 'cat':
-            for parm in words[1:]:
-                write_to_file(pwd.resolve(parm).open(), sys.stdout)
-        elif cmd == 'get':
-            if len(words) not in [2,3]:
-                raise Exception('Usage: get <filename> [localname]')
-            rname = words[1]
-            (dir,base) = os.path.split(rname)
-            lname = len(words)>2 and words[2] or base
-            inf = pwd.resolve(rname).open()
-            log('Saving %r\n' % lname)
-            write_to_file(inf, open(lname, 'wb'))
-        elif cmd == 'mget':
-            for parm in words[1:]:
-                (dir,base) = os.path.split(parm)
-                for n in pwd.resolve(dir).subs():
-                    if fnmatch.fnmatch(n.name, base):
-                        try:
-                            log('Saving %r\n' % n.name)
-                            inf = n.open()
-                            outf = open(n.name, 'wb')
-                            write_to_file(inf, outf)
-                            outf.close()
-                        except Exception, e:
-                            log('  error: %s\n' % e)
-        elif cmd == 'help' or cmd == '?':
-            log('Commands: ls cd pwd cat get mget help quit\n')
-        elif cmd == 'quit' or cmd == 'exit' or cmd == 'bye':
-            break
-        else:
-            raise Exception('no such command %r' % cmd)
-    except Exception, e:
-        log('error: %s\n' % e)
-        #raise
-#!/usr/bin/env python
-import sys, mmap
-from bup import options, _hashsplit
-from bup.helpers import *
-
-optspec = """
-bup random [-S seed] <numbytes>
+b = bcgvbaf.Bcgvbaf('ohc sgc', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+
+gbc = isf.ErsYvfg(Abar)
+cjq = gbc
+
+vs rkgen:
+    yvarf = rkgen
+ryfr:
+    ernqyvar.frg_pbzcyrgre_qryvzf(' \g\a\e/')
+    ernqyvar.frg_pbzcyrgre(pbzcyrgre)
+    ernqyvar.cnefr_naq_ovaq("gno: pbzcyrgr")
+    yvarf = vachgvgre()
+
+sbe yvar va yvarf:
+    vs abg yvar.fgevc():
+        pbagvahr
+    jbeqf = [jbeq sbe (jbeqfgneg,jbeq) va fudhbgr.dhbgrfcyvg(yvar)]
+    pzq = jbeqf[0].ybjre()
+    #ybt('rkrphgr: %e %e\a' % (pzq, cnez))
+    gel:
+        vs pzq == 'yf':
+            sbe cnez va (jbeqf[1:] be ['.']):
+                qb_yf(cnez, cjq.erfbyir(cnez))
+        ryvs pzq == 'pq':
+            sbe cnez va jbeqf[1:]:
+                cjq = cjq.erfbyir(cnez)
+        ryvs pzq == 'cjq':
+            cevag cjq.shyyanzr()
+        ryvs pzq == 'png':
+            sbe cnez va jbeqf[1:]:
+                jevgr_gb_svyr(cjq.erfbyir(cnez).bcra(), flf.fgqbhg)
+        ryvs pzq == 'trg':
+            vs yra(jbeqf) abg va [2,3]:
+                envfr Rkprcgvba('Hfntr: trg <svyranzr> [ybpnyanzr]')
+            eanzr = jbeqf[1]
+            (qve,onfr) = bf.cngu.fcyvg(eanzr)
+            yanzr = yra(jbeqf)>2 naq jbeqf[2] be onfr
+            vas = cjq.erfbyir(eanzr).bcra()
+            ybt('Fnivat %e\a' % yanzr)
+            jevgr_gb_svyr(vas, bcra(yanzr, 'jo'))
+        ryvs pzq == 'ztrg':
+            sbe cnez va jbeqf[1:]:
+                (qve,onfr) = bf.cngu.fcyvg(cnez)
+                sbe a va cjq.erfbyir(qve).fhof():
+                    vs sazngpu.sazngpu(a.anzr, onfr):
+                        gel:
+                            ybt('Fnivat %e\a' % a.anzr)
+                            vas = a.bcra()
+                            bhgs = bcra(a.anzr, 'jo')
+                            jevgr_gb_svyr(vas, bhgs)
+                            bhgs.pybfr()
+                        rkprcg Rkprcgvba, r:
+                            ybt('  reebe: %f\a' % r)
+        ryvs pzq == 'uryc' be pzq == '?':
+            ybt('Pbzznaqf: yf pq cjq png trg ztrg uryc dhvg\a')
+        ryvs pzq == 'dhvg' be pzq == 'rkvg' be pzq == 'olr':
+            oernx
+        ryfr:
+            envfr Rkprcgvba('ab fhpu pbzznaq %e' % pzq)
+    rkprcg Rkprcgvba, r:
+        ybt('reebe: %f\a' % r)
+        #envfr
+#!/hfe/ova/rai clguba
+vzcbeg flf, zznc
+sebz ohc vzcbeg bcgvbaf, _unfufcyvg
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+ohc enaqbz [-F frrq] <ahzolgrf>
 --
-S,seed=   optional random number seed (default 1)
-f,force   print random data to stdout even if it's a tty
+F,frrq=   bcgvbany enaqbz ahzore frrq (qrsnhyg 1)
+s,sbepr   cevag enaqbz qngn gb fgqbhg rira vs vg'f n ggl
 """
-o = options.Options('bup random', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one argument expected")
-
-total = parse_num(extra[0])
-
-if opt.force or (not os.isatty(1) and
-                 not atoi(os.environ.get('BUP_FORCE_TTY')) & 1):
-    _hashsplit.write_random(sys.stdout.fileno(), total, opt.seed or 0)
-else:
-    log('error: not writing binary data to a terminal. Use -f to force.\n')
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, os, glob
-from bup import options
-
-optspec = """
-bup help <command>
+b = bcgvbaf.Bcgvbaf('ohc enaqbz', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar nethzrag rkcrpgrq")
+
+gbgny = cnefr_ahz(rkgen[0])
+
+vs bcg.sbepr be (abg bf.vfnggl(1) naq
+                 abg ngbv(bf.raiveba.trg('OHC_SBEPR_GGL')) & 1):
+    _unfufcyvg.jevgr_enaqbz(flf.fgqbhg.svyrab(), gbgny, bcg.frrq be 0)
+ryfr:
+    ybt('reebe: abg jevgvat ovanel qngn gb n grezvany. Hfr -s gb sbepr.\a')
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, tybo
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc uryc <pbzznaq>
 """
-o = options.Options('bup help', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) == 0:
-    # the wrapper program provides the default usage string
-    os.execvp(os.environ['BUP_MAIN_EXE'], ['bup'])
-elif len(extra) == 1:
-    docname = (extra[0]=='bup' and 'bup' or ('bup-%s' % extra[0]))
-    exe = sys.argv[0]
-    (exepath, exefile) = os.path.split(exe)
-    manpath = os.path.join(exepath, '../Documentation/' + docname + '.[1-9]')
-    g = glob.glob(manpath)
-    if g:
-        os.execvp('man', ['man', '-l', g[0]])
-    else:
-        os.execvp('man', ['man', docname])
-else:
-    o.fatal("exactly one command name expected")
-#!/usr/bin/env python
-import sys, os, stat, errno, fuse, re, time, tempfile
-from bup import options, git, vfs
-from bup.helpers import *
-
-
-class Stat(fuse.Stat):
-    def __init__(self):
-        self.st_mode = 0
-        self.st_ino = 0
-        self.st_dev = 0
-        self.st_nlink = 0
-        self.st_uid = 0
-        self.st_gid = 0
-        self.st_size = 0
-        self.st_atime = 0
-        self.st_mtime = 0
-        self.st_ctime = 0
-        self.st_blocks = 0
-        self.st_blksize = 0
-        self.st_rdev = 0
-
-
-cache = {}
-def cache_get(top, path):
-    parts = path.split('/')
-    cache[('',)] = top
-    c = None
-    max = len(parts)
-    #log('cache: %r\n' % cache.keys())
-    for i in range(max):
-        pre = parts[:max-i]
-        #log('cache trying: %r\n' % pre)
-        c = cache.get(tuple(pre))
-        if c:
-            rest = parts[max-i:]
-            for r in rest:
-                #log('resolving %r from %r\n' % (r, c.fullname()))
-                c = c.lresolve(r)
-                key = tuple(pre + [r])
-                #log('saving: %r\n' % (key,))
-                cache[key] = c
-            break
-    assert(c)
-    return c
+b = bcgvbaf.Bcgvbaf('ohc uryc', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) == 0:
+    # gur jenccre cebtenz cebivqrf gur qrsnhyg hfntr fgevat
+    bf.rkrpic(bf.raiveba['OHC_ZNVA_RKR'], ['ohc'])
+ryvs yra(rkgen) == 1:
+    qbpanzr = (rkgen[0]=='ohc' naq 'ohc' be ('ohc-%f' % rkgen[0]))
+    rkr = flf.neti[0]
+    (rkrcngu, rkrsvyr) = bf.cngu.fcyvg(rkr)
+    znacngu = bf.cngu.wbva(rkrcngu, '../Qbphzragngvba/' + qbpanzr + '.[1-9]')
+    t = tybo.tybo(znacngu)
+    vs t:
+        bf.rkrpic('zna', ['zna', '-y', t[0]])
+    ryfr:
+        bf.rkrpic('zna', ['zna', qbpanzr])
+ryfr:
+    b.sngny("rknpgyl bar pbzznaq anzr rkcrpgrq")
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgng, reeab, shfr, er, gvzr, grzcsvyr
+sebz ohc vzcbeg bcgvbaf, tvg, isf
+sebz ohc.urycref vzcbeg *
+
+
+pynff Fgng(shfr.Fgng):
+    qrs __vavg__(frys):
+        frys.fg_zbqr = 0
+        frys.fg_vab = 0
+        frys.fg_qri = 0
+        frys.fg_ayvax = 0
+        frys.fg_hvq = 0
+        frys.fg_tvq = 0
+        frys.fg_fvmr = 0
+        frys.fg_ngvzr = 0
+        frys.fg_zgvzr = 0
+        frys.fg_pgvzr = 0
+        frys.fg_oybpxf = 0
+        frys.fg_oyxfvmr = 0
+        frys.fg_eqri = 0
+
+
+pnpur = {}
+qrs pnpur_trg(gbc, cngu):
+    cnegf = cngu.fcyvg('/')
+    pnpur[('',)] = gbc
+    p = Abar
+    znk = yra(cnegf)
+    #ybt('pnpur: %e\a' % pnpur.xrlf())
+    sbe v va enatr(znk):
+        cer = cnegf[:znk-v]
+        #ybt('pnpur gelvat: %e\a' % cer)
+        p = pnpur.trg(ghcyr(cer))
+        vs p:
+            erfg = cnegf[znk-v:]
+            sbe e va erfg:
+                #ybt('erfbyivat %e sebz %e\a' % (e, p.shyyanzr()))
+                p = p.yerfbyir(e)
+                xrl = ghcyr(cer + [e])
+                #ybt('fnivat: %e\a' % (xrl,))
+                pnpur[xrl] = p
+            oernx
+    nffreg(p)
+    erghea p
         
     
 
-class BupFs(fuse.Fuse):
-    def __init__(self, top):
-        fuse.Fuse.__init__(self)
-        self.top = top
+pynff OhcSf(shfr.Shfr):
+    qrs __vavg__(frys, gbc):
+        shfr.Shfr.__vavg__(frys)
+        frys.gbc = gbc
     
-    def getattr(self, path):
-        log('--getattr(%r)\n' % path)
-        try:
-            node = cache_get(self.top, path)
-            st = Stat()
-            st.st_mode = node.mode
-            st.st_nlink = node.nlinks()
-            st.st_size = node.size()
-            st.st_mtime = node.mtime
-            st.st_ctime = node.ctime
-            st.st_atime = node.atime
-            return st
-        except vfs.NoSuchFile:
-            return -errno.ENOENT
-
-    def readdir(self, path, offset):
-        log('--readdir(%r)\n' % path)
-        node = cache_get(self.top, path)
-        yield fuse.Direntry('.')
-        yield fuse.Direntry('..')
-        for sub in node.subs():
-            yield fuse.Direntry(sub.name)
-
-    def readlink(self, path):
-        log('--readlink(%r)\n' % path)
-        node = cache_get(self.top, path)
-        return node.readlink()
-
-    def open(self, path, flags):
-        log('--open(%r)\n' % path)
-        node = cache_get(self.top, path)
-        accmode = os.O_RDONLY | os.O_WRONLY | os.O_RDWR
-        if (flags & accmode) != os.O_RDONLY:
-            return -errno.EACCES
-        node.open()
-
-    def release(self, path, flags):
-        log('--release(%r)\n' % path)
-
-    def read(self, path, size, offset):
-        log('--read(%r)\n' % path)
-        n = cache_get(self.top, path)
-        o = n.open()
-        o.seek(offset)
-        return o.read(size)
-
-
-if not hasattr(fuse, '__version__'):
-    raise RuntimeError, "your fuse module is too old for fuse.__version__"
-fuse.fuse_python_api = (0, 2)
-
-
-optspec = """
-bup fuse [-d] [-f] <mountpoint>
+    qrs trgngge(frys, cngu):
+        ybt('--trgngge(%e)\a' % cngu)
+        gel:
+            abqr = pnpur_trg(frys.gbc, cngu)
+            fg = Fgng()
+            fg.fg_zbqr = abqr.zbqr
+            fg.fg_ayvax = abqr.ayvaxf()
+            fg.fg_fvmr = abqr.fvmr()
+            fg.fg_zgvzr = abqr.zgvzr
+            fg.fg_pgvzr = abqr.pgvzr
+            fg.fg_ngvzr = abqr.ngvzr
+            erghea fg
+        rkprcg isf.AbFhpuSvyr:
+            erghea -reeab.RABRAG
+
+    qrs ernqqve(frys, cngu, bssfrg):
+        ybt('--ernqqve(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        lvryq shfr.Qveragel('.')
+        lvryq shfr.Qveragel('..')
+        sbe fho va abqr.fhof():
+            lvryq shfr.Qveragel(fho.anzr)
+
+    qrs ernqyvax(frys, cngu):
+        ybt('--ernqyvax(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        erghea abqr.ernqyvax()
+
+    qrs bcra(frys, cngu, syntf):
+        ybt('--bcra(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        nppzbqr = bf.B_EQBAYL | bf.B_JEBAYL | bf.B_EQJE
+        vs (syntf & nppzbqr) != bf.B_EQBAYL:
+            erghea -reeab.RNPPRF
+        abqr.bcra()
+
+    qrs eryrnfr(frys, cngu, syntf):
+        ybt('--eryrnfr(%e)\a' % cngu)
+
+    qrs ernq(frys, cngu, fvmr, bssfrg):
+        ybt('--ernq(%e)\a' % cngu)
+        a = pnpur_trg(frys.gbc, cngu)
+        b = a.bcra()
+        b.frrx(bssfrg)
+        erghea b.ernq(fvmr)
+
+
+vs abg unfngge(shfr, '__irefvba__'):
+    envfr EhagvzrReebe, "lbhe shfr zbqhyr vf gbb byq sbe shfr.__irefvba__"
+shfr.shfr_clguba_ncv = (0, 2)
+
+
+bcgfcrp = """
+ohc shfr [-q] [-s] <zbhagcbvag>
 --
-d,debug   increase debug level
-f,foreground  run in foreground
+q,qroht   vapernfr qroht yriry
+s,sbertebhaq  eha va sbertebhaq
 """
-o = options.Options('bup fuse', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one argument expected")
-
-git.check_repo_or_die()
-top = vfs.RefList(None)
-f = BupFs(top)
-f.fuse_args.mountpoint = extra[0]
-if opt.debug:
-    f.fuse_args.add('debug')
-if opt.foreground:
-    f.fuse_args.setmod('foreground')
-print f.multithreaded
-f.multithreaded = False
-
-f.main()
-#!/usr/bin/env python
-from bup import git, options, client
-from bup.helpers import *
-
-optspec = """
-[BUP_DIR=...] bup init [-r host:path]
+b = bcgvbaf.Bcgvbaf('ohc shfr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar nethzrag rkcrpgrq")
+
+tvg.purpx_ercb_be_qvr()
+gbc = isf.ErsYvfg(Abar)
+s = OhcSf(gbc)
+s.shfr_netf.zbhagcbvag = rkgen[0]
+vs bcg.qroht:
+    s.shfr_netf.nqq('qroht')
+vs bcg.sbertebhaq:
+    s.shfr_netf.frgzbq('sbertebhaq')
+cevag s.zhygvguernqrq
+s.zhygvguernqrq = Snyfr
+
+s.znva()
+#!/hfe/ova/rai clguba
+sebz ohc vzcbeg tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+[OHC_QVE=...] ohc vavg [-e ubfg:cngu]
 --
-r,remote=  remote repository path
+e,erzbgr=  erzbgr ercbfvgbel cngu
 """
-o = options.Options('bup init', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-
-if opt.remote:
-    git.init_repo()  # local repo
-    git.check_repo_or_die()
-    cli = client.Client(opt.remote, create=True)
-    cli.close()
-else:
-    git.init_repo()
-#!/usr/bin/env python
-import sys, math, struct, glob
-from bup import options, git
-from bup.helpers import *
-
-PAGE_SIZE=4096
-SHA_PER_PAGE=PAGE_SIZE/200.
-
-
-def merge(idxlist, bits, table):
-    count = 0
-    for e in git.idxmerge(idxlist):
-        count += 1
-        prefix = git.extract_bits(e, bits)
-        table[prefix] = count
-        yield e
-
-
-def do_midx(outdir, outfilename, infilenames):
-    if not outfilename:
-        assert(outdir)
-        sum = Sha1('\0'.join(infilenames)).hexdigest()
-        outfilename = '%s/midx-%s.midx' % (outdir, sum)
+b = bcgvbaf.Bcgvbaf('ohc vavg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+
+vs bcg.erzbgr:
+    tvg.vavg_ercb()  # ybpny ercb
+    tvg.purpx_ercb_be_qvr()
+    pyv = pyvrag.Pyvrag(bcg.erzbgr, perngr=Gehr)
+    pyv.pybfr()
+ryfr:
+    tvg.vavg_ercb()
+#!/hfe/ova/rai clguba
+vzcbeg flf, zngu, fgehpg, tybo
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+CNTR_FVMR=4096
+FUN_CRE_CNTR=CNTR_FVMR/200.
+
+
+qrs zretr(vqkyvfg, ovgf, gnoyr):
+    pbhag = 0
+    sbe r va tvg.vqkzretr(vqkyvfg):
+        pbhag += 1
+        cersvk = tvg.rkgenpg_ovgf(r, ovgf)
+        gnoyr[cersvk] = pbhag
+        lvryq r
+
+
+qrs qb_zvqk(bhgqve, bhgsvyranzr, vasvyranzrf):
+    vs abg bhgsvyranzr:
+        nffreg(bhgqve)
+        fhz = Fun1('\0'.wbva(vasvyranzrf)).urkqvtrfg()
+        bhgsvyranzr = '%f/zvqk-%f.zvqk' % (bhgqve, fhz)
     
-    inp = []
-    total = 0
-    for name in infilenames:
-        ix = git.PackIdx(name)
-        inp.append(ix)
-        total += len(ix)
-
-    log('Merging %d indexes (%d objects).\n' % (len(infilenames), total))
-    if (not opt.force and (total < 1024 and len(infilenames) < 3)) \
-       or (opt.force and not total):
-        log('midx: nothing to do.\n')
-        return
-
-    pages = int(total/SHA_PER_PAGE) or 1
-    bits = int(math.ceil(math.log(pages, 2)))
-    entries = 2**bits
-    log('Table size: %d (%d bits)\n' % (entries*4, bits))
+    vac = []
+    gbgny = 0
+    sbe anzr va vasvyranzrf:
+        vk = tvg.CnpxVqk(anzr)
+        vac.nccraq(vk)
+        gbgny += yra(vk)
+
+    ybt('Zretvat %q vaqrkrf (%q bowrpgf).\a' % (yra(vasvyranzrf), gbgny))
+    vs (abg bcg.sbepr naq (gbgny < 1024 naq yra(vasvyranzrf) < 3)) \
+       be (bcg.sbepr naq abg gbgny):
+        ybt('zvqk: abguvat gb qb.\a')
+        erghea
+
+    cntrf = vag(gbgny/FUN_CRE_CNTR) be 1
+    ovgf = vag(zngu.prvy(zngu.ybt(cntrf, 2)))
+    ragevrf = 2**ovgf
+    ybt('Gnoyr fvmr: %q (%q ovgf)\a' % (ragevrf*4, ovgf))
     
-    table = [0]*entries
-
-    try:
-        os.unlink(outfilename)
-    except OSError:
-        pass
-    f = open(outfilename + '.tmp', 'w+')
-    f.write('MIDX\0\0\0\2')
-    f.write(struct.pack('!I', bits))
-    assert(f.tell() == 12)
-    f.write('\0'*4*entries)
+    gnoyr = [0]*ragevrf
+
+    gel:
+        bf.hayvax(bhgsvyranzr)
+    rkprcg BFReebe:
+        cnff
+    s = bcra(bhgsvyranzr + '.gzc', 'j+')
+    s.jevgr('ZVQK\0\0\0\2')
+    s.jevgr(fgehpg.cnpx('!V', ovgf))
+    nffreg(s.gryy() == 12)
+    s.jevgr('\0'*4*ragevrf)
     
-    for e in merge(inp, bits, table):
-        f.write(e)
+    sbe r va zretr(vac, ovgf, gnoyr):
+        s.jevgr(r)
         
-    f.write('\0'.join(os.path.basename(p) for p in infilenames))
-
-    f.seek(12)
-    f.write(struct.pack('!%dI' % entries, *table))
-    f.close()
-    os.rename(outfilename + '.tmp', outfilename)
-
-    # this is just for testing
-    if 0:
-        p = git.PackMidx(outfilename)
-        assert(len(p.idxnames) == len(infilenames))
-        print p.idxnames
-        assert(len(p) == total)
-        pi = iter(p)
-        for i in merge(inp, total, bits, table):
-            assert(i == pi.next())
-            assert(p.exists(i))
-
-    print outfilename
-
-optspec = """
-bup midx [options...] <idxnames...>
+    s.jevgr('\0'.wbva(bf.cngu.onfranzr(c) sbe c va vasvyranzrf))
+
+    s.frrx(12)
+    s.jevgr(fgehpg.cnpx('!%qV' % ragevrf, *gnoyr))
+    s.pybfr()
+    bf.eranzr(bhgsvyranzr + '.gzc', bhgsvyranzr)
+
+    # guvf vf whfg sbe grfgvat
+    vs 0:
+        c = tvg.CnpxZvqk(bhgsvyranzr)
+        nffreg(yra(c.vqkanzrf) == yra(vasvyranzrf))
+        cevag c.vqkanzrf
+        nffreg(yra(c) == gbgny)
+        cv = vgre(c)
+        sbe v va zretr(vac, gbgny, ovgf, gnoyr):
+            nffreg(v == cv.arkg())
+            nffreg(c.rkvfgf(v))
+
+    cevag bhgsvyranzr
+
+bcgfcrp = """
+ohc zvqk [bcgvbaf...] <vqkanzrf...>
 --
-o,output=  output midx filename (default: auto-generated)
-a,auto     automatically create .midx from any unindexed .idx files
-f,force    automatically create .midx from *all* .idx files
+b,bhgchg=  bhgchg zvqk svyranzr (qrsnhyg: nhgb-trarengrq)
+n,nhgb     nhgbzngvpnyyl perngr .zvqk sebz nal havaqrkrq .vqk svyrf
+s,sbepr    nhgbzngvpnyyl perngr .zvqk sebz *nyy* .vqk svyrf
 """
-o = options.Options('bup midx', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra and (opt.auto or opt.force):
-    o.fatal("you can't use -f/-a and also provide filenames")
-
-git.check_repo_or_die()
-
-if extra:
-    do_midx(git.repo('objects/pack'), opt.output, extra)
-elif opt.auto or opt.force:
-    paths = [git.repo('objects/pack')]
-    paths += glob.glob(git.repo('index-cache/*/.'))
-    for path in paths:
-        log('midx: scanning %s\n' % path)
-        if opt.force:
-            do_midx(path, opt.output, glob.glob('%s/*.idx' % path))
-        elif opt.auto:
-            m = git.PackIdxList(path)
-            needed = {}
-            for pack in m.packs:  # only .idx files without a .midx are open
-                if pack.name.endswith('.idx'):
-                    needed[pack.name] = 1
-            del m
-            do_midx(path, opt.output, needed.keys())
-        log('\n')
-else:
-    o.fatal("you must use -f or -a or provide input filenames")
-#!/usr/bin/env python
-import sys, os, random
-from bup import options
-from bup.helpers import *
-
-
-def randblock(n):
-    l = []
-    for i in xrange(n):
-        l.append(chr(random.randrange(0,256)))
-    return ''.join(l)
-
-
-optspec = """
-bup damage [-n count] [-s maxsize] [-S seed] <filenames...>
+b = bcgvbaf.Bcgvbaf('ohc zvqk', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen naq (bcg.nhgb be bcg.sbepr):
+    b.sngny("lbh pna'g hfr -s/-n naq nyfb cebivqr svyranzrf")
+
+tvg.purpx_ercb_be_qvr()
+
+vs rkgen:
+    qb_zvqk(tvg.ercb('bowrpgf/cnpx'), bcg.bhgchg, rkgen)
+ryvs bcg.nhgb be bcg.sbepr:
+    cnguf = [tvg.ercb('bowrpgf/cnpx')]
+    cnguf += tybo.tybo(tvg.ercb('vaqrk-pnpur/*/.'))
+    sbe cngu va cnguf:
+        ybt('zvqk: fpnaavat %f\a' % cngu)
+        vs bcg.sbepr:
+            qb_zvqk(cngu, bcg.bhgchg, tybo.tybo('%f/*.vqk' % cngu))
+        ryvs bcg.nhgb:
+            z = tvg.CnpxVqkYvfg(cngu)
+            arrqrq = {}
+            sbe cnpx va z.cnpxf:  # bayl .vqk svyrf jvgubhg n .zvqk ner bcra
+                vs cnpx.anzr.raqfjvgu('.vqk'):
+                    arrqrq[cnpx.anzr] = 1
+            qry z
+            qb_zvqk(cngu, bcg.bhgchg, arrqrq.xrlf())
+        ybt('\a')
+ryfr:
+    b.sngny("lbh zhfg hfr -s be -n be cebivqr vachg svyranzrf")
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, enaqbz
+sebz ohc vzcbeg bcgvbaf
+sebz ohc.urycref vzcbeg *
+
+
+qrs enaqoybpx(a):
+    y = []
+    sbe v va kenatr(a):
+        y.nccraq(pue(enaqbz.enaqenatr(0,256)))
+    erghea ''.wbva(y)
+
+
+bcgfcrp = """
+ohc qnzntr [-a pbhag] [-f znkfvmr] [-F frrq] <svyranzrf...>
 --
-   WARNING: THIS COMMAND IS EXTREMELY DANGEROUS
-n,num=   number of blocks to damage
-s,size=  maximum size of each damaged block
-percent= maximum size of each damaged block (as a percent of entire file)
-equal    spread damage evenly throughout the file
-S,seed=  random number seed (for repeatable tests)
+   JNEAVAT: GUVF PBZZNAQ VF RKGERZRYL QNATREBHF
+a,ahz=   ahzore bs oybpxf gb qnzntr
+f,fvmr=  znkvzhz fvmr bs rnpu qnzntrq oybpx
+creprag= znkvzhz fvmr bs rnpu qnzntrq oybpx (nf n creprag bs ragver svyr)
+rdhny    fcernq qnzntr rirayl guebhtubhg gur svyr
+F,frrq=  enaqbz ahzore frrq (sbe ercrngnoyr grfgf)
 """
-o = options.Options('bup damage', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if not extra:
-    o.fatal('filenames expected')
-
-if opt.seed != None:
-    random.seed(opt.seed)
-
-for name in extra:
-    log('Damaging "%s"...\n' % name)
-    f = open(name, 'r+b')
-    st = os.fstat(f.fileno())
-    size = st.st_size
-    if opt.percent or opt.size:
-        ms1 = int(float(opt.percent or 0)/100.0*size) or size
-        ms2 = opt.size or size
-        maxsize = min(ms1, ms2)
-    else:
-        maxsize = 1
-    chunks = opt.num or 10
-    chunksize = size/chunks
-    for r in range(chunks):
-        sz = random.randrange(1, maxsize+1)
-        if sz > size:
-            sz = size
-        if opt.equal:
-            ofs = r*chunksize
-        else:
-            ofs = random.randrange(0, size - sz + 1)
-        log('  %6d bytes at %d\n' % (sz, ofs))
-        f.seek(ofs)
-        f.write(randblock(sz))
-    f.close()
-#!/usr/bin/env python
-import sys, struct, mmap
-from bup import options, git
-from bup.helpers import *
-
-suspended_w = None
-
-
-def init_dir(conn, arg):
-    git.init_repo(arg)
-    log('bup server: bupdir initialized: %r\n' % git.repodir)
-    conn.ok()
-
-
-def set_dir(conn, arg):
-    git.check_repo_or_die(arg)
-    log('bup server: bupdir is %r\n' % git.repodir)
-    conn.ok()
+b = bcgvbaf.Bcgvbaf('ohc qnzntr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs abg rkgen:
+    b.sngny('svyranzrf rkcrpgrq')
+
+vs bcg.frrq != Abar:
+    enaqbz.frrq(bcg.frrq)
+
+sbe anzr va rkgen:
+    ybt('Qnzntvat "%f"...\a' % anzr)
+    s = bcra(anzr, 'e+o')
+    fg = bf.sfgng(s.svyrab())
+    fvmr = fg.fg_fvmr
+    vs bcg.creprag be bcg.fvmr:
+        zf1 = vag(sybng(bcg.creprag be 0)/100.0*fvmr) be fvmr
+        zf2 = bcg.fvmr be fvmr
+        znkfvmr = zva(zf1, zf2)
+    ryfr:
+        znkfvmr = 1
+    puhaxf = bcg.ahz be 10
+    puhaxfvmr = fvmr/puhaxf
+    sbe e va enatr(puhaxf):
+        fm = enaqbz.enaqenatr(1, znkfvmr+1)
+        vs fm > fvmr:
+            fm = fvmr
+        vs bcg.rdhny:
+            bsf = e*puhaxfvmr
+        ryfr:
+            bsf = enaqbz.enaqenatr(0, fvmr - fm + 1)
+        ybt('  %6q olgrf ng %q\a' % (fm, bsf))
+        s.frrx(bsf)
+        s.jevgr(enaqoybpx(fm))
+    s.pybfr()
+#!/hfe/ova/rai clguba
+vzcbeg flf, fgehpg, zznc
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+fhfcraqrq_j = Abar
+
+
+qrs vavg_qve(pbaa, net):
+    tvg.vavg_ercb(net)
+    ybt('ohc freire: ohcqve vavgvnyvmrq: %e\a' % tvg.ercbqve)
+    pbaa.bx()
+
+
+qrs frg_qve(pbaa, net):
+    tvg.purpx_ercb_be_qvr(net)
+    ybt('ohc freire: ohcqve vf %e\a' % tvg.ercbqve)
+    pbaa.bx()
 
     
-def list_indexes(conn, junk):
-    git.check_repo_or_die()
-    for f in os.listdir(git.repo('objects/pack')):
-        if f.endswith('.idx'):
-            conn.write('%s\n' % f)
-    conn.ok()
-
-
-def send_index(conn, name):
-    git.check_repo_or_die()
-    assert(name.find('/') < 0)
-    assert(name.endswith('.idx'))
-    idx = git.PackIdx(git.repo('objects/pack/%s' % name))
-    conn.write(struct.pack('!I', len(idx.map)))
-    conn.write(idx.map)
-    conn.ok()
-
-
-def receive_objects(conn, junk):
-    global suspended_w
-    git.check_repo_or_die()
-    suggested = {}
-    if suspended_w:
-        w = suspended_w
-        suspended_w = None
-    else:
-        w = git.PackWriter()
-    while 1:
-        ns = conn.read(4)
-        if not ns:
-            w.abort()
-            raise Exception('object read: expected length header, got EOF\n')
-        n = struct.unpack('!I', ns)[0]
-        #log('expecting %d bytes\n' % n)
-        if not n:
-            log('bup server: received %d object%s.\n
-                % (w.count, w.count!=1 and "s" or ''))
-            fullpath = w.close()
-            if fullpath:
-                (dir, name) = os.path.split(fullpath)
-                conn.write('%s.idx\n' % name)
-            conn.ok()
-            return
-        elif n == 0xffffffff:
-            log('bup server: receive-objects suspended.\n')
-            suspended_w = w
-            conn.ok()
-            return
+qrs yvfg_vaqrkrf(pbaa, whax):
+    tvg.purpx_ercb_be_qvr()
+    sbe s va bf.yvfgqve(tvg.ercb('bowrpgf/cnpx')):
+        vs s.raqfjvgu('.vqk'):
+            pbaa.jevgr('%f\a' % s)
+    pbaa.bx()
+
+
+qrs fraq_vaqrk(pbaa, anzr):
+    tvg.purpx_ercb_be_qvr()
+    nffreg(anzr.svaq('/') < 0)
+    nffreg(anzr.raqfjvgu('.vqk'))
+    vqk = tvg.CnpxVqk(tvg.ercb('bowrpgf/cnpx/%f' % anzr))
+    pbaa.jevgr(fgehpg.cnpx('!V', yra(vqk.znc)))
+    pbaa.jevgr(vqk.znc)
+    pbaa.bx()
+
+
+qrs erprvir_bowrpgf(pbaa, whax):
+    tybony fhfcraqrq_j
+    tvg.purpx_ercb_be_qvr()
+    fhttrfgrq = {}
+    vs fhfcraqrq_j:
+        j = fhfcraqrq_j
+        fhfcraqrq_j = Abar
+    ryfr:
+        j = tvg.CnpxJevgre()
+    juvyr 1:
+        af = pbaa.ernq(4)
+        vs abg af:
+            j.nobeg()
+            envfr Rkprcgvba('bowrpg ernq: rkcrpgrq yratgu urnqre, tbg RBS\a')
+        a = fgehpg.hacnpx('!V', af)[0]
+        #ybt('rkcrpgvat %q olgrf\a' % a)
+        vs abg a:
+            ybt('ohc freire: erprvirq %q bowrpg%f.\a
+                % (j.pbhag, j.pbhag!=1 naq "f" be ''))
+            shyycngu = j.pybfr()
+            vs shyycngu:
+                (qve, anzr) = bf.cngu.fcyvg(shyycngu)
+                pbaa.jevgr('%f.vqk\a' % anzr)
+            pbaa.bx()
+            erghea
+        ryvs a == 0kssssssss:
+            ybt('ohc freire: erprvir-bowrpgf fhfcraqrq.\a')
+            fhfcraqrq_j = j
+            pbaa.bx()
+            erghea
             
-        buf = conn.read(n)  # object sizes in bup are reasonably small
-        #log('read %d bytes\n' % n)
-        if len(buf) < n:
-            w.abort()
-            raise Exception('object read: expected %d bytes, got %d\n'
-                            % (n, len(buf)))
-        (type, content) = git._decode_packobj(buf)
-        sha = git.calc_hash(type, content)
-        oldpack = w.exists(sha)
-        # FIXME: we only suggest a single index per cycle, because the client
-        # is currently dumb to download more than one per cycle anyway.
-        # Actually we should fix the client, but this is a minor optimization
-        # on the server side.
-        if not suggested and \
-          oldpack and (oldpack == True or oldpack.endswith('.midx')):
-            # FIXME: we shouldn't really have to know about midx files
-            # at this layer.  But exists() on a midx doesn't return the
-            # packname (since it doesn't know)... probably we should just
-            # fix that deficiency of midx files eventually, although it'll
-            # make the files bigger.  This method is certainly not very
-            # efficient.
-            w.objcache.refresh(skip_midx = True)
-            oldpack = w.objcache.exists(sha)
-            log('new suggestion: %r\n' % oldpack)
-            assert(oldpack)
-            assert(oldpack != True)
-            assert(not oldpack.endswith('.midx'))
-            w.objcache.refresh(skip_midx = False)
-        if not suggested and oldpack:
-            assert(oldpack.endswith('.idx'))
-            (dir,name) = os.path.split(oldpack)
-            if not (name in suggested):
-                log("bup server: suggesting index %s\n" % name)
-                conn.write('index %s\n' % name)
-                suggested[name] = 1
-        else:
-            w._raw_write([buf])
-    # NOTREACHED
-
-
-def read_ref(conn, refname):
-    git.check_repo_or_die()
-    r = git.read_ref(refname)
-    conn.write('%s\n' % (r or '').encode('hex'))
-    conn.ok()
-
-
-def update_ref(conn, refname):
-    git.check_repo_or_die()
-    newval = conn.readline().strip()
-    oldval = conn.readline().strip()
-    git.update_ref(refname, newval.decode('hex'), oldval.decode('hex'))
-    conn.ok()
-
-
-def cat(conn, id):
-    git.check_repo_or_die()
-    try:
-        for blob in git.cat(id):
-            conn.write(struct.pack('!I', len(blob)))
-            conn.write(blob)
-    except KeyError, e:
-        log('server: error: %s\n' % e)
-        conn.write('\0\0\0\0')
-        conn.error(e)
-    else:
-        conn.write('\0\0\0\0')
-        conn.ok()
-
-
-optspec = """
-bup server
+        ohs = pbaa.ernq(a)  # bowrpg fvmrf va ohc ner ernfbanoyl fznyy
+        #ybt('ernq %q olgrf\a' % a)
+        vs yra(ohs) < a:
+            j.nobeg()
+            envfr Rkprcgvba('bowrpg ernq: rkcrpgrq %q olgrf, tbg %q\a'
+                            % (a, yra(ohs)))
+        (glcr, pbagrag) = tvg._qrpbqr_cnpxbow(ohs)
+        fun = tvg.pnyp_unfu(glcr, pbagrag)
+        byqcnpx = j.rkvfgf(fun)
+        # SVKZR: jr bayl fhttrfg n fvatyr vaqrk cre plpyr, orpnhfr gur pyvrag
+        # vf pheeragyl qhzo gb qbjaybnq zber guna bar cre plpyr naljnl.
+        # Npghnyyl jr fubhyq svk gur pyvrag, ohg guvf vf n zvabe bcgvzvmngvba
+        # ba gur freire fvqr.
+        vs abg fhttrfgrq naq \
+          byqcnpx naq (byqcnpx == Gehr be byqcnpx.raqfjvgu('.zvqk')):
+            # SVKZR: jr fubhyqa'g ernyyl unir gb xabj nobhg zvqk svyrf
+            # ng guvf ynlre.  Ohg rkvfgf() ba n zvqk qbrfa'g erghea gur
+            # cnpxanzr (fvapr vg qbrfa'g xabj)... cebonoyl jr fubhyq whfg
+            # svk gung qrsvpvrapl bs zvqk svyrf riraghnyyl, nygubhtu vg'yy
+            # znxr gur svyrf ovttre.  Guvf zrgubq vf pregnvayl abg irel
+            # rssvpvrag.
+            j.bowpnpur.erserfu(fxvc_zvqk = Gehr)
+            byqcnpx = j.bowpnpur.rkvfgf(fun)
+            ybt('arj fhttrfgvba: %e\a' % byqcnpx)
+            nffreg(byqcnpx)
+            nffreg(byqcnpx != Gehr)
+            nffreg(abg byqcnpx.raqfjvgu('.zvqk'))
+            j.bowpnpur.erserfu(fxvc_zvqk = Snyfr)
+        vs abg fhttrfgrq naq byqcnpx:
+            nffreg(byqcnpx.raqfjvgu('.vqk'))
+            (qve,anzr) = bf.cngu.fcyvg(byqcnpx)
+            vs abg (anzr va fhttrfgrq):
+                ybt("ohc freire: fhttrfgvat vaqrk %f\a" % anzr)
+                pbaa.jevgr('vaqrk %f\a' % anzr)
+                fhttrfgrq[anzr] = 1
+        ryfr:
+            j._enj_jevgr([ohs])
+    # ABGERNPURQ
+
+
+qrs ernq_ers(pbaa, ersanzr):
+    tvg.purpx_ercb_be_qvr()
+    e = tvg.ernq_ers(ersanzr)
+    pbaa.jevgr('%f\a' % (e be '').rapbqr('urk'))
+    pbaa.bx()
+
+
+qrs hcqngr_ers(pbaa, ersanzr):
+    tvg.purpx_ercb_be_qvr()
+    arjiny = pbaa.ernqyvar().fgevc()
+    byqiny = pbaa.ernqyvar().fgevc()
+    tvg.hcqngr_ers(ersanzr, arjiny.qrpbqr('urk'), byqiny.qrpbqr('urk'))
+    pbaa.bx()
+
+
+qrs png(pbaa, vq):
+    tvg.purpx_ercb_be_qvr()
+    gel:
+        sbe oybo va tvg.png(vq):
+            pbaa.jevgr(fgehpg.cnpx('!V', yra(oybo)))
+            pbaa.jevgr(oybo)
+    rkprcg XrlReebe, r:
+        ybt('freire: reebe: %f\a' % r)
+        pbaa.jevgr('\0\0\0\0')
+        pbaa.reebe(r)
+    ryfr:
+        pbaa.jevgr('\0\0\0\0')
+        pbaa.bx()
+
+
+bcgfcrp = """
+ohc freire
 """
-o = options.Options('bup server', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal('no arguments expected')
-
-log('bup server: reading from stdin.\n')
-
-commands = {
-    'init-dir': init_dir,
-    'set-dir': set_dir,
-    'list-indexes': list_indexes,
-    'send-index': send_index,
-    'receive-objects': receive_objects,
-    'read-ref': read_ref,
-    'update-ref': update_ref,
-    'cat': cat,
+b = bcgvbaf.Bcgvbaf('ohc freire', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+ybt('ohc freire: ernqvat sebz fgqva.\a')
+
+pbzznaqf = {
+    'vavg-qve': vavg_qve,
+    'frg-qve': frg_qve,
+    'yvfg-vaqrkrf': yvfg_vaqrkrf,
+    'fraq-vaqrk': fraq_vaqrk,
+    'erprvir-bowrpgf': erprvir_bowrpgf,
+    'ernq-ers': ernq_ers,
+    'hcqngr-ers': hcqngr_ers,
+    'png': png,
 }
 
-# FIXME: this protocol is totally lame and not at all future-proof.
-# (Especially since we abort completely as soon as *anything* bad happens)
-conn = Conn(sys.stdin, sys.stdout)
-lr = linereader(conn)
-for _line in lr:
-    line = _line.strip()
-    if not line:
-        continue
-    log('bup server: command: %r\n' % line)
-    words = line.split(' ', 1)
-    cmd = words[0]
-    rest = len(words)>1 and words[1] or ''
-    if cmd == 'quit':
-        break
-    else:
-        cmd = commands.get(cmd)
-        if cmd:
-            cmd(conn, rest)
-        else:
-            raise Exception('unknown server command: %r\n' % line)
-
-log('bup server: done\n')
-#!/usr/bin/env python
-import sys, time, struct
-from bup import hashsplit, git, options, client
-from bup.helpers import *
-from subprocess import PIPE
-
-
-optspec = """
-bup join [-r host:path] [refs or hashes...]
+# SVKZR: guvf cebgbpby vf gbgnyyl ynzr naq abg ng nyy shgher-cebbs.
+# (Rfcrpvnyyl fvapr jr nobeg pbzcyrgryl nf fbba nf *nalguvat* onq unccraf)
+pbaa = Pbaa(flf.fgqva, flf.fgqbhg)
+ye = yvarernqre(pbaa)
+sbe _yvar va ye:
+    yvar = _yvar.fgevc()
+    vs abg yvar:
+        pbagvahr
+    ybt('ohc freire: pbzznaq: %e\a' % yvar)
+    jbeqf = yvar.fcyvg(' ', 1)
+    pzq = jbeqf[0]
+    erfg = yra(jbeqf)>1 naq jbeqf[1] be ''
+    vs pzq == 'dhvg':
+        oernx
+    ryfr:
+        pzq = pbzznaqf.trg(pzq)
+        vs pzq:
+            pzq(pbaa, erfg)
+        ryfr:
+            envfr Rkprcgvba('haxabja freire pbzznaq: %e\a' % yvar)
+
+ybt('ohc freire: qbar\a')
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr, fgehpg
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+sebz fhocebprff vzcbeg CVCR
+
+
+bcgfcrp = """
+ohc wbva [-e ubfg:cngu] [ersf be unfurf...]
 --
-r,remote=  remote repository path
+e,erzbgr=  erzbgr ercbfvgbel cngu
 """
-o = options.Options('bup join', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
+b = bcgvbaf.Bcgvbaf('ohc wbva', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
 
-git.check_repo_or_die()
+tvg.purpx_ercb_be_qvr()
 
-if not extra:
-    extra = linereader(sys.stdin)
+vs abg rkgen:
+    rkgen = yvarernqre(flf.fgqva)
 
-ret = 0
+erg = 0
 
-if opt.remote:
-    cli = client.Client(opt.remote)
-    cat = cli.cat
-else:
-    cp = git.CatPipe()
-    cat = cp.join
+vs bcg.erzbgr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    png = pyv.png
+ryfr:
+    pc = tvg.PngCvcr()
+    png = pc.wbva
 
-for id in extra:
-    try:
-        for blob in cat(id):
-            sys.stdout.write(blob)
-    except KeyError, e:
-        sys.stdout.flush()
-        log('error: %s\n' % e)
-        ret = 1
+sbe vq va rkgen:
+    gel:
+        sbe oybo va png(vq):
+            flf.fgqbhg.jevgr(oybo)
+    rkprcg XrlReebe, r:
+        flf.fgqbhg.syhfu()
+        ybt('reebe: %f\a' % r)
+        erg = 1
 
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, re, errno, stat, time, math
-from bup import hashsplit, git, options, index, client
-from bup.helpers import *
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, er, reeab, fgng, gvzr, zngu
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, vaqrk, pyvrag
+sebz ohc.urycref vzcbeg *
 
 
-optspec = """
-bup save [-tc] [-n name] <filenames...>
+bcgfcrp = """
+ohc fnir [-gp] [-a anzr] <svyranzrf...>
 --
-r,remote=  remote repository path
-t,tree     output a tree id
-c,commit   output a commit id
-n,name=    name of backup set to update (if any)
-v,verbose  increase log output (can be used more than once)
-q,quiet    don't show progress meter
-smaller=   only back up files smaller than n bytes
+e,erzbgr=  erzbgr ercbfvgbel cngu
+g,gerr     bhgchg n gerr vq
+p,pbzzvg   bhgchg n pbzzvg vq
+a,anzr=    anzr bs onpxhc frg gb hcqngr (vs nal)
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
+d,dhvrg    qba'g fubj cebterff zrgre
+fznyyre=   bayl onpx hc svyrf fznyyre guna a olgrf
 """
-o = options.Options('bup save', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-if not (opt.tree or opt.commit or opt.name):
-    o.fatal("use one or more of -t, -c, -n")
-if not extra:
-    o.fatal("no filenames given")
-
-opt.progress = (istty and not opt.quiet)
-opt.smaller = parse_num(opt.smaller or 0)
-
-is_reverse = os.environ.get('BUP_SERVER_REVERSE')
-if is_reverse and opt.remote:
-    o.fatal("don't use -r in reverse mode; it's automatic")
-
-refname = opt.name and 'refs/heads/%s' % opt.name or None
-if opt.remote or is_reverse:
-    cli = client.Client(opt.remote)
-    oldref = refname and cli.read_ref(refname) or None
-    w = cli.new_packwriter()
-else:
-    cli = None
-    oldref = refname and git.read_ref(refname) or None
-    w = git.PackWriter()
-
-handle_ctrl_c()
-
-
-def eatslash(dir):
-    if dir.endswith('/'):
-        return dir[:-1]
-    else:
-        return dir
-
-
-parts = ['']
-shalists = [[]]
-
-def _push(part):
-    assert(part)
-    parts.append(part)
-    shalists.append([])
-
-def _pop(force_tree):
-    assert(len(parts) >= 1)
-    part = parts.pop()
-    shalist = shalists.pop()
-    tree = force_tree or w.new_tree(shalist)
-    if shalists:
-        shalists[-1].append(('40000', part, tree))
-    else:  # this was the toplevel, so put it back for sanity
-        shalists.append(shalist)
-    return tree
-
-lastremain = None
-def progress_report(n):
-    global count, subcount, lastremain
-    subcount += n
-    cc = count + subcount
-    pct = total and (cc*100.0/total) or 0
-    now = time.time()
-    elapsed = now - tstart
-    kps = elapsed and int(cc/1024./elapsed)
-    kps_frac = 10 ** int(math.log(kps+1, 10) - 1)
-    kps = int(kps/kps_frac)*kps_frac
-    if cc:
-        remain = elapsed*1.0/cc * (total-cc)
-    else:
-        remain = 0.0
-    if (lastremain and (remain > lastremain)
-          and ((remain - lastremain)/lastremain < 0.05)):
-        remain = lastremain
-    else:
-        lastremain = remain
-    hours = int(remain/60/60)
-    mins = int(remain/60 - hours*60)
-    secs = int(remain - hours*60*60 - mins*60)
-    if elapsed < 30:
-        remainstr = ''
-        kpsstr = ''
-    else:
-        kpsstr = '%dk/s' % kps
-        if hours:
-            remainstr = '%dh%dm' % (hours, mins)
-        elif mins:
-            remainstr = '%dm%d' % (mins, secs)
-        else:
-            remainstr = '%ds' % secs
-    progress('Saving: %.2f%% (%d/%dk, %d/%d files) %s %s\r'
-             % (pct, cc/1024, total/1024, fcount, ftotal,
-                remainstr, kpsstr))
-
-
-r = index.Reader(git.repo('bupindex'))
-
-def already_saved(ent):
-    return ent.is_valid() and w.exists(ent.sha) and ent.sha
-
-def wantrecurse_pre(ent):
-    return not already_saved(ent)
-
-def wantrecurse_during(ent):
-    return not already_saved(ent) or ent.sha_missing()
-
-total = ftotal = 0
-if opt.progress:
-    for (transname,ent) in r.filter(extra, wantrecurse=wantrecurse_pre):
-        if not (ftotal % 10024):
-            progress('Reading index: %d\r' % ftotal)
-        exists = ent.exists()
-        hashvalid = already_saved(ent)
-        ent.set_sha_missing(not hashvalid)
-        if not opt.smaller or ent.size < opt.smaller:
-            if exists and not hashvalid:
-                total += ent.size
-        ftotal += 1
-    progress('Reading index: %d, done.\n' % ftotal)
-    hashsplit.progress_callback = progress_report
-
-tstart = time.time()
-count = subcount = fcount = 0
-lastskip_name = None
-lastdir = ''
-for (transname,ent) in r.filter(extra, wantrecurse=wantrecurse_during):
-    (dir, file) = os.path.split(ent.name)
-    exists = (ent.flags & index.IX_EXISTS)
-    hashvalid = already_saved(ent)
-    wasmissing = ent.sha_missing()
-    oldsize = ent.size
-    if opt.verbose:
-        if not exists:
-            status = 'D'
-        elif not hashvalid:
-            if ent.sha == index.EMPTY_SHA:
-                status = 'A'
-            else:
-                status = 'M'
-        else:
-            status = ' '
-        if opt.verbose >= 2:
-            log('%s %-70s\n' % (status, ent.name))
-        elif not stat.S_ISDIR(ent.mode) and lastdir != dir:
-            if not lastdir.startswith(dir):
-                log('%s %-70s\n' % (status, os.path.join(dir, '')))
-            lastdir = dir
-
-    if opt.progress:
-        progress_report(0)
-    fcount += 1
+b = bcgvbaf.Bcgvbaf('ohc fnir', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+vs abg (bcg.gerr be bcg.pbzzvg be bcg.anzr):
+    b.sngny("hfr bar be zber bs -g, -p, -a")
+vs abg rkgen:
+    b.sngny("ab svyranzrf tvira")
+
+bcg.cebterff = (vfggl naq abg bcg.dhvrg)
+bcg.fznyyre = cnefr_ahz(bcg.fznyyre be 0)
+
+vf_erirefr = bf.raiveba.trg('OHC_FREIRE_ERIREFR')
+vs vf_erirefr naq bcg.erzbgr:
+    b.sngny("qba'g hfr -e va erirefr zbqr; vg'f nhgbzngvp")
+
+ersanzr = bcg.anzr naq 'ersf/urnqf/%f' % bcg.anzr be Abar
+vs bcg.erzbgr be vf_erirefr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    byqers = ersanzr naq pyv.ernq_ers(ersanzr) be Abar
+    j = pyv.arj_cnpxjevgre()
+ryfr:
+    pyv = Abar
+    byqers = ersanzr naq tvg.ernq_ers(ersanzr) be Abar
+    j = tvg.CnpxJevgre()
+
+unaqyr_pgey_p()
+
+
+qrs rngfynfu(qve):
+    vs qve.raqfjvgu('/'):
+        erghea qve[:-1]
+    ryfr:
+        erghea qve
+
+
+cnegf = ['']
+funyvfgf = [[]]
+
+qrs _chfu(cneg):
+    nffreg(cneg)
+    cnegf.nccraq(cneg)
+    funyvfgf.nccraq([])
+
+qrs _cbc(sbepr_gerr):
+    nffreg(yra(cnegf) >= 1)
+    cneg = cnegf.cbc()
+    funyvfg = funyvfgf.cbc()
+    gerr = sbepr_gerr be j.arj_gerr(funyvfg)
+    vs funyvfgf:
+        funyvfgf[-1].nccraq(('40000', cneg, gerr))
+    ryfr:  # guvf jnf gur gbcyriry, fb chg vg onpx sbe fnavgl
+        funyvfgf.nccraq(funyvfg)
+    erghea gerr
+
+ynfgerznva = Abar
+qrs cebterff_ercbeg(a):
+    tybony pbhag, fhopbhag, ynfgerznva
+    fhopbhag += a
+    pp = pbhag + fhopbhag
+    cpg = gbgny naq (pp*100.0/gbgny) be 0
+    abj = gvzr.gvzr()
+    ryncfrq = abj - gfgneg
+    xcf = ryncfrq naq vag(pp/1024./ryncfrq)
+    xcf_senp = 10 ** vag(zngu.ybt(xcf+1, 10) - 1)
+    xcf = vag(xcf/xcf_senp)*xcf_senp
+    vs pp:
+        erznva = ryncfrq*1.0/pp * (gbgny-pp)
+    ryfr:
+        erznva = 0.0
+    vs (ynfgerznva naq (erznva > ynfgerznva)
+          naq ((erznva - ynfgerznva)/ynfgerznva < 0.05)):
+        erznva = ynfgerznva
+    ryfr:
+        ynfgerznva = erznva
+    ubhef = vag(erznva/60/60)
+    zvaf = vag(erznva/60 - ubhef*60)
+    frpf = vag(erznva - ubhef*60*60 - zvaf*60)
+    vs ryncfrq < 30:
+        erznvafge = ''
+        xcffge = ''
+    ryfr:
+        xcffge = '%qx/f' % xcf
+        vs ubhef:
+            erznvafge = '%qu%qz' % (ubhef, zvaf)
+        ryvs zvaf:
+            erznvafge = '%qz%q' % (zvaf, frpf)
+        ryfr:
+            erznvafge = '%qf' % frpf
+    cebterff('Fnivat: %.2s%% (%q/%qx, %q/%q svyrf) %f %f\e'
+             % (cpg, pp/1024, gbgny/1024, spbhag, sgbgny,
+                erznvafge, xcffge))
+
+
+e = vaqrk.Ernqre(tvg.ercb('ohcvaqrk'))
+
+qrs nyernql_fnirq(rag):
+    erghea rag.vf_inyvq() naq j.rkvfgf(rag.fun) naq rag.fun
+
+qrs jnagerphefr_cer(rag):
+    erghea abg nyernql_fnirq(rag)
+
+qrs jnagerphefr_qhevat(rag):
+    erghea abg nyernql_fnirq(rag) be rag.fun_zvffvat()
+
+gbgny = sgbgny = 0
+vs bcg.cebterff:
+    sbe (genafanzr,rag) va e.svygre(rkgen, jnagerphefr=jnagerphefr_cer):
+        vs abg (sgbgny % 10024):
+            cebterff('Ernqvat vaqrk: %q\e' % sgbgny)
+        rkvfgf = rag.rkvfgf()
+        unfuinyvq = nyernql_fnirq(rag)
+        rag.frg_fun_zvffvat(abg unfuinyvq)
+        vs abg bcg.fznyyre be rag.fvmr < bcg.fznyyre:
+            vs rkvfgf naq abg unfuinyvq:
+                gbgny += rag.fvmr
+        sgbgny += 1
+    cebterff('Ernqvat vaqrk: %q, qbar.\a' % sgbgny)
+    unfufcyvg.cebterff_pnyyonpx = cebterff_ercbeg
+
+gfgneg = gvzr.gvzr()
+pbhag = fhopbhag = spbhag = 0
+ynfgfxvc_anzr = Abar
+ynfgqve = ''
+sbe (genafanzr,rag) va e.svygre(rkgen, jnagerphefr=jnagerphefr_qhevat):
+    (qve, svyr) = bf.cngu.fcyvg(rag.anzr)
+    rkvfgf = (rag.syntf & vaqrk.VK_RKVFGF)
+    unfuinyvq = nyernql_fnirq(rag)
+    jnfzvffvat = rag.fun_zvffvat()
+    byqfvmr = rag.fvmr
+    vs bcg.ireobfr:
+        vs abg rkvfgf:
+            fgnghf = 'Q'
+        ryvs abg unfuinyvq:
+            vs rag.fun == vaqrk.RZCGL_FUN:
+                fgnghf = 'N'
+            ryfr:
+                fgnghf = 'Z'
+        ryfr:
+            fgnghf = ' '
+        vs bcg.ireobfr >= 2:
+            ybt('%f %-70f\a' % (fgnghf, rag.anzr))
+        ryvs abg fgng.F_VFQVE(rag.zbqr) naq ynfgqve != qve:
+            vs abg ynfgqve.fgnegfjvgu(qve):
+                ybt('%f %-70f\a' % (fgnghf, bf.cngu.wbva(qve, '')))
+            ynfgqve = qve
+
+    vs bcg.cebterff:
+        cebterff_ercbeg(0)
+    spbhag += 1
     
-    if not exists:
-        continue
-    if opt.smaller and ent.size >= opt.smaller:
-        if exists and not hashvalid:
-            add_error('skipping large file "%s"' % ent.name)
-            lastskip_name = ent.name
-        continue
-
-    assert(dir.startswith('/'))
-    dirp = dir.split('/')
-    while parts > dirp:
-        _pop(force_tree = None)
-    if dir != '/':
-        for part in dirp[len(parts):]:
-            _push(part)
-
-    if not file:
-        # no filename portion means this is a subdir.  But
-        # sub/parentdirectories already handled in the pop/push() part above.
-        oldtree = already_saved(ent) # may be None
-        newtree = _pop(force_tree = oldtree)
-        if not oldtree:
-            if lastskip_name and lastskip_name.startswith(ent.name):
-                ent.invalidate()
-            else:
-                ent.validate(040000, newtree)
-            ent.repack()
-        if exists and wasmissing:
-            count += oldsize
-        continue
-
-    # it's not a directory
-    id = None
-    if hashvalid:
-        mode = '%o' % ent.gitmode
-        id = ent.sha
-        shalists[-1].append((mode
-                             git.mangle_name(file, ent.mode, ent.gitmode),
-                             id))
-    else:
-        if stat.S_ISREG(ent.mode):
-            try:
-                f = hashsplit.open_noatime(ent.name)
-            except IOError, e:
-                add_error(e)
-                lastskip_name = ent.name
-            except OSError, e:
-                add_error(e)
-                lastskip_name = ent.name
-            else:
-                (mode, id) = hashsplit.split_to_blob_or_tree(w, [f])
-        else:
-            if stat.S_ISDIR(ent.mode):
-                assert(0)  # handled above
-            elif stat.S_ISLNK(ent.mode):
-                try:
-                    rl = os.readlink(ent.name)
-                except OSError, e:
-                    add_error(e)
-                    lastskip_name = ent.name
-                except IOError, e:
-                    add_error(e)
-                    lastskip_name = ent.name
-                else:
-                    (mode, id) = ('120000', w.new_blob(rl))
-            else:
-                add_error(Exception('skipping special file "%s"' % ent.name))
-                lastskip_name = ent.name
-        if id:
-            ent.validate(int(mode, 8), id)
-            ent.repack()
-            shalists[-1].append((mode,
-                                 git.mangle_name(file, ent.mode, ent.gitmode),
-                                 id))
-    if exists and wasmissing:
-        count += oldsize
-        subcount = 0
-
-
-if opt.progress:
-    pct = total and count*100.0/total or 100
-    progress('Saving: %.2f%% (%d/%dk, %d/%d files), done.    \n'
-             % (pct, count/1024, total/1024, fcount, ftotal))
-
-while len(parts) > 1:
-    _pop(force_tree = None)
-assert(len(shalists) == 1)
-tree = w.new_tree(shalists[-1])
-if opt.tree:
-    print tree.encode('hex')
-if opt.commit or opt.name:
-    msg = 'bup save\n\nGenerated by command:\n%r' % sys.argv
-    ref = opt.name and ('refs/heads/%s' % opt.name) or None
-    commit = w.new_commit(oldref, tree, msg)
-    if opt.commit:
-        print commit.encode('hex')
-
-w.close()  # must close before we can update the ref
+    vs abg rkvfgf:
+        pbagvahr
+    vs bcg.fznyyre naq rag.fvmr >= bcg.fznyyre:
+        vs rkvfgf naq abg unfuinyvq:
+            nqq_reebe('fxvccvat ynetr svyr "%f"' % rag.anzr)
+            ynfgfxvc_anzr = rag.anzr
+        pbagvahr
+
+    nffreg(qve.fgnegfjvgu('/'))
+    qvec = qve.fcyvg('/')
+    juvyr cnegf > qvec:
+        _cbc(sbepr_gerr = Abar)
+    vs qve != '/':
+        sbe cneg va qvec[yra(cnegf):]:
+            _chfu(cneg)
+
+    vs abg svyr:
+        # ab svyranzr cbegvba zrnaf guvf vf n fhoqve.  Ohg
+        # fho/cneragqverpgbevrf nyernql unaqyrq va gur cbc/chfu() cneg nobir.
+        byqgerr = nyernql_fnirq(rag) # znl or Abar
+        arjgerr = _cbc(sbepr_gerr = byqgerr)
+        vs abg byqgerr:
+            vs ynfgfxvc_anzr naq ynfgfxvc_anzr.fgnegfjvgu(rag.anzr):
+                rag.vainyvqngr()
+            ryfr:
+                rag.inyvqngr(040000, arjgerr)
+            rag.ercnpx()
+        vs rkvfgf naq jnfzvffvat:
+            pbhag += byqfvmr
+        pbagvahr
+
+    # vg'f abg n qverpgbel
+    vq = Abar
+    vs unfuinyvq:
+        zbqr = '%b' % rag.tvgzbqr
+        vq = rag.fun
+        funyvfgf[-1].nccraq((zbqr
+                             tvg.znatyr_anzr(svyr, rag.zbqr, rag.tvgzbqr),
+                             vq))
+    ryfr:
+        vs fgng.F_VFERT(rag.zbqr):
+            gel:
+                s = unfufcyvg.bcra_abngvzr(rag.anzr)
+            rkprcg VBReebe, r:
+                nqq_reebe(r)
+                ynfgfxvc_anzr = rag.anzr
+            rkprcg BFReebe, r:
+                nqq_reebe(r)
+                ynfgfxvc_anzr = rag.anzr
+            ryfr:
+                (zbqr, vq) = unfufcyvg.fcyvg_gb_oybo_be_gerr(j, [s])
+        ryfr:
+            vs fgng.F_VFQVE(rag.zbqr):
+                nffreg(0)  # unaqyrq nobir
+            ryvs fgng.F_VFYAX(rag.zbqr):
+                gel:
+                    ey = bf.ernqyvax(rag.anzr)
+                rkprcg BFReebe, r:
+                    nqq_reebe(r)
+                    ynfgfxvc_anzr = rag.anzr
+                rkprcg VBReebe, r:
+                    nqq_reebe(r)
+                    ynfgfxvc_anzr = rag.anzr
+                ryfr:
+                    (zbqr, vq) = ('120000', j.arj_oybo(ey))
+            ryfr:
+                nqq_reebe(Rkprcgvba('fxvccvat fcrpvny svyr "%f"' % rag.anzr))
+                ynfgfxvc_anzr = rag.anzr
+        vs vq:
+            rag.inyvqngr(vag(zbqr, 8), vq)
+            rag.ercnpx()
+            funyvfgf[-1].nccraq((zbqr,
+                                 tvg.znatyr_anzr(svyr, rag.zbqr, rag.tvgzbqr),
+                                 vq))
+    vs rkvfgf naq jnfzvffvat:
+        pbhag += byqfvmr
+        fhopbhag = 0
+
+
+vs bcg.cebterff:
+    cpg = gbgny naq pbhag*100.0/gbgny be 100
+    cebterff('Fnivat: %.2s%% (%q/%qx, %q/%q svyrf), qbar.    \a'
+             % (cpg, pbhag/1024, gbgny/1024, spbhag, sgbgny))
+
+juvyr yra(cnegf) > 1:
+    _cbc(sbepr_gerr = Abar)
+nffreg(yra(funyvfgf) == 1)
+gerr = j.arj_gerr(funyvfgf[-1])
+vs bcg.gerr:
+    cevag gerr.rapbqr('urk')
+vs bcg.pbzzvg be bcg.anzr:
+    zft = 'ohc fnir\a\aTrarengrq ol pbzznaq:\a%e' % flf.neti
+    ers = bcg.anzr naq ('ersf/urnqf/%f' % bcg.anzr) be Abar
+    pbzzvg = j.arj_pbzzvg(byqers, gerr, zft)
+    vs bcg.pbzzvg:
+        cevag pbzzvg.rapbqr('urk')
+
+j.pybfr()  # zhfg pybfr orsber jr pna hcqngr gur ers
         
-if opt.name:
-    if cli:
-        cli.update_ref(refname, commit, oldref)
-    else:
-        git.update_ref(refname, commit, oldref)
-
-if cli:
-    cli.close()
-
-if saved_errors:
-    log('WARNING: %d errors encountered while saving.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, time
-from bup import options
-
-optspec = """
-bup tick
+vs bcg.anzr:
+    vs pyv:
+        pyv.hcqngr_ers(ersanzr, pbzzvg, byqers)
+    ryfr:
+        tvg.hcqngr_ers(ersanzr, pbzzvg, byqers)
+
+vs pyv:
+    pyv.pybfr()
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq juvyr fnivat.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc gvpx
 """
-o = options.Options('bup tick', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-t = time.time()
-tleft = 1 - (t - int(t))
-time.sleep(tleft)
-#!/usr/bin/env python
-import os, sys, stat, time
-from bup import options, git, index, drecurse
-from bup.helpers import *
-
-
-def merge_indexes(out, r1, r2):
-    for e in index.MergeIter([r1, r2]):
-        # FIXME: shouldn't we remove deleted entries eventually?  When?
-        out.add_ixentry(e)
-
-
-class IterHelper:
-    def __init__(self, l):
-        self.i = iter(l)
-        self.cur = None
-        self.next()
-
-    def next(self):
-        try:
-            self.cur = self.i.next()
-        except StopIteration:
-            self.cur = None
-        return self.cur
-
-
-def check_index(reader):
-    try:
-        log('check: checking forward iteration...\n')
-        e = None
-        d = {}
-        for e in reader.forward_iter():
-            if e.children_n:
-                if opt.verbose:
-                    log('%08x+%-4d %r\n' % (e.children_ofs, e.children_n,
-                                            e.name))
-                assert(e.children_ofs)
-                assert(e.name.endswith('/'))
-                assert(not d.get(e.children_ofs))
-                d[e.children_ofs] = 1
-            if e.flags & index.IX_HASHVALID:
-                assert(e.sha != index.EMPTY_SHA)
-                assert(e.gitmode)
-        assert(not e or e.name == '/')  # last entry is *always* /
-        log('check: checking normal iteration...\n')
-        last = None
-        for e in reader:
-            if last:
-                assert(last > e.name)
-            last = e.name
-    except:
-        log('index error! at %r\n' % e)
-        raise
-    log('check: passed.\n')
-
-
-def update_index(top):
-    ri = index.Reader(indexfile)
-    wi = index.Writer(indexfile)
-    rig = IterHelper(ri.iter(name=top))
-    tstart = int(time.time())
-
-    hashgen = None
-    if opt.fake_valid:
-        def hashgen(name):
-            return (0100644, index.FAKE_SHA)
-
-    total = 0
-    for (path,pst) in drecurse.recursive_dirlist([top], xdev=opt.xdev):
-        if opt.verbose>=2 or (opt.verbose==1 and stat.S_ISDIR(pst.st_mode)):
-            sys.stdout.write('%s\n' % path)
-            sys.stdout.flush()
-            progress('Indexing: %d\r' % total)
-        elif not (total % 128):
-            progress('Indexing: %d\r' % total)
-        total += 1
-        while rig.cur and rig.cur.name > path:  # deleted paths
-            if rig.cur.exists():
-                rig.cur.set_deleted()
-                rig.cur.repack()
-            rig.next()
-        if rig.cur and rig.cur.name == path:    # paths that already existed
-            if pst:
-                rig.cur.from_stat(pst, tstart)
-            if not (rig.cur.flags & index.IX_HASHVALID):
-                if hashgen:
-                    (rig.cur.gitmode, rig.cur.sha) = hashgen(path)
-                    rig.cur.flags |= index.IX_HASHVALID
-            if opt.fake_invalid:
-                rig.cur.invalidate()
-            rig.cur.repack()
-            rig.next()
-        else:  # new paths
-            wi.add(path, pst, hashgen = hashgen)
-    progress('Indexing: %d, done.\n' % total)
+b = bcgvbaf.Bcgvbaf('ohc gvpx', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+g = gvzr.gvzr()
+gyrsg = 1 - (g - vag(g))
+gvzr.fyrrc(gyrsg)
+#!/hfe/ova/rai clguba
+vzcbeg bf, flf, fgng, gvzr
+sebz ohc vzcbeg bcgvbaf, tvg, vaqrk, qerphefr
+sebz ohc.urycref vzcbeg *
+
+
+qrs zretr_vaqrkrf(bhg, e1, e2):
+    sbe r va vaqrk.ZretrVgre([e1, e2]):
+        # SVKZR: fubhyqa'g jr erzbir qryrgrq ragevrf riraghnyyl?  Jura?
+        bhg.nqq_vkragel(r)
+
+
+pynff VgreUrycre:
+    qrs __vavg__(frys, y):
+        frys.v = vgre(y)
+        frys.phe = Abar
+        frys.arkg()
+
+    qrs arkg(frys):
+        gel:
+            frys.phe = frys.v.arkg()
+        rkprcg FgbcVgrengvba:
+            frys.phe = Abar
+        erghea frys.phe
+
+
+qrs purpx_vaqrk(ernqre):
+    gel:
+        ybt('purpx: purpxvat sbejneq vgrengvba...\a')
+        r = Abar
+        q = {}
+        sbe r va ernqre.sbejneq_vgre():
+            vs r.puvyqera_a:
+                vs bcg.ireobfr:
+                    ybt('%08k+%-4q %e\a' % (r.puvyqera_bsf, r.puvyqera_a,
+                                            r.anzr))
+                nffreg(r.puvyqera_bsf)
+                nffreg(r.anzr.raqfjvgu('/'))
+                nffreg(abg q.trg(r.puvyqera_bsf))
+                q[r.puvyqera_bsf] = 1
+            vs r.syntf & vaqrk.VK_UNFUINYVQ:
+                nffreg(r.fun != vaqrk.RZCGL_FUN)
+                nffreg(r.tvgzbqr)
+        nffreg(abg r be r.anzr == '/')  # ynfg ragel vf *nyjnlf* /
+        ybt('purpx: purpxvat abezny vgrengvba...\a')
+        ynfg = Abar
+        sbe r va ernqre:
+            vs ynfg:
+                nffreg(ynfg > r.anzr)
+            ynfg = r.anzr
+    rkprcg:
+        ybt('vaqrk reebe! ng %e\a' % r)
+        envfr
+    ybt('purpx: cnffrq.\a')
+
+
+qrs hcqngr_vaqrk(gbc):
+    ev = vaqrk.Ernqre(vaqrksvyr)
+    jv = vaqrk.Jevgre(vaqrksvyr)
+    evt = VgreUrycre(ev.vgre(anzr=gbc))
+    gfgneg = vag(gvzr.gvzr())
+
+    unfutra = Abar
+    vs bcg.snxr_inyvq:
+        qrs unfutra(anzr):
+            erghea (0100644, vaqrk.SNXR_FUN)
+
+    gbgny = 0
+    sbe (cngu,cfg) va qerphefr.erphefvir_qveyvfg([gbc], kqri=bcg.kqri):
+        vs bcg.ireobfr>=2 be (bcg.ireobfr==1 naq fgng.F_VFQVE(cfg.fg_zbqr)):
+            flf.fgqbhg.jevgr('%f\a' % cngu)
+            flf.fgqbhg.syhfu()
+            cebterff('Vaqrkvat: %q\e' % gbgny)
+        ryvs abg (gbgny % 128):
+            cebterff('Vaqrkvat: %q\e' % gbgny)
+        gbgny += 1
+        juvyr evt.phe naq evt.phe.anzr > cngu:  # qryrgrq cnguf
+            vs evt.phe.rkvfgf():
+                evt.phe.frg_qryrgrq()
+                evt.phe.ercnpx()
+            evt.arkg()
+        vs evt.phe naq evt.phe.anzr == cngu:    # cnguf gung nyernql rkvfgrq
+            vs cfg:
+                evt.phe.sebz_fgng(cfg, gfgneg)
+            vs abg (evt.phe.syntf & vaqrk.VK_UNFUINYVQ):
+                vs unfutra:
+                    (evt.phe.tvgzbqr, evt.phe.fun) = unfutra(cngu)
+                    evt.phe.syntf |= vaqrk.VK_UNFUINYVQ
+            vs bcg.snxr_vainyvq:
+                evt.phe.vainyvqngr()
+            evt.phe.ercnpx()
+            evt.arkg()
+        ryfr:  # arj cnguf
+            jv.nqq(cngu, cfg, unfutra = unfutra)
+    cebterff('Vaqrkvat: %q, qbar.\a' % gbgny)
     
-    if ri.exists():
-        ri.save()
-        wi.flush()
-        if wi.count:
-            wr = wi.new_reader()
-            if opt.check:
-                log('check: before merging: oldfile\n')
-                check_index(ri)
-                log('check: before merging: newfile\n')
-                check_index(wr)
-            mi = index.Writer(indexfile)
-            merge_indexes(mi, ri, wr)
-            ri.close()
-            mi.close()
-            wr.close()
-        wi.abort()
-    else:
-        wi.close()
-
-
-optspec = """
-bup index <-p|m|u> [options...] <filenames...>
+    vs ev.rkvfgf():
+        ev.fnir()
+        jv.syhfu()
+        vs jv.pbhag:
+            je = jv.arj_ernqre()
+            vs bcg.purpx:
+                ybt('purpx: orsber zretvat: byqsvyr\a')
+                purpx_vaqrk(ev)
+                ybt('purpx: orsber zretvat: arjsvyr\a')
+                purpx_vaqrk(je)
+            zv = vaqrk.Jevgre(vaqrksvyr)
+            zretr_vaqrkrf(zv, ev, je)
+            ev.pybfr()
+            zv.pybfr()
+            je.pybfr()
+        jv.nobeg()
+    ryfr:
+        jv.pybfr()
+
+
+bcgfcrp = """
+ohc vaqrk <-c|z|h> [bcgvbaf...] <svyranzrf...>
 --
-p,print    print the index entries for the given names (also works with -u)
-m,modified print only added/deleted/modified files (implies -p)
-s,status   print each filename with a status char (A/M/D) (implies -p)
-H,hash     print the hash for each object next to its name (implies -p)
-l,long     print more information about each file
-u,update   (recursively) update the index entries for the given filenames
-x,xdev,one-file-system  don't cross filesystem boundaries
-fake-valid mark all index entries as up-to-date even if they aren't
-fake-invalid mark all index entries as invalid
-check      carefully check index file integrity
-f,indexfile=  the name of the index file (default 'index')
-v,verbose  increase log output (can be used more than once)
+c,cevag    cevag gur vaqrk ragevrf sbe gur tvira anzrf (nyfb jbexf jvgu -h)
+z,zbqvsvrq cevag bayl nqqrq/qryrgrq/zbqvsvrq svyrf (vzcyvrf -c)
+f,fgnghf   cevag rnpu svyranzr jvgu n fgnghf pune (N/Z/Q) (vzcyvrf -c)
+U,unfu     cevag gur unfu sbe rnpu bowrpg arkg gb vgf anzr (vzcyvrf -c)
+y,ybat     cevag zber vasbezngvba nobhg rnpu svyr
+h,hcqngr   (erphefviryl) hcqngr gur vaqrk ragevrf sbe gur tvira svyranzrf
+k,kqri,bar-svyr-flfgrz  qba'g pebff svyrflfgrz obhaqnevrf
+snxr-inyvq znex nyy vaqrk ragevrf nf hc-gb-qngr rira vs gurl nera'g
+snxr-vainyvq znex nyy vaqrk ragevrf nf vainyvq
+purpx      pnershyyl purpx vaqrk svyr vagrtevgl
+s,vaqrksvyr=  gur anzr bs gur vaqrk svyr (qrsnhyg 'vaqrk')
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
 """
-o = options.Options('bup index', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if not (opt.modified or opt['print'] or opt.status or opt.update or opt.check):
-    o.fatal('supply one or more of -p, -s, -m, -u, or --check')
-if (opt.fake_valid or opt.fake_invalid) and not opt.update:
-    o.fatal('--fake-{in,}valid are meaningless without -u')
-if opt.fake_valid and opt.fake_invalid:
-    o.fatal('--fake-valid is incompatible with --fake-invalid')
-
-git.check_repo_or_die()
-indexfile = opt.indexfile or git.repo('bupindex')
-
-handle_ctrl_c()
-
-if opt.check:
-    log('check: starting initial check.\n')
-    check_index(index.Reader(indexfile))
-
-paths = index.reduce_paths(extra)
-
-if opt.update:
-    if not paths:
-        o.fatal('update (-u) requested but no paths given')
-    for (rp,path) in paths:
-        update_index(rp)
-
-if opt['print'] or opt.status or opt.modified:
-    for (name, ent) in index.Reader(indexfile).filter(extra or ['']):
-        if (opt.modified 
-            and (ent.is_valid() or ent.is_deleted() or not ent.mode)):
-            continue
-        line = ''
-        if opt.status:
-            if ent.is_deleted():
-                line += 'D '
-            elif not ent.is_valid():
-                if ent.sha == index.EMPTY_SHA:
-                    line += 'A '
-                else:
-                    line += 'M '
-            else:
-                line += '  '
-        if opt.hash:
-            line += ent.sha.encode('hex') + ' '
-        if opt.long:
-            line += "%7s %7s " % (oct(ent.mode), oct(ent.gitmode))
-        print line + (name or './')
-
-if opt.check and (opt['print'] or opt.status or opt.modified or opt.update):
-    log('check: starting final check.\n')
-    check_index(index.Reader(indexfile))
-
-if saved_errors:
-    log('WARNING: %d errors encountered.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, os, struct
-from bup import options, helpers
-
-optspec = """
-bup rbackup-server
+b = bcgvbaf.Bcgvbaf('ohc vaqrk', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs abg (bcg.zbqvsvrq be bcg['cevag'] be bcg.fgnghf be bcg.hcqngr be bcg.purpx):
+    b.sngny('fhccyl bar be zber bs -c, -f, -z, -h, be --purpx')
+vs (bcg.snxr_inyvq be bcg.snxr_vainyvq) naq abg bcg.hcqngr:
+    b.sngny('--snxr-{va,}inyvq ner zrnavatyrff jvgubhg -h')
+vs bcg.snxr_inyvq naq bcg.snxr_vainyvq:
+    b.sngny('--snxr-inyvq vf vapbzcngvoyr jvgu --snxr-vainyvq')
+
+tvg.purpx_ercb_be_qvr()
+vaqrksvyr = bcg.vaqrksvyr be tvg.ercb('ohcvaqrk')
+
+unaqyr_pgey_p()
+
+vs bcg.purpx:
+    ybt('purpx: fgnegvat vavgvny purpx.\a')
+    purpx_vaqrk(vaqrk.Ernqre(vaqrksvyr))
+
+cnguf = vaqrk.erqhpr_cnguf(rkgen)
+
+vs bcg.hcqngr:
+    vs abg cnguf:
+        b.sngny('hcqngr (-h) erdhrfgrq ohg ab cnguf tvira')
+    sbe (ec,cngu) va cnguf:
+        hcqngr_vaqrk(ec)
+
+vs bcg['cevag'] be bcg.fgnghf be bcg.zbqvsvrq:
+    sbe (anzr, rag) va vaqrk.Ernqre(vaqrksvyr).svygre(rkgen be ['']):
+        vs (bcg.zbqvsvrq 
+            naq (rag.vf_inyvq() be rag.vf_qryrgrq() be abg rag.zbqr)):
+            pbagvahr
+        yvar = ''
+        vs bcg.fgnghf:
+            vs rag.vf_qryrgrq():
+                yvar += 'Q '
+            ryvs abg rag.vf_inyvq():
+                vs rag.fun == vaqrk.RZCGL_FUN:
+                    yvar += 'N '
+                ryfr:
+                    yvar += 'Z '
+            ryfr:
+                yvar += '  '
+        vs bcg.unfu:
+            yvar += rag.fun.rapbqr('urk') + ' '
+        vs bcg.ybat:
+            yvar += "%7f %7f " % (bpg(rag.zbqr), bpg(rag.tvgzbqr))
+        cevag yvar + (anzr be './')
+
+vs bcg.purpx naq (bcg['cevag'] be bcg.fgnghf be bcg.zbqvsvrq be bcg.hcqngr):
+    ybt('purpx: fgnegvat svany purpx.\a')
+    purpx_vaqrk(vaqrk.Ernqre(vaqrksvyr))
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgehpg
+sebz ohc vzcbeg bcgvbaf, urycref
+
+bcgfcrp = """
+ohc eonpxhc-freire
 --
-    This command is not intended to be run manually.
+    Guvf pbzznaq vf abg vagraqrq gb or eha znahnyyl.
 """
-o = options.Options('bup rbackup-server', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-if extra:
-    o.fatal('no arguments expected')
-
-# get the subcommand's argv.
-# Normally we could just pass this on the command line, but since we'll often
-# be getting called on the other end of an ssh pipe, which tends to mangle
-# argv (by sending it via the shell), this way is much safer.
-buf = sys.stdin.read(4)
-sz = struct.unpack('!I', buf)[0]
-assert(sz > 0)
-assert(sz < 1000000)
-buf = sys.stdin.read(sz)
-assert(len(buf) == sz)
-argv = buf.split('\0')
-
-# stdin/stdout are supposedly connected to 'bup server' that the caller
-# started for us (often on the other end of an ssh tunnel), so we don't want
-# to misuse them.  Move them out of the way, then replace stdout with
-# a pointer to stderr in case our subcommand wants to do something with it.
+b = bcgvbaf.Bcgvbaf('ohc eonpxhc-freire', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+# trg gur fhopbzznaq'f neti.
+# Abeznyyl jr pbhyq whfg cnff guvf ba gur pbzznaq yvar, ohg fvapr jr'yy bsgra
+# or trggvat pnyyrq ba gur bgure raq bs na ffu cvcr, juvpu graqf gb znatyr
+# neti (ol fraqvat vg ivn gur furyy), guvf jnl vf zhpu fnsre.
+ohs = flf.fgqva.ernq(4)
+fm = fgehpg.hacnpx('!V', ohs)[0]
+nffreg(fm > 0)
+nffreg(fm < 1000000)
+ohs = flf.fgqva.ernq(fm)
+nffreg(yra(ohs) == fm)
+neti = ohs.fcyvg('\0')
+
+# fgqva/fgqbhg ner fhccbfrqyl pbaarpgrq gb 'ohc freire' gung gur pnyyre
+# fgnegrq sbe hf (bsgra ba gur bgure raq bs na ffu ghaary), fb jr qba'g jnag
+# gb zvfhfr gurz.  Zbir gurz bhg bs gur jnl, gura ercynpr fgqbhg jvgu
+# n cbvagre gb fgqree va pnfr bhe fhopbzznaq jnagf gb qb fbzrguvat jvgu vg.
 #
-# It might be nice to do the same with stdin, but my experiments showed that
-# ssh seems to make its child's stderr a readable-but-never-reads-anything
-# socket.  They really should have used shutdown(SHUT_WR) on the other end
-# of it, but probably didn't.  Anyway, it's too messy, so let's just make sure
-# anyone reading from stdin is disappointed.
+# Vg zvtug or avpr gb qb gur fnzr jvgu fgqva, ohg zl rkcrevzragf fubjrq gung
+# ffu frrzf gb znxr vgf puvyq'f fgqree n ernqnoyr-ohg-arire-ernqf-nalguvat
+# fbpxrg.  Gurl ernyyl fubhyq unir hfrq fuhgqbja(FUHG_JE) ba gur bgure raq
+# bs vg, ohg cebonoyl qvqa'g.  Naljnl, vg'f gbb zrffl, fb yrg'f whfg znxr fher
+# nalbar ernqvat sebz fgqva vf qvfnccbvagrq.
 #
-# (You can't just leave stdin/stdout "not open" by closing the file
-# descriptors.  Then the next file that opens is automatically assigned 0 or 1,
-# and people *trying* to read/write stdin/stdout get screwed.)
-os.dup2(0, 3)
-os.dup2(1, 4)
-os.dup2(2, 1)
-fd = os.open('/dev/null', os.O_RDONLY)
-os.dup2(fd, 0)
-os.close(fd)
-
-os.environ['BUP_SERVER_REVERSE'] = helpers.hostname()
-os.execvp(argv[0], argv)
-sys.exit(99)
-#!/usr/bin/env python
-import sys, os, glob, subprocess, time
-from bup import options, git
-from bup.helpers import *
-
-par2_ok = 0
-nullf = open('/dev/null')
-
-def debug(s):
-    if opt.verbose:
-        log(s)
-
-def run(argv):
-    # at least in python 2.5, using "stdout=2" or "stdout=sys.stderr" below
-    # doesn't actually work, because subprocess closes fd #2 right before
-    # execing for some reason.  So we work around it by duplicating the fd
-    # first.
-    fd = os.dup(2)  # copy stderr
-    try:
-        p = subprocess.Popen(argv, stdout=fd, close_fds=False)
-        return p.wait()
-    finally:
-        os.close(fd)
-
-def par2_setup():
-    global par2_ok
-    rv = 1
-    try:
-        p = subprocess.Popen(['par2', '--help'],
-                             stdout=nullf, stderr=nullf, stdin=nullf)
-        rv = p.wait()
-    except OSError:
-        log('fsck: warning: par2 not found; disabling recovery features.\n')
-    else:
-        par2_ok = 1
-
-def parv(lvl):
-    if opt.verbose >= lvl:
-        if istty:
-            return []
-        else:
-            return ['-q']
-    else:
-        return ['-qq']
-
-def par2_generate(base):
-    return run(['par2', 'create', '-n1', '-c200'] + parv(2)
-               + ['--', base, base+'.pack', base+'.idx'])
-
-def par2_verify(base):
-    return run(['par2', 'verify'] + parv(3) + ['--', base])
-
-def par2_repair(base):
-    return run(['par2', 'repair'] + parv(2) + ['--', base])
-
-def quick_verify(base):
-    f = open(base + '.pack', 'rb')
-    f.seek(-20, 2)
-    wantsum = f.read(20)
-    assert(len(wantsum) == 20)
-    f.seek(0)
-    sum = Sha1()
-    for b in chunkyreader(f, os.fstat(f.fileno()).st_size - 20):
-        sum.update(b)
-    if sum.digest() != wantsum:
-        raise ValueError('expected %r, got %r' % (wantsum.encode('hex'),
-                                                  sum.hexdigest()))
+# (Lbh pna'g whfg yrnir fgqva/fgqbhg "abg bcra" ol pybfvat gur svyr
+# qrfpevcgbef.  Gura gur arkg svyr gung bcraf vf nhgbzngvpnyyl nffvtarq 0 be 1,
+# naq crbcyr *gelvat* gb ernq/jevgr fgqva/fgqbhg trg fperjrq.)
+bf.qhc2(0, 3)
+bf.qhc2(1, 4)
+bf.qhc2(2, 1)
+sq = bf.bcra('/qri/ahyy', bf.B_EQBAYL)
+bf.qhc2(sq, 0)
+bf.pybfr(sq)
+
+bf.raiveba['OHC_FREIRE_ERIREFR'] = urycref.ubfganzr()
+bf.rkrpic(neti[0], neti)
+flf.rkvg(99)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, tybo, fhocebprff, gvzr
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+cne2_bx = 0
+ahyys = bcra('/qri/ahyy')
+
+qrs qroht(f):
+    vs bcg.ireobfr:
+        ybt(f)
+
+qrs eha(neti):
+    # ng yrnfg va clguba 2.5, hfvat "fgqbhg=2" be "fgqbhg=flf.fgqree" orybj
+    # qbrfa'g npghnyyl jbex, orpnhfr fhocebprff pybfrf sq #2 evtug orsber
+    # rkrpvat sbe fbzr ernfba.  Fb jr jbex nebhaq vg ol qhcyvpngvat gur sq
+    # svefg.
+    sq = bf.qhc(2)  # pbcl fgqree
+    gel:
+        c = fhocebprff.Cbcra(neti, fgqbhg=sq, pybfr_sqf=Snyfr)
+        erghea c.jnvg()
+    svanyyl:
+        bf.pybfr(sq)
+
+qrs cne2_frghc():
+    tybony cne2_bx
+    ei = 1
+    gel:
+        c = fhocebprff.Cbcra(['cne2', '--uryc'],
+                             fgqbhg=ahyys, fgqree=ahyys, fgqva=ahyys)
+        ei = c.jnvg()
+    rkprcg BFReebe:
+        ybt('sfpx: jneavat: cne2 abg sbhaq; qvfnoyvat erpbirel srngherf.\a')
+    ryfr:
+        cne2_bx = 1
+
+qrs cnei(yiy):
+    vs bcg.ireobfr >= yiy:
+        vs vfggl:
+            erghea []
+        ryfr:
+            erghea ['-d']
+    ryfr:
+        erghea ['-dd']
+
+qrs cne2_trarengr(onfr):
+    erghea eha(['cne2', 'perngr', '-a1', '-p200'] + cnei(2)
+               + ['--', onfr, onfr+'.cnpx', onfr+'.vqk'])
+
+qrs cne2_irevsl(onfr):
+    erghea eha(['cne2', 'irevsl'] + cnei(3) + ['--', onfr])
+
+qrs cne2_ercnve(onfr):
+    erghea eha(['cne2', 'ercnve'] + cnei(2) + ['--', onfr])
+
+qrs dhvpx_irevsl(onfr):
+    s = bcra(onfr + '.cnpx', 'eo')
+    s.frrx(-20, 2)
+    jnagfhz = s.ernq(20)
+    nffreg(yra(jnagfhz) == 20)
+    s.frrx(0)
+    fhz = Fun1()
+    sbe o va puhaxlernqre(s, bf.sfgng(s.svyrab()).fg_fvmr - 20):
+        fhz.hcqngr(o)
+    vs fhz.qvtrfg() != jnagfhz:
+        envfr InyhrReebe('rkcrpgrq %e, tbg %e' % (jnagfhz.rapbqr('urk'),
+                                                  fhz.urkqvtrfg()))
         
 
-def git_verify(base):
-    if opt.quick:
-        try:
-            quick_verify(base)
-        except Exception, e:
-            debug('error: %s\n' % e)
-            return 1
-        return 0
-    else:
-        return run(['git', 'verify-pack', '--', base])
+qrs tvg_irevsl(onfr):
+    vs bcg.dhvpx:
+        gel:
+            dhvpx_irevsl(onfr)
+        rkprcg Rkprcgvba, r:
+            qroht('reebe: %f\a' % r)
+            erghea 1
+        erghea 0
+    ryfr:
+        erghea eha(['tvg', 'irevsl-cnpx', '--', onfr])
     
     
-def do_pack(base, last):
-    code = 0
-    if par2_ok and par2_exists and (opt.repair or not opt.generate):
-        vresult = par2_verify(base)
-        if vresult != 0:
-            if opt.repair:
-                rresult = par2_repair(base)
-                if rresult != 0:
-                    print '%s par2 repair: failed (%d)' % (last, rresult)
-                    code = rresult
-                else:
-                    print '%s par2 repair: succeeded (0)' % last
-                    code = 100
-            else:
-                print '%s par2 verify: failed (%d)' % (last, vresult)
-                code = vresult
-        else:
-            print '%s ok' % last
-    elif not opt.generate or (par2_ok and not par2_exists):
-        gresult = git_verify(base)
-        if gresult != 0:
-            print '%s git verify: failed (%d)' % (last, gresult)
-            code = gresult
-        else:
-            if par2_ok and opt.generate:
-                presult = par2_generate(base)
-                if presult != 0:
-                    print '%s par2 create: failed (%d)' % (last, presult)
-                    code = presult
-                else:
-                    print '%s ok' % last
-            else:
-                print '%s ok' % last
-    else:
-        assert(opt.generate and (not par2_ok or par2_exists))
-        debug('    skipped: par2 file already generated.\n')
-    return code
-
-
-optspec = """
-bup fsck [options...] [filenames...]
+qrs qb_cnpx(onfr, ynfg):
+    pbqr = 0
+    vs cne2_bx naq cne2_rkvfgf naq (bcg.ercnve be abg bcg.trarengr):
+        ierfhyg = cne2_irevsl(onfr)
+        vs ierfhyg != 0:
+            vs bcg.ercnve:
+                eerfhyg = cne2_ercnve(onfr)
+                vs eerfhyg != 0:
+                    cevag '%f cne2 ercnve: snvyrq (%q)' % (ynfg, eerfhyg)
+                    pbqr = eerfhyg
+                ryfr:
+                    cevag '%f cne2 ercnve: fhpprrqrq (0)' % ynfg
+                    pbqr = 100
+            ryfr:
+                cevag '%f cne2 irevsl: snvyrq (%q)' % (ynfg, ierfhyg)
+                pbqr = ierfhyg
+        ryfr:
+            cevag '%f bx' % ynfg
+    ryvs abg bcg.trarengr be (cne2_bx naq abg cne2_rkvfgf):
+        terfhyg = tvg_irevsl(onfr)
+        vs terfhyg != 0:
+            cevag '%f tvg irevsl: snvyrq (%q)' % (ynfg, terfhyg)
+            pbqr = terfhyg
+        ryfr:
+            vs cne2_bx naq bcg.trarengr:
+                cerfhyg = cne2_trarengr(onfr)
+                vs cerfhyg != 0:
+                    cevag '%f cne2 perngr: snvyrq (%q)' % (ynfg, cerfhyg)
+                    pbqr = cerfhyg
+                ryfr:
+                    cevag '%f bx' % ynfg
+            ryfr:
+                cevag '%f bx' % ynfg
+    ryfr:
+        nffreg(bcg.trarengr naq (abg cne2_bx be cne2_rkvfgf))
+        qroht('    fxvccrq: cne2 svyr nyernql trarengrq.\a')
+    erghea pbqr
+
+
+bcgfcrp = """
+ohc sfpx [bcgvbaf...] [svyranzrf...]
 --
-r,repair    attempt to repair errors using par2 (dangerous!)
-g,generate  generate auto-repair information using par2
-v,verbose   increase verbosity (can be used more than once)
-quick       just check pack sha1sum, don't use git verify-pack
-j,jobs=     run 'n' jobs in parallel
-par2-ok     immediately return 0 if par2 is ok, 1 if not
-disable-par2  ignore par2 even if it is available
+e,ercnve    nggrzcg gb ercnve reebef hfvat cne2 (qnatrebhf!)
+t,trarengr  trarengr nhgb-ercnve vasbezngvba hfvat cne2
+i,ireobfr   vapernfr ireobfvgl (pna or hfrq zber guna bapr)
+dhvpx       whfg purpx cnpx fun1fhz, qba'g hfr tvg irevsl-cnpx
+w,wbof=     eha 'a' wbof va cnenyyry
+cne2-bx     vzzrqvngryl erghea 0 vs cne2 vf bx, 1 vs abg
+qvfnoyr-cne2  vtaber cne2 rira vs vg vf ninvynoyr
 """
-o = options.Options('bup fsck', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-par2_setup()
-if opt.par2_ok:
-    if par2_ok:
-        sys.exit(0)  # 'true' in sh
-    else:
-        sys.exit(1)
-if opt.disable_par2:
-    par2_ok = 0
-
-git.check_repo_or_die()
-
-if not extra:
-    debug('fsck: No filenames given: checking all packs.\n')
-    extra = glob.glob(git.repo('objects/pack/*.pack'))
-
-code = 0
-count = 0
-outstanding = {}
-for name in extra:
-    if name.endswith('.pack'):
-        base = name[:-5]
-    elif name.endswith('.idx'):
-        base = name[:-4]
-    elif name.endswith('.par2'):
-        base = name[:-5]
-    elif os.path.exists(name + '.pack'):
-        base = name
-    else:
-        raise Exception('%s is not a pack file!' % name)
-    (dir,last) = os.path.split(base)
-    par2_exists = os.path.exists(base + '.par2')
-    if par2_exists and os.stat(base + '.par2').st_size == 0:
-        par2_exists = 0
-    sys.stdout.flush()
-    debug('fsck: checking %s (%s)\n
-          % (last, par2_ok and par2_exists and 'par2' or 'git'))
-    if not opt.verbose:
-        progress('fsck (%d/%d)\r' % (count, len(extra)))
+b = bcgvbaf.Bcgvbaf('ohc sfpx', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+cne2_frghc()
+vs bcg.cne2_bx:
+    vs cne2_bx:
+        flf.rkvg(0)  # 'gehr' va fu
+    ryfr:
+        flf.rkvg(1)
+vs bcg.qvfnoyr_cne2:
+    cne2_bx = 0
+
+tvg.purpx_ercb_be_qvr()
+
+vs abg rkgen:
+    qroht('sfpx: Ab svyranzrf tvira: purpxvat nyy cnpxf.\a')
+    rkgen = tybo.tybo(tvg.ercb('bowrpgf/cnpx/*.cnpx'))
+
+pbqr = 0
+pbhag = 0
+bhgfgnaqvat = {}
+sbe anzr va rkgen:
+    vs anzr.raqfjvgu('.cnpx'):
+        onfr = anzr[:-5]
+    ryvs anzr.raqfjvgu('.vqk'):
+        onfr = anzr[:-4]
+    ryvs anzr.raqfjvgu('.cne2'):
+        onfr = anzr[:-5]
+    ryvs bf.cngu.rkvfgf(anzr + '.cnpx'):
+        onfr = anzr
+    ryfr:
+        envfr Rkprcgvba('%f vf abg n cnpx svyr!' % anzr)
+    (qve,ynfg) = bf.cngu.fcyvg(onfr)
+    cne2_rkvfgf = bf.cngu.rkvfgf(onfr + '.cne2')
+    vs cne2_rkvfgf naq bf.fgng(onfr + '.cne2').fg_fvmr == 0:
+        cne2_rkvfgf = 0
+    flf.fgqbhg.syhfu()
+    qroht('sfpx: purpxvat %f (%f)\a
+          % (ynfg, cne2_bx naq cne2_rkvfgf naq 'cne2' be 'tvg'))
+    vs abg bcg.ireobfr:
+        cebterff('sfpx (%q/%q)\e' % (pbhag, yra(rkgen)))
     
-    if not opt.jobs:
-        nc = do_pack(base, last)
-        code = code or nc
-        count += 1
-    else:
-        while len(outstanding) >= opt.jobs:
-            (pid,nc) = os.wait()
-            nc >>= 8
-            if pid in outstanding:
-                del outstanding[pid]
-                code = code or nc
-                count += 1
-        pid = os.fork()
-        if pid:  # parent
-            outstanding[pid] = 1
-        else: # child
-            try:
-                sys.exit(do_pack(base, last))
-            except Exception, e:
-                log('exception: %r\n' % e)
-                sys.exit(99)
+    vs abg bcg.wbof:
+        ap = qb_cnpx(onfr, ynfg)
+        pbqr = pbqr be ap
+        pbhag += 1
+    ryfr:
+        juvyr yra(bhgfgnaqvat) >= bcg.wbof:
+            (cvq,ap) = bf.jnvg()
+            ap >>= 8
+            vs cvq va bhgfgnaqvat:
+                qry bhgfgnaqvat[cvq]
+                pbqr = pbqr be ap
+                pbhag += 1
+        cvq = bf.sbex()
+        vs cvq:  # cnerag
+            bhgfgnaqvat[cvq] = 1
+        ryfr: # puvyq
+            gel:
+                flf.rkvg(qb_cnpx(onfr, ynfg))
+            rkprcg Rkprcgvba, r:
+                ybt('rkprcgvba: %e\a' % r)
+                flf.rkvg(99)
                 
-while len(outstanding):
-    (pid,nc) = os.wait()
-    nc >>= 8
-    if pid in outstanding:
-        del outstanding[pid]
-        code = code or nc
-        count += 1
-    if not opt.verbose:
-        progress('fsck (%d/%d)\r' % (count, len(extra)))
-
-if not opt.verbose and istty:
-    log('fsck done.           \n')
-sys.exit(code)
-#!/usr/bin/env python
-import sys, os, struct, getopt, subprocess, signal
-from bup import options, ssh
-from bup.helpers import *
-
-optspec = """
-bup rbackup <hostname> index ...
-bup rbackup <hostname> save ...
-bup rbackup <hostname> split ...
+juvyr yra(bhgfgnaqvat):
+    (cvq,ap) = bf.jnvg()
+    ap >>= 8
+    vs cvq va bhgfgnaqvat:
+        qry bhgfgnaqvat[cvq]
+        pbqr = pbqr be ap
+        pbhag += 1
+    vs abg bcg.ireobfr:
+        cebterff('sfpx (%q/%q)\e' % (pbhag, yra(rkgen)))
+
+vs abg bcg.ireobfr naq vfggl:
+    ybt('sfpx qbar.           \a')
+flf.rkvg(pbqr)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgehpg, trgbcg, fhocebprff, fvtany
+sebz ohc vzcbeg bcgvbaf, ffu
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+ohc eonpxhc <ubfganzr> vaqrk ...
+ohc eonpxhc <ubfganzr> fnir ...
+ohc eonpxhc <ubfganzr> fcyvg ...
 """
-o = options.Options('bup rbackup', optspec, optfunc=getopt.getopt)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-if len(extra) < 2:
-    o.fatal('arguments expected')
-
-class SigException(Exception):
-    def __init__(self, signum):
-        self.signum = signum
-        Exception.__init__(self, 'signal %d received' % signum)
-def handler(signum, frame):
-    raise SigException(signum)
-
-signal.signal(signal.SIGTERM, handler)
-signal.signal(signal.SIGINT, handler)
-
-sp = None
-p = None
-ret = 99
-
-try:
-    hostname = extra[0]
-    argv = extra[1:]
-    p = ssh.connect(hostname, 'rbackup-server')
-
-    argvs = '\0'.join(['bup'] + argv)
-    p.stdin.write(struct.pack('!I', len(argvs)) + argvs)
-    p.stdin.flush()
-
-    main_exe = os.environ.get('BUP_MAIN_EXE') or sys.argv[0]
-    sp = subprocess.Popen([main_exe, 'server'], stdin=p.stdout, stdout=p.stdin)
-
-    p.stdin.close()
-    p.stdout.close()
-
-finally:
-    while 1:
-        # if we get a signal while waiting, we have to keep waiting, just
-        # in case our child doesn't die.
-        try:
-            ret = p.wait()
-            sp.wait()
-            break
-        except SigException, e:
-            log('\nbup rbackup: %s\n' % e)
-            os.kill(p.pid, e.signum)
-            ret = 84
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, os, re
-from bup import options
-
-optspec = """
-bup newliner
+b = bcgvbaf.Bcgvbaf('ohc eonpxhc', bcgfcrp, bcgshap=trgbcg.trgbcg)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+vs yra(rkgen) < 2:
+    b.sngny('nethzragf rkcrpgrq')
+
+pynff FvtRkprcgvba(Rkprcgvba):
+    qrs __vavg__(frys, fvtahz):
+        frys.fvtahz = fvtahz
+        Rkprcgvba.__vavg__(frys, 'fvtany %q erprvirq' % fvtahz)
+qrs unaqyre(fvtahz, senzr):
+    envfr FvtRkprcgvba(fvtahz)
+
+fvtany.fvtany(fvtany.FVTGREZ, unaqyre)
+fvtany.fvtany(fvtany.FVTVAG, unaqyre)
+
+fc = Abar
+c = Abar
+erg = 99
+
+gel:
+    ubfganzr = rkgen[0]
+    neti = rkgen[1:]
+    c = ffu.pbaarpg(ubfganzr, 'eonpxhc-freire')
+
+    netif = '\0'.wbva(['ohc'] + neti)
+    c.fgqva.jevgr(fgehpg.cnpx('!V', yra(netif)) + netif)
+    c.fgqva.syhfu()
+
+    znva_rkr = bf.raiveba.trg('OHC_ZNVA_RKR') be flf.neti[0]
+    fc = fhocebprff.Cbcra([znva_rkr, 'freire'], fgqva=c.fgqbhg, fgqbhg=c.fgqva)
+
+    c.fgqva.pybfr()
+    c.fgqbhg.pybfr()
+
+svanyyl:
+    juvyr 1:
+        # vs jr trg n fvtany juvyr jnvgvat, jr unir gb xrrc jnvgvat, whfg
+        # va pnfr bhe puvyq qbrfa'g qvr.
+        gel:
+            erg = c.jnvg()
+            fc.jnvg()
+            oernx
+        rkprcg FvtRkprcgvba, r:
+            ybt('\aohc eonpxhc: %f\a' % r)
+            bf.xvyy(c.cvq, r.fvtahz)
+            erg = 84
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, er
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc arjyvare
 """
-o = options.Options('bup newliner', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-r = re.compile(r'([\r\n])')
-lastlen = 0
-all = ''
-while 1:
-    l = r.split(all, 1)
-    if len(l) <= 1:
-        try:
-            b = os.read(sys.stdin.fileno(), 4096)
-        except KeyboardInterrupt:
-            break
-        if not b:
-            break
-        all += b
-    else:
-        assert(len(l) == 3)
-        (line, splitchar, all) = l
-        #splitchar = '\n'
-        sys.stdout.write('%-*s%s' % (lastlen, line, splitchar))
-        if splitchar == '\r':
-            lastlen = len(line)
-        else:
-            lastlen = 0
-        sys.stdout.flush()
-
-if lastlen or all:
-    sys.stdout.write('%-*s\n' % (lastlen, all))
-#!/usr/bin/env python
-import sys
-from bup import options, git, _hashsplit
-from bup.helpers import *
-
-
-optspec = """
-bup margin
+b = bcgvbaf.Bcgvbaf('ohc arjyvare', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+e = er.pbzcvyr(e'([\e\a])')
+ynfgyra = 0
+nyy = ''
+juvyr 1:
+    y = e.fcyvg(nyy, 1)
+    vs yra(y) <= 1:
+        gel:
+            o = bf.ernq(flf.fgqva.svyrab(), 4096)
+        rkprcg XrlobneqVagreehcg:
+            oernx
+        vs abg o:
+            oernx
+        nyy += o
+    ryfr:
+        nffreg(yra(y) == 3)
+        (yvar, fcyvgpune, nyy) = y
+        #fcyvgpune = '\a'
+        flf.fgqbhg.jevgr('%-*f%f' % (ynfgyra, yvar, fcyvgpune))
+        vs fcyvgpune == '\e':
+            ynfgyra = yra(yvar)
+        ryfr:
+            ynfgyra = 0
+        flf.fgqbhg.syhfu()
+
+vs ynfgyra be nyy:
+    flf.fgqbhg.jevgr('%-*f\a' % (ynfgyra, nyy))
+#!/hfe/ova/rai clguba
+vzcbeg flf
+sebz ohc vzcbeg bcgvbaf, tvg, _unfufcyvg
+sebz ohc.urycref vzcbeg *
+
+
+bcgfcrp = """
+ohc znetva
 """
-o = options.Options('bup margin', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-git.check_repo_or_die()
-#git.ignore_midx = 1
-
-mi = git.PackIdxList(git.repo('objects/pack'))
-last = '\0'*20
-longmatch = 0
-for i in mi:
-    if i == last:
-        continue
-    #assert(str(i) >= last)
-    pm = _hashsplit.bitmatch(last, i)
-    longmatch = max(longmatch, pm)
-    last = i
-print longmatch
-#!/usr/bin/env python
-from bup import options, drecurse
-from bup.helpers import *
-
-optspec = """
-bup drecurse <path>
+b = bcgvbaf.Bcgvbaf('ohc znetva', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+tvg.purpx_ercb_be_qvr()
+#tvg.vtaber_zvqk = 1
+
+zv = tvg.CnpxVqkYvfg(tvg.ercb('bowrpgf/cnpx'))
+ynfg = '\0'*20
+ybatzngpu = 0
+sbe v va zv:
+    vs v == ynfg:
+        pbagvahr
+    #nffreg(fge(v) >= ynfg)
+    cz = _unfufcyvg.ovgzngpu(ynfg, v)
+    ybatzngpu = znk(ybatzngpu, cz)
+    ynfg = v
+cevag ybatzngpu
+#!/hfe/ova/rai clguba
+sebz ohc vzcbeg bcgvbaf, qerphefr
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+ohc qerphefr <cngu>
 --
-x,xdev,one-file-system   don't cross filesystem boundaries
-q,quiet  don't actually print filenames
-profile  run under the python profiler
+k,kqri,bar-svyr-flfgrz   qba'g pebff svyrflfgrz obhaqnevrf
+d,dhvrg  qba'g npghnyyl cevag svyranzrf
+cebsvyr  eha haqre gur clguba cebsvyre
 """
-o = options.Options('bup drecurse', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one filename expected")
-
-it = drecurse.recursive_dirlist(extra, opt.xdev)
-if opt.profile:
-    import cProfile
-    def do_it():
-        for i in it:
-            pass
-    cProfile.run('do_it()')
-else:
-    if opt.quiet:
-        for i in it:
-            pass
-    else:
-        for (name,st) in it:
-            print name
-
-if saved_errors:
-    log('WARNING: %d errors encountered.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, time, struct
-from bup import hashsplit, git, options, client
-from bup.helpers import *
-from subprocess import PIPE
-
-
-optspec = """
-bup split [-tcb] [-n name] [--bench] [filenames...]
+b = bcgvbaf.Bcgvbaf('ohc qerphefr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar svyranzr rkcrpgrq")
+
+vg = qerphefr.erphefvir_qveyvfg(rkgen, bcg.kqri)
+vs bcg.cebsvyr:
+    vzcbeg pCebsvyr
+    qrs qb_vg():
+        sbe v va vg:
+            cnff
+    pCebsvyr.eha('qb_vg()')
+ryfr:
+    vs bcg.dhvrg:
+        sbe v va vg:
+            cnff
+    ryfr:
+        sbe (anzr,fg) va vg:
+            cevag anzr
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr, fgehpg
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+sebz fhocebprff vzcbeg CVCR
+
+
+bcgfcrp = """
+ohc fcyvg [-gpo] [-a anzr] [--orapu] [svyranzrf...]
 --
-r,remote=  remote repository path
-b,blobs    output a series of blob ids
-t,tree     output a tree id
-c,commit   output a commit id
-n,name=    name of backup set to update (if any)
-N,noop     don't actually save the data anywhere
-q,quiet    don't print progress messages
-v,verbose  increase log output (can be used more than once)
-copy       just copy input to output, hashsplitting along the way
-bench      print benchmark timings to stderr
-max-pack-size=  maximum bytes in a single pack
-max-pack-objects=  maximum number of objects in a single pack
-fanout=  maximum number of blobs in a single tree
+e,erzbgr=  erzbgr ercbfvgbel cngu
+o,oybof    bhgchg n frevrf bs oybo vqf
+g,gerr     bhgchg n gerr vq
+p,pbzzvg   bhgchg n pbzzvg vq
+a,anzr=    anzr bs onpxhc frg gb hcqngr (vs nal)
+A,abbc     qba'g npghnyyl fnir gur qngn naljurer
+d,dhvrg    qba'g cevag cebterff zrffntrf
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
+pbcl       whfg pbcl vachg gb bhgchg, unfufcyvggvat nybat gur jnl
+orapu      cevag orapuznex gvzvatf gb fgqree
+znk-cnpx-fvmr=  znkvzhz olgrf va n fvatyr cnpx
+znk-cnpx-bowrpgf=  znkvzhz ahzore bs bowrpgf va n fvatyr cnpx
+snabhg=  znkvzhz ahzore bs oybof va n fvatyr gerr
 """
-o = options.Options('bup split', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-if not (opt.blobs or opt.tree or opt.commit or opt.name or
-        opt.noop or opt.copy):
-    o.fatal("use one or more of -b, -t, -c, -n, -N, --copy")
-if (opt.noop or opt.copy) and (opt.blobs or opt.tree or 
-                               opt.commit or opt.name):
-    o.fatal('-N is incompatible with -b, -t, -c, -n')
-
-if opt.verbose >= 2:
-    git.verbose = opt.verbose - 1
-    opt.bench = 1
-if opt.max_pack_size:
-    hashsplit.max_pack_size = parse_num(opt.max_pack_size)
-if opt.max_pack_objects:
-    hashsplit.max_pack_objects = parse_num(opt.max_pack_objects)
-if opt.fanout:
-    hashsplit.fanout = parse_num(opt.fanout)
-if opt.blobs:
-    hashsplit.fanout = 0
-
-is_reverse = os.environ.get('BUP_SERVER_REVERSE')
-if is_reverse and opt.remote:
-    o.fatal("don't use -r in reverse mode; it's automatic")
-start_time = time.time()
-
-refname = opt.name and 'refs/heads/%s' % opt.name or None
-if opt.noop or opt.copy:
-    cli = w = oldref = None
-elif opt.remote or is_reverse:
-    cli = client.Client(opt.remote)
-    oldref = refname and cli.read_ref(refname) or None
-    w = cli.new_packwriter()
-else:
-    cli = None
-    oldref = refname and git.read_ref(refname) or None
-    w = git.PackWriter()
-
-files = extra and (open(fn) for fn in extra) or [sys.stdin]
-if w:
-    shalist = hashsplit.split_to_shalist(w, files)
-    tree = w.new_tree(shalist)
-else:
-    last = 0
-    for (blob, bits) in hashsplit.hashsplit_iter(files):
-        hashsplit.total_split += len(blob)
-        if opt.copy:
-            sys.stdout.write(str(blob))
-        megs = hashsplit.total_split/1024/1024
-        if not opt.quiet and last != megs:
-            progress('%d Mbytes read\r' % megs)
-            last = megs
-    progress('%d Mbytes read, done.\n' % megs)
-
-if opt.verbose:
-    log('\n')
-if opt.blobs:
-    for (mode,name,bin) in shalist:
-        print bin.encode('hex')
-if opt.tree:
-    print tree.encode('hex')
-if opt.commit or opt.name:
-    msg = 'bup split\n\nGenerated by command:\n%r' % sys.argv
-    ref = opt.name and ('refs/heads/%s' % opt.name) or None
-    commit = w.new_commit(oldref, tree, msg)
-    if opt.commit:
-        print commit.encode('hex')
-
-if w:
-    w.close()  # must close before we can update the ref
+b = bcgvbaf.Bcgvbaf('ohc fcyvg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+vs abg (bcg.oybof be bcg.gerr be bcg.pbzzvg be bcg.anzr be
+        bcg.abbc be bcg.pbcl):
+    b.sngny("hfr bar be zber bs -o, -g, -p, -a, -A, --pbcl")
+vs (bcg.abbc be bcg.pbcl) naq (bcg.oybof be bcg.gerr be 
+                               bcg.pbzzvg be bcg.anzr):
+    b.sngny('-A vf vapbzcngvoyr jvgu -o, -g, -p, -a')
+
+vs bcg.ireobfr >= 2:
+    tvg.ireobfr = bcg.ireobfr - 1
+    bcg.orapu = 1
+vs bcg.znk_cnpx_fvmr:
+    unfufcyvg.znk_cnpx_fvmr = cnefr_ahz(bcg.znk_cnpx_fvmr)
+vs bcg.znk_cnpx_bowrpgf:
+    unfufcyvg.znk_cnpx_bowrpgf = cnefr_ahz(bcg.znk_cnpx_bowrpgf)
+vs bcg.snabhg:
+    unfufcyvg.snabhg = cnefr_ahz(bcg.snabhg)
+vs bcg.oybof:
+    unfufcyvg.snabhg = 0
+
+vf_erirefr = bf.raiveba.trg('OHC_FREIRE_ERIREFR')
+vs vf_erirefr naq bcg.erzbgr:
+    b.sngny("qba'g hfr -e va erirefr zbqr; vg'f nhgbzngvp")
+fgneg_gvzr = gvzr.gvzr()
+
+ersanzr = bcg.anzr naq 'ersf/urnqf/%f' % bcg.anzr be Abar
+vs bcg.abbc be bcg.pbcl:
+    pyv = j = byqers = Abar
+ryvs bcg.erzbgr be vf_erirefr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    byqers = ersanzr naq pyv.ernq_ers(ersanzr) be Abar
+    j = pyv.arj_cnpxjevgre()
+ryfr:
+    pyv = Abar
+    byqers = ersanzr naq tvg.ernq_ers(ersanzr) be Abar
+    j = tvg.CnpxJevgre()
+
+svyrf = rkgen naq (bcra(sa) sbe sa va rkgen) be [flf.fgqva]
+vs j:
+    funyvfg = unfufcyvg.fcyvg_gb_funyvfg(j, svyrf)
+    gerr = j.arj_gerr(funyvfg)
+ryfr:
+    ynfg = 0
+    sbe (oybo, ovgf) va unfufcyvg.unfufcyvg_vgre(svyrf):
+        unfufcyvg.gbgny_fcyvg += yra(oybo)
+        vs bcg.pbcl:
+            flf.fgqbhg.jevgr(fge(oybo))
+        zrtf = unfufcyvg.gbgny_fcyvg/1024/1024
+        vs abg bcg.dhvrg naq ynfg != zrtf:
+            cebterff('%q Zolgrf ernq\e' % zrtf)
+            ynfg = zrtf
+    cebterff('%q Zolgrf ernq, qbar.\a' % zrtf)
+
+vs bcg.ireobfr:
+    ybt('\a')
+vs bcg.oybof:
+    sbe (zbqr,anzr,ova) va funyvfg:
+        cevag ova.rapbqr('urk')
+vs bcg.gerr:
+    cevag gerr.rapbqr('urk')
+vs bcg.pbzzvg be bcg.anzr:
+    zft = 'ohc fcyvg\a\aTrarengrq ol pbzznaq:\a%e' % flf.neti
+    ers = bcg.anzr naq ('ersf/urnqf/%f' % bcg.anzr) be Abar
+    pbzzvg = j.arj_pbzzvg(byqers, gerr, zft)
+    vs bcg.pbzzvg:
+        cevag pbzzvg.rapbqr('urk')
+
+vs j:
+    j.pybfr()  # zhfg pybfr orsber jr pna hcqngr gur ers
         
-if opt.name:
-    if cli:
-        cli.update_ref(refname, commit, oldref)
-    else:
-        git.update_ref(refname, commit, oldref)
-
-if cli:
-    cli.close()
-
-secs = time.time() - start_time
-size = hashsplit.total_split
-if opt.bench:
-    log('\nbup: %.2fkbytes in %.2f secs = %.2f kbytes/sec\n'
-        % (size/1024., secs, size/1024./secs))
-#!/usr/bin/env python
-import sys, re, struct, mmap
-from bup import git, options
-from bup.helpers import *
-
-
-def s_from_bytes(bytes):
-    clist = [chr(b) for b in bytes]
-    return ''.join(clist)
-
-
-def report(count):
-    fields = ['VmSize', 'VmRSS', 'VmData', 'VmStk']
-    d = {}
-    for line in open('/proc/self/status').readlines():
-        l = re.split(r':\s*', line.strip(), 1)
-        d[l[0]] = l[1]
-    if count >= 0:
-        e1 = count
-        fields = [d[k] for k in fields]
-    else:
-        e1 = ''
-    print ('%9s  ' + ('%10s ' * len(fields))) % tuple([e1] + fields)
-    sys.stdout.flush()
-
-
-optspec = """
-bup memtest [-n elements] [-c cycles]
+vs bcg.anzr:
+    vs pyv:
+        pyv.hcqngr_ers(ersanzr, pbzzvg, byqers)
+    ryfr:
+        tvg.hcqngr_ers(ersanzr, pbzzvg, byqers)
+
+vs pyv:
+    pyv.pybfr()
+
+frpf = gvzr.gvzr() - fgneg_gvzr
+fvmr = unfufcyvg.gbgny_fcyvg
+vs bcg.orapu:
+    ybt('\aohc: %.2sxolgrf va %.2s frpf = %.2s xolgrf/frp\a'
+        % (fvmr/1024., frpf, fvmr/1024./frpf))
+#!/hfe/ova/rai clguba
+vzcbeg flf, er, fgehpg, zznc
+sebz ohc vzcbeg tvg, bcgvbaf
+sebz ohc.urycref vzcbeg *
+
+
+qrs f_sebz_olgrf(olgrf):
+    pyvfg = [pue(o) sbe o va olgrf]
+    erghea ''.wbva(pyvfg)
+
+
+qrs ercbeg(pbhag):
+    svryqf = ['IzFvmr', 'IzEFF', 'IzQngn', 'IzFgx']
+    q = {}
+    sbe yvar va bcra('/cebp/frys/fgnghf').ernqyvarf():
+        y = er.fcyvg(e':\f*', yvar.fgevc(), 1)
+        q[y[0]] = y[1]
+    vs pbhag >= 0:
+        r1 = pbhag
+        svryqf = [q[x] sbe x va svryqf]
+    ryfr:
+        r1 = ''
+    cevag ('%9f  ' + ('%10f ' * yra(svryqf))) % ghcyr([r1] + svryqf)
+    flf.fgqbhg.syhfu()
+
+
+bcgfcrp = """
+ohc zrzgrfg [-a ryrzragf] [-p plpyrf]
 --
-n,number=  number of objects per cycle
-c,cycles=  number of cycles to run
-ignore-midx  ignore .midx files, use only .idx files
+a,ahzore=  ahzore bs bowrpgf cre plpyr
+p,plpyrf=  ahzore bs plpyrf gb eha
+vtaber-zvqk  vtaber .zvqk svyrf, hfr bayl .vqk svyrf
 """
-o = options.Options('bup memtest', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal('no arguments expected')
-
-git.ignore_midx = opt.ignore_midx
-
-git.check_repo_or_die()
-m = git.PackIdxList(git.repo('objects/pack'))
-
-cycles = opt.cycles or 100
-number = opt.number or 10000
-
-report(-1)
-f = open('/dev/urandom')
-a = mmap.mmap(-1, 20)
-report(0)
-for c in xrange(cycles):
-    for n in xrange(number):
-        b = f.read(3)
-        if 0:
-            bytes = list(struct.unpack('!BBB', b)) + [0]*17
-            bytes[2] &= 0xf0
-            bin = struct.pack('!20s', s_from_bytes(bytes))
-        else:
-            a[0:2] = b[0:2]
-            a[2] = chr(ord(b[2]) & 0xf0)
-            bin = str(a[0:20])
-        #print bin.encode('hex')
-        m.exists(bin)
-    report((c+1)*number)
-#!/usr/bin/env python
-import sys, os, stat
-from bup import options, git, vfs
-from bup.helpers import *
-
-def print_node(text, n):
-    prefix = ''
-    if opt.hash:
-        prefix += "%s " % n.hash.encode('hex')
-    if stat.S_ISDIR(n.mode):
-        print '%s%s/' % (prefix, text)
-    elif stat.S_ISLNK(n.mode):
-        print '%s%s@' % (prefix, text)
-    else:
-        print '%s%s' % (prefix, text)
-
-
-optspec = """
-bup ls <dirs...>
+b = bcgvbaf.Bcgvbaf('ohc zrzgrfg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+tvg.vtaber_zvqk = bcg.vtaber_zvqk
+
+tvg.purpx_ercb_be_qvr()
+z = tvg.CnpxVqkYvfg(tvg.ercb('bowrpgf/cnpx'))
+
+plpyrf = bcg.plpyrf be 100
+ahzore = bcg.ahzore be 10000
+
+ercbeg(-1)
+s = bcra('/qri/henaqbz')
+n = zznc.zznc(-1, 20)
+ercbeg(0)
+sbe p va kenatr(plpyrf):
+    sbe a va kenatr(ahzore):
+        o = s.ernq(3)
+        vs 0:
+            olgrf = yvfg(fgehpg.hacnpx('!OOO', o)) + [0]*17
+            olgrf[2] &= 0ks0
+            ova = fgehpg.cnpx('!20f', f_sebz_olgrf(olgrf))
+        ryfr:
+            n[0:2] = o[0:2]
+            n[2] = pue(beq(o[2]) & 0ks0)
+            ova = fge(n[0:20])
+        #cevag ova.rapbqr('urk')
+        z.rkvfgf(ova)
+    ercbeg((p+1)*ahzore)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgng
+sebz ohc vzcbeg bcgvbaf, tvg, isf
+sebz ohc.urycref vzcbeg *
+
+qrs cevag_abqr(grkg, a):
+    cersvk = ''
+    vs bcg.unfu:
+        cersvk += "%f " % a.unfu.rapbqr('urk')
+    vs fgng.F_VFQVE(a.zbqr):
+        cevag '%f%f/' % (cersvk, grkg)
+    ryvs fgng.F_VFYAX(a.zbqr):
+        cevag '%f%f@' % (cersvk, grkg)
+    ryfr:
+        cevag '%f%f' % (cersvk, grkg)
+
+
+bcgfcrp = """
+ohc yf <qvef...>
 --
-s,hash   show hash for each file
+f,unfu   fubj unfu sbe rnpu svyr
 """
-o = options.Options('bup ls', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-top = vfs.RefList(None)
-
-if not extra:
-    extra = ['/']
-
-ret = 0
-for d in extra:
-    try:
-        n = top.lresolve(d)
-        if stat.S_ISDIR(n.mode):
-            for sub in n:
-                print_node(sub.name, sub)
-        else:
-            print_node(d, n)
-    except vfs.NodeError, e:
-        log('error: %s\n' % e)
-        ret = 1
-
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, os, re, stat, readline, fnmatch
-from bup import options, git, shquote, vfs
-from bup.helpers import *
-
-def node_name(text, n):
-    if stat.S_ISDIR(n.mode):
-        return '%s/' % text
-    elif stat.S_ISLNK(n.mode):
-        return '%s@' % text
-    else:
-        return '%s' % text
-
-
-def do_ls(path, n):
-    l = []
-    if stat.S_ISDIR(n.mode):
-        for sub in n:
-            l.append(node_name(sub.name, sub))
-    else:
-        l.append(node_name(path, n))
-    print columnate(l, '')
+b = bcgvbaf.Bcgvbaf('ohc yf', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+gbc = isf.ErsYvfg(Abar)
+
+vs abg rkgen:
+    rkgen = ['/']
+
+erg = 0
+sbe q va rkgen:
+    gel:
+        a = gbc.yerfbyir(q)
+        vs fgng.F_VFQVE(a.zbqr):
+            sbe fho va a:
+                cevag_abqr(fho.anzr, fho)
+        ryfr:
+            cevag_abqr(q, a)
+    rkprcg isf.AbqrReebe, r:
+        ybt('reebe: %f\a' % r)
+        erg = 1
+
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, er, fgng, ernqyvar, sazngpu
+sebz ohc vzcbeg bcgvbaf, tvg, fudhbgr, isf
+sebz ohc.urycref vzcbeg *
+
+qrs abqr_anzr(grkg, a):
+    vs fgng.F_VFQVE(a.zbqr):
+        erghea '%f/' % grkg
+    ryvs fgng.F_VFYAX(a.zbqr):
+        erghea '%f@' % grkg
+    ryfr:
+        erghea '%f' % grkg
+
+
+qrs qb_yf(cngu, a):
+    y = []
+    vs fgng.F_VFQVE(a.zbqr):
+        sbe fho va a:
+            y.nccraq(abqr_anzr(fho.anzr, fho))
+    ryfr:
+        y.nccraq(abqr_anzr(cngu, a))
+    cevag pbyhzangr(y, '')
     
 
-def write_to_file(inf, outf):
-    for blob in chunkyreader(inf):
-        outf.write(blob)
+qrs jevgr_gb_svyr(vas, bhgs):
+    sbe oybo va puhaxlernqre(vas):
+        bhgs.jevgr(oybo)
     
 
-def inputiter():
-    if os.isatty(sys.stdin.fileno()):
-        while 1:
-            try:
-                yield raw_input('bup> ')
-            except EOFError:
-                break
-    else:
-        for line in sys.stdin:
-            yield line
-
-
-def _completer_get_subs(line):
-    (qtype, lastword) = shquote.unfinished_word(line)
-    (dir,name) = os.path.split(lastword)
-    #log('\ncompleter: %r %r %r\n' % (qtype, lastword, text))
-    n = pwd.resolve(dir)
-    subs = list(filter(lambda x: x.name.startswith(name),
-                       n.subs()))
-    return (dir, name, qtype, lastword, subs)
-
-
-_last_line = None
-_last_res = None
-def completer(text, state):
-    global _last_line
-    global _last_res
-    try:
-        line = readline.get_line_buffer()[:readline.get_endidx()]
-        if _last_line != line:
-            _last_res = _completer_get_subs(line)
-            _last_line = line
-        (dir, name, qtype, lastword, subs) = _last_res
-        if state < len(subs):
-            sn = subs[state]
-            sn1 = sn.resolve('')  # deref symlinks
-            fullname = os.path.join(dir, sn.name)
-            if stat.S_ISDIR(sn1.mode):
-                ret = shquote.what_to_add(qtype, lastword, fullname+'/',
-                                          terminate=False)
-            else:
-                ret = shquote.what_to_add(qtype, lastword, fullname,
-                                          terminate=True) + ' '
-            return text + ret
-    except Exception, e:
-        log('\nerror in completion: %s\n' % e)
+qrs vachgvgre():
+    vs bf.vfnggl(flf.fgqva.svyrab()):
+        juvyr 1:
+            gel:
+                lvryq enj_vachg('ohc> ')
+            rkprcg RBSReebe:
+                oernx
+    ryfr:
+        sbe yvar va flf.fgqva:
+            lvryq yvar
+
+
+qrs _pbzcyrgre_trg_fhof(yvar):
+    (dglcr, ynfgjbeq) = fudhbgr.hasvavfurq_jbeq(yvar)
+    (qve,anzr) = bf.cngu.fcyvg(ynfgjbeq)
+    #ybt('\apbzcyrgre: %e %e %e\a' % (dglcr, ynfgjbeq, grkg))
+    a = cjq.erfbyir(qve)
+    fhof = yvfg(svygre(ynzoqn k: k.anzr.fgnegfjvgu(anzr),
+                       a.fhof()))
+    erghea (qve, anzr, dglcr, ynfgjbeq, fhof)
+
+
+_ynfg_yvar = Abar
+_ynfg_erf = Abar
+qrs pbzcyrgre(grkg, fgngr):
+    tybony _ynfg_yvar
+    tybony _ynfg_erf
+    gel:
+        yvar = ernqyvar.trg_yvar_ohssre()[:ernqyvar.trg_raqvqk()]
+        vs _ynfg_yvar != yvar:
+            _ynfg_erf = _pbzcyrgre_trg_fhof(yvar)
+            _ynfg_yvar = yvar
+        (qve, anzr, dglcr, ynfgjbeq, fhof) = _ynfg_erf
+        vs fgngr < yra(fhof):
+            fa = fhof[fgngr]
+            fa1 = fa.erfbyir('')  # qrers flzyvaxf
+            shyyanzr = bf.cngu.wbva(qve, fa.anzr)
+            vs fgng.F_VFQVE(fa1.zbqr):
+                erg = fudhbgr.jung_gb_nqq(dglcr, ynfgjbeq, shyyanzr+'/',
+                                          grezvangr=Snyfr)
+            ryfr:
+                erg = fudhbgr.jung_gb_nqq(dglcr, ynfgjbeq, shyyanzr,
+                                          grezvangr=Gehr) + ' '
+            erghea grkg + erg
+    rkprcg Rkprcgvba, r:
+        ybt('\areebe va pbzcyrgvba: %f\a' % r)
 
             
-optspec = """
-bup ftp
+bcgfcrp = """
+ohc sgc
 """
-o = options.Options('bup ftp', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-
-top = vfs.RefList(None)
-pwd = top
-
-if extra:
-    lines = extra
-else:
-    readline.set_completer_delims(' \t\n\r/')
-    readline.set_completer(completer)
-    readline.parse_and_bind("tab: complete")
-    lines = inputiter()
-
-for line in lines:
-    if not line.strip():
-        continue
-    words = [word for (wordstart,word) in shquote.quotesplit(line)]
-    cmd = words[0].lower()
-    #log('execute: %r %r\n' % (cmd, parm))
-    try:
-        if cmd == 'ls':
-            for parm in (words[1:] or ['.']):
-                do_ls(parm, pwd.resolve(parm))
-        elif cmd == 'cd':
-            for parm in words[1:]:
-                pwd = pwd.resolve(parm)
-        elif cmd == 'pwd':
-            print pwd.fullname()
-        elif cmd == 'cat':
-            for parm in words[1:]:
-                write_to_file(pwd.resolve(parm).open(), sys.stdout)
-        elif cmd == 'get':
-            if len(words) not in [2,3]:
-                raise Exception('Usage: get <filename> [localname]')
-            rname = words[1]
-            (dir,base) = os.path.split(rname)
-            lname = len(words)>2 and words[2] or base
-            inf = pwd.resolve(rname).open()
-            log('Saving %r\n' % lname)
-            write_to_file(inf, open(lname, 'wb'))
-        elif cmd == 'mget':
-            for parm in words[1:]:
-                (dir,base) = os.path.split(parm)
-                for n in pwd.resolve(dir).subs():
-                    if fnmatch.fnmatch(n.name, base):
-                        try:
-                            log('Saving %r\n' % n.name)
-                            inf = n.open()
-                            outf = open(n.name, 'wb')
-                            write_to_file(inf, outf)
-                            outf.close()
-                        except Exception, e:
-                            log('  error: %s\n' % e)
-        elif cmd == 'help' or cmd == '?':
-            log('Commands: ls cd pwd cat get mget help quit\n')
-        elif cmd == 'quit' or cmd == 'exit' or cmd == 'bye':
-            break
-        else:
-            raise Exception('no such command %r' % cmd)
-    except Exception, e:
-        log('error: %s\n' % e)
-        #raise
-#!/usr/bin/env python
-import sys, mmap
-from bup import options, _hashsplit
-from bup.helpers import *
-
-optspec = """
-bup random [-S seed] <numbytes>
+b = bcgvbaf.Bcgvbaf('ohc sgc', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+
+gbc = isf.ErsYvfg(Abar)
+cjq = gbc
+
+vs rkgen:
+    yvarf = rkgen
+ryfr:
+    ernqyvar.frg_pbzcyrgre_qryvzf(' \g\a\e/')
+    ernqyvar.frg_pbzcyrgre(pbzcyrgre)
+    ernqyvar.cnefr_naq_ovaq("gno: pbzcyrgr")
+    yvarf = vachgvgre()
+
+sbe yvar va yvarf:
+    vs abg yvar.fgevc():
+        pbagvahr
+    jbeqf = [jbeq sbe (jbeqfgneg,jbeq) va fudhbgr.dhbgrfcyvg(yvar)]
+    pzq = jbeqf[0].ybjre()
+    #ybt('rkrphgr: %e %e\a' % (pzq, cnez))
+    gel:
+        vs pzq == 'yf':
+            sbe cnez va (jbeqf[1:] be ['.']):
+                qb_yf(cnez, cjq.erfbyir(cnez))
+        ryvs pzq == 'pq':
+            sbe cnez va jbeqf[1:]:
+                cjq = cjq.erfbyir(cnez)
+        ryvs pzq == 'cjq':
+            cevag cjq.shyyanzr()
+        ryvs pzq == 'png':
+            sbe cnez va jbeqf[1:]:
+                jevgr_gb_svyr(cjq.erfbyir(cnez).bcra(), flf.fgqbhg)
+        ryvs pzq == 'trg':
+            vs yra(jbeqf) abg va [2,3]:
+                envfr Rkprcgvba('Hfntr: trg <svyranzr> [ybpnyanzr]')
+            eanzr = jbeqf[1]
+            (qve,onfr) = bf.cngu.fcyvg(eanzr)
+            yanzr = yra(jbeqf)>2 naq jbeqf[2] be onfr
+            vas = cjq.erfbyir(eanzr).bcra()
+            ybt('Fnivat %e\a' % yanzr)
+            jevgr_gb_svyr(vas, bcra(yanzr, 'jo'))
+        ryvs pzq == 'ztrg':
+            sbe cnez va jbeqf[1:]:
+                (qve,onfr) = bf.cngu.fcyvg(cnez)
+                sbe a va cjq.erfbyir(qve).fhof():
+                    vs sazngpu.sazngpu(a.anzr, onfr):
+                        gel:
+                            ybt('Fnivat %e\a' % a.anzr)
+                            vas = a.bcra()
+                            bhgs = bcra(a.anzr, 'jo')
+                            jevgr_gb_svyr(vas, bhgs)
+                            bhgs.pybfr()
+                        rkprcg Rkprcgvba, r:
+                            ybt('  reebe: %f\a' % r)
+        ryvs pzq == 'uryc' be pzq == '?':
+            ybt('Pbzznaqf: yf pq cjq png trg ztrg uryc dhvg\a')
+        ryvs pzq == 'dhvg' be pzq == 'rkvg' be pzq == 'olr':
+            oernx
+        ryfr:
+            envfr Rkprcgvba('ab fhpu pbzznaq %e' % pzq)
+    rkprcg Rkprcgvba, r:
+        ybt('reebe: %f\a' % r)
+        #envfr
+#!/hfe/ova/rai clguba
+vzcbeg flf, zznc
+sebz ohc vzcbeg bcgvbaf, _unfufcyvg
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+ohc enaqbz [-F frrq] <ahzolgrf>
 --
-S,seed=   optional random number seed (default 1)
-f,force   print random data to stdout even if it's a tty
+F,frrq=   bcgvbany enaqbz ahzore frrq (qrsnhyg 1)
+s,sbepr   cevag enaqbz qngn gb fgqbhg rira vs vg'f n ggl
 """
-o = options.Options('bup random', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one argument expected")
-
-total = parse_num(extra[0])
-
-if opt.force or (not os.isatty(1) and
-                 not atoi(os.environ.get('BUP_FORCE_TTY')) & 1):
-    _hashsplit.write_random(sys.stdout.fileno(), total, opt.seed or 0)
-else:
-    log('error: not writing binary data to a terminal. Use -f to force.\n')
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, os, glob
-from bup import options
-
-optspec = """
-bup help <command>
+b = bcgvbaf.Bcgvbaf('ohc enaqbz', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar nethzrag rkcrpgrq")
+
+gbgny = cnefr_ahz(rkgen[0])
+
+vs bcg.sbepr be (abg bf.vfnggl(1) naq
+                 abg ngbv(bf.raiveba.trg('OHC_SBEPR_GGL')) & 1):
+    _unfufcyvg.jevgr_enaqbz(flf.fgqbhg.svyrab(), gbgny, bcg.frrq be 0)
+ryfr:
+    ybt('reebe: abg jevgvat ovanel qngn gb n grezvany. Hfr -s gb sbepr.\a')
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, tybo
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc uryc <pbzznaq>
 """
-o = options.Options('bup help', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) == 0:
-    # the wrapper program provides the default usage string
-    os.execvp(os.environ['BUP_MAIN_EXE'], ['bup'])
-elif len(extra) == 1:
-    docname = (extra[0]=='bup' and 'bup' or ('bup-%s' % extra[0]))
-    exe = sys.argv[0]
-    (exepath, exefile) = os.path.split(exe)
-    manpath = os.path.join(exepath, '../Documentation/' + docname + '.[1-9]')
-    g = glob.glob(manpath)
-    if g:
-        os.execvp('man', ['man', '-l', g[0]])
-    else:
-        os.execvp('man', ['man', docname])
-else:
-    o.fatal("exactly one command name expected")
-#!/usr/bin/env python
-import sys, os, stat, errno, fuse, re, time, tempfile
-from bup import options, git, vfs
-from bup.helpers import *
-
-
-class Stat(fuse.Stat):
-    def __init__(self):
-        self.st_mode = 0
-        self.st_ino = 0
-        self.st_dev = 0
-        self.st_nlink = 0
-        self.st_uid = 0
-        self.st_gid = 0
-        self.st_size = 0
-        self.st_atime = 0
-        self.st_mtime = 0
-        self.st_ctime = 0
-        self.st_blocks = 0
-        self.st_blksize = 0
-        self.st_rdev = 0
-
-
-cache = {}
-def cache_get(top, path):
-    parts = path.split('/')
-    cache[('',)] = top
-    c = None
-    max = len(parts)
-    #log('cache: %r\n' % cache.keys())
-    for i in range(max):
-        pre = parts[:max-i]
-        #log('cache trying: %r\n' % pre)
-        c = cache.get(tuple(pre))
-        if c:
-            rest = parts[max-i:]
-            for r in rest:
-                #log('resolving %r from %r\n' % (r, c.fullname()))
-                c = c.lresolve(r)
-                key = tuple(pre + [r])
-                #log('saving: %r\n' % (key,))
-                cache[key] = c
-            break
-    assert(c)
-    return c
+b = bcgvbaf.Bcgvbaf('ohc uryc', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) == 0:
+    # gur jenccre cebtenz cebivqrf gur qrsnhyg hfntr fgevat
+    bf.rkrpic(bf.raiveba['OHC_ZNVA_RKR'], ['ohc'])
+ryvs yra(rkgen) == 1:
+    qbpanzr = (rkgen[0]=='ohc' naq 'ohc' be ('ohc-%f' % rkgen[0]))
+    rkr = flf.neti[0]
+    (rkrcngu, rkrsvyr) = bf.cngu.fcyvg(rkr)
+    znacngu = bf.cngu.wbva(rkrcngu, '../Qbphzragngvba/' + qbpanzr + '.[1-9]')
+    t = tybo.tybo(znacngu)
+    vs t:
+        bf.rkrpic('zna', ['zna', '-y', t[0]])
+    ryfr:
+        bf.rkrpic('zna', ['zna', qbpanzr])
+ryfr:
+    b.sngny("rknpgyl bar pbzznaq anzr rkcrpgrq")
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgng, reeab, shfr, er, gvzr, grzcsvyr
+sebz ohc vzcbeg bcgvbaf, tvg, isf
+sebz ohc.urycref vzcbeg *
+
+
+pynff Fgng(shfr.Fgng):
+    qrs __vavg__(frys):
+        frys.fg_zbqr = 0
+        frys.fg_vab = 0
+        frys.fg_qri = 0
+        frys.fg_ayvax = 0
+        frys.fg_hvq = 0
+        frys.fg_tvq = 0
+        frys.fg_fvmr = 0
+        frys.fg_ngvzr = 0
+        frys.fg_zgvzr = 0
+        frys.fg_pgvzr = 0
+        frys.fg_oybpxf = 0
+        frys.fg_oyxfvmr = 0
+        frys.fg_eqri = 0
+
+
+pnpur = {}
+qrs pnpur_trg(gbc, cngu):
+    cnegf = cngu.fcyvg('/')
+    pnpur[('',)] = gbc
+    p = Abar
+    znk = yra(cnegf)
+    #ybt('pnpur: %e\a' % pnpur.xrlf())
+    sbe v va enatr(znk):
+        cer = cnegf[:znk-v]
+        #ybt('pnpur gelvat: %e\a' % cer)
+        p = pnpur.trg(ghcyr(cer))
+        vs p:
+            erfg = cnegf[znk-v:]
+            sbe e va erfg:
+                #ybt('erfbyivat %e sebz %e\a' % (e, p.shyyanzr()))
+                p = p.yerfbyir(e)
+                xrl = ghcyr(cer + [e])
+                #ybt('fnivat: %e\a' % (xrl,))
+                pnpur[xrl] = p
+            oernx
+    nffreg(p)
+    erghea p
         
     
 
-class BupFs(fuse.Fuse):
-    def __init__(self, top):
-        fuse.Fuse.__init__(self)
-        self.top = top
+pynff OhcSf(shfr.Shfr):
+    qrs __vavg__(frys, gbc):
+        shfr.Shfr.__vavg__(frys)
+        frys.gbc = gbc
     
-    def getattr(self, path):
-        log('--getattr(%r)\n' % path)
-        try:
-            node = cache_get(self.top, path)
-            st = Stat()
-            st.st_mode = node.mode
-            st.st_nlink = node.nlinks()
-            st.st_size = node.size()
-            st.st_mtime = node.mtime
-            st.st_ctime = node.ctime
-            st.st_atime = node.atime
-            return st
-        except vfs.NoSuchFile:
-            return -errno.ENOENT
-
-    def readdir(self, path, offset):
-        log('--readdir(%r)\n' % path)
-        node = cache_get(self.top, path)
-        yield fuse.Direntry('.')
-        yield fuse.Direntry('..')
-        for sub in node.subs():
-            yield fuse.Direntry(sub.name)
-
-    def readlink(self, path):
-        log('--readlink(%r)\n' % path)
-        node = cache_get(self.top, path)
-        return node.readlink()
-
-    def open(self, path, flags):
-        log('--open(%r)\n' % path)
-        node = cache_get(self.top, path)
-        accmode = os.O_RDONLY | os.O_WRONLY | os.O_RDWR
-        if (flags & accmode) != os.O_RDONLY:
-            return -errno.EACCES
-        node.open()
-
-    def release(self, path, flags):
-        log('--release(%r)\n' % path)
-
-    def read(self, path, size, offset):
-        log('--read(%r)\n' % path)
-        n = cache_get(self.top, path)
-        o = n.open()
-        o.seek(offset)
-        return o.read(size)
-
-
-if not hasattr(fuse, '__version__'):
-    raise RuntimeError, "your fuse module is too old for fuse.__version__"
-fuse.fuse_python_api = (0, 2)
-
-
-optspec = """
-bup fuse [-d] [-f] <mountpoint>
+    qrs trgngge(frys, cngu):
+        ybt('--trgngge(%e)\a' % cngu)
+        gel:
+            abqr = pnpur_trg(frys.gbc, cngu)
+            fg = Fgng()
+            fg.fg_zbqr = abqr.zbqr
+            fg.fg_ayvax = abqr.ayvaxf()
+            fg.fg_fvmr = abqr.fvmr()
+            fg.fg_zgvzr = abqr.zgvzr
+            fg.fg_pgvzr = abqr.pgvzr
+            fg.fg_ngvzr = abqr.ngvzr
+            erghea fg
+        rkprcg isf.AbFhpuSvyr:
+            erghea -reeab.RABRAG
+
+    qrs ernqqve(frys, cngu, bssfrg):
+        ybt('--ernqqve(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        lvryq shfr.Qveragel('.')
+        lvryq shfr.Qveragel('..')
+        sbe fho va abqr.fhof():
+            lvryq shfr.Qveragel(fho.anzr)
+
+    qrs ernqyvax(frys, cngu):
+        ybt('--ernqyvax(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        erghea abqr.ernqyvax()
+
+    qrs bcra(frys, cngu, syntf):
+        ybt('--bcra(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        nppzbqr = bf.B_EQBAYL | bf.B_JEBAYL | bf.B_EQJE
+        vs (syntf & nppzbqr) != bf.B_EQBAYL:
+            erghea -reeab.RNPPRF
+        abqr.bcra()
+
+    qrs eryrnfr(frys, cngu, syntf):
+        ybt('--eryrnfr(%e)\a' % cngu)
+
+    qrs ernq(frys, cngu, fvmr, bssfrg):
+        ybt('--ernq(%e)\a' % cngu)
+        a = pnpur_trg(frys.gbc, cngu)
+        b = a.bcra()
+        b.frrx(bssfrg)
+        erghea b.ernq(fvmr)
+
+
+vs abg unfngge(shfr, '__irefvba__'):
+    envfr EhagvzrReebe, "lbhe shfr zbqhyr vf gbb byq sbe shfr.__irefvba__"
+shfr.shfr_clguba_ncv = (0, 2)
+
+
+bcgfcrp = """
+ohc shfr [-q] [-s] <zbhagcbvag>
 --
-d,debug   increase debug level
-f,foreground  run in foreground
+q,qroht   vapernfr qroht yriry
+s,sbertebhaq  eha va sbertebhaq
 """
-o = options.Options('bup fuse', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one argument expected")
-
-git.check_repo_or_die()
-top = vfs.RefList(None)
-f = BupFs(top)
-f.fuse_args.mountpoint = extra[0]
-if opt.debug:
-    f.fuse_args.add('debug')
-if opt.foreground:
-    f.fuse_args.setmod('foreground')
-print f.multithreaded
-f.multithreaded = False
-
-f.main()
-#!/usr/bin/env python
-from bup import git, options, client
-from bup.helpers import *
-
-optspec = """
-[BUP_DIR=...] bup init [-r host:path]
+b = bcgvbaf.Bcgvbaf('ohc shfr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar nethzrag rkcrpgrq")
+
+tvg.purpx_ercb_be_qvr()
+gbc = isf.ErsYvfg(Abar)
+s = OhcSf(gbc)
+s.shfr_netf.zbhagcbvag = rkgen[0]
+vs bcg.qroht:
+    s.shfr_netf.nqq('qroht')
+vs bcg.sbertebhaq:
+    s.shfr_netf.frgzbq('sbertebhaq')
+cevag s.zhygvguernqrq
+s.zhygvguernqrq = Snyfr
+
+s.znva()
+#!/hfe/ova/rai clguba
+sebz ohc vzcbeg tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+[OHC_QVE=...] ohc vavg [-e ubfg:cngu]
 --
-r,remote=  remote repository path
+e,erzbgr=  erzbgr ercbfvgbel cngu
 """
-o = options.Options('bup init', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-
-if opt.remote:
-    git.init_repo()  # local repo
-    git.check_repo_or_die()
-    cli = client.Client(opt.remote, create=True)
-    cli.close()
-else:
-    git.init_repo()
-#!/usr/bin/env python
-import sys, math, struct, glob
-from bup import options, git
-from bup.helpers import *
-
-PAGE_SIZE=4096
-SHA_PER_PAGE=PAGE_SIZE/200.
-
-
-def merge(idxlist, bits, table):
-    count = 0
-    for e in git.idxmerge(idxlist):
-        count += 1
-        prefix = git.extract_bits(e, bits)
-        table[prefix] = count
-        yield e
-
-
-def do_midx(outdir, outfilename, infilenames):
-    if not outfilename:
-        assert(outdir)
-        sum = Sha1('\0'.join(infilenames)).hexdigest()
-        outfilename = '%s/midx-%s.midx' % (outdir, sum)
+b = bcgvbaf.Bcgvbaf('ohc vavg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+
+vs bcg.erzbgr:
+    tvg.vavg_ercb()  # ybpny ercb
+    tvg.purpx_ercb_be_qvr()
+    pyv = pyvrag.Pyvrag(bcg.erzbgr, perngr=Gehr)
+    pyv.pybfr()
+ryfr:
+    tvg.vavg_ercb()
+#!/hfe/ova/rai clguba
+vzcbeg flf, zngu, fgehpg, tybo
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+CNTR_FVMR=4096
+FUN_CRE_CNTR=CNTR_FVMR/200.
+
+
+qrs zretr(vqkyvfg, ovgf, gnoyr):
+    pbhag = 0
+    sbe r va tvg.vqkzretr(vqkyvfg):
+        pbhag += 1
+        cersvk = tvg.rkgenpg_ovgf(r, ovgf)
+        gnoyr[cersvk] = pbhag
+        lvryq r
+
+
+qrs qb_zvqk(bhgqve, bhgsvyranzr, vasvyranzrf):
+    vs abg bhgsvyranzr:
+        nffreg(bhgqve)
+        fhz = Fun1('\0'.wbva(vasvyranzrf)).urkqvtrfg()
+        bhgsvyranzr = '%f/zvqk-%f.zvqk' % (bhgqve, fhz)
     
-    inp = []
-    total = 0
-    for name in infilenames:
-        ix = git.PackIdx(name)
-        inp.append(ix)
-        total += len(ix)
-
-    log('Merging %d indexes (%d objects).\n' % (len(infilenames), total))
-    if (not opt.force and (total < 1024 and len(infilenames) < 3)) \
-       or (opt.force and not total):
-        log('midx: nothing to do.\n')
-        return
-
-    pages = int(total/SHA_PER_PAGE) or 1
-    bits = int(math.ceil(math.log(pages, 2)))
-    entries = 2**bits
-    log('Table size: %d (%d bits)\n' % (entries*4, bits))
+    vac = []
+    gbgny = 0
+    sbe anzr va vasvyranzrf:
+        vk = tvg.CnpxVqk(anzr)
+        vac.nccraq(vk)
+        gbgny += yra(vk)
+
+    ybt('Zretvat %q vaqrkrf (%q bowrpgf).\a' % (yra(vasvyranzrf), gbgny))
+    vs (abg bcg.sbepr naq (gbgny < 1024 naq yra(vasvyranzrf) < 3)) \
+       be (bcg.sbepr naq abg gbgny):
+        ybt('zvqk: abguvat gb qb.\a')
+        erghea
+
+    cntrf = vag(gbgny/FUN_CRE_CNTR) be 1
+    ovgf = vag(zngu.prvy(zngu.ybt(cntrf, 2)))
+    ragevrf = 2**ovgf
+    ybt('Gnoyr fvmr: %q (%q ovgf)\a' % (ragevrf*4, ovgf))
     
-    table = [0]*entries
-
-    try:
-        os.unlink(outfilename)
-    except OSError:
-        pass
-    f = open(outfilename + '.tmp', 'w+')
-    f.write('MIDX\0\0\0\2')
-    f.write(struct.pack('!I', bits))
-    assert(f.tell() == 12)
-    f.write('\0'*4*entries)
+    gnoyr = [0]*ragevrf
+
+    gel:
+        bf.hayvax(bhgsvyranzr)
+    rkprcg BFReebe:
+        cnff
+    s = bcra(bhgsvyranzr + '.gzc', 'j+')
+    s.jevgr('ZVQK\0\0\0\2')
+    s.jevgr(fgehpg.cnpx('!V', ovgf))
+    nffreg(s.gryy() == 12)
+    s.jevgr('\0'*4*ragevrf)
     
-    for e in merge(inp, bits, table):
-        f.write(e)
+    sbe r va zretr(vac, ovgf, gnoyr):
+        s.jevgr(r)
         
-    f.write('\0'.join(os.path.basename(p) for p in infilenames))
-
-    f.seek(12)
-    f.write(struct.pack('!%dI' % entries, *table))
-    f.close()
-    os.rename(outfilename + '.tmp', outfilename)
-
-    # this is just for testing
-    if 0:
-        p = git.PackMidx(outfilename)
-        assert(len(p.idxnames) == len(infilenames))
-        print p.idxnames
-        assert(len(p) == total)
-        pi = iter(p)
-        for i in merge(inp, total, bits, table):
-            assert(i == pi.next())
-            assert(p.exists(i))
-
-    print outfilename
-
-optspec = """
-bup midx [options...] <idxnames...>
+    s.jevgr('\0'.wbva(bf.cngu.onfranzr(c) sbe c va vasvyranzrf))
+
+    s.frrx(12)
+    s.jevgr(fgehpg.cnpx('!%qV' % ragevrf, *gnoyr))
+    s.pybfr()
+    bf.eranzr(bhgsvyranzr + '.gzc', bhgsvyranzr)
+
+    # guvf vf whfg sbe grfgvat
+    vs 0:
+        c = tvg.CnpxZvqk(bhgsvyranzr)
+        nffreg(yra(c.vqkanzrf) == yra(vasvyranzrf))
+        cevag c.vqkanzrf
+        nffreg(yra(c) == gbgny)
+        cv = vgre(c)
+        sbe v va zretr(vac, gbgny, ovgf, gnoyr):
+            nffreg(v == cv.arkg())
+            nffreg(c.rkvfgf(v))
+
+    cevag bhgsvyranzr
+
+bcgfcrp = """
+ohc zvqk [bcgvbaf...] <vqkanzrf...>
 --
-o,output=  output midx filename (default: auto-generated)
-a,auto     automatically create .midx from any unindexed .idx files
-f,force    automatically create .midx from *all* .idx files
+b,bhgchg=  bhgchg zvqk svyranzr (qrsnhyg: nhgb-trarengrq)
+n,nhgb     nhgbzngvpnyyl perngr .zvqk sebz nal havaqrkrq .vqk svyrf
+s,sbepr    nhgbzngvpnyyl perngr .zvqk sebz *nyy* .vqk svyrf
 """
-o = options.Options('bup midx', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra and (opt.auto or opt.force):
-    o.fatal("you can't use -f/-a and also provide filenames")
-
-git.check_repo_or_die()
-
-if extra:
-    do_midx(git.repo('objects/pack'), opt.output, extra)
-elif opt.auto or opt.force:
-    paths = [git.repo('objects/pack')]
-    paths += glob.glob(git.repo('index-cache/*/.'))
-    for path in paths:
-        log('midx: scanning %s\n' % path)
-        if opt.force:
-            do_midx(path, opt.output, glob.glob('%s/*.idx' % path))
-        elif opt.auto:
-            m = git.PackIdxList(path)
-            needed = {}
-            for pack in m.packs:  # only .idx files without a .midx are open
-                if pack.name.endswith('.idx'):
-                    needed[pack.name] = 1
-            del m
-            do_midx(path, opt.output, needed.keys())
-        log('\n')
-else:
-    o.fatal("you must use -f or -a or provide input filenames")
-#!/usr/bin/env python
-import sys, os, random
-from bup import options
-from bup.helpers import *
-
-
-def randblock(n):
-    l = []
-    for i in xrange(n):
-        l.append(chr(random.randrange(0,256)))
-    return ''.join(l)
-
-
-optspec = """
-bup damage [-n count] [-s maxsize] [-S seed] <filenames...>
+b = bcgvbaf.Bcgvbaf('ohc zvqk', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen naq (bcg.nhgb be bcg.sbepr):
+    b.sngny("lbh pna'g hfr -s/-n naq nyfb cebivqr svyranzrf")
+
+tvg.purpx_ercb_be_qvr()
+
+vs rkgen:
+    qb_zvqk(tvg.ercb('bowrpgf/cnpx'), bcg.bhgchg, rkgen)
+ryvs bcg.nhgb be bcg.sbepr:
+    cnguf = [tvg.ercb('bowrpgf/cnpx')]
+    cnguf += tybo.tybo(tvg.ercb('vaqrk-pnpur/*/.'))
+    sbe cngu va cnguf:
+        ybt('zvqk: fpnaavat %f\a' % cngu)
+        vs bcg.sbepr:
+            qb_zvqk(cngu, bcg.bhgchg, tybo.tybo('%f/*.vqk' % cngu))
+        ryvs bcg.nhgb:
+            z = tvg.CnpxVqkYvfg(cngu)
+            arrqrq = {}
+            sbe cnpx va z.cnpxf:  # bayl .vqk svyrf jvgubhg n .zvqk ner bcra
+                vs cnpx.anzr.raqfjvgu('.vqk'):
+                    arrqrq[cnpx.anzr] = 1
+            qry z
+            qb_zvqk(cngu, bcg.bhgchg, arrqrq.xrlf())
+        ybt('\a')
+ryfr:
+    b.sngny("lbh zhfg hfr -s be -n be cebivqr vachg svyranzrf")
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, enaqbz
+sebz ohc vzcbeg bcgvbaf
+sebz ohc.urycref vzcbeg *
+
+
+qrs enaqoybpx(a):
+    y = []
+    sbe v va kenatr(a):
+        y.nccraq(pue(enaqbz.enaqenatr(0,256)))
+    erghea ''.wbva(y)
+
+
+bcgfcrp = """
+ohc qnzntr [-a pbhag] [-f znkfvmr] [-F frrq] <svyranzrf...>
 --
-   WARNING: THIS COMMAND IS EXTREMELY DANGEROUS
-n,num=   number of blocks to damage
-s,size=  maximum size of each damaged block
-percent= maximum size of each damaged block (as a percent of entire file)
-equal    spread damage evenly throughout the file
-S,seed=  random number seed (for repeatable tests)
+   JNEAVAT: GUVF PBZZNAQ VF RKGERZRYL QNATREBHF
+a,ahz=   ahzore bs oybpxf gb qnzntr
+f,fvmr=  znkvzhz fvmr bs rnpu qnzntrq oybpx
+creprag= znkvzhz fvmr bs rnpu qnzntrq oybpx (nf n creprag bs ragver svyr)
+rdhny    fcernq qnzntr rirayl guebhtubhg gur svyr
+F,frrq=  enaqbz ahzore frrq (sbe ercrngnoyr grfgf)
 """
-o = options.Options('bup damage', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if not extra:
-    o.fatal('filenames expected')
-
-if opt.seed != None:
-    random.seed(opt.seed)
-
-for name in extra:
-    log('Damaging "%s"...\n' % name)
-    f = open(name, 'r+b')
-    st = os.fstat(f.fileno())
-    size = st.st_size
-    if opt.percent or opt.size:
-        ms1 = int(float(opt.percent or 0)/100.0*size) or size
-        ms2 = opt.size or size
-        maxsize = min(ms1, ms2)
-    else:
-        maxsize = 1
-    chunks = opt.num or 10
-    chunksize = size/chunks
-    for r in range(chunks):
-        sz = random.randrange(1, maxsize+1)
-        if sz > size:
-            sz = size
-        if opt.equal:
-            ofs = r*chunksize
-        else:
-            ofs = random.randrange(0, size - sz + 1)
-        log('  %6d bytes at %d\n' % (sz, ofs))
-        f.seek(ofs)
-        f.write(randblock(sz))
-    f.close()
-#!/usr/bin/env python
-import sys, struct, mmap
-from bup import options, git
-from bup.helpers import *
-
-suspended_w = None
-
-
-def init_dir(conn, arg):
-    git.init_repo(arg)
-    log('bup server: bupdir initialized: %r\n' % git.repodir)
-    conn.ok()
-
-
-def set_dir(conn, arg):
-    git.check_repo_or_die(arg)
-    log('bup server: bupdir is %r\n' % git.repodir)
-    conn.ok()
+b = bcgvbaf.Bcgvbaf('ohc qnzntr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs abg rkgen:
+    b.sngny('svyranzrf rkcrpgrq')
+
+vs bcg.frrq != Abar:
+    enaqbz.frrq(bcg.frrq)
+
+sbe anzr va rkgen:
+    ybt('Qnzntvat "%f"...\a' % anzr)
+    s = bcra(anzr, 'e+o')
+    fg = bf.sfgng(s.svyrab())
+    fvmr = fg.fg_fvmr
+    vs bcg.creprag be bcg.fvmr:
+        zf1 = vag(sybng(bcg.creprag be 0)/100.0*fvmr) be fvmr
+        zf2 = bcg.fvmr be fvmr
+        znkfvmr = zva(zf1, zf2)
+    ryfr:
+        znkfvmr = 1
+    puhaxf = bcg.ahz be 10
+    puhaxfvmr = fvmr/puhaxf
+    sbe e va enatr(puhaxf):
+        fm = enaqbz.enaqenatr(1, znkfvmr+1)
+        vs fm > fvmr:
+            fm = fvmr
+        vs bcg.rdhny:
+            bsf = e*puhaxfvmr
+        ryfr:
+            bsf = enaqbz.enaqenatr(0, fvmr - fm + 1)
+        ybt('  %6q olgrf ng %q\a' % (fm, bsf))
+        s.frrx(bsf)
+        s.jevgr(enaqoybpx(fm))
+    s.pybfr()
+#!/hfe/ova/rai clguba
+vzcbeg flf, fgehpg, zznc
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+fhfcraqrq_j = Abar
+
+
+qrs vavg_qve(pbaa, net):
+    tvg.vavg_ercb(net)
+    ybt('ohc freire: ohcqve vavgvnyvmrq: %e\a' % tvg.ercbqve)
+    pbaa.bx()
+
+
+qrs frg_qve(pbaa, net):
+    tvg.purpx_ercb_be_qvr(net)
+    ybt('ohc freire: ohcqve vf %e\a' % tvg.ercbqve)
+    pbaa.bx()
 
     
-def list_indexes(conn, junk):
-    git.check_repo_or_die()
-    for f in os.listdir(git.repo('objects/pack')):
-        if f.endswith('.idx'):
-            conn.write('%s\n' % f)
-    conn.ok()
-
-
-def send_index(conn, name):
-    git.check_repo_or_die()
-    assert(name.find('/') < 0)
-    assert(name.endswith('.idx'))
-    idx = git.PackIdx(git.repo('objects/pack/%s' % name))
-    conn.write(struct.pack('!I', len(idx.map)))
-    conn.write(idx.map)
-    conn.ok()
-
-
-def receive_objects(conn, junk):
-    global suspended_w
-    git.check_repo_or_die()
-    suggested = {}
-    if suspended_w:
-        w = suspended_w
-        suspended_w = None
-    else:
-        w = git.PackWriter()
-    while 1:
-        ns = conn.read(4)
-        if not ns:
-            w.abort()
-            raise Exception('object read: expected length header, got EOF\n')
-        n = struct.unpack('!I', ns)[0]
-        #log('expecting %d bytes\n' % n)
-        if not n:
-            log('bup server: received %d object%s.\n
-                % (w.count, w.count!=1 and "s" or ''))
-            fullpath = w.close()
-            if fullpath:
-                (dir, name) = os.path.split(fullpath)
-                conn.write('%s.idx\n' % name)
-            conn.ok()
-            return
-        elif n == 0xffffffff:
-            log('bup server: receive-objects suspended.\n')
-            suspended_w = w
-            conn.ok()
-            return
+qrs yvfg_vaqrkrf(pbaa, whax):
+    tvg.purpx_ercb_be_qvr()
+    sbe s va bf.yvfgqve(tvg.ercb('bowrpgf/cnpx')):
+        vs s.raqfjvgu('.vqk'):
+            pbaa.jevgr('%f\a' % s)
+    pbaa.bx()
+
+
+qrs fraq_vaqrk(pbaa, anzr):
+    tvg.purpx_ercb_be_qvr()
+    nffreg(anzr.svaq('/') < 0)
+    nffreg(anzr.raqfjvgu('.vqk'))
+    vqk = tvg.CnpxVqk(tvg.ercb('bowrpgf/cnpx/%f' % anzr))
+    pbaa.jevgr(fgehpg.cnpx('!V', yra(vqk.znc)))
+    pbaa.jevgr(vqk.znc)
+    pbaa.bx()
+
+
+qrs erprvir_bowrpgf(pbaa, whax):
+    tybony fhfcraqrq_j
+    tvg.purpx_ercb_be_qvr()
+    fhttrfgrq = {}
+    vs fhfcraqrq_j:
+        j = fhfcraqrq_j
+        fhfcraqrq_j = Abar
+    ryfr:
+        j = tvg.CnpxJevgre()
+    juvyr 1:
+        af = pbaa.ernq(4)
+        vs abg af:
+            j.nobeg()
+            envfr Rkprcgvba('bowrpg ernq: rkcrpgrq yratgu urnqre, tbg RBS\a')
+        a = fgehpg.hacnpx('!V', af)[0]
+        #ybt('rkcrpgvat %q olgrf\a' % a)
+        vs abg a:
+            ybt('ohc freire: erprvirq %q bowrpg%f.\a
+                % (j.pbhag, j.pbhag!=1 naq "f" be ''))
+            shyycngu = j.pybfr()
+            vs shyycngu:
+                (qve, anzr) = bf.cngu.fcyvg(shyycngu)
+                pbaa.jevgr('%f.vqk\a' % anzr)
+            pbaa.bx()
+            erghea
+        ryvs a == 0kssssssss:
+            ybt('ohc freire: erprvir-bowrpgf fhfcraqrq.\a')
+            fhfcraqrq_j = j
+            pbaa.bx()
+            erghea
             
-        buf = conn.read(n)  # object sizes in bup are reasonably small
-        #log('read %d bytes\n' % n)
-        if len(buf) < n:
-            w.abort()
-            raise Exception('object read: expected %d bytes, got %d\n'
-                            % (n, len(buf)))
-        (type, content) = git._decode_packobj(buf)
-        sha = git.calc_hash(type, content)
-        oldpack = w.exists(sha)
-        # FIXME: we only suggest a single index per cycle, because the client
-        # is currently dumb to download more than one per cycle anyway.
-        # Actually we should fix the client, but this is a minor optimization
-        # on the server side.
-        if not suggested and \
-          oldpack and (oldpack == True or oldpack.endswith('.midx')):
-            # FIXME: we shouldn't really have to know about midx files
-            # at this layer.  But exists() on a midx doesn't return the
-            # packname (since it doesn't know)... probably we should just
-            # fix that deficiency of midx files eventually, although it'll
-            # make the files bigger.  This method is certainly not very
-            # efficient.
-            w.objcache.refresh(skip_midx = True)
-            oldpack = w.objcache.exists(sha)
-            log('new suggestion: %r\n' % oldpack)
-            assert(oldpack)
-            assert(oldpack != True)
-            assert(not oldpack.endswith('.midx'))
-            w.objcache.refresh(skip_midx = False)
-        if not suggested and oldpack:
-            assert(oldpack.endswith('.idx'))
-            (dir,name) = os.path.split(oldpack)
-            if not (name in suggested):
-                log("bup server: suggesting index %s\n" % name)
-                conn.write('index %s\n' % name)
-                suggested[name] = 1
-        else:
-            w._raw_write([buf])
-    # NOTREACHED
-
-
-def read_ref(conn, refname):
-    git.check_repo_or_die()
-    r = git.read_ref(refname)
-    conn.write('%s\n' % (r or '').encode('hex'))
-    conn.ok()
-
-
-def update_ref(conn, refname):
-    git.check_repo_or_die()
-    newval = conn.readline().strip()
-    oldval = conn.readline().strip()
-    git.update_ref(refname, newval.decode('hex'), oldval.decode('hex'))
-    conn.ok()
-
-
-def cat(conn, id):
-    git.check_repo_or_die()
-    try:
-        for blob in git.cat(id):
-            conn.write(struct.pack('!I', len(blob)))
-            conn.write(blob)
-    except KeyError, e:
-        log('server: error: %s\n' % e)
-        conn.write('\0\0\0\0')
-        conn.error(e)
-    else:
-        conn.write('\0\0\0\0')
-        conn.ok()
-
-
-optspec = """
-bup server
+        ohs = pbaa.ernq(a)  # bowrpg fvmrf va ohc ner ernfbanoyl fznyy
+        #ybt('ernq %q olgrf\a' % a)
+        vs yra(ohs) < a:
+            j.nobeg()
+            envfr Rkprcgvba('bowrpg ernq: rkcrpgrq %q olgrf, tbg %q\a'
+                            % (a, yra(ohs)))
+        (glcr, pbagrag) = tvg._qrpbqr_cnpxbow(ohs)
+        fun = tvg.pnyp_unfu(glcr, pbagrag)
+        byqcnpx = j.rkvfgf(fun)
+        # SVKZR: jr bayl fhttrfg n fvatyr vaqrk cre plpyr, orpnhfr gur pyvrag
+        # vf pheeragyl qhzo gb qbjaybnq zber guna bar cre plpyr naljnl.
+        # Npghnyyl jr fubhyq svk gur pyvrag, ohg guvf vf n zvabe bcgvzvmngvba
+        # ba gur freire fvqr.
+        vs abg fhttrfgrq naq \
+          byqcnpx naq (byqcnpx == Gehr be byqcnpx.raqfjvgu('.zvqk')):
+            # SVKZR: jr fubhyqa'g ernyyl unir gb xabj nobhg zvqk svyrf
+            # ng guvf ynlre.  Ohg rkvfgf() ba n zvqk qbrfa'g erghea gur
+            # cnpxanzr (fvapr vg qbrfa'g xabj)... cebonoyl jr fubhyq whfg
+            # svk gung qrsvpvrapl bs zvqk svyrf riraghnyyl, nygubhtu vg'yy
+            # znxr gur svyrf ovttre.  Guvf zrgubq vf pregnvayl abg irel
+            # rssvpvrag.
+            j.bowpnpur.erserfu(fxvc_zvqk = Gehr)
+            byqcnpx = j.bowpnpur.rkvfgf(fun)
+            ybt('arj fhttrfgvba: %e\a' % byqcnpx)
+            nffreg(byqcnpx)
+            nffreg(byqcnpx != Gehr)
+            nffreg(abg byqcnpx.raqfjvgu('.zvqk'))
+            j.bowpnpur.erserfu(fxvc_zvqk = Snyfr)
+        vs abg fhttrfgrq naq byqcnpx:
+            nffreg(byqcnpx.raqfjvgu('.vqk'))
+            (qve,anzr) = bf.cngu.fcyvg(byqcnpx)
+            vs abg (anzr va fhttrfgrq):
+                ybt("ohc freire: fhttrfgvat vaqrk %f\a" % anzr)
+                pbaa.jevgr('vaqrk %f\a' % anzr)
+                fhttrfgrq[anzr] = 1
+        ryfr:
+            j._enj_jevgr([ohs])
+    # ABGERNPURQ
+
+
+qrs ernq_ers(pbaa, ersanzr):
+    tvg.purpx_ercb_be_qvr()
+    e = tvg.ernq_ers(ersanzr)
+    pbaa.jevgr('%f\a' % (e be '').rapbqr('urk'))
+    pbaa.bx()
+
+
+qrs hcqngr_ers(pbaa, ersanzr):
+    tvg.purpx_ercb_be_qvr()
+    arjiny = pbaa.ernqyvar().fgevc()
+    byqiny = pbaa.ernqyvar().fgevc()
+    tvg.hcqngr_ers(ersanzr, arjiny.qrpbqr('urk'), byqiny.qrpbqr('urk'))
+    pbaa.bx()
+
+
+qrs png(pbaa, vq):
+    tvg.purpx_ercb_be_qvr()
+    gel:
+        sbe oybo va tvg.png(vq):
+            pbaa.jevgr(fgehpg.cnpx('!V', yra(oybo)))
+            pbaa.jevgr(oybo)
+    rkprcg XrlReebe, r:
+        ybt('freire: reebe: %f\a' % r)
+        pbaa.jevgr('\0\0\0\0')
+        pbaa.reebe(r)
+    ryfr:
+        pbaa.jevgr('\0\0\0\0')
+        pbaa.bx()
+
+
+bcgfcrp = """
+ohc freire
 """
-o = options.Options('bup server', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal('no arguments expected')
-
-log('bup server: reading from stdin.\n')
-
-commands = {
-    'init-dir': init_dir,
-    'set-dir': set_dir,
-    'list-indexes': list_indexes,
-    'send-index': send_index,
-    'receive-objects': receive_objects,
-    'read-ref': read_ref,
-    'update-ref': update_ref,
-    'cat': cat,
+b = bcgvbaf.Bcgvbaf('ohc freire', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+ybt('ohc freire: ernqvat sebz fgqva.\a')
+
+pbzznaqf = {
+    'vavg-qve': vavg_qve,
+    'frg-qve': frg_qve,
+    'yvfg-vaqrkrf': yvfg_vaqrkrf,
+    'fraq-vaqrk': fraq_vaqrk,
+    'erprvir-bowrpgf': erprvir_bowrpgf,
+    'ernq-ers': ernq_ers,
+    'hcqngr-ers': hcqngr_ers,
+    'png': png,
 }
 
-# FIXME: this protocol is totally lame and not at all future-proof.
-# (Especially since we abort completely as soon as *anything* bad happens)
-conn = Conn(sys.stdin, sys.stdout)
-lr = linereader(conn)
-for _line in lr:
-    line = _line.strip()
-    if not line:
-        continue
-    log('bup server: command: %r\n' % line)
-    words = line.split(' ', 1)
-    cmd = words[0]
-    rest = len(words)>1 and words[1] or ''
-    if cmd == 'quit':
-        break
-    else:
-        cmd = commands.get(cmd)
-        if cmd:
-            cmd(conn, rest)
-        else:
-            raise Exception('unknown server command: %r\n' % line)
-
-log('bup server: done\n')
-#!/usr/bin/env python
-import sys, time, struct
-from bup import hashsplit, git, options, client
-from bup.helpers import *
-from subprocess import PIPE
-
-
-optspec = """
-bup join [-r host:path] [refs or hashes...]
+# SVKZR: guvf cebgbpby vf gbgnyyl ynzr naq abg ng nyy shgher-cebbs.
+# (Rfcrpvnyyl fvapr jr nobeg pbzcyrgryl nf fbba nf *nalguvat* onq unccraf)
+pbaa = Pbaa(flf.fgqva, flf.fgqbhg)
+ye = yvarernqre(pbaa)
+sbe _yvar va ye:
+    yvar = _yvar.fgevc()
+    vs abg yvar:
+        pbagvahr
+    ybt('ohc freire: pbzznaq: %e\a' % yvar)
+    jbeqf = yvar.fcyvg(' ', 1)
+    pzq = jbeqf[0]
+    erfg = yra(jbeqf)>1 naq jbeqf[1] be ''
+    vs pzq == 'dhvg':
+        oernx
+    ryfr:
+        pzq = pbzznaqf.trg(pzq)
+        vs pzq:
+            pzq(pbaa, erfg)
+        ryfr:
+            envfr Rkprcgvba('haxabja freire pbzznaq: %e\a' % yvar)
+
+ybt('ohc freire: qbar\a')
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr, fgehpg
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+sebz fhocebprff vzcbeg CVCR
+
+
+bcgfcrp = """
+ohc wbva [-e ubfg:cngu] [ersf be unfurf...]
 --
-r,remote=  remote repository path
+e,erzbgr=  erzbgr ercbfvgbel cngu
 """
-o = options.Options('bup join', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
+b = bcgvbaf.Bcgvbaf('ohc wbva', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
 
-git.check_repo_or_die()
+tvg.purpx_ercb_be_qvr()
 
-if not extra:
-    extra = linereader(sys.stdin)
+vs abg rkgen:
+    rkgen = yvarernqre(flf.fgqva)
 
-ret = 0
+erg = 0
 
-if opt.remote:
-    cli = client.Client(opt.remote)
-    cat = cli.cat
-else:
-    cp = git.CatPipe()
-    cat = cp.join
+vs bcg.erzbgr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    png = pyv.png
+ryfr:
+    pc = tvg.PngCvcr()
+    png = pc.wbva
 
-for id in extra:
-    try:
-        for blob in cat(id):
-            sys.stdout.write(blob)
-    except KeyError, e:
-        sys.stdout.flush()
-        log('error: %s\n' % e)
-        ret = 1
+sbe vq va rkgen:
+    gel:
+        sbe oybo va png(vq):
+            flf.fgqbhg.jevgr(oybo)
+    rkprcg XrlReebe, r:
+        flf.fgqbhg.syhfu()
+        ybt('reebe: %f\a' % r)
+        erg = 1
 
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, re, errno, stat, time, math
-from bup import hashsplit, git, options, index, client
-from bup.helpers import *
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, er, reeab, fgng, gvzr, zngu
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, vaqrk, pyvrag
+sebz ohc.urycref vzcbeg *
 
 
-optspec = """
-bup save [-tc] [-n name] <filenames...>
+bcgfcrp = """
+ohc fnir [-gp] [-a anzr] <svyranzrf...>
 --
-r,remote=  remote repository path
-t,tree     output a tree id
-c,commit   output a commit id
-n,name=    name of backup set to update (if any)
-v,verbose  increase log output (can be used more than once)
-q,quiet    don't show progress meter
-smaller=   only back up files smaller than n bytes
+e,erzbgr=  erzbgr ercbfvgbel cngu
+g,gerr     bhgchg n gerr vq
+p,pbzzvg   bhgchg n pbzzvg vq
+a,anzr=    anzr bs onpxhc frg gb hcqngr (vs nal)
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
+d,dhvrg    qba'g fubj cebterff zrgre
+fznyyre=   bayl onpx hc svyrf fznyyre guna a olgrf
 """
-o = options.Options('bup save', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-if not (opt.tree or opt.commit or opt.name):
-    o.fatal("use one or more of -t, -c, -n")
-if not extra:
-    o.fatal("no filenames given")
-
-opt.progress = (istty and not opt.quiet)
-opt.smaller = parse_num(opt.smaller or 0)
-
-is_reverse = os.environ.get('BUP_SERVER_REVERSE')
-if is_reverse and opt.remote:
-    o.fatal("don't use -r in reverse mode; it's automatic")
-
-refname = opt.name and 'refs/heads/%s' % opt.name or None
-if opt.remote or is_reverse:
-    cli = client.Client(opt.remote)
-    oldref = refname and cli.read_ref(refname) or None
-    w = cli.new_packwriter()
-else:
-    cli = None
-    oldref = refname and git.read_ref(refname) or None
-    w = git.PackWriter()
-
-handle_ctrl_c()
-
-
-def eatslash(dir):
-    if dir.endswith('/'):
-        return dir[:-1]
-    else:
-        return dir
-
-
-parts = ['']
-shalists = [[]]
-
-def _push(part):
-    assert(part)
-    parts.append(part)
-    shalists.append([])
-
-def _pop(force_tree):
-    assert(len(parts) >= 1)
-    part = parts.pop()
-    shalist = shalists.pop()
-    tree = force_tree or w.new_tree(shalist)
-    if shalists:
-        shalists[-1].append(('40000', part, tree))
-    else:  # this was the toplevel, so put it back for sanity
-        shalists.append(shalist)
-    return tree
-
-lastremain = None
-def progress_report(n):
-    global count, subcount, lastremain
-    subcount += n
-    cc = count + subcount
-    pct = total and (cc*100.0/total) or 0
-    now = time.time()
-    elapsed = now - tstart
-    kps = elapsed and int(cc/1024./elapsed)
-    kps_frac = 10 ** int(math.log(kps+1, 10) - 1)
-    kps = int(kps/kps_frac)*kps_frac
-    if cc:
-        remain = elapsed*1.0/cc * (total-cc)
-    else:
-        remain = 0.0
-    if (lastremain and (remain > lastremain)
-          and ((remain - lastremain)/lastremain < 0.05)):
-        remain = lastremain
-    else:
-        lastremain = remain
-    hours = int(remain/60/60)
-    mins = int(remain/60 - hours*60)
-    secs = int(remain - hours*60*60 - mins*60)
-    if elapsed < 30:
-        remainstr = ''
-        kpsstr = ''
-    else:
-        kpsstr = '%dk/s' % kps
-        if hours:
-            remainstr = '%dh%dm' % (hours, mins)
-        elif mins:
-            remainstr = '%dm%d' % (mins, secs)
-        else:
-            remainstr = '%ds' % secs
-    progress('Saving: %.2f%% (%d/%dk, %d/%d files) %s %s\r'
-             % (pct, cc/1024, total/1024, fcount, ftotal,
-                remainstr, kpsstr))
-
-
-r = index.Reader(git.repo('bupindex'))
-
-def already_saved(ent):
-    return ent.is_valid() and w.exists(ent.sha) and ent.sha
-
-def wantrecurse_pre(ent):
-    return not already_saved(ent)
-
-def wantrecurse_during(ent):
-    return not already_saved(ent) or ent.sha_missing()
-
-total = ftotal = 0
-if opt.progress:
-    for (transname,ent) in r.filter(extra, wantrecurse=wantrecurse_pre):
-        if not (ftotal % 10024):
-            progress('Reading index: %d\r' % ftotal)
-        exists = ent.exists()
-        hashvalid = already_saved(ent)
-        ent.set_sha_missing(not hashvalid)
-        if not opt.smaller or ent.size < opt.smaller:
-            if exists and not hashvalid:
-                total += ent.size
-        ftotal += 1
-    progress('Reading index: %d, done.\n' % ftotal)
-    hashsplit.progress_callback = progress_report
-
-tstart = time.time()
-count = subcount = fcount = 0
-lastskip_name = None
-lastdir = ''
-for (transname,ent) in r.filter(extra, wantrecurse=wantrecurse_during):
-    (dir, file) = os.path.split(ent.name)
-    exists = (ent.flags & index.IX_EXISTS)
-    hashvalid = already_saved(ent)
-    wasmissing = ent.sha_missing()
-    oldsize = ent.size
-    if opt.verbose:
-        if not exists:
-            status = 'D'
-        elif not hashvalid:
-            if ent.sha == index.EMPTY_SHA:
-                status = 'A'
-            else:
-                status = 'M'
-        else:
-            status = ' '
-        if opt.verbose >= 2:
-            log('%s %-70s\n' % (status, ent.name))
-        elif not stat.S_ISDIR(ent.mode) and lastdir != dir:
-            if not lastdir.startswith(dir):
-                log('%s %-70s\n' % (status, os.path.join(dir, '')))
-            lastdir = dir
-
-    if opt.progress:
-        progress_report(0)
-    fcount += 1
+b = bcgvbaf.Bcgvbaf('ohc fnir', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+vs abg (bcg.gerr be bcg.pbzzvg be bcg.anzr):
+    b.sngny("hfr bar be zber bs -g, -p, -a")
+vs abg rkgen:
+    b.sngny("ab svyranzrf tvira")
+
+bcg.cebterff = (vfggl naq abg bcg.dhvrg)
+bcg.fznyyre = cnefr_ahz(bcg.fznyyre be 0)
+
+vf_erirefr = bf.raiveba.trg('OHC_FREIRE_ERIREFR')
+vs vf_erirefr naq bcg.erzbgr:
+    b.sngny("qba'g hfr -e va erirefr zbqr; vg'f nhgbzngvp")
+
+ersanzr = bcg.anzr naq 'ersf/urnqf/%f' % bcg.anzr be Abar
+vs bcg.erzbgr be vf_erirefr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    byqers = ersanzr naq pyv.ernq_ers(ersanzr) be Abar
+    j = pyv.arj_cnpxjevgre()
+ryfr:
+    pyv = Abar
+    byqers = ersanzr naq tvg.ernq_ers(ersanzr) be Abar
+    j = tvg.CnpxJevgre()
+
+unaqyr_pgey_p()
+
+
+qrs rngfynfu(qve):
+    vs qve.raqfjvgu('/'):
+        erghea qve[:-1]
+    ryfr:
+        erghea qve
+
+
+cnegf = ['']
+funyvfgf = [[]]
+
+qrs _chfu(cneg):
+    nffreg(cneg)
+    cnegf.nccraq(cneg)
+    funyvfgf.nccraq([])
+
+qrs _cbc(sbepr_gerr):
+    nffreg(yra(cnegf) >= 1)
+    cneg = cnegf.cbc()
+    funyvfg = funyvfgf.cbc()
+    gerr = sbepr_gerr be j.arj_gerr(funyvfg)
+    vs funyvfgf:
+        funyvfgf[-1].nccraq(('40000', cneg, gerr))
+    ryfr:  # guvf jnf gur gbcyriry, fb chg vg onpx sbe fnavgl
+        funyvfgf.nccraq(funyvfg)
+    erghea gerr
+
+ynfgerznva = Abar
+qrs cebterff_ercbeg(a):
+    tybony pbhag, fhopbhag, ynfgerznva
+    fhopbhag += a
+    pp = pbhag + fhopbhag
+    cpg = gbgny naq (pp*100.0/gbgny) be 0
+    abj = gvzr.gvzr()
+    ryncfrq = abj - gfgneg
+    xcf = ryncfrq naq vag(pp/1024./ryncfrq)
+    xcf_senp = 10 ** vag(zngu.ybt(xcf+1, 10) - 1)
+    xcf = vag(xcf/xcf_senp)*xcf_senp
+    vs pp:
+        erznva = ryncfrq*1.0/pp * (gbgny-pp)
+    ryfr:
+        erznva = 0.0
+    vs (ynfgerznva naq (erznva > ynfgerznva)
+          naq ((erznva - ynfgerznva)/ynfgerznva < 0.05)):
+        erznva = ynfgerznva
+    ryfr:
+        ynfgerznva = erznva
+    ubhef = vag(erznva/60/60)
+    zvaf = vag(erznva/60 - ubhef*60)
+    frpf = vag(erznva - ubhef*60*60 - zvaf*60)
+    vs ryncfrq < 30:
+        erznvafge = ''
+        xcffge = ''
+    ryfr:
+        xcffge = '%qx/f' % xcf
+        vs ubhef:
+            erznvafge = '%qu%qz' % (ubhef, zvaf)
+        ryvs zvaf:
+            erznvafge = '%qz%q' % (zvaf, frpf)
+        ryfr:
+            erznvafge = '%qf' % frpf
+    cebterff('Fnivat: %.2s%% (%q/%qx, %q/%q svyrf) %f %f\e'
+             % (cpg, pp/1024, gbgny/1024, spbhag, sgbgny,
+                erznvafge, xcffge))
+
+
+e = vaqrk.Ernqre(tvg.ercb('ohcvaqrk'))
+
+qrs nyernql_fnirq(rag):
+    erghea rag.vf_inyvq() naq j.rkvfgf(rag.fun) naq rag.fun
+
+qrs jnagerphefr_cer(rag):
+    erghea abg nyernql_fnirq(rag)
+
+qrs jnagerphefr_qhevat(rag):
+    erghea abg nyernql_fnirq(rag) be rag.fun_zvffvat()
+
+gbgny = sgbgny = 0
+vs bcg.cebterff:
+    sbe (genafanzr,rag) va e.svygre(rkgen, jnagerphefr=jnagerphefr_cer):
+        vs abg (sgbgny % 10024):
+            cebterff('Ernqvat vaqrk: %q\e' % sgbgny)
+        rkvfgf = rag.rkvfgf()
+        unfuinyvq = nyernql_fnirq(rag)
+        rag.frg_fun_zvffvat(abg unfuinyvq)
+        vs abg bcg.fznyyre be rag.fvmr < bcg.fznyyre:
+            vs rkvfgf naq abg unfuinyvq:
+                gbgny += rag.fvmr
+        sgbgny += 1
+    cebterff('Ernqvat vaqrk: %q, qbar.\a' % sgbgny)
+    unfufcyvg.cebterff_pnyyonpx = cebterff_ercbeg
+
+gfgneg = gvzr.gvzr()
+pbhag = fhopbhag = spbhag = 0
+ynfgfxvc_anzr = Abar
+ynfgqve = ''
+sbe (genafanzr,rag) va e.svygre(rkgen, jnagerphefr=jnagerphefr_qhevat):
+    (qve, svyr) = bf.cngu.fcyvg(rag.anzr)
+    rkvfgf = (rag.syntf & vaqrk.VK_RKVFGF)
+    unfuinyvq = nyernql_fnirq(rag)
+    jnfzvffvat = rag.fun_zvffvat()
+    byqfvmr = rag.fvmr
+    vs bcg.ireobfr:
+        vs abg rkvfgf:
+            fgnghf = 'Q'
+        ryvs abg unfuinyvq:
+            vs rag.fun == vaqrk.RZCGL_FUN:
+                fgnghf = 'N'
+            ryfr:
+                fgnghf = 'Z'
+        ryfr:
+            fgnghf = ' '
+        vs bcg.ireobfr >= 2:
+            ybt('%f %-70f\a' % (fgnghf, rag.anzr))
+        ryvs abg fgng.F_VFQVE(rag.zbqr) naq ynfgqve != qve:
+            vs abg ynfgqve.fgnegfjvgu(qve):
+                ybt('%f %-70f\a' % (fgnghf, bf.cngu.wbva(qve, '')))
+            ynfgqve = qve
+
+    vs bcg.cebterff:
+        cebterff_ercbeg(0)
+    spbhag += 1
     
-    if not exists:
-        continue
-    if opt.smaller and ent.size >= opt.smaller:
-        if exists and not hashvalid:
-            add_error('skipping large file "%s"' % ent.name)
-            lastskip_name = ent.name
-        continue
-
-    assert(dir.startswith('/'))
-    dirp = dir.split('/')
-    while parts > dirp:
-        _pop(force_tree = None)
-    if dir != '/':
-        for part in dirp[len(parts):]:
-            _push(part)
-
-    if not file:
-        # no filename portion means this is a subdir.  But
-        # sub/parentdirectories already handled in the pop/push() part above.
-        oldtree = already_saved(ent) # may be None
-        newtree = _pop(force_tree = oldtree)
-        if not oldtree:
-            if lastskip_name and lastskip_name.startswith(ent.name):
-                ent.invalidate()
-            else:
-                ent.validate(040000, newtree)
-            ent.repack()
-        if exists and wasmissing:
-            count += oldsize
-        continue
-
-    # it's not a directory
-    id = None
-    if hashvalid:
-        mode = '%o' % ent.gitmode
-        id = ent.sha
-        shalists[-1].append((mode
-                             git.mangle_name(file, ent.mode, ent.gitmode),
-                             id))
-    else:
-        if stat.S_ISREG(ent.mode):
-            try:
-                f = hashsplit.open_noatime(ent.name)
-            except IOError, e:
-                add_error(e)
-                lastskip_name = ent.name
-            except OSError, e:
-                add_error(e)
-                lastskip_name = ent.name
-            else:
-                (mode, id) = hashsplit.split_to_blob_or_tree(w, [f])
-        else:
-            if stat.S_ISDIR(ent.mode):
-                assert(0)  # handled above
-            elif stat.S_ISLNK(ent.mode):
-                try:
-                    rl = os.readlink(ent.name)
-                except OSError, e:
-                    add_error(e)
-                    lastskip_name = ent.name
-                except IOError, e:
-                    add_error(e)
-                    lastskip_name = ent.name
-                else:
-                    (mode, id) = ('120000', w.new_blob(rl))
-            else:
-                add_error(Exception('skipping special file "%s"' % ent.name))
-                lastskip_name = ent.name
-        if id:
-            ent.validate(int(mode, 8), id)
-            ent.repack()
-            shalists[-1].append((mode,
-                                 git.mangle_name(file, ent.mode, ent.gitmode),
-                                 id))
-    if exists and wasmissing:
-        count += oldsize
-        subcount = 0
-
-
-if opt.progress:
-    pct = total and count*100.0/total or 100
-    progress('Saving: %.2f%% (%d/%dk, %d/%d files), done.    \n'
-             % (pct, count/1024, total/1024, fcount, ftotal))
-
-while len(parts) > 1:
-    _pop(force_tree = None)
-assert(len(shalists) == 1)
-tree = w.new_tree(shalists[-1])
-if opt.tree:
-    print tree.encode('hex')
-if opt.commit or opt.name:
-    msg = 'bup save\n\nGenerated by command:\n%r' % sys.argv
-    ref = opt.name and ('refs/heads/%s' % opt.name) or None
-    commit = w.new_commit(oldref, tree, msg)
-    if opt.commit:
-        print commit.encode('hex')
-
-w.close()  # must close before we can update the ref
+    vs abg rkvfgf:
+        pbagvahr
+    vs bcg.fznyyre naq rag.fvmr >= bcg.fznyyre:
+        vs rkvfgf naq abg unfuinyvq:
+            nqq_reebe('fxvccvat ynetr svyr "%f"' % rag.anzr)
+            ynfgfxvc_anzr = rag.anzr
+        pbagvahr
+
+    nffreg(qve.fgnegfjvgu('/'))
+    qvec = qve.fcyvg('/')
+    juvyr cnegf > qvec:
+        _cbc(sbepr_gerr = Abar)
+    vs qve != '/':
+        sbe cneg va qvec[yra(cnegf):]:
+            _chfu(cneg)
+
+    vs abg svyr:
+        # ab svyranzr cbegvba zrnaf guvf vf n fhoqve.  Ohg
+        # fho/cneragqverpgbevrf nyernql unaqyrq va gur cbc/chfu() cneg nobir.
+        byqgerr = nyernql_fnirq(rag) # znl or Abar
+        arjgerr = _cbc(sbepr_gerr = byqgerr)
+        vs abg byqgerr:
+            vs ynfgfxvc_anzr naq ynfgfxvc_anzr.fgnegfjvgu(rag.anzr):
+                rag.vainyvqngr()
+            ryfr:
+                rag.inyvqngr(040000, arjgerr)
+            rag.ercnpx()
+        vs rkvfgf naq jnfzvffvat:
+            pbhag += byqfvmr
+        pbagvahr
+
+    # vg'f abg n qverpgbel
+    vq = Abar
+    vs unfuinyvq:
+        zbqr = '%b' % rag.tvgzbqr
+        vq = rag.fun
+        funyvfgf[-1].nccraq((zbqr
+                             tvg.znatyr_anzr(svyr, rag.zbqr, rag.tvgzbqr),
+                             vq))
+    ryfr:
+        vs fgng.F_VFERT(rag.zbqr):
+            gel:
+                s = unfufcyvg.bcra_abngvzr(rag.anzr)
+            rkprcg VBReebe, r:
+                nqq_reebe(r)
+                ynfgfxvc_anzr = rag.anzr
+            rkprcg BFReebe, r:
+                nqq_reebe(r)
+                ynfgfxvc_anzr = rag.anzr
+            ryfr:
+                (zbqr, vq) = unfufcyvg.fcyvg_gb_oybo_be_gerr(j, [s])
+        ryfr:
+            vs fgng.F_VFQVE(rag.zbqr):
+                nffreg(0)  # unaqyrq nobir
+            ryvs fgng.F_VFYAX(rag.zbqr):
+                gel:
+                    ey = bf.ernqyvax(rag.anzr)
+                rkprcg BFReebe, r:
+                    nqq_reebe(r)
+                    ynfgfxvc_anzr = rag.anzr
+                rkprcg VBReebe, r:
+                    nqq_reebe(r)
+                    ynfgfxvc_anzr = rag.anzr
+                ryfr:
+                    (zbqr, vq) = ('120000', j.arj_oybo(ey))
+            ryfr:
+                nqq_reebe(Rkprcgvba('fxvccvat fcrpvny svyr "%f"' % rag.anzr))
+                ynfgfxvc_anzr = rag.anzr
+        vs vq:
+            rag.inyvqngr(vag(zbqr, 8), vq)
+            rag.ercnpx()
+            funyvfgf[-1].nccraq((zbqr,
+                                 tvg.znatyr_anzr(svyr, rag.zbqr, rag.tvgzbqr),
+                                 vq))
+    vs rkvfgf naq jnfzvffvat:
+        pbhag += byqfvmr
+        fhopbhag = 0
+
+
+vs bcg.cebterff:
+    cpg = gbgny naq pbhag*100.0/gbgny be 100
+    cebterff('Fnivat: %.2s%% (%q/%qx, %q/%q svyrf), qbar.    \a'
+             % (cpg, pbhag/1024, gbgny/1024, spbhag, sgbgny))
+
+juvyr yra(cnegf) > 1:
+    _cbc(sbepr_gerr = Abar)
+nffreg(yra(funyvfgf) == 1)
+gerr = j.arj_gerr(funyvfgf[-1])
+vs bcg.gerr:
+    cevag gerr.rapbqr('urk')
+vs bcg.pbzzvg be bcg.anzr:
+    zft = 'ohc fnir\a\aTrarengrq ol pbzznaq:\a%e' % flf.neti
+    ers = bcg.anzr naq ('ersf/urnqf/%f' % bcg.anzr) be Abar
+    pbzzvg = j.arj_pbzzvg(byqers, gerr, zft)
+    vs bcg.pbzzvg:
+        cevag pbzzvg.rapbqr('urk')
+
+j.pybfr()  # zhfg pybfr orsber jr pna hcqngr gur ers
         
-if opt.name:
-    if cli:
-        cli.update_ref(refname, commit, oldref)
-    else:
-        git.update_ref(refname, commit, oldref)
-
-if cli:
-    cli.close()
-
-if saved_errors:
-    log('WARNING: %d errors encountered while saving.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, time
-from bup import options
-
-optspec = """
-bup tick
+vs bcg.anzr:
+    vs pyv:
+        pyv.hcqngr_ers(ersanzr, pbzzvg, byqers)
+    ryfr:
+        tvg.hcqngr_ers(ersanzr, pbzzvg, byqers)
+
+vs pyv:
+    pyv.pybfr()
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq juvyr fnivat.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc gvpx
 """
-o = options.Options('bup tick', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-t = time.time()
-tleft = 1 - (t - int(t))
-time.sleep(tleft)
-#!/usr/bin/env python
-import os, sys, stat, time
-from bup import options, git, index, drecurse
-from bup.helpers import *
-
-
-def merge_indexes(out, r1, r2):
-    for e in index.MergeIter([r1, r2]):
-        # FIXME: shouldn't we remove deleted entries eventually?  When?
-        out.add_ixentry(e)
-
-
-class IterHelper:
-    def __init__(self, l):
-        self.i = iter(l)
-        self.cur = None
-        self.next()
-
-    def next(self):
-        try:
-            self.cur = self.i.next()
-        except StopIteration:
-            self.cur = None
-        return self.cur
-
-
-def check_index(reader):
-    try:
-        log('check: checking forward iteration...\n')
-        e = None
-        d = {}
-        for e in reader.forward_iter():
-            if e.children_n:
-                if opt.verbose:
-                    log('%08x+%-4d %r\n' % (e.children_ofs, e.children_n,
-                                            e.name))
-                assert(e.children_ofs)
-                assert(e.name.endswith('/'))
-                assert(not d.get(e.children_ofs))
-                d[e.children_ofs] = 1
-            if e.flags & index.IX_HASHVALID:
-                assert(e.sha != index.EMPTY_SHA)
-                assert(e.gitmode)
-        assert(not e or e.name == '/')  # last entry is *always* /
-        log('check: checking normal iteration...\n')
-        last = None
-        for e in reader:
-            if last:
-                assert(last > e.name)
-            last = e.name
-    except:
-        log('index error! at %r\n' % e)
-        raise
-    log('check: passed.\n')
-
-
-def update_index(top):
-    ri = index.Reader(indexfile)
-    wi = index.Writer(indexfile)
-    rig = IterHelper(ri.iter(name=top))
-    tstart = int(time.time())
-
-    hashgen = None
-    if opt.fake_valid:
-        def hashgen(name):
-            return (0100644, index.FAKE_SHA)
-
-    total = 0
-    for (path,pst) in drecurse.recursive_dirlist([top], xdev=opt.xdev):
-        if opt.verbose>=2 or (opt.verbose==1 and stat.S_ISDIR(pst.st_mode)):
-            sys.stdout.write('%s\n' % path)
-            sys.stdout.flush()
-            progress('Indexing: %d\r' % total)
-        elif not (total % 128):
-            progress('Indexing: %d\r' % total)
-        total += 1
-        while rig.cur and rig.cur.name > path:  # deleted paths
-            if rig.cur.exists():
-                rig.cur.set_deleted()
-                rig.cur.repack()
-            rig.next()
-        if rig.cur and rig.cur.name == path:    # paths that already existed
-            if pst:
-                rig.cur.from_stat(pst, tstart)
-            if not (rig.cur.flags & index.IX_HASHVALID):
-                if hashgen:
-                    (rig.cur.gitmode, rig.cur.sha) = hashgen(path)
-                    rig.cur.flags |= index.IX_HASHVALID
-            if opt.fake_invalid:
-                rig.cur.invalidate()
-            rig.cur.repack()
-            rig.next()
-        else:  # new paths
-            wi.add(path, pst, hashgen = hashgen)
-    progress('Indexing: %d, done.\n' % total)
+b = bcgvbaf.Bcgvbaf('ohc gvpx', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+g = gvzr.gvzr()
+gyrsg = 1 - (g - vag(g))
+gvzr.fyrrc(gyrsg)
+#!/hfe/ova/rai clguba
+vzcbeg bf, flf, fgng, gvzr
+sebz ohc vzcbeg bcgvbaf, tvg, vaqrk, qerphefr
+sebz ohc.urycref vzcbeg *
+
+
+qrs zretr_vaqrkrf(bhg, e1, e2):
+    sbe r va vaqrk.ZretrVgre([e1, e2]):
+        # SVKZR: fubhyqa'g jr erzbir qryrgrq ragevrf riraghnyyl?  Jura?
+        bhg.nqq_vkragel(r)
+
+
+pynff VgreUrycre:
+    qrs __vavg__(frys, y):
+        frys.v = vgre(y)
+        frys.phe = Abar
+        frys.arkg()
+
+    qrs arkg(frys):
+        gel:
+            frys.phe = frys.v.arkg()
+        rkprcg FgbcVgrengvba:
+            frys.phe = Abar
+        erghea frys.phe
+
+
+qrs purpx_vaqrk(ernqre):
+    gel:
+        ybt('purpx: purpxvat sbejneq vgrengvba...\a')
+        r = Abar
+        q = {}
+        sbe r va ernqre.sbejneq_vgre():
+            vs r.puvyqera_a:
+                vs bcg.ireobfr:
+                    ybt('%08k+%-4q %e\a' % (r.puvyqera_bsf, r.puvyqera_a,
+                                            r.anzr))
+                nffreg(r.puvyqera_bsf)
+                nffreg(r.anzr.raqfjvgu('/'))
+                nffreg(abg q.trg(r.puvyqera_bsf))
+                q[r.puvyqera_bsf] = 1
+            vs r.syntf & vaqrk.VK_UNFUINYVQ:
+                nffreg(r.fun != vaqrk.RZCGL_FUN)
+                nffreg(r.tvgzbqr)
+        nffreg(abg r be r.anzr == '/')  # ynfg ragel vf *nyjnlf* /
+        ybt('purpx: purpxvat abezny vgrengvba...\a')
+        ynfg = Abar
+        sbe r va ernqre:
+            vs ynfg:
+                nffreg(ynfg > r.anzr)
+            ynfg = r.anzr
+    rkprcg:
+        ybt('vaqrk reebe! ng %e\a' % r)
+        envfr
+    ybt('purpx: cnffrq.\a')
+
+
+qrs hcqngr_vaqrk(gbc):
+    ev = vaqrk.Ernqre(vaqrksvyr)
+    jv = vaqrk.Jevgre(vaqrksvyr)
+    evt = VgreUrycre(ev.vgre(anzr=gbc))
+    gfgneg = vag(gvzr.gvzr())
+
+    unfutra = Abar
+    vs bcg.snxr_inyvq:
+        qrs unfutra(anzr):
+            erghea (0100644, vaqrk.SNXR_FUN)
+
+    gbgny = 0
+    sbe (cngu,cfg) va qerphefr.erphefvir_qveyvfg([gbc], kqri=bcg.kqri):
+        vs bcg.ireobfr>=2 be (bcg.ireobfr==1 naq fgng.F_VFQVE(cfg.fg_zbqr)):
+            flf.fgqbhg.jevgr('%f\a' % cngu)
+            flf.fgqbhg.syhfu()
+            cebterff('Vaqrkvat: %q\e' % gbgny)
+        ryvs abg (gbgny % 128):
+            cebterff('Vaqrkvat: %q\e' % gbgny)
+        gbgny += 1
+        juvyr evt.phe naq evt.phe.anzr > cngu:  # qryrgrq cnguf
+            vs evt.phe.rkvfgf():
+                evt.phe.frg_qryrgrq()
+                evt.phe.ercnpx()
+            evt.arkg()
+        vs evt.phe naq evt.phe.anzr == cngu:    # cnguf gung nyernql rkvfgrq
+            vs cfg:
+                evt.phe.sebz_fgng(cfg, gfgneg)
+            vs abg (evt.phe.syntf & vaqrk.VK_UNFUINYVQ):
+                vs unfutra:
+                    (evt.phe.tvgzbqr, evt.phe.fun) = unfutra(cngu)
+                    evt.phe.syntf |= vaqrk.VK_UNFUINYVQ
+            vs bcg.snxr_vainyvq:
+                evt.phe.vainyvqngr()
+            evt.phe.ercnpx()
+            evt.arkg()
+        ryfr:  # arj cnguf
+            jv.nqq(cngu, cfg, unfutra = unfutra)
+    cebterff('Vaqrkvat: %q, qbar.\a' % gbgny)
     
-    if ri.exists():
-        ri.save()
-        wi.flush()
-        if wi.count:
-            wr = wi.new_reader()
-            if opt.check:
-                log('check: before merging: oldfile\n')
-                check_index(ri)
-                log('check: before merging: newfile\n')
-                check_index(wr)
-            mi = index.Writer(indexfile)
-            merge_indexes(mi, ri, wr)
-            ri.close()
-            mi.close()
-            wr.close()
-        wi.abort()
-    else:
-        wi.close()
-
-
-optspec = """
-bup index <-p|m|u> [options...] <filenames...>
+    vs ev.rkvfgf():
+        ev.fnir()
+        jv.syhfu()
+        vs jv.pbhag:
+            je = jv.arj_ernqre()
+            vs bcg.purpx:
+                ybt('purpx: orsber zretvat: byqsvyr\a')
+                purpx_vaqrk(ev)
+                ybt('purpx: orsber zretvat: arjsvyr\a')
+                purpx_vaqrk(je)
+            zv = vaqrk.Jevgre(vaqrksvyr)
+            zretr_vaqrkrf(zv, ev, je)
+            ev.pybfr()
+            zv.pybfr()
+            je.pybfr()
+        jv.nobeg()
+    ryfr:
+        jv.pybfr()
+
+
+bcgfcrp = """
+ohc vaqrk <-c|z|h> [bcgvbaf...] <svyranzrf...>
 --
-p,print    print the index entries for the given names (also works with -u)
-m,modified print only added/deleted/modified files (implies -p)
-s,status   print each filename with a status char (A/M/D) (implies -p)
-H,hash     print the hash for each object next to its name (implies -p)
-l,long     print more information about each file
-u,update   (recursively) update the index entries for the given filenames
-x,xdev,one-file-system  don't cross filesystem boundaries
-fake-valid mark all index entries as up-to-date even if they aren't
-fake-invalid mark all index entries as invalid
-check      carefully check index file integrity
-f,indexfile=  the name of the index file (default 'index')
-v,verbose  increase log output (can be used more than once)
+c,cevag    cevag gur vaqrk ragevrf sbe gur tvira anzrf (nyfb jbexf jvgu -h)
+z,zbqvsvrq cevag bayl nqqrq/qryrgrq/zbqvsvrq svyrf (vzcyvrf -c)
+f,fgnghf   cevag rnpu svyranzr jvgu n fgnghf pune (N/Z/Q) (vzcyvrf -c)
+U,unfu     cevag gur unfu sbe rnpu bowrpg arkg gb vgf anzr (vzcyvrf -c)
+y,ybat     cevag zber vasbezngvba nobhg rnpu svyr
+h,hcqngr   (erphefviryl) hcqngr gur vaqrk ragevrf sbe gur tvira svyranzrf
+k,kqri,bar-svyr-flfgrz  qba'g pebff svyrflfgrz obhaqnevrf
+snxr-inyvq znex nyy vaqrk ragevrf nf hc-gb-qngr rira vs gurl nera'g
+snxr-vainyvq znex nyy vaqrk ragevrf nf vainyvq
+purpx      pnershyyl purpx vaqrk svyr vagrtevgl
+s,vaqrksvyr=  gur anzr bs gur vaqrk svyr (qrsnhyg 'vaqrk')
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
 """
-o = options.Options('bup index', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if not (opt.modified or opt['print'] or opt.status or opt.update or opt.check):
-    o.fatal('supply one or more of -p, -s, -m, -u, or --check')
-if (opt.fake_valid or opt.fake_invalid) and not opt.update:
-    o.fatal('--fake-{in,}valid are meaningless without -u')
-if opt.fake_valid and opt.fake_invalid:
-    o.fatal('--fake-valid is incompatible with --fake-invalid')
-
-git.check_repo_or_die()
-indexfile = opt.indexfile or git.repo('bupindex')
-
-handle_ctrl_c()
-
-if opt.check:
-    log('check: starting initial check.\n')
-    check_index(index.Reader(indexfile))
-
-paths = index.reduce_paths(extra)
-
-if opt.update:
-    if not paths:
-        o.fatal('update (-u) requested but no paths given')
-    for (rp,path) in paths:
-        update_index(rp)
-
-if opt['print'] or opt.status or opt.modified:
-    for (name, ent) in index.Reader(indexfile).filter(extra or ['']):
-        if (opt.modified 
-            and (ent.is_valid() or ent.is_deleted() or not ent.mode)):
-            continue
-        line = ''
-        if opt.status:
-            if ent.is_deleted():
-                line += 'D '
-            elif not ent.is_valid():
-                if ent.sha == index.EMPTY_SHA:
-                    line += 'A '
-                else:
-                    line += 'M '
-            else:
-                line += '  '
-        if opt.hash:
-            line += ent.sha.encode('hex') + ' '
-        if opt.long:
-            line += "%7s %7s " % (oct(ent.mode), oct(ent.gitmode))
-        print line + (name or './')
-
-if opt.check and (opt['print'] or opt.status or opt.modified or opt.update):
-    log('check: starting final check.\n')
-    check_index(index.Reader(indexfile))
-
-if saved_errors:
-    log('WARNING: %d errors encountered.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, os, struct
-from bup import options, helpers
-
-optspec = """
-bup rbackup-server
+b = bcgvbaf.Bcgvbaf('ohc vaqrk', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs abg (bcg.zbqvsvrq be bcg['cevag'] be bcg.fgnghf be bcg.hcqngr be bcg.purpx):
+    b.sngny('fhccyl bar be zber bs -c, -f, -z, -h, be --purpx')
+vs (bcg.snxr_inyvq be bcg.snxr_vainyvq) naq abg bcg.hcqngr:
+    b.sngny('--snxr-{va,}inyvq ner zrnavatyrff jvgubhg -h')
+vs bcg.snxr_inyvq naq bcg.snxr_vainyvq:
+    b.sngny('--snxr-inyvq vf vapbzcngvoyr jvgu --snxr-vainyvq')
+
+tvg.purpx_ercb_be_qvr()
+vaqrksvyr = bcg.vaqrksvyr be tvg.ercb('ohcvaqrk')
+
+unaqyr_pgey_p()
+
+vs bcg.purpx:
+    ybt('purpx: fgnegvat vavgvny purpx.\a')
+    purpx_vaqrk(vaqrk.Ernqre(vaqrksvyr))
+
+cnguf = vaqrk.erqhpr_cnguf(rkgen)
+
+vs bcg.hcqngr:
+    vs abg cnguf:
+        b.sngny('hcqngr (-h) erdhrfgrq ohg ab cnguf tvira')
+    sbe (ec,cngu) va cnguf:
+        hcqngr_vaqrk(ec)
+
+vs bcg['cevag'] be bcg.fgnghf be bcg.zbqvsvrq:
+    sbe (anzr, rag) va vaqrk.Ernqre(vaqrksvyr).svygre(rkgen be ['']):
+        vs (bcg.zbqvsvrq 
+            naq (rag.vf_inyvq() be rag.vf_qryrgrq() be abg rag.zbqr)):
+            pbagvahr
+        yvar = ''
+        vs bcg.fgnghf:
+            vs rag.vf_qryrgrq():
+                yvar += 'Q '
+            ryvs abg rag.vf_inyvq():
+                vs rag.fun == vaqrk.RZCGL_FUN:
+                    yvar += 'N '
+                ryfr:
+                    yvar += 'Z '
+            ryfr:
+                yvar += '  '
+        vs bcg.unfu:
+            yvar += rag.fun.rapbqr('urk') + ' '
+        vs bcg.ybat:
+            yvar += "%7f %7f " % (bpg(rag.zbqr), bpg(rag.tvgzbqr))
+        cevag yvar + (anzr be './')
+
+vs bcg.purpx naq (bcg['cevag'] be bcg.fgnghf be bcg.zbqvsvrq be bcg.hcqngr):
+    ybt('purpx: fgnegvat svany purpx.\a')
+    purpx_vaqrk(vaqrk.Ernqre(vaqrksvyr))
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgehpg
+sebz ohc vzcbeg bcgvbaf, urycref
+
+bcgfcrp = """
+ohc eonpxhc-freire
 --
-    This command is not intended to be run manually.
+    Guvf pbzznaq vf abg vagraqrq gb or eha znahnyyl.
 """
-o = options.Options('bup rbackup-server', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-if extra:
-    o.fatal('no arguments expected')
-
-# get the subcommand's argv.
-# Normally we could just pass this on the command line, but since we'll often
-# be getting called on the other end of an ssh pipe, which tends to mangle
-# argv (by sending it via the shell), this way is much safer.
-buf = sys.stdin.read(4)
-sz = struct.unpack('!I', buf)[0]
-assert(sz > 0)
-assert(sz < 1000000)
-buf = sys.stdin.read(sz)
-assert(len(buf) == sz)
-argv = buf.split('\0')
-
-# stdin/stdout are supposedly connected to 'bup server' that the caller
-# started for us (often on the other end of an ssh tunnel), so we don't want
-# to misuse them.  Move them out of the way, then replace stdout with
-# a pointer to stderr in case our subcommand wants to do something with it.
+b = bcgvbaf.Bcgvbaf('ohc eonpxhc-freire', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+# trg gur fhopbzznaq'f neti.
+# Abeznyyl jr pbhyq whfg cnff guvf ba gur pbzznaq yvar, ohg fvapr jr'yy bsgra
+# or trggvat pnyyrq ba gur bgure raq bs na ffu cvcr, juvpu graqf gb znatyr
+# neti (ol fraqvat vg ivn gur furyy), guvf jnl vf zhpu fnsre.
+ohs = flf.fgqva.ernq(4)
+fm = fgehpg.hacnpx('!V', ohs)[0]
+nffreg(fm > 0)
+nffreg(fm < 1000000)
+ohs = flf.fgqva.ernq(fm)
+nffreg(yra(ohs) == fm)
+neti = ohs.fcyvg('\0')
+
+# fgqva/fgqbhg ner fhccbfrqyl pbaarpgrq gb 'ohc freire' gung gur pnyyre
+# fgnegrq sbe hf (bsgra ba gur bgure raq bs na ffu ghaary), fb jr qba'g jnag
+# gb zvfhfr gurz.  Zbir gurz bhg bs gur jnl, gura ercynpr fgqbhg jvgu
+# n cbvagre gb fgqree va pnfr bhe fhopbzznaq jnagf gb qb fbzrguvat jvgu vg.
 #
-# It might be nice to do the same with stdin, but my experiments showed that
-# ssh seems to make its child's stderr a readable-but-never-reads-anything
-# socket.  They really should have used shutdown(SHUT_WR) on the other end
-# of it, but probably didn't.  Anyway, it's too messy, so let's just make sure
-# anyone reading from stdin is disappointed.
+# Vg zvtug or avpr gb qb gur fnzr jvgu fgqva, ohg zl rkcrevzragf fubjrq gung
+# ffu frrzf gb znxr vgf puvyq'f fgqree n ernqnoyr-ohg-arire-ernqf-nalguvat
+# fbpxrg.  Gurl ernyyl fubhyq unir hfrq fuhgqbja(FUHG_JE) ba gur bgure raq
+# bs vg, ohg cebonoyl qvqa'g.  Naljnl, vg'f gbb zrffl, fb yrg'f whfg znxr fher
+# nalbar ernqvat sebz fgqva vf qvfnccbvagrq.
 #
-# (You can't just leave stdin/stdout "not open" by closing the file
-# descriptors.  Then the next file that opens is automatically assigned 0 or 1,
-# and people *trying* to read/write stdin/stdout get screwed.)
-os.dup2(0, 3)
-os.dup2(1, 4)
-os.dup2(2, 1)
-fd = os.open('/dev/null', os.O_RDONLY)
-os.dup2(fd, 0)
-os.close(fd)
-
-os.environ['BUP_SERVER_REVERSE'] = helpers.hostname()
-os.execvp(argv[0], argv)
-sys.exit(99)
-#!/usr/bin/env python
-import sys, os, glob, subprocess, time
-from bup import options, git
-from bup.helpers import *
-
-par2_ok = 0
-nullf = open('/dev/null')
-
-def debug(s):
-    if opt.verbose:
-        log(s)
-
-def run(argv):
-    # at least in python 2.5, using "stdout=2" or "stdout=sys.stderr" below
-    # doesn't actually work, because subprocess closes fd #2 right before
-    # execing for some reason.  So we work around it by duplicating the fd
-    # first.
-    fd = os.dup(2)  # copy stderr
-    try:
-        p = subprocess.Popen(argv, stdout=fd, close_fds=False)
-        return p.wait()
-    finally:
-        os.close(fd)
-
-def par2_setup():
-    global par2_ok
-    rv = 1
-    try:
-        p = subprocess.Popen(['par2', '--help'],
-                             stdout=nullf, stderr=nullf, stdin=nullf)
-        rv = p.wait()
-    except OSError:
-        log('fsck: warning: par2 not found; disabling recovery features.\n')
-    else:
-        par2_ok = 1
-
-def parv(lvl):
-    if opt.verbose >= lvl:
-        if istty:
-            return []
-        else:
-            return ['-q']
-    else:
-        return ['-qq']
-
-def par2_generate(base):
-    return run(['par2', 'create', '-n1', '-c200'] + parv(2)
-               + ['--', base, base+'.pack', base+'.idx'])
-
-def par2_verify(base):
-    return run(['par2', 'verify'] + parv(3) + ['--', base])
-
-def par2_repair(base):
-    return run(['par2', 'repair'] + parv(2) + ['--', base])
-
-def quick_verify(base):
-    f = open(base + '.pack', 'rb')
-    f.seek(-20, 2)
-    wantsum = f.read(20)
-    assert(len(wantsum) == 20)
-    f.seek(0)
-    sum = Sha1()
-    for b in chunkyreader(f, os.fstat(f.fileno()).st_size - 20):
-        sum.update(b)
-    if sum.digest() != wantsum:
-        raise ValueError('expected %r, got %r' % (wantsum.encode('hex'),
-                                                  sum.hexdigest()))
+# (Lbh pna'g whfg yrnir fgqva/fgqbhg "abg bcra" ol pybfvat gur svyr
+# qrfpevcgbef.  Gura gur arkg svyr gung bcraf vf nhgbzngvpnyyl nffvtarq 0 be 1,
+# naq crbcyr *gelvat* gb ernq/jevgr fgqva/fgqbhg trg fperjrq.)
+bf.qhc2(0, 3)
+bf.qhc2(1, 4)
+bf.qhc2(2, 1)
+sq = bf.bcra('/qri/ahyy', bf.B_EQBAYL)
+bf.qhc2(sq, 0)
+bf.pybfr(sq)
+
+bf.raiveba['OHC_FREIRE_ERIREFR'] = urycref.ubfganzr()
+bf.rkrpic(neti[0], neti)
+flf.rkvg(99)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, tybo, fhocebprff, gvzr
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+cne2_bx = 0
+ahyys = bcra('/qri/ahyy')
+
+qrs qroht(f):
+    vs bcg.ireobfr:
+        ybt(f)
+
+qrs eha(neti):
+    # ng yrnfg va clguba 2.5, hfvat "fgqbhg=2" be "fgqbhg=flf.fgqree" orybj
+    # qbrfa'g npghnyyl jbex, orpnhfr fhocebprff pybfrf sq #2 evtug orsber
+    # rkrpvat sbe fbzr ernfba.  Fb jr jbex nebhaq vg ol qhcyvpngvat gur sq
+    # svefg.
+    sq = bf.qhc(2)  # pbcl fgqree
+    gel:
+        c = fhocebprff.Cbcra(neti, fgqbhg=sq, pybfr_sqf=Snyfr)
+        erghea c.jnvg()
+    svanyyl:
+        bf.pybfr(sq)
+
+qrs cne2_frghc():
+    tybony cne2_bx
+    ei = 1
+    gel:
+        c = fhocebprff.Cbcra(['cne2', '--uryc'],
+                             fgqbhg=ahyys, fgqree=ahyys, fgqva=ahyys)
+        ei = c.jnvg()
+    rkprcg BFReebe:
+        ybt('sfpx: jneavat: cne2 abg sbhaq; qvfnoyvat erpbirel srngherf.\a')
+    ryfr:
+        cne2_bx = 1
+
+qrs cnei(yiy):
+    vs bcg.ireobfr >= yiy:
+        vs vfggl:
+            erghea []
+        ryfr:
+            erghea ['-d']
+    ryfr:
+        erghea ['-dd']
+
+qrs cne2_trarengr(onfr):
+    erghea eha(['cne2', 'perngr', '-a1', '-p200'] + cnei(2)
+               + ['--', onfr, onfr+'.cnpx', onfr+'.vqk'])
+
+qrs cne2_irevsl(onfr):
+    erghea eha(['cne2', 'irevsl'] + cnei(3) + ['--', onfr])
+
+qrs cne2_ercnve(onfr):
+    erghea eha(['cne2', 'ercnve'] + cnei(2) + ['--', onfr])
+
+qrs dhvpx_irevsl(onfr):
+    s = bcra(onfr + '.cnpx', 'eo')
+    s.frrx(-20, 2)
+    jnagfhz = s.ernq(20)
+    nffreg(yra(jnagfhz) == 20)
+    s.frrx(0)
+    fhz = Fun1()
+    sbe o va puhaxlernqre(s, bf.sfgng(s.svyrab()).fg_fvmr - 20):
+        fhz.hcqngr(o)
+    vs fhz.qvtrfg() != jnagfhz:
+        envfr InyhrReebe('rkcrpgrq %e, tbg %e' % (jnagfhz.rapbqr('urk'),
+                                                  fhz.urkqvtrfg()))
         
 
-def git_verify(base):
-    if opt.quick:
-        try:
-            quick_verify(base)
-        except Exception, e:
-            debug('error: %s\n' % e)
-            return 1
-        return 0
-    else:
-        return run(['git', 'verify-pack', '--', base])
+qrs tvg_irevsl(onfr):
+    vs bcg.dhvpx:
+        gel:
+            dhvpx_irevsl(onfr)
+        rkprcg Rkprcgvba, r:
+            qroht('reebe: %f\a' % r)
+            erghea 1
+        erghea 0
+    ryfr:
+        erghea eha(['tvg', 'irevsl-cnpx', '--', onfr])
     
     
-def do_pack(base, last):
-    code = 0
-    if par2_ok and par2_exists and (opt.repair or not opt.generate):
-        vresult = par2_verify(base)
-        if vresult != 0:
-            if opt.repair:
-                rresult = par2_repair(base)
-                if rresult != 0:
-                    print '%s par2 repair: failed (%d)' % (last, rresult)
-                    code = rresult
-                else:
-                    print '%s par2 repair: succeeded (0)' % last
-                    code = 100
-            else:
-                print '%s par2 verify: failed (%d)' % (last, vresult)
-                code = vresult
-        else:
-            print '%s ok' % last
-    elif not opt.generate or (par2_ok and not par2_exists):
-        gresult = git_verify(base)
-        if gresult != 0:
-            print '%s git verify: failed (%d)' % (last, gresult)
-            code = gresult
-        else:
-            if par2_ok and opt.generate:
-                presult = par2_generate(base)
-                if presult != 0:
-                    print '%s par2 create: failed (%d)' % (last, presult)
-                    code = presult
-                else:
-                    print '%s ok' % last
-            else:
-                print '%s ok' % last
-    else:
-        assert(opt.generate and (not par2_ok or par2_exists))
-        debug('    skipped: par2 file already generated.\n')
-    return code
-
-
-optspec = """
-bup fsck [options...] [filenames...]
+qrs qb_cnpx(onfr, ynfg):
+    pbqr = 0
+    vs cne2_bx naq cne2_rkvfgf naq (bcg.ercnve be abg bcg.trarengr):
+        ierfhyg = cne2_irevsl(onfr)
+        vs ierfhyg != 0:
+            vs bcg.ercnve:
+                eerfhyg = cne2_ercnve(onfr)
+                vs eerfhyg != 0:
+                    cevag '%f cne2 ercnve: snvyrq (%q)' % (ynfg, eerfhyg)
+                    pbqr = eerfhyg
+                ryfr:
+                    cevag '%f cne2 ercnve: fhpprrqrq (0)' % ynfg
+                    pbqr = 100
+            ryfr:
+                cevag '%f cne2 irevsl: snvyrq (%q)' % (ynfg, ierfhyg)
+                pbqr = ierfhyg
+        ryfr:
+            cevag '%f bx' % ynfg
+    ryvs abg bcg.trarengr be (cne2_bx naq abg cne2_rkvfgf):
+        terfhyg = tvg_irevsl(onfr)
+        vs terfhyg != 0:
+            cevag '%f tvg irevsl: snvyrq (%q)' % (ynfg, terfhyg)
+            pbqr = terfhyg
+        ryfr:
+            vs cne2_bx naq bcg.trarengr:
+                cerfhyg = cne2_trarengr(onfr)
+                vs cerfhyg != 0:
+                    cevag '%f cne2 perngr: snvyrq (%q)' % (ynfg, cerfhyg)
+                    pbqr = cerfhyg
+                ryfr:
+                    cevag '%f bx' % ynfg
+            ryfr:
+                cevag '%f bx' % ynfg
+    ryfr:
+        nffreg(bcg.trarengr naq (abg cne2_bx be cne2_rkvfgf))
+        qroht('    fxvccrq: cne2 svyr nyernql trarengrq.\a')
+    erghea pbqr
+
+
+bcgfcrp = """
+ohc sfpx [bcgvbaf...] [svyranzrf...]
 --
-r,repair    attempt to repair errors using par2 (dangerous!)
-g,generate  generate auto-repair information using par2
-v,verbose   increase verbosity (can be used more than once)
-quick       just check pack sha1sum, don't use git verify-pack
-j,jobs=     run 'n' jobs in parallel
-par2-ok     immediately return 0 if par2 is ok, 1 if not
-disable-par2  ignore par2 even if it is available
+e,ercnve    nggrzcg gb ercnve reebef hfvat cne2 (qnatrebhf!)
+t,trarengr  trarengr nhgb-ercnve vasbezngvba hfvat cne2
+i,ireobfr   vapernfr ireobfvgl (pna or hfrq zber guna bapr)
+dhvpx       whfg purpx cnpx fun1fhz, qba'g hfr tvg irevsl-cnpx
+w,wbof=     eha 'a' wbof va cnenyyry
+cne2-bx     vzzrqvngryl erghea 0 vs cne2 vf bx, 1 vs abg
+qvfnoyr-cne2  vtaber cne2 rira vs vg vf ninvynoyr
 """
-o = options.Options('bup fsck', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-par2_setup()
-if opt.par2_ok:
-    if par2_ok:
-        sys.exit(0)  # 'true' in sh
-    else:
-        sys.exit(1)
-if opt.disable_par2:
-    par2_ok = 0
-
-git.check_repo_or_die()
-
-if not extra:
-    debug('fsck: No filenames given: checking all packs.\n')
-    extra = glob.glob(git.repo('objects/pack/*.pack'))
-
-code = 0
-count = 0
-outstanding = {}
-for name in extra:
-    if name.endswith('.pack'):
-        base = name[:-5]
-    elif name.endswith('.idx'):
-        base = name[:-4]
-    elif name.endswith('.par2'):
-        base = name[:-5]
-    elif os.path.exists(name + '.pack'):
-        base = name
-    else:
-        raise Exception('%s is not a pack file!' % name)
-    (dir,last) = os.path.split(base)
-    par2_exists = os.path.exists(base + '.par2')
-    if par2_exists and os.stat(base + '.par2').st_size == 0:
-        par2_exists = 0
-    sys.stdout.flush()
-    debug('fsck: checking %s (%s)\n
-          % (last, par2_ok and par2_exists and 'par2' or 'git'))
-    if not opt.verbose:
-        progress('fsck (%d/%d)\r' % (count, len(extra)))
+b = bcgvbaf.Bcgvbaf('ohc sfpx', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+cne2_frghc()
+vs bcg.cne2_bx:
+    vs cne2_bx:
+        flf.rkvg(0)  # 'gehr' va fu
+    ryfr:
+        flf.rkvg(1)
+vs bcg.qvfnoyr_cne2:
+    cne2_bx = 0
+
+tvg.purpx_ercb_be_qvr()
+
+vs abg rkgen:
+    qroht('sfpx: Ab svyranzrf tvira: purpxvat nyy cnpxf.\a')
+    rkgen = tybo.tybo(tvg.ercb('bowrpgf/cnpx/*.cnpx'))
+
+pbqr = 0
+pbhag = 0
+bhgfgnaqvat = {}
+sbe anzr va rkgen:
+    vs anzr.raqfjvgu('.cnpx'):
+        onfr = anzr[:-5]
+    ryvs anzr.raqfjvgu('.vqk'):
+        onfr = anzr[:-4]
+    ryvs anzr.raqfjvgu('.cne2'):
+        onfr = anzr[:-5]
+    ryvs bf.cngu.rkvfgf(anzr + '.cnpx'):
+        onfr = anzr
+    ryfr:
+        envfr Rkprcgvba('%f vf abg n cnpx svyr!' % anzr)
+    (qve,ynfg) = bf.cngu.fcyvg(onfr)
+    cne2_rkvfgf = bf.cngu.rkvfgf(onfr + '.cne2')
+    vs cne2_rkvfgf naq bf.fgng(onfr + '.cne2').fg_fvmr == 0:
+        cne2_rkvfgf = 0
+    flf.fgqbhg.syhfu()
+    qroht('sfpx: purpxvat %f (%f)\a
+          % (ynfg, cne2_bx naq cne2_rkvfgf naq 'cne2' be 'tvg'))
+    vs abg bcg.ireobfr:
+        cebterff('sfpx (%q/%q)\e' % (pbhag, yra(rkgen)))
     
-    if not opt.jobs:
-        nc = do_pack(base, last)
-        code = code or nc
-        count += 1
-    else:
-        while len(outstanding) >= opt.jobs:
-            (pid,nc) = os.wait()
-            nc >>= 8
-            if pid in outstanding:
-                del outstanding[pid]
-                code = code or nc
-                count += 1
-        pid = os.fork()
-        if pid:  # parent
-            outstanding[pid] = 1
-        else: # child
-            try:
-                sys.exit(do_pack(base, last))
-            except Exception, e:
-                log('exception: %r\n' % e)
-                sys.exit(99)
+    vs abg bcg.wbof:
+        ap = qb_cnpx(onfr, ynfg)
+        pbqr = pbqr be ap
+        pbhag += 1
+    ryfr:
+        juvyr yra(bhgfgnaqvat) >= bcg.wbof:
+            (cvq,ap) = bf.jnvg()
+            ap >>= 8
+            vs cvq va bhgfgnaqvat:
+                qry bhgfgnaqvat[cvq]
+                pbqr = pbqr be ap
+                pbhag += 1
+        cvq = bf.sbex()
+        vs cvq:  # cnerag
+            bhgfgnaqvat[cvq] = 1
+        ryfr: # puvyq
+            gel:
+                flf.rkvg(qb_cnpx(onfr, ynfg))
+            rkprcg Rkprcgvba, r:
+                ybt('rkprcgvba: %e\a' % r)
+                flf.rkvg(99)
                 
-while len(outstanding):
-    (pid,nc) = os.wait()
-    nc >>= 8
-    if pid in outstanding:
-        del outstanding[pid]
-        code = code or nc
-        count += 1
-    if not opt.verbose:
-        progress('fsck (%d/%d)\r' % (count, len(extra)))
-
-if not opt.verbose and istty:
-    log('fsck done.           \n')
-sys.exit(code)
-#!/usr/bin/env python
-import sys, os, struct, getopt, subprocess, signal
-from bup import options, ssh
-from bup.helpers import *
-
-optspec = """
-bup rbackup <hostname> index ...
-bup rbackup <hostname> save ...
-bup rbackup <hostname> split ...
+juvyr yra(bhgfgnaqvat):
+    (cvq,ap) = bf.jnvg()
+    ap >>= 8
+    vs cvq va bhgfgnaqvat:
+        qry bhgfgnaqvat[cvq]
+        pbqr = pbqr be ap
+        pbhag += 1
+    vs abg bcg.ireobfr:
+        cebterff('sfpx (%q/%q)\e' % (pbhag, yra(rkgen)))
+
+vs abg bcg.ireobfr naq vfggl:
+    ybt('sfpx qbar.           \a')
+flf.rkvg(pbqr)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgehpg, trgbcg, fhocebprff, fvtany
+sebz ohc vzcbeg bcgvbaf, ffu
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+ohc eonpxhc <ubfganzr> vaqrk ...
+ohc eonpxhc <ubfganzr> fnir ...
+ohc eonpxhc <ubfganzr> fcyvg ...
 """
-o = options.Options('bup rbackup', optspec, optfunc=getopt.getopt)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-if len(extra) < 2:
-    o.fatal('arguments expected')
-
-class SigException(Exception):
-    def __init__(self, signum):
-        self.signum = signum
-        Exception.__init__(self, 'signal %d received' % signum)
-def handler(signum, frame):
-    raise SigException(signum)
-
-signal.signal(signal.SIGTERM, handler)
-signal.signal(signal.SIGINT, handler)
-
-sp = None
-p = None
-ret = 99
-
-try:
-    hostname = extra[0]
-    argv = extra[1:]
-    p = ssh.connect(hostname, 'rbackup-server')
-
-    argvs = '\0'.join(['bup'] + argv)
-    p.stdin.write(struct.pack('!I', len(argvs)) + argvs)
-    p.stdin.flush()
-
-    main_exe = os.environ.get('BUP_MAIN_EXE') or sys.argv[0]
-    sp = subprocess.Popen([main_exe, 'server'], stdin=p.stdout, stdout=p.stdin)
-
-    p.stdin.close()
-    p.stdout.close()
-
-finally:
-    while 1:
-        # if we get a signal while waiting, we have to keep waiting, just
-        # in case our child doesn't die.
-        try:
-            ret = p.wait()
-            sp.wait()
-            break
-        except SigException, e:
-            log('\nbup rbackup: %s\n' % e)
-            os.kill(p.pid, e.signum)
-            ret = 84
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, os, re
-from bup import options
-
-optspec = """
-bup newliner
+b = bcgvbaf.Bcgvbaf('ohc eonpxhc', bcgfcrp, bcgshap=trgbcg.trgbcg)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+vs yra(rkgen) < 2:
+    b.sngny('nethzragf rkcrpgrq')
+
+pynff FvtRkprcgvba(Rkprcgvba):
+    qrs __vavg__(frys, fvtahz):
+        frys.fvtahz = fvtahz
+        Rkprcgvba.__vavg__(frys, 'fvtany %q erprvirq' % fvtahz)
+qrs unaqyre(fvtahz, senzr):
+    envfr FvtRkprcgvba(fvtahz)
+
+fvtany.fvtany(fvtany.FVTGREZ, unaqyre)
+fvtany.fvtany(fvtany.FVTVAG, unaqyre)
+
+fc = Abar
+c = Abar
+erg = 99
+
+gel:
+    ubfganzr = rkgen[0]
+    neti = rkgen[1:]
+    c = ffu.pbaarpg(ubfganzr, 'eonpxhc-freire')
+
+    netif = '\0'.wbva(['ohc'] + neti)
+    c.fgqva.jevgr(fgehpg.cnpx('!V', yra(netif)) + netif)
+    c.fgqva.syhfu()
+
+    znva_rkr = bf.raiveba.trg('OHC_ZNVA_RKR') be flf.neti[0]
+    fc = fhocebprff.Cbcra([znva_rkr, 'freire'], fgqva=c.fgqbhg, fgqbhg=c.fgqva)
+
+    c.fgqva.pybfr()
+    c.fgqbhg.pybfr()
+
+svanyyl:
+    juvyr 1:
+        # vs jr trg n fvtany juvyr jnvgvat, jr unir gb xrrc jnvgvat, whfg
+        # va pnfr bhe puvyq qbrfa'g qvr.
+        gel:
+            erg = c.jnvg()
+            fc.jnvg()
+            oernx
+        rkprcg FvtRkprcgvba, r:
+            ybt('\aohc eonpxhc: %f\a' % r)
+            bf.xvyy(c.cvq, r.fvtahz)
+            erg = 84
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, er
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc arjyvare
 """
-o = options.Options('bup newliner', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-r = re.compile(r'([\r\n])')
-lastlen = 0
-all = ''
-while 1:
-    l = r.split(all, 1)
-    if len(l) <= 1:
-        try:
-            b = os.read(sys.stdin.fileno(), 4096)
-        except KeyboardInterrupt:
-            break
-        if not b:
-            break
-        all += b
-    else:
-        assert(len(l) == 3)
-        (line, splitchar, all) = l
-        #splitchar = '\n'
-        sys.stdout.write('%-*s%s' % (lastlen, line, splitchar))
-        if splitchar == '\r':
-            lastlen = len(line)
-        else:
-            lastlen = 0
-        sys.stdout.flush()
-
-if lastlen or all:
-    sys.stdout.write('%-*s\n' % (lastlen, all))
-#!/usr/bin/env python
-import sys
-from bup import options, git, _hashsplit
-from bup.helpers import *
-
-
-optspec = """
-bup margin
+b = bcgvbaf.Bcgvbaf('ohc arjyvare', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+e = er.pbzcvyr(e'([\e\a])')
+ynfgyra = 0
+nyy = ''
+juvyr 1:
+    y = e.fcyvg(nyy, 1)
+    vs yra(y) <= 1:
+        gel:
+            o = bf.ernq(flf.fgqva.svyrab(), 4096)
+        rkprcg XrlobneqVagreehcg:
+            oernx
+        vs abg o:
+            oernx
+        nyy += o
+    ryfr:
+        nffreg(yra(y) == 3)
+        (yvar, fcyvgpune, nyy) = y
+        #fcyvgpune = '\a'
+        flf.fgqbhg.jevgr('%-*f%f' % (ynfgyra, yvar, fcyvgpune))
+        vs fcyvgpune == '\e':
+            ynfgyra = yra(yvar)
+        ryfr:
+            ynfgyra = 0
+        flf.fgqbhg.syhfu()
+
+vs ynfgyra be nyy:
+    flf.fgqbhg.jevgr('%-*f\a' % (ynfgyra, nyy))
+#!/hfe/ova/rai clguba
+vzcbeg flf
+sebz ohc vzcbeg bcgvbaf, tvg, _unfufcyvg
+sebz ohc.urycref vzcbeg *
+
+
+bcgfcrp = """
+ohc znetva
 """
-o = options.Options('bup margin', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-git.check_repo_or_die()
-#git.ignore_midx = 1
-
-mi = git.PackIdxList(git.repo('objects/pack'))
-last = '\0'*20
-longmatch = 0
-for i in mi:
-    if i == last:
-        continue
-    #assert(str(i) >= last)
-    pm = _hashsplit.bitmatch(last, i)
-    longmatch = max(longmatch, pm)
-    last = i
-print longmatch
-#!/usr/bin/env python
-from bup import options, drecurse
-from bup.helpers import *
-
-optspec = """
-bup drecurse <path>
+b = bcgvbaf.Bcgvbaf('ohc znetva', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+tvg.purpx_ercb_be_qvr()
+#tvg.vtaber_zvqk = 1
+
+zv = tvg.CnpxVqkYvfg(tvg.ercb('bowrpgf/cnpx'))
+ynfg = '\0'*20
+ybatzngpu = 0
+sbe v va zv:
+    vs v == ynfg:
+        pbagvahr
+    #nffreg(fge(v) >= ynfg)
+    cz = _unfufcyvg.ovgzngpu(ynfg, v)
+    ybatzngpu = znk(ybatzngpu, cz)
+    ynfg = v
+cevag ybatzngpu
+#!/hfe/ova/rai clguba
+sebz ohc vzcbeg bcgvbaf, qerphefr
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+ohc qerphefr <cngu>
 --
-x,xdev,one-file-system   don't cross filesystem boundaries
-q,quiet  don't actually print filenames
-profile  run under the python profiler
+k,kqri,bar-svyr-flfgrz   qba'g pebff svyrflfgrz obhaqnevrf
+d,dhvrg  qba'g npghnyyl cevag svyranzrf
+cebsvyr  eha haqre gur clguba cebsvyre
 """
-o = options.Options('bup drecurse', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one filename expected")
-
-it = drecurse.recursive_dirlist(extra, opt.xdev)
-if opt.profile:
-    import cProfile
-    def do_it():
-        for i in it:
-            pass
-    cProfile.run('do_it()')
-else:
-    if opt.quiet:
-        for i in it:
-            pass
-    else:
-        for (name,st) in it:
-            print name
-
-if saved_errors:
-    log('WARNING: %d errors encountered.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, time, struct
-from bup import hashsplit, git, options, client
-from bup.helpers import *
-from subprocess import PIPE
-
-
-optspec = """
-bup split [-tcb] [-n name] [--bench] [filenames...]
+b = bcgvbaf.Bcgvbaf('ohc qerphefr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar svyranzr rkcrpgrq")
+
+vg = qerphefr.erphefvir_qveyvfg(rkgen, bcg.kqri)
+vs bcg.cebsvyr:
+    vzcbeg pCebsvyr
+    qrs qb_vg():
+        sbe v va vg:
+            cnff
+    pCebsvyr.eha('qb_vg()')
+ryfr:
+    vs bcg.dhvrg:
+        sbe v va vg:
+            cnff
+    ryfr:
+        sbe (anzr,fg) va vg:
+            cevag anzr
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr, fgehpg
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+sebz fhocebprff vzcbeg CVCR
+
+
+bcgfcrp = """
+ohc fcyvg [-gpo] [-a anzr] [--orapu] [svyranzrf...]
 --
-r,remote=  remote repository path
-b,blobs    output a series of blob ids
-t,tree     output a tree id
-c,commit   output a commit id
-n,name=    name of backup set to update (if any)
-N,noop     don't actually save the data anywhere
-q,quiet    don't print progress messages
-v,verbose  increase log output (can be used more than once)
-copy       just copy input to output, hashsplitting along the way
-bench      print benchmark timings to stderr
-max-pack-size=  maximum bytes in a single pack
-max-pack-objects=  maximum number of objects in a single pack
-fanout=  maximum number of blobs in a single tree
+e,erzbgr=  erzbgr ercbfvgbel cngu
+o,oybof    bhgchg n frevrf bs oybo vqf
+g,gerr     bhgchg n gerr vq
+p,pbzzvg   bhgchg n pbzzvg vq
+a,anzr=    anzr bs onpxhc frg gb hcqngr (vs nal)
+A,abbc     qba'g npghnyyl fnir gur qngn naljurer
+d,dhvrg    qba'g cevag cebterff zrffntrf
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
+pbcl       whfg pbcl vachg gb bhgchg, unfufcyvggvat nybat gur jnl
+orapu      cevag orapuznex gvzvatf gb fgqree
+znk-cnpx-fvmr=  znkvzhz olgrf va n fvatyr cnpx
+znk-cnpx-bowrpgf=  znkvzhz ahzore bs bowrpgf va n fvatyr cnpx
+snabhg=  znkvzhz ahzore bs oybof va n fvatyr gerr
 """
-o = options.Options('bup split', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-if not (opt.blobs or opt.tree or opt.commit or opt.name or
-        opt.noop or opt.copy):
-    o.fatal("use one or more of -b, -t, -c, -n, -N, --copy")
-if (opt.noop or opt.copy) and (opt.blobs or opt.tree or 
-                               opt.commit or opt.name):
-    o.fatal('-N is incompatible with -b, -t, -c, -n')
-
-if opt.verbose >= 2:
-    git.verbose = opt.verbose - 1
-    opt.bench = 1
-if opt.max_pack_size:
-    hashsplit.max_pack_size = parse_num(opt.max_pack_size)
-if opt.max_pack_objects:
-    hashsplit.max_pack_objects = parse_num(opt.max_pack_objects)
-if opt.fanout:
-    hashsplit.fanout = parse_num(opt.fanout)
-if opt.blobs:
-    hashsplit.fanout = 0
-
-is_reverse = os.environ.get('BUP_SERVER_REVERSE')
-if is_reverse and opt.remote:
-    o.fatal("don't use -r in reverse mode; it's automatic")
-start_time = time.time()
-
-refname = opt.name and 'refs/heads/%s' % opt.name or None
-if opt.noop or opt.copy:
-    cli = w = oldref = None
-elif opt.remote or is_reverse:
-    cli = client.Client(opt.remote)
-    oldref = refname and cli.read_ref(refname) or None
-    w = cli.new_packwriter()
-else:
-    cli = None
-    oldref = refname and git.read_ref(refname) or None
-    w = git.PackWriter()
-
-files = extra and (open(fn) for fn in extra) or [sys.stdin]
-if w:
-    shalist = hashsplit.split_to_shalist(w, files)
-    tree = w.new_tree(shalist)
-else:
-    last = 0
-    for (blob, bits) in hashsplit.hashsplit_iter(files):
-        hashsplit.total_split += len(blob)
-        if opt.copy:
-            sys.stdout.write(str(blob))
-        megs = hashsplit.total_split/1024/1024
-        if not opt.quiet and last != megs:
-            progress('%d Mbytes read\r' % megs)
-            last = megs
-    progress('%d Mbytes read, done.\n' % megs)
-
-if opt.verbose:
-    log('\n')
-if opt.blobs:
-    for (mode,name,bin) in shalist:
-        print bin.encode('hex')
-if opt.tree:
-    print tree.encode('hex')
-if opt.commit or opt.name:
-    msg = 'bup split\n\nGenerated by command:\n%r' % sys.argv
-    ref = opt.name and ('refs/heads/%s' % opt.name) or None
-    commit = w.new_commit(oldref, tree, msg)
-    if opt.commit:
-        print commit.encode('hex')
-
-if w:
-    w.close()  # must close before we can update the ref
+b = bcgvbaf.Bcgvbaf('ohc fcyvg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+vs abg (bcg.oybof be bcg.gerr be bcg.pbzzvg be bcg.anzr be
+        bcg.abbc be bcg.pbcl):
+    b.sngny("hfr bar be zber bs -o, -g, -p, -a, -A, --pbcl")
+vs (bcg.abbc be bcg.pbcl) naq (bcg.oybof be bcg.gerr be 
+                               bcg.pbzzvg be bcg.anzr):
+    b.sngny('-A vf vapbzcngvoyr jvgu -o, -g, -p, -a')
+
+vs bcg.ireobfr >= 2:
+    tvg.ireobfr = bcg.ireobfr - 1
+    bcg.orapu = 1
+vs bcg.znk_cnpx_fvmr:
+    unfufcyvg.znk_cnpx_fvmr = cnefr_ahz(bcg.znk_cnpx_fvmr)
+vs bcg.znk_cnpx_bowrpgf:
+    unfufcyvg.znk_cnpx_bowrpgf = cnefr_ahz(bcg.znk_cnpx_bowrpgf)
+vs bcg.snabhg:
+    unfufcyvg.snabhg = cnefr_ahz(bcg.snabhg)
+vs bcg.oybof:
+    unfufcyvg.snabhg = 0
+
+vf_erirefr = bf.raiveba.trg('OHC_FREIRE_ERIREFR')
+vs vf_erirefr naq bcg.erzbgr:
+    b.sngny("qba'g hfr -e va erirefr zbqr; vg'f nhgbzngvp")
+fgneg_gvzr = gvzr.gvzr()
+
+ersanzr = bcg.anzr naq 'ersf/urnqf/%f' % bcg.anzr be Abar
+vs bcg.abbc be bcg.pbcl:
+    pyv = j = byqers = Abar
+ryvs bcg.erzbgr be vf_erirefr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    byqers = ersanzr naq pyv.ernq_ers(ersanzr) be Abar
+    j = pyv.arj_cnpxjevgre()
+ryfr:
+    pyv = Abar
+    byqers = ersanzr naq tvg.ernq_ers(ersanzr) be Abar
+    j = tvg.CnpxJevgre()
+
+svyrf = rkgen naq (bcra(sa) sbe sa va rkgen) be [flf.fgqva]
+vs j:
+    funyvfg = unfufcyvg.fcyvg_gb_funyvfg(j, svyrf)
+    gerr = j.arj_gerr(funyvfg)
+ryfr:
+    ynfg = 0
+    sbe (oybo, ovgf) va unfufcyvg.unfufcyvg_vgre(svyrf):
+        unfufcyvg.gbgny_fcyvg += yra(oybo)
+        vs bcg.pbcl:
+            flf.fgqbhg.jevgr(fge(oybo))
+        zrtf = unfufcyvg.gbgny_fcyvg/1024/1024
+        vs abg bcg.dhvrg naq ynfg != zrtf:
+            cebterff('%q Zolgrf ernq\e' % zrtf)
+            ynfg = zrtf
+    cebterff('%q Zolgrf ernq, qbar.\a' % zrtf)
+
+vs bcg.ireobfr:
+    ybt('\a')
+vs bcg.oybof:
+    sbe (zbqr,anzr,ova) va funyvfg:
+        cevag ova.rapbqr('urk')
+vs bcg.gerr:
+    cevag gerr.rapbqr('urk')
+vs bcg.pbzzvg be bcg.anzr:
+    zft = 'ohc fcyvg\a\aTrarengrq ol pbzznaq:\a%e' % flf.neti
+    ers = bcg.anzr naq ('ersf/urnqf/%f' % bcg.anzr) be Abar
+    pbzzvg = j.arj_pbzzvg(byqers, gerr, zft)
+    vs bcg.pbzzvg:
+        cevag pbzzvg.rapbqr('urk')
+
+vs j:
+    j.pybfr()  # zhfg pybfr orsber jr pna hcqngr gur ers
         
-if opt.name:
-    if cli:
-        cli.update_ref(refname, commit, oldref)
-    else:
-        git.update_ref(refname, commit, oldref)
-
-if cli:
-    cli.close()
-
-secs = time.time() - start_time
-size = hashsplit.total_split
-if opt.bench:
-    log('\nbup: %.2fkbytes in %.2f secs = %.2f kbytes/sec\n'
-        % (size/1024., secs, size/1024./secs))
-#!/usr/bin/env python
-import sys, re, struct, mmap
-from bup import git, options
-from bup.helpers import *
-
-
-def s_from_bytes(bytes):
-    clist = [chr(b) for b in bytes]
-    return ''.join(clist)
-
-
-def report(count):
-    fields = ['VmSize', 'VmRSS', 'VmData', 'VmStk']
-    d = {}
-    for line in open('/proc/self/status').readlines():
-        l = re.split(r':\s*', line.strip(), 1)
-        d[l[0]] = l[1]
-    if count >= 0:
-        e1 = count
-        fields = [d[k] for k in fields]
-    else:
-        e1 = ''
-    print ('%9s  ' + ('%10s ' * len(fields))) % tuple([e1] + fields)
-    sys.stdout.flush()
-
-
-optspec = """
-bup memtest [-n elements] [-c cycles]
+vs bcg.anzr:
+    vs pyv:
+        pyv.hcqngr_ers(ersanzr, pbzzvg, byqers)
+    ryfr:
+        tvg.hcqngr_ers(ersanzr, pbzzvg, byqers)
+
+vs pyv:
+    pyv.pybfr()
+
+frpf = gvzr.gvzr() - fgneg_gvzr
+fvmr = unfufcyvg.gbgny_fcyvg
+vs bcg.orapu:
+    ybt('\aohc: %.2sxolgrf va %.2s frpf = %.2s xolgrf/frp\a'
+        % (fvmr/1024., frpf, fvmr/1024./frpf))
+#!/hfe/ova/rai clguba
+vzcbeg flf, er, fgehpg, zznc
+sebz ohc vzcbeg tvg, bcgvbaf
+sebz ohc.urycref vzcbeg *
+
+
+qrs f_sebz_olgrf(olgrf):
+    pyvfg = [pue(o) sbe o va olgrf]
+    erghea ''.wbva(pyvfg)
+
+
+qrs ercbeg(pbhag):
+    svryqf = ['IzFvmr', 'IzEFF', 'IzQngn', 'IzFgx']
+    q = {}
+    sbe yvar va bcra('/cebp/frys/fgnghf').ernqyvarf():
+        y = er.fcyvg(e':\f*', yvar.fgevc(), 1)
+        q[y[0]] = y[1]
+    vs pbhag >= 0:
+        r1 = pbhag
+        svryqf = [q[x] sbe x va svryqf]
+    ryfr:
+        r1 = ''
+    cevag ('%9f  ' + ('%10f ' * yra(svryqf))) % ghcyr([r1] + svryqf)
+    flf.fgqbhg.syhfu()
+
+
+bcgfcrp = """
+ohc zrzgrfg [-a ryrzragf] [-p plpyrf]
 --
-n,number=  number of objects per cycle
-c,cycles=  number of cycles to run
-ignore-midx  ignore .midx files, use only .idx files
+a,ahzore=  ahzore bs bowrpgf cre plpyr
+p,plpyrf=  ahzore bs plpyrf gb eha
+vtaber-zvqk  vtaber .zvqk svyrf, hfr bayl .vqk svyrf
 """
-o = options.Options('bup memtest', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal('no arguments expected')
-
-git.ignore_midx = opt.ignore_midx
-
-git.check_repo_or_die()
-m = git.PackIdxList(git.repo('objects/pack'))
-
-cycles = opt.cycles or 100
-number = opt.number or 10000
-
-report(-1)
-f = open('/dev/urandom')
-a = mmap.mmap(-1, 20)
-report(0)
-for c in xrange(cycles):
-    for n in xrange(number):
-        b = f.read(3)
-        if 0:
-            bytes = list(struct.unpack('!BBB', b)) + [0]*17
-            bytes[2] &= 0xf0
-            bin = struct.pack('!20s', s_from_bytes(bytes))
-        else:
-            a[0:2] = b[0:2]
-            a[2] = chr(ord(b[2]) & 0xf0)
-            bin = str(a[0:20])
-        #print bin.encode('hex')
-        m.exists(bin)
-    report((c+1)*number)
-#!/usr/bin/env python
-import sys, os, stat
-from bup import options, git, vfs
-from bup.helpers import *
-
-def print_node(text, n):
-    prefix = ''
-    if opt.hash:
-        prefix += "%s " % n.hash.encode('hex')
-    if stat.S_ISDIR(n.mode):
-        print '%s%s/' % (prefix, text)
-    elif stat.S_ISLNK(n.mode):
-        print '%s%s@' % (prefix, text)
-    else:
-        print '%s%s' % (prefix, text)
-
-
-optspec = """
-bup ls <dirs...>
+b = bcgvbaf.Bcgvbaf('ohc zrzgrfg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+tvg.vtaber_zvqk = bcg.vtaber_zvqk
+
+tvg.purpx_ercb_be_qvr()
+z = tvg.CnpxVqkYvfg(tvg.ercb('bowrpgf/cnpx'))
+
+plpyrf = bcg.plpyrf be 100
+ahzore = bcg.ahzore be 10000
+
+ercbeg(-1)
+s = bcra('/qri/henaqbz')
+n = zznc.zznc(-1, 20)
+ercbeg(0)
+sbe p va kenatr(plpyrf):
+    sbe a va kenatr(ahzore):
+        o = s.ernq(3)
+        vs 0:
+            olgrf = yvfg(fgehpg.hacnpx('!OOO', o)) + [0]*17
+            olgrf[2] &= 0ks0
+            ova = fgehpg.cnpx('!20f', f_sebz_olgrf(olgrf))
+        ryfr:
+            n[0:2] = o[0:2]
+            n[2] = pue(beq(o[2]) & 0ks0)
+            ova = fge(n[0:20])
+        #cevag ova.rapbqr('urk')
+        z.rkvfgf(ova)
+    ercbeg((p+1)*ahzore)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgng
+sebz ohc vzcbeg bcgvbaf, tvg, isf
+sebz ohc.urycref vzcbeg *
+
+qrs cevag_abqr(grkg, a):
+    cersvk = ''
+    vs bcg.unfu:
+        cersvk += "%f " % a.unfu.rapbqr('urk')
+    vs fgng.F_VFQVE(a.zbqr):
+        cevag '%f%f/' % (cersvk, grkg)
+    ryvs fgng.F_VFYAX(a.zbqr):
+        cevag '%f%f@' % (cersvk, grkg)
+    ryfr:
+        cevag '%f%f' % (cersvk, grkg)
+
+
+bcgfcrp = """
+ohc yf <qvef...>
 --
-s,hash   show hash for each file
+f,unfu   fubj unfu sbe rnpu svyr
 """
-o = options.Options('bup ls', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-top = vfs.RefList(None)
-
-if not extra:
-    extra = ['/']
-
-ret = 0
-for d in extra:
-    try:
-        n = top.lresolve(d)
-        if stat.S_ISDIR(n.mode):
-            for sub in n:
-                print_node(sub.name, sub)
-        else:
-            print_node(d, n)
-    except vfs.NodeError, e:
-        log('error: %s\n' % e)
-        ret = 1
-
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, os, re, stat, readline, fnmatch
-from bup import options, git, shquote, vfs
-from bup.helpers import *
-
-def node_name(text, n):
-    if stat.S_ISDIR(n.mode):
-        return '%s/' % text
-    elif stat.S_ISLNK(n.mode):
-        return '%s@' % text
-    else:
-        return '%s' % text
-
-
-def do_ls(path, n):
-    l = []
-    if stat.S_ISDIR(n.mode):
-        for sub in n:
-            l.append(node_name(sub.name, sub))
-    else:
-        l.append(node_name(path, n))
-    print columnate(l, '')
+b = bcgvbaf.Bcgvbaf('ohc yf', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+gbc = isf.ErsYvfg(Abar)
+
+vs abg rkgen:
+    rkgen = ['/']
+
+erg = 0
+sbe q va rkgen:
+    gel:
+        a = gbc.yerfbyir(q)
+        vs fgng.F_VFQVE(a.zbqr):
+            sbe fho va a:
+                cevag_abqr(fho.anzr, fho)
+        ryfr:
+            cevag_abqr(q, a)
+    rkprcg isf.AbqrReebe, r:
+        ybt('reebe: %f\a' % r)
+        erg = 1
+
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, er, fgng, ernqyvar, sazngpu
+sebz ohc vzcbeg bcgvbaf, tvg, fudhbgr, isf
+sebz ohc.urycref vzcbeg *
+
+qrs abqr_anzr(grkg, a):
+    vs fgng.F_VFQVE(a.zbqr):
+        erghea '%f/' % grkg
+    ryvs fgng.F_VFYAX(a.zbqr):
+        erghea '%f@' % grkg
+    ryfr:
+        erghea '%f' % grkg
+
+
+qrs qb_yf(cngu, a):
+    y = []
+    vs fgng.F_VFQVE(a.zbqr):
+        sbe fho va a:
+            y.nccraq(abqr_anzr(fho.anzr, fho))
+    ryfr:
+        y.nccraq(abqr_anzr(cngu, a))
+    cevag pbyhzangr(y, '')
     
 
-def write_to_file(inf, outf):
-    for blob in chunkyreader(inf):
-        outf.write(blob)
+qrs jevgr_gb_svyr(vas, bhgs):
+    sbe oybo va puhaxlernqre(vas):
+        bhgs.jevgr(oybo)
     
 
-def inputiter():
-    if os.isatty(sys.stdin.fileno()):
-        while 1:
-            try:
-                yield raw_input('bup> ')
-            except EOFError:
-                break
-    else:
-        for line in sys.stdin:
-            yield line
-
-
-def _completer_get_subs(line):
-    (qtype, lastword) = shquote.unfinished_word(line)
-    (dir,name) = os.path.split(lastword)
-    #log('\ncompleter: %r %r %r\n' % (qtype, lastword, text))
-    n = pwd.resolve(dir)
-    subs = list(filter(lambda x: x.name.startswith(name),
-                       n.subs()))
-    return (dir, name, qtype, lastword, subs)
-
-
-_last_line = None
-_last_res = None
-def completer(text, state):
-    global _last_line
-    global _last_res
-    try:
-        line = readline.get_line_buffer()[:readline.get_endidx()]
-        if _last_line != line:
-            _last_res = _completer_get_subs(line)
-            _last_line = line
-        (dir, name, qtype, lastword, subs) = _last_res
-        if state < len(subs):
-            sn = subs[state]
-            sn1 = sn.resolve('')  # deref symlinks
-            fullname = os.path.join(dir, sn.name)
-            if stat.S_ISDIR(sn1.mode):
-                ret = shquote.what_to_add(qtype, lastword, fullname+'/',
-                                          terminate=False)
-            else:
-                ret = shquote.what_to_add(qtype, lastword, fullname,
-                                          terminate=True) + ' '
-            return text + ret
-    except Exception, e:
-        log('\nerror in completion: %s\n' % e)
+qrs vachgvgre():
+    vs bf.vfnggl(flf.fgqva.svyrab()):
+        juvyr 1:
+            gel:
+                lvryq enj_vachg('ohc> ')
+            rkprcg RBSReebe:
+                oernx
+    ryfr:
+        sbe yvar va flf.fgqva:
+            lvryq yvar
+
+
+qrs _pbzcyrgre_trg_fhof(yvar):
+    (dglcr, ynfgjbeq) = fudhbgr.hasvavfurq_jbeq(yvar)
+    (qve,anzr) = bf.cngu.fcyvg(ynfgjbeq)
+    #ybt('\apbzcyrgre: %e %e %e\a' % (dglcr, ynfgjbeq, grkg))
+    a = cjq.erfbyir(qve)
+    fhof = yvfg(svygre(ynzoqn k: k.anzr.fgnegfjvgu(anzr),
+                       a.fhof()))
+    erghea (qve, anzr, dglcr, ynfgjbeq, fhof)
+
+
+_ynfg_yvar = Abar
+_ynfg_erf = Abar
+qrs pbzcyrgre(grkg, fgngr):
+    tybony _ynfg_yvar
+    tybony _ynfg_erf
+    gel:
+        yvar = ernqyvar.trg_yvar_ohssre()[:ernqyvar.trg_raqvqk()]
+        vs _ynfg_yvar != yvar:
+            _ynfg_erf = _pbzcyrgre_trg_fhof(yvar)
+            _ynfg_yvar = yvar
+        (qve, anzr, dglcr, ynfgjbeq, fhof) = _ynfg_erf
+        vs fgngr < yra(fhof):
+            fa = fhof[fgngr]
+            fa1 = fa.erfbyir('')  # qrers flzyvaxf
+            shyyanzr = bf.cngu.wbva(qve, fa.anzr)
+            vs fgng.F_VFQVE(fa1.zbqr):
+                erg = fudhbgr.jung_gb_nqq(dglcr, ynfgjbeq, shyyanzr+'/',
+                                          grezvangr=Snyfr)
+            ryfr:
+                erg = fudhbgr.jung_gb_nqq(dglcr, ynfgjbeq, shyyanzr,
+                                          grezvangr=Gehr) + ' '
+            erghea grkg + erg
+    rkprcg Rkprcgvba, r:
+        ybt('\areebe va pbzcyrgvba: %f\a' % r)
 
             
-optspec = """
-bup ftp
+bcgfcrp = """
+ohc sgc
 """
-o = options.Options('bup ftp', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-
-top = vfs.RefList(None)
-pwd = top
-
-if extra:
-    lines = extra
-else:
-    readline.set_completer_delims(' \t\n\r/')
-    readline.set_completer(completer)
-    readline.parse_and_bind("tab: complete")
-    lines = inputiter()
-
-for line in lines:
-    if not line.strip():
-        continue
-    words = [word for (wordstart,word) in shquote.quotesplit(line)]
-    cmd = words[0].lower()
-    #log('execute: %r %r\n' % (cmd, parm))
-    try:
-        if cmd == 'ls':
-            for parm in (words[1:] or ['.']):
-                do_ls(parm, pwd.resolve(parm))
-        elif cmd == 'cd':
-            for parm in words[1:]:
-                pwd = pwd.resolve(parm)
-        elif cmd == 'pwd':
-            print pwd.fullname()
-        elif cmd == 'cat':
-            for parm in words[1:]:
-                write_to_file(pwd.resolve(parm).open(), sys.stdout)
-        elif cmd == 'get':
-            if len(words) not in [2,3]:
-                raise Exception('Usage: get <filename> [localname]')
-            rname = words[1]
-            (dir,base) = os.path.split(rname)
-            lname = len(words)>2 and words[2] or base
-            inf = pwd.resolve(rname).open()
-            log('Saving %r\n' % lname)
-            write_to_file(inf, open(lname, 'wb'))
-        elif cmd == 'mget':
-            for parm in words[1:]:
-                (dir,base) = os.path.split(parm)
-                for n in pwd.resolve(dir).subs():
-                    if fnmatch.fnmatch(n.name, base):
-                        try:
-                            log('Saving %r\n' % n.name)
-                            inf = n.open()
-                            outf = open(n.name, 'wb')
-                            write_to_file(inf, outf)
-                            outf.close()
-                        except Exception, e:
-                            log('  error: %s\n' % e)
-        elif cmd == 'help' or cmd == '?':
-            log('Commands: ls cd pwd cat get mget help quit\n')
-        elif cmd == 'quit' or cmd == 'exit' or cmd == 'bye':
-            break
-        else:
-            raise Exception('no such command %r' % cmd)
-    except Exception, e:
-        log('error: %s\n' % e)
-        #raise
-#!/usr/bin/env python
-import sys, mmap
-from bup import options, _hashsplit
-from bup.helpers import *
-
-optspec = """
-bup random [-S seed] <numbytes>
+b = bcgvbaf.Bcgvbaf('ohc sgc', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+
+gbc = isf.ErsYvfg(Abar)
+cjq = gbc
+
+vs rkgen:
+    yvarf = rkgen
+ryfr:
+    ernqyvar.frg_pbzcyrgre_qryvzf(' \g\a\e/')
+    ernqyvar.frg_pbzcyrgre(pbzcyrgre)
+    ernqyvar.cnefr_naq_ovaq("gno: pbzcyrgr")
+    yvarf = vachgvgre()
+
+sbe yvar va yvarf:
+    vs abg yvar.fgevc():
+        pbagvahr
+    jbeqf = [jbeq sbe (jbeqfgneg,jbeq) va fudhbgr.dhbgrfcyvg(yvar)]
+    pzq = jbeqf[0].ybjre()
+    #ybt('rkrphgr: %e %e\a' % (pzq, cnez))
+    gel:
+        vs pzq == 'yf':
+            sbe cnez va (jbeqf[1:] be ['.']):
+                qb_yf(cnez, cjq.erfbyir(cnez))
+        ryvs pzq == 'pq':
+            sbe cnez va jbeqf[1:]:
+                cjq = cjq.erfbyir(cnez)
+        ryvs pzq == 'cjq':
+            cevag cjq.shyyanzr()
+        ryvs pzq == 'png':
+            sbe cnez va jbeqf[1:]:
+                jevgr_gb_svyr(cjq.erfbyir(cnez).bcra(), flf.fgqbhg)
+        ryvs pzq == 'trg':
+            vs yra(jbeqf) abg va [2,3]:
+                envfr Rkprcgvba('Hfntr: trg <svyranzr> [ybpnyanzr]')
+            eanzr = jbeqf[1]
+            (qve,onfr) = bf.cngu.fcyvg(eanzr)
+            yanzr = yra(jbeqf)>2 naq jbeqf[2] be onfr
+            vas = cjq.erfbyir(eanzr).bcra()
+            ybt('Fnivat %e\a' % yanzr)
+            jevgr_gb_svyr(vas, bcra(yanzr, 'jo'))
+        ryvs pzq == 'ztrg':
+            sbe cnez va jbeqf[1:]:
+                (qve,onfr) = bf.cngu.fcyvg(cnez)
+                sbe a va cjq.erfbyir(qve).fhof():
+                    vs sazngpu.sazngpu(a.anzr, onfr):
+                        gel:
+                            ybt('Fnivat %e\a' % a.anzr)
+                            vas = a.bcra()
+                            bhgs = bcra(a.anzr, 'jo')
+                            jevgr_gb_svyr(vas, bhgs)
+                            bhgs.pybfr()
+                        rkprcg Rkprcgvba, r:
+                            ybt('  reebe: %f\a' % r)
+        ryvs pzq == 'uryc' be pzq == '?':
+            ybt('Pbzznaqf: yf pq cjq png trg ztrg uryc dhvg\a')
+        ryvs pzq == 'dhvg' be pzq == 'rkvg' be pzq == 'olr':
+            oernx
+        ryfr:
+            envfr Rkprcgvba('ab fhpu pbzznaq %e' % pzq)
+    rkprcg Rkprcgvba, r:
+        ybt('reebe: %f\a' % r)
+        #envfr
+#!/hfe/ova/rai clguba
+vzcbeg flf, zznc
+sebz ohc vzcbeg bcgvbaf, _unfufcyvg
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+ohc enaqbz [-F frrq] <ahzolgrf>
 --
-S,seed=   optional random number seed (default 1)
-f,force   print random data to stdout even if it's a tty
+F,frrq=   bcgvbany enaqbz ahzore frrq (qrsnhyg 1)
+s,sbepr   cevag enaqbz qngn gb fgqbhg rira vs vg'f n ggl
 """
-o = options.Options('bup random', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one argument expected")
-
-total = parse_num(extra[0])
-
-if opt.force or (not os.isatty(1) and
-                 not atoi(os.environ.get('BUP_FORCE_TTY')) & 1):
-    _hashsplit.write_random(sys.stdout.fileno(), total, opt.seed or 0)
-else:
-    log('error: not writing binary data to a terminal. Use -f to force.\n')
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, os, glob
-from bup import options
-
-optspec = """
-bup help <command>
+b = bcgvbaf.Bcgvbaf('ohc enaqbz', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar nethzrag rkcrpgrq")
+
+gbgny = cnefr_ahz(rkgen[0])
+
+vs bcg.sbepr be (abg bf.vfnggl(1) naq
+                 abg ngbv(bf.raiveba.trg('OHC_SBEPR_GGL')) & 1):
+    _unfufcyvg.jevgr_enaqbz(flf.fgqbhg.svyrab(), gbgny, bcg.frrq be 0)
+ryfr:
+    ybt('reebe: abg jevgvat ovanel qngn gb n grezvany. Hfr -s gb sbepr.\a')
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, tybo
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc uryc <pbzznaq>
 """
-o = options.Options('bup help', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) == 0:
-    # the wrapper program provides the default usage string
-    os.execvp(os.environ['BUP_MAIN_EXE'], ['bup'])
-elif len(extra) == 1:
-    docname = (extra[0]=='bup' and 'bup' or ('bup-%s' % extra[0]))
-    exe = sys.argv[0]
-    (exepath, exefile) = os.path.split(exe)
-    manpath = os.path.join(exepath, '../Documentation/' + docname + '.[1-9]')
-    g = glob.glob(manpath)
-    if g:
-        os.execvp('man', ['man', '-l', g[0]])
-    else:
-        os.execvp('man', ['man', docname])
-else:
-    o.fatal("exactly one command name expected")
-#!/usr/bin/env python
-import sys, os, stat, errno, fuse, re, time, tempfile
-from bup import options, git, vfs
-from bup.helpers import *
-
-
-class Stat(fuse.Stat):
-    def __init__(self):
-        self.st_mode = 0
-        self.st_ino = 0
-        self.st_dev = 0
-        self.st_nlink = 0
-        self.st_uid = 0
-        self.st_gid = 0
-        self.st_size = 0
-        self.st_atime = 0
-        self.st_mtime = 0
-        self.st_ctime = 0
-        self.st_blocks = 0
-        self.st_blksize = 0
-        self.st_rdev = 0
-
-
-cache = {}
-def cache_get(top, path):
-    parts = path.split('/')
-    cache[('',)] = top
-    c = None
-    max = len(parts)
-    #log('cache: %r\n' % cache.keys())
-    for i in range(max):
-        pre = parts[:max-i]
-        #log('cache trying: %r\n' % pre)
-        c = cache.get(tuple(pre))
-        if c:
-            rest = parts[max-i:]
-            for r in rest:
-                #log('resolving %r from %r\n' % (r, c.fullname()))
-                c = c.lresolve(r)
-                key = tuple(pre + [r])
-                #log('saving: %r\n' % (key,))
-                cache[key] = c
-            break
-    assert(c)
-    return c
+b = bcgvbaf.Bcgvbaf('ohc uryc', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) == 0:
+    # gur jenccre cebtenz cebivqrf gur qrsnhyg hfntr fgevat
+    bf.rkrpic(bf.raiveba['OHC_ZNVA_RKR'], ['ohc'])
+ryvs yra(rkgen) == 1:
+    qbpanzr = (rkgen[0]=='ohc' naq 'ohc' be ('ohc-%f' % rkgen[0]))
+    rkr = flf.neti[0]
+    (rkrcngu, rkrsvyr) = bf.cngu.fcyvg(rkr)
+    znacngu = bf.cngu.wbva(rkrcngu, '../Qbphzragngvba/' + qbpanzr + '.[1-9]')
+    t = tybo.tybo(znacngu)
+    vs t:
+        bf.rkrpic('zna', ['zna', '-y', t[0]])
+    ryfr:
+        bf.rkrpic('zna', ['zna', qbpanzr])
+ryfr:
+    b.sngny("rknpgyl bar pbzznaq anzr rkcrpgrq")
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgng, reeab, shfr, er, gvzr, grzcsvyr
+sebz ohc vzcbeg bcgvbaf, tvg, isf
+sebz ohc.urycref vzcbeg *
+
+
+pynff Fgng(shfr.Fgng):
+    qrs __vavg__(frys):
+        frys.fg_zbqr = 0
+        frys.fg_vab = 0
+        frys.fg_qri = 0
+        frys.fg_ayvax = 0
+        frys.fg_hvq = 0
+        frys.fg_tvq = 0
+        frys.fg_fvmr = 0
+        frys.fg_ngvzr = 0
+        frys.fg_zgvzr = 0
+        frys.fg_pgvzr = 0
+        frys.fg_oybpxf = 0
+        frys.fg_oyxfvmr = 0
+        frys.fg_eqri = 0
+
+
+pnpur = {}
+qrs pnpur_trg(gbc, cngu):
+    cnegf = cngu.fcyvg('/')
+    pnpur[('',)] = gbc
+    p = Abar
+    znk = yra(cnegf)
+    #ybt('pnpur: %e\a' % pnpur.xrlf())
+    sbe v va enatr(znk):
+        cer = cnegf[:znk-v]
+        #ybt('pnpur gelvat: %e\a' % cer)
+        p = pnpur.trg(ghcyr(cer))
+        vs p:
+            erfg = cnegf[znk-v:]
+            sbe e va erfg:
+                #ybt('erfbyivat %e sebz %e\a' % (e, p.shyyanzr()))
+                p = p.yerfbyir(e)
+                xrl = ghcyr(cer + [e])
+                #ybt('fnivat: %e\a' % (xrl,))
+                pnpur[xrl] = p
+            oernx
+    nffreg(p)
+    erghea p
         
     
 
-class BupFs(fuse.Fuse):
-    def __init__(self, top):
-        fuse.Fuse.__init__(self)
-        self.top = top
+pynff OhcSf(shfr.Shfr):
+    qrs __vavg__(frys, gbc):
+        shfr.Shfr.__vavg__(frys)
+        frys.gbc = gbc
     
-    def getattr(self, path):
-        log('--getattr(%r)\n' % path)
-        try:
-            node = cache_get(self.top, path)
-            st = Stat()
-            st.st_mode = node.mode
-            st.st_nlink = node.nlinks()
-            st.st_size = node.size()
-            st.st_mtime = node.mtime
-            st.st_ctime = node.ctime
-            st.st_atime = node.atime
-            return st
-        except vfs.NoSuchFile:
-            return -errno.ENOENT
-
-    def readdir(self, path, offset):
-        log('--readdir(%r)\n' % path)
-        node = cache_get(self.top, path)
-        yield fuse.Direntry('.')
-        yield fuse.Direntry('..')
-        for sub in node.subs():
-            yield fuse.Direntry(sub.name)
-
-    def readlink(self, path):
-        log('--readlink(%r)\n' % path)
-        node = cache_get(self.top, path)
-        return node.readlink()
-
-    def open(self, path, flags):
-        log('--open(%r)\n' % path)
-        node = cache_get(self.top, path)
-        accmode = os.O_RDONLY | os.O_WRONLY | os.O_RDWR
-        if (flags & accmode) != os.O_RDONLY:
-            return -errno.EACCES
-        node.open()
-
-    def release(self, path, flags):
-        log('--release(%r)\n' % path)
-
-    def read(self, path, size, offset):
-        log('--read(%r)\n' % path)
-        n = cache_get(self.top, path)
-        o = n.open()
-        o.seek(offset)
-        return o.read(size)
-
-
-if not hasattr(fuse, '__version__'):
-    raise RuntimeError, "your fuse module is too old for fuse.__version__"
-fuse.fuse_python_api = (0, 2)
-
-
-optspec = """
-bup fuse [-d] [-f] <mountpoint>
+    qrs trgngge(frys, cngu):
+        ybt('--trgngge(%e)\a' % cngu)
+        gel:
+            abqr = pnpur_trg(frys.gbc, cngu)
+            fg = Fgng()
+            fg.fg_zbqr = abqr.zbqr
+            fg.fg_ayvax = abqr.ayvaxf()
+            fg.fg_fvmr = abqr.fvmr()
+            fg.fg_zgvzr = abqr.zgvzr
+            fg.fg_pgvzr = abqr.pgvzr
+            fg.fg_ngvzr = abqr.ngvzr
+            erghea fg
+        rkprcg isf.AbFhpuSvyr:
+            erghea -reeab.RABRAG
+
+    qrs ernqqve(frys, cngu, bssfrg):
+        ybt('--ernqqve(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        lvryq shfr.Qveragel('.')
+        lvryq shfr.Qveragel('..')
+        sbe fho va abqr.fhof():
+            lvryq shfr.Qveragel(fho.anzr)
+
+    qrs ernqyvax(frys, cngu):
+        ybt('--ernqyvax(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        erghea abqr.ernqyvax()
+
+    qrs bcra(frys, cngu, syntf):
+        ybt('--bcra(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        nppzbqr = bf.B_EQBAYL | bf.B_JEBAYL | bf.B_EQJE
+        vs (syntf & nppzbqr) != bf.B_EQBAYL:
+            erghea -reeab.RNPPRF
+        abqr.bcra()
+
+    qrs eryrnfr(frys, cngu, syntf):
+        ybt('--eryrnfr(%e)\a' % cngu)
+
+    qrs ernq(frys, cngu, fvmr, bssfrg):
+        ybt('--ernq(%e)\a' % cngu)
+        a = pnpur_trg(frys.gbc, cngu)
+        b = a.bcra()
+        b.frrx(bssfrg)
+        erghea b.ernq(fvmr)
+
+
+vs abg unfngge(shfr, '__irefvba__'):
+    envfr EhagvzrReebe, "lbhe shfr zbqhyr vf gbb byq sbe shfr.__irefvba__"
+shfr.shfr_clguba_ncv = (0, 2)
+
+
+bcgfcrp = """
+ohc shfr [-q] [-s] <zbhagcbvag>
 --
-d,debug   increase debug level
-f,foreground  run in foreground
+q,qroht   vapernfr qroht yriry
+s,sbertebhaq  eha va sbertebhaq
 """
-o = options.Options('bup fuse', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one argument expected")
-
-git.check_repo_or_die()
-top = vfs.RefList(None)
-f = BupFs(top)
-f.fuse_args.mountpoint = extra[0]
-if opt.debug:
-    f.fuse_args.add('debug')
-if opt.foreground:
-    f.fuse_args.setmod('foreground')
-print f.multithreaded
-f.multithreaded = False
-
-f.main()
-#!/usr/bin/env python
-from bup import git, options, client
-from bup.helpers import *
-
-optspec = """
-[BUP_DIR=...] bup init [-r host:path]
+b = bcgvbaf.Bcgvbaf('ohc shfr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar nethzrag rkcrpgrq")
+
+tvg.purpx_ercb_be_qvr()
+gbc = isf.ErsYvfg(Abar)
+s = OhcSf(gbc)
+s.shfr_netf.zbhagcbvag = rkgen[0]
+vs bcg.qroht:
+    s.shfr_netf.nqq('qroht')
+vs bcg.sbertebhaq:
+    s.shfr_netf.frgzbq('sbertebhaq')
+cevag s.zhygvguernqrq
+s.zhygvguernqrq = Snyfr
+
+s.znva()
+#!/hfe/ova/rai clguba
+sebz ohc vzcbeg tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+[OHC_QVE=...] ohc vavg [-e ubfg:cngu]
 --
-r,remote=  remote repository path
+e,erzbgr=  erzbgr ercbfvgbel cngu
 """
-o = options.Options('bup init', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-
-if opt.remote:
-    git.init_repo()  # local repo
-    git.check_repo_or_die()
-    cli = client.Client(opt.remote, create=True)
-    cli.close()
-else:
-    git.init_repo()
-#!/usr/bin/env python
-import sys, math, struct, glob
-from bup import options, git
-from bup.helpers import *
-
-PAGE_SIZE=4096
-SHA_PER_PAGE=PAGE_SIZE/200.
-
-
-def merge(idxlist, bits, table):
-    count = 0
-    for e in git.idxmerge(idxlist):
-        count += 1
-        prefix = git.extract_bits(e, bits)
-        table[prefix] = count
-        yield e
-
-
-def do_midx(outdir, outfilename, infilenames):
-    if not outfilename:
-        assert(outdir)
-        sum = Sha1('\0'.join(infilenames)).hexdigest()
-        outfilename = '%s/midx-%s.midx' % (outdir, sum)
+b = bcgvbaf.Bcgvbaf('ohc vavg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+
+vs bcg.erzbgr:
+    tvg.vavg_ercb()  # ybpny ercb
+    tvg.purpx_ercb_be_qvr()
+    pyv = pyvrag.Pyvrag(bcg.erzbgr, perngr=Gehr)
+    pyv.pybfr()
+ryfr:
+    tvg.vavg_ercb()
+#!/hfe/ova/rai clguba
+vzcbeg flf, zngu, fgehpg, tybo
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+CNTR_FVMR=4096
+FUN_CRE_CNTR=CNTR_FVMR/200.
+
+
+qrs zretr(vqkyvfg, ovgf, gnoyr):
+    pbhag = 0
+    sbe r va tvg.vqkzretr(vqkyvfg):
+        pbhag += 1
+        cersvk = tvg.rkgenpg_ovgf(r, ovgf)
+        gnoyr[cersvk] = pbhag
+        lvryq r
+
+
+qrs qb_zvqk(bhgqve, bhgsvyranzr, vasvyranzrf):
+    vs abg bhgsvyranzr:
+        nffreg(bhgqve)
+        fhz = Fun1('\0'.wbva(vasvyranzrf)).urkqvtrfg()
+        bhgsvyranzr = '%f/zvqk-%f.zvqk' % (bhgqve, fhz)
     
-    inp = []
-    total = 0
-    for name in infilenames:
-        ix = git.PackIdx(name)
-        inp.append(ix)
-        total += len(ix)
-
-    log('Merging %d indexes (%d objects).\n' % (len(infilenames), total))
-    if (not opt.force and (total < 1024 and len(infilenames) < 3)) \
-       or (opt.force and not total):
-        log('midx: nothing to do.\n')
-        return
-
-    pages = int(total/SHA_PER_PAGE) or 1
-    bits = int(math.ceil(math.log(pages, 2)))
-    entries = 2**bits
-    log('Table size: %d (%d bits)\n' % (entries*4, bits))
+    vac = []
+    gbgny = 0
+    sbe anzr va vasvyranzrf:
+        vk = tvg.CnpxVqk(anzr)
+        vac.nccraq(vk)
+        gbgny += yra(vk)
+
+    ybt('Zretvat %q vaqrkrf (%q bowrpgf).\a' % (yra(vasvyranzrf), gbgny))
+    vs (abg bcg.sbepr naq (gbgny < 1024 naq yra(vasvyranzrf) < 3)) \
+       be (bcg.sbepr naq abg gbgny):
+        ybt('zvqk: abguvat gb qb.\a')
+        erghea
+
+    cntrf = vag(gbgny/FUN_CRE_CNTR) be 1
+    ovgf = vag(zngu.prvy(zngu.ybt(cntrf, 2)))
+    ragevrf = 2**ovgf
+    ybt('Gnoyr fvmr: %q (%q ovgf)\a' % (ragevrf*4, ovgf))
     
-    table = [0]*entries
-
-    try:
-        os.unlink(outfilename)
-    except OSError:
-        pass
-    f = open(outfilename + '.tmp', 'w+')
-    f.write('MIDX\0\0\0\2')
-    f.write(struct.pack('!I', bits))
-    assert(f.tell() == 12)
-    f.write('\0'*4*entries)
+    gnoyr = [0]*ragevrf
+
+    gel:
+        bf.hayvax(bhgsvyranzr)
+    rkprcg BFReebe:
+        cnff
+    s = bcra(bhgsvyranzr + '.gzc', 'j+')
+    s.jevgr('ZVQK\0\0\0\2')
+    s.jevgr(fgehpg.cnpx('!V', ovgf))
+    nffreg(s.gryy() == 12)
+    s.jevgr('\0'*4*ragevrf)
     
-    for e in merge(inp, bits, table):
-        f.write(e)
+    sbe r va zretr(vac, ovgf, gnoyr):
+        s.jevgr(r)
         
-    f.write('\0'.join(os.path.basename(p) for p in infilenames))
-
-    f.seek(12)
-    f.write(struct.pack('!%dI' % entries, *table))
-    f.close()
-    os.rename(outfilename + '.tmp', outfilename)
-
-    # this is just for testing
-    if 0:
-        p = git.PackMidx(outfilename)
-        assert(len(p.idxnames) == len(infilenames))
-        print p.idxnames
-        assert(len(p) == total)
-        pi = iter(p)
-        for i in merge(inp, total, bits, table):
-            assert(i == pi.next())
-            assert(p.exists(i))
-
-    print outfilename
-
-optspec = """
-bup midx [options...] <idxnames...>
+    s.jevgr('\0'.wbva(bf.cngu.onfranzr(c) sbe c va vasvyranzrf))
+
+    s.frrx(12)
+    s.jevgr(fgehpg.cnpx('!%qV' % ragevrf, *gnoyr))
+    s.pybfr()
+    bf.eranzr(bhgsvyranzr + '.gzc', bhgsvyranzr)
+
+    # guvf vf whfg sbe grfgvat
+    vs 0:
+        c = tvg.CnpxZvqk(bhgsvyranzr)
+        nffreg(yra(c.vqkanzrf) == yra(vasvyranzrf))
+        cevag c.vqkanzrf
+        nffreg(yra(c) == gbgny)
+        cv = vgre(c)
+        sbe v va zretr(vac, gbgny, ovgf, gnoyr):
+            nffreg(v == cv.arkg())
+            nffreg(c.rkvfgf(v))
+
+    cevag bhgsvyranzr
+
+bcgfcrp = """
+ohc zvqk [bcgvbaf...] <vqkanzrf...>
 --
-o,output=  output midx filename (default: auto-generated)
-a,auto     automatically create .midx from any unindexed .idx files
-f,force    automatically create .midx from *all* .idx files
+b,bhgchg=  bhgchg zvqk svyranzr (qrsnhyg: nhgb-trarengrq)
+n,nhgb     nhgbzngvpnyyl perngr .zvqk sebz nal havaqrkrq .vqk svyrf
+s,sbepr    nhgbzngvpnyyl perngr .zvqk sebz *nyy* .vqk svyrf
 """
-o = options.Options('bup midx', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra and (opt.auto or opt.force):
-    o.fatal("you can't use -f/-a and also provide filenames")
-
-git.check_repo_or_die()
-
-if extra:
-    do_midx(git.repo('objects/pack'), opt.output, extra)
-elif opt.auto or opt.force:
-    paths = [git.repo('objects/pack')]
-    paths += glob.glob(git.repo('index-cache/*/.'))
-    for path in paths:
-        log('midx: scanning %s\n' % path)
-        if opt.force:
-            do_midx(path, opt.output, glob.glob('%s/*.idx' % path))
-        elif opt.auto:
-            m = git.PackIdxList(path)
-            needed = {}
-            for pack in m.packs:  # only .idx files without a .midx are open
-                if pack.name.endswith('.idx'):
-                    needed[pack.name] = 1
-            del m
-            do_midx(path, opt.output, needed.keys())
-        log('\n')
-else:
-    o.fatal("you must use -f or -a or provide input filenames")
-#!/usr/bin/env python
-import sys, os, random
-from bup import options
-from bup.helpers import *
-
-
-def randblock(n):
-    l = []
-    for i in xrange(n):
-        l.append(chr(random.randrange(0,256)))
-    return ''.join(l)
-
-
-optspec = """
-bup damage [-n count] [-s maxsize] [-S seed] <filenames...>
+b = bcgvbaf.Bcgvbaf('ohc zvqk', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen naq (bcg.nhgb be bcg.sbepr):
+    b.sngny("lbh pna'g hfr -s/-n naq nyfb cebivqr svyranzrf")
+
+tvg.purpx_ercb_be_qvr()
+
+vs rkgen:
+    qb_zvqk(tvg.ercb('bowrpgf/cnpx'), bcg.bhgchg, rkgen)
+ryvs bcg.nhgb be bcg.sbepr:
+    cnguf = [tvg.ercb('bowrpgf/cnpx')]
+    cnguf += tybo.tybo(tvg.ercb('vaqrk-pnpur/*/.'))
+    sbe cngu va cnguf:
+        ybt('zvqk: fpnaavat %f\a' % cngu)
+        vs bcg.sbepr:
+            qb_zvqk(cngu, bcg.bhgchg, tybo.tybo('%f/*.vqk' % cngu))
+        ryvs bcg.nhgb:
+            z = tvg.CnpxVqkYvfg(cngu)
+            arrqrq = {}
+            sbe cnpx va z.cnpxf:  # bayl .vqk svyrf jvgubhg n .zvqk ner bcra
+                vs cnpx.anzr.raqfjvgu('.vqk'):
+                    arrqrq[cnpx.anzr] = 1
+            qry z
+            qb_zvqk(cngu, bcg.bhgchg, arrqrq.xrlf())
+        ybt('\a')
+ryfr:
+    b.sngny("lbh zhfg hfr -s be -n be cebivqr vachg svyranzrf")
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, enaqbz
+sebz ohc vzcbeg bcgvbaf
+sebz ohc.urycref vzcbeg *
+
+
+qrs enaqoybpx(a):
+    y = []
+    sbe v va kenatr(a):
+        y.nccraq(pue(enaqbz.enaqenatr(0,256)))
+    erghea ''.wbva(y)
+
+
+bcgfcrp = """
+ohc qnzntr [-a pbhag] [-f znkfvmr] [-F frrq] <svyranzrf...>
 --
-   WARNING: THIS COMMAND IS EXTREMELY DANGEROUS
-n,num=   number of blocks to damage
-s,size=  maximum size of each damaged block
-percent= maximum size of each damaged block (as a percent of entire file)
-equal    spread damage evenly throughout the file
-S,seed=  random number seed (for repeatable tests)
+   JNEAVAT: GUVF PBZZNAQ VF RKGERZRYL QNATREBHF
+a,ahz=   ahzore bs oybpxf gb qnzntr
+f,fvmr=  znkvzhz fvmr bs rnpu qnzntrq oybpx
+creprag= znkvzhz fvmr bs rnpu qnzntrq oybpx (nf n creprag bs ragver svyr)
+rdhny    fcernq qnzntr rirayl guebhtubhg gur svyr
+F,frrq=  enaqbz ahzore frrq (sbe ercrngnoyr grfgf)
 """
-o = options.Options('bup damage', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if not extra:
-    o.fatal('filenames expected')
-
-if opt.seed != None:
-    random.seed(opt.seed)
-
-for name in extra:
-    log('Damaging "%s"...\n' % name)
-    f = open(name, 'r+b')
-    st = os.fstat(f.fileno())
-    size = st.st_size
-    if opt.percent or opt.size:
-        ms1 = int(float(opt.percent or 0)/100.0*size) or size
-        ms2 = opt.size or size
-        maxsize = min(ms1, ms2)
-    else:
-        maxsize = 1
-    chunks = opt.num or 10
-    chunksize = size/chunks
-    for r in range(chunks):
-        sz = random.randrange(1, maxsize+1)
-        if sz > size:
-            sz = size
-        if opt.equal:
-            ofs = r*chunksize
-        else:
-            ofs = random.randrange(0, size - sz + 1)
-        log('  %6d bytes at %d\n' % (sz, ofs))
-        f.seek(ofs)
-        f.write(randblock(sz))
-    f.close()
-#!/usr/bin/env python
-import sys, struct, mmap
-from bup import options, git
-from bup.helpers import *
-
-suspended_w = None
-
-
-def init_dir(conn, arg):
-    git.init_repo(arg)
-    log('bup server: bupdir initialized: %r\n' % git.repodir)
-    conn.ok()
-
-
-def set_dir(conn, arg):
-    git.check_repo_or_die(arg)
-    log('bup server: bupdir is %r\n' % git.repodir)
-    conn.ok()
+b = bcgvbaf.Bcgvbaf('ohc qnzntr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs abg rkgen:
+    b.sngny('svyranzrf rkcrpgrq')
+
+vs bcg.frrq != Abar:
+    enaqbz.frrq(bcg.frrq)
+
+sbe anzr va rkgen:
+    ybt('Qnzntvat "%f"...\a' % anzr)
+    s = bcra(anzr, 'e+o')
+    fg = bf.sfgng(s.svyrab())
+    fvmr = fg.fg_fvmr
+    vs bcg.creprag be bcg.fvmr:
+        zf1 = vag(sybng(bcg.creprag be 0)/100.0*fvmr) be fvmr
+        zf2 = bcg.fvmr be fvmr
+        znkfvmr = zva(zf1, zf2)
+    ryfr:
+        znkfvmr = 1
+    puhaxf = bcg.ahz be 10
+    puhaxfvmr = fvmr/puhaxf
+    sbe e va enatr(puhaxf):
+        fm = enaqbz.enaqenatr(1, znkfvmr+1)
+        vs fm > fvmr:
+            fm = fvmr
+        vs bcg.rdhny:
+            bsf = e*puhaxfvmr
+        ryfr:
+            bsf = enaqbz.enaqenatr(0, fvmr - fm + 1)
+        ybt('  %6q olgrf ng %q\a' % (fm, bsf))
+        s.frrx(bsf)
+        s.jevgr(enaqoybpx(fm))
+    s.pybfr()
+#!/hfe/ova/rai clguba
+vzcbeg flf, fgehpg, zznc
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+fhfcraqrq_j = Abar
+
+
+qrs vavg_qve(pbaa, net):
+    tvg.vavg_ercb(net)
+    ybt('ohc freire: ohcqve vavgvnyvmrq: %e\a' % tvg.ercbqve)
+    pbaa.bx()
+
+
+qrs frg_qve(pbaa, net):
+    tvg.purpx_ercb_be_qvr(net)
+    ybt('ohc freire: ohcqve vf %e\a' % tvg.ercbqve)
+    pbaa.bx()
 
     
-def list_indexes(conn, junk):
-    git.check_repo_or_die()
-    for f in os.listdir(git.repo('objects/pack')):
-        if f.endswith('.idx'):
-            conn.write('%s\n' % f)
-    conn.ok()
-
-
-def send_index(conn, name):
-    git.check_repo_or_die()
-    assert(name.find('/') < 0)
-    assert(name.endswith('.idx'))
-    idx = git.PackIdx(git.repo('objects/pack/%s' % name))
-    conn.write(struct.pack('!I', len(idx.map)))
-    conn.write(idx.map)
-    conn.ok()
-
-
-def receive_objects(conn, junk):
-    global suspended_w
-    git.check_repo_or_die()
-    suggested = {}
-    if suspended_w:
-        w = suspended_w
-        suspended_w = None
-    else:
-        w = git.PackWriter()
-    while 1:
-        ns = conn.read(4)
-        if not ns:
-            w.abort()
-            raise Exception('object read: expected length header, got EOF\n')
-        n = struct.unpack('!I', ns)[0]
-        #log('expecting %d bytes\n' % n)
-        if not n:
-            log('bup server: received %d object%s.\n
-                % (w.count, w.count!=1 and "s" or ''))
-            fullpath = w.close()
-            if fullpath:
-                (dir, name) = os.path.split(fullpath)
-                conn.write('%s.idx\n' % name)
-            conn.ok()
-            return
-        elif n == 0xffffffff:
-            log('bup server: receive-objects suspended.\n')
-            suspended_w = w
-            conn.ok()
-            return
+qrs yvfg_vaqrkrf(pbaa, whax):
+    tvg.purpx_ercb_be_qvr()
+    sbe s va bf.yvfgqve(tvg.ercb('bowrpgf/cnpx')):
+        vs s.raqfjvgu('.vqk'):
+            pbaa.jevgr('%f\a' % s)
+    pbaa.bx()
+
+
+qrs fraq_vaqrk(pbaa, anzr):
+    tvg.purpx_ercb_be_qvr()
+    nffreg(anzr.svaq('/') < 0)
+    nffreg(anzr.raqfjvgu('.vqk'))
+    vqk = tvg.CnpxVqk(tvg.ercb('bowrpgf/cnpx/%f' % anzr))
+    pbaa.jevgr(fgehpg.cnpx('!V', yra(vqk.znc)))
+    pbaa.jevgr(vqk.znc)
+    pbaa.bx()
+
+
+qrs erprvir_bowrpgf(pbaa, whax):
+    tybony fhfcraqrq_j
+    tvg.purpx_ercb_be_qvr()
+    fhttrfgrq = {}
+    vs fhfcraqrq_j:
+        j = fhfcraqrq_j
+        fhfcraqrq_j = Abar
+    ryfr:
+        j = tvg.CnpxJevgre()
+    juvyr 1:
+        af = pbaa.ernq(4)
+        vs abg af:
+            j.nobeg()
+            envfr Rkprcgvba('bowrpg ernq: rkcrpgrq yratgu urnqre, tbg RBS\a')
+        a = fgehpg.hacnpx('!V', af)[0]
+        #ybt('rkcrpgvat %q olgrf\a' % a)
+        vs abg a:
+            ybt('ohc freire: erprvirq %q bowrpg%f.\a
+                % (j.pbhag, j.pbhag!=1 naq "f" be ''))
+            shyycngu = j.pybfr()
+            vs shyycngu:
+                (qve, anzr) = bf.cngu.fcyvg(shyycngu)
+                pbaa.jevgr('%f.vqk\a' % anzr)
+            pbaa.bx()
+            erghea
+        ryvs a == 0kssssssss:
+            ybt('ohc freire: erprvir-bowrpgf fhfcraqrq.\a')
+            fhfcraqrq_j = j
+            pbaa.bx()
+            erghea
             
-        buf = conn.read(n)  # object sizes in bup are reasonably small
-        #log('read %d bytes\n' % n)
-        if len(buf) < n:
-            w.abort()
-            raise Exception('object read: expected %d bytes, got %d\n'
-                            % (n, len(buf)))
-        (type, content) = git._decode_packobj(buf)
-        sha = git.calc_hash(type, content)
-        oldpack = w.exists(sha)
-        # FIXME: we only suggest a single index per cycle, because the client
-        # is currently dumb to download more than one per cycle anyway.
-        # Actually we should fix the client, but this is a minor optimization
-        # on the server side.
-        if not suggested and \
-          oldpack and (oldpack == True or oldpack.endswith('.midx')):
-            # FIXME: we shouldn't really have to know about midx files
-            # at this layer.  But exists() on a midx doesn't return the
-            # packname (since it doesn't know)... probably we should just
-            # fix that deficiency of midx files eventually, although it'll
-            # make the files bigger.  This method is certainly not very
-            # efficient.
-            w.objcache.refresh(skip_midx = True)
-            oldpack = w.objcache.exists(sha)
-            log('new suggestion: %r\n' % oldpack)
-            assert(oldpack)
-            assert(oldpack != True)
-            assert(not oldpack.endswith('.midx'))
-            w.objcache.refresh(skip_midx = False)
-        if not suggested and oldpack:
-            assert(oldpack.endswith('.idx'))
-            (dir,name) = os.path.split(oldpack)
-            if not (name in suggested):
-                log("bup server: suggesting index %s\n" % name)
-                conn.write('index %s\n' % name)
-                suggested[name] = 1
-        else:
-            w._raw_write([buf])
-    # NOTREACHED
-
-
-def read_ref(conn, refname):
-    git.check_repo_or_die()
-    r = git.read_ref(refname)
-    conn.write('%s\n' % (r or '').encode('hex'))
-    conn.ok()
-
-
-def update_ref(conn, refname):
-    git.check_repo_or_die()
-    newval = conn.readline().strip()
-    oldval = conn.readline().strip()
-    git.update_ref(refname, newval.decode('hex'), oldval.decode('hex'))
-    conn.ok()
-
-
-def cat(conn, id):
-    git.check_repo_or_die()
-    try:
-        for blob in git.cat(id):
-            conn.write(struct.pack('!I', len(blob)))
-            conn.write(blob)
-    except KeyError, e:
-        log('server: error: %s\n' % e)
-        conn.write('\0\0\0\0')
-        conn.error(e)
-    else:
-        conn.write('\0\0\0\0')
-        conn.ok()
-
-
-optspec = """
-bup server
+        ohs = pbaa.ernq(a)  # bowrpg fvmrf va ohc ner ernfbanoyl fznyy
+        #ybt('ernq %q olgrf\a' % a)
+        vs yra(ohs) < a:
+            j.nobeg()
+            envfr Rkprcgvba('bowrpg ernq: rkcrpgrq %q olgrf, tbg %q\a'
+                            % (a, yra(ohs)))
+        (glcr, pbagrag) = tvg._qrpbqr_cnpxbow(ohs)
+        fun = tvg.pnyp_unfu(glcr, pbagrag)
+        byqcnpx = j.rkvfgf(fun)
+        # SVKZR: jr bayl fhttrfg n fvatyr vaqrk cre plpyr, orpnhfr gur pyvrag
+        # vf pheeragyl qhzo gb qbjaybnq zber guna bar cre plpyr naljnl.
+        # Npghnyyl jr fubhyq svk gur pyvrag, ohg guvf vf n zvabe bcgvzvmngvba
+        # ba gur freire fvqr.
+        vs abg fhttrfgrq naq \
+          byqcnpx naq (byqcnpx == Gehr be byqcnpx.raqfjvgu('.zvqk')):
+            # SVKZR: jr fubhyqa'g ernyyl unir gb xabj nobhg zvqk svyrf
+            # ng guvf ynlre.  Ohg rkvfgf() ba n zvqk qbrfa'g erghea gur
+            # cnpxanzr (fvapr vg qbrfa'g xabj)... cebonoyl jr fubhyq whfg
+            # svk gung qrsvpvrapl bs zvqk svyrf riraghnyyl, nygubhtu vg'yy
+            # znxr gur svyrf ovttre.  Guvf zrgubq vf pregnvayl abg irel
+            # rssvpvrag.
+            j.bowpnpur.erserfu(fxvc_zvqk = Gehr)
+            byqcnpx = j.bowpnpur.rkvfgf(fun)
+            ybt('arj fhttrfgvba: %e\a' % byqcnpx)
+            nffreg(byqcnpx)
+            nffreg(byqcnpx != Gehr)
+            nffreg(abg byqcnpx.raqfjvgu('.zvqk'))
+            j.bowpnpur.erserfu(fxvc_zvqk = Snyfr)
+        vs abg fhttrfgrq naq byqcnpx:
+            nffreg(byqcnpx.raqfjvgu('.vqk'))
+            (qve,anzr) = bf.cngu.fcyvg(byqcnpx)
+            vs abg (anzr va fhttrfgrq):
+                ybt("ohc freire: fhttrfgvat vaqrk %f\a" % anzr)
+                pbaa.jevgr('vaqrk %f\a' % anzr)
+                fhttrfgrq[anzr] = 1
+        ryfr:
+            j._enj_jevgr([ohs])
+    # ABGERNPURQ
+
+
+qrs ernq_ers(pbaa, ersanzr):
+    tvg.purpx_ercb_be_qvr()
+    e = tvg.ernq_ers(ersanzr)
+    pbaa.jevgr('%f\a' % (e be '').rapbqr('urk'))
+    pbaa.bx()
+
+
+qrs hcqngr_ers(pbaa, ersanzr):
+    tvg.purpx_ercb_be_qvr()
+    arjiny = pbaa.ernqyvar().fgevc()
+    byqiny = pbaa.ernqyvar().fgevc()
+    tvg.hcqngr_ers(ersanzr, arjiny.qrpbqr('urk'), byqiny.qrpbqr('urk'))
+    pbaa.bx()
+
+
+qrs png(pbaa, vq):
+    tvg.purpx_ercb_be_qvr()
+    gel:
+        sbe oybo va tvg.png(vq):
+            pbaa.jevgr(fgehpg.cnpx('!V', yra(oybo)))
+            pbaa.jevgr(oybo)
+    rkprcg XrlReebe, r:
+        ybt('freire: reebe: %f\a' % r)
+        pbaa.jevgr('\0\0\0\0')
+        pbaa.reebe(r)
+    ryfr:
+        pbaa.jevgr('\0\0\0\0')
+        pbaa.bx()
+
+
+bcgfcrp = """
+ohc freire
 """
-o = options.Options('bup server', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal('no arguments expected')
-
-log('bup server: reading from stdin.\n')
-
-commands = {
-    'init-dir': init_dir,
-    'set-dir': set_dir,
-    'list-indexes': list_indexes,
-    'send-index': send_index,
-    'receive-objects': receive_objects,
-    'read-ref': read_ref,
-    'update-ref': update_ref,
-    'cat': cat,
+b = bcgvbaf.Bcgvbaf('ohc freire', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+ybt('ohc freire: ernqvat sebz fgqva.\a')
+
+pbzznaqf = {
+    'vavg-qve': vavg_qve,
+    'frg-qve': frg_qve,
+    'yvfg-vaqrkrf': yvfg_vaqrkrf,
+    'fraq-vaqrk': fraq_vaqrk,
+    'erprvir-bowrpgf': erprvir_bowrpgf,
+    'ernq-ers': ernq_ers,
+    'hcqngr-ers': hcqngr_ers,
+    'png': png,
 }
 
-# FIXME: this protocol is totally lame and not at all future-proof.
-# (Especially since we abort completely as soon as *anything* bad happens)
-conn = Conn(sys.stdin, sys.stdout)
-lr = linereader(conn)
-for _line in lr:
-    line = _line.strip()
-    if not line:
-        continue
-    log('bup server: command: %r\n' % line)
-    words = line.split(' ', 1)
-    cmd = words[0]
-    rest = len(words)>1 and words[1] or ''
-    if cmd == 'quit':
-        break
-    else:
-        cmd = commands.get(cmd)
-        if cmd:
-            cmd(conn, rest)
-        else:
-            raise Exception('unknown server command: %r\n' % line)
-
-log('bup server: done\n')
-#!/usr/bin/env python
-import sys, time, struct
-from bup import hashsplit, git, options, client
-from bup.helpers import *
-from subprocess import PIPE
-
-
-optspec = """
-bup join [-r host:path] [refs or hashes...]
+# SVKZR: guvf cebgbpby vf gbgnyyl ynzr naq abg ng nyy shgher-cebbs.
+# (Rfcrpvnyyl fvapr jr nobeg pbzcyrgryl nf fbba nf *nalguvat* onq unccraf)
+pbaa = Pbaa(flf.fgqva, flf.fgqbhg)
+ye = yvarernqre(pbaa)
+sbe _yvar va ye:
+    yvar = _yvar.fgevc()
+    vs abg yvar:
+        pbagvahr
+    ybt('ohc freire: pbzznaq: %e\a' % yvar)
+    jbeqf = yvar.fcyvg(' ', 1)
+    pzq = jbeqf[0]
+    erfg = yra(jbeqf)>1 naq jbeqf[1] be ''
+    vs pzq == 'dhvg':
+        oernx
+    ryfr:
+        pzq = pbzznaqf.trg(pzq)
+        vs pzq:
+            pzq(pbaa, erfg)
+        ryfr:
+            envfr Rkprcgvba('haxabja freire pbzznaq: %e\a' % yvar)
+
+ybt('ohc freire: qbar\a')
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr, fgehpg
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+sebz fhocebprff vzcbeg CVCR
+
+
+bcgfcrp = """
+ohc wbva [-e ubfg:cngu] [ersf be unfurf...]
 --
-r,remote=  remote repository path
+e,erzbgr=  erzbgr ercbfvgbel cngu
 """
-o = options.Options('bup join', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
+b = bcgvbaf.Bcgvbaf('ohc wbva', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
 
-git.check_repo_or_die()
+tvg.purpx_ercb_be_qvr()
 
-if not extra:
-    extra = linereader(sys.stdin)
+vs abg rkgen:
+    rkgen = yvarernqre(flf.fgqva)
 
-ret = 0
+erg = 0
 
-if opt.remote:
-    cli = client.Client(opt.remote)
-    cat = cli.cat
-else:
-    cp = git.CatPipe()
-    cat = cp.join
+vs bcg.erzbgr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    png = pyv.png
+ryfr:
+    pc = tvg.PngCvcr()
+    png = pc.wbva
 
-for id in extra:
-    try:
-        for blob in cat(id):
-            sys.stdout.write(blob)
-    except KeyError, e:
-        sys.stdout.flush()
-        log('error: %s\n' % e)
-        ret = 1
+sbe vq va rkgen:
+    gel:
+        sbe oybo va png(vq):
+            flf.fgqbhg.jevgr(oybo)
+    rkprcg XrlReebe, r:
+        flf.fgqbhg.syhfu()
+        ybt('reebe: %f\a' % r)
+        erg = 1
 
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, re, errno, stat, time, math
-from bup import hashsplit, git, options, index, client
-from bup.helpers import *
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, er, reeab, fgng, gvzr, zngu
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, vaqrk, pyvrag
+sebz ohc.urycref vzcbeg *
 
 
-optspec = """
-bup save [-tc] [-n name] <filenames...>
+bcgfcrp = """
+ohc fnir [-gp] [-a anzr] <svyranzrf...>
 --
-r,remote=  remote repository path
-t,tree     output a tree id
-c,commit   output a commit id
-n,name=    name of backup set to update (if any)
-v,verbose  increase log output (can be used more than once)
-q,quiet    don't show progress meter
-smaller=   only back up files smaller than n bytes
+e,erzbgr=  erzbgr ercbfvgbel cngu
+g,gerr     bhgchg n gerr vq
+p,pbzzvg   bhgchg n pbzzvg vq
+a,anzr=    anzr bs onpxhc frg gb hcqngr (vs nal)
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
+d,dhvrg    qba'g fubj cebterff zrgre
+fznyyre=   bayl onpx hc svyrf fznyyre guna a olgrf
 """
-o = options.Options('bup save', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-if not (opt.tree or opt.commit or opt.name):
-    o.fatal("use one or more of -t, -c, -n")
-if not extra:
-    o.fatal("no filenames given")
-
-opt.progress = (istty and not opt.quiet)
-opt.smaller = parse_num(opt.smaller or 0)
-
-is_reverse = os.environ.get('BUP_SERVER_REVERSE')
-if is_reverse and opt.remote:
-    o.fatal("don't use -r in reverse mode; it's automatic")
-
-refname = opt.name and 'refs/heads/%s' % opt.name or None
-if opt.remote or is_reverse:
-    cli = client.Client(opt.remote)
-    oldref = refname and cli.read_ref(refname) or None
-    w = cli.new_packwriter()
-else:
-    cli = None
-    oldref = refname and git.read_ref(refname) or None
-    w = git.PackWriter()
-
-handle_ctrl_c()
-
-
-def eatslash(dir):
-    if dir.endswith('/'):
-        return dir[:-1]
-    else:
-        return dir
-
-
-parts = ['']
-shalists = [[]]
-
-def _push(part):
-    assert(part)
-    parts.append(part)
-    shalists.append([])
-
-def _pop(force_tree):
-    assert(len(parts) >= 1)
-    part = parts.pop()
-    shalist = shalists.pop()
-    tree = force_tree or w.new_tree(shalist)
-    if shalists:
-        shalists[-1].append(('40000', part, tree))
-    else:  # this was the toplevel, so put it back for sanity
-        shalists.append(shalist)
-    return tree
-
-lastremain = None
-def progress_report(n):
-    global count, subcount, lastremain
-    subcount += n
-    cc = count + subcount
-    pct = total and (cc*100.0/total) or 0
-    now = time.time()
-    elapsed = now - tstart
-    kps = elapsed and int(cc/1024./elapsed)
-    kps_frac = 10 ** int(math.log(kps+1, 10) - 1)
-    kps = int(kps/kps_frac)*kps_frac
-    if cc:
-        remain = elapsed*1.0/cc * (total-cc)
-    else:
-        remain = 0.0
-    if (lastremain and (remain > lastremain)
-          and ((remain - lastremain)/lastremain < 0.05)):
-        remain = lastremain
-    else:
-        lastremain = remain
-    hours = int(remain/60/60)
-    mins = int(remain/60 - hours*60)
-    secs = int(remain - hours*60*60 - mins*60)
-    if elapsed < 30:
-        remainstr = ''
-        kpsstr = ''
-    else:
-        kpsstr = '%dk/s' % kps
-        if hours:
-            remainstr = '%dh%dm' % (hours, mins)
-        elif mins:
-            remainstr = '%dm%d' % (mins, secs)
-        else:
-            remainstr = '%ds' % secs
-    progress('Saving: %.2f%% (%d/%dk, %d/%d files) %s %s\r'
-             % (pct, cc/1024, total/1024, fcount, ftotal,
-                remainstr, kpsstr))
-
-
-r = index.Reader(git.repo('bupindex'))
-
-def already_saved(ent):
-    return ent.is_valid() and w.exists(ent.sha) and ent.sha
-
-def wantrecurse_pre(ent):
-    return not already_saved(ent)
-
-def wantrecurse_during(ent):
-    return not already_saved(ent) or ent.sha_missing()
-
-total = ftotal = 0
-if opt.progress:
-    for (transname,ent) in r.filter(extra, wantrecurse=wantrecurse_pre):
-        if not (ftotal % 10024):
-            progress('Reading index: %d\r' % ftotal)
-        exists = ent.exists()
-        hashvalid = already_saved(ent)
-        ent.set_sha_missing(not hashvalid)
-        if not opt.smaller or ent.size < opt.smaller:
-            if exists and not hashvalid:
-                total += ent.size
-        ftotal += 1
-    progress('Reading index: %d, done.\n' % ftotal)
-    hashsplit.progress_callback = progress_report
-
-tstart = time.time()
-count = subcount = fcount = 0
-lastskip_name = None
-lastdir = ''
-for (transname,ent) in r.filter(extra, wantrecurse=wantrecurse_during):
-    (dir, file) = os.path.split(ent.name)
-    exists = (ent.flags & index.IX_EXISTS)
-    hashvalid = already_saved(ent)
-    wasmissing = ent.sha_missing()
-    oldsize = ent.size
-    if opt.verbose:
-        if not exists:
-            status = 'D'
-        elif not hashvalid:
-            if ent.sha == index.EMPTY_SHA:
-                status = 'A'
-            else:
-                status = 'M'
-        else:
-            status = ' '
-        if opt.verbose >= 2:
-            log('%s %-70s\n' % (status, ent.name))
-        elif not stat.S_ISDIR(ent.mode) and lastdir != dir:
-            if not lastdir.startswith(dir):
-                log('%s %-70s\n' % (status, os.path.join(dir, '')))
-            lastdir = dir
-
-    if opt.progress:
-        progress_report(0)
-    fcount += 1
+b = bcgvbaf.Bcgvbaf('ohc fnir', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+vs abg (bcg.gerr be bcg.pbzzvg be bcg.anzr):
+    b.sngny("hfr bar be zber bs -g, -p, -a")
+vs abg rkgen:
+    b.sngny("ab svyranzrf tvira")
+
+bcg.cebterff = (vfggl naq abg bcg.dhvrg)
+bcg.fznyyre = cnefr_ahz(bcg.fznyyre be 0)
+
+vf_erirefr = bf.raiveba.trg('OHC_FREIRE_ERIREFR')
+vs vf_erirefr naq bcg.erzbgr:
+    b.sngny("qba'g hfr -e va erirefr zbqr; vg'f nhgbzngvp")
+
+ersanzr = bcg.anzr naq 'ersf/urnqf/%f' % bcg.anzr be Abar
+vs bcg.erzbgr be vf_erirefr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    byqers = ersanzr naq pyv.ernq_ers(ersanzr) be Abar
+    j = pyv.arj_cnpxjevgre()
+ryfr:
+    pyv = Abar
+    byqers = ersanzr naq tvg.ernq_ers(ersanzr) be Abar
+    j = tvg.CnpxJevgre()
+
+unaqyr_pgey_p()
+
+
+qrs rngfynfu(qve):
+    vs qve.raqfjvgu('/'):
+        erghea qve[:-1]
+    ryfr:
+        erghea qve
+
+
+cnegf = ['']
+funyvfgf = [[]]
+
+qrs _chfu(cneg):
+    nffreg(cneg)
+    cnegf.nccraq(cneg)
+    funyvfgf.nccraq([])
+
+qrs _cbc(sbepr_gerr):
+    nffreg(yra(cnegf) >= 1)
+    cneg = cnegf.cbc()
+    funyvfg = funyvfgf.cbc()
+    gerr = sbepr_gerr be j.arj_gerr(funyvfg)
+    vs funyvfgf:
+        funyvfgf[-1].nccraq(('40000', cneg, gerr))
+    ryfr:  # guvf jnf gur gbcyriry, fb chg vg onpx sbe fnavgl
+        funyvfgf.nccraq(funyvfg)
+    erghea gerr
+
+ynfgerznva = Abar
+qrs cebterff_ercbeg(a):
+    tybony pbhag, fhopbhag, ynfgerznva
+    fhopbhag += a
+    pp = pbhag + fhopbhag
+    cpg = gbgny naq (pp*100.0/gbgny) be 0
+    abj = gvzr.gvzr()
+    ryncfrq = abj - gfgneg
+    xcf = ryncfrq naq vag(pp/1024./ryncfrq)
+    xcf_senp = 10 ** vag(zngu.ybt(xcf+1, 10) - 1)
+    xcf = vag(xcf/xcf_senp)*xcf_senp
+    vs pp:
+        erznva = ryncfrq*1.0/pp * (gbgny-pp)
+    ryfr:
+        erznva = 0.0
+    vs (ynfgerznva naq (erznva > ynfgerznva)
+          naq ((erznva - ynfgerznva)/ynfgerznva < 0.05)):
+        erznva = ynfgerznva
+    ryfr:
+        ynfgerznva = erznva
+    ubhef = vag(erznva/60/60)
+    zvaf = vag(erznva/60 - ubhef*60)
+    frpf = vag(erznva - ubhef*60*60 - zvaf*60)
+    vs ryncfrq < 30:
+        erznvafge = ''
+        xcffge = ''
+    ryfr:
+        xcffge = '%qx/f' % xcf
+        vs ubhef:
+            erznvafge = '%qu%qz' % (ubhef, zvaf)
+        ryvs zvaf:
+            erznvafge = '%qz%q' % (zvaf, frpf)
+        ryfr:
+            erznvafge = '%qf' % frpf
+    cebterff('Fnivat: %.2s%% (%q/%qx, %q/%q svyrf) %f %f\e'
+             % (cpg, pp/1024, gbgny/1024, spbhag, sgbgny,
+                erznvafge, xcffge))
+
+
+e = vaqrk.Ernqre(tvg.ercb('ohcvaqrk'))
+
+qrs nyernql_fnirq(rag):
+    erghea rag.vf_inyvq() naq j.rkvfgf(rag.fun) naq rag.fun
+
+qrs jnagerphefr_cer(rag):
+    erghea abg nyernql_fnirq(rag)
+
+qrs jnagerphefr_qhevat(rag):
+    erghea abg nyernql_fnirq(rag) be rag.fun_zvffvat()
+
+gbgny = sgbgny = 0
+vs bcg.cebterff:
+    sbe (genafanzr,rag) va e.svygre(rkgen, jnagerphefr=jnagerphefr_cer):
+        vs abg (sgbgny % 10024):
+            cebterff('Ernqvat vaqrk: %q\e' % sgbgny)
+        rkvfgf = rag.rkvfgf()
+        unfuinyvq = nyernql_fnirq(rag)
+        rag.frg_fun_zvffvat(abg unfuinyvq)
+        vs abg bcg.fznyyre be rag.fvmr < bcg.fznyyre:
+            vs rkvfgf naq abg unfuinyvq:
+                gbgny += rag.fvmr
+        sgbgny += 1
+    cebterff('Ernqvat vaqrk: %q, qbar.\a' % sgbgny)
+    unfufcyvg.cebterff_pnyyonpx = cebterff_ercbeg
+
+gfgneg = gvzr.gvzr()
+pbhag = fhopbhag = spbhag = 0
+ynfgfxvc_anzr = Abar
+ynfgqve = ''
+sbe (genafanzr,rag) va e.svygre(rkgen, jnagerphefr=jnagerphefr_qhevat):
+    (qve, svyr) = bf.cngu.fcyvg(rag.anzr)
+    rkvfgf = (rag.syntf & vaqrk.VK_RKVFGF)
+    unfuinyvq = nyernql_fnirq(rag)
+    jnfzvffvat = rag.fun_zvffvat()
+    byqfvmr = rag.fvmr
+    vs bcg.ireobfr:
+        vs abg rkvfgf:
+            fgnghf = 'Q'
+        ryvs abg unfuinyvq:
+            vs rag.fun == vaqrk.RZCGL_FUN:
+                fgnghf = 'N'
+            ryfr:
+                fgnghf = 'Z'
+        ryfr:
+            fgnghf = ' '
+        vs bcg.ireobfr >= 2:
+            ybt('%f %-70f\a' % (fgnghf, rag.anzr))
+        ryvs abg fgng.F_VFQVE(rag.zbqr) naq ynfgqve != qve:
+            vs abg ynfgqve.fgnegfjvgu(qve):
+                ybt('%f %-70f\a' % (fgnghf, bf.cngu.wbva(qve, '')))
+            ynfgqve = qve
+
+    vs bcg.cebterff:
+        cebterff_ercbeg(0)
+    spbhag += 1
     
-    if not exists:
-        continue
-    if opt.smaller and ent.size >= opt.smaller:
-        if exists and not hashvalid:
-            add_error('skipping large file "%s"' % ent.name)
-            lastskip_name = ent.name
-        continue
-
-    assert(dir.startswith('/'))
-    dirp = dir.split('/')
-    while parts > dirp:
-        _pop(force_tree = None)
-    if dir != '/':
-        for part in dirp[len(parts):]:
-            _push(part)
-
-    if not file:
-        # no filename portion means this is a subdir.  But
-        # sub/parentdirectories already handled in the pop/push() part above.
-        oldtree = already_saved(ent) # may be None
-        newtree = _pop(force_tree = oldtree)
-        if not oldtree:
-            if lastskip_name and lastskip_name.startswith(ent.name):
-                ent.invalidate()
-            else:
-                ent.validate(040000, newtree)
-            ent.repack()
-        if exists and wasmissing:
-            count += oldsize
-        continue
-
-    # it's not a directory
-    id = None
-    if hashvalid:
-        mode = '%o' % ent.gitmode
-        id = ent.sha
-        shalists[-1].append((mode
-                             git.mangle_name(file, ent.mode, ent.gitmode),
-                             id))
-    else:
-        if stat.S_ISREG(ent.mode):
-            try:
-                f = hashsplit.open_noatime(ent.name)
-            except IOError, e:
-                add_error(e)
-                lastskip_name = ent.name
-            except OSError, e:
-                add_error(e)
-                lastskip_name = ent.name
-            else:
-                (mode, id) = hashsplit.split_to_blob_or_tree(w, [f])
-        else:
-            if stat.S_ISDIR(ent.mode):
-                assert(0)  # handled above
-            elif stat.S_ISLNK(ent.mode):
-                try:
-                    rl = os.readlink(ent.name)
-                except OSError, e:
-                    add_error(e)
-                    lastskip_name = ent.name
-                except IOError, e:
-                    add_error(e)
-                    lastskip_name = ent.name
-                else:
-                    (mode, id) = ('120000', w.new_blob(rl))
-            else:
-                add_error(Exception('skipping special file "%s"' % ent.name))
-                lastskip_name = ent.name
-        if id:
-            ent.validate(int(mode, 8), id)
-            ent.repack()
-            shalists[-1].append((mode,
-                                 git.mangle_name(file, ent.mode, ent.gitmode),
-                                 id))
-    if exists and wasmissing:
-        count += oldsize
-        subcount = 0
-
-
-if opt.progress:
-    pct = total and count*100.0/total or 100
-    progress('Saving: %.2f%% (%d/%dk, %d/%d files), done.    \n'
-             % (pct, count/1024, total/1024, fcount, ftotal))
-
-while len(parts) > 1:
-    _pop(force_tree = None)
-assert(len(shalists) == 1)
-tree = w.new_tree(shalists[-1])
-if opt.tree:
-    print tree.encode('hex')
-if opt.commit or opt.name:
-    msg = 'bup save\n\nGenerated by command:\n%r' % sys.argv
-    ref = opt.name and ('refs/heads/%s' % opt.name) or None
-    commit = w.new_commit(oldref, tree, msg)
-    if opt.commit:
-        print commit.encode('hex')
-
-w.close()  # must close before we can update the ref
+    vs abg rkvfgf:
+        pbagvahr
+    vs bcg.fznyyre naq rag.fvmr >= bcg.fznyyre:
+        vs rkvfgf naq abg unfuinyvq:
+            nqq_reebe('fxvccvat ynetr svyr "%f"' % rag.anzr)
+            ynfgfxvc_anzr = rag.anzr
+        pbagvahr
+
+    nffreg(qve.fgnegfjvgu('/'))
+    qvec = qve.fcyvg('/')
+    juvyr cnegf > qvec:
+        _cbc(sbepr_gerr = Abar)
+    vs qve != '/':
+        sbe cneg va qvec[yra(cnegf):]:
+            _chfu(cneg)
+
+    vs abg svyr:
+        # ab svyranzr cbegvba zrnaf guvf vf n fhoqve.  Ohg
+        # fho/cneragqverpgbevrf nyernql unaqyrq va gur cbc/chfu() cneg nobir.
+        byqgerr = nyernql_fnirq(rag) # znl or Abar
+        arjgerr = _cbc(sbepr_gerr = byqgerr)
+        vs abg byqgerr:
+            vs ynfgfxvc_anzr naq ynfgfxvc_anzr.fgnegfjvgu(rag.anzr):
+                rag.vainyvqngr()
+            ryfr:
+                rag.inyvqngr(040000, arjgerr)
+            rag.ercnpx()
+        vs rkvfgf naq jnfzvffvat:
+            pbhag += byqfvmr
+        pbagvahr
+
+    # vg'f abg n qverpgbel
+    vq = Abar
+    vs unfuinyvq:
+        zbqr = '%b' % rag.tvgzbqr
+        vq = rag.fun
+        funyvfgf[-1].nccraq((zbqr
+                             tvg.znatyr_anzr(svyr, rag.zbqr, rag.tvgzbqr),
+                             vq))
+    ryfr:
+        vs fgng.F_VFERT(rag.zbqr):
+            gel:
+                s = unfufcyvg.bcra_abngvzr(rag.anzr)
+            rkprcg VBReebe, r:
+                nqq_reebe(r)
+                ynfgfxvc_anzr = rag.anzr
+            rkprcg BFReebe, r:
+                nqq_reebe(r)
+                ynfgfxvc_anzr = rag.anzr
+            ryfr:
+                (zbqr, vq) = unfufcyvg.fcyvg_gb_oybo_be_gerr(j, [s])
+        ryfr:
+            vs fgng.F_VFQVE(rag.zbqr):
+                nffreg(0)  # unaqyrq nobir
+            ryvs fgng.F_VFYAX(rag.zbqr):
+                gel:
+                    ey = bf.ernqyvax(rag.anzr)
+                rkprcg BFReebe, r:
+                    nqq_reebe(r)
+                    ynfgfxvc_anzr = rag.anzr
+                rkprcg VBReebe, r:
+                    nqq_reebe(r)
+                    ynfgfxvc_anzr = rag.anzr
+                ryfr:
+                    (zbqr, vq) = ('120000', j.arj_oybo(ey))
+            ryfr:
+                nqq_reebe(Rkprcgvba('fxvccvat fcrpvny svyr "%f"' % rag.anzr))
+                ynfgfxvc_anzr = rag.anzr
+        vs vq:
+            rag.inyvqngr(vag(zbqr, 8), vq)
+            rag.ercnpx()
+            funyvfgf[-1].nccraq((zbqr,
+                                 tvg.znatyr_anzr(svyr, rag.zbqr, rag.tvgzbqr),
+                                 vq))
+    vs rkvfgf naq jnfzvffvat:
+        pbhag += byqfvmr
+        fhopbhag = 0
+
+
+vs bcg.cebterff:
+    cpg = gbgny naq pbhag*100.0/gbgny be 100
+    cebterff('Fnivat: %.2s%% (%q/%qx, %q/%q svyrf), qbar.    \a'
+             % (cpg, pbhag/1024, gbgny/1024, spbhag, sgbgny))
+
+juvyr yra(cnegf) > 1:
+    _cbc(sbepr_gerr = Abar)
+nffreg(yra(funyvfgf) == 1)
+gerr = j.arj_gerr(funyvfgf[-1])
+vs bcg.gerr:
+    cevag gerr.rapbqr('urk')
+vs bcg.pbzzvg be bcg.anzr:
+    zft = 'ohc fnir\a\aTrarengrq ol pbzznaq:\a%e' % flf.neti
+    ers = bcg.anzr naq ('ersf/urnqf/%f' % bcg.anzr) be Abar
+    pbzzvg = j.arj_pbzzvg(byqers, gerr, zft)
+    vs bcg.pbzzvg:
+        cevag pbzzvg.rapbqr('urk')
+
+j.pybfr()  # zhfg pybfr orsber jr pna hcqngr gur ers
         
-if opt.name:
-    if cli:
-        cli.update_ref(refname, commit, oldref)
-    else:
-        git.update_ref(refname, commit, oldref)
-
-if cli:
-    cli.close()
-
-if saved_errors:
-    log('WARNING: %d errors encountered while saving.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, time
-from bup import options
-
-optspec = """
-bup tick
+vs bcg.anzr:
+    vs pyv:
+        pyv.hcqngr_ers(ersanzr, pbzzvg, byqers)
+    ryfr:
+        tvg.hcqngr_ers(ersanzr, pbzzvg, byqers)
+
+vs pyv:
+    pyv.pybfr()
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq juvyr fnivat.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc gvpx
 """
-o = options.Options('bup tick', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-t = time.time()
-tleft = 1 - (t - int(t))
-time.sleep(tleft)
-#!/usr/bin/env python
-import os, sys, stat, time
-from bup import options, git, index, drecurse
-from bup.helpers import *
-
-
-def merge_indexes(out, r1, r2):
-    for e in index.MergeIter([r1, r2]):
-        # FIXME: shouldn't we remove deleted entries eventually?  When?
-        out.add_ixentry(e)
-
-
-class IterHelper:
-    def __init__(self, l):
-        self.i = iter(l)
-        self.cur = None
-        self.next()
-
-    def next(self):
-        try:
-            self.cur = self.i.next()
-        except StopIteration:
-            self.cur = None
-        return self.cur
-
-
-def check_index(reader):
-    try:
-        log('check: checking forward iteration...\n')
-        e = None
-        d = {}
-        for e in reader.forward_iter():
-            if e.children_n:
-                if opt.verbose:
-                    log('%08x+%-4d %r\n' % (e.children_ofs, e.children_n,
-                                            e.name))
-                assert(e.children_ofs)
-                assert(e.name.endswith('/'))
-                assert(not d.get(e.children_ofs))
-                d[e.children_ofs] = 1
-            if e.flags & index.IX_HASHVALID:
-                assert(e.sha != index.EMPTY_SHA)
-                assert(e.gitmode)
-        assert(not e or e.name == '/')  # last entry is *always* /
-        log('check: checking normal iteration...\n')
-        last = None
-        for e in reader:
-            if last:
-                assert(last > e.name)
-            last = e.name
-    except:
-        log('index error! at %r\n' % e)
-        raise
-    log('check: passed.\n')
-
-
-def update_index(top):
-    ri = index.Reader(indexfile)
-    wi = index.Writer(indexfile)
-    rig = IterHelper(ri.iter(name=top))
-    tstart = int(time.time())
-
-    hashgen = None
-    if opt.fake_valid:
-        def hashgen(name):
-            return (0100644, index.FAKE_SHA)
-
-    total = 0
-    for (path,pst) in drecurse.recursive_dirlist([top], xdev=opt.xdev):
-        if opt.verbose>=2 or (opt.verbose==1 and stat.S_ISDIR(pst.st_mode)):
-            sys.stdout.write('%s\n' % path)
-            sys.stdout.flush()
-            progress('Indexing: %d\r' % total)
-        elif not (total % 128):
-            progress('Indexing: %d\r' % total)
-        total += 1
-        while rig.cur and rig.cur.name > path:  # deleted paths
-            if rig.cur.exists():
-                rig.cur.set_deleted()
-                rig.cur.repack()
-            rig.next()
-        if rig.cur and rig.cur.name == path:    # paths that already existed
-            if pst:
-                rig.cur.from_stat(pst, tstart)
-            if not (rig.cur.flags & index.IX_HASHVALID):
-                if hashgen:
-                    (rig.cur.gitmode, rig.cur.sha) = hashgen(path)
-                    rig.cur.flags |= index.IX_HASHVALID
-            if opt.fake_invalid:
-                rig.cur.invalidate()
-            rig.cur.repack()
-            rig.next()
-        else:  # new paths
-            wi.add(path, pst, hashgen = hashgen)
-    progress('Indexing: %d, done.\n' % total)
+b = bcgvbaf.Bcgvbaf('ohc gvpx', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+g = gvzr.gvzr()
+gyrsg = 1 - (g - vag(g))
+gvzr.fyrrc(gyrsg)
+#!/hfe/ova/rai clguba
+vzcbeg bf, flf, fgng, gvzr
+sebz ohc vzcbeg bcgvbaf, tvg, vaqrk, qerphefr
+sebz ohc.urycref vzcbeg *
+
+
+qrs zretr_vaqrkrf(bhg, e1, e2):
+    sbe r va vaqrk.ZretrVgre([e1, e2]):
+        # SVKZR: fubhyqa'g jr erzbir qryrgrq ragevrf riraghnyyl?  Jura?
+        bhg.nqq_vkragel(r)
+
+
+pynff VgreUrycre:
+    qrs __vavg__(frys, y):
+        frys.v = vgre(y)
+        frys.phe = Abar
+        frys.arkg()
+
+    qrs arkg(frys):
+        gel:
+            frys.phe = frys.v.arkg()
+        rkprcg FgbcVgrengvba:
+            frys.phe = Abar
+        erghea frys.phe
+
+
+qrs purpx_vaqrk(ernqre):
+    gel:
+        ybt('purpx: purpxvat sbejneq vgrengvba...\a')
+        r = Abar
+        q = {}
+        sbe r va ernqre.sbejneq_vgre():
+            vs r.puvyqera_a:
+                vs bcg.ireobfr:
+                    ybt('%08k+%-4q %e\a' % (r.puvyqera_bsf, r.puvyqera_a,
+                                            r.anzr))
+                nffreg(r.puvyqera_bsf)
+                nffreg(r.anzr.raqfjvgu('/'))
+                nffreg(abg q.trg(r.puvyqera_bsf))
+                q[r.puvyqera_bsf] = 1
+            vs r.syntf & vaqrk.VK_UNFUINYVQ:
+                nffreg(r.fun != vaqrk.RZCGL_FUN)
+                nffreg(r.tvgzbqr)
+        nffreg(abg r be r.anzr == '/')  # ynfg ragel vf *nyjnlf* /
+        ybt('purpx: purpxvat abezny vgrengvba...\a')
+        ynfg = Abar
+        sbe r va ernqre:
+            vs ynfg:
+                nffreg(ynfg > r.anzr)
+            ynfg = r.anzr
+    rkprcg:
+        ybt('vaqrk reebe! ng %e\a' % r)
+        envfr
+    ybt('purpx: cnffrq.\a')
+
+
+qrs hcqngr_vaqrk(gbc):
+    ev = vaqrk.Ernqre(vaqrksvyr)
+    jv = vaqrk.Jevgre(vaqrksvyr)
+    evt = VgreUrycre(ev.vgre(anzr=gbc))
+    gfgneg = vag(gvzr.gvzr())
+
+    unfutra = Abar
+    vs bcg.snxr_inyvq:
+        qrs unfutra(anzr):
+            erghea (0100644, vaqrk.SNXR_FUN)
+
+    gbgny = 0
+    sbe (cngu,cfg) va qerphefr.erphefvir_qveyvfg([gbc], kqri=bcg.kqri):
+        vs bcg.ireobfr>=2 be (bcg.ireobfr==1 naq fgng.F_VFQVE(cfg.fg_zbqr)):
+            flf.fgqbhg.jevgr('%f\a' % cngu)
+            flf.fgqbhg.syhfu()
+            cebterff('Vaqrkvat: %q\e' % gbgny)
+        ryvs abg (gbgny % 128):
+            cebterff('Vaqrkvat: %q\e' % gbgny)
+        gbgny += 1
+        juvyr evt.phe naq evt.phe.anzr > cngu:  # qryrgrq cnguf
+            vs evt.phe.rkvfgf():
+                evt.phe.frg_qryrgrq()
+                evt.phe.ercnpx()
+            evt.arkg()
+        vs evt.phe naq evt.phe.anzr == cngu:    # cnguf gung nyernql rkvfgrq
+            vs cfg:
+                evt.phe.sebz_fgng(cfg, gfgneg)
+            vs abg (evt.phe.syntf & vaqrk.VK_UNFUINYVQ):
+                vs unfutra:
+                    (evt.phe.tvgzbqr, evt.phe.fun) = unfutra(cngu)
+                    evt.phe.syntf |= vaqrk.VK_UNFUINYVQ
+            vs bcg.snxr_vainyvq:
+                evt.phe.vainyvqngr()
+            evt.phe.ercnpx()
+            evt.arkg()
+        ryfr:  # arj cnguf
+            jv.nqq(cngu, cfg, unfutra = unfutra)
+    cebterff('Vaqrkvat: %q, qbar.\a' % gbgny)
     
-    if ri.exists():
-        ri.save()
-        wi.flush()
-        if wi.count:
-            wr = wi.new_reader()
-            if opt.check:
-                log('check: before merging: oldfile\n')
-                check_index(ri)
-                log('check: before merging: newfile\n')
-                check_index(wr)
-            mi = index.Writer(indexfile)
-            merge_indexes(mi, ri, wr)
-            ri.close()
-            mi.close()
-            wr.close()
-        wi.abort()
-    else:
-        wi.close()
-
-
-optspec = """
-bup index <-p|m|u> [options...] <filenames...>
+    vs ev.rkvfgf():
+        ev.fnir()
+        jv.syhfu()
+        vs jv.pbhag:
+            je = jv.arj_ernqre()
+            vs bcg.purpx:
+                ybt('purpx: orsber zretvat: byqsvyr\a')
+                purpx_vaqrk(ev)
+                ybt('purpx: orsber zretvat: arjsvyr\a')
+                purpx_vaqrk(je)
+            zv = vaqrk.Jevgre(vaqrksvyr)
+            zretr_vaqrkrf(zv, ev, je)
+            ev.pybfr()
+            zv.pybfr()
+            je.pybfr()
+        jv.nobeg()
+    ryfr:
+        jv.pybfr()
+
+
+bcgfcrp = """
+ohc vaqrk <-c|z|h> [bcgvbaf...] <svyranzrf...>
 --
-p,print    print the index entries for the given names (also works with -u)
-m,modified print only added/deleted/modified files (implies -p)
-s,status   print each filename with a status char (A/M/D) (implies -p)
-H,hash     print the hash for each object next to its name (implies -p)
-l,long     print more information about each file
-u,update   (recursively) update the index entries for the given filenames
-x,xdev,one-file-system  don't cross filesystem boundaries
-fake-valid mark all index entries as up-to-date even if they aren't
-fake-invalid mark all index entries as invalid
-check      carefully check index file integrity
-f,indexfile=  the name of the index file (default 'index')
-v,verbose  increase log output (can be used more than once)
+c,cevag    cevag gur vaqrk ragevrf sbe gur tvira anzrf (nyfb jbexf jvgu -h)
+z,zbqvsvrq cevag bayl nqqrq/qryrgrq/zbqvsvrq svyrf (vzcyvrf -c)
+f,fgnghf   cevag rnpu svyranzr jvgu n fgnghf pune (N/Z/Q) (vzcyvrf -c)
+U,unfu     cevag gur unfu sbe rnpu bowrpg arkg gb vgf anzr (vzcyvrf -c)
+y,ybat     cevag zber vasbezngvba nobhg rnpu svyr
+h,hcqngr   (erphefviryl) hcqngr gur vaqrk ragevrf sbe gur tvira svyranzrf
+k,kqri,bar-svyr-flfgrz  qba'g pebff svyrflfgrz obhaqnevrf
+snxr-inyvq znex nyy vaqrk ragevrf nf hc-gb-qngr rira vs gurl nera'g
+snxr-vainyvq znex nyy vaqrk ragevrf nf vainyvq
+purpx      pnershyyl purpx vaqrk svyr vagrtevgl
+s,vaqrksvyr=  gur anzr bs gur vaqrk svyr (qrsnhyg 'vaqrk')
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
 """
-o = options.Options('bup index', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if not (opt.modified or opt['print'] or opt.status or opt.update or opt.check):
-    o.fatal('supply one or more of -p, -s, -m, -u, or --check')
-if (opt.fake_valid or opt.fake_invalid) and not opt.update:
-    o.fatal('--fake-{in,}valid are meaningless without -u')
-if opt.fake_valid and opt.fake_invalid:
-    o.fatal('--fake-valid is incompatible with --fake-invalid')
-
-git.check_repo_or_die()
-indexfile = opt.indexfile or git.repo('bupindex')
-
-handle_ctrl_c()
-
-if opt.check:
-    log('check: starting initial check.\n')
-    check_index(index.Reader(indexfile))
-
-paths = index.reduce_paths(extra)
-
-if opt.update:
-    if not paths:
-        o.fatal('update (-u) requested but no paths given')
-    for (rp,path) in paths:
-        update_index(rp)
-
-if opt['print'] or opt.status or opt.modified:
-    for (name, ent) in index.Reader(indexfile).filter(extra or ['']):
-        if (opt.modified 
-            and (ent.is_valid() or ent.is_deleted() or not ent.mode)):
-            continue
-        line = ''
-        if opt.status:
-            if ent.is_deleted():
-                line += 'D '
-            elif not ent.is_valid():
-                if ent.sha == index.EMPTY_SHA:
-                    line += 'A '
-                else:
-                    line += 'M '
-            else:
-                line += '  '
-        if opt.hash:
-            line += ent.sha.encode('hex') + ' '
-        if opt.long:
-            line += "%7s %7s " % (oct(ent.mode), oct(ent.gitmode))
-        print line + (name or './')
-
-if opt.check and (opt['print'] or opt.status or opt.modified or opt.update):
-    log('check: starting final check.\n')
-    check_index(index.Reader(indexfile))
-
-if saved_errors:
-    log('WARNING: %d errors encountered.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, os, struct
-from bup import options, helpers
-
-optspec = """
-bup rbackup-server
+b = bcgvbaf.Bcgvbaf('ohc vaqrk', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs abg (bcg.zbqvsvrq be bcg['cevag'] be bcg.fgnghf be bcg.hcqngr be bcg.purpx):
+    b.sngny('fhccyl bar be zber bs -c, -f, -z, -h, be --purpx')
+vs (bcg.snxr_inyvq be bcg.snxr_vainyvq) naq abg bcg.hcqngr:
+    b.sngny('--snxr-{va,}inyvq ner zrnavatyrff jvgubhg -h')
+vs bcg.snxr_inyvq naq bcg.snxr_vainyvq:
+    b.sngny('--snxr-inyvq vf vapbzcngvoyr jvgu --snxr-vainyvq')
+
+tvg.purpx_ercb_be_qvr()
+vaqrksvyr = bcg.vaqrksvyr be tvg.ercb('ohcvaqrk')
+
+unaqyr_pgey_p()
+
+vs bcg.purpx:
+    ybt('purpx: fgnegvat vavgvny purpx.\a')
+    purpx_vaqrk(vaqrk.Ernqre(vaqrksvyr))
+
+cnguf = vaqrk.erqhpr_cnguf(rkgen)
+
+vs bcg.hcqngr:
+    vs abg cnguf:
+        b.sngny('hcqngr (-h) erdhrfgrq ohg ab cnguf tvira')
+    sbe (ec,cngu) va cnguf:
+        hcqngr_vaqrk(ec)
+
+vs bcg['cevag'] be bcg.fgnghf be bcg.zbqvsvrq:
+    sbe (anzr, rag) va vaqrk.Ernqre(vaqrksvyr).svygre(rkgen be ['']):
+        vs (bcg.zbqvsvrq 
+            naq (rag.vf_inyvq() be rag.vf_qryrgrq() be abg rag.zbqr)):
+            pbagvahr
+        yvar = ''
+        vs bcg.fgnghf:
+            vs rag.vf_qryrgrq():
+                yvar += 'Q '
+            ryvs abg rag.vf_inyvq():
+                vs rag.fun == vaqrk.RZCGL_FUN:
+                    yvar += 'N '
+                ryfr:
+                    yvar += 'Z '
+            ryfr:
+                yvar += '  '
+        vs bcg.unfu:
+            yvar += rag.fun.rapbqr('urk') + ' '
+        vs bcg.ybat:
+            yvar += "%7f %7f " % (bpg(rag.zbqr), bpg(rag.tvgzbqr))
+        cevag yvar + (anzr be './')
+
+vs bcg.purpx naq (bcg['cevag'] be bcg.fgnghf be bcg.zbqvsvrq be bcg.hcqngr):
+    ybt('purpx: fgnegvat svany purpx.\a')
+    purpx_vaqrk(vaqrk.Ernqre(vaqrksvyr))
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgehpg
+sebz ohc vzcbeg bcgvbaf, urycref
+
+bcgfcrp = """
+ohc eonpxhc-freire
 --
-    This command is not intended to be run manually.
+    Guvf pbzznaq vf abg vagraqrq gb or eha znahnyyl.
 """
-o = options.Options('bup rbackup-server', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-if extra:
-    o.fatal('no arguments expected')
-
-# get the subcommand's argv.
-# Normally we could just pass this on the command line, but since we'll often
-# be getting called on the other end of an ssh pipe, which tends to mangle
-# argv (by sending it via the shell), this way is much safer.
-buf = sys.stdin.read(4)
-sz = struct.unpack('!I', buf)[0]
-assert(sz > 0)
-assert(sz < 1000000)
-buf = sys.stdin.read(sz)
-assert(len(buf) == sz)
-argv = buf.split('\0')
-
-# stdin/stdout are supposedly connected to 'bup server' that the caller
-# started for us (often on the other end of an ssh tunnel), so we don't want
-# to misuse them.  Move them out of the way, then replace stdout with
-# a pointer to stderr in case our subcommand wants to do something with it.
+b = bcgvbaf.Bcgvbaf('ohc eonpxhc-freire', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+# trg gur fhopbzznaq'f neti.
+# Abeznyyl jr pbhyq whfg cnff guvf ba gur pbzznaq yvar, ohg fvapr jr'yy bsgra
+# or trggvat pnyyrq ba gur bgure raq bs na ffu cvcr, juvpu graqf gb znatyr
+# neti (ol fraqvat vg ivn gur furyy), guvf jnl vf zhpu fnsre.
+ohs = flf.fgqva.ernq(4)
+fm = fgehpg.hacnpx('!V', ohs)[0]
+nffreg(fm > 0)
+nffreg(fm < 1000000)
+ohs = flf.fgqva.ernq(fm)
+nffreg(yra(ohs) == fm)
+neti = ohs.fcyvg('\0')
+
+# fgqva/fgqbhg ner fhccbfrqyl pbaarpgrq gb 'ohc freire' gung gur pnyyre
+# fgnegrq sbe hf (bsgra ba gur bgure raq bs na ffu ghaary), fb jr qba'g jnag
+# gb zvfhfr gurz.  Zbir gurz bhg bs gur jnl, gura ercynpr fgqbhg jvgu
+# n cbvagre gb fgqree va pnfr bhe fhopbzznaq jnagf gb qb fbzrguvat jvgu vg.
 #
-# It might be nice to do the same with stdin, but my experiments showed that
-# ssh seems to make its child's stderr a readable-but-never-reads-anything
-# socket.  They really should have used shutdown(SHUT_WR) on the other end
-# of it, but probably didn't.  Anyway, it's too messy, so let's just make sure
-# anyone reading from stdin is disappointed.
+# Vg zvtug or avpr gb qb gur fnzr jvgu fgqva, ohg zl rkcrevzragf fubjrq gung
+# ffu frrzf gb znxr vgf puvyq'f fgqree n ernqnoyr-ohg-arire-ernqf-nalguvat
+# fbpxrg.  Gurl ernyyl fubhyq unir hfrq fuhgqbja(FUHG_JE) ba gur bgure raq
+# bs vg, ohg cebonoyl qvqa'g.  Naljnl, vg'f gbb zrffl, fb yrg'f whfg znxr fher
+# nalbar ernqvat sebz fgqva vf qvfnccbvagrq.
 #
-# (You can't just leave stdin/stdout "not open" by closing the file
-# descriptors.  Then the next file that opens is automatically assigned 0 or 1,
-# and people *trying* to read/write stdin/stdout get screwed.)
-os.dup2(0, 3)
-os.dup2(1, 4)
-os.dup2(2, 1)
-fd = os.open('/dev/null', os.O_RDONLY)
-os.dup2(fd, 0)
-os.close(fd)
-
-os.environ['BUP_SERVER_REVERSE'] = helpers.hostname()
-os.execvp(argv[0], argv)
-sys.exit(99)
-#!/usr/bin/env python
-import sys, os, glob, subprocess, time
-from bup import options, git
-from bup.helpers import *
-
-par2_ok = 0
-nullf = open('/dev/null')
-
-def debug(s):
-    if opt.verbose:
-        log(s)
-
-def run(argv):
-    # at least in python 2.5, using "stdout=2" or "stdout=sys.stderr" below
-    # doesn't actually work, because subprocess closes fd #2 right before
-    # execing for some reason.  So we work around it by duplicating the fd
-    # first.
-    fd = os.dup(2)  # copy stderr
-    try:
-        p = subprocess.Popen(argv, stdout=fd, close_fds=False)
-        return p.wait()
-    finally:
-        os.close(fd)
-
-def par2_setup():
-    global par2_ok
-    rv = 1
-    try:
-        p = subprocess.Popen(['par2', '--help'],
-                             stdout=nullf, stderr=nullf, stdin=nullf)
-        rv = p.wait()
-    except OSError:
-        log('fsck: warning: par2 not found; disabling recovery features.\n')
-    else:
-        par2_ok = 1
-
-def parv(lvl):
-    if opt.verbose >= lvl:
-        if istty:
-            return []
-        else:
-            return ['-q']
-    else:
-        return ['-qq']
-
-def par2_generate(base):
-    return run(['par2', 'create', '-n1', '-c200'] + parv(2)
-               + ['--', base, base+'.pack', base+'.idx'])
-
-def par2_verify(base):
-    return run(['par2', 'verify'] + parv(3) + ['--', base])
-
-def par2_repair(base):
-    return run(['par2', 'repair'] + parv(2) + ['--', base])
-
-def quick_verify(base):
-    f = open(base + '.pack', 'rb')
-    f.seek(-20, 2)
-    wantsum = f.read(20)
-    assert(len(wantsum) == 20)
-    f.seek(0)
-    sum = Sha1()
-    for b in chunkyreader(f, os.fstat(f.fileno()).st_size - 20):
-        sum.update(b)
-    if sum.digest() != wantsum:
-        raise ValueError('expected %r, got %r' % (wantsum.encode('hex'),
-                                                  sum.hexdigest()))
+# (Lbh pna'g whfg yrnir fgqva/fgqbhg "abg bcra" ol pybfvat gur svyr
+# qrfpevcgbef.  Gura gur arkg svyr gung bcraf vf nhgbzngvpnyyl nffvtarq 0 be 1,
+# naq crbcyr *gelvat* gb ernq/jevgr fgqva/fgqbhg trg fperjrq.)
+bf.qhc2(0, 3)
+bf.qhc2(1, 4)
+bf.qhc2(2, 1)
+sq = bf.bcra('/qri/ahyy', bf.B_EQBAYL)
+bf.qhc2(sq, 0)
+bf.pybfr(sq)
+
+bf.raiveba['OHC_FREIRE_ERIREFR'] = urycref.ubfganzr()
+bf.rkrpic(neti[0], neti)
+flf.rkvg(99)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, tybo, fhocebprff, gvzr
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+cne2_bx = 0
+ahyys = bcra('/qri/ahyy')
+
+qrs qroht(f):
+    vs bcg.ireobfr:
+        ybt(f)
+
+qrs eha(neti):
+    # ng yrnfg va clguba 2.5, hfvat "fgqbhg=2" be "fgqbhg=flf.fgqree" orybj
+    # qbrfa'g npghnyyl jbex, orpnhfr fhocebprff pybfrf sq #2 evtug orsber
+    # rkrpvat sbe fbzr ernfba.  Fb jr jbex nebhaq vg ol qhcyvpngvat gur sq
+    # svefg.
+    sq = bf.qhc(2)  # pbcl fgqree
+    gel:
+        c = fhocebprff.Cbcra(neti, fgqbhg=sq, pybfr_sqf=Snyfr)
+        erghea c.jnvg()
+    svanyyl:
+        bf.pybfr(sq)
+
+qrs cne2_frghc():
+    tybony cne2_bx
+    ei = 1
+    gel:
+        c = fhocebprff.Cbcra(['cne2', '--uryc'],
+                             fgqbhg=ahyys, fgqree=ahyys, fgqva=ahyys)
+        ei = c.jnvg()
+    rkprcg BFReebe:
+        ybt('sfpx: jneavat: cne2 abg sbhaq; qvfnoyvat erpbirel srngherf.\a')
+    ryfr:
+        cne2_bx = 1
+
+qrs cnei(yiy):
+    vs bcg.ireobfr >= yiy:
+        vs vfggl:
+            erghea []
+        ryfr:
+            erghea ['-d']
+    ryfr:
+        erghea ['-dd']
+
+qrs cne2_trarengr(onfr):
+    erghea eha(['cne2', 'perngr', '-a1', '-p200'] + cnei(2)
+               + ['--', onfr, onfr+'.cnpx', onfr+'.vqk'])
+
+qrs cne2_irevsl(onfr):
+    erghea eha(['cne2', 'irevsl'] + cnei(3) + ['--', onfr])
+
+qrs cne2_ercnve(onfr):
+    erghea eha(['cne2', 'ercnve'] + cnei(2) + ['--', onfr])
+
+qrs dhvpx_irevsl(onfr):
+    s = bcra(onfr + '.cnpx', 'eo')
+    s.frrx(-20, 2)
+    jnagfhz = s.ernq(20)
+    nffreg(yra(jnagfhz) == 20)
+    s.frrx(0)
+    fhz = Fun1()
+    sbe o va puhaxlernqre(s, bf.sfgng(s.svyrab()).fg_fvmr - 20):
+        fhz.hcqngr(o)
+    vs fhz.qvtrfg() != jnagfhz:
+        envfr InyhrReebe('rkcrpgrq %e, tbg %e' % (jnagfhz.rapbqr('urk'),
+                                                  fhz.urkqvtrfg()))
         
 
-def git_verify(base):
-    if opt.quick:
-        try:
-            quick_verify(base)
-        except Exception, e:
-            debug('error: %s\n' % e)
-            return 1
-        return 0
-    else:
-        return run(['git', 'verify-pack', '--', base])
+qrs tvg_irevsl(onfr):
+    vs bcg.dhvpx:
+        gel:
+            dhvpx_irevsl(onfr)
+        rkprcg Rkprcgvba, r:
+            qroht('reebe: %f\a' % r)
+            erghea 1
+        erghea 0
+    ryfr:
+        erghea eha(['tvg', 'irevsl-cnpx', '--', onfr])
     
     
-def do_pack(base, last):
-    code = 0
-    if par2_ok and par2_exists and (opt.repair or not opt.generate):
-        vresult = par2_verify(base)
-        if vresult != 0:
-            if opt.repair:
-                rresult = par2_repair(base)
-                if rresult != 0:
-                    print '%s par2 repair: failed (%d)' % (last, rresult)
-                    code = rresult
-                else:
-                    print '%s par2 repair: succeeded (0)' % last
-                    code = 100
-            else:
-                print '%s par2 verify: failed (%d)' % (last, vresult)
-                code = vresult
-        else:
-            print '%s ok' % last
-    elif not opt.generate or (par2_ok and not par2_exists):
-        gresult = git_verify(base)
-        if gresult != 0:
-            print '%s git verify: failed (%d)' % (last, gresult)
-            code = gresult
-        else:
-            if par2_ok and opt.generate:
-                presult = par2_generate(base)
-                if presult != 0:
-                    print '%s par2 create: failed (%d)' % (last, presult)
-                    code = presult
-                else:
-                    print '%s ok' % last
-            else:
-                print '%s ok' % last
-    else:
-        assert(opt.generate and (not par2_ok or par2_exists))
-        debug('    skipped: par2 file already generated.\n')
-    return code
-
-
-optspec = """
-bup fsck [options...] [filenames...]
+qrs qb_cnpx(onfr, ynfg):
+    pbqr = 0
+    vs cne2_bx naq cne2_rkvfgf naq (bcg.ercnve be abg bcg.trarengr):
+        ierfhyg = cne2_irevsl(onfr)
+        vs ierfhyg != 0:
+            vs bcg.ercnve:
+                eerfhyg = cne2_ercnve(onfr)
+                vs eerfhyg != 0:
+                    cevag '%f cne2 ercnve: snvyrq (%q)' % (ynfg, eerfhyg)
+                    pbqr = eerfhyg
+                ryfr:
+                    cevag '%f cne2 ercnve: fhpprrqrq (0)' % ynfg
+                    pbqr = 100
+            ryfr:
+                cevag '%f cne2 irevsl: snvyrq (%q)' % (ynfg, ierfhyg)
+                pbqr = ierfhyg
+        ryfr:
+            cevag '%f bx' % ynfg
+    ryvs abg bcg.trarengr be (cne2_bx naq abg cne2_rkvfgf):
+        terfhyg = tvg_irevsl(onfr)
+        vs terfhyg != 0:
+            cevag '%f tvg irevsl: snvyrq (%q)' % (ynfg, terfhyg)
+            pbqr = terfhyg
+        ryfr:
+            vs cne2_bx naq bcg.trarengr:
+                cerfhyg = cne2_trarengr(onfr)
+                vs cerfhyg != 0:
+                    cevag '%f cne2 perngr: snvyrq (%q)' % (ynfg, cerfhyg)
+                    pbqr = cerfhyg
+                ryfr:
+                    cevag '%f bx' % ynfg
+            ryfr:
+                cevag '%f bx' % ynfg
+    ryfr:
+        nffreg(bcg.trarengr naq (abg cne2_bx be cne2_rkvfgf))
+        qroht('    fxvccrq: cne2 svyr nyernql trarengrq.\a')
+    erghea pbqr
+
+
+bcgfcrp = """
+ohc sfpx [bcgvbaf...] [svyranzrf...]
 --
-r,repair    attempt to repair errors using par2 (dangerous!)
-g,generate  generate auto-repair information using par2
-v,verbose   increase verbosity (can be used more than once)
-quick       just check pack sha1sum, don't use git verify-pack
-j,jobs=     run 'n' jobs in parallel
-par2-ok     immediately return 0 if par2 is ok, 1 if not
-disable-par2  ignore par2 even if it is available
+e,ercnve    nggrzcg gb ercnve reebef hfvat cne2 (qnatrebhf!)
+t,trarengr  trarengr nhgb-ercnve vasbezngvba hfvat cne2
+i,ireobfr   vapernfr ireobfvgl (pna or hfrq zber guna bapr)
+dhvpx       whfg purpx cnpx fun1fhz, qba'g hfr tvg irevsl-cnpx
+w,wbof=     eha 'a' wbof va cnenyyry
+cne2-bx     vzzrqvngryl erghea 0 vs cne2 vf bx, 1 vs abg
+qvfnoyr-cne2  vtaber cne2 rira vs vg vf ninvynoyr
 """
-o = options.Options('bup fsck', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-par2_setup()
-if opt.par2_ok:
-    if par2_ok:
-        sys.exit(0)  # 'true' in sh
-    else:
-        sys.exit(1)
-if opt.disable_par2:
-    par2_ok = 0
-
-git.check_repo_or_die()
-
-if not extra:
-    debug('fsck: No filenames given: checking all packs.\n')
-    extra = glob.glob(git.repo('objects/pack/*.pack'))
-
-code = 0
-count = 0
-outstanding = {}
-for name in extra:
-    if name.endswith('.pack'):
-        base = name[:-5]
-    elif name.endswith('.idx'):
-        base = name[:-4]
-    elif name.endswith('.par2'):
-        base = name[:-5]
-    elif os.path.exists(name + '.pack'):
-        base = name
-    else:
-        raise Exception('%s is not a pack file!' % name)
-    (dir,last) = os.path.split(base)
-    par2_exists = os.path.exists(base + '.par2')
-    if par2_exists and os.stat(base + '.par2').st_size == 0:
-        par2_exists = 0
-    sys.stdout.flush()
-    debug('fsck: checking %s (%s)\n
-          % (last, par2_ok and par2_exists and 'par2' or 'git'))
-    if not opt.verbose:
-        progress('fsck (%d/%d)\r' % (count, len(extra)))
+b = bcgvbaf.Bcgvbaf('ohc sfpx', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+cne2_frghc()
+vs bcg.cne2_bx:
+    vs cne2_bx:
+        flf.rkvg(0)  # 'gehr' va fu
+    ryfr:
+        flf.rkvg(1)
+vs bcg.qvfnoyr_cne2:
+    cne2_bx = 0
+
+tvg.purpx_ercb_be_qvr()
+
+vs abg rkgen:
+    qroht('sfpx: Ab svyranzrf tvira: purpxvat nyy cnpxf.\a')
+    rkgen = tybo.tybo(tvg.ercb('bowrpgf/cnpx/*.cnpx'))
+
+pbqr = 0
+pbhag = 0
+bhgfgnaqvat = {}
+sbe anzr va rkgen:
+    vs anzr.raqfjvgu('.cnpx'):
+        onfr = anzr[:-5]
+    ryvs anzr.raqfjvgu('.vqk'):
+        onfr = anzr[:-4]
+    ryvs anzr.raqfjvgu('.cne2'):
+        onfr = anzr[:-5]
+    ryvs bf.cngu.rkvfgf(anzr + '.cnpx'):
+        onfr = anzr
+    ryfr:
+        envfr Rkprcgvba('%f vf abg n cnpx svyr!' % anzr)
+    (qve,ynfg) = bf.cngu.fcyvg(onfr)
+    cne2_rkvfgf = bf.cngu.rkvfgf(onfr + '.cne2')
+    vs cne2_rkvfgf naq bf.fgng(onfr + '.cne2').fg_fvmr == 0:
+        cne2_rkvfgf = 0
+    flf.fgqbhg.syhfu()
+    qroht('sfpx: purpxvat %f (%f)\a
+          % (ynfg, cne2_bx naq cne2_rkvfgf naq 'cne2' be 'tvg'))
+    vs abg bcg.ireobfr:
+        cebterff('sfpx (%q/%q)\e' % (pbhag, yra(rkgen)))
     
-    if not opt.jobs:
-        nc = do_pack(base, last)
-        code = code or nc
-        count += 1
-    else:
-        while len(outstanding) >= opt.jobs:
-            (pid,nc) = os.wait()
-            nc >>= 8
-            if pid in outstanding:
-                del outstanding[pid]
-                code = code or nc
-                count += 1
-        pid = os.fork()
-        if pid:  # parent
-            outstanding[pid] = 1
-        else: # child
-            try:
-                sys.exit(do_pack(base, last))
-            except Exception, e:
-                log('exception: %r\n' % e)
-                sys.exit(99)
+    vs abg bcg.wbof:
+        ap = qb_cnpx(onfr, ynfg)
+        pbqr = pbqr be ap
+        pbhag += 1
+    ryfr:
+        juvyr yra(bhgfgnaqvat) >= bcg.wbof:
+            (cvq,ap) = bf.jnvg()
+            ap >>= 8
+            vs cvq va bhgfgnaqvat:
+                qry bhgfgnaqvat[cvq]
+                pbqr = pbqr be ap
+                pbhag += 1
+        cvq = bf.sbex()
+        vs cvq:  # cnerag
+            bhgfgnaqvat[cvq] = 1
+        ryfr: # puvyq
+            gel:
+                flf.rkvg(qb_cnpx(onfr, ynfg))
+            rkprcg Rkprcgvba, r:
+                ybt('rkprcgvba: %e\a' % r)
+                flf.rkvg(99)
                 
-while len(outstanding):
-    (pid,nc) = os.wait()
-    nc >>= 8
-    if pid in outstanding:
-        del outstanding[pid]
-        code = code or nc
-        count += 1
-    if not opt.verbose:
-        progress('fsck (%d/%d)\r' % (count, len(extra)))
-
-if not opt.verbose and istty:
-    log('fsck done.           \n')
-sys.exit(code)
-#!/usr/bin/env python
-import sys, os, struct, getopt, subprocess, signal
-from bup import options, ssh
-from bup.helpers import *
-
-optspec = """
-bup rbackup <hostname> index ...
-bup rbackup <hostname> save ...
-bup rbackup <hostname> split ...
+juvyr yra(bhgfgnaqvat):
+    (cvq,ap) = bf.jnvg()
+    ap >>= 8
+    vs cvq va bhgfgnaqvat:
+        qry bhgfgnaqvat[cvq]
+        pbqr = pbqr be ap
+        pbhag += 1
+    vs abg bcg.ireobfr:
+        cebterff('sfpx (%q/%q)\e' % (pbhag, yra(rkgen)))
+
+vs abg bcg.ireobfr naq vfggl:
+    ybt('sfpx qbar.           \a')
+flf.rkvg(pbqr)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgehpg, trgbcg, fhocebprff, fvtany
+sebz ohc vzcbeg bcgvbaf, ffu
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+ohc eonpxhc <ubfganzr> vaqrk ...
+ohc eonpxhc <ubfganzr> fnir ...
+ohc eonpxhc <ubfganzr> fcyvg ...
 """
-o = options.Options('bup rbackup', optspec, optfunc=getopt.getopt)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-if len(extra) < 2:
-    o.fatal('arguments expected')
-
-class SigException(Exception):
-    def __init__(self, signum):
-        self.signum = signum
-        Exception.__init__(self, 'signal %d received' % signum)
-def handler(signum, frame):
-    raise SigException(signum)
-
-signal.signal(signal.SIGTERM, handler)
-signal.signal(signal.SIGINT, handler)
-
-sp = None
-p = None
-ret = 99
-
-try:
-    hostname = extra[0]
-    argv = extra[1:]
-    p = ssh.connect(hostname, 'rbackup-server')
-
-    argvs = '\0'.join(['bup'] + argv)
-    p.stdin.write(struct.pack('!I', len(argvs)) + argvs)
-    p.stdin.flush()
-
-    main_exe = os.environ.get('BUP_MAIN_EXE') or sys.argv[0]
-    sp = subprocess.Popen([main_exe, 'server'], stdin=p.stdout, stdout=p.stdin)
-
-    p.stdin.close()
-    p.stdout.close()
-
-finally:
-    while 1:
-        # if we get a signal while waiting, we have to keep waiting, just
-        # in case our child doesn't die.
-        try:
-            ret = p.wait()
-            sp.wait()
-            break
-        except SigException, e:
-            log('\nbup rbackup: %s\n' % e)
-            os.kill(p.pid, e.signum)
-            ret = 84
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, os, re
-from bup import options
-
-optspec = """
-bup newliner
+b = bcgvbaf.Bcgvbaf('ohc eonpxhc', bcgfcrp, bcgshap=trgbcg.trgbcg)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+vs yra(rkgen) < 2:
+    b.sngny('nethzragf rkcrpgrq')
+
+pynff FvtRkprcgvba(Rkprcgvba):
+    qrs __vavg__(frys, fvtahz):
+        frys.fvtahz = fvtahz
+        Rkprcgvba.__vavg__(frys, 'fvtany %q erprvirq' % fvtahz)
+qrs unaqyre(fvtahz, senzr):
+    envfr FvtRkprcgvba(fvtahz)
+
+fvtany.fvtany(fvtany.FVTGREZ, unaqyre)
+fvtany.fvtany(fvtany.FVTVAG, unaqyre)
+
+fc = Abar
+c = Abar
+erg = 99
+
+gel:
+    ubfganzr = rkgen[0]
+    neti = rkgen[1:]
+    c = ffu.pbaarpg(ubfganzr, 'eonpxhc-freire')
+
+    netif = '\0'.wbva(['ohc'] + neti)
+    c.fgqva.jevgr(fgehpg.cnpx('!V', yra(netif)) + netif)
+    c.fgqva.syhfu()
+
+    znva_rkr = bf.raiveba.trg('OHC_ZNVA_RKR') be flf.neti[0]
+    fc = fhocebprff.Cbcra([znva_rkr, 'freire'], fgqva=c.fgqbhg, fgqbhg=c.fgqva)
+
+    c.fgqva.pybfr()
+    c.fgqbhg.pybfr()
+
+svanyyl:
+    juvyr 1:
+        # vs jr trg n fvtany juvyr jnvgvat, jr unir gb xrrc jnvgvat, whfg
+        # va pnfr bhe puvyq qbrfa'g qvr.
+        gel:
+            erg = c.jnvg()
+            fc.jnvg()
+            oernx
+        rkprcg FvtRkprcgvba, r:
+            ybt('\aohc eonpxhc: %f\a' % r)
+            bf.xvyy(c.cvq, r.fvtahz)
+            erg = 84
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, er
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc arjyvare
 """
-o = options.Options('bup newliner', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-r = re.compile(r'([\r\n])')
-lastlen = 0
-all = ''
-while 1:
-    l = r.split(all, 1)
-    if len(l) <= 1:
-        try:
-            b = os.read(sys.stdin.fileno(), 4096)
-        except KeyboardInterrupt:
-            break
-        if not b:
-            break
-        all += b
-    else:
-        assert(len(l) == 3)
-        (line, splitchar, all) = l
-        #splitchar = '\n'
-        sys.stdout.write('%-*s%s' % (lastlen, line, splitchar))
-        if splitchar == '\r':
-            lastlen = len(line)
-        else:
-            lastlen = 0
-        sys.stdout.flush()
-
-if lastlen or all:
-    sys.stdout.write('%-*s\n' % (lastlen, all))
-#!/usr/bin/env python
-import sys
-from bup import options, git, _hashsplit
-from bup.helpers import *
-
-
-optspec = """
-bup margin
+b = bcgvbaf.Bcgvbaf('ohc arjyvare', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+e = er.pbzcvyr(e'([\e\a])')
+ynfgyra = 0
+nyy = ''
+juvyr 1:
+    y = e.fcyvg(nyy, 1)
+    vs yra(y) <= 1:
+        gel:
+            o = bf.ernq(flf.fgqva.svyrab(), 4096)
+        rkprcg XrlobneqVagreehcg:
+            oernx
+        vs abg o:
+            oernx
+        nyy += o
+    ryfr:
+        nffreg(yra(y) == 3)
+        (yvar, fcyvgpune, nyy) = y
+        #fcyvgpune = '\a'
+        flf.fgqbhg.jevgr('%-*f%f' % (ynfgyra, yvar, fcyvgpune))
+        vs fcyvgpune == '\e':
+            ynfgyra = yra(yvar)
+        ryfr:
+            ynfgyra = 0
+        flf.fgqbhg.syhfu()
+
+vs ynfgyra be nyy:
+    flf.fgqbhg.jevgr('%-*f\a' % (ynfgyra, nyy))
+#!/hfe/ova/rai clguba
+vzcbeg flf
+sebz ohc vzcbeg bcgvbaf, tvg, _unfufcyvg
+sebz ohc.urycref vzcbeg *
+
+
+bcgfcrp = """
+ohc znetva
 """
-o = options.Options('bup margin', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-git.check_repo_or_die()
-#git.ignore_midx = 1
-
-mi = git.PackIdxList(git.repo('objects/pack'))
-last = '\0'*20
-longmatch = 0
-for i in mi:
-    if i == last:
-        continue
-    #assert(str(i) >= last)
-    pm = _hashsplit.bitmatch(last, i)
-    longmatch = max(longmatch, pm)
-    last = i
-print longmatch
+b = bcgvbaf.Bcgvbaf('ohc znetva', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+tvg.purpx_ercb_be_qvr()
+#tvg.vtaber_zvqk = 1
+
+zv = tvg.CnpxVqkYvfg(tvg.ercb('bowrpgf/cnpx'))
+ynfg = '\0'*20
+ybatzngpu = 0
+sbe v va zv:
+    vs v == ynfg:
+        pbagvahr
+    #nffreg(fge(v) >= ynfg)
+    cz = _unfufcyvg.ovgzngpu(ynfg, v)
+    ybatzngpu = znk(ybatzngpu, cz)
+    ynfg = v
+cevag ybatzngpu
index f6f0e0c3c84b69d48ad44583ae8e0527449ada02..f57a3e571b65d90f1285b37715899ad4e18d40f8 100644 (file)
-#!/usr/bin/env python
-from bup import options, drecurse
-from bup.helpers import *
+#!/hfe/ova/rai clguba
+sebz ohc vzcbeg bcgvbaf, qerphefr
+sebz ohc.urycref vzcbeg *
 
-optspec = """
-bup drecurse <path>
+bcgfcrp = """
+ohc qerphefr <cngu>
 --
-x,xdev,one-file-system   don't cross filesystem boundaries
-q,quiet  don't actually print filenames
-profile  run under the python profiler
+k,kqri,bar-svyr-flfgrz   qba'g pebff svyrflfgrz obhaqnevrf
+d,dhvrg  qba'g npghnyyl cevag svyranzrf
+cebsvyr  eha haqre gur clguba cebsvyre
 """
-o = options.Options('bup drecurse', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one filename expected")
-
-it = drecurse.recursive_dirlist(extra, opt.xdev)
-if opt.profile:
-    import cProfile
-    def do_it():
-        for i in it:
-            pass
-    cProfile.run('do_it()')
-else:
-    if opt.quiet:
-        for i in it:
-            pass
-    else:
-        for (name,st) in it:
-            print name
-
-if saved_errors:
-    log('WARNING: %d errors encountered.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, time, struct
-from bup import hashsplit, git, options, client
-from bup.helpers import *
-from subprocess import PIPE
-
-
-optspec = """
-bup split [-tcb] [-n name] [--bench] [filenames...]
+b = bcgvbaf.Bcgvbaf('ohc qerphefr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar svyranzr rkcrpgrq")
+
+vg = qerphefr.erphefvir_qveyvfg(rkgen, bcg.kqri)
+vs bcg.cebsvyr:
+    vzcbeg pCebsvyr
+    qrs qb_vg():
+        sbe v va vg:
+            cnff
+    pCebsvyr.eha('qb_vg()')
+ryfr:
+    vs bcg.dhvrg:
+        sbe v va vg:
+            cnff
+    ryfr:
+        sbe (anzr,fg) va vg:
+            cevag anzr
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr, fgehpg
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+sebz fhocebprff vzcbeg CVCR
+
+
+bcgfcrp = """
+ohc fcyvg [-gpo] [-a anzr] [--orapu] [svyranzrf...]
 --
-r,remote=  remote repository path
-b,blobs    output a series of blob ids
-t,tree     output a tree id
-c,commit   output a commit id
-n,name=    name of backup set to update (if any)
-N,noop     don't actually save the data anywhere
-q,quiet    don't print progress messages
-v,verbose  increase log output (can be used more than once)
-copy       just copy input to output, hashsplitting along the way
-bench      print benchmark timings to stderr
-max-pack-size=  maximum bytes in a single pack
-max-pack-objects=  maximum number of objects in a single pack
-fanout=  maximum number of blobs in a single tree
+e,erzbgr=  erzbgr ercbfvgbel cngu
+o,oybof    bhgchg n frevrf bs oybo vqf
+g,gerr     bhgchg n gerr vq
+p,pbzzvg   bhgchg n pbzzvg vq
+a,anzr=    anzr bs onpxhc frg gb hcqngr (vs nal)
+A,abbc     qba'g npghnyyl fnir gur qngn naljurer
+d,dhvrg    qba'g cevag cebterff zrffntrf
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
+pbcl       whfg pbcl vachg gb bhgchg, unfufcyvggvat nybat gur jnl
+orapu      cevag orapuznex gvzvatf gb fgqree
+znk-cnpx-fvmr=  znkvzhz olgrf va n fvatyr cnpx
+znk-cnpx-bowrpgf=  znkvzhz ahzore bs bowrpgf va n fvatyr cnpx
+snabhg=  znkvzhz ahzore bs oybof va n fvatyr gerr
 """
-o = options.Options('bup split', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-if not (opt.blobs or opt.tree or opt.commit or opt.name or
-        opt.noop or opt.copy):
-    o.fatal("use one or more of -b, -t, -c, -n, -N, --copy")
-if (opt.noop or opt.copy) and (opt.blobs or opt.tree or 
-                               opt.commit or opt.name):
-    o.fatal('-N is incompatible with -b, -t, -c, -n')
-
-if opt.verbose >= 2:
-    git.verbose = opt.verbose - 1
-    opt.bench = 1
-if opt.max_pack_size:
-    hashsplit.max_pack_size = parse_num(opt.max_pack_size)
-if opt.max_pack_objects:
-    hashsplit.max_pack_objects = parse_num(opt.max_pack_objects)
-if opt.fanout:
-    hashsplit.fanout = parse_num(opt.fanout)
-if opt.blobs:
-    hashsplit.fanout = 0
-
-is_reverse = os.environ.get('BUP_SERVER_REVERSE')
-if is_reverse and opt.remote:
-    o.fatal("don't use -r in reverse mode; it's automatic")
-start_time = time.time()
-
-refname = opt.name and 'refs/heads/%s' % opt.name or None
-if opt.noop or opt.copy:
-    cli = w = oldref = None
-elif opt.remote or is_reverse:
-    cli = client.Client(opt.remote)
-    oldref = refname and cli.read_ref(refname) or None
-    w = cli.new_packwriter()
-else:
-    cli = None
-    oldref = refname and git.read_ref(refname) or None
-    w = git.PackWriter()
-
-files = extra and (open(fn) for fn in extra) or [sys.stdin]
-if w:
-    shalist = hashsplit.split_to_shalist(w, files)
-    tree = w.new_tree(shalist)
-else:
-    last = 0
-    for (blob, bits) in hashsplit.hashsplit_iter(files):
-        hashsplit.total_split += len(blob)
-        if opt.copy:
-            sys.stdout.write(str(blob))
-        megs = hashsplit.total_split/1024/1024
-        if not opt.quiet and last != megs:
-            progress('%d Mbytes read\r' % megs)
-            last = megs
-    progress('%d Mbytes read, done.\n' % megs)
-
-if opt.verbose:
-    log('\n')
-if opt.blobs:
-    for (mode,name,bin) in shalist:
-        print bin.encode('hex')
-if opt.tree:
-    print tree.encode('hex')
-if opt.commit or opt.name:
-    msg = 'bup split\n\nGenerated by command:\n%r' % sys.argv
-    ref = opt.name and ('refs/heads/%s' % opt.name) or None
-    commit = w.new_commit(oldref, tree, msg)
-    if opt.commit:
-        print commit.encode('hex')
-
-if w:
-    w.cjon is changing some random bytes here and theref
+b = bcgvbaf.Bcgvbaf('ohc fcyvg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+vs abg (bcg.oybof be bcg.gerr be bcg.pbzzvg be bcg.anzr be
+        bcg.abbc be bcg.pbcl):
+    b.sngny("hfr bar be zber bs -o, -g, -p, -a, -A, --pbcl")
+vs (bcg.abbc be bcg.pbcl) naq (bcg.oybof be bcg.gerr be 
+                               bcg.pbzzvg be bcg.anzr):
+    b.sngny('-A vf vapbzcngvoyr jvgu -o, -g, -p, -a')
+
+vs bcg.ireobfr >= 2:
+    tvg.ireobfr = bcg.ireobfr - 1
+    bcg.orapu = 1
+vs bcg.znk_cnpx_fvmr:
+    unfufcyvg.znk_cnpx_fvmr = cnefr_ahz(bcg.znk_cnpx_fvmr)
+vs bcg.znk_cnpx_bowrpgf:
+    unfufcyvg.znk_cnpx_bowrpgf = cnefr_ahz(bcg.znk_cnpx_bowrpgf)
+vs bcg.snabhg:
+    unfufcyvg.snabhg = cnefr_ahz(bcg.snabhg)
+vs bcg.oybof:
+    unfufcyvg.snabhg = 0
+
+vf_erirefr = bf.raiveba.trg('OHC_FREIRE_ERIREFR')
+vs vf_erirefr naq bcg.erzbgr:
+    b.sngny("qba'g hfr -e va erirefr zbqr; vg'f nhgbzngvp")
+fgneg_gvzr = gvzr.gvzr()
+
+ersanzr = bcg.anzr naq 'ersf/urnqf/%f' % bcg.anzr be Abar
+vs bcg.abbc be bcg.pbcl:
+    pyv = j = byqers = Abar
+ryvs bcg.erzbgr be vf_erirefr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    byqers = ersanzr naq pyv.ernq_ers(ersanzr) be Abar
+    j = pyv.arj_cnpxjevgre()
+ryfr:
+    pyv = Abar
+    byqers = ersanzr naq tvg.ernq_ers(ersanzr) be Abar
+    j = tvg.CnpxJevgre()
+
+svyrf = rkgen naq (bcra(sa) sbe sa va rkgen) be [flf.fgqva]
+vs j:
+    funyvfg = unfufcyvg.fcyvg_gb_funyvfg(j, svyrf)
+    gerr = j.arj_gerr(funyvfg)
+ryfr:
+    ynfg = 0
+    sbe (oybo, ovgf) va unfufcyvg.unfufcyvg_vgre(svyrf):
+        unfufcyvg.gbgny_fcyvg += yra(oybo)
+        vs bcg.pbcl:
+            flf.fgqbhg.jevgr(fge(oybo))
+        zrtf = unfufcyvg.gbgny_fcyvg/1024/1024
+        vs abg bcg.dhvrg naq ynfg != zrtf:
+            cebterff('%q Zolgrf ernq\e' % zrtf)
+            ynfg = zrtf
+    cebterff('%q Zolgrf ernq, qbar.\a' % zrtf)
+
+vs bcg.ireobfr:
+    ybt('\a')
+vs bcg.oybof:
+    sbe (zbqr,anzr,ova) va funyvfg:
+        cevag ova.rapbqr('urk')
+vs bcg.gerr:
+    cevag gerr.rapbqr('urk')
+vs bcg.pbzzvg be bcg.anzr:
+    zft = 'ohc fcyvg\a\aTrarengrq ol pbzznaq:\a%e' % flf.neti
+    ers = bcg.anzr naq ('ersf/urnqf/%f' % bcg.anzr) be Abar
+    pbzzvg = j.arj_pbzzvg(byqers, gerr, zft)
+    vs bcg.pbzzvg:
+        cevag pbzzvg.rapbqr('urk')
+
+vs j:
+    j.pwba vf punatvat fbzr enaqbz olgrf urer naq gurers
         
-if opt.name:
-    if cli:
-        cli.update_ref(refname, commit, oldref)
-    else:
-        git.update_ref(refname, commit, oldref)
-
-if cli:
-    cli.close()
-
-secs = time.time() - start_time
-size = hashsplit.total_split
-if opt.bench:
-    log('\nbup: %.2fkbytes in %.2f secs = %.2f kbytes/sec\n'
-        % (size/1024., secs, size/1024./secs))
-#!/usr/bin/env python
-import sys, re, struct, mmap
-from bup import git, options
-from bup.helpers import *
-
-
-def s_from_bytes(bytes):
-    clist = [chr(b) for b in bytes]
-    return ''.join(clist)
-
-
-def report(count):
-    fields = ['VmSize', 'VmRSS', 'VmData', 'VmStk']
-    d = {}
-    for line in open('/proc/self/status').readlines():
-        l = re.split(r':\s*', line.strip(), 1)
-        d[l[0]] = l[1]
-    if count >= 0:
-        e1 = count
-        fields = [d[k] for k in fields]
-    else:
-        e1 = ''
-    print ('%9s  ' + ('%10s ' * len(fields))) % tuple([e1] + fields)
-    sys.stdout.flush()
-
-
-optspec = """
-bup memtest [-n elements] [-c cycles]
+vs bcg.anzr:
+    vs pyv:
+        pyv.hcqngr_ers(ersanzr, pbzzvg, byqers)
+    ryfr:
+        tvg.hcqngr_ers(ersanzr, pbzzvg, byqers)
+
+vs pyv:
+    pyv.pybfr()
+
+frpf = gvzr.gvzr() - fgneg_gvzr
+fvmr = unfufcyvg.gbgny_fcyvg
+vs bcg.orapu:
+    ybt('\aohc: %.2sxolgrf va %.2s frpf = %.2s xolgrf/frp\a'
+        % (fvmr/1024., frpf, fvmr/1024./frpf))
+#!/hfe/ova/rai clguba
+vzcbeg flf, er, fgehpg, zznc
+sebz ohc vzcbeg tvg, bcgvbaf
+sebz ohc.urycref vzcbeg *
+
+
+qrs f_sebz_olgrf(olgrf):
+    pyvfg = [pue(o) sbe o va olgrf]
+    erghea ''.wbva(pyvfg)
+
+
+qrs ercbeg(pbhag):
+    svryqf = ['IzFvmr', 'IzEFF', 'IzQngn', 'IzFgx']
+    q = {}
+    sbe yvar va bcra('/cebp/frys/fgnghf').ernqyvarf():
+        y = er.fcyvg(e':\f*', yvar.fgevc(), 1)
+        q[y[0]] = y[1]
+    vs pbhag >= 0:
+        r1 = pbhag
+        svryqf = [q[x] sbe x va svryqf]
+    ryfr:
+        r1 = ''
+    cevag ('%9f  ' + ('%10f ' * yra(svryqf))) % ghcyr([r1] + svryqf)
+    flf.fgqbhg.syhfu()
+
+
+bcgfcrp = """
+ohc zrzgrfg [-a ryrzragf] [-p plpyrf]
 --
-n,number=  number of objects per cycle
-c,cycles=  number of cycles to run
-ignore-midx  ignore .midx files, use only .idx files
+a,ahzore=  ahzore bs bowrpgf cre plpyr
+p,plpyrf=  ahzore bs plpyrf gb eha
+vtaber-zvqk  vtaber .zvqk svyrf, hfr bayl .vqk svyrf
 """
-o = options.Options('bup memtest', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal('no arguments expected')
-
-git.ignore_midx = opt.ignore_midx
-
-git.check_repo_or_die()
-m = git.PackIdxList(git.repo('objects/pack'))
-
-cycles = opt.cycles or 100
-number = opt.number or 10000
-
-report(-1)
-f = open('/dev/urandom')
-a = mmap.mmap(-1, 20)
-report(0)
-for c in xrange(cycles):
-    for n in xrange(number):
-        b = f.read(3)
-        if 0:
-            bytes = list(struct.unpack('!BBB', b)) + [0]*17
-            bytes[2] &= 0xf0
-            bin = struct.pack('!20s', s_from_bytes(bytes))
-        else:
-            a[0:2] = b[0:2]
-            a[2] = chr(ord(b[2]) & 0xf0)
-            bin = str(a[0:20])
-        #print bin.encode('hex')
-        m.exists(bin)
-    report((c+1)*number)
-#!/usr/bin/env python
-import sys, os, stat
-from bup import options, git, vfs
-from bup.helpers import *
-
-def print_node(text, n):
-    prefix = ''
-    if opt.hash:
-        prefix += "%s " % n.hash.encode('hex')
-    if stat.S_ISDIR(n.mode):
-        print '%s%s/' % (prefix, text)
-    elif stat.S_ISLNK(n.mode):
-        print '%s%s@' % (prefix, text)
-    else:
-        print '%s%s' % (prefix, text)
-
-
-optspec = """
-bup ls <dirs...>
+b = bcgvbaf.Bcgvbaf('ohc zrzgrfg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+tvg.vtaber_zvqk = bcg.vtaber_zvqk
+
+tvg.purpx_ercb_be_qvr()
+z = tvg.CnpxVqkYvfg(tvg.ercb('bowrpgf/cnpx'))
+
+plpyrf = bcg.plpyrf be 100
+ahzore = bcg.ahzore be 10000
+
+ercbeg(-1)
+s = bcra('/qri/henaqbz')
+n = zznc.zznc(-1, 20)
+ercbeg(0)
+sbe p va kenatr(plpyrf):
+    sbe a va kenatr(ahzore):
+        o = s.ernq(3)
+        vs 0:
+            olgrf = yvfg(fgehpg.hacnpx('!OOO', o)) + [0]*17
+            olgrf[2] &= 0ks0
+            ova = fgehpg.cnpx('!20f', f_sebz_olgrf(olgrf))
+        ryfr:
+            n[0:2] = o[0:2]
+            n[2] = pue(beq(o[2]) & 0ks0)
+            ova = fge(n[0:20])
+        #cevag ova.rapbqr('urk')
+        z.rkvfgf(ova)
+    ercbeg((p+1)*ahzore)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgng
+sebz ohc vzcbeg bcgvbaf, tvg, isf
+sebz ohc.urycref vzcbeg *
+
+qrs cevag_abqr(grkg, a):
+    cersvk = ''
+    vs bcg.unfu:
+        cersvk += "%f " % a.unfu.rapbqr('urk')
+    vs fgng.F_VFQVE(a.zbqr):
+        cevag '%f%f/' % (cersvk, grkg)
+    ryvs fgng.F_VFYAX(a.zbqr):
+        cevag '%f%f@' % (cersvk, grkg)
+    ryfr:
+        cevag '%f%f' % (cersvk, grkg)
+
+
+bcgfcrp = """
+ohc yf <qvef...>
 --
-s,hash   show hash for each file
+f,unfu   fubj unfu sbe rnpu svyr
 """
-o = options.Options('bup ls', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-top = vfs.RefList(None)
-
-if not extra:
-    extra = ['/']
-
-ret = 0
-for d in extra:
-    try:
-        n = top.lresolve(d)
-        if stat.S_ISDIR(n.mode):
-            for sub in n:
-                print_node(sub.name, sub)
-        else:
-            print_node(d, n)
-    except vfs.NodeError, e:
-        log('error: %s\n' % e)
-        ret = 1
-
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, os, re, stat, readline, fnmatch
-from bup import options, git, shquote, vfs
-from bup.helpers import *
-
-def node_name(text, n):
-    if stat.S_ISDIR(n.mode):
-        return '%s/' % text
-    elif stat.S_ISLNK(n.mode):
-        return '%s@' % text
-    else:
-        return '%s' % text
-
-
-def do_ls(path, n):
-    l = []
-    if stat.S_ISDIR(n.mode):
-        for sub in n:
-            l.append(node_name(sub.name, sub))
-    else:
-        l.append(node_name(path, n))
-    print columnate(l, '')
+b = bcgvbaf.Bcgvbaf('ohc yf', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+gbc = isf.ErsYvfg(Abar)
+
+vs abg rkgen:
+    rkgen = ['/']
+
+erg = 0
+sbe q va rkgen:
+    gel:
+        a = gbc.yerfbyir(q)
+        vs fgng.F_VFQVE(a.zbqr):
+            sbe fho va a:
+                cevag_abqr(fho.anzr, fho)
+        ryfr:
+            cevag_abqr(q, a)
+    rkprcg isf.AbqrReebe, r:
+        ybt('reebe: %f\a' % r)
+        erg = 1
+
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, er, fgng, ernqyvar, sazngpu
+sebz ohc vzcbeg bcgvbaf, tvg, fudhbgr, isf
+sebz ohc.urycref vzcbeg *
+
+qrs abqr_anzr(grkg, a):
+    vs fgng.F_VFQVE(a.zbqr):
+        erghea '%f/' % grkg
+    ryvs fgng.F_VFYAX(a.zbqr):
+        erghea '%f@' % grkg
+    ryfr:
+        erghea '%f' % grkg
+
+
+qrs qb_yf(cngu, a):
+    y = []
+    vs fgng.F_VFQVE(a.zbqr):
+        sbe fho va a:
+            y.nccraq(abqr_anzr(fho.anzr, fho))
+    ryfr:
+        y.nccraq(abqr_anzr(cngu, a))
+    cevag pbyhzangr(y, '')
     
 
-def write_to_file(inf, outf):
-    for blob in chunkyreader(inf):
-        outf.write(blob)
+qrs jevgr_gb_svyr(vas, bhgs):
+    sbe oybo va puhaxlernqre(vas):
+        bhgs.jevgr(oybo)
     
 
-def inputiter():
-    if os.isatty(sys.stdin.fileno()):
-        while 1:
-            try:
-                yield raw_input('bup> ')
-            except EOFError:
-                break
-    else:
-        for line in sys.stdin:
-            yield line
-
-
-def _completer_get_subs(line):
-    (qtype, lastword) = shquote.unfinished_word(line)
-    (dir,name) = os.path.split(lastword)
-    #log('\ncompleter: %r %r %r\n' % (qtype, lastword, text))
-    n = pwd.resolve(dir)
-    subs = list(filter(lambda x: x.name.startswith(name),
-                       n.subs()))
-    return (dir, name, qtype, lastword, subs)
-
-
-_last_line = None
-_last_res = None
-def completer(text, state):
-    global _last_line
-    global _last_res
-    try:
-        line = readline.get_line_buffer()[:readline.get_endidx()]
-        if _last_line != line:
-            _last_res = _completer_get_subs(line)
-            _last_line = line
-        (dir, name, qtype, lastword, subs) = _last_res
-        if state < len(subs):
-            sn = subs[state]
-            sn1 = sn.resolve('')  # deref symlinks
-            fullname = os.path.join(dir, sn.name)
-            if stat.S_ISDIR(sn1.mode):
-                ret = shquote.what_to_add(qtype, lastword, fullname+'/',
-                                          terminate=False)
-            else:
-                ret = shquote.what_to_add(qtype, lastword, fullname,
-                                          terminate=True) + ' '
-            return text + ret
-    except Exception, e:
-        log('\nerror in completion: %s\n' % e)
+qrs vachgvgre():
+    vs bf.vfnggl(flf.fgqva.svyrab()):
+        juvyr 1:
+            gel:
+                lvryq enj_vachg('ohc> ')
+            rkprcg RBSReebe:
+                oernx
+    ryfr:
+        sbe yvar va flf.fgqva:
+            lvryq yvar
+
+
+qrs _pbzcyrgre_trg_fhof(yvar):
+    (dglcr, ynfgjbeq) = fudhbgr.hasvavfurq_jbeq(yvar)
+    (qve,anzr) = bf.cngu.fcyvg(ynfgjbeq)
+    #ybt('\apbzcyrgre: %e %e %e\a' % (dglcr, ynfgjbeq, grkg))
+    a = cjq.erfbyir(qve)
+    fhof = yvfg(svygre(ynzoqn k: k.anzr.fgnegfjvgu(anzr),
+                       a.fhof()))
+    erghea (qve, anzr, dglcr, ynfgjbeq, fhof)
+
+
+_ynfg_yvar = Abar
+_ynfg_erf = Abar
+qrs pbzcyrgre(grkg, fgngr):
+    tybony _ynfg_yvar
+    tybony _ynfg_erf
+    gel:
+        yvar = ernqyvar.trg_yvar_ohssre()[:ernqyvar.trg_raqvqk()]
+        vs _ynfg_yvar != yvar:
+            _ynfg_erf = _pbzcyrgre_trg_fhof(yvar)
+            _ynfg_yvar = yvar
+        (qve, anzr, dglcr, ynfgjbeq, fhof) = _ynfg_erf
+        vs fgngr < yra(fhof):
+            fa = fhof[fgngr]
+            fa1 = fa.erfbyir('')  # qrers flzyvaxf
+            shyyanzr = bf.cngu.wbva(qve, fa.anzr)
+            vs fgng.F_VFQVE(fa1.zbqr):
+                erg = fudhbgr.jung_gb_nqq(dglcr, ynfgjbeq, shyyanzr+'/',
+                                          grezvangr=Snyfr)
+            ryfr:
+                erg = fudhbgr.jung_gb_nqq(dglcr, ynfgjbeq, shyyanzr,
+                                          grezvangr=Gehr) + ' '
+            erghea grkg + erg
+    rkprcg Rkprcgvba, r:
+        ybt('\areebe va pbzcyrgvba: %f\a' % r)
 
             
-optspec = """
-bup ftp
+bcgfcrp = """
+ohc sgc
 """
-o = options.Options('bup ftp', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-
-top = vfs.RefList(None)
-pwd = top
-
-if extra:
-    lines = extra
-else:
-    readline.set_completer_delims(' \t\n\r/')
-    readline.set_completer(completer)
-    readline.parse_and_bind("tab: complete")
-    lines = inputiter()
-
-for line in lines:
-    if not line.strip():
-        continue
-    words = [word for (wordstart,word) in shquote.quotesplit(line)]
-    cmd = words[0].lower()
-    #log('execute: %r %r\n' % (cmd, parm))
-    try:
-        if cmd == 'ls':
-            for parm in (words[1:] or ['.']):
-                do_ls(parm, pwd.resolve(parm))
-        elif cmd == 'cd':
-            for parm in words[1:]:
-                pwd = pwd.resolve(parm)
-        elif cmd == 'pwd':
-            print pwd.fullname()
-        elif cmd == 'cat':
-            for parm in words[1:]:
-                write_to_file(pwd.resolve(parm).open(), sys.stdout)
-        elif cmd == 'get':
-            if len(words) not in [2,3]:
-                raise Exception('Usage: get <filename> [localname]')
-            rname = words[1]
-            (dir,base) = os.path.split(rname)
-            lname = len(words)>2 and words[2] or base
-            inf = pwd.resolve(rname).open()
-            log('Saving %r\n' % lname)
-            write_to_file(inf, open(lname, 'wb'))
-        elif cmd == 'mget':
-            for parm in words[1:]:
-                (dir,base) = os.path.split(parm)
-                for n in pwd.resolve(dir).subs():
-                    if fnmatch.fnmatch(n.name, base):
-                        try:
-                            log('Saving %r\n' % n.name)
-                            inf = n.open()
-                            outf = open(n.name, 'wb')
-                            write_to_file(inf, outf)
-                            outf.close()
-                        except Exception, e:
-                            log('  error: %s\n' % e)
-        elif cmd == 'help' or cmd == '?':
-            log('Commands: ls cd pwd cat get mget help quit\n')
-        elif cmd == 'quit' or cmd == 'exit' or cmd == 'bye':
-            break
-        else:
-            raise Exception('no such command %r' % cmd)
-    except Exception, e:
-        log('error: %s\n' % e)
-        #raise
-#!/usr/bin/env python
-import sys, mmap
-from bup import options, _hashsplit
-from bup.helpers import *
-
-optspec = """
-bup random [-S seed] <numbytes>
+b = bcgvbaf.Bcgvbaf('ohc sgc', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+
+gbc = isf.ErsYvfg(Abar)
+cjq = gbc
+
+vs rkgen:
+    yvarf = rkgen
+ryfr:
+    ernqyvar.frg_pbzcyrgre_qryvzf(' \g\a\e/')
+    ernqyvar.frg_pbzcyrgre(pbzcyrgre)
+    ernqyvar.cnefr_naq_ovaq("gno: pbzcyrgr")
+    yvarf = vachgvgre()
+
+sbe yvar va yvarf:
+    vs abg yvar.fgevc():
+        pbagvahr
+    jbeqf = [jbeq sbe (jbeqfgneg,jbeq) va fudhbgr.dhbgrfcyvg(yvar)]
+    pzq = jbeqf[0].ybjre()
+    #ybt('rkrphgr: %e %e\a' % (pzq, cnez))
+    gel:
+        vs pzq == 'yf':
+            sbe cnez va (jbeqf[1:] be ['.']):
+                qb_yf(cnez, cjq.erfbyir(cnez))
+        ryvs pzq == 'pq':
+            sbe cnez va jbeqf[1:]:
+                cjq = cjq.erfbyir(cnez)
+        ryvs pzq == 'cjq':
+            cevag cjq.shyyanzr()
+        ryvs pzq == 'png':
+            sbe cnez va jbeqf[1:]:
+                jevgr_gb_svyr(cjq.erfbyir(cnez).bcra(), flf.fgqbhg)
+        ryvs pzq == 'trg':
+            vs yra(jbeqf) abg va [2,3]:
+                envfr Rkprcgvba('Hfntr: trg <svyranzr> [ybpnyanzr]')
+            eanzr = jbeqf[1]
+            (qve,onfr) = bf.cngu.fcyvg(eanzr)
+            yanzr = yra(jbeqf)>2 naq jbeqf[2] be onfr
+            vas = cjq.erfbyir(eanzr).bcra()
+            ybt('Fnivat %e\a' % yanzr)
+            jevgr_gb_svyr(vas, bcra(yanzr, 'jo'))
+        ryvs pzq == 'ztrg':
+            sbe cnez va jbeqf[1:]:
+                (qve,onfr) = bf.cngu.fcyvg(cnez)
+                sbe a va cjq.erfbyir(qve).fhof():
+                    vs sazngpu.sazngpu(a.anzr, onfr):
+                        gel:
+                            ybt('Fnivat %e\a' % a.anzr)
+                            vas = a.bcra()
+                            bhgs = bcra(a.anzr, 'jo')
+                            jevgr_gb_svyr(vas, bhgs)
+                            bhgs.pybfr()
+                        rkprcg Rkprcgvba, r:
+                            ybt('  reebe: %f\a' % r)
+        ryvs pzq == 'uryc' be pzq == '?':
+            ybt('Pbzznaqf: yf pq cjq png trg ztrg uryc dhvg\a')
+        ryvs pzq == 'dhvg' be pzq == 'rkvg' be pzq == 'olr':
+            oernx
+        ryfr:
+            envfr Rkprcgvba('ab fhpu pbzznaq %e' % pzq)
+    rkprcg Rkprcgvba, r:
+        ybt('reebe: %f\a' % r)
+        #envfr
+#!/hfe/ova/rai clguba
+vzcbeg flf, zznc
+sebz ohc vzcbeg bcgvbaf, _unfufcyvg
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+ohc enaqbz [-F frrq] <ahzolgrf>
 --
-S,seed=   optional random number seed (default 1)
-f,force   print random data to stdout even if it's a tty
+F,frrq=   bcgvbany enaqbz ahzore frrq (qrsnhyg 1)
+s,sbepr   cevag enaqbz qngn gb fgqbhg rira vs vg'f n ggl
 """
-o = options.Options('bup random', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one argument expected")
-
-total = parse_num(extra[0])
-
-if opt.force or (not os.isatty(1) and
-                 not atoi(os.environ.get('BUP_FORCE_TTY')) & 1):
-    _hashsplit.write_random(sys.stdout.fileno(), total, opt.seed or 0)
-else:
-    log('error: not writing binary data to a terminal. Use -f to force.\n')
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, os, glob
-from bup import options
-
-optspec = """
-bup help <command>
+b = bcgvbaf.Bcgvbaf('ohc enaqbz', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar nethzrag rkcrpgrq")
+
+gbgny = cnefr_ahz(rkgen[0])
+
+vs bcg.sbepr be (abg bf.vfnggl(1) naq
+                 abg ngbv(bf.raiveba.trg('OHC_SBEPR_GGL')) & 1):
+    _unfufcyvg.jevgr_enaqbz(flf.fgqbhg.svyrab(), gbgny, bcg.frrq be 0)
+ryfr:
+    ybt('reebe: abg jevgvat ovanel qngn gb n grezvany. Hfr -s gb sbepr.\a')
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, tybo
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc uryc <pbzznaq>
 """
-o = options.Options('bup help', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) == 0:
-    # the wrapper program provides the default usage string
-    os.execvp(os.environ['BUP_MAIN_EXE'], ['bup'])
-elif len(extra) == 1:
-    docname = (extra[0]=='bup' and 'bup' or ('bup-%s' % extra[0]))
-    exe = sys.argv[0]
-    (exepath, exefile) = os.path.split(exe)
-    manpath = os.path.join(exepath, '../Documentation/' + docname + '.[1-9]')
-    g = glob.glob(manpath)
-    if g:
-        os.execvp('man', ['man', '-l', g[0]])
-    else:
-        os.execvp('man', ['man', docname])
-else:
-    o.fatal("exactly one command name expected")
-#!/usr/bin/env python
-import sys, os, stat, errno, fuse, re, time, tempfile
-from bup import options, git, vfs
-from bup.helpers import *
-
-
-class Stat(fuse.Stat):
-    def __init__(self):
-        self.st_mode = 0
-        self.st_ino = 0
-        self.st_dev = 0
-        self.st_nlink = 0
-        self.st_uid = 0
-        self.st_gid = 0
-        self.st_size = 0
-        self.st_atime = 0
-        self.st_mtime = 0
-        self.st_ctime = 0
-        self.st_blocks = 0
-        self.st_blksize = 0
-        self.st_rdev = 0
-
-
-cache = {}
-def cache_get(top, path):
-    parts = path.split('/')
-    cache[('',)] = top
-    c = None
-    max = len(parts)
-    #log('cache: %r\n' % cache.keys())
-    for i in range(max):
-        pre = parts[:max-i]
-        #log('cache trying: %r\n' % pre)
-        c = cache.get(tuple(pre))
-        if c:
-            rest = parts[max-i:]
-            for r in rest:
-                #log('resolving %r from %r\n' % (r, c.fullname()))
-                c = c.lresolve(r)
-                key = tuple(pre + [r])
-                #log('saving: %r\n' % (key,))
-                cache[key] = c
-            break
-    assert(c)
-    return c
+b = bcgvbaf.Bcgvbaf('ohc uryc', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) == 0:
+    # gur jenccre cebtenz cebivqrf gur qrsnhyg hfntr fgevat
+    bf.rkrpic(bf.raiveba['OHC_ZNVA_RKR'], ['ohc'])
+ryvs yra(rkgen) == 1:
+    qbpanzr = (rkgen[0]=='ohc' naq 'ohc' be ('ohc-%f' % rkgen[0]))
+    rkr = flf.neti[0]
+    (rkrcngu, rkrsvyr) = bf.cngu.fcyvg(rkr)
+    znacngu = bf.cngu.wbva(rkrcngu, '../Qbphzragngvba/' + qbpanzr + '.[1-9]')
+    t = tybo.tybo(znacngu)
+    vs t:
+        bf.rkrpic('zna', ['zna', '-y', t[0]])
+    ryfr:
+        bf.rkrpic('zna', ['zna', qbpanzr])
+ryfr:
+    b.sngny("rknpgyl bar pbzznaq anzr rkcrpgrq")
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgng, reeab, shfr, er, gvzr, grzcsvyr
+sebz ohc vzcbeg bcgvbaf, tvg, isf
+sebz ohc.urycref vzcbeg *
+
+
+pynff Fgng(shfr.Fgng):
+    qrs __vavg__(frys):
+        frys.fg_zbqr = 0
+        frys.fg_vab = 0
+        frys.fg_qri = 0
+        frys.fg_ayvax = 0
+        frys.fg_hvq = 0
+        frys.fg_tvq = 0
+        frys.fg_fvmr = 0
+        frys.fg_ngvzr = 0
+        frys.fg_zgvzr = 0
+        frys.fg_pgvzr = 0
+        frys.fg_oybpxf = 0
+        frys.fg_oyxfvmr = 0
+        frys.fg_eqri = 0
+
+
+pnpur = {}
+qrs pnpur_trg(gbc, cngu):
+    cnegf = cngu.fcyvg('/')
+    pnpur[('',)] = gbc
+    p = Abar
+    znk = yra(cnegf)
+    #ybt('pnpur: %e\a' % pnpur.xrlf())
+    sbe v va enatr(znk):
+        cer = cnegf[:znk-v]
+        #ybt('pnpur gelvat: %e\a' % cer)
+        p = pnpur.trg(ghcyr(cer))
+        vs p:
+            erfg = cnegf[znk-v:]
+            sbe e va erfg:
+                #ybt('erfbyivat %e sebz %e\a' % (e, p.shyyanzr()))
+                p = p.yerfbyir(e)
+                xrl = ghcyr(cer + [e])
+                #ybt('fnivat: %e\a' % (xrl,))
+                pnpur[xrl] = p
+            oernx
+    nffreg(p)
+    erghea p
         
     
 
-class BupFs(fuse.Fuse):
-    def __init__(self, top):
-        fuse.Fuse.__init__(self)
-        self.top = top
+pynff OhcSf(shfr.Shfr):
+    qrs __vavg__(frys, gbc):
+        shfr.Shfr.__vavg__(frys)
+        frys.gbc = gbc
     
-    def getattr(self, path):
-        log('--getattr(%r)\n' % path)
-        try:
-            node = cache_get(self.top, path)
-            st = Stat()
-            st.st_mode = node.mode
-            st.st_nlink = node.nlinks()
-            st.st_size = node.size()
-            st.st_mtime = node.mtime
-            st.st_ctime = node.ctime
-            st.st_atime = node.atime
-            return st
-        except vfs.NoSuchFile:
-            return -errno.ENOENT
-
-    def readdir(self, path, offset):
-        log('--readdir(%r)\n' % path)
-        node = cache_get(self.top, path)
-        yield fuse.Direntry('.')
-        yield fuse.Direntry('..')
-        for sub in node.subs():
-            yield fuse.Direntry(sub.name)
-
-    def readlink(self, path):
-        log('--readlink(%r)\n' % path)
-        node = cache_get(self.top, path)
-        return node.readlink()
-
-    def open(self, path, flags):
-        log('--open(%r)\n' % path)
-        node = cache_get(self.top, path)
-        accmode = os.O_RDONLY | os.O_WRONLY | os.O_RDWR
-        if (flags & accmode) != os.O_RDONLY:
-            return -errno.EACCES
-        node.open()
-
-    def release(self, path, flags):
-        log('--release(%r)\n' % path)
-
-    def read(self, path, size, offset):
-        log('--read(%r)\n' % path)
-        n = cache_get(self.top, path)
-        o = n.open()
-        o.seek(offset)
-        return o.read(size)
-
-
-if not hasattr(fuse, '__version__'):
-    raise RuntimeError, "your fuse module is too old for fuse.__version__"
-fuse.fuse_python_api = (0, 2)
-
-
-optspec = """
-bup fuse [-d] [-f] <mountpoint>
+    qrs trgngge(frys, cngu):
+        ybt('--trgngge(%e)\a' % cngu)
+        gel:
+            abqr = pnpur_trg(frys.gbc, cngu)
+            fg = Fgng()
+            fg.fg_zbqr = abqr.zbqr
+            fg.fg_ayvax = abqr.ayvaxf()
+            fg.fg_fvmr = abqr.fvmr()
+            fg.fg_zgvzr = abqr.zgvzr
+            fg.fg_pgvzr = abqr.pgvzr
+            fg.fg_ngvzr = abqr.ngvzr
+            erghea fg
+        rkprcg isf.AbFhpuSvyr:
+            erghea -reeab.RABRAG
+
+    qrs ernqqve(frys, cngu, bssfrg):
+        ybt('--ernqqve(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        lvryq shfr.Qveragel('.')
+        lvryq shfr.Qveragel('..')
+        sbe fho va abqr.fhof():
+            lvryq shfr.Qveragel(fho.anzr)
+
+    qrs ernqyvax(frys, cngu):
+        ybt('--ernqyvax(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        erghea abqr.ernqyvax()
+
+    qrs bcra(frys, cngu, syntf):
+        ybt('--bcra(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        nppzbqr = bf.B_EQBAYL | bf.B_JEBAYL | bf.B_EQJE
+        vs (syntf & nppzbqr) != bf.B_EQBAYL:
+            erghea -reeab.RNPPRF
+        abqr.bcra()
+
+    qrs eryrnfr(frys, cngu, syntf):
+        ybt('--eryrnfr(%e)\a' % cngu)
+
+    qrs ernq(frys, cngu, fvmr, bssfrg):
+        ybt('--ernq(%e)\a' % cngu)
+        a = pnpur_trg(frys.gbc, cngu)
+        b = a.bcra()
+        b.frrx(bssfrg)
+        erghea b.ernq(fvmr)
+
+
+vs abg unfngge(shfr, '__irefvba__'):
+    envfr EhagvzrReebe, "lbhe shfr zbqhyr vf gbb byq sbe shfr.__irefvba__"
+shfr.shfr_clguba_ncv = (0, 2)
+
+
+bcgfcrp = """
+ohc shfr [-q] [-s] <zbhagcbvag>
 --
-d,debug   increase debug level
-f,foreground  run in foreground
+q,qroht   vapernfr qroht yriry
+s,sbertebhaq  eha va sbertebhaq
 """
-o = options.Options('bup fuse', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one argument expected")
-
-git.check_repo_or_die()
-top = vfs.RefList(None)
-f = BupFs(top)
-f.fuse_args.mountpoint = extra[0]
-if opt.debug:
-    f.fuse_args.add('debug')
-if opt.foreground:
-    f.fuse_args.setmod('foreground')
-print f.multithreaded
-f.multithreaded = False
-
-f.main()
-#!/usr/bin/env python
-from bup import git, options, client
-from bup.helpers import *
-
-optspec = """
-[BUP_DIR=...] bup init [-r host:path]
+b = bcgvbaf.Bcgvbaf('ohc shfr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar nethzrag rkcrpgrq")
+
+tvg.purpx_ercb_be_qvr()
+gbc = isf.ErsYvfg(Abar)
+s = OhcSf(gbc)
+s.shfr_netf.zbhagcbvag = rkgen[0]
+vs bcg.qroht:
+    s.shfr_netf.nqq('qroht')
+vs bcg.sbertebhaq:
+    s.shfr_netf.frgzbq('sbertebhaq')
+cevag s.zhygvguernqrq
+s.zhygvguernqrq = Snyfr
+
+s.znva()
+#!/hfe/ova/rai clguba
+sebz ohc vzcbeg tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+[OHC_QVE=...] ohc vavg [-e ubfg:cngu]
 --
-r,remote=  remote repository path
+e,erzbgr=  erzbgr ercbfvgbel cngu
 """
-o = options.Options('bup init', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-
-if opt.remote:
-    git.init_repo()  # local repo
-    git.check_repo_or_die()
-    cli = client.Client(opt.remote, create=True)
-    cli.close()
-else:
-    git.init_repo()
-#!/usr/bin/env python
-import sys, math, struct, glob
-from bup import options, git
-from bup.helpers import *
-
-PAGE_SIZE=4096
-SHA_PER_PAGE=PAGE_SIZE/200.
-
-
-def merge(idxlist, bits, table):
-    count = 0
-    for e in git.idxmerge(idxlist):
-        count += 1
-        prefix = git.extract_bits(e, bits)
-        table[prefix] = count
-        yield e
-
-
-def do_midx(outdir, outfilename, infilenames):
-    if not outfilename:
-        assert(outdir)
-        sum = Sha1('\0'.join(infilenames)).hexdigest()
-        outfilename = '%s/midx-%s.midx' % (outdir, sum)
+b = bcgvbaf.Bcgvbaf('ohc vavg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+
+vs bcg.erzbgr:
+    tvg.vavg_ercb()  # ybpny ercb
+    tvg.purpx_ercb_be_qvr()
+    pyv = pyvrag.Pyvrag(bcg.erzbgr, perngr=Gehr)
+    pyv.pybfr()
+ryfr:
+    tvg.vavg_ercb()
+#!/hfe/ova/rai clguba
+vzcbeg flf, zngu, fgehpg, tybo
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+CNTR_FVMR=4096
+FUN_CRE_CNTR=CNTR_FVMR/200.
+
+
+qrs zretr(vqkyvfg, ovgf, gnoyr):
+    pbhag = 0
+    sbe r va tvg.vqkzretr(vqkyvfg):
+        pbhag += 1
+        cersvk = tvg.rkgenpg_ovgf(r, ovgf)
+        gnoyr[cersvk] = pbhag
+        lvryq r
+
+
+qrs qb_zvqk(bhgqve, bhgsvyranzr, vasvyranzrf):
+    vs abg bhgsvyranzr:
+        nffreg(bhgqve)
+        fhz = Fun1('\0'.wbva(vasvyranzrf)).urkqvtrfg()
+        bhgsvyranzr = '%f/zvqk-%f.zvqk' % (bhgqve, fhz)
     
-    inp = []
-    total = 0
-    for name in infilenames:
-        ix = git.PackIdx(name)
-        inp.append(ix)
-        total += len(ix)
-
-    log('Merging %d indexes (%d objects).\n' % (len(infilenames), total))
-    if (not opt.force and (total < 1024 and len(infilenames) < 3)) \
-       or (opt.force and not total):
-        log('midx: nothing to do.\n')
-        return
-
-    pages = int(total/SHA_PER_PAGE) or 1
-    bits = int(math.ceil(math.log(pages, 2)))
-    entries = 2**bits
-    log('Table size: %d (%d bits)\n' % (entries*4, bits))
+    vac = []
+    gbgny = 0
+    sbe anzr va vasvyranzrf:
+        vk = tvg.CnpxVqk(anzr)
+        vac.nccraq(vk)
+        gbgny += yra(vk)
+
+    ybt('Zretvat %q vaqrkrf (%q bowrpgf).\a' % (yra(vasvyranzrf), gbgny))
+    vs (abg bcg.sbepr naq (gbgny < 1024 naq yra(vasvyranzrf) < 3)) \
+       be (bcg.sbepr naq abg gbgny):
+        ybt('zvqk: abguvat gb qb.\a')
+        erghea
+
+    cntrf = vag(gbgny/FUN_CRE_CNTR) be 1
+    ovgf = vag(zngu.prvy(zngu.ybt(cntrf, 2)))
+    ragevrf = 2**ovgf
+    ybt('Gnoyr fvmr: %q (%q ovgf)\a' % (ragevrf*4, ovgf))
     
-    table = [0]*entries
-
-    try:
-        os.unlink(outfilename)
-    except OSError:
-        pass
-    f = open(outfilename + '.tmp', 'w+')
-    f.write('MIDX\0\0\0\2')
-    f.write(struct.pack('!I', bits))
-    assert(f.tell() == 12)
-    f.write('\0'*4*entries)
+    gnoyr = [0]*ragevrf
+
+    gel:
+        bf.hayvax(bhgsvyranzr)
+    rkprcg BFReebe:
+        cnff
+    s = bcra(bhgsvyranzr + '.gzc', 'j+')
+    s.jevgr('ZVQK\0\0\0\2')
+    s.jevgr(fgehpg.cnpx('!V', ovgf))
+    nffreg(s.gryy() == 12)
+    s.jevgr('\0'*4*ragevrf)
     
-    for e in merge(inp, bits, table):
-        f.write(e)
+    sbe r va zretr(vac, ovgf, gnoyr):
+        s.jevgr(r)
         
-    f.write('\0'.join(os.path.basename(p) for p in infilenames))
-
-    f.seek(12)
-    f.write(struct.pack('!%dI' % entries, *table))
-    f.close()
-    os.rename(outfilename + '.tmp', outfilename)
-
-    # this is just for testing
-    if 0:
-        p = git.PackMidx(outfilename)
-        assert(len(p.idxnames) == len(infilenames))
-        print p.idxnames
-        assert(len(p) == total)
-        pi = iter(p)
-        for i in merge(inp, total, bits, table):
-            assert(i == pi.next())
-            assert(p.exists(i))
-
-    print outfilename
-
-optspec = """
-bup midx [options...] <idxnames...>
+    s.jevgr('\0'.wbva(bf.cngu.onfranzr(c) sbe c va vasvyranzrf))
+
+    s.frrx(12)
+    s.jevgr(fgehpg.cnpx('!%qV' % ragevrf, *gnoyr))
+    s.pybfr()
+    bf.eranzr(bhgsvyranzr + '.gzc', bhgsvyranzr)
+
+    # guvf vf whfg sbe grfgvat
+    vs 0:
+        c = tvg.CnpxZvqk(bhgsvyranzr)
+        nffreg(yra(c.vqkanzrf) == yra(vasvyranzrf))
+        cevag c.vqkanzrf
+        nffreg(yra(c) == gbgny)
+        cv = vgre(c)
+        sbe v va zretr(vac, gbgny, ovgf, gnoyr):
+            nffreg(v == cv.arkg())
+            nffreg(c.rkvfgf(v))
+
+    cevag bhgsvyranzr
+
+bcgfcrp = """
+ohc zvqk [bcgvbaf...] <vqkanzrf...>
 --
-o,output=  output midx filename (default: auto-generated)
-a,auto     automatically create .midx from any unindexed .idx files
-f,force    automatically create .midx from *all* .idx files
+b,bhgchg=  bhgchg zvqk svyranzr (qrsnhyg: nhgb-trarengrq)
+n,nhgb     nhgbzngvpnyyl perngr .zvqk sebz nal havaqrkrq .vqk svyrf
+s,sbepr    nhgbzngvpnyyl perngr .zvqk sebz *nyy* .vqk svyrf
 """
-o = options.Options('bup midx', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra and (opt.auto or opt.force):
-    o.fatal("you can't use -f/-a and also provide filenames")
-
-git.check_repo_or_die()
-
-if extra:
-    do_midx(git.repo('objects/pack'), opt.output, extra)
-elif opt.auto or opt.force:
-    paths = [git.repo('objects/pack')]
-    paths += glob.glob(git.repo('index-cache/*/.'))
-    for path in paths:
-        log('midx: scanning %s\n' % path)
-        if opt.force:
-            do_midx(path, opt.output, glob.glob('%s/*.idx' % path))
-        elif opt.auto:
-            m = git.PackIdxList(path)
-            needed = {}
-            for pack in m.packs:  # only .idx files without a .midx are open
-                if pack.name.endswith('.idx'):
-                    needed[pack.name] = 1
-            del m
-            do_midx(path, opt.output, needed.keys())
-        log('\n')
-else:
-    o.fatal("you must use -f or -a or provide input filenames")
-#!/usr/bin/env python
-import sys, os, random
-from bup import options
-from bup.helpers import *
-
-
-def randblock(n):
-    l = []
-    for i in xrange(n):
-        l.append(chr(random.randrange(0,256)))
-    return ''.join(l)
-
-
-optspec = """
-bup damage [-n count] [-s maxsize] [-S seed] <filenames...>
+b = bcgvbaf.Bcgvbaf('ohc zvqk', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen naq (bcg.nhgb be bcg.sbepr):
+    b.sngny("lbh pna'g hfr -s/-n naq nyfb cebivqr svyranzrf")
+
+tvg.purpx_ercb_be_qvr()
+
+vs rkgen:
+    qb_zvqk(tvg.ercb('bowrpgf/cnpx'), bcg.bhgchg, rkgen)
+ryvs bcg.nhgb be bcg.sbepr:
+    cnguf = [tvg.ercb('bowrpgf/cnpx')]
+    cnguf += tybo.tybo(tvg.ercb('vaqrk-pnpur/*/.'))
+    sbe cngu va cnguf:
+        ybt('zvqk: fpnaavat %f\a' % cngu)
+        vs bcg.sbepr:
+            qb_zvqk(cngu, bcg.bhgchg, tybo.tybo('%f/*.vqk' % cngu))
+        ryvs bcg.nhgb:
+            z = tvg.CnpxVqkYvfg(cngu)
+            arrqrq = {}
+            sbe cnpx va z.cnpxf:  # bayl .vqk svyrf jvgubhg n .zvqk ner bcra
+                vs cnpx.anzr.raqfjvgu('.vqk'):
+                    arrqrq[cnpx.anzr] = 1
+            qry z
+            qb_zvqk(cngu, bcg.bhgchg, arrqrq.xrlf())
+        ybt('\a')
+ryfr:
+    b.sngny("lbh zhfg hfr -s be -n be cebivqr vachg svyranzrf")
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, enaqbz
+sebz ohc vzcbeg bcgvbaf
+sebz ohc.urycref vzcbeg *
+
+
+qrs enaqoybpx(a):
+    y = []
+    sbe v va kenatr(a):
+        y.nccraq(pue(enaqbz.enaqenatr(0,256)))
+    erghea ''.wbva(y)
+
+
+bcgfcrp = """
+ohc qnzntr [-a pbhag] [-f znkfvmr] [-F frrq] <svyranzrf...>
 --
-   WARNING: THIS COMMAND IS EXTREMELY DANGEROUS
-n,num=   number of blocks to damage
-s,size=  maximum size of each damaged block
-percent= maximum size of each damaged block (as a percent of entire file)
-equal    spread damage evenly throughout the file
-S,seed=  random number seed (for repeatable tests)
+   JNEAVAT: GUVF PBZZNAQ VF RKGERZRYL QNATREBHF
+a,ahz=   ahzore bs oybpxf gb qnzntr
+f,fvmr=  znkvzhz fvmr bs rnpu qnzntrq oybpx
+creprag= znkvzhz fvmr bs rnpu qnzntrq oybpx (nf n creprag bs ragver svyr)
+rdhny    fcernq qnzntr rirayl guebhtubhg gur svyr
+F,frrq=  enaqbz ahzore frrq (sbe ercrngnoyr grfgf)
 """
-o = options.Options('bup damage', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if not extra:
-    o.fatal('filenames expected')
-
-if opt.seed != None:
-    random.seed(opt.seed)
-
-for name in extra:
-    log('Damaging "%s"...\n' % name)
-    f = open(name, 'r+b')
-    st = os.fstat(f.fileno())
-    size = st.st_size
-    if opt.percent or opt.size:
-        ms1 = int(float(opt.percent or 0)/100.0*size) or size
-        ms2 = opt.size or size
-        maxsize = min(ms1, ms2)
-    else:
-        maxsize = 1
-    chunks = opt.num or 10
-    chunksize = size/chunks
-    for r in range(chunks):
-        sz = random.randrange(1, maxsize+1)
-        if sz > size:
-            sz = size
-        if opt.equal:
-            ofs = r*chunksize
-        else:
-            ofs = random.randrange(0, size - sz + 1)
-        log('  %6d bytes at %d\n' % (sz, ofs))
-        f.seek(ofs)
-        f.write(randblock(sz))
-    f.close()
-#!/usr/bin/env python
-import sys, struct, mmap
-from bup import options, git
-from bup.helpers import *
-
-suspended_w = None
-
-
-def init_dir(conn, arg):
-    git.init_repo(arg)
-    log('bup server: bupdir initialized: %r\n' % git.repodir)
-    conn.ok()
-
-
-def set_dir(conn, arg):
-    git.check_repo_or_die(arg)
-    log('bup server: bupdir is %r\n' % git.repodir)
-    conn.ok()
+b = bcgvbaf.Bcgvbaf('ohc qnzntr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs abg rkgen:
+    b.sngny('svyranzrf rkcrpgrq')
+
+vs bcg.frrq != Abar:
+    enaqbz.frrq(bcg.frrq)
+
+sbe anzr va rkgen:
+    ybt('Qnzntvat "%f"...\a' % anzr)
+    s = bcra(anzr, 'e+o')
+    fg = bf.sfgng(s.svyrab())
+    fvmr = fg.fg_fvmr
+    vs bcg.creprag be bcg.fvmr:
+        zf1 = vag(sybng(bcg.creprag be 0)/100.0*fvmr) be fvmr
+        zf2 = bcg.fvmr be fvmr
+        znkfvmr = zva(zf1, zf2)
+    ryfr:
+        znkfvmr = 1
+    puhaxf = bcg.ahz be 10
+    puhaxfvmr = fvmr/puhaxf
+    sbe e va enatr(puhaxf):
+        fm = enaqbz.enaqenatr(1, znkfvmr+1)
+        vs fm > fvmr:
+            fm = fvmr
+        vs bcg.rdhny:
+            bsf = e*puhaxfvmr
+        ryfr:
+            bsf = enaqbz.enaqenatr(0, fvmr - fm + 1)
+        ybt('  %6q olgrf ng %q\a' % (fm, bsf))
+        s.frrx(bsf)
+        s.jevgr(enaqoybpx(fm))
+    s.pybfr()
+#!/hfe/ova/rai clguba
+vzcbeg flf, fgehpg, zznc
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+fhfcraqrq_j = Abar
+
+
+qrs vavg_qve(pbaa, net):
+    tvg.vavg_ercb(net)
+    ybt('ohc freire: ohcqve vavgvnyvmrq: %e\a' % tvg.ercbqve)
+    pbaa.bx()
+
+
+qrs frg_qve(pbaa, net):
+    tvg.purpx_ercb_be_qvr(net)
+    ybt('ohc freire: ohcqve vf %e\a' % tvg.ercbqve)
+    pbaa.bx()
 
     
-def list_indexes(conn, junk):
-    git.check_repo_or_die()
-    for f in os.listdir(git.repo('objects/pack')):
-        if f.endswith('.idx'):
-            conn.write('%s\n' % f)
-    conn.ok()
-
-
-def send_index(conn, name):
-    git.check_repo_or_die()
-    assert(name.find('/') < 0)
-    assert(name.endswith('.idx'))
-    idx = git.PackIdx(git.repo('objects/pack/%s' % name))
-    conn.write(struct.pack('!I', len(idx.map)))
-    conn.write(idx.map)
-    conn.ok()
-
-
-def receive_objects(conn, junk):
-    global suspended_w
-    git.check_repo_or_die()
-    suggested = {}
-    if suspended_w:
-        w = suspended_w
-        suspended_w = None
-    else:
-        w = git.PackWriter()
-    while 1:
-        ns = conn.read(4)
-        if not ns:
-            w.abort()
-            raise Exception('object read: expected length header, got EOF\n')
-        n = struct.unpack('!I', ns)[0]
-        #log('expecting %d bytes\n' % n)
-        if not n:
-            log('bup server: received %d object%s.\n
-                % (w.count, w.count!=1 and "s" or ''))
-            fullpath = w.close()
-            if fullpath:
-                (dir, name) = os.path.split(fullpath)
-                conn.write('%s.idx\n' % name)
-            conn.ok()
-            return
-        elif n == 0xffffffff:
-            log('bup server: receive-objects suspended.\n')
-            suspended_w = w
-            conn.ok()
-            return
+qrs yvfg_vaqrkrf(pbaa, whax):
+    tvg.purpx_ercb_be_qvr()
+    sbe s va bf.yvfgqve(tvg.ercb('bowrpgf/cnpx')):
+        vs s.raqfjvgu('.vqk'):
+            pbaa.jevgr('%f\a' % s)
+    pbaa.bx()
+
+
+qrs fraq_vaqrk(pbaa, anzr):
+    tvg.purpx_ercb_be_qvr()
+    nffreg(anzr.svaq('/') < 0)
+    nffreg(anzr.raqfjvgu('.vqk'))
+    vqk = tvg.CnpxVqk(tvg.ercb('bowrpgf/cnpx/%f' % anzr))
+    pbaa.jevgr(fgehpg.cnpx('!V', yra(vqk.znc)))
+    pbaa.jevgr(vqk.znc)
+    pbaa.bx()
+
+
+qrs erprvir_bowrpgf(pbaa, whax):
+    tybony fhfcraqrq_j
+    tvg.purpx_ercb_be_qvr()
+    fhttrfgrq = {}
+    vs fhfcraqrq_j:
+        j = fhfcraqrq_j
+        fhfcraqrq_j = Abar
+    ryfr:
+        j = tvg.CnpxJevgre()
+    juvyr 1:
+        af = pbaa.ernq(4)
+        vs abg af:
+            j.nobeg()
+            envfr Rkprcgvba('bowrpg ernq: rkcrpgrq yratgu urnqre, tbg RBS\a')
+        a = fgehpg.hacnpx('!V', af)[0]
+        #ybt('rkcrpgvat %q olgrf\a' % a)
+        vs abg a:
+            ybt('ohc freire: erprvirq %q bowrpg%f.\a
+                % (j.pbhag, j.pbhag!=1 naq "f" be ''))
+            shyycngu = j.pybfr()
+            vs shyycngu:
+                (qve, anzr) = bf.cngu.fcyvg(shyycngu)
+                pbaa.jevgr('%f.vqk\a' % anzr)
+            pbaa.bx()
+            erghea
+        ryvs a == 0kssssssss:
+            ybt('ohc freire: erprvir-bowrpgf fhfcraqrq.\a')
+            fhfcraqrq_j = j
+            pbaa.bx()
+            erghea
             
-        buf = conn.read(n)  # object sizes in bup are reasonably small
-        #log('read %d bytes\n' % n)
-        if len(buf) < n:
-            w.abort()
-            raise Exception('object read: expected %d bytes, got %d\n'
-                            % (n, len(buf)))
-        (type, content) = git._decode_packobj(buf)
-        sha = git.calc_hash(type, content)
-        oldpack = w.exists(sha)
-        # FIXME: we only suggest a single index per cycle, because the client
-        # is currently dumb to download more than one per cycle anyway.
-        # Actually we should fix the client, but this is a minor optimization
-        # on the server side.
-        if not suggested and \
-          oldpack and (oldpack == True or oldpack.endswith('.midx')):
-            # FIXME: we shouldn't really have to know about midx files
-            # at this layer.  But exists() on a midx doesn't return the
-            # packname (since it doesn't know)... probably we should just
-            # fix that deficiency of midx files eventually, although it'll
-            # make the files bigger.  This method is certainly not very
-            # efficient.
-            w.objcache.refresh(skip_midx = True)
-            oldpack = w.objcache.exists(sha)
-            log('new suggestion: %r\n' % oldpack)
-            assert(oldpack)
-            assert(oldpack != True)
-            assert(not oldpack.endswith('.midx'))
-            w.objcache.refresh(skip_midx = False)
-        if not suggested and oldpack:
-            assert(oldpack.endswith('.idx'))
-            (dir,name) = os.path.split(oldpack)
-            if not (name in suggested):
-                log("bup server: suggesting index %s\n" % name)
-                conn.write('index %s\n' % name)
-                suggested[name] = 1
-        else:
-            w._raw_write([buf])
-    # NOTREACHED
-
-
-def read_ref(conn, refname):
-    git.check_repo_or_die()
-    r = git.read_ref(refname)
-    conn.write('%s\n' % (r or '').encode('hex'))
-    conn.ok()
-
-
-def update_ref(conn, refname):
-    git.check_repo_or_die()
-    newval = conn.readline().strip()
-    oldval = conn.readline().strip()
-    git.update_ref(refname, newval.decode('hex'), oldval.decode('hex'))
-    conn.ok()
-
-
-def cat(conn, id):
-    git.check_repo_or_die()
-    try:
-        for blob in git.cat(id):
-            conn.write(struct.pack('!I', len(blob)))
-            conn.write(blob)
-    except KeyError, e:
-        log('server: error: %s\n' % e)
-        conn.write('\0\0\0\0')
-        conn.error(e)
-    else:
-        conn.write('\0\0\0\0')
-        conn.ok()
-
-
-optspec = """
-bup server
+        ohs = pbaa.ernq(a)  # bowrpg fvmrf va ohc ner ernfbanoyl fznyy
+        #ybt('ernq %q olgrf\a' % a)
+        vs yra(ohs) < a:
+            j.nobeg()
+            envfr Rkprcgvba('bowrpg ernq: rkcrpgrq %q olgrf, tbg %q\a'
+                            % (a, yra(ohs)))
+        (glcr, pbagrag) = tvg._qrpbqr_cnpxbow(ohs)
+        fun = tvg.pnyp_unfu(glcr, pbagrag)
+        byqcnpx = j.rkvfgf(fun)
+        # SVKZR: jr bayl fhttrfg n fvatyr vaqrk cre plpyr, orpnhfr gur pyvrag
+        # vf pheeragyl qhzo gb qbjaybnq zber guna bar cre plpyr naljnl.
+        # Npghnyyl jr fubhyq svk gur pyvrag, ohg guvf vf n zvabe bcgvzvmngvba
+        # ba gur freire fvqr.
+        vs abg fhttrfgrq naq \
+          byqcnpx naq (byqcnpx == Gehr be byqcnpx.raqfjvgu('.zvqk')):
+            # SVKZR: jr fubhyqa'g ernyyl unir gb xabj nobhg zvqk svyrf
+            # ng guvf ynlre.  Ohg rkvfgf() ba n zvqk qbrfa'g erghea gur
+            # cnpxanzr (fvapr vg qbrfa'g xabj)... cebonoyl jr fubhyq whfg
+            # svk gung qrsvpvrapl bs zvqk svyrf riraghnyyl, nygubhtu vg'yy
+            # znxr gur svyrf ovttre.  Guvf zrgubq vf pregnvayl abg irel
+            # rssvpvrag.
+            j.bowpnpur.erserfu(fxvc_zvqk = Gehr)
+            byqcnpx = j.bowpnpur.rkvfgf(fun)
+            ybt('arj fhttrfgvba: %e\a' % byqcnpx)
+            nffreg(byqcnpx)
+            nffreg(byqcnpx != Gehr)
+            nffreg(abg byqcnpx.raqfjvgu('.zvqk'))
+            j.bowpnpur.erserfu(fxvc_zvqk = Snyfr)
+        vs abg fhttrfgrq naq byqcnpx:
+            nffreg(byqcnpx.raqfjvgu('.vqk'))
+            (qve,anzr) = bf.cngu.fcyvg(byqcnpx)
+            vs abg (anzr va fhttrfgrq):
+                ybt("ohc freire: fhttrfgvat vaqrk %f\a" % anzr)
+                pbaa.jevgr('vaqrk %f\a' % anzr)
+                fhttrfgrq[anzr] = 1
+        ryfr:
+            j._enj_jevgr([ohs])
+    # ABGERNPURQ
+
+
+qrs ernq_ers(pbaa, ersanzr):
+    tvg.purpx_ercb_be_qvr()
+    e = tvg.ernq_ers(ersanzr)
+    pbaa.jevgr('%f\a' % (e be '').rapbqr('urk'))
+    pbaa.bx()
+
+
+qrs hcqngr_ers(pbaa, ersanzr):
+    tvg.purpx_ercb_be_qvr()
+    arjiny = pbaa.ernqyvar().fgevc()
+    byqiny = pbaa.ernqyvar().fgevc()
+    tvg.hcqngr_ers(ersanzr, arjiny.qrpbqr('urk'), byqiny.qrpbqr('urk'))
+    pbaa.bx()
+
+
+qrs png(pbaa, vq):
+    tvg.purpx_ercb_be_qvr()
+    gel:
+        sbe oybo va tvg.png(vq):
+            pbaa.jevgr(fgehpg.cnpx('!V', yra(oybo)))
+            pbaa.jevgr(oybo)
+    rkprcg XrlReebe, r:
+        ybt('freire: reebe: %f\a' % r)
+        pbaa.jevgr('\0\0\0\0')
+        pbaa.reebe(r)
+    ryfr:
+        pbaa.jevgr('\0\0\0\0')
+        pbaa.bx()
+
+
+bcgfcrp = """
+ohc freire
 """
-o = options.Options('bup server', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal('no arguments expected')
-
-log('bup server: reading from stdin.\n')
-
-commands = {
-    'init-dir': init_dir,
-    'set-dir': set_dir,
-    'list-indexes': list_indexes,
-    'send-index': send_index,
-    'receive-objects': receive_objects,
-    'read-ref': read_ref,
-    'update-ref': update_ref,
-    'cat': cat,
+b = bcgvbaf.Bcgvbaf('ohc freire', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+ybt('ohc freire: ernqvat sebz fgqva.\a')
+
+pbzznaqf = {
+    'vavg-qve': vavg_qve,
+    'frg-qve': frg_qve,
+    'yvfg-vaqrkrf': yvfg_vaqrkrf,
+    'fraq-vaqrk': fraq_vaqrk,
+    'erprvir-bowrpgf': erprvir_bowrpgf,
+    'ernq-ers': ernq_ers,
+    'hcqngr-ers': hcqngr_ers,
+    'png': png,
 }
 
-# FIXME: this protocol is totally lame and not at all future-proof.
-# (Especially since we abort completely as soon as *anything* bad happens)
-conn = Conn(sys.stdin, sys.stdout)
-lr = linereader(conn)
-for _line in lr:
-    line = _line.strip()
-    if not line:
-        continue
-    log('bup server: command: %r\n' % line)
-    words = line.split(' ', 1)
-    cmd = words[0]
-    rest = len(words)>1 and words[1] or ''
-    if cmd == 'quit':
-        break
-    else:
-        cmd = commands.get(cmd)
-        if cmd:
-            cmd(conn, rest)
-        else:
-            raise Exception('unknown server command: %r\n' % line)
-
-log('bup server: done\n')
-#!/usr/bin/env python
-import sys, time, struct
-from bup import hashsplit, git, options, client
-from bup.helpers import *
-from subprocess import PIPE
-
-
-optspec = """
-bup join [-r host:path] [refs or hashes...]
+# SVKZR: guvf cebgbpby vf gbgnyyl ynzr naq abg ng nyy shgher-cebbs.
+# (Rfcrpvnyyl fvapr jr nobeg pbzcyrgryl nf fbba nf *nalguvat* onq unccraf)
+pbaa = Pbaa(flf.fgqva, flf.fgqbhg)
+ye = yvarernqre(pbaa)
+sbe _yvar va ye:
+    yvar = _yvar.fgevc()
+    vs abg yvar:
+        pbagvahr
+    ybt('ohc freire: pbzznaq: %e\a' % yvar)
+    jbeqf = yvar.fcyvg(' ', 1)
+    pzq = jbeqf[0]
+    erfg = yra(jbeqf)>1 naq jbeqf[1] be ''
+    vs pzq == 'dhvg':
+        oernx
+    ryfr:
+        pzq = pbzznaqf.trg(pzq)
+        vs pzq:
+            pzq(pbaa, erfg)
+        ryfr:
+            envfr Rkprcgvba('haxabja freire pbzznaq: %e\a' % yvar)
+
+ybt('ohc freire: qbar\a')
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr, fgehpg
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+sebz fhocebprff vzcbeg CVCR
+
+
+bcgfcrp = """
+ohc wbva [-e ubfg:cngu] [ersf be unfurf...]
 --
-r,remote=  remote repository path
+e,erzbgr=  erzbgr ercbfvgbel cngu
 """
-o = options.Options('bup join', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
+b = bcgvbaf.Bcgvbaf('ohc wbva', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
 
-git.check_repo_or_die()
+tvg.purpx_ercb_be_qvr()
 
-if not extra:
-    extra = linereader(sys.stdin)
+vs abg rkgen:
+    rkgen = yvarernqre(flf.fgqva)
 
-ret = 0
+erg = 0
 
-if opt.remote:
-    cli = client.Client(opt.remote)
-    cat = cli.cat
-else:
-    cp = git.CatPipe()
-    cat = cp.join
+vs bcg.erzbgr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    png = pyv.png
+ryfr:
+    pc = tvg.PngCvcr()
+    png = pc.wbva
 
-for id in extra:
-    try:
-        for blob in cat(id):
-            sys.stdout.write(blob)
-    except KeyError, e:
-        sys.stdout.flush()
-        log('error: %s\n' % e)
-        ret = 1
+sbe vq va rkgen:
+    gel:
+        sbe oybo va png(vq):
+            flf.fgqbhg.jevgr(oybo)
+    rkprcg XrlReebe, r:
+        flf.fgqbhg.syhfu()
+        ybt('reebe: %f\a' % r)
+        erg = 1
 
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, re, errno, stat, time, math
-from bup import hashsplit, git, options, index, client
-from bup.helpers import *
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, er, reeab, fgng, gvzr, zngu
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, vaqrk, pyvrag
+sebz ohc.urycref vzcbeg *
 
 
-optspec = """
-bup save [-tc] [-n name] <filenames...>
+bcgfcrp = """
+ohc fnir [-gp] [-a anzr] <svyranzrf...>
 --
-r,remote=  remote repository path
-t,tree     output a tree id
-c,commit   output a commit id
-n,name=    name of backup set to update (if any)
-v,verbose  increase log output (can be used more than once)
-q,quiet    don't show progress meter
-smaller=   only back up files smaller than n bytes
+e,erzbgr=  erzbgr ercbfvgbel cngu
+g,gerr     bhgchg n gerr vq
+p,pbzzvg   bhgchg n pbzzvg vq
+a,anzr=    anzr bs onpxhc frg gb hcqngr (vs nal)
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
+d,dhvrg    qba'g fubj cebterff zrgre
+fznyyre=   bayl onpx hc svyrf fznyyre guna a olgrf
 """
-o = options.Options('bup save', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-if not (opt.tree or opt.commit or opt.name):
-    o.fatal("use one or more of -t, -c, -n")
-if not extra:
-    o.fatal("no filenames given")
-
-opt.progress = (istty and not opt.quiet)
-opt.smaller = parse_num(opt.smaller or 0)
-
-is_reverse = os.environ.get('BUP_SERVER_REVERSE')
-if is_reverse and opt.remote:
-    o.fatal("don't use -r in reverse mode; it's automatic")
-
-refname = opt.name and 'refs/heads/%s' % opt.name or None
-if opt.remote or is_reverse:
-    cli = client.Client(opt.remote)
-    oldref = refname and cli.read_ref(refname) or None
-    w = cli.new_packwriter()
-else:
-    cli = None
-    oldref = refname and git.read_ref(refname) or None
-    w = git.PackWriter()
-
-handle_ctrl_c()
-
-
-def eatslash(dir):
-    if dir.endswith('/'):
-        return dir[:-1]
-    else:
-        return dir
-
-
-parts = ['']
-shalists = [[]]
-
-def _push(part):
-    assert(part)
-    parts.append(part)
-    shalists.append([])
-
-def _pop(force_tree):
-    assert(len(parts) >= 1)
-    part = parts.pop()
-    shalist = shalists.pop()
-    tree = force_tree or w.new_tree(shalist)
-    if shalists:
-        shalists[-1].append(('40000', part, tree))
-    else:  # this was the toplevel, so put it back for sanity
-        shalists.append(shalist)
-    return tree
-
-lastremain = None
-def progress_report(n):
-    global count, subcount, lastremain
-    subcount += n
-    cc = count + subcount
-    pct = total and (cc*100.0/total) or 0
-    now = time.time()
-    elapsed = now - tstart
-    kps = elapsed and int(cc/1024./elapsed)
-    kps_frac = 10 ** int(math.log(kps+1, 10) - 1)
-    kps = int(kps/kps_frac)*kps_frac
-    if cc:
-        remain = elapsed*1.0/cc * (total-cc)
-    else:
-        remain = 0.0
-    if (lastremain and (remain > lastremain)
-          and ((remain - lastremain)/lastremain < 0.05)):
-        remain = lastremain
-    else:
-        lastremain = remain
-    hours = int(remain/60/60)
-    mins = int(remain/60 - hours*60)
-    secs = int(remain - hours*60*60 - mins*60)
-    if elapsed < 30:
-        remainstr = ''
-        kpsstr = ''
-    else:
-        kpsstr = '%dk/s' % kps
-        if hours:
-            remainstr = '%dh%dm' % (hours, mins)
-        elif mins:
-            remainstr = '%dm%d' % (mins, secs)
-        else:
-            remainstr = '%ds' % secs
-    progress('Saving: %.2f%% (%d/%dk, %d/%d files) %s %s\r'
-             % (pct, cc/1024, total/1024, fcount, ftotal,
-                remainstr, kpsstr))
-
-
-r = index.Reader(git.repo('bupindex'))
-
-def already_saved(ent):
-    return ent.is_valid() and w.exists(ent.sha) and ent.sha
-
-def wantrecurse_pre(ent):
-    return not already_saved(ent)
-
-def wantrecurse_during(ent):
-    return not already_saved(ent) or ent.sha_missing()
-
-total = ftotal = 0
-if opt.progress:
-    for (transname,ent) in r.filter(extra, wantrecurse=wantrecurse_pre):
-        if not (ftotal % 10024):
-            progress('Reading index: %d\r' % ftotal)
-        exists = ent.exists()
-        hashvalid = already_saved(ent)
-        ent.set_sha_missing(not hashvalid)
-        if not opt.smaller or ent.size < opt.smaller:
-            if exists and not hashvalid:
-                total += ent.size
-        ftotal += 1
-    progress('Reading index: %d, done.\n' % ftotal)
-    hashsplit.progress_callback = progress_report
-
-tstart = time.time()
-count = subcount = fcount = 0
-lastskip_name = None
-lastdir = ''
-for (transname,ent) in r.filter(extra, wantrecurse=wantrecurse_during):
-    (dir, file) = os.path.split(ent.name)
-    exists = (ent.flags & index.IX_EXISTS)
-    hashvalid = already_saved(ent)
-    wasmissing = ent.sha_missing()
-    oldsize = ent.size
-    if opt.verbose:
-        if not exists:
-            status = 'D'
-        elif not hashvalid:
-            if ent.sha == index.EMPTY_SHA:
-                status = 'A'
-            else:
-                status = 'M'
-        else:
-            status = ' '
-        if opt.verbose >= 2:
-            log('%s %-70s\n' % (status, ent.name))
-        elif not stat.S_ISDIR(ent.mode) and lastdir != dir:
-            if not lastdir.startswith(dir):
-                log('%s %-70s\n' % (status, os.path.join(dir, '')))
-            lastdir = dir
-
-    if opt.progress:
-        progress_report(0)
-    fcount += 1
+b = bcgvbaf.Bcgvbaf('ohc fnir', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+vs abg (bcg.gerr be bcg.pbzzvg be bcg.anzr):
+    b.sngny("hfr bar be zber bs -g, -p, -a")
+vs abg rkgen:
+    b.sngny("ab svyranzrf tvira")
+
+bcg.cebterff = (vfggl naq abg bcg.dhvrg)
+bcg.fznyyre = cnefr_ahz(bcg.fznyyre be 0)
+
+vf_erirefr = bf.raiveba.trg('OHC_FREIRE_ERIREFR')
+vs vf_erirefr naq bcg.erzbgr:
+    b.sngny("qba'g hfr -e va erirefr zbqr; vg'f nhgbzngvp")
+
+ersanzr = bcg.anzr naq 'ersf/urnqf/%f' % bcg.anzr be Abar
+vs bcg.erzbgr be vf_erirefr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    byqers = ersanzr naq pyv.ernq_ers(ersanzr) be Abar
+    j = pyv.arj_cnpxjevgre()
+ryfr:
+    pyv = Abar
+    byqers = ersanzr naq tvg.ernq_ers(ersanzr) be Abar
+    j = tvg.CnpxJevgre()
+
+unaqyr_pgey_p()
+
+
+qrs rngfynfu(qve):
+    vs qve.raqfjvgu('/'):
+        erghea qve[:-1]
+    ryfr:
+        erghea qve
+
+
+cnegf = ['']
+funyvfgf = [[]]
+
+qrs _chfu(cneg):
+    nffreg(cneg)
+    cnegf.nccraq(cneg)
+    funyvfgf.nccraq([])
+
+qrs _cbc(sbepr_gerr):
+    nffreg(yra(cnegf) >= 1)
+    cneg = cnegf.cbc()
+    funyvfg = funyvfgf.cbc()
+    gerr = sbepr_gerr be j.arj_gerr(funyvfg)
+    vs funyvfgf:
+        funyvfgf[-1].nccraq(('40000', cneg, gerr))
+    ryfr:  # guvf jnf gur gbcyriry, fb chg vg onpx sbe fnavgl
+        funyvfgf.nccraq(funyvfg)
+    erghea gerr
+
+ynfgerznva = Abar
+qrs cebterff_ercbeg(a):
+    tybony pbhag, fhopbhag, ynfgerznva
+    fhopbhag += a
+    pp = pbhag + fhopbhag
+    cpg = gbgny naq (pp*100.0/gbgny) be 0
+    abj = gvzr.gvzr()
+    ryncfrq = abj - gfgneg
+    xcf = ryncfrq naq vag(pp/1024./ryncfrq)
+    xcf_senp = 10 ** vag(zngu.ybt(xcf+1, 10) - 1)
+    xcf = vag(xcf/xcf_senp)*xcf_senp
+    vs pp:
+        erznva = ryncfrq*1.0/pp * (gbgny-pp)
+    ryfr:
+        erznva = 0.0
+    vs (ynfgerznva naq (erznva > ynfgerznva)
+          naq ((erznva - ynfgerznva)/ynfgerznva < 0.05)):
+        erznva = ynfgerznva
+    ryfr:
+        ynfgerznva = erznva
+    ubhef = vag(erznva/60/60)
+    zvaf = vag(erznva/60 - ubhef*60)
+    frpf = vag(erznva - ubhef*60*60 - zvaf*60)
+    vs ryncfrq < 30:
+        erznvafge = ''
+        xcffge = ''
+    ryfr:
+        xcffge = '%qx/f' % xcf
+        vs ubhef:
+            erznvafge = '%qu%qz' % (ubhef, zvaf)
+        ryvs zvaf:
+            erznvafge = '%qz%q' % (zvaf, frpf)
+        ryfr:
+            erznvafge = '%qf' % frpf
+    cebterff('Fnivat: %.2s%% (%q/%qx, %q/%q svyrf) %f %f\e'
+             % (cpg, pp/1024, gbgny/1024, spbhag, sgbgny,
+                erznvafge, xcffge))
+
+
+e = vaqrk.Ernqre(tvg.ercb('ohcvaqrk'))
+
+qrs nyernql_fnirq(rag):
+    erghea rag.vf_inyvq() naq j.rkvfgf(rag.fun) naq rag.fun
+
+qrs jnagerphefr_cer(rag):
+    erghea abg nyernql_fnirq(rag)
+
+qrs jnagerphefr_qhevat(rag):
+    erghea abg nyernql_fnirq(rag) be rag.fun_zvffvat()
+
+gbgny = sgbgny = 0
+vs bcg.cebterff:
+    sbe (genafanzr,rag) va e.svygre(rkgen, jnagerphefr=jnagerphefr_cer):
+        vs abg (sgbgny % 10024):
+            cebterff('Ernqvat vaqrk: %q\e' % sgbgny)
+        rkvfgf = rag.rkvfgf()
+        unfuinyvq = nyernql_fnirq(rag)
+        rag.frg_fun_zvffvat(abg unfuinyvq)
+        vs abg bcg.fznyyre be rag.fvmr < bcg.fznyyre:
+            vs rkvfgf naq abg unfuinyvq:
+                gbgny += rag.fvmr
+        sgbgny += 1
+    cebterff('Ernqvat vaqrk: %q, qbar.\a' % sgbgny)
+    unfufcyvg.cebterff_pnyyonpx = cebterff_ercbeg
+
+gfgneg = gvzr.gvzr()
+pbhag = fhopbhag = spbhag = 0
+ynfgfxvc_anzr = Abar
+ynfgqve = ''
+sbe (genafanzr,rag) va e.svygre(rkgen, jnagerphefr=jnagerphefr_qhevat):
+    (qve, svyr) = bf.cngu.fcyvg(rag.anzr)
+    rkvfgf = (rag.syntf & vaqrk.VK_RKVFGF)
+    unfuinyvq = nyernql_fnirq(rag)
+    jnfzvffvat = rag.fun_zvffvat()
+    byqfvmr = rag.fvmr
+    vs bcg.ireobfr:
+        vs abg rkvfgf:
+            fgnghf = 'Q'
+        ryvs abg unfuinyvq:
+            vs rag.fun == vaqrk.RZCGL_FUN:
+                fgnghf = 'N'
+            ryfr:
+                fgnghf = 'Z'
+        ryfr:
+            fgnghf = ' '
+        vs bcg.ireobfr >= 2:
+            ybt('%f %-70f\a' % (fgnghf, rag.anzr))
+        ryvs abg fgng.F_VFQVE(rag.zbqr) naq ynfgqve != qve:
+            vs abg ynfgqve.fgnegfjvgu(qve):
+                ybt('%f %-70f\a' % (fgnghf, bf.cngu.wbva(qve, '')))
+            ynfgqve = qve
+
+    vs bcg.cebterff:
+        cebterff_ercbeg(0)
+    spbhag += 1
     
-    if not exists:
-        continue
-    if opt.smaller and ent.size >= opt.smaller:
-        if exists and not hashvalid:
-            add_error('skipping large file "%s"' % ent.name)
-            lastskip_name = ent.name
-        continue
-
-    assert(dir.startswith('/'))
-    dirp = dir.split('/')
-    while parts > dirp:
-        _pop(force_tree = None)
-    if dir != '/':
-        for part in dirp[len(parts):]:
-            _push(part)
-
-    if not file:
-        # no filename portion means this is a subdir.  But
-        # sub/parentdirectories already handled in the pop/push() part above.
-        oldtree = already_saved(ent) # may be None
-        newtree = _pop(force_tree = oldtree)
-        if not oldtree:
-            if lastskip_name and lastskip_name.startswith(ent.name):
-                ent.invalidate()
-            else:
-                ent.validate(040000, newtree)
-            ent.repack()
-        if exists and wasmissing:
-            count += oldsize
-        continue
-
-    # it's not a directory
-    id = None
-    if hashvalid:
-        mode = '%o' % ent.gitmode
-        id = ent.sha
-        shalists[-1].append((mode
-                             git.mangle_name(file, ent.mode, ent.gitmode),
-                             id))
-    else:
-        if stat.S_ISREG(ent.mode):
-            try:
-                f = hashsplit.open_noatime(ent.name)
-            except IOError, e:
-                add_error(e)
-                lastskip_name = ent.name
-            except OSError, e:
-                add_error(e)
-                lastskip_name = ent.name
-            else:
-                (mode, id) = hashsplit.split_to_blob_or_tree(w, [f])
-        else:
-            if stat.S_ISDIR(ent.mode):
-                assert(0)  # handled above
-            elif stat.S_ISLNK(ent.mode):
-                try:
-                    rl = os.readlink(ent.name)
-                except OSError, e:
-                    add_error(e)
-                    lastskip_name = ent.name
-                except IOError, e:
-                    add_error(e)
-                    lastskip_name = ent.name
-                else:
-                    (mode, id) = ('120000', w.new_blob(rl))
-            else:
-                add_error(Exception('skipping special file "%s"' % ent.name))
-                lastskip_name = ent.name
-        if id:
-            ent.validate(int(mode, 8), id)
-            ent.repack()
-            shalists[-1].append((mode,
-                                 git.mangle_name(file, ent.mode, ent.gitmode),
-                                 id))
-    if exists and wasmissing:
-        count += oldsize
-        subcount = 0
-
-
-if opt.progress:
-    pct = total and count*100.0/total or 100
-    progress('Saving: %.2f%% (%d/%dk, %d/%d files), done.    \n'
-             % (pct, count/1024, total/1024, fcount, ftotal))
-
-while len(parts) > 1:
-    _pop(force_tree = None)
-assert(len(shalists) == 1)
-tree = w.new_tree(shalists[-1])
-if opt.tree:
-    print tree.encode('hex')
-if opt.commit or opt.name:
-    msg = 'bup save\n\nGenerated by command:\n%r' % sys.argv
-    ref = opt.name and ('refs/heads/%s' % opt.name) or None
-    commit = w.new_commit(oldref, tree, msg)
-    if opt.commit:
-        print commit.encode('hex')
-
-w.close()  # must close before we can update the ref
+    vs abg rkvfgf:
+        pbagvahr
+    vs bcg.fznyyre naq rag.fvmr >= bcg.fznyyre:
+        vs rkvfgf naq abg unfuinyvq:
+            nqq_reebe('fxvccvat ynetr svyr "%f"' % rag.anzr)
+            ynfgfxvc_anzr = rag.anzr
+        pbagvahr
+
+    nffreg(qve.fgnegfjvgu('/'))
+    qvec = qve.fcyvg('/')
+    juvyr cnegf > qvec:
+        _cbc(sbepr_gerr = Abar)
+    vs qve != '/':
+        sbe cneg va qvec[yra(cnegf):]:
+            _chfu(cneg)
+
+    vs abg svyr:
+        # ab svyranzr cbegvba zrnaf guvf vf n fhoqve.  Ohg
+        # fho/cneragqverpgbevrf nyernql unaqyrq va gur cbc/chfu() cneg nobir.
+        byqgerr = nyernql_fnirq(rag) # znl or Abar
+        arjgerr = _cbc(sbepr_gerr = byqgerr)
+        vs abg byqgerr:
+            vs ynfgfxvc_anzr naq ynfgfxvc_anzr.fgnegfjvgu(rag.anzr):
+                rag.vainyvqngr()
+            ryfr:
+                rag.inyvqngr(040000, arjgerr)
+            rag.ercnpx()
+        vs rkvfgf naq jnfzvffvat:
+            pbhag += byqfvmr
+        pbagvahr
+
+    # vg'f abg n qverpgbel
+    vq = Abar
+    vs unfuinyvq:
+        zbqr = '%b' % rag.tvgzbqr
+        vq = rag.fun
+        funyvfgf[-1].nccraq((zbqr
+                             tvg.znatyr_anzr(svyr, rag.zbqr, rag.tvgzbqr),
+                             vq))
+    ryfr:
+        vs fgng.F_VFERT(rag.zbqr):
+            gel:
+                s = unfufcyvg.bcra_abngvzr(rag.anzr)
+            rkprcg VBReebe, r:
+                nqq_reebe(r)
+                ynfgfxvc_anzr = rag.anzr
+            rkprcg BFReebe, r:
+                nqq_reebe(r)
+                ynfgfxvc_anzr = rag.anzr
+            ryfr:
+                (zbqr, vq) = unfufcyvg.fcyvg_gb_oybo_be_gerr(j, [s])
+        ryfr:
+            vs fgng.F_VFQVE(rag.zbqr):
+                nffreg(0)  # unaqyrq nobir
+            ryvs fgng.F_VFYAX(rag.zbqr):
+                gel:
+                    ey = bf.ernqyvax(rag.anzr)
+                rkprcg BFReebe, r:
+                    nqq_reebe(r)
+                    ynfgfxvc_anzr = rag.anzr
+                rkprcg VBReebe, r:
+                    nqq_reebe(r)
+                    ynfgfxvc_anzr = rag.anzr
+                ryfr:
+                    (zbqr, vq) = ('120000', j.arj_oybo(ey))
+            ryfr:
+                nqq_reebe(Rkprcgvba('fxvccvat fcrpvny svyr "%f"' % rag.anzr))
+                ynfgfxvc_anzr = rag.anzr
+        vs vq:
+            rag.inyvqngr(vag(zbqr, 8), vq)
+            rag.ercnpx()
+            funyvfgf[-1].nccraq((zbqr,
+                                 tvg.znatyr_anzr(svyr, rag.zbqr, rag.tvgzbqr),
+                                 vq))
+    vs rkvfgf naq jnfzvffvat:
+        pbhag += byqfvmr
+        fhopbhag = 0
+
+
+vs bcg.cebterff:
+    cpg = gbgny naq pbhag*100.0/gbgny be 100
+    cebterff('Fnivat: %.2s%% (%q/%qx, %q/%q svyrf), qbar.    \a'
+             % (cpg, pbhag/1024, gbgny/1024, spbhag, sgbgny))
+
+juvyr yra(cnegf) > 1:
+    _cbc(sbepr_gerr = Abar)
+nffreg(yra(funyvfgf) == 1)
+gerr = j.arj_gerr(funyvfgf[-1])
+vs bcg.gerr:
+    cevag gerr.rapbqr('urk')
+vs bcg.pbzzvg be bcg.anzr:
+    zft = 'ohc fnir\a\aTrarengrq ol pbzznaq:\a%e' % flf.neti
+    ers = bcg.anzr naq ('ersf/urnqf/%f' % bcg.anzr) be Abar
+    pbzzvg = j.arj_pbzzvg(byqers, gerr, zft)
+    vs bcg.pbzzvg:
+        cevag pbzzvg.rapbqr('urk')
+
+j.pybfr()  # zhfg pybfr orsber jr pna hcqngr gur ers
         
-if opt.name:
-    if cli:
-        cli.update_ref(refname, commit, oldref)
-    else:
-        git.update_ref(refname, commit, oldref)
-
-if cli:
-    cli.close()
-
-if saved_errors:
-    log('WARNING: %d errors encountered while saving.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, time
-from bup import options
-
-optspec = """
-bup tick
+vs bcg.anzr:
+    vs pyv:
+        pyv.hcqngr_ers(ersanzr, pbzzvg, byqers)
+    ryfr:
+        tvg.hcqngr_ers(ersanzr, pbzzvg, byqers)
+
+vs pyv:
+    pyv.pybfr()
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq juvyr fnivat.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc gvpx
 """
-o = options.Options('bup tick', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-t = time.time()
-tleft = 1 - (t - int(t))
-time.sleep(tleft)
-#!/usr/bin/env python
-import os, sys, stat, time
-from bup import options, git, index, drecurse
-from bup.helpers import *
-
-
-def merge_indexes(out, r1, r2):
-    for e in index.MergeIter([r1, r2]):
-        # FIXME: shouldn't we remove deleted entries eventually?  When?
-        out.add_ixentry(e)
-
-
-class IterHelper:
-    def __init__(self, l):
-        self.i = iter(l)
-        self.cur = None
-        self.next()
-
-    def next(self):
-        try:
-            self.cur = self.i.next()
-        except StopIteration:
-            self.cur = None
-        return self.cur
-
-
-def check_index(reader):
-    try:
-        log('check: checking forward iteration...\n')
-        e = None
-        d = {}
-        for e in reader.forward_iter():
-            if e.children_n:
-                if opt.verbose:
-                    log('%08x+%-4d %r\n' % (e.children_ofs, e.children_n,
-                                            e.name))
-                assert(e.children_ofs)
-                assert(e.name.endswith('/'))
-                assert(not d.get(e.children_ofs))
-                d[e.children_ofs] = 1
-            if e.flags & index.IX_HASHVALID:
-                assert(e.sha != index.EMPTY_SHA)
-                assert(e.gitmode)
-        assert(not e or e.name == '/')  # last entry is *always* /
-        log('check: checking normal iteration...\n')
-        last = None
-        for e in reader:
-            if last:
-                assert(last > e.name)
-            last = e.name
-    except:
-        log('index error! at %r\n' % e)
-        raise
-    log('check: passed.\n')
-
-
-def update_index(top):
-    ri = index.Reader(indexfile)
-    wi = index.Writer(indexfile)
-    rig = IterHelper(ri.iter(name=top))
-    tstart = int(time.time())
-
-    hashgen = None
-    if opt.fake_valid:
-        def hashgen(name):
-            return (0100644, index.FAKE_SHA)
-
-    total = 0
-    for (path,pst) in drecurse.recursive_dirlist([top], xdev=opt.xdev):
-        if opt.verbose>=2 or (opt.verbose==1 and stat.S_ISDIR(pst.st_mode)):
-            sys.stdout.write('%s\n' % path)
-            sys.stdout.flush()
-            progress('Indexing: %d\r' % total)
-        elif not (total % 128):
-            progress('Indexing: %d\r' % total)
-        total += 1
-        while rig.cur and rig.cur.name > path:  # deleted paths
-            if rig.cur.exists():
-                rig.cur.set_deleted()
-                rig.cur.repack()
-            rig.next()
-        if rig.cur and rig.cur.name == path:    # paths that already existed
-            if pst:
-                rig.cur.from_stat(pst, tstart)
-            if not (rig.cur.flags & index.IX_HASHVALID):
-                if hashgen:
-                    (rig.cur.gitmode, rig.cur.sha) = hashgen(path)
-                    rig.cur.flags |= index.IX_HASHVALID
-            if opt.fake_invalid:
-                rig.cur.invalidate()
-            rig.cur.repack()
-            rig.next()
-        else:  # new paths
-            wi.add(path, pst, hashgen = hashgen)
-    progress('Indexing: %d, done.\n' % total)
+b = bcgvbaf.Bcgvbaf('ohc gvpx', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+g = gvzr.gvzr()
+gyrsg = 1 - (g - vag(g))
+gvzr.fyrrc(gyrsg)
+#!/hfe/ova/rai clguba
+vzcbeg bf, flf, fgng, gvzr
+sebz ohc vzcbeg bcgvbaf, tvg, vaqrk, qerphefr
+sebz ohc.urycref vzcbeg *
+
+
+qrs zretr_vaqrkrf(bhg, e1, e2):
+    sbe r va vaqrk.ZretrVgre([e1, e2]):
+        # SVKZR: fubhyqa'g jr erzbir qryrgrq ragevrf riraghnyyl?  Jura?
+        bhg.nqq_vkragel(r)
+
+
+pynff VgreUrycre:
+    qrs __vavg__(frys, y):
+        frys.v = vgre(y)
+        frys.phe = Abar
+        frys.arkg()
+
+    qrs arkg(frys):
+        gel:
+            frys.phe = frys.v.arkg()
+        rkprcg FgbcVgrengvba:
+            frys.phe = Abar
+        erghea frys.phe
+
+
+qrs purpx_vaqrk(ernqre):
+    gel:
+        ybt('purpx: purpxvat sbejneq vgrengvba...\a')
+        r = Abar
+        q = {}
+        sbe r va ernqre.sbejneq_vgre():
+            vs r.puvyqera_a:
+                vs bcg.ireobfr:
+                    ybt('%08k+%-4q %e\a' % (r.puvyqera_bsf, r.puvyqera_a,
+                                            r.anzr))
+                nffreg(r.puvyqera_bsf)
+                nffreg(r.anzr.raqfjvgu('/'))
+                nffreg(abg q.trg(r.puvyqera_bsf))
+                q[r.puvyqera_bsf] = 1
+            vs r.syntf & vaqrk.VK_UNFUINYVQ:
+                nffreg(r.fun != vaqrk.RZCGL_FUN)
+                nffreg(r.tvgzbqr)
+        nffreg(abg r be r.anzr == '/')  # ynfg ragel vf *nyjnlf* /
+        ybt('purpx: purpxvat abezny vgrengvba...\a')
+        ynfg = Abar
+        sbe r va ernqre:
+            vs ynfg:
+                nffreg(ynfg > r.anzr)
+            ynfg = r.anzr
+    rkprcg:
+        ybt('vaqrk reebe! ng %e\a' % r)
+        envfr
+    ybt('purpx: cnffrq.\a')
+
+
+qrs hcqngr_vaqrk(gbc):
+    ev = vaqrk.Ernqre(vaqrksvyr)
+    jv = vaqrk.Jevgre(vaqrksvyr)
+    evt = VgreUrycre(ev.vgre(anzr=gbc))
+    gfgneg = vag(gvzr.gvzr())
+
+    unfutra = Abar
+    vs bcg.snxr_inyvq:
+        qrs unfutra(anzr):
+            erghea (0100644, vaqrk.SNXR_FUN)
+
+    gbgny = 0
+    sbe (cngu,cfg) va qerphefr.erphefvir_qveyvfg([gbc], kqri=bcg.kqri):
+        vs bcg.ireobfr>=2 be (bcg.ireobfr==1 naq fgng.F_VFQVE(cfg.fg_zbqr)):
+            flf.fgqbhg.jevgr('%f\a' % cngu)
+            flf.fgqbhg.syhfu()
+            cebterff('Vaqrkvat: %q\e' % gbgny)
+        ryvs abg (gbgny % 128):
+            cebterff('Vaqrkvat: %q\e' % gbgny)
+        gbgny += 1
+        juvyr evt.phe naq evt.phe.anzr > cngu:  # qryrgrq cnguf
+            vs evt.phe.rkvfgf():
+                evt.phe.frg_qryrgrq()
+                evt.phe.ercnpx()
+            evt.arkg()
+        vs evt.phe naq evt.phe.anzr == cngu:    # cnguf gung nyernql rkvfgrq
+            vs cfg:
+                evt.phe.sebz_fgng(cfg, gfgneg)
+            vs abg (evt.phe.syntf & vaqrk.VK_UNFUINYVQ):
+                vs unfutra:
+                    (evt.phe.tvgzbqr, evt.phe.fun) = unfutra(cngu)
+                    evt.phe.syntf |= vaqrk.VK_UNFUINYVQ
+            vs bcg.snxr_vainyvq:
+                evt.phe.vainyvqngr()
+            evt.phe.ercnpx()
+            evt.arkg()
+        ryfr:  # arj cnguf
+            jv.nqq(cngu, cfg, unfutra = unfutra)
+    cebterff('Vaqrkvat: %q, qbar.\a' % gbgny)
     
-    if ri.exists():
-        ri.save()
-        wi.flush()
-        if wi.count:
-            wr = wi.new_reader()
-            if opt.check:
-                log('check: before merging: oldfile\n')
-                check_index(ri)
-                log('check: before merging: newfile\n')
-                check_index(wr)
-            mi = index.Writer(indexfile)
-            merge_indexes(mi, ri, wr)
-            ri.close()
-            mi.close()
-            wr.close()
-        wi.abort()
-    else:
-        wi.close()
-
-
-optspec = """
-bup index <-p|m|u> [options...] <filenames...>
+    vs ev.rkvfgf():
+        ev.fnir()
+        jv.syhfu()
+        vs jv.pbhag:
+            je = jv.arj_ernqre()
+            vs bcg.purpx:
+                ybt('purpx: orsber zretvat: byqsvyr\a')
+                purpx_vaqrk(ev)
+                ybt('purpx: orsber zretvat: arjsvyr\a')
+                purpx_vaqrk(je)
+            zv = vaqrk.Jevgre(vaqrksvyr)
+            zretr_vaqrkrf(zv, ev, je)
+            ev.pybfr()
+            zv.pybfr()
+            je.pybfr()
+        jv.nobeg()
+    ryfr:
+        jv.pybfr()
+
+
+bcgfcrp = """
+ohc vaqrk <-c|z|h> [bcgvbaf...] <svyranzrf...>
 --
-p,print    print the index entries for the given names (also works with -u)
-m,modified print only added/deleted/modified files (implies -p)
-s,status   print each filename with a status char (A/M/D) (implies -p)
-H,hash     print the hash for each object next to its name (implies -p)
-l,long     print more information about each file
-u,update   (recursively) update the index entries for the given filenames
-x,xdev,one-file-system  don't cross filesystem boundaries
-fake-valid mark all index entries as up-to-date even if they aren't
-fake-invalid mark all index entries as invalid
-check      carefully check index file integrity
-f,indexfile=  the name of the index file (default 'index')
-v,verbose  increase log output (can be used more than once)
+c,cevag    cevag gur vaqrk ragevrf sbe gur tvira anzrf (nyfb jbexf jvgu -h)
+z,zbqvsvrq cevag bayl nqqrq/qryrgrq/zbqvsvrq svyrf (vzcyvrf -c)
+f,fgnghf   cevag rnpu svyranzr jvgu n fgnghf pune (N/Z/Q) (vzcyvrf -c)
+U,unfu     cevag gur unfu sbe rnpu bowrpg arkg gb vgf anzr (vzcyvrf -c)
+y,ybat     cevag zber vasbezngvba nobhg rnpu svyr
+h,hcqngr   (erphefviryl) hcqngr gur vaqrk ragevrf sbe gur tvira svyranzrf
+k,kqri,bar-svyr-flfgrz  qba'g pebff svyrflfgrz obhaqnevrf
+snxr-inyvq znex nyy vaqrk ragevrf nf hc-gb-qngr rira vs gurl nera'g
+snxr-vainyvq znex nyy vaqrk ragevrf nf vainyvq
+purpx      pnershyyl purpx vaqrk svyr vagrtevgl
+s,vaqrksvyr=  gur anzr bs gur vaqrk svyr (qrsnhyg 'vaqrk')
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
 """
-o = options.Options('bup index', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if not (opt.modified or opt['print'] or opt.status or opt.update or opt.check):
-    o.fatal('supply one or more of -p, -s, -m, -u, or --check')
-if (opt.fake_valid or opt.fake_invalid) and not opt.update:
-    o.fatal('--fake-{in,}valid are meaningless without -u')
-if opt.fake_valid and opt.fake_invalid:
-    o.fatal('--fake-valid is incompatible with --fake-invalid')
-
-git.check_repo_or_die()
-indexfile = opt.indexfile or git.repo('bupindex')
-
-handle_ctrl_c()
-
-if opt.check:
-    log('check: starting initial check.\n')
-    check_index(index.Reader(indexfile))
-
-paths = index.reduce_paths(extra)
-
-if opt.update:
-    if not paths:
-        o.fatal('update (-u) requested but no paths given')
-    for (rp,path) in paths:
-        update_index(rp)
-
-if opt['print'] or opt.status or opt.modified:
-    for (name, ent) in index.Reader(indexfile).filter(extra or ['']):
-        if (opt.modified 
-            and (ent.is_valid() or ent.is_deleted() or not ent.mode)):
-            continue
-        line = ''
-        if opt.status:
-            if ent.is_deleted():
-                line += 'D '
-            elif not ent.is_valid():
-                if ent.sha == index.EMPTY_SHA:
-                    line += 'A '
-                else:
-                    line += 'M '
-            else:
-                line += '  '
-        if opt.hash:
-            line += ent.sha.encode('hex') + ' '
-        if opt.long:
-            line += "%7s %7s " % (oct(ent.mode), oct(ent.gitmode))
-        print line + (name or './')
-
-if opt.check and (opt['print'] or opt.status or opt.modified or opt.update):
-    log('check: starting final check.\n')
-    check_index(index.Reader(indexfile))
-
-if saved_errors:
-    log('WARNING: %d errors encountered.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, os, struct
-from bup import options, helpers
-
-optspec = """
-bup rbackup-server
+b = bcgvbaf.Bcgvbaf('ohc vaqrk', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs abg (bcg.zbqvsvrq be bcg['cevag'] be bcg.fgnghf be bcg.hcqngr be bcg.purpx):
+    b.sngny('fhccyl bar be zber bs -c, -f, -z, -h, be --purpx')
+vs (bcg.snxr_inyvq be bcg.snxr_vainyvq) naq abg bcg.hcqngr:
+    b.sngny('--snxr-{va,}inyvq ner zrnavatyrff jvgubhg -h')
+vs bcg.snxr_inyvq naq bcg.snxr_vainyvq:
+    b.sngny('--snxr-inyvq vf vapbzcngvoyr jvgu --snxr-vainyvq')
+
+tvg.purpx_ercb_be_qvr()
+vaqrksvyr = bcg.vaqrksvyr be tvg.ercb('ohcvaqrk')
+
+unaqyr_pgey_p()
+
+vs bcg.purpx:
+    ybt('purpx: fgnegvat vavgvny purpx.\a')
+    purpx_vaqrk(vaqrk.Ernqre(vaqrksvyr))
+
+cnguf = vaqrk.erqhpr_cnguf(rkgen)
+
+vs bcg.hcqngr:
+    vs abg cnguf:
+        b.sngny('hcqngr (-h) erdhrfgrq ohg ab cnguf tvira')
+    sbe (ec,cngu) va cnguf:
+        hcqngr_vaqrk(ec)
+
+vs bcg['cevag'] be bcg.fgnghf be bcg.zbqvsvrq:
+    sbe (anzr, rag) va vaqrk.Ernqre(vaqrksvyr).svygre(rkgen be ['']):
+        vs (bcg.zbqvsvrq 
+            naq (rag.vf_inyvq() be rag.vf_qryrgrq() be abg rag.zbqr)):
+            pbagvahr
+        yvar = ''
+        vs bcg.fgnghf:
+            vs rag.vf_qryrgrq():
+                yvar += 'Q '
+            ryvs abg rag.vf_inyvq():
+                vs rag.fun == vaqrk.RZCGL_FUN:
+                    yvar += 'N '
+                ryfr:
+                    yvar += 'Z '
+            ryfr:
+                yvar += '  '
+        vs bcg.unfu:
+            yvar += rag.fun.rapbqr('urk') + ' '
+        vs bcg.ybat:
+            yvar += "%7f %7f " % (bpg(rag.zbqr), bpg(rag.tvgzbqr))
+        cevag yvar + (anzr be './')
+
+vs bcg.purpx naq (bcg['cevag'] be bcg.fgnghf be bcg.zbqvsvrq be bcg.hcqngr):
+    ybt('purpx: fgnegvat svany purpx.\a')
+    purpx_vaqrk(vaqrk.Ernqre(vaqrksvyr))
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgehpg
+sebz ohc vzcbeg bcgvbaf, urycref
+
+bcgfcrp = """
+ohc eonpxhc-freire
 --
-    This command is not intended to be run manually.
+    Guvf pbzznaq vf abg vagraqrq gb or eha znahnyyl.
 """
-o = options.Options('bup rbackup-server', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-if extra:
-    o.fatal('no arguments expected')
-
-# get the subcommand's argv.
-# Normally we could just pass this on the command line, but since we'll often
-# be getting called on the other end of an ssh pipe, which tends to mangle
-# argv (by sending it via the shell), this way is much safer.
-buf = sys.stdin.read(4)
-sz = struct.unpack('!I', buf)[0]
-assert(sz > 0)
-assert(sz < 1000000)
-buf = sys.stdin.read(sz)
-assert(len(buf) == sz)
-argv = buf.split('\0')
-
-# stdin/stdout are supposedly connected to 'bup server' that the caller
-# started for us (often on the other end of an ssh tunnel), so we don't want
-# to misuse them.  Move them out of the way, then replace stdout with
-# a pointer to stderr in case our subcommand wants to do something with it.
+b = bcgvbaf.Bcgvbaf('ohc eonpxhc-freire', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+# trg gur fhopbzznaq'f neti.
+# Abeznyyl jr pbhyq whfg cnff guvf ba gur pbzznaq yvar, ohg fvapr jr'yy bsgra
+# or trggvat pnyyrq ba gur bgure raq bs na ffu cvcr, juvpu graqf gb znatyr
+# neti (ol fraqvat vg ivn gur furyy), guvf jnl vf zhpu fnsre.
+ohs = flf.fgqva.ernq(4)
+fm = fgehpg.hacnpx('!V', ohs)[0]
+nffreg(fm > 0)
+nffreg(fm < 1000000)
+ohs = flf.fgqva.ernq(fm)
+nffreg(yra(ohs) == fm)
+neti = ohs.fcyvg('\0')
+
+# fgqva/fgqbhg ner fhccbfrqyl pbaarpgrq gb 'ohc freire' gung gur pnyyre
+# fgnegrq sbe hf (bsgra ba gur bgure raq bs na ffu ghaary), fb jr qba'g jnag
+# gb zvfhfr gurz.  Zbir gurz bhg bs gur jnl, gura ercynpr fgqbhg jvgu
+# n cbvagre gb fgqree va pnfr bhe fhopbzznaq jnagf gb qb fbzrguvat jvgu vg.
 #
-# It might be nice to do the same with stdin, but my experiments showed that
-# ssh seems to make its child's stderr a readable-but-never-reads-anything
-# socket.  They really should have used shutdown(SHUT_WR) on the other end
-# of it, but probably didn't.  Anyway, it's too messy, so let's just make sure
-# anyone reading from stdin is disappointed.
+# Vg zvtug or avpr gb qb gur fnzr jvgu fgqva, ohg zl rkcrevzragf fubjrq gung
+# ffu frrzf gb znxr vgf puvyq'f fgqree n ernqnoyr-ohg-arire-ernqf-nalguvat
+# fbpxrg.  Gurl ernyyl fubhyq unir hfrq fuhgqbja(FUHG_JE) ba gur bgure raq
+# bs vg, ohg cebonoyl qvqa'g.  Naljnl, vg'f gbb zrffl, fb yrg'f whfg znxr fher
+# nalbar ernqvat sebz fgqva vf qvfnccbvagrq.
 #
-# (You can't just leave stdin/stdout "not open" by closing the file
-# descriptors.  Then the next file that opens is automatically assigned 0 or 1,
-# and people *trying* to read/write stdin/stdout get screwed.)
-os.dup2(0, 3)
-os.dup2(1, 4)
-os.dup2(2, 1)
-in approximately the same placeRDONLY)
-and distrib-0)
-ution as(fd)
-
-in the original test filesERSE'] = helpers.hostname()
-os.execvp(argv[0], argv)
-sys.exit(99)
-#!/usr/bin/env python
-import sys, os, glob, subprocess, time
-from bup import options, git
-from bup.helpers import *
-
-par2_ok = 0
-nullf = open('/dev/null')
-
-def debug(s):
-    if opt.verbose:
-        log(s)
-
-def run(argv):
-    # at least in python 2.5, using "stdout=2" or "stdout=sys.stderr" below
-    # doesn't actually work, because subprocess closes fd #2 right before
-    # execing for some reason.  So we work around it by duplicating the fd
-    # first.
-    fd = os.dup(2)  # copy stderr
-    try:
-        p = subprocess.Popen(argv, stdout=fd, close_fds=False)
-        return p.wait()
-    finally:
-        os.close(fd)
-
-def par2_setup():
-    global par2_ok
-    rv = 1
-    try:
-        p = subprocess.Popen(['par2', '--help'],
-                             stdout=nullf, stderr=nullf, stdin=nullf)
-        rv = p.wait()
-    except OSError:
-        log('fsck: warning: par2 not found; disabling recovery features.\n')
-    else:
-        par2_ok = 1
-
-def parv(lvl):
-    if opt.verbose >= lvl:
-        if istty:
-            return []
-        else:
-            return ['-q']
-    else:
-        return ['-qq']
-
-def par2_generate(base):
-    return run(['par2', 'create', '-n1', '-c200'] + parv(2)
-               + ['--', base, base+'.pack', base+'.idx'])
-
-def par2_verify(base):
-    return run(['par2', 'verify'] + parv(3) + ['--', base])
-
-def par2_repair(base):
-    return run(['par2', 'repair'] + parv(2) + ['--', base])
-
-def quick_verify(base):
-    f = open(base + '.pack', 'rb')
-    f.seek(-20, 2)
-    wantsum = f.read(20)
-    assert(len(wantsum) == 20)
-    f.seek(0)
-    sum = Sha1()
-    for b in chunkyreader(f, os.fstat(f.fileno()).st_size - 20):
-        sum.update(b)
-    if sum.digest() != wantsum:
-        raise ValueError('expected %r, got %r' % (wantsum.encode('hex'),
-                                                  sum.hexdigest()))
+# (Lbh pna'g whfg yrnir fgqva/fgqbhg "abg bcra" ol pybfvat gur svyr
+# qrfpevcgbef.  Gura gur arkg svyr gung bcraf vf nhgbzngvpnyyl nffvtarq 0 be 1,
+# naq crbcyr *gelvat* gb ernq/jevgr fgqva/fgqbhg trg fperjrq.)
+bf.qhc2(0, 3)
+bf.qhc2(1, 4)
+bf.qhc2(2, 1)
+va nccebkvzngryl gur fnzr cynprEQBAYL)
+naq qvfgevo-0)
+hgvba nf(sq)
+
+va gur bevtvany grfg svyrfREFR'] = urycref.ubfganzr()
+bf.rkrpic(neti[0], neti)
+flf.rkvg(99)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, tybo, fhocebprff, gvzr
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+cne2_bx = 0
+ahyys = bcra('/qri/ahyy')
+
+qrs qroht(f):
+    vs bcg.ireobfr:
+        ybt(f)
+
+qrs eha(neti):
+    # ng yrnfg va clguba 2.5, hfvat "fgqbhg=2" be "fgqbhg=flf.fgqree" orybj
+    # qbrfa'g npghnyyl jbex, orpnhfr fhocebprff pybfrf sq #2 evtug orsber
+    # rkrpvat sbe fbzr ernfba.  Fb jr jbex nebhaq vg ol qhcyvpngvat gur sq
+    # svefg.
+    sq = bf.qhc(2)  # pbcl fgqree
+    gel:
+        c = fhocebprff.Cbcra(neti, fgqbhg=sq, pybfr_sqf=Snyfr)
+        erghea c.jnvg()
+    svanyyl:
+        bf.pybfr(sq)
+
+qrs cne2_frghc():
+    tybony cne2_bx
+    ei = 1
+    gel:
+        c = fhocebprff.Cbcra(['cne2', '--uryc'],
+                             fgqbhg=ahyys, fgqree=ahyys, fgqva=ahyys)
+        ei = c.jnvg()
+    rkprcg BFReebe:
+        ybt('sfpx: jneavat: cne2 abg sbhaq; qvfnoyvat erpbirel srngherf.\a')
+    ryfr:
+        cne2_bx = 1
+
+qrs cnei(yiy):
+    vs bcg.ireobfr >= yiy:
+        vs vfggl:
+            erghea []
+        ryfr:
+            erghea ['-d']
+    ryfr:
+        erghea ['-dd']
+
+qrs cne2_trarengr(onfr):
+    erghea eha(['cne2', 'perngr', '-a1', '-p200'] + cnei(2)
+               + ['--', onfr, onfr+'.cnpx', onfr+'.vqk'])
+
+qrs cne2_irevsl(onfr):
+    erghea eha(['cne2', 'irevsl'] + cnei(3) + ['--', onfr])
+
+qrs cne2_ercnve(onfr):
+    erghea eha(['cne2', 'ercnve'] + cnei(2) + ['--', onfr])
+
+qrs dhvpx_irevsl(onfr):
+    s = bcra(onfr + '.cnpx', 'eo')
+    s.frrx(-20, 2)
+    jnagfhz = s.ernq(20)
+    nffreg(yra(jnagfhz) == 20)
+    s.frrx(0)
+    fhz = Fun1()
+    sbe o va puhaxlernqre(s, bf.sfgng(s.svyrab()).fg_fvmr - 20):
+        fhz.hcqngr(o)
+    vs fhz.qvtrfg() != jnagfhz:
+        envfr InyhrReebe('rkcrpgrq %e, tbg %e' % (jnagfhz.rapbqr('urk'),
+                                                  fhz.urkqvtrfg()))
         
 
-def git_verify(base):
-    if opt.quick:
-        try:
-            quick_verify(base)
-        except Exception, e:
-            debug('error: %s\n' % e)
-            return 1
-        return 0
-    else:
-        return run(['git', 'verify-pack', '--', base])
+qrs tvg_irevsl(onfr):
+    vs bcg.dhvpx:
+        gel:
+            dhvpx_irevsl(onfr)
+        rkprcg Rkprcgvba, r:
+            qroht('reebe: %f\a' % r)
+            erghea 1
+        erghea 0
+    ryfr:
+        erghea eha(['tvg', 'irevsl-cnpx', '--', onfr])
     
     
-def do_pack(base, last):
-    code = 0
-    if par2_ok and par2_exists and (opt.repair or not opt.generate):
-        vresult = par2_verify(base)
-        if vresult != 0:
-            if opt.repair:
-                rresult = par2_repair(base)
-                if rresult != 0:
-                    print '%s par2 repair: failed (%d)' % (last, rresult)
-                    code = rresult
-                else:
-                    print '%s par2 repair: succeeded (0)' % last
-                    code = 100
-            else:
-                print '%s par2 verify: failed (%d)' % (last, vresult)
-                code = vresult
-        else:
-            print '%s ok' % last
-    elif not opt.generate or (par2_ok and not par2_exists):
-        gresult = git_verify(base)
-        if gresult != 0:
-            print '%s git verify: failed (%d)' % (last, gresult)
-            code = gresult
-        else:
-            if par2_ok and opt.generate:
-                presult = par2_generate(base)
-                if presult != 0:
-                    print '%s par2 create: failed (%d)' % (last, presult)
-                    code = presult
-                else:
-                    print '%s ok' % last
-            else:
-                print '%s ok' % last
-    else:
-        assert(opt.generate and (not par2_ok or par2_exists))
-        debug('    skipped: par2 file already generated.\n')
-    return code
-
-
-optspec = """
-bup fsck [options...] [filenames...]
+qrs qb_cnpx(onfr, ynfg):
+    pbqr = 0
+    vs cne2_bx naq cne2_rkvfgf naq (bcg.ercnve be abg bcg.trarengr):
+        ierfhyg = cne2_irevsl(onfr)
+        vs ierfhyg != 0:
+            vs bcg.ercnve:
+                eerfhyg = cne2_ercnve(onfr)
+                vs eerfhyg != 0:
+                    cevag '%f cne2 ercnve: snvyrq (%q)' % (ynfg, eerfhyg)
+                    pbqr = eerfhyg
+                ryfr:
+                    cevag '%f cne2 ercnve: fhpprrqrq (0)' % ynfg
+                    pbqr = 100
+            ryfr:
+                cevag '%f cne2 irevsl: snvyrq (%q)' % (ynfg, ierfhyg)
+                pbqr = ierfhyg
+        ryfr:
+            cevag '%f bx' % ynfg
+    ryvs abg bcg.trarengr be (cne2_bx naq abg cne2_rkvfgf):
+        terfhyg = tvg_irevsl(onfr)
+        vs terfhyg != 0:
+            cevag '%f tvg irevsl: snvyrq (%q)' % (ynfg, terfhyg)
+            pbqr = terfhyg
+        ryfr:
+            vs cne2_bx naq bcg.trarengr:
+                cerfhyg = cne2_trarengr(onfr)
+                vs cerfhyg != 0:
+                    cevag '%f cne2 perngr: snvyrq (%q)' % (ynfg, cerfhyg)
+                    pbqr = cerfhyg
+                ryfr:
+                    cevag '%f bx' % ynfg
+            ryfr:
+                cevag '%f bx' % ynfg
+    ryfr:
+        nffreg(bcg.trarengr naq (abg cne2_bx be cne2_rkvfgf))
+        qroht('    fxvccrq: cne2 svyr nyernql trarengrq.\a')
+    erghea pbqr
+
+
+bcgfcrp = """
+ohc sfpx [bcgvbaf...] [svyranzrf...]
 --
-r,repair    attempt to repair errors using par2 (dangerous!)
-g,generate  generate auto-repair information using par2
-v,verbose   increase verbosity (can be used more than once)
-quick       just check pack sha1sum, don't use git verify-pack
-j,jobs=     run 'n' jobs in parallel
-par2-ok     immediately return 0 if par2 is ok, 1 if not
-disable-par2  ignore par2 even if it is available
+e,ercnve    nggrzcg gb ercnve reebef hfvat cne2 (qnatrebhf!)
+t,trarengr  trarengr nhgb-ercnve vasbezngvba hfvat cne2
+i,ireobfr   vapernfr ireobfvgl (pna or hfrq zber guna bapr)
+dhvpx       whfg purpx cnpx fun1fhz, qba'g hfr tvg irevsl-cnpx
+w,wbof=     eha 'a' wbof va cnenyyry
+cne2-bx     vzzrqvngryl erghea 0 vs cne2 vf bx, 1 vs abg
+qvfnoyr-cne2  vtaber cne2 rira vs vg vf ninvynoyr
 """
-o = options.Options('bup fsck', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-par2_setup()
-if opt.par2_ok:
-    if par2_ok:
-        sys.exit(0)  # 'true' in sh
-    else:
-        sys.exit(1)
-if opt.disable_par2:
-    par2_ok = 0
-
-git.check_repo_or_die()
-
-if not extra:
-    debug('fsck: No filenames given: checking all packs.\n')
-    extra = glob.glob(git.repo('objects/pack/*.pack'))
-
-code = 0
-count = 0
-outstanding = {}
-for name in extra:
-    if name.endswith('.pack'):
-        base = name[:-5]
-    elif name.endswith('.idx'):
-        base = name[:-4]
-    elif name.endswith('.par2'):
-        base = name[:-5]
-    elif os.path.exists(name + '.pack'):
-        base = name
-    else:
-        raise Exception('%s is not a pack file!' % name)
-    (dir,last) = os.path.split(base)
-    par2_exists = os.path.exists(base + '.par2')
-    if par2_exists and os.stat(base + '.par2').st_size == 0:
-        par2_exists = 0
-    sys.stdout.flush()
-    debug('fsck: checking %s (%s)\n
-          % (last, par2_ok and par2_exists and 'par2' or 'git'))
-    if not opt.verbose:
-        progress('fsck (%d/%d)\r' % (count, len(extra)))
+b = bcgvbaf.Bcgvbaf('ohc sfpx', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+cne2_frghc()
+vs bcg.cne2_bx:
+    vs cne2_bx:
+        flf.rkvg(0)  # 'gehr' va fu
+    ryfr:
+        flf.rkvg(1)
+vs bcg.qvfnoyr_cne2:
+    cne2_bx = 0
+
+tvg.purpx_ercb_be_qvr()
+
+vs abg rkgen:
+    qroht('sfpx: Ab svyranzrf tvira: purpxvat nyy cnpxf.\a')
+    rkgen = tybo.tybo(tvg.ercb('bowrpgf/cnpx/*.cnpx'))
+
+pbqr = 0
+pbhag = 0
+bhgfgnaqvat = {}
+sbe anzr va rkgen:
+    vs anzr.raqfjvgu('.cnpx'):
+        onfr = anzr[:-5]
+    ryvs anzr.raqfjvgu('.vqk'):
+        onfr = anzr[:-4]
+    ryvs anzr.raqfjvgu('.cne2'):
+        onfr = anzr[:-5]
+    ryvs bf.cngu.rkvfgf(anzr + '.cnpx'):
+        onfr = anzr
+    ryfr:
+        envfr Rkprcgvba('%f vf abg n cnpx svyr!' % anzr)
+    (qve,ynfg) = bf.cngu.fcyvg(onfr)
+    cne2_rkvfgf = bf.cngu.rkvfgf(onfr + '.cne2')
+    vs cne2_rkvfgf naq bf.fgng(onfr + '.cne2').fg_fvmr == 0:
+        cne2_rkvfgf = 0
+    flf.fgqbhg.syhfu()
+    qroht('sfpx: purpxvat %f (%f)\a
+          % (ynfg, cne2_bx naq cne2_rkvfgf naq 'cne2' be 'tvg'))
+    vs abg bcg.ireobfr:
+        cebterff('sfpx (%q/%q)\e' % (pbhag, yra(rkgen)))
     
-    if not opt.jobs:
-        nc = do_pack(base, last)
-        code = code or nc
-        count += 1
-    else:
-        while len(outstanding) >= opt.jobs:
-            (pid,nc) = os.wait()
-            nc >>= 8
-            if pid in outstanding:
-                del outstanding[pid]
-                code = code or nc
-                count += 1
-        pid = os.fork()
-        if pid:  # parent
-            outstanding[pid] = 1
-        else: # child
-            try:
-                sys.exit(do_pack(base, last))
-            except Exception, e:
-                log('exception: %r\n' % e)
-                sys.exit(99)
+    vs abg bcg.wbof:
+        ap = qb_cnpx(onfr, ynfg)
+        pbqr = pbqr be ap
+        pbhag += 1
+    ryfr:
+        juvyr yra(bhgfgnaqvat) >= bcg.wbof:
+            (cvq,ap) = bf.jnvg()
+            ap >>= 8
+            vs cvq va bhgfgnaqvat:
+                qry bhgfgnaqvat[cvq]
+                pbqr = pbqr be ap
+                pbhag += 1
+        cvq = bf.sbex()
+        vs cvq:  # cnerag
+            bhgfgnaqvat[cvq] = 1
+        ryfr: # puvyq
+            gel:
+                flf.rkvg(qb_cnpx(onfr, ynfg))
+            rkprcg Rkprcgvba, r:
+                ybt('rkprcgvba: %e\a' % r)
+                flf.rkvg(99)
                 
-while len(outstanding):
-    (pid,nc) = os.wait()
-    nc >>= 8
-    if pid in outstanding:
-        del outstanding[pid]
-        code = code or nc
-        count += 1
-    if not opt.verbose:
-        progress('fsck (%d/%d)\r' % (count, len(extra)))
-
-if not opt.verbose and istty:
-    log('fsck done.           \n')
-sys.exit(code)
-#!/usr/bin/env python
-import sys, os, struct, getopt, subprocess, signal
-from bup import options, ssh
-from bup.helpers import *
-
-optspec = """
-bup rbackup <hostname> index ...
-bup rbackup <hostname> save ...
-bup rbackup <hostname> split ...
+juvyr yra(bhgfgnaqvat):
+    (cvq,ap) = bf.jnvg()
+    ap >>= 8
+    vs cvq va bhgfgnaqvat:
+        qry bhgfgnaqvat[cvq]
+        pbqr = pbqr be ap
+        pbhag += 1
+    vs abg bcg.ireobfr:
+        cebterff('sfpx (%q/%q)\e' % (pbhag, yra(rkgen)))
+
+vs abg bcg.ireobfr naq vfggl:
+    ybt('sfpx qbar.           \a')
+flf.rkvg(pbqr)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgehpg, trgbcg, fhocebprff, fvtany
+sebz ohc vzcbeg bcgvbaf, ffu
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+ohc eonpxhc <ubfganzr> vaqrk ...
+ohc eonpxhc <ubfganzr> fnir ...
+ohc eonpxhc <ubfganzr> fcyvg ...
 """
-o = options.Options('bup rbackup', optspec, optfunc=getopt.getopt)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-if len(extra) < 2:
-    o.fatal('arguments expected')
-
-class SigException(Exception):
-    def __init__(self, signum):
-        self.signum = signum
-        Exception.__init__(self, 'signal %d received' % signum)
-def handler(signum, frame):
-    raise SigException(signum)
-
-signal.signal(signal.SIGTERM, handler)
-signal.signal(signal.SIGINT, handler)
-
-sp = None
-p = None
-ret = 99
-
-try:
-    hostname = extra[0]
-    argv = extra[1:]
-    p = ssh.connect(hostname, 'rbackup-server')
-
-    argvs = '\0'.join(['bup'] + argv)
-    p.stdin.write(struct.pack('!I', len(argvs)) + argvs)
-    p.stdin.flush()
-
-    main_exe = os.environ.get('BUP_MAIN_EXE') or sys.argv[0]
-    sp = subprocess.Popen([main_exe, 'server'], stdin=p.stdout, stdout=p.stdin)
-
-    p.stdin.close()
-    p.stdout.close()
-
-finally:
-    while 1:
-        # if we get a signal while waiting, we have to keep waiting, just
-        # in case our child doesn't die.
-        try:
-            ret = p.wait()
-            sp.wait()
-            break
-        except SigException, e:
-            log('\nbup rbackup: %s\n' % e)
-            os.kill(p.pid, e.signum)
-            ret = 84
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, os, re
-from bup import options
-
-optspec = """
-bup newliner
+b = bcgvbaf.Bcgvbaf('ohc eonpxhc', bcgfcrp, bcgshap=trgbcg.trgbcg)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+vs yra(rkgen) < 2:
+    b.sngny('nethzragf rkcrpgrq')
+
+pynff FvtRkprcgvba(Rkprcgvba):
+    qrs __vavg__(frys, fvtahz):
+        frys.fvtahz = fvtahz
+        Rkprcgvba.__vavg__(frys, 'fvtany %q erprvirq' % fvtahz)
+qrs unaqyre(fvtahz, senzr):
+    envfr FvtRkprcgvba(fvtahz)
+
+fvtany.fvtany(fvtany.FVTGREZ, unaqyre)
+fvtany.fvtany(fvtany.FVTVAG, unaqyre)
+
+fc = Abar
+c = Abar
+erg = 99
+
+gel:
+    ubfganzr = rkgen[0]
+    neti = rkgen[1:]
+    c = ffu.pbaarpg(ubfganzr, 'eonpxhc-freire')
+
+    netif = '\0'.wbva(['ohc'] + neti)
+    c.fgqva.jevgr(fgehpg.cnpx('!V', yra(netif)) + netif)
+    c.fgqva.syhfu()
+
+    znva_rkr = bf.raiveba.trg('OHC_ZNVA_RKR') be flf.neti[0]
+    fc = fhocebprff.Cbcra([znva_rkr, 'freire'], fgqva=c.fgqbhg, fgqbhg=c.fgqva)
+
+    c.fgqva.pybfr()
+    c.fgqbhg.pybfr()
+
+svanyyl:
+    juvyr 1:
+        # vs jr trg n fvtany juvyr jnvgvat, jr unir gb xrrc jnvgvat, whfg
+        # va pnfr bhe puvyq qbrfa'g qvr.
+        gel:
+            erg = c.jnvg()
+            fc.jnvg()
+            oernx
+        rkprcg FvtRkprcgvba, r:
+            ybt('\aohc eonpxhc: %f\a' % r)
+            bf.xvyy(c.cvq, r.fvtahz)
+            erg = 84
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, er
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc arjyvare
 """
-o = options.Options('bup newliner', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-r = re.compile(r'([\r\n])')
-lastlen = 0
-all = ''
-while 1:
-    l = r.split(all, 1)
-    if len(l) <= 1:
-        try:
-            b = os.read(sys.stdin.fileno(), 4096)
-        except KeyboardInterrupt:
-            break
-        if not b:
-            break
-        all += b
-    else:
-        assert(len(l) == 3)
-        (line, splitchar, all) = l
-        #splitchar = '\n'
-        sys.stdout.write('%-*s%s' % (lastlen, line, splitchar))
-        if splitchar == '\r':
-            lastlen = len(line)
-        else:
-            lastlen = 0
-        sys.stdout.flush()
-
-if lastlen or all:
-    sys.stdout.write('%-*s\n' % (lastlen, all))
-#!/usr/bin/env python
-import sys
-from bup import options, git, _hashsplit
-from bup.helpers import *
-
-
-optspec = """
-bup margin
+b = bcgvbaf.Bcgvbaf('ohc arjyvare', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+e = er.pbzcvyr(e'([\e\a])')
+ynfgyra = 0
+nyy = ''
+juvyr 1:
+    y = e.fcyvg(nyy, 1)
+    vs yra(y) <= 1:
+        gel:
+            o = bf.ernq(flf.fgqva.svyrab(), 4096)
+        rkprcg XrlobneqVagreehcg:
+            oernx
+        vs abg o:
+            oernx
+        nyy += o
+    ryfr:
+        nffreg(yra(y) == 3)
+        (yvar, fcyvgpune, nyy) = y
+        #fcyvgpune = '\a'
+        flf.fgqbhg.jevgr('%-*f%f' % (ynfgyra, yvar, fcyvgpune))
+        vs fcyvgpune == '\e':
+            ynfgyra = yra(yvar)
+        ryfr:
+            ynfgyra = 0
+        flf.fgqbhg.syhfu()
+
+vs ynfgyra be nyy:
+    flf.fgqbhg.jevgr('%-*f\a' % (ynfgyra, nyy))
+#!/hfe/ova/rai clguba
+vzcbeg flf
+sebz ohc vzcbeg bcgvbaf, tvg, _unfufcyvg
+sebz ohc.urycref vzcbeg *
+
+
+bcgfcrp = """
+ohc znetva
 """
-o = options.Options('bup margin', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-git.check_repo_or_die()
-#git.ignore_midx = 1
-
-mi = git.PackIdxList(git.repo('objects/pack'))
-last = '\0'*20
-longmatch = 0
-for i in mi:
-    if i == last:
-        continue
-    #assert(str(i) >= last)
-    pm = _hashsplit.bitmatch(last, i)
-    longmatch = max(longmatch, pm)
-    last = i
-print longmatch
-#!/usr/bin/env python
-from bup import options, drecurse
-from bup.helpers import *
-
-optspec = """
-bup drecurse <path>
+b = bcgvbaf.Bcgvbaf('ohc znetva', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+tvg.purpx_ercb_be_qvr()
+#tvg.vtaber_zvqk = 1
+
+zv = tvg.CnpxVqkYvfg(tvg.ercb('bowrpgf/cnpx'))
+ynfg = '\0'*20
+ybatzngpu = 0
+sbe v va zv:
+    vs v == ynfg:
+        pbagvahr
+    #nffreg(fge(v) >= ynfg)
+    cz = _unfufcyvg.ovgzngpu(ynfg, v)
+    ybatzngpu = znk(ybatzngpu, cz)
+    ynfg = v
+cevag ybatzngpu
+#!/hfe/ova/rai clguba
+sebz ohc vzcbeg bcgvbaf, qerphefr
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+ohc qerphefr <cngu>
 --
-x,xdev,one-file-system   don't cross filesystem boundaries
-q,quiet  don't actually print filenames
-profile  run under the python profiler
+k,kqri,bar-svyr-flfgrz   qba'g pebff svyrflfgrz obhaqnevrf
+d,dhvrg  qba'g npghnyyl cevag svyranzrf
+cebsvyr  eha haqre gur clguba cebsvyre
 """
-o = options.Options('bup drecurse', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one filename expected")
-
-it = drecurse.recursive_dirlist(extra, opt.xdev)
-if opt.profile:
-    import cProfile
-    def do_it():
-        for i in it:
-            pass
-    cProfile.run('do_it()')
-else:
-    if opt.quiet:
-        for i in it:
-            pass
-    else:
-        for (name,st) in it:
-            print name
-
-if saved_errors:
-    log('WARNING: %d errors encountered.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, time, struct
-from bup import hashsplit, git, options, client
-from bup.helpers import *
-from subprocess import PIPE
-
-
-optspec = """
-bup split [-tcb] [-n name] [--bench] [filenames...]
+b = bcgvbaf.Bcgvbaf('ohc qerphefr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar svyranzr rkcrpgrq")
+
+vg = qerphefr.erphefvir_qveyvfg(rkgen, bcg.kqri)
+vs bcg.cebsvyr:
+    vzcbeg pCebsvyr
+    qrs qb_vg():
+        sbe v va vg:
+            cnff
+    pCebsvyr.eha('qb_vg()')
+ryfr:
+    vs bcg.dhvrg:
+        sbe v va vg:
+            cnff
+    ryfr:
+        sbe (anzr,fg) va vg:
+            cevag anzr
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr, fgehpg
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+sebz fhocebprff vzcbeg CVCR
+
+
+bcgfcrp = """
+ohc fcyvg [-gpo] [-a anzr] [--orapu] [svyranzrf...]
 --
-r,remote=  remote repository path
-b,blobs    output a series of blob ids
-t,tree     output a tree id
-c,commit   output a commit id
-n,name=    name of backup set to update (if any)
-N,noop     don't actually save the data anywhere
-q,quiet    don't print progress messages
-v,verbose  increase log output (can be used more than once)
-copy       just copy input to output, hashsplitting along the way
-bench      print benchmark timings to stderr
-max-pack-size=  maximum bytes in a single pack
-max-pack-objects=  maximum number of objects in a single pack
-fanout=  maximum number of blobs in a single tree
+e,erzbgr=  erzbgr ercbfvgbel cngu
+o,oybof    bhgchg n frevrf bs oybo vqf
+g,gerr     bhgchg n gerr vq
+p,pbzzvg   bhgchg n pbzzvg vq
+a,anzr=    anzr bs onpxhc frg gb hcqngr (vs nal)
+A,abbc     qba'g npghnyyl fnir gur qngn naljurer
+d,dhvrg    qba'g cevag cebterff zrffntrf
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
+pbcl       whfg pbcl vachg gb bhgchg, unfufcyvggvat nybat gur jnl
+orapu      cevag orapuznex gvzvatf gb fgqree
+znk-cnpx-fvmr=  znkvzhz olgrf va n fvatyr cnpx
+znk-cnpx-bowrpgf=  znkvzhz ahzore bs bowrpgf va n fvatyr cnpx
+snabhg=  znkvzhz ahzore bs oybof va n fvatyr gerr
 """
-o = options.Options('bup split', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-if not (opt.blobs or opt.tree or opt.commit or opt.name or
-        opt.noop or opt.copy):
-    o.fatal("use one or more of -b, -t, -c, -n, -N, --copy")
-if (opt.noop or opt.copy) and (opt.blobs or opt.tree or 
-                               opt.commit or opt.name):
-    o.fatal('-N is incompatible with -b, -t, -c, -n')
-
-if opt.verbose >= 2:
-    git.verbose = opt.verbose - 1
-    opt.bench = 1
-if opt.max_pack_size:
-    hashsplit.max_pack_size = parse_num(opt.max_pack_size)
-if opt.max_pack_objects:
-    hashsplit.max_pack_objects = parse_num(opt.max_pack_objects)
-if opt.fanout:
-    hashsplit.fanout = parse_num(opt.fanout)
-if opt.blobs:
-    hashsplit.fanout = 0
-
-is_reverse = os.environ.get('BUP_SERVER_REVERSE')
-if is_reverse and opt.remote:
-    o.fatal("don't use -r in reverse mode; it's automatic")
-start_time = time.time()
-
-refname = opt.name and 'refs/heads/%s' % opt.name or None
-if opt.noop or opt.copy:
-    cli = w = oldref = None
-elif opt.remote or is_reverse:
-    cli = client.Client(opt.remote)
-    oldref = refname and cli.read_ref(refname) or None
-    w = cli.new_packwriter()
-else:
-    cli = None
-    oldref = refname and git.read_ref(refname) or None
-    w = git.PackWriter()
-
-files = extra and (open(fn) for fn in extra) or [sys.stdin]
-if w:
-    shalist = hashsplit.split_to_shalist(w, files)
-    tree = w.new_tree(shalist)
-else:
-    last = 0
-    for (blob, bits) in hashsplit.hashsplit_iter(files):
-        hashsplit.total_split += len(blob)
-        if opt.copy:
-            sys.stdout.write(str(blob))
-        megs = hashsplit.total_split/1024/1024
-        if not opt.quiet and last != megs:
-            progress('%d Mbytes read\r' % megs)
-            last = megs
-    progress('%d Mbytes read, done.\n' % megs)
-
-if opt.verbose:
-    log('\n')
-if opt.blobs:
-    for (mode,name,bin) in shalist:
-        print bin.encode('hex')
-if opt.tree:
-    print tree.encode('hex')
-if opt.commit or opt.name:
-    msg = 'bup split\n\nGenerated by command:\n%r' % sys.argv
-    ref = opt.name and ('refs/heads/%s' % opt.name) or None
-    commit = w.new_commit(oldref, tree, msg)
-    if opt.commit:
-        print commit.encode('hex')
-
-if w:
-    w.close()  # must close before we can update the ref
+b = bcgvbaf.Bcgvbaf('ohc fcyvg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+vs abg (bcg.oybof be bcg.gerr be bcg.pbzzvg be bcg.anzr be
+        bcg.abbc be bcg.pbcl):
+    b.sngny("hfr bar be zber bs -o, -g, -p, -a, -A, --pbcl")
+vs (bcg.abbc be bcg.pbcl) naq (bcg.oybof be bcg.gerr be 
+                               bcg.pbzzvg be bcg.anzr):
+    b.sngny('-A vf vapbzcngvoyr jvgu -o, -g, -p, -a')
+
+vs bcg.ireobfr >= 2:
+    tvg.ireobfr = bcg.ireobfr - 1
+    bcg.orapu = 1
+vs bcg.znk_cnpx_fvmr:
+    unfufcyvg.znk_cnpx_fvmr = cnefr_ahz(bcg.znk_cnpx_fvmr)
+vs bcg.znk_cnpx_bowrpgf:
+    unfufcyvg.znk_cnpx_bowrpgf = cnefr_ahz(bcg.znk_cnpx_bowrpgf)
+vs bcg.snabhg:
+    unfufcyvg.snabhg = cnefr_ahz(bcg.snabhg)
+vs bcg.oybof:
+    unfufcyvg.snabhg = 0
+
+vf_erirefr = bf.raiveba.trg('OHC_FREIRE_ERIREFR')
+vs vf_erirefr naq bcg.erzbgr:
+    b.sngny("qba'g hfr -e va erirefr zbqr; vg'f nhgbzngvp")
+fgneg_gvzr = gvzr.gvzr()
+
+ersanzr = bcg.anzr naq 'ersf/urnqf/%f' % bcg.anzr be Abar
+vs bcg.abbc be bcg.pbcl:
+    pyv = j = byqers = Abar
+ryvs bcg.erzbgr be vf_erirefr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    byqers = ersanzr naq pyv.ernq_ers(ersanzr) be Abar
+    j = pyv.arj_cnpxjevgre()
+ryfr:
+    pyv = Abar
+    byqers = ersanzr naq tvg.ernq_ers(ersanzr) be Abar
+    j = tvg.CnpxJevgre()
+
+svyrf = rkgen naq (bcra(sa) sbe sa va rkgen) be [flf.fgqva]
+vs j:
+    funyvfg = unfufcyvg.fcyvg_gb_funyvfg(j, svyrf)
+    gerr = j.arj_gerr(funyvfg)
+ryfr:
+    ynfg = 0
+    sbe (oybo, ovgf) va unfufcyvg.unfufcyvg_vgre(svyrf):
+        unfufcyvg.gbgny_fcyvg += yra(oybo)
+        vs bcg.pbcl:
+            flf.fgqbhg.jevgr(fge(oybo))
+        zrtf = unfufcyvg.gbgny_fcyvg/1024/1024
+        vs abg bcg.dhvrg naq ynfg != zrtf:
+            cebterff('%q Zolgrf ernq\e' % zrtf)
+            ynfg = zrtf
+    cebterff('%q Zolgrf ernq, qbar.\a' % zrtf)
+
+vs bcg.ireobfr:
+    ybt('\a')
+vs bcg.oybof:
+    sbe (zbqr,anzr,ova) va funyvfg:
+        cevag ova.rapbqr('urk')
+vs bcg.gerr:
+    cevag gerr.rapbqr('urk')
+vs bcg.pbzzvg be bcg.anzr:
+    zft = 'ohc fcyvg\a\aTrarengrq ol pbzznaq:\a%e' % flf.neti
+    ers = bcg.anzr naq ('ersf/urnqf/%f' % bcg.anzr) be Abar
+    pbzzvg = j.arj_pbzzvg(byqers, gerr, zft)
+    vs bcg.pbzzvg:
+        cevag pbzzvg.rapbqr('urk')
+
+vs j:
+    j.pybfr()  # zhfg pybfr orsber jr pna hcqngr gur ers
         
-if opt.name:
-    if cli:
-        cli.update_ref(refname, commit, oldref)
-    else:
-        git.update_ref(refname, commit, oldref)
-
-if cli:
-    cli.close()
-
-secs = time.time() - start_time
-size = hashsplit.total_split
-if opt.bench:
-    log('\nbup: %.2fkbytes in %.2f secs = %.2f kbytes/sec\n'
-        % (size/1024., secs, size/1024./secs))
-#!/usr/bin/env python
-import sys, re, struct, mmap
-from bup import git, options
-from bup.helpers import *
-
-
-def s_from_bytes(bytes):
-    clist = [chr(b) for b in bytes]
-    return ''.join(clist)
-
-
-def report(count):
-    fields = ['VmSize', 'VmRSS', 'VmData', 'VmStk']
-    d = {}
-    for line in open('/proc/self/status').readlines():
-        l = re.split(r':\s*', line.strip(), 1)
-        d[l[0]] = l[1]
-    if count >= 0:
-        e1 = count
-        fields = [d[k] for k in fields]
-    else:
-        e1 = ''
-    print ('%9s  ' + ('%10s ' * len(fields))) % tuple([e1] + fields)
-    sys.stdout.flush()
-
-
-optspec = """
-bup memtest [-n elements] [-c cycles]
+vs bcg.anzr:
+    vs pyv:
+        pyv.hcqngr_ers(ersanzr, pbzzvg, byqers)
+    ryfr:
+        tvg.hcqngr_ers(ersanzr, pbzzvg, byqers)
+
+vs pyv:
+    pyv.pybfr()
+
+frpf = gvzr.gvzr() - fgneg_gvzr
+fvmr = unfufcyvg.gbgny_fcyvg
+vs bcg.orapu:
+    ybt('\aohc: %.2sxolgrf va %.2s frpf = %.2s xolgrf/frp\a'
+        % (fvmr/1024., frpf, fvmr/1024./frpf))
+#!/hfe/ova/rai clguba
+vzcbeg flf, er, fgehpg, zznc
+sebz ohc vzcbeg tvg, bcgvbaf
+sebz ohc.urycref vzcbeg *
+
+
+qrs f_sebz_olgrf(olgrf):
+    pyvfg = [pue(o) sbe o va olgrf]
+    erghea ''.wbva(pyvfg)
+
+
+qrs ercbeg(pbhag):
+    svryqf = ['IzFvmr', 'IzEFF', 'IzQngn', 'IzFgx']
+    q = {}
+    sbe yvar va bcra('/cebp/frys/fgnghf').ernqyvarf():
+        y = er.fcyvg(e':\f*', yvar.fgevc(), 1)
+        q[y[0]] = y[1]
+    vs pbhag >= 0:
+        r1 = pbhag
+        svryqf = [q[x] sbe x va svryqf]
+    ryfr:
+        r1 = ''
+    cevag ('%9f  ' + ('%10f ' * yra(svryqf))) % ghcyr([r1] + svryqf)
+    flf.fgqbhg.syhfu()
+
+
+bcgfcrp = """
+ohc zrzgrfg [-a ryrzragf] [-p plpyrf]
 --
-n,number=  number of objects per cycle
-c,cycles=  number of cycles to run
-ignore-midx  ignore .midx files, use only .idx files
+a,ahzore=  ahzore bs bowrpgf cre plpyr
+p,plpyrf=  ahzore bs plpyrf gb eha
+vtaber-zvqk  vtaber .zvqk svyrf, hfr bayl .vqk svyrf
 """
-o = options.Options('bup memtest', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal('no arguments expected')
-
-git.ignore_midx = opt.ignore_midx
-
-git.check_repo_or_die()
-m = git.PackIdxList(git.repo('objects/pack'))
-
-cycles = opt.cycles or 100
-number = opt.number or 10000
-
-report(-1)
-f = open('/dev/urandom')
-a = mmap.mmap(-1, 20)
-report(0)
-for c in xrange(cycles):
-    for n in xrange(number):
-        b = f.read(3)
-        if 0:
-            bytes = list(struct.unpack('!BBB', b)) + [0]*17
-            bytes[2] &= 0xf0
-            bin = struct.pack('!20s', s_from_bytes(bytes))
-        else:
-            a[0:2] = b[0:2]
-            a[2] = chr(ord(b[2]) & 0xf0)
-            bin = str(a[0:20])
-        #print bin.encode('hex')
-        m.exists(bin)
-    report((c+1)*number)
-#!/usr/bin/env python
-import sys, os, stat
-from bup import options, git, vfs
-from bup.helpers import *
-
-def print_node(text, n):
-    prefix = ''
-    if opt.hash:
-        prefix += "%s " % n.hash.encode('hex')
-    if stat.S_ISDIR(n.mode):
-        print '%s%s/' % (prefix, text)
-    elif stat.S_ISLNK(n.mode):
-        print '%s%s@' % (prefix, text)
-    else:
-        print '%s%s' % (prefix, text)
-
-
-optspec = """
-bup ls <dirs...>
+b = bcgvbaf.Bcgvbaf('ohc zrzgrfg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+tvg.vtaber_zvqk = bcg.vtaber_zvqk
+
+tvg.purpx_ercb_be_qvr()
+z = tvg.CnpxVqkYvfg(tvg.ercb('bowrpgf/cnpx'))
+
+plpyrf = bcg.plpyrf be 100
+ahzore = bcg.ahzore be 10000
+
+ercbeg(-1)
+s = bcra('/qri/henaqbz')
+n = zznc.zznc(-1, 20)
+ercbeg(0)
+sbe p va kenatr(plpyrf):
+    sbe a va kenatr(ahzore):
+        o = s.ernq(3)
+        vs 0:
+            olgrf = yvfg(fgehpg.hacnpx('!OOO', o)) + [0]*17
+            olgrf[2] &= 0ks0
+            ova = fgehpg.cnpx('!20f', f_sebz_olgrf(olgrf))
+        ryfr:
+            n[0:2] = o[0:2]
+            n[2] = pue(beq(o[2]) & 0ks0)
+            ova = fge(n[0:20])
+        #cevag ova.rapbqr('urk')
+        z.rkvfgf(ova)
+    ercbeg((p+1)*ahzore)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgng
+sebz ohc vzcbeg bcgvbaf, tvg, isf
+sebz ohc.urycref vzcbeg *
+
+qrs cevag_abqr(grkg, a):
+    cersvk = ''
+    vs bcg.unfu:
+        cersvk += "%f " % a.unfu.rapbqr('urk')
+    vs fgng.F_VFQVE(a.zbqr):
+        cevag '%f%f/' % (cersvk, grkg)
+    ryvs fgng.F_VFYAX(a.zbqr):
+        cevag '%f%f@' % (cersvk, grkg)
+    ryfr:
+        cevag '%f%f' % (cersvk, grkg)
+
+
+bcgfcrp = """
+ohc yf <qvef...>
 --
-s,hash   show hash for each file
+f,unfu   fubj unfu sbe rnpu svyr
 """
-o = options.Options('bup ls', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-top = vfs.RefList(None)
-
-if not extra:
-    extra = ['/']
-
-ret = 0
-for d in extra:
-    try:
-        n = top.lresolve(d)
-        if stat.S_ISDIR(n.mode):
-            for sub in n:
-                print_node(sub.name, sub)
-        else:
-            print_node(d, n)
-    except vfs.NodeError, e:
-        log('error: %s\n' % e)
-        ret = 1
-
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, os, re, stat, readline, fnmatch
-from bup import options, git, shquote, vfs
-from bup.helpers import *
-
-def node_name(text, n):
-    if stat.S_ISDIR(n.mode):
-        return '%s/' % text
-    elif stat.S_ISLNK(n.mode):
-        return '%s@' % text
-    else:
-        return '%s' % text
-
-
-def do_ls(path, n):
-    l = []
-    if stat.S_ISDIR(n.mode):
-        for sub in n:
-            l.append(node_name(sub.name, sub))
-    else:
-        l.append(node_name(path, n))
-    print columnate(l, '')
+b = bcgvbaf.Bcgvbaf('ohc yf', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+gbc = isf.ErsYvfg(Abar)
+
+vs abg rkgen:
+    rkgen = ['/']
+
+erg = 0
+sbe q va rkgen:
+    gel:
+        a = gbc.yerfbyir(q)
+        vs fgng.F_VFQVE(a.zbqr):
+            sbe fho va a:
+                cevag_abqr(fho.anzr, fho)
+        ryfr:
+            cevag_abqr(q, a)
+    rkprcg isf.AbqrReebe, r:
+        ybt('reebe: %f\a' % r)
+        erg = 1
+
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, er, fgng, ernqyvar, sazngpu
+sebz ohc vzcbeg bcgvbaf, tvg, fudhbgr, isf
+sebz ohc.urycref vzcbeg *
+
+qrs abqr_anzr(grkg, a):
+    vs fgng.F_VFQVE(a.zbqr):
+        erghea '%f/' % grkg
+    ryvs fgng.F_VFYAX(a.zbqr):
+        erghea '%f@' % grkg
+    ryfr:
+        erghea '%f' % grkg
+
+
+qrs qb_yf(cngu, a):
+    y = []
+    vs fgng.F_VFQVE(a.zbqr):
+        sbe fho va a:
+            y.nccraq(abqr_anzr(fho.anzr, fho))
+    ryfr:
+        y.nccraq(abqr_anzr(cngu, a))
+    cevag pbyhzangr(y, '')
     
 
-def write_to_file(inf, outf):
-    for blob in chunkyreader(inf):
-        outf.write(blob)
+qrs jevgr_gb_svyr(vas, bhgs):
+    sbe oybo va puhaxlernqre(vas):
+        bhgs.jevgr(oybo)
     
 
-def inputiter():
-    if os.isatty(sys.stdin.fileno()):
-        while 1:
-            try:
-                yield raw_input('bup> ')
-            except EOFError:
-                break
-    else:
-        for line in sys.stdin:
-            yield line
-
-
-def _completer_get_subs(line):
-    (qtype, lastword) = shquote.unfinished_word(line)
-    (dir,name) = os.path.split(lastword)
-    #log('\ncompleter: %r %r %r\n' % (qtype, lastword, text))
-    n = pwd.resolve(dir)
-    subs = list(filter(lambda x: x.name.startswith(name),
-                       n.subs()))
-    return (dir, name, qtype, lastword, subs)
-
-
-_last_line = None
-_last_res = None
-def completer(text, state):
-    global _last_line
-    global _last_res
-    try:
-        line = readline.get_line_buffer()[:readline.get_endidx()]
-        if _last_line != line:
-            _last_res = _completer_get_subs(line)
-            _last_line = line
-        (dir, name, qtype, lastword, subs) = _last_res
-        if state < len(subs):
-            sn = subs[state]
-            sn1 = sn.resolve('')  # deref symlinks
-            fullname = os.path.join(dir, sn.name)
-            if stat.S_ISDIR(sn1.mode):
-                ret = shquote.what_to_add(qtype, lastword, fullname+'/',
-                                          terminate=False)
-            else:
-                ret = shquote.what_to_add(qtype, lastword, fullname,
-                                          terminate=True) + ' '
-            return text + ret
-    except Exception, e:
-        log('\nerror in completion: %s\n' % e)
+qrs vachgvgre():
+    vs bf.vfnggl(flf.fgqva.svyrab()):
+        juvyr 1:
+            gel:
+                lvryq enj_vachg('ohc> ')
+            rkprcg RBSReebe:
+                oernx
+    ryfr:
+        sbe yvar va flf.fgqva:
+            lvryq yvar
+
+
+qrs _pbzcyrgre_trg_fhof(yvar):
+    (dglcr, ynfgjbeq) = fudhbgr.hasvavfurq_jbeq(yvar)
+    (qve,anzr) = bf.cngu.fcyvg(ynfgjbeq)
+    #ybt('\apbzcyrgre: %e %e %e\a' % (dglcr, ynfgjbeq, grkg))
+    a = cjq.erfbyir(qve)
+    fhof = yvfg(svygre(ynzoqn k: k.anzr.fgnegfjvgu(anzr),
+                       a.fhof()))
+    erghea (qve, anzr, dglcr, ynfgjbeq, fhof)
+
+
+_ynfg_yvar = Abar
+_ynfg_erf = Abar
+qrs pbzcyrgre(grkg, fgngr):
+    tybony _ynfg_yvar
+    tybony _ynfg_erf
+    gel:
+        yvar = ernqyvar.trg_yvar_ohssre()[:ernqyvar.trg_raqvqk()]
+        vs _ynfg_yvar != yvar:
+            _ynfg_erf = _pbzcyrgre_trg_fhof(yvar)
+            _ynfg_yvar = yvar
+        (qve, anzr, dglcr, ynfgjbeq, fhof) = _ynfg_erf
+        vs fgngr < yra(fhof):
+            fa = fhof[fgngr]
+            fa1 = fa.erfbyir('')  # qrers flzyvaxf
+            shyyanzr = bf.cngu.wbva(qve, fa.anzr)
+            vs fgng.F_VFQVE(fa1.zbqr):
+                erg = fudhbgr.jung_gb_nqq(dglcr, ynfgjbeq, shyyanzr+'/',
+                                          grezvangr=Snyfr)
+            ryfr:
+                erg = fudhbgr.jung_gb_nqq(dglcr, ynfgjbeq, shyyanzr,
+                                          grezvangr=Gehr) + ' '
+            erghea grkg + erg
+    rkprcg Rkprcgvba, r:
+        ybt('\areebe va pbzcyrgvba: %f\a' % r)
 
             
-optspec = """
-bup ftp
+bcgfcrp = """
+ohc sgc
 """
-o = options.Options('bup ftp', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-
-top = vfs.RefList(None)
-pwd = top
-
-if extra:
-    lines = extra
-else:
-    readline.set_completer_delims(' \t\n\r/')
-    readline.set_completer(completer)
-    readline.parse_and_bind("tab: complete")
-    lines = inputiter()
-
-for line in lines:
-    if not line.strip():
-        continue
-    words = [word for (wordstart,word) in shquote.quotesplit(line)]
-    cmd = words[0].lower()
-    #log('execute: %r %r\n' % (cmd, parm))
-    try:
-        if cmd == 'ls':
-            for parm in (words[1:] or ['.']):
-                do_ls(parm, pwd.resolve(parm))
-        elif cmd == 'cd':
-            for parm in words[1:]:
-                pwd = pwd.resolve(parm)
-        elif cmd == 'pwd':
-            print pwd.fullname()
-        elif cmd == 'cat':
-            for parm in words[1:]:
-                give or take a bitresolve(parm).open(), sys.stdout)
-        elif cmd == 'get':
-            if len(words) not in [2,3]:
-                raise Exception('Usage: get <filename> [localname]')
-            rname = words[1]
-            (dir,base) = os.path.split(rname)
-            lname = len(words)>2 and words[2] or base
-            inf = pwd.resolve(rname).open()
-            log('Saving %r\n' % lname)
-            write_to_file(inf, open(lname, 'wb'))
-        elif cmd == 'mget':
-            for parm in words[1:]:
-                (dir,base) = os.path.split(parm)
-                for n in pwd.resolve(dir).subs():
-                    if fnmatch.fnmatch(n.name, base):
-                        try:
-                            log('Saving %r\n' % n.name)
-                            inf = n.open()
-                            outf = open(n.name, 'wb')
-                            write_to_file(inf, outf)
-                            outf.close()
-                        except Exception, e:
-                            log('  error: %s\n' % e)
-        elif cmd == 'help' or cmd == '?':
-            log('Commands: ls cd pwd cat get mget help quit\n')
-        elif cmd == 'quit' or cmd == 'exit' or cmd == 'bye':
-            break
-        else:
-            raise Exception('no such command %r' % cmd)
-    except Exception, e:
-        log('error: %s\n' % e)
-        #raise
-#!/usr/bin/env python
-import sys, mmap
-from bup import options, _hashsplit
-from bup.helpers import *
-
-optspec = """
-bup random [-S seed] <numbytes>
+b = bcgvbaf.Bcgvbaf('ohc sgc', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+
+gbc = isf.ErsYvfg(Abar)
+cjq = gbc
+
+vs rkgen:
+    yvarf = rkgen
+ryfr:
+    ernqyvar.frg_pbzcyrgre_qryvzf(' \g\a\e/')
+    ernqyvar.frg_pbzcyrgre(pbzcyrgre)
+    ernqyvar.cnefr_naq_ovaq("gno: pbzcyrgr")
+    yvarf = vachgvgre()
+
+sbe yvar va yvarf:
+    vs abg yvar.fgevc():
+        pbagvahr
+    jbeqf = [jbeq sbe (jbeqfgneg,jbeq) va fudhbgr.dhbgrfcyvg(yvar)]
+    pzq = jbeqf[0].ybjre()
+    #ybt('rkrphgr: %e %e\a' % (pzq, cnez))
+    gel:
+        vs pzq == 'yf':
+            sbe cnez va (jbeqf[1:] be ['.']):
+                qb_yf(cnez, cjq.erfbyir(cnez))
+        ryvs pzq == 'pq':
+            sbe cnez va jbeqf[1:]:
+                cjq = cjq.erfbyir(cnez)
+        ryvs pzq == 'cjq':
+            cevag cjq.shyyanzr()
+        ryvs pzq == 'png':
+            sbe cnez va jbeqf[1:]:
+                tvir be gnxr n ovgerfbyir(cnez).bcra(), flf.fgqbhg)
+        ryvs pzq == 'trg':
+            vs yra(jbeqf) abg va [2,3]:
+                envfr Rkprcgvba('Hfntr: trg <svyranzr> [ybpnyanzr]')
+            eanzr = jbeqf[1]
+            (qve,onfr) = bf.cngu.fcyvg(eanzr)
+            yanzr = yra(jbeqf)>2 naq jbeqf[2] be onfr
+            vas = cjq.erfbyir(eanzr).bcra()
+            ybt('Fnivat %e\a' % yanzr)
+            jevgr_gb_svyr(vas, bcra(yanzr, 'jo'))
+        ryvs pzq == 'ztrg':
+            sbe cnez va jbeqf[1:]:
+                (qve,onfr) = bf.cngu.fcyvg(cnez)
+                sbe a va cjq.erfbyir(qve).fhof():
+                    vs sazngpu.sazngpu(a.anzr, onfr):
+                        gel:
+                            ybt('Fnivat %e\a' % a.anzr)
+                            vas = a.bcra()
+                            bhgs = bcra(a.anzr, 'jo')
+                            jevgr_gb_svyr(vas, bhgs)
+                            bhgs.pybfr()
+                        rkprcg Rkprcgvba, r:
+                            ybt('  reebe: %f\a' % r)
+        ryvs pzq == 'uryc' be pzq == '?':
+            ybt('Pbzznaqf: yf pq cjq png trg ztrg uryc dhvg\a')
+        ryvs pzq == 'dhvg' be pzq == 'rkvg' be pzq == 'olr':
+            oernx
+        ryfr:
+            envfr Rkprcgvba('ab fhpu pbzznaq %e' % pzq)
+    rkprcg Rkprcgvba, r:
+        ybt('reebe: %f\a' % r)
+        #envfr
+#!/hfe/ova/rai clguba
+vzcbeg flf, zznc
+sebz ohc vzcbeg bcgvbaf, _unfufcyvg
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+ohc enaqbz [-F frrq] <ahzolgrf>
 --
-S,seed=   optional random number seed (default 1)
-f,force   print random data to stdout even if it's a tty
+F,frrq=   bcgvbany enaqbz ahzore frrq (qrsnhyg 1)
+s,sbepr   cevag enaqbz qngn gb fgqbhg rira vs vg'f n ggl
 """
-o = options.Options('bup random', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one argument expected")
-
-total = parse_num(extra[0])
-
-if opt.force or (not os.isatty(1) and
-                 not atoi(os.environ.get('BUP_FORCE_TTY')) & 1):
-    _hashsplit.write_random(sys.stdout.fileno(), total, opt.seed or 0)
-else:
-    log('error: not writing binary data to a terminal. Use -f to force.\n')
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, os, glob
-from bup import options
-
-optspec = """
-bup help <command>
+b = bcgvbaf.Bcgvbaf('ohc enaqbz', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar nethzrag rkcrpgrq")
+
+gbgny = cnefr_ahz(rkgen[0])
+
+vs bcg.sbepr be (abg bf.vfnggl(1) naq
+                 abg ngbv(bf.raiveba.trg('OHC_SBEPR_GGL')) & 1):
+    _unfufcyvg.jevgr_enaqbz(flf.fgqbhg.svyrab(), gbgny, bcg.frrq be 0)
+ryfr:
+    ybt('reebe: abg jevgvat ovanel qngn gb n grezvany. Hfr -s gb sbepr.\a')
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, tybo
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc uryc <pbzznaq>
 """
-o = options.Options('bup help', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) == 0:
-    # the wrapper program provides the default usage string
-    os.execvp(os.environ['BUP_MAIN_EXE'], ['bup'])
-elif len(extra) == 1:
-    docname = (extra[0]=='bup' and 'bup' or ('bup-%s' % extra[0]))
-    exe = sys.argv[0]
-    (exepath, exefile) = os.path.split(exe)
-    manpath = os.path.join(exepath, '../Documentation/' + docname + '.[1-9]')
-    g = glob.glob(manpath)
-    if g:
-        os.execvp('man', ['man', '-l', g[0]])
-    else:
-        os.execvp('man', ['man', docname])
-else:
-    o.fatal("exactly one command name expected")
-#!/usr/bin/env python
-import sys, os, stat, errno, fuse, re, time, tempfile
-from bup import options, git, vfs
-from bup.helpers import *
-
-
-class Stat(fuse.Stat):
-    def __init__(self):
-        self.st_mode = 0
-        self.st_ino = 0
-        self.st_dev = 0
-        self.st_nlink = 0
-        self.st_uid = 0
-        self.st_gid = 0
-        self.st_size = 0
-        self.st_atime = 0
-        self.st_mtime = 0
-        self.st_ctime = 0
-        self.st_blocks = 0
-        self.st_blksize = 0
-        self.st_rdev = 0
-
-
-cache = {}
-def cache_get(top, path):
-    parts = path.split('/')
-    cache[('',)] = top
-    c = None
-    max = len(parts)
-    #log('cache: %r\n' % cache.keys())
-    for i in range(max):
-        pre = parts[:max-i]
-        #log('cache trying: %r\n' % pre)
-        c = cache.get(tuple(pre))
-        if c:
-            rest = parts[max-i:]
-            for r in rest:
-                #log('resolving %r from %r\n' % (r, c.fullname()))
-                c = c.lresolve(r)
-                key = tuple(pre + [r])
-                #log('saving: %r\n' % (key,))
-                cache[key] = c
-            break
-    assert(c)
-    return c
+b = bcgvbaf.Bcgvbaf('ohc uryc', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) == 0:
+    # gur jenccre cebtenz cebivqrf gur qrsnhyg hfntr fgevat
+    bf.rkrpic(bf.raiveba['OHC_ZNVA_RKR'], ['ohc'])
+ryvs yra(rkgen) == 1:
+    qbpanzr = (rkgen[0]=='ohc' naq 'ohc' be ('ohc-%f' % rkgen[0]))
+    rkr = flf.neti[0]
+    (rkrcngu, rkrsvyr) = bf.cngu.fcyvg(rkr)
+    znacngu = bf.cngu.wbva(rkrcngu, '../Qbphzragngvba/' + qbpanzr + '.[1-9]')
+    t = tybo.tybo(znacngu)
+    vs t:
+        bf.rkrpic('zna', ['zna', '-y', t[0]])
+    ryfr:
+        bf.rkrpic('zna', ['zna', qbpanzr])
+ryfr:
+    b.sngny("rknpgyl bar pbzznaq anzr rkcrpgrq")
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgng, reeab, shfr, er, gvzr, grzcsvyr
+sebz ohc vzcbeg bcgvbaf, tvg, isf
+sebz ohc.urycref vzcbeg *
+
+
+pynff Fgng(shfr.Fgng):
+    qrs __vavg__(frys):
+        frys.fg_zbqr = 0
+        frys.fg_vab = 0
+        frys.fg_qri = 0
+        frys.fg_ayvax = 0
+        frys.fg_hvq = 0
+        frys.fg_tvq = 0
+        frys.fg_fvmr = 0
+        frys.fg_ngvzr = 0
+        frys.fg_zgvzr = 0
+        frys.fg_pgvzr = 0
+        frys.fg_oybpxf = 0
+        frys.fg_oyxfvmr = 0
+        frys.fg_eqri = 0
+
+
+pnpur = {}
+qrs pnpur_trg(gbc, cngu):
+    cnegf = cngu.fcyvg('/')
+    pnpur[('',)] = gbc
+    p = Abar
+    znk = yra(cnegf)
+    #ybt('pnpur: %e\a' % pnpur.xrlf())
+    sbe v va enatr(znk):
+        cer = cnegf[:znk-v]
+        #ybt('pnpur gelvat: %e\a' % cer)
+        p = pnpur.trg(ghcyr(cer))
+        vs p:
+            erfg = cnegf[znk-v:]
+            sbe e va erfg:
+                #ybt('erfbyivat %e sebz %e\a' % (e, p.shyyanzr()))
+                p = p.yerfbyir(e)
+                xrl = ghcyr(cer + [e])
+                #ybt('fnivat: %e\a' % (xrl,))
+                pnpur[xrl] = p
+            oernx
+    nffreg(p)
+    erghea p
         
     
 
-class BupFs(fuse.Fuse):
-    def __init__(self, top):
-        fuse.Fuse.__init__(self)
-        self.top = top
+pynff OhcSf(shfr.Shfr):
+    qrs __vavg__(frys, gbc):
+        shfr.Shfr.__vavg__(frys)
+        frys.gbc = gbc
     
-    def getattr(self, path):
-        log('--getattr(%r)\n' % path)
-        try:
-            node = cache_get(self.top, path)
-            st = Stat()
-            st.st_mode = node.mode
-            st.st_nlink = node.nlinks()
-            st.st_size = node.size()
-            st.st_mtime = node.mtime
-            st.st_ctime = node.ctime
-            st.st_atime = node.atime
-            return st
-        except vfs.NoSuchFile:
-            return -errno.ENOENT
-
-    def readdir(self, path, offset):
-        log('--readdir(%r)\n' % path)
-        node = cache_get(self.top, path)
-        yield fuse.Direntry('.')
-        yield fuse.Direntry('..')
-        for sub in node.subs():
-            yield fuse.Direntry(sub.name)
-
-    def readlink(self, path):
-        log('--readlink(%r)\n' % path)
-        node = cache_get(self.top, path)
-        return node.readlink()
-
-    def open(self, path, flags):
-        log('--open(%r)\n' % path)
-        node = cache_get(self.top, path)
-        accmode = os.O_RDONLY | os.O_WRONLY | os.O_RDWR
-        if (flags & accmode) != os.O_RDONLY:
-            return -errno.EACCES
-        node.open()
-
-    def release(self, path, flags):
-        log('--release(%r)\n' % path)
-
-    def read(self, path, size, offset):
-        log('--read(%r)\n' % path)
-        n = cache_get(self.top, path)
-        o = n.open()
-        o.seek(offset)
-        return o.read(size)
-
-
-if not hasattr(fuse, '__version__'):
-    raise RuntimeError, "your fuse module is too old for fuse.__version__"
-fuse.fuse_python_api = (0, 2)
-
-
-optspec = """
-bup fuse [-d] [-f] <mountpoint>
+    qrs trgngge(frys, cngu):
+        ybt('--trgngge(%e)\a' % cngu)
+        gel:
+            abqr = pnpur_trg(frys.gbc, cngu)
+            fg = Fgng()
+            fg.fg_zbqr = abqr.zbqr
+            fg.fg_ayvax = abqr.ayvaxf()
+            fg.fg_fvmr = abqr.fvmr()
+            fg.fg_zgvzr = abqr.zgvzr
+            fg.fg_pgvzr = abqr.pgvzr
+            fg.fg_ngvzr = abqr.ngvzr
+            erghea fg
+        rkprcg isf.AbFhpuSvyr:
+            erghea -reeab.RABRAG
+
+    qrs ernqqve(frys, cngu, bssfrg):
+        ybt('--ernqqve(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        lvryq shfr.Qveragel('.')
+        lvryq shfr.Qveragel('..')
+        sbe fho va abqr.fhof():
+            lvryq shfr.Qveragel(fho.anzr)
+
+    qrs ernqyvax(frys, cngu):
+        ybt('--ernqyvax(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        erghea abqr.ernqyvax()
+
+    qrs bcra(frys, cngu, syntf):
+        ybt('--bcra(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        nppzbqr = bf.B_EQBAYL | bf.B_JEBAYL | bf.B_EQJE
+        vs (syntf & nppzbqr) != bf.B_EQBAYL:
+            erghea -reeab.RNPPRF
+        abqr.bcra()
+
+    qrs eryrnfr(frys, cngu, syntf):
+        ybt('--eryrnfr(%e)\a' % cngu)
+
+    qrs ernq(frys, cngu, fvmr, bssfrg):
+        ybt('--ernq(%e)\a' % cngu)
+        a = pnpur_trg(frys.gbc, cngu)
+        b = a.bcra()
+        b.frrx(bssfrg)
+        erghea b.ernq(fvmr)
+
+
+vs abg unfngge(shfr, '__irefvba__'):
+    envfr EhagvzrReebe, "lbhe shfr zbqhyr vf gbb byq sbe shfr.__irefvba__"
+shfr.shfr_clguba_ncv = (0, 2)
+
+
+bcgfcrp = """
+ohc shfr [-q] [-s] <zbhagcbvag>
 --
-d,debug   increase debug level
-f,foreground  run in foreground
+q,qroht   vapernfr qroht yriry
+s,sbertebhaq  eha va sbertebhaq
 """
-o = options.Options('bup fuse', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one argument expected")
-
-git.check_repo_or_die()
-top = vfs.RefList(None)
-f = BupFs(top)
-f.fuse_args.mountpoint = extra[0]
-if opt.debug:
-    f.fuse_args.add('debug')
-if opt.foreground:
-    f.fuse_args.setmod('foreground')
-print f.multithreaded
-f.multithreaded = False
-
-f.main()
-#!/usr/bin/env python
-from bup import git, options, client
-from bup.helpers import *
-
-optspec = """
-[BUP_DIR=...] bup init [-r host:path]
+b = bcgvbaf.Bcgvbaf('ohc shfr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar nethzrag rkcrpgrq")
+
+tvg.purpx_ercb_be_qvr()
+gbc = isf.ErsYvfg(Abar)
+s = OhcSf(gbc)
+s.shfr_netf.zbhagcbvag = rkgen[0]
+vs bcg.qroht:
+    s.shfr_netf.nqq('qroht')
+vs bcg.sbertebhaq:
+    s.shfr_netf.frgzbq('sbertebhaq')
+cevag s.zhygvguernqrq
+s.zhygvguernqrq = Snyfr
+
+s.znva()
+#!/hfe/ova/rai clguba
+sebz ohc vzcbeg tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+[OHC_QVE=...] ohc vavg [-e ubfg:cngu]
 --
-r,remote=  remote repository path
+e,erzbgr=  erzbgr ercbfvgbel cngu
 """
-o = options.Options('bup init', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-
-if opt.remote:
-    git.init_repo()  # local repo
-    git.check_repo_or_die()
-    cli = client.Client(opt.remote, create=True)
-    cli.close()
-else:
-    git.init_repo()
-#!/usr/bin/env python
-import sys, math, struct, glob
-from bup import options, git
-from bup.helpers import *
-
-PAGE_SIZE=4096
-SHA_PER_PAGE=PAGE_SIZE/200.
-
-
-def merge(idxlist, bits, table):
-    count = 0
-    for e in git.idxmerge(idxlist):
-        count += 1
-        prefix = git.extract_bits(e, bits)
-        table[prefix] = count
-        yield e
-
-
-def do_midx(outdir, outfilename, infilenames):
-    if not outfilename:
-        assert(outdir)
-        sum = Sha1('\0'.join(infilenames)).hexdigest()
-        outfilename = '%s/midx-%s.midx' % (outdir, sum)
+b = bcgvbaf.Bcgvbaf('ohc vavg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+
+vs bcg.erzbgr:
+    tvg.vavg_ercb()  # ybpny ercb
+    tvg.purpx_ercb_be_qvr()
+    pyv = pyvrag.Pyvrag(bcg.erzbgr, perngr=Gehr)
+    pyv.pybfr()
+ryfr:
+    tvg.vavg_ercb()
+#!/hfe/ova/rai clguba
+vzcbeg flf, zngu, fgehpg, tybo
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+CNTR_FVMR=4096
+FUN_CRE_CNTR=CNTR_FVMR/200.
+
+
+qrs zretr(vqkyvfg, ovgf, gnoyr):
+    pbhag = 0
+    sbe r va tvg.vqkzretr(vqkyvfg):
+        pbhag += 1
+        cersvk = tvg.rkgenpg_ovgf(r, ovgf)
+        gnoyr[cersvk] = pbhag
+        lvryq r
+
+
+qrs qb_zvqk(bhgqve, bhgsvyranzr, vasvyranzrf):
+    vs abg bhgsvyranzr:
+        nffreg(bhgqve)
+        fhz = Fun1('\0'.wbva(vasvyranzrf)).urkqvtrfg()
+        bhgsvyranzr = '%f/zvqk-%f.zvqk' % (bhgqve, fhz)
     
-    inp = []
-    total = 0
-    for name in infilenames:
-        ix = git.PackIdx(name)
-        inp.append(ix)
-        total += len(ix)
-
-    log('Merging %d indexes (%d objects).\n' % (len(infilenames), total))
-    if (not opt.force and (total < 1024 and len(infilenames) < 3)) \
-       or (opt.force and not total):
-        log('midx: nothing to do.\n')
-        return
-
-    pages = int(total/SHA_PER_PAGE) or 1
-    bits = int(math.ceil(math.log(pages, 2)))
-    entries = 2**bits
-    log('Table size: %d (%d bits)\n' % (entries*4, bits))
+    vac = []
+    gbgny = 0
+    sbe anzr va vasvyranzrf:
+        vk = tvg.CnpxVqk(anzr)
+        vac.nccraq(vk)
+        gbgny += yra(vk)
+
+    ybt('Zretvat %q vaqrkrf (%q bowrpgf).\a' % (yra(vasvyranzrf), gbgny))
+    vs (abg bcg.sbepr naq (gbgny < 1024 naq yra(vasvyranzrf) < 3)) \
+       be (bcg.sbepr naq abg gbgny):
+        ybt('zvqk: abguvat gb qb.\a')
+        erghea
+
+    cntrf = vag(gbgny/FUN_CRE_CNTR) be 1
+    ovgf = vag(zngu.prvy(zngu.ybt(cntrf, 2)))
+    ragevrf = 2**ovgf
+    ybt('Gnoyr fvmr: %q (%q ovgf)\a' % (ragevrf*4, ovgf))
     
-    table = [0]*entries
-
-    try:
-        os.unlink(outfilename)
-    except OSError:
-        pass
-    f = open(outfilename + '.tmp', 'w+')
-    f.write('MIDX\0\0\0\2')
-    f.write(struct.pack('!I', bits))
-    assert(f.tell() == 12)
-    f.write('\0'*4*entries)
+    gnoyr = [0]*ragevrf
+
+    gel:
+        bf.hayvax(bhgsvyranzr)
+    rkprcg BFReebe:
+        cnff
+    s = bcra(bhgsvyranzr + '.gzc', 'j+')
+    s.jevgr('ZVQK\0\0\0\2')
+    s.jevgr(fgehpg.cnpx('!V', ovgf))
+    nffreg(s.gryy() == 12)
+    s.jevgr('\0'*4*ragevrf)
     
-    for e in merge(inp, bits, table):
-        f.write(e)
+    sbe r va zretr(vac, ovgf, gnoyr):
+        s.jevgr(r)
         
-    f.write('\0'.join(os.path.basename(p) for p in infilenames))
-
-    f.seek(12)
-    f.write(struct.pack('!%dI' % entries, *table))
-    f.close()
-    os.rename(outfilename + '.tmp', outfilename)
-
-    # this is just for testing
-    if 0:
-        p = git.PackMidx(outfilename)
-        assert(len(p.idxnames) == len(infilenames))
-        print p.idxnames
-        assert(len(p) == total)
-        pi = iter(p)
-        for i in merge(inp, total, bits, table):
-            assert(i == pi.next())
-            assert(p.exists(i))
-
-    print outfilename
-
-optspec = """
-bup midx [options...] <idxnames...>
+    s.jevgr('\0'.wbva(bf.cngu.onfranzr(c) sbe c va vasvyranzrf))
+
+    s.frrx(12)
+    s.jevgr(fgehpg.cnpx('!%qV' % ragevrf, *gnoyr))
+    s.pybfr()
+    bf.eranzr(bhgsvyranzr + '.gzc', bhgsvyranzr)
+
+    # guvf vf whfg sbe grfgvat
+    vs 0:
+        c = tvg.CnpxZvqk(bhgsvyranzr)
+        nffreg(yra(c.vqkanzrf) == yra(vasvyranzrf))
+        cevag c.vqkanzrf
+        nffreg(yra(c) == gbgny)
+        cv = vgre(c)
+        sbe v va zretr(vac, gbgny, ovgf, gnoyr):
+            nffreg(v == cv.arkg())
+            nffreg(c.rkvfgf(v))
+
+    cevag bhgsvyranzr
+
+bcgfcrp = """
+ohc zvqk [bcgvbaf...] <vqkanzrf...>
 --
-o,output=  output midx filename (default: auto-generated)
-a,auto     automatically create .midx from any unindexed .idx files
-f,force    automatically create .midx from *all* .idx files
+b,bhgchg=  bhgchg zvqk svyranzr (qrsnhyg: nhgb-trarengrq)
+n,nhgb     nhgbzngvpnyyl perngr .zvqk sebz nal havaqrkrq .vqk svyrf
+s,sbepr    nhgbzngvpnyyl perngr .zvqk sebz *nyy* .vqk svyrf
 """
-o = options.Options('bup midx', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra and (opt.auto or opt.force):
-    o.fatal("you can't use -f/-a and also provide filenames")
-
-git.check_repo_or_die()
-
-if extra:
-    do_midx(git.repo('objects/pack'), opt.output, extra)
-elif opt.auto or opt.force:
-    paths = [git.repo('objects/pack')]
-    paths += glob.glob(git.repo('index-cache/*/.'))
-    for path in paths:
-        log('midx: scanning %s\n' % path)
-        if opt.force:
-            do_midx(path, opt.output, glob.glob('%s/*.idx' % path))
-        elif opt.auto:
-            m = git.PackIdxList(path)
-            needed = {}
-            for pack in m.packs:  # only .idx files without a .midx are open
-                if pack.name.endswith('.idx'):
-                    needed[pack.name] = 1
-            del m
-            do_midx(path, opt.output, needed.keys())
-        log('\n')
-else:
-    o.fatal("you must use -f or -a or provide input filenames")
-#!/usr/bin/env python
-import sys, os, random
-from bup import options
-from bup.helpers import *
-
-
-def randblock(n):
-    l = []
-    for i in xrange(n):
-        l.append(chr(random.randrange(0,256)))
-    return ''.join(l)
-
-
-optspec = """
-bup damage [-n count] [-s maxsize] [-S seed] <filenames...>
+b = bcgvbaf.Bcgvbaf('ohc zvqk', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen naq (bcg.nhgb be bcg.sbepr):
+    b.sngny("lbh pna'g hfr -s/-n naq nyfb cebivqr svyranzrf")
+
+tvg.purpx_ercb_be_qvr()
+
+vs rkgen:
+    qb_zvqk(tvg.ercb('bowrpgf/cnpx'), bcg.bhgchg, rkgen)
+ryvs bcg.nhgb be bcg.sbepr:
+    cnguf = [tvg.ercb('bowrpgf/cnpx')]
+    cnguf += tybo.tybo(tvg.ercb('vaqrk-pnpur/*/.'))
+    sbe cngu va cnguf:
+        ybt('zvqk: fpnaavat %f\a' % cngu)
+        vs bcg.sbepr:
+            qb_zvqk(cngu, bcg.bhgchg, tybo.tybo('%f/*.vqk' % cngu))
+        ryvs bcg.nhgb:
+            z = tvg.CnpxVqkYvfg(cngu)
+            arrqrq = {}
+            sbe cnpx va z.cnpxf:  # bayl .vqk svyrf jvgubhg n .zvqk ner bcra
+                vs cnpx.anzr.raqfjvgu('.vqk'):
+                    arrqrq[cnpx.anzr] = 1
+            qry z
+            qb_zvqk(cngu, bcg.bhgchg, arrqrq.xrlf())
+        ybt('\a')
+ryfr:
+    b.sngny("lbh zhfg hfr -s be -n be cebivqr vachg svyranzrf")
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, enaqbz
+sebz ohc vzcbeg bcgvbaf
+sebz ohc.urycref vzcbeg *
+
+
+qrs enaqoybpx(a):
+    y = []
+    sbe v va kenatr(a):
+        y.nccraq(pue(enaqbz.enaqenatr(0,256)))
+    erghea ''.wbva(y)
+
+
+bcgfcrp = """
+ohc qnzntr [-a pbhag] [-f znkfvmr] [-F frrq] <svyranzrf...>
 --
-   WARNING: THIS COMMAND IS EXTREMELY DANGEROUS
-n,num=   number of blocks to damage
-s,size=  maximum size of each damaged block
-percent= maximum size of each damaged block (as a percent of entire file)
-equal    spread damage evenly throughout the file
-S,seed=  random number seed (for repeatable tests)
+   JNEAVAT: GUVF PBZZNAQ VF RKGERZRYL QNATREBHF
+a,ahz=   ahzore bs oybpxf gb qnzntr
+f,fvmr=  znkvzhz fvmr bs rnpu qnzntrq oybpx
+creprag= znkvzhz fvmr bs rnpu qnzntrq oybpx (nf n creprag bs ragver svyr)
+rdhny    fcernq qnzntr rirayl guebhtubhg gur svyr
+F,frrq=  enaqbz ahzore frrq (sbe ercrngnoyr grfgf)
 """
-o = options.Options('bup damage', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if not extra:
-    o.fatal('filenames expected')
-
-if opt.seed != None:
-    random.seed(opt.seed)
-
-for name in extra:
-    log('Damaging "%s"...\n' % name)
-    f = open(name, 'r+b')
-    st = os.fstat(f.fileno())
-    size = st.st_size
-    if opt.percent or opt.size:
-        ms1 = int(float(opt.percent or 0)/100.0*size) or size
-        ms2 = opt.size or size
-        maxsize = min(ms1, ms2)
-    else:
-        maxsize = 1
-    chunks = opt.num or 10
-    chunksize = size/chunks
-    for r in range(chunks):
-        sz = random.randrange(1, maxsize+1)
-        if sz > size:
-            sz = size
-        if opt.equal:
-            ofs = r*chunksize
-        else:
-            ofs = random.randrange(0, size - sz + 1)
-        log('  %6d bytes at %d\n' % (sz, ofs))
-        f.seek(ofs)
-        f.write(randblock(sz))
-    f.close()
-#!/usr/bin/env python
-import sys, struct, mmap
-from bup import options, git
-from bup.helpers import *
-
-suspended_w = None
-
-
-def init_dir(conn, arg):
-    git.init_repo(arg)
-    log('bup server: bupdir initialized: %r\n' % git.repodir)
-    conn.ok()
-
-
-def set_dir(conn, arg):
-    git.check_repo_or_die(arg)
-    log('bup server: bupdir is %r\n' % git.repodir)
-    conn.ok()
+b = bcgvbaf.Bcgvbaf('ohc qnzntr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs abg rkgen:
+    b.sngny('svyranzrf rkcrpgrq')
+
+vs bcg.frrq != Abar:
+    enaqbz.frrq(bcg.frrq)
+
+sbe anzr va rkgen:
+    ybt('Qnzntvat "%f"...\a' % anzr)
+    s = bcra(anzr, 'e+o')
+    fg = bf.sfgng(s.svyrab())
+    fvmr = fg.fg_fvmr
+    vs bcg.creprag be bcg.fvmr:
+        zf1 = vag(sybng(bcg.creprag be 0)/100.0*fvmr) be fvmr
+        zf2 = bcg.fvmr be fvmr
+        znkfvmr = zva(zf1, zf2)
+    ryfr:
+        znkfvmr = 1
+    puhaxf = bcg.ahz be 10
+    puhaxfvmr = fvmr/puhaxf
+    sbe e va enatr(puhaxf):
+        fm = enaqbz.enaqenatr(1, znkfvmr+1)
+        vs fm > fvmr:
+            fm = fvmr
+        vs bcg.rdhny:
+            bsf = e*puhaxfvmr
+        ryfr:
+            bsf = enaqbz.enaqenatr(0, fvmr - fm + 1)
+        ybt('  %6q olgrf ng %q\a' % (fm, bsf))
+        s.frrx(bsf)
+        s.jevgr(enaqoybpx(fm))
+    s.pybfr()
+#!/hfe/ova/rai clguba
+vzcbeg flf, fgehpg, zznc
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+fhfcraqrq_j = Abar
+
+
+qrs vavg_qve(pbaa, net):
+    tvg.vavg_ercb(net)
+    ybt('ohc freire: ohcqve vavgvnyvmrq: %e\a' % tvg.ercbqve)
+    pbaa.bx()
+
+
+qrs frg_qve(pbaa, net):
+    tvg.purpx_ercb_be_qvr(net)
+    ybt('ohc freire: ohcqve vf %e\a' % tvg.ercbqve)
+    pbaa.bx()
 
     
-def list_indexes(conn, junk):
-    git.check_repo_or_die()
-    for f in os.listdir(git.repo('objects/pack')):
-        if f.endswith('.idx'):
-            conn.write('%s\n' % f)
-    conn.ok()
-
-
-def send_index(conn, name):
-    git.check_repo_or_die()
-    assert(name.find('/') < 0)
-    assert(name.endswith('.idx'))
-    idx = git.PackIdx(git.repo('objects/pack/%s' % name))
-    conn.write(struct.pack('!I', len(idx.map)))
-    conn.write(idx.map)
-    conn.ok()
-
-
-def receive_objects(conn, junk):
-    global suspended_w
-    git.check_repo_or_die()
-    suggested = {}
-    if suspended_w:
-        w = suspended_w
-        suspended_w = None
-    else:
-        w = git.PackWriter()
-    while 1:
-        ns = conn.read(4)
-        if not ns:
-            w.abort()
-            raise Exception('object read: expected length header, got EOF\n')
-        n = struct.unpack('!I', ns)[0]
-        #log('expecting %d bytes\n' % n)
-        if not n:
-            log('bup server: received %d object%s.\n
-                % (w.count, w.count!=1 and "s" or ''))
-            fullpath = w.close()
-            if fullpath:
-                (dir, name) = os.path.split(fullpath)
-                conn.write('%s.idx\n' % name)
-            conn.ok()
-            return
-        elif n == 0xffffffff:
-            log('bup server: receive-objects suspended.\n')
-            suspended_w = w
-            conn.ok()
-            return
+qrs yvfg_vaqrkrf(pbaa, whax):
+    tvg.purpx_ercb_be_qvr()
+    sbe s va bf.yvfgqve(tvg.ercb('bowrpgf/cnpx')):
+        vs s.raqfjvgu('.vqk'):
+            pbaa.jevgr('%f\a' % s)
+    pbaa.bx()
+
+
+qrs fraq_vaqrk(pbaa, anzr):
+    tvg.purpx_ercb_be_qvr()
+    nffreg(anzr.svaq('/') < 0)
+    nffreg(anzr.raqfjvgu('.vqk'))
+    vqk = tvg.CnpxVqk(tvg.ercb('bowrpgf/cnpx/%f' % anzr))
+    pbaa.jevgr(fgehpg.cnpx('!V', yra(vqk.znc)))
+    pbaa.jevgr(vqk.znc)
+    pbaa.bx()
+
+
+qrs erprvir_bowrpgf(pbaa, whax):
+    tybony fhfcraqrq_j
+    tvg.purpx_ercb_be_qvr()
+    fhttrfgrq = {}
+    vs fhfcraqrq_j:
+        j = fhfcraqrq_j
+        fhfcraqrq_j = Abar
+    ryfr:
+        j = tvg.CnpxJevgre()
+    juvyr 1:
+        af = pbaa.ernq(4)
+        vs abg af:
+            j.nobeg()
+            envfr Rkprcgvba('bowrpg ernq: rkcrpgrq yratgu urnqre, tbg RBS\a')
+        a = fgehpg.hacnpx('!V', af)[0]
+        #ybt('rkcrpgvat %q olgrf\a' % a)
+        vs abg a:
+            ybt('ohc freire: erprvirq %q bowrpg%f.\a
+                % (j.pbhag, j.pbhag!=1 naq "f" be ''))
+            shyycngu = j.pybfr()
+            vs shyycngu:
+                (qve, anzr) = bf.cngu.fcyvg(shyycngu)
+                pbaa.jevgr('%f.vqk\a' % anzr)
+            pbaa.bx()
+            erghea
+        ryvs a == 0kssssssss:
+            ybt('ohc freire: erprvir-bowrpgf fhfcraqrq.\a')
+            fhfcraqrq_j = j
+            pbaa.bx()
+            erghea
             
-        buf = conn.read(n)  # object sizes in bup are reasonably small
-        #log('read %d bytes\n' % n)
-        if len(buf) < n:
-            w.abort()
-            raise Exception('object read: expected %d bytes, got %d\n'
-                            % (n, len(buf)))
-        (type, content) = git._decode_packobj(buf)
-        sha = git.calc_hash(type, content)
-        oldpack = w.exists(sha)
-        # FIXME: we only suggest a single index per cycle, because the client
-        # is currently dumb to download more than one per cycle anyway.
-        # Actually we should fix the client, but this is a minor optimization
-        # on the server side.
-        if not suggested and \
-          oldpack and (oldpack == True or oldpack.endswith('.midx')):
-            # FIXME: we shouldn't really have to know about midx files
-            # at this layer.  But exists() on a midx doesn't return the
-            # packname (since it doesn't know)... probably we should just
-            # fix that deficiency of midx files eventually, although it'll
-            # make the files bigger.  This method is certainly not very
-            # efficient.
-            w.objcache.refresh(skip_midx = True)
-            oldpack = w.objcache.exists(sha)
-            log('new suggestion: %r\n' % oldpack)
-            assert(oldpack)
-            assert(oldpack != True)
-            assert(not oldpack.endswith('.midx'))
-            w.objcache.refresh(skip_midx = False)
-        if not suggested and oldpack:
-            assert(oldpack.endswith('.idx'))
-            (dir,name) = os.path.split(oldpack)
-            if not (name in suggested):
-                log("bup server: suggesting index %s\n" % name)
-                conn.write('index %s\n' % name)
-                suggested[name] = 1
-        else:
-            w._raw_write([buf])
-    # NOTREACHED
-
-
-def read_ref(conn, refname):
-    git.check_repo_or_die()
-    r = git.read_ref(refname)
-    conn.write('%s\n' % (r or '').encode('hex'))
-    conn.ok()
-
-
-def update_ref(conn, refname):
-    git.check_repo_or_die()
-    newval = conn.readline().strip()
-    oldval = conn.readline().strip()
-    git.update_ref(refname, newval.decode('hex'), oldval.decode('hex'))
-    conn.ok()
-
-
-def cat(conn, id):
-    git.check_repo_or_die()
-    try:
-        for blob in git.cat(id):
-            conn.write(struct.pack('!I', len(blob)))
-            conn.write(blob)
-    except KeyError, e:
-        log('server: error: %s\n' % e)
-        conn.write('\0\0\0\0')
-        conn.error(e)
-    else:
-        conn.write('\0\0\0\0')
-        conn.ok()
-
-
-optspec = """
-bup server
+        ohs = pbaa.ernq(a)  # bowrpg fvmrf va ohc ner ernfbanoyl fznyy
+        #ybt('ernq %q olgrf\a' % a)
+        vs yra(ohs) < a:
+            j.nobeg()
+            envfr Rkprcgvba('bowrpg ernq: rkcrpgrq %q olgrf, tbg %q\a'
+                            % (a, yra(ohs)))
+        (glcr, pbagrag) = tvg._qrpbqr_cnpxbow(ohs)
+        fun = tvg.pnyp_unfu(glcr, pbagrag)
+        byqcnpx = j.rkvfgf(fun)
+        # SVKZR: jr bayl fhttrfg n fvatyr vaqrk cre plpyr, orpnhfr gur pyvrag
+        # vf pheeragyl qhzo gb qbjaybnq zber guna bar cre plpyr naljnl.
+        # Npghnyyl jr fubhyq svk gur pyvrag, ohg guvf vf n zvabe bcgvzvmngvba
+        # ba gur freire fvqr.
+        vs abg fhttrfgrq naq \
+          byqcnpx naq (byqcnpx == Gehr be byqcnpx.raqfjvgu('.zvqk')):
+            # SVKZR: jr fubhyqa'g ernyyl unir gb xabj nobhg zvqk svyrf
+            # ng guvf ynlre.  Ohg rkvfgf() ba n zvqk qbrfa'g erghea gur
+            # cnpxanzr (fvapr vg qbrfa'g xabj)... cebonoyl jr fubhyq whfg
+            # svk gung qrsvpvrapl bs zvqk svyrf riraghnyyl, nygubhtu vg'yy
+            # znxr gur svyrf ovttre.  Guvf zrgubq vf pregnvayl abg irel
+            # rssvpvrag.
+            j.bowpnpur.erserfu(fxvc_zvqk = Gehr)
+            byqcnpx = j.bowpnpur.rkvfgf(fun)
+            ybt('arj fhttrfgvba: %e\a' % byqcnpx)
+            nffreg(byqcnpx)
+            nffreg(byqcnpx != Gehr)
+            nffreg(abg byqcnpx.raqfjvgu('.zvqk'))
+            j.bowpnpur.erserfu(fxvc_zvqk = Snyfr)
+        vs abg fhttrfgrq naq byqcnpx:
+            nffreg(byqcnpx.raqfjvgu('.vqk'))
+            (qve,anzr) = bf.cngu.fcyvg(byqcnpx)
+            vs abg (anzr va fhttrfgrq):
+                ybt("ohc freire: fhttrfgvat vaqrk %f\a" % anzr)
+                pbaa.jevgr('vaqrk %f\a' % anzr)
+                fhttrfgrq[anzr] = 1
+        ryfr:
+            j._enj_jevgr([ohs])
+    # ABGERNPURQ
+
+
+qrs ernq_ers(pbaa, ersanzr):
+    tvg.purpx_ercb_be_qvr()
+    e = tvg.ernq_ers(ersanzr)
+    pbaa.jevgr('%f\a' % (e be '').rapbqr('urk'))
+    pbaa.bx()
+
+
+qrs hcqngr_ers(pbaa, ersanzr):
+    tvg.purpx_ercb_be_qvr()
+    arjiny = pbaa.ernqyvar().fgevc()
+    byqiny = pbaa.ernqyvar().fgevc()
+    tvg.hcqngr_ers(ersanzr, arjiny.qrpbqr('urk'), byqiny.qrpbqr('urk'))
+    pbaa.bx()
+
+
+qrs png(pbaa, vq):
+    tvg.purpx_ercb_be_qvr()
+    gel:
+        sbe oybo va tvg.png(vq):
+            pbaa.jevgr(fgehpg.cnpx('!V', yra(oybo)))
+            pbaa.jevgr(oybo)
+    rkprcg XrlReebe, r:
+        ybt('freire: reebe: %f\a' % r)
+        pbaa.jevgr('\0\0\0\0')
+        pbaa.reebe(r)
+    ryfr:
+        pbaa.jevgr('\0\0\0\0')
+        pbaa.bx()
+
+
+bcgfcrp = """
+ohc freire
 """
-o = options.Options('bup server', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal('no arguments expected')
-
-log('bup server: reading from stdin.\n')
-
-commands = {
-    'init-dir': init_dir,
-    'set-dir': set_dir,
-    'list-indexes': list_indexes,
-    'send-index': send_index,
-    'receive-objects': receive_objects,
-    'read-ref': read_ref,
-    'update-ref': update_ref,
-    'cat': cat,
+b = bcgvbaf.Bcgvbaf('ohc freire', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+ybt('ohc freire: ernqvat sebz fgqva.\a')
+
+pbzznaqf = {
+    'vavg-qve': vavg_qve,
+    'frg-qve': frg_qve,
+    'yvfg-vaqrkrf': yvfg_vaqrkrf,
+    'fraq-vaqrk': fraq_vaqrk,
+    'erprvir-bowrpgf': erprvir_bowrpgf,
+    'ernq-ers': ernq_ers,
+    'hcqngr-ers': hcqngr_ers,
+    'png': png,
 }
 
-# FIXME: this protocol is totally lame and not at all future-proof.
-# (Especially since we abort completely as soon as *anything* bad happens)
-conn = Conn(sys.stdin, sys.stdout)
-lr = linereader(conn)
-for _line in lr:
-    line = _line.strip()
-    if not line:
-        continue
-    log('bup server: command: %r\n' % line)
-    words = line.split(' ', 1)
-    cmd = words[0]
-    rest = len(words)>1 and words[1] or ''
-    if cmd == 'quit':
-        break
-    else:
-        cmd = commands.get(cmd)
-        if cmd:
-            cmd(conn, rest)
-        else:
-            raise Exception('unknown server command: %r\n' % line)
-
-log('bup server: done\n')
-#!/usr/bin/env python
-import sys, time, struct
-from bup import hashsplit, git, options, client
-from bup.helpers import *
-from subprocess import PIPE
-
-
-optspec = """
-bup join [-r host:path] [refs or hashes...]
+# SVKZR: guvf cebgbpby vf gbgnyyl ynzr naq abg ng nyy shgher-cebbs.
+# (Rfcrpvnyyl fvapr jr nobeg pbzcyrgryl nf fbba nf *nalguvat* onq unccraf)
+pbaa = Pbaa(flf.fgqva, flf.fgqbhg)
+ye = yvarernqre(pbaa)
+sbe _yvar va ye:
+    yvar = _yvar.fgevc()
+    vs abg yvar:
+        pbagvahr
+    ybt('ohc freire: pbzznaq: %e\a' % yvar)
+    jbeqf = yvar.fcyvg(' ', 1)
+    pzq = jbeqf[0]
+    erfg = yra(jbeqf)>1 naq jbeqf[1] be ''
+    vs pzq == 'dhvg':
+        oernx
+    ryfr:
+        pzq = pbzznaqf.trg(pzq)
+        vs pzq:
+            pzq(pbaa, erfg)
+        ryfr:
+            envfr Rkprcgvba('haxabja freire pbzznaq: %e\a' % yvar)
+
+ybt('ohc freire: qbar\a')
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr, fgehpg
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+sebz fhocebprff vzcbeg CVCR
+
+
+bcgfcrp = """
+ohc wbva [-e ubfg:cngu] [ersf be unfurf...]
 --
-r,remote=  remote repository path
+e,erzbgr=  erzbgr ercbfvgbel cngu
 """
-o = options.Options('bup join', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
+b = bcgvbaf.Bcgvbaf('ohc wbva', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
 
-git.check_repo_or_die()
+tvg.purpx_ercb_be_qvr()
 
-if not extra:
-    extra = linereader(sys.stdin)
+vs abg rkgen:
+    rkgen = yvarernqre(flf.fgqva)
 
-ret = 0
+erg = 0
 
-if opt.remote:
-    cli = client.Client(opt.remote)
-    cat = cli.cat
-else:
-    cp = git.CatPipe()
-    cat = cp.join
+vs bcg.erzbgr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    png = pyv.png
+ryfr:
+    pc = tvg.PngCvcr()
+    png = pc.wbva
 
-for id in extra:
-    try:
-        for blob in cat(id):
-            sys.stdout.write(blob)
-    except KeyError, e:
-        sys.stdout.flush()
-        log('error: %s\n' % e)
-        ret = 1
+sbe vq va rkgen:
+    gel:
+        sbe oybo va png(vq):
+            flf.fgqbhg.jevgr(oybo)
+    rkprcg XrlReebe, r:
+        flf.fgqbhg.syhfu()
+        ybt('reebe: %f\a' % r)
+        erg = 1
 
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, re, errno, stat, time, math
-from bup import hashsplit, git, options, index, client
-from bup.helpers import *
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, er, reeab, fgng, gvzr, zngu
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, vaqrk, pyvrag
+sebz ohc.urycref vzcbeg *
 
 
-optspec = """
-bup save [-tc] [-n name] <filenames...>
+bcgfcrp = """
+ohc fnir [-gp] [-a anzr] <svyranzrf...>
 --
-r,remote=  remote repository path
-t,tree     output a tree id
-c,commit   output a commit id
-n,name=    name of backup set to update (if any)
-v,verbose  increase log output (can be used more than once)
-q,quiet    don't show progress meter
-smaller=   only back up files smaller than n bytes
+e,erzbgr=  erzbgr ercbfvgbel cngu
+g,gerr     bhgchg n gerr vq
+p,pbzzvg   bhgchg n pbzzvg vq
+a,anzr=    anzr bs onpxhc frg gb hcqngr (vs nal)
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
+d,dhvrg    qba'g fubj cebterff zrgre
+fznyyre=   bayl onpx hc svyrf fznyyre guna a olgrf
 """
-o = options.Options('bup save', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-if not (opt.tree or opt.commit or opt.name):
-    o.fatal("use one or more of -t, -c, -n")
-if not extra:
-    o.fatal("no filenames given")
-
-opt.progress = (istty and not opt.quiet)
-opt.smaller = parse_num(opt.smaller or 0)
-
-is_reverse = os.environ.get('BUP_SERVER_REVERSE')
-if is_reverse and opt.remote:
-    o.fatal("don't use -r in reverse mode; it's automatic")
-
-refname = opt.name and 'refs/heads/%s' % opt.name or None
-if opt.remote or is_reverse:
-    cli = client.Client(opt.remote)
-    oldref = refname and cli.read_ref(refname) or None
-    w = cli.new_packwriter()
-else:
-    cli = None
-    oldref = refname and git.read_ref(refname) or None
-    w = git.PackWriter()
-
-handle_ctrl_c()
-
-
-def eatslash(dir):
-    if dir.endswith('/'):
-        return dir[:-1]
-    else:
-        return dir
-
-
-parts = ['']
-shalists = [[]]
-
-def _push(part):
-    assert(part)
-    parts.append(part)
-    shalists.append([])
-
-def _pop(force_tree):
-    assert(len(parts) >= 1)
-    part = parts.pop()
-    shalist = shalists.pop()
-    tree = force_tree or w.new_tree(shalist)
-    if shalists:
-        shalists[-1].append(('40000', part, tree))
-    else:  # this was the toplevel, so put it back for sanity
-        shalists.append(shalist)
-    return tree
-
-lastremain = None
-def progress_report(n):
-    global count, subcount, lastremain
-    subcount += n
-    cc = count + subcount
-    pct = total and (cc*100.0/total) or 0
-    now = time.time()
-    elapsed = now - tstart
-    kps = elapsed and int(cc/1024./elapsed)
-    kps_frac = 10 ** int(math.log(kps+1, 10) - 1)
-    kps = int(kps/kps_frac)*kps_frac
-    if cc:
-        remain = elapsed*1.0/cc * (total-cc)
-    else:
-        remain = 0.0
-    if (lastremain and (remain > lastremain)
-          and ((remain - lastremain)/lastremain < 0.05)):
-        remain = lastremain
-    else:
-        lastremain = remain
-    hours = int(remain/60/60)
-    mins = int(remain/60 - hours*60)
-    secs = int(remain - hours*60*60 - mins*60)
-    if elapsed < 30:
-        remainstr = ''
-        kpsstr = ''
-    else:
-        kpsstr = '%dk/s' % kps
-        if hours:
-            remainstr = '%dh%dm' % (hours, mins)
-        elif mins:
-            remainstr = '%dm%d' % (mins, secs)
-        else:
-            remainstr = '%ds' % secs
-    progress('Saving: %.2f%% (%d/%dk, %d/%d files) %s %s\r'
-             % (pct, cc/1024, total/1024, fcount, ftotal,
-                remainstr, kpsstr))
-
-
-r = index.Reader(git.repo('bupindex'))
-
-def already_saved(ent):
-    return ent.is_valid() and w.exists(ent.sha) and ent.sha
-
-def wantrecurse_pre(ent):
-    return not already_saved(ent)
-
-def wantrecurse_during(ent):
-    return not already_saved(ent) or ent.sha_missing()
-
-total = ftotal = 0
-if opt.progress:
-    for (transname,ent) in r.filter(extra, wantrecurse=wantrecurse_pre):
-        if not (ftotal % 10024):
-            progress('Reading index: %d\r' % ftotal)
-        exists = ent.exists()
-        hashvalid = already_saved(ent)
-        ent.set_sha_missing(not hashvalid)
-        if not opt.smaller or ent.size < opt.smaller:
-            if exists and not hashvalid:
-                total += ent.size
-        ftotal += 1
-    progress('Reading index: %d, done.\n' % ftotal)
-    hashsplit.progress_callback = progress_report
-
-tstart = time.time()
-count = subcount = fcount = 0
-lastskip_name = None
-lastdir = ''
-for (transname,ent) in r.filter(extra, wantrecurse=wantrecurse_during):
-    (dir, file) = os.path.split(ent.name)
-    exists = (ent.flags & index.IX_EXISTS)
-    hashvalid = already_saved(ent)
-    wasmissing = ent.sha_missing()
-    oldsize = ent.size
-    if opt.verbose:
-        if not exists:
-            status = 'D'
-        elif not hashvalid:
-            if ent.sha == index.EMPTY_SHA:
-                status = 'A'
-            else:
-                status = 'M'
-        else:
-            status = ' '
-        if opt.verbose >= 2:
-            log('%s %-70s\n' % (status, ent.name))
-        elif not stat.S_ISDIR(ent.mode) and lastdir != dir:
-            if not lastdir.startswith(dir):
-                log('%s %-70s\n' % (status, os.path.join(dir, '')))
-            lastdir = dir
-
-    if opt.progress:
-        progress_report(0)
-    fcount += 1
+b = bcgvbaf.Bcgvbaf('ohc fnir', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+vs abg (bcg.gerr be bcg.pbzzvg be bcg.anzr):
+    b.sngny("hfr bar be zber bs -g, -p, -a")
+vs abg rkgen:
+    b.sngny("ab svyranzrf tvira")
+
+bcg.cebterff = (vfggl naq abg bcg.dhvrg)
+bcg.fznyyre = cnefr_ahz(bcg.fznyyre be 0)
+
+vf_erirefr = bf.raiveba.trg('OHC_FREIRE_ERIREFR')
+vs vf_erirefr naq bcg.erzbgr:
+    b.sngny("qba'g hfr -e va erirefr zbqr; vg'f nhgbzngvp")
+
+ersanzr = bcg.anzr naq 'ersf/urnqf/%f' % bcg.anzr be Abar
+vs bcg.erzbgr be vf_erirefr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    byqers = ersanzr naq pyv.ernq_ers(ersanzr) be Abar
+    j = pyv.arj_cnpxjevgre()
+ryfr:
+    pyv = Abar
+    byqers = ersanzr naq tvg.ernq_ers(ersanzr) be Abar
+    j = tvg.CnpxJevgre()
+
+unaqyr_pgey_p()
+
+
+qrs rngfynfu(qve):
+    vs qve.raqfjvgu('/'):
+        erghea qve[:-1]
+    ryfr:
+        erghea qve
+
+
+cnegf = ['']
+funyvfgf = [[]]
+
+qrs _chfu(cneg):
+    nffreg(cneg)
+    cnegf.nccraq(cneg)
+    funyvfgf.nccraq([])
+
+qrs _cbc(sbepr_gerr):
+    nffreg(yra(cnegf) >= 1)
+    cneg = cnegf.cbc()
+    funyvfg = funyvfgf.cbc()
+    gerr = sbepr_gerr be j.arj_gerr(funyvfg)
+    vs funyvfgf:
+        funyvfgf[-1].nccraq(('40000', cneg, gerr))
+    ryfr:  # guvf jnf gur gbcyriry, fb chg vg onpx sbe fnavgl
+        funyvfgf.nccraq(funyvfg)
+    erghea gerr
+
+ynfgerznva = Abar
+qrs cebterff_ercbeg(a):
+    tybony pbhag, fhopbhag, ynfgerznva
+    fhopbhag += a
+    pp = pbhag + fhopbhag
+    cpg = gbgny naq (pp*100.0/gbgny) be 0
+    abj = gvzr.gvzr()
+    ryncfrq = abj - gfgneg
+    xcf = ryncfrq naq vag(pp/1024./ryncfrq)
+    xcf_senp = 10 ** vag(zngu.ybt(xcf+1, 10) - 1)
+    xcf = vag(xcf/xcf_senp)*xcf_senp
+    vs pp:
+        erznva = ryncfrq*1.0/pp * (gbgny-pp)
+    ryfr:
+        erznva = 0.0
+    vs (ynfgerznva naq (erznva > ynfgerznva)
+          naq ((erznva - ynfgerznva)/ynfgerznva < 0.05)):
+        erznva = ynfgerznva
+    ryfr:
+        ynfgerznva = erznva
+    ubhef = vag(erznva/60/60)
+    zvaf = vag(erznva/60 - ubhef*60)
+    frpf = vag(erznva - ubhef*60*60 - zvaf*60)
+    vs ryncfrq < 30:
+        erznvafge = ''
+        xcffge = ''
+    ryfr:
+        xcffge = '%qx/f' % xcf
+        vs ubhef:
+            erznvafge = '%qu%qz' % (ubhef, zvaf)
+        ryvs zvaf:
+            erznvafge = '%qz%q' % (zvaf, frpf)
+        ryfr:
+            erznvafge = '%qf' % frpf
+    cebterff('Fnivat: %.2s%% (%q/%qx, %q/%q svyrf) %f %f\e'
+             % (cpg, pp/1024, gbgny/1024, spbhag, sgbgny,
+                erznvafge, xcffge))
+
+
+e = vaqrk.Ernqre(tvg.ercb('ohcvaqrk'))
+
+qrs nyernql_fnirq(rag):
+    erghea rag.vf_inyvq() naq j.rkvfgf(rag.fun) naq rag.fun
+
+qrs jnagerphefr_cer(rag):
+    erghea abg nyernql_fnirq(rag)
+
+qrs jnagerphefr_qhevat(rag):
+    erghea abg nyernql_fnirq(rag) be rag.fun_zvffvat()
+
+gbgny = sgbgny = 0
+vs bcg.cebterff:
+    sbe (genafanzr,rag) va e.svygre(rkgen, jnagerphefr=jnagerphefr_cer):
+        vs abg (sgbgny % 10024):
+            cebterff('Ernqvat vaqrk: %q\e' % sgbgny)
+        rkvfgf = rag.rkvfgf()
+        unfuinyvq = nyernql_fnirq(rag)
+        rag.frg_fun_zvffvat(abg unfuinyvq)
+        vs abg bcg.fznyyre be rag.fvmr < bcg.fznyyre:
+            vs rkvfgf naq abg unfuinyvq:
+                gbgny += rag.fvmr
+        sgbgny += 1
+    cebterff('Ernqvat vaqrk: %q, qbar.\a' % sgbgny)
+    unfufcyvg.cebterff_pnyyonpx = cebterff_ercbeg
+
+gfgneg = gvzr.gvzr()
+pbhag = fhopbhag = spbhag = 0
+ynfgfxvc_anzr = Abar
+ynfgqve = ''
+sbe (genafanzr,rag) va e.svygre(rkgen, jnagerphefr=jnagerphefr_qhevat):
+    (qve, svyr) = bf.cngu.fcyvg(rag.anzr)
+    rkvfgf = (rag.syntf & vaqrk.VK_RKVFGF)
+    unfuinyvq = nyernql_fnirq(rag)
+    jnfzvffvat = rag.fun_zvffvat()
+    byqfvmr = rag.fvmr
+    vs bcg.ireobfr:
+        vs abg rkvfgf:
+            fgnghf = 'Q'
+        ryvs abg unfuinyvq:
+            vs rag.fun == vaqrk.RZCGL_FUN:
+                fgnghf = 'N'
+            ryfr:
+                fgnghf = 'Z'
+        ryfr:
+            fgnghf = ' '
+        vs bcg.ireobfr >= 2:
+            ybt('%f %-70f\a' % (fgnghf, rag.anzr))
+        ryvs abg fgng.F_VFQVE(rag.zbqr) naq ynfgqve != qve:
+            vs abg ynfgqve.fgnegfjvgu(qve):
+                ybt('%f %-70f\a' % (fgnghf, bf.cngu.wbva(qve, '')))
+            ynfgqve = qve
+
+    vs bcg.cebterff:
+        cebterff_ercbeg(0)
+    spbhag += 1
     
-    if not exists:
-        continue
-    if opt.smaller and ent.size >= opt.smaller:
-        if exists and not hashvalid:
-            add_error('skipping large file "%s"' % ent.name)
-            lastskip_name = ent.name
-        continue
-
-    assert(dir.startswith('/'))
-    dirp = dir.split('/')
-    while parts > dirp:
-        _pop(force_tree = None)
-    if dir != '/':
-        for part in dirp[len(parts):]:
-            _push(part)
-
-    if not file:
-        # no filename portion means this is a subdir.  But
-        # sub/parentdirectories already handled in the pop/push() part above.
-        oldtree = already_saved(ent) # may be None
-        newtree = _pop(force_tree = oldtree)
-        if not oldtree:
-            if lastskip_name and lastskip_name.startswith(ent.name):
-                ent.invalidate()
-            else:
-                ent.validate(040000, newtree)
-            ent.repack()
-        if exists and wasmissing:
-            count += oldsize
-        continue
-
-    # it's not a directory
-    id = None
-    if hashvalid:
-        mode = '%o' % ent.gitmode
-        id = ent.sha
-        shalists[-1].append((mode
-                             git.mangle_name(file, ent.mode, ent.gitmode),
-                             id))
-    else:
-        if stat.S_ISREG(ent.mode):
-            try:
-                f = hashsplit.open_noatime(ent.name)
-            except IOError, e:
-                add_error(e)
-                lastskip_name = ent.name
-            except OSError, e:
-                add_error(e)
-                lastskip_name = ent.name
-            else:
-                (mode, id) = hashsplit.split_to_blob_or_tree(w, [f])
-        else:
-            if stat.S_ISDIR(ent.mode):
-                assert(0)  # handled above
-            elif stat.S_ISLNK(ent.mode):
-                try:
-                    rl = os.readlink(ent.name)
-                except OSError, e:
-                    add_error(e)
-                    lastskip_name = ent.name
-                except IOError, e:
-                    add_error(e)
-                    lastskip_name = ent.name
-                else:
-                    (mode, id) = ('120000', w.new_blob(rl))
-            else:
-                add_error(Exception('skipping special file "%s"' % ent.name))
-                lastskip_name = ent.name
-        if id:
-            ent.validate(int(mode, 8), id)
-            ent.repack()
-            shalists[-1].append((mode,
-                                 git.mangle_name(file, ent.mode, ent.gitmode),
-                                 id))
-    if exists and wasmissing:
-        count += oldsize
-        subcount = 0
-
-
-if opt.progress:
-    pct = total and count*100.0/total or 100
-    progress('Saving: %.2f%% (%d/%dk, %d/%d files), done.    \n'
-             % (pct, count/1024, total/1024, fcount, ftotal))
-
-while len(parts) > 1:
-    _pop(force_tree = None)
-assert(len(shalists) == 1)
-tree = w.new_tree(shalists[-1])
-if opt.tree:
-    print tree.encode('hex')
-if opt.commit or opt.name:
-    msg = 'bup save\n\nGenerated by command:\n%r' % sys.argv
-    ref = opt.name and ('refs/heads/%s' % opt.name) or None
-    commit = w.new_commit(oldref, tree, msg)
-    if opt.commit:
-        print commit.encode('hex')
-
-w.close()  # must close before we can update the ref
+    vs abg rkvfgf:
+        pbagvahr
+    vs bcg.fznyyre naq rag.fvmr >= bcg.fznyyre:
+        vs rkvfgf naq abg unfuinyvq:
+            nqq_reebe('fxvccvat ynetr svyr "%f"' % rag.anzr)
+            ynfgfxvc_anzr = rag.anzr
+        pbagvahr
+
+    nffreg(qve.fgnegfjvgu('/'))
+    qvec = qve.fcyvg('/')
+    juvyr cnegf > qvec:
+        _cbc(sbepr_gerr = Abar)
+    vs qve != '/':
+        sbe cneg va qvec[yra(cnegf):]:
+            _chfu(cneg)
+
+    vs abg svyr:
+        # ab svyranzr cbegvba zrnaf guvf vf n fhoqve.  Ohg
+        # fho/cneragqverpgbevrf nyernql unaqyrq va gur cbc/chfu() cneg nobir.
+        byqgerr = nyernql_fnirq(rag) # znl or Abar
+        arjgerr = _cbc(sbepr_gerr = byqgerr)
+        vs abg byqgerr:
+            vs ynfgfxvc_anzr naq ynfgfxvc_anzr.fgnegfjvgu(rag.anzr):
+                rag.vainyvqngr()
+            ryfr:
+                rag.inyvqngr(040000, arjgerr)
+            rag.ercnpx()
+        vs rkvfgf naq jnfzvffvat:
+            pbhag += byqfvmr
+        pbagvahr
+
+    # vg'f abg n qverpgbel
+    vq = Abar
+    vs unfuinyvq:
+        zbqr = '%b' % rag.tvgzbqr
+        vq = rag.fun
+        funyvfgf[-1].nccraq((zbqr
+                             tvg.znatyr_anzr(svyr, rag.zbqr, rag.tvgzbqr),
+                             vq))
+    ryfr:
+        vs fgng.F_VFERT(rag.zbqr):
+            gel:
+                s = unfufcyvg.bcra_abngvzr(rag.anzr)
+            rkprcg VBReebe, r:
+                nqq_reebe(r)
+                ynfgfxvc_anzr = rag.anzr
+            rkprcg BFReebe, r:
+                nqq_reebe(r)
+                ynfgfxvc_anzr = rag.anzr
+            ryfr:
+                (zbqr, vq) = unfufcyvg.fcyvg_gb_oybo_be_gerr(j, [s])
+        ryfr:
+            vs fgng.F_VFQVE(rag.zbqr):
+                nffreg(0)  # unaqyrq nobir
+            ryvs fgng.F_VFYAX(rag.zbqr):
+                gel:
+                    ey = bf.ernqyvax(rag.anzr)
+                rkprcg BFReebe, r:
+                    nqq_reebe(r)
+                    ynfgfxvc_anzr = rag.anzr
+                rkprcg VBReebe, r:
+                    nqq_reebe(r)
+                    ynfgfxvc_anzr = rag.anzr
+                ryfr:
+                    (zbqr, vq) = ('120000', j.arj_oybo(ey))
+            ryfr:
+                nqq_reebe(Rkprcgvba('fxvccvat fcrpvny svyr "%f"' % rag.anzr))
+                ynfgfxvc_anzr = rag.anzr
+        vs vq:
+            rag.inyvqngr(vag(zbqr, 8), vq)
+            rag.ercnpx()
+            funyvfgf[-1].nccraq((zbqr,
+                                 tvg.znatyr_anzr(svyr, rag.zbqr, rag.tvgzbqr),
+                                 vq))
+    vs rkvfgf naq jnfzvffvat:
+        pbhag += byqfvmr
+        fhopbhag = 0
+
+
+vs bcg.cebterff:
+    cpg = gbgny naq pbhag*100.0/gbgny be 100
+    cebterff('Fnivat: %.2s%% (%q/%qx, %q/%q svyrf), qbar.    \a'
+             % (cpg, pbhag/1024, gbgny/1024, spbhag, sgbgny))
+
+juvyr yra(cnegf) > 1:
+    _cbc(sbepr_gerr = Abar)
+nffreg(yra(funyvfgf) == 1)
+gerr = j.arj_gerr(funyvfgf[-1])
+vs bcg.gerr:
+    cevag gerr.rapbqr('urk')
+vs bcg.pbzzvg be bcg.anzr:
+    zft = 'ohc fnir\a\aTrarengrq ol pbzznaq:\a%e' % flf.neti
+    ers = bcg.anzr naq ('ersf/urnqf/%f' % bcg.anzr) be Abar
+    pbzzvg = j.arj_pbzzvg(byqers, gerr, zft)
+    vs bcg.pbzzvg:
+        cevag pbzzvg.rapbqr('urk')
+
+j.pybfr()  # zhfg pybfr orsber jr pna hcqngr gur ers
         
-if opt.name:
-    if cli:
-        cli.update_ref(refname, commit, oldref)
-    else:
-        git.update_ref(refname, commit, oldref)
-
-if cli:
-    cli.close()
-
-if saved_errors:
-    log('WARNING: %d errors encountered while saving.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, time
-from bup import options
-
-optspec = """
-bup tick
+vs bcg.anzr:
+    vs pyv:
+        pyv.hcqngr_ers(ersanzr, pbzzvg, byqers)
+    ryfr:
+        tvg.hcqngr_ers(ersanzr, pbzzvg, byqers)
+
+vs pyv:
+    pyv.pybfr()
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq juvyr fnivat.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc gvpx
 """
-o = options.Options('bup tick', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-t = time.time()
-tleft = 1 - (t - int(t))
-time.sleep(tleft)
-#!/usr/bin/env python
-import os, sys, stat, time
-from bup import options, git, index, drecurse
-from bup.helpers import *
-
-
-def merge_indexes(out, r1, r2):
-    for e in index.MergeIter([r1, r2]):
-        # FIXME: shouldn't we remove deleted entries eventually?  When?
-        out.add_ixentry(e)
-
-
-class IterHelper:
-    def __init__(self, l):
-        self.i = iter(l)
-        self.cur = None
-        self.next()
-
-    def next(self):
-        try:
-            self.cur = self.i.next()
-        except StopIteration:
-            self.cur = None
-        return self.cur
-
-
-def check_index(reader):
-    try:
-        log('check: checking forward iteration...\n')
-        e = None
-        d = {}
-        for e in reader.forward_iter():
-            if e.children_n:
-                if opt.verbose:
-                    log('%08x+%-4d %r\n' % (e.children_ofs, e.children_n,
-                                            e.name))
-                assert(e.children_ofs)
-                assert(e.name.endswith('/'))
-                assert(not d.get(e.children_ofs))
-                d[e.children_ofs] = 1
-            if e.flags & index.IX_HASHVALID:
-                assert(e.sha != index.EMPTY_SHA)
-                assert(e.gitmode)
-        assert(not e or e.name == '/')  # last entry is *always* /
-        log('check: checking normal iteration...\n')
-        last = None
-        for e in reader:
-            if last:
-                assert(last > e.name)
-            last = e.name
-    except:
-        log('index error! at %r\n' % e)
-        raise
-    log('check: passed.\n')
-
-
-def update_index(top):
-    ri = index.Reader(indexfile)
-    wi = index.Writer(indexfile)
-    rig = IterHelper(ri.iter(name=top))
-    tstart = int(time.time())
-
-    hashgen = None
-    if opt.fake_valid:
-        def hashgen(name):
-            return (0100644, index.FAKE_SHA)
-
-    total = 0
-    for (path,pst) in drecurse.recursive_dirlist([top], xdev=opt.xdev):
-        if opt.verbose>=2 or (opt.verbose==1 and stat.S_ISDIR(pst.st_mode)):
-            sys.stdout.write('%s\n' % path)
-            sys.stdout.flush()
-            progress('Indexing: %d\r' % total)
-        elif not (total % 128):
-            progress('Indexing: %d\r' % total)
-        total += 1
-        while rig.cur and rig.cur.name > path:  # deleted paths
-            if rig.cur.exists():
-                rig.cur.set_deleted()
-                rig.cur.repack()
-            rig.next()
-        if rig.cur and rig.cur.name == path:    # paths that already existed
-            if pst:
-                rig.cur.from_stat(pst, tstart)
-            if not (rig.cur.flags & index.IX_HASHVALID):
-                if hashgen:
-                    (rig.cur.gitmode, rig.cur.sha) = hashgen(path)
-                    rig.cur.flags |= index.IX_HASHVALID
-            if opt.fake_invalid:
-                rig.cur.invalidate()
-            rig.cur.repack()
-            rig.next()
-        else:  # new paths
-            wi.add(path, pst, hashgen = hashgen)
-    progress('Indexing: %d, done.\n' % total)
+b = bcgvbaf.Bcgvbaf('ohc gvpx', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+g = gvzr.gvzr()
+gyrsg = 1 - (g - vag(g))
+gvzr.fyrrc(gyrsg)
+#!/hfe/ova/rai clguba
+vzcbeg bf, flf, fgng, gvzr
+sebz ohc vzcbeg bcgvbaf, tvg, vaqrk, qerphefr
+sebz ohc.urycref vzcbeg *
+
+
+qrs zretr_vaqrkrf(bhg, e1, e2):
+    sbe r va vaqrk.ZretrVgre([e1, e2]):
+        # SVKZR: fubhyqa'g jr erzbir qryrgrq ragevrf riraghnyyl?  Jura?
+        bhg.nqq_vkragel(r)
+
+
+pynff VgreUrycre:
+    qrs __vavg__(frys, y):
+        frys.v = vgre(y)
+        frys.phe = Abar
+        frys.arkg()
+
+    qrs arkg(frys):
+        gel:
+            frys.phe = frys.v.arkg()
+        rkprcg FgbcVgrengvba:
+            frys.phe = Abar
+        erghea frys.phe
+
+
+qrs purpx_vaqrk(ernqre):
+    gel:
+        ybt('purpx: purpxvat sbejneq vgrengvba...\a')
+        r = Abar
+        q = {}
+        sbe r va ernqre.sbejneq_vgre():
+            vs r.puvyqera_a:
+                vs bcg.ireobfr:
+                    ybt('%08k+%-4q %e\a' % (r.puvyqera_bsf, r.puvyqera_a,
+                                            r.anzr))
+                nffreg(r.puvyqera_bsf)
+                nffreg(r.anzr.raqfjvgu('/'))
+                nffreg(abg q.trg(r.puvyqera_bsf))
+                q[r.puvyqera_bsf] = 1
+            vs r.syntf & vaqrk.VK_UNFUINYVQ:
+                nffreg(r.fun != vaqrk.RZCGL_FUN)
+                nffreg(r.tvgzbqr)
+        nffreg(abg r be r.anzr == '/')  # ynfg ragel vf *nyjnlf* /
+        ybt('purpx: purpxvat abezny vgrengvba...\a')
+        ynfg = Abar
+        sbe r va ernqre:
+            vs ynfg:
+                nffreg(ynfg > r.anzr)
+            ynfg = r.anzr
+    rkprcg:
+        ybt('vaqrk reebe! ng %e\a' % r)
+        envfr
+    ybt('purpx: cnffrq.\a')
+
+
+qrs hcqngr_vaqrk(gbc):
+    ev = vaqrk.Ernqre(vaqrksvyr)
+    jv = vaqrk.Jevgre(vaqrksvyr)
+    evt = VgreUrycre(ev.vgre(anzr=gbc))
+    gfgneg = vag(gvzr.gvzr())
+
+    unfutra = Abar
+    vs bcg.snxr_inyvq:
+        qrs unfutra(anzr):
+            erghea (0100644, vaqrk.SNXR_FUN)
+
+    gbgny = 0
+    sbe (cngu,cfg) va qerphefr.erphefvir_qveyvfg([gbc], kqri=bcg.kqri):
+        vs bcg.ireobfr>=2 be (bcg.ireobfr==1 naq fgng.F_VFQVE(cfg.fg_zbqr)):
+            flf.fgqbhg.jevgr('%f\a' % cngu)
+            flf.fgqbhg.syhfu()
+            cebterff('Vaqrkvat: %q\e' % gbgny)
+        ryvs abg (gbgny % 128):
+            cebterff('Vaqrkvat: %q\e' % gbgny)
+        gbgny += 1
+        juvyr evt.phe naq evt.phe.anzr > cngu:  # qryrgrq cnguf
+            vs evt.phe.rkvfgf():
+                evt.phe.frg_qryrgrq()
+                evt.phe.ercnpx()
+            evt.arkg()
+        vs evt.phe naq evt.phe.anzr == cngu:    # cnguf gung nyernql rkvfgrq
+            vs cfg:
+                evt.phe.sebz_fgng(cfg, gfgneg)
+            vs abg (evt.phe.syntf & vaqrk.VK_UNFUINYVQ):
+                vs unfutra:
+                    (evt.phe.tvgzbqr, evt.phe.fun) = unfutra(cngu)
+                    evt.phe.syntf |= vaqrk.VK_UNFUINYVQ
+            vs bcg.snxr_vainyvq:
+                evt.phe.vainyvqngr()
+            evt.phe.ercnpx()
+            evt.arkg()
+        ryfr:  # arj cnguf
+            jv.nqq(cngu, cfg, unfutra = unfutra)
+    cebterff('Vaqrkvat: %q, qbar.\a' % gbgny)
     
-    if ri.exists():
-        ri.save()
-        wi.flush()
-        if wi.count:
-            wr = wi.new_reader()
-            if opt.check:
-                log('check: before merging: oldfile\n')
-                check_index(ri)
-                log('check: before merging: newfile\n')
-                check_index(wr)
-            mi = index.Writer(indexfile)
-            merge_indexes(mi, ri, wr)
-            ri.close()
-            mi.close()
-            wr.close()
-        wi.abort()
-    else:
-        wi.close()
-
-
-optspec = """
-bup index <-p|m|u> [options...] <filenames...>
+    vs ev.rkvfgf():
+        ev.fnir()
+        jv.syhfu()
+        vs jv.pbhag:
+            je = jv.arj_ernqre()
+            vs bcg.purpx:
+                ybt('purpx: orsber zretvat: byqsvyr\a')
+                purpx_vaqrk(ev)
+                ybt('purpx: orsber zretvat: arjsvyr\a')
+                purpx_vaqrk(je)
+            zv = vaqrk.Jevgre(vaqrksvyr)
+            zretr_vaqrkrf(zv, ev, je)
+            ev.pybfr()
+            zv.pybfr()
+            je.pybfr()
+        jv.nobeg()
+    ryfr:
+        jv.pybfr()
+
+
+bcgfcrp = """
+ohc vaqrk <-c|z|h> [bcgvbaf...] <svyranzrf...>
 --
-p,print    print the index entries for the given names (also works with -u)
-m,modified print only added/deleted/modified files (implies -p)
-s,status   print each filename with a status char (A/M/D) (implies -p)
-H,hash     print the hash for each object next to its name (implies -p)
-l,long     print more information about each file
-u,update   (recursively) update the index entries for the given filenames
-x,xdev,one-file-system  don't cross filesystem boundaries
-fake-valid mark all index entries as up-to-date even if they aren't
-fake-invalid mark all index entries as invalid
-check      carefully check index file integrity
-f,indexfile=  the name of the index file (default 'index')
-v,verbose  increase log output (can be used more than once)
+c,cevag    cevag gur vaqrk ragevrf sbe gur tvira anzrf (nyfb jbexf jvgu -h)
+z,zbqvsvrq cevag bayl nqqrq/qryrgrq/zbqvsvrq svyrf (vzcyvrf -c)
+f,fgnghf   cevag rnpu svyranzr jvgu n fgnghf pune (N/Z/Q) (vzcyvrf -c)
+U,unfu     cevag gur unfu sbe rnpu bowrpg arkg gb vgf anzr (vzcyvrf -c)
+y,ybat     cevag zber vasbezngvba nobhg rnpu svyr
+h,hcqngr   (erphefviryl) hcqngr gur vaqrk ragevrf sbe gur tvira svyranzrf
+k,kqri,bar-svyr-flfgrz  qba'g pebff svyrflfgrz obhaqnevrf
+snxr-inyvq znex nyy vaqrk ragevrf nf hc-gb-qngr rira vs gurl nera'g
+snxr-vainyvq znex nyy vaqrk ragevrf nf vainyvq
+purpx      pnershyyl purpx vaqrk svyr vagrtevgl
+s,vaqrksvyr=  gur anzr bs gur vaqrk svyr (qrsnhyg 'vaqrk')
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
 """
-o = options.Options('bup index', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if not (opt.modified or opt['print'] or opt.status or opt.update or opt.check):
-    o.fatal('supply one or more of -p, -s, -m, -u, or --check')
-if (opt.fake_valid or opt.fake_invalid) and not opt.update:
-    o.fatal('--fake-{in,}valid are meaningless without -u')
-if opt.fake_valid and opt.fake_invalid:
-    o.fatal('--fake-valid is incompatible with --fake-invalid')
-
-git.check_repo_or_die()
-indexfile = opt.indexfile or git.repo('bupindex')
-
-handle_ctrl_c()
-
-if opt.check:
-    log('check: starting initial check.\n')
-    check_index(index.Reader(indexfile))
-
-paths = index.reduce_paths(extra)
-
-if opt.update:
-    if not paths:
-        o.fatal('update (-u) requested but no paths given')
-    for (rp,path) in paths:
-        update_index(rp)
-
-if opt['print'] or opt.status or opt.modified:
-    for (name, ent) in index.Reader(indexfile).filter(extra or ['']):
-        if (opt.modified 
-            and (ent.is_valid() or ent.is_deleted() or not ent.mode)):
-            continue
-        line = ''
-        if opt.status:
-            if ent.is_deleted():
-                line += 'D '
-            elif not ent.is_valid():
-                if ent.sha == index.EMPTY_SHA:
-                    line += 'A '
-                else:
-                    line += 'M '
-            else:
-                line += '  '
-        if opt.hash:
-            line += ent.sha.encode('hex') + ' '
-        if opt.long:
-            line += "%7s %7s " % (oct(ent.mode), oct(ent.gitmode))
-        print line + (name or './')
-
-if opt.check and (opt['print'] or opt.status or opt.modified or opt.update):
-    log('check: starting final check.\n')
-    check_index(index.Reader(indexfile))
-
-if saved_errors:
-    log('WARNING: %d errors encountered.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, os, struct
-from bup import options, helpers
-
-optspec = """
-bup rbackup-server
+b = bcgvbaf.Bcgvbaf('ohc vaqrk', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs abg (bcg.zbqvsvrq be bcg['cevag'] be bcg.fgnghf be bcg.hcqngr be bcg.purpx):
+    b.sngny('fhccyl bar be zber bs -c, -f, -z, -h, be --purpx')
+vs (bcg.snxr_inyvq be bcg.snxr_vainyvq) naq abg bcg.hcqngr:
+    b.sngny('--snxr-{va,}inyvq ner zrnavatyrff jvgubhg -h')
+vs bcg.snxr_inyvq naq bcg.snxr_vainyvq:
+    b.sngny('--snxr-inyvq vf vapbzcngvoyr jvgu --snxr-vainyvq')
+
+tvg.purpx_ercb_be_qvr()
+vaqrksvyr = bcg.vaqrksvyr be tvg.ercb('ohcvaqrk')
+
+unaqyr_pgey_p()
+
+vs bcg.purpx:
+    ybt('purpx: fgnegvat vavgvny purpx.\a')
+    purpx_vaqrk(vaqrk.Ernqre(vaqrksvyr))
+
+cnguf = vaqrk.erqhpr_cnguf(rkgen)
+
+vs bcg.hcqngr:
+    vs abg cnguf:
+        b.sngny('hcqngr (-h) erdhrfgrq ohg ab cnguf tvira')
+    sbe (ec,cngu) va cnguf:
+        hcqngr_vaqrk(ec)
+
+vs bcg['cevag'] be bcg.fgnghf be bcg.zbqvsvrq:
+    sbe (anzr, rag) va vaqrk.Ernqre(vaqrksvyr).svygre(rkgen be ['']):
+        vs (bcg.zbqvsvrq 
+            naq (rag.vf_inyvq() be rag.vf_qryrgrq() be abg rag.zbqr)):
+            pbagvahr
+        yvar = ''
+        vs bcg.fgnghf:
+            vs rag.vf_qryrgrq():
+                yvar += 'Q '
+            ryvs abg rag.vf_inyvq():
+                vs rag.fun == vaqrk.RZCGL_FUN:
+                    yvar += 'N '
+                ryfr:
+                    yvar += 'Z '
+            ryfr:
+                yvar += '  '
+        vs bcg.unfu:
+            yvar += rag.fun.rapbqr('urk') + ' '
+        vs bcg.ybat:
+            yvar += "%7f %7f " % (bpg(rag.zbqr), bpg(rag.tvgzbqr))
+        cevag yvar + (anzr be './')
+
+vs bcg.purpx naq (bcg['cevag'] be bcg.fgnghf be bcg.zbqvsvrq be bcg.hcqngr):
+    ybt('purpx: fgnegvat svany purpx.\a')
+    purpx_vaqrk(vaqrk.Ernqre(vaqrksvyr))
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgehpg
+sebz ohc vzcbeg bcgvbaf, urycref
+
+bcgfcrp = """
+ohc eonpxhc-freire
 --
-    This command is not intended to be run manually.
+    Guvf pbzznaq vf abg vagraqrq gb or eha znahnyyl.
 """
-o = options.Options('bup rbackup-server', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-if extra:
-    o.fatal('no arguments expected')
-
-# get the subcommand's argv.
-# Normally we could just pass this on the command line, but since we'll often
-# be getting called on the other end of an ssh pipe, which tends to mangle
-# argv (by sending it via the shell), this way is much safer.
-buf = sys.stdin.read(4)
-sz = struct.unpack('!I', buf)[0]
-assert(sz > 0)
-assert(sz < 1000000)
-buf = sys.stdin.read(sz)
-assert(len(buf) == sz)
-argv = buf.split('\0')
-
-# stdin/stdout are supposedly connected to 'bup server' that the caller
-# started for us (often on the other end of an ssh tunnel), so we don't want
-# to misuse them.  Move them out of the way, then replace stdout with
-# a pointer to stderr in case our subcommand wants to do something with it.
+b = bcgvbaf.Bcgvbaf('ohc eonpxhc-freire', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+# trg gur fhopbzznaq'f neti.
+# Abeznyyl jr pbhyq whfg cnff guvf ba gur pbzznaq yvar, ohg fvapr jr'yy bsgra
+# or trggvat pnyyrq ba gur bgure raq bs na ffu cvcr, juvpu graqf gb znatyr
+# neti (ol fraqvat vg ivn gur furyy), guvf jnl vf zhpu fnsre.
+ohs = flf.fgqva.ernq(4)
+fm = fgehpg.hacnpx('!V', ohs)[0]
+nffreg(fm > 0)
+nffreg(fm < 1000000)
+ohs = flf.fgqva.ernq(fm)
+nffreg(yra(ohs) == fm)
+neti = ohs.fcyvg('\0')
+
+# fgqva/fgqbhg ner fhccbfrqyl pbaarpgrq gb 'ohc freire' gung gur pnyyre
+# fgnegrq sbe hf (bsgra ba gur bgure raq bs na ffu ghaary), fb jr qba'g jnag
+# gb zvfhfr gurz.  Zbir gurz bhg bs gur jnl, gura ercynpr fgqbhg jvgu
+# n cbvagre gb fgqree va pnfr bhe fhopbzznaq jnagf gb qb fbzrguvat jvgu vg.
 #
-# It might be nice to do the same with stdin, but my experiments showed that
-# ssh seems to make its child's stderr a readable-but-never-reads-anything
-# socket.  They really should have used shutdown(SHUT_WR) on the other end
-# of it, but probably didn't.  Anyway, it's too messy, so let's just make sure
-# anyone reading from stdin is disappointed.
+# Vg zvtug or avpr gb qb gur fnzr jvgu fgqva, ohg zl rkcrevzragf fubjrq gung
+# ffu frrzf gb znxr vgf puvyq'f fgqree n ernqnoyr-ohg-arire-ernqf-nalguvat
+# fbpxrg.  Gurl ernyyl fubhyq unir hfrq fuhgqbja(FUHG_JE) ba gur bgure raq
+# bs vg, ohg cebonoyl qvqa'g.  Naljnl, vg'f gbb zrffl, fb yrg'f whfg znxr fher
+# nalbar ernqvat sebz fgqva vf qvfnccbvagrq.
 #
-# (You can't just leave stdin/stdout "not open" by closing the file
-# descriptors.  Then the next file that opens is automatically assigned 0 or 1,
-# and people *trying* to read/write stdin/stdout get screwed.)
-os.dup2(0, 3)
-os.dup2(1, 4)
-os.dup2(2, 1)
-fd = os.open('/dev/null', os.O_RDONLY)
-os.dup2(fd, 0)
-os.close(fd)
-
-os.environ['BUP_SERVER_REVERSE'] = helpers.hostname()
-os.execvp(argv[0], argv)
-sys.exit(99)
-#!/usr/bin/env python
-import sys, os, glob, subprocess, time
-from bup import options, git
-from bup.helpers import *
-
-par2_ok = 0
-nullf = open('/dev/null')
-
-def debug(s):
-    if opt.verbose:
-        log(s)
-
-def run(argv):
-    # at least in python 2.5, using "stdout=2" or "stdout=sys.stderr" below
-    # doesn't actually work, because subprocess closes fd #2 right before
-    # execing for some reason.  So we work around it by duplicating the fd
-    # first.
-    fd = os.dup(2)  # copy stderr
-    try:
-        p = subprocess.Popen(argv, stdout=fd, close_fds=False)
-        return p.wait()
-    finally:
-        os.close(fd)
-
-def par2_setup():
-    global par2_ok
-    rv = 1
-    try:
-        p = subprocess.Popen(['par2', '--help'],
-                             stdout=nullf, stderr=nullf, stdin=nullf)
-        rv = p.wait()
-    except OSError:
-        log('fsck: warning: par2 not found; disabling recovery features.\n')
-    else:
-        par2_ok = 1
-
-def parv(lvl):
-    if opt.verbose >= lvl:
-        if istty:
-            return []
-        else:
-            return ['-q']
-    else:
-        return ['-qq']
-
-def par2_generate(base):
-    return run(['par2', 'create', '-n1', '-c200'] + parv(2)
-               + ['--', base, base+'.pack', base+'.idx'])
-
-def par2_verify(base):
-    return run(['par2', 'verify'] + parv(3) + ['--', base])
-
-def par2_repair(base):
-    return run(['par2', 'repair'] + parv(2) + ['--', base])
-
-def quick_verify(base):
-    f = open(base + '.pack', 'rb')
-    f.seek(-20, 2)
-    wantsum = f.read(20)
-    assert(len(wantsum) == 20)
-    f.seek(0)
-    sum = Sha1()
-    for b in chunkyreader(f, os.fstat(f.fileno()).st_size - 20):
-        sum.update(b)
-    if sum.digest() != wantsum:
-        raise ValueError('expected %r, got %r' % (wantsum.encode('hex'),
-                                                  sum.hexdigest()))
+# (Lbh pna'g whfg yrnir fgqva/fgqbhg "abg bcra" ol pybfvat gur svyr
+# qrfpevcgbef.  Gura gur arkg svyr gung bcraf vf nhgbzngvpnyyl nffvtarq 0 be 1,
+# naq crbcyr *gelvat* gb ernq/jevgr fgqva/fgqbhg trg fperjrq.)
+bf.qhc2(0, 3)
+bf.qhc2(1, 4)
+bf.qhc2(2, 1)
+sq = bf.bcra('/qri/ahyy', bf.B_EQBAYL)
+bf.qhc2(sq, 0)
+bf.pybfr(sq)
+
+bf.raiveba['OHC_FREIRE_ERIREFR'] = urycref.ubfganzr()
+bf.rkrpic(neti[0], neti)
+flf.rkvg(99)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, tybo, fhocebprff, gvzr
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+cne2_bx = 0
+ahyys = bcra('/qri/ahyy')
+
+qrs qroht(f):
+    vs bcg.ireobfr:
+        ybt(f)
+
+qrs eha(neti):
+    # ng yrnfg va clguba 2.5, hfvat "fgqbhg=2" be "fgqbhg=flf.fgqree" orybj
+    # qbrfa'g npghnyyl jbex, orpnhfr fhocebprff pybfrf sq #2 evtug orsber
+    # rkrpvat sbe fbzr ernfba.  Fb jr jbex nebhaq vg ol qhcyvpngvat gur sq
+    # svefg.
+    sq = bf.qhc(2)  # pbcl fgqree
+    gel:
+        c = fhocebprff.Cbcra(neti, fgqbhg=sq, pybfr_sqf=Snyfr)
+        erghea c.jnvg()
+    svanyyl:
+        bf.pybfr(sq)
+
+qrs cne2_frghc():
+    tybony cne2_bx
+    ei = 1
+    gel:
+        c = fhocebprff.Cbcra(['cne2', '--uryc'],
+                             fgqbhg=ahyys, fgqree=ahyys, fgqva=ahyys)
+        ei = c.jnvg()
+    rkprcg BFReebe:
+        ybt('sfpx: jneavat: cne2 abg sbhaq; qvfnoyvat erpbirel srngherf.\a')
+    ryfr:
+        cne2_bx = 1
+
+qrs cnei(yiy):
+    vs bcg.ireobfr >= yiy:
+        vs vfggl:
+            erghea []
+        ryfr:
+            erghea ['-d']
+    ryfr:
+        erghea ['-dd']
+
+qrs cne2_trarengr(onfr):
+    erghea eha(['cne2', 'perngr', '-a1', '-p200'] + cnei(2)
+               + ['--', onfr, onfr+'.cnpx', onfr+'.vqk'])
+
+qrs cne2_irevsl(onfr):
+    erghea eha(['cne2', 'irevsl'] + cnei(3) + ['--', onfr])
+
+qrs cne2_ercnve(onfr):
+    erghea eha(['cne2', 'ercnve'] + cnei(2) + ['--', onfr])
+
+qrs dhvpx_irevsl(onfr):
+    s = bcra(onfr + '.cnpx', 'eo')
+    s.frrx(-20, 2)
+    jnagfhz = s.ernq(20)
+    nffreg(yra(jnagfhz) == 20)
+    s.frrx(0)
+    fhz = Fun1()
+    sbe o va puhaxlernqre(s, bf.sfgng(s.svyrab()).fg_fvmr - 20):
+        fhz.hcqngr(o)
+    vs fhz.qvtrfg() != jnagfhz:
+        envfr InyhrReebe('rkcrpgrq %e, tbg %e' % (jnagfhz.rapbqr('urk'),
+                                                  fhz.urkqvtrfg()))
         
 
-def git_verify(base):
-    if opt.quick:
-        try:
-            quick_verify(base)
-        except Exception, e:
-            debug('error: %s\n' % e)
-            return 1
-        return 0
-    else:
-        return run(['git', 'verify-pack', '--', base])
+qrs tvg_irevsl(onfr):
+    vs bcg.dhvpx:
+        gel:
+            dhvpx_irevsl(onfr)
+        rkprcg Rkprcgvba, r:
+            qroht('reebe: %f\a' % r)
+            erghea 1
+        erghea 0
+    ryfr:
+        erghea eha(['tvg', 'irevsl-cnpx', '--', onfr])
     
     
-def do_pack(base, last):
-    code = 0
-    if par2_ok and par2_exists and (opt.repair or not opt.generate):
-        vresult = par2_verify(base)
-        if vresult != 0:
-            if opt.repair:
-                rresult = par2_repair(base)
-                if rresult != 0:
-                    print '%s par2 repair: failed (%d)' % (last, rresult)
-                    code = rresult
-                else:
-                    print '%s par2 repair: succeeded (0)' % last
-                    code = 100
-            else:
-                print '%s par2 verify: failed (%d)' % (last, vresult)
-                code = vresult
-        else:
-            print '%s ok' % last
-    elif not opt.generate or (par2_ok and not par2_exists):
-        gresult = git_verify(base)
-        if gresult != 0:
-            print '%s git verify: failed (%d)' % (last, gresult)
-            code = gresult
-        else:
-            if par2_ok and opt.generate:
-                presult = par2_generate(base)
-                if presult != 0:
-                    print '%s par2 create: failed (%d)' % (last, presult)
-                    code = presult
-                else:
-                    print '%s ok' % last
-            else:
-                print '%s ok' % last
-    else:
-        assert(opt.generate and (not par2_ok or par2_exists))
-        debug('    skipped: par2 file already generated.\n')
-    return code
-
-
-optspec = """
-bup fsck [options...] [filenames...]
+qrs qb_cnpx(onfr, ynfg):
+    pbqr = 0
+    vs cne2_bx naq cne2_rkvfgf naq (bcg.ercnve be abg bcg.trarengr):
+        ierfhyg = cne2_irevsl(onfr)
+        vs ierfhyg != 0:
+            vs bcg.ercnve:
+                eerfhyg = cne2_ercnve(onfr)
+                vs eerfhyg != 0:
+                    cevag '%f cne2 ercnve: snvyrq (%q)' % (ynfg, eerfhyg)
+                    pbqr = eerfhyg
+                ryfr:
+                    cevag '%f cne2 ercnve: fhpprrqrq (0)' % ynfg
+                    pbqr = 100
+            ryfr:
+                cevag '%f cne2 irevsl: snvyrq (%q)' % (ynfg, ierfhyg)
+                pbqr = ierfhyg
+        ryfr:
+            cevag '%f bx' % ynfg
+    ryvs abg bcg.trarengr be (cne2_bx naq abg cne2_rkvfgf):
+        terfhyg = tvg_irevsl(onfr)
+        vs terfhyg != 0:
+            cevag '%f tvg irevsl: snvyrq (%q)' % (ynfg, terfhyg)
+            pbqr = terfhyg
+        ryfr:
+            vs cne2_bx naq bcg.trarengr:
+                cerfhyg = cne2_trarengr(onfr)
+                vs cerfhyg != 0:
+                    cevag '%f cne2 perngr: snvyrq (%q)' % (ynfg, cerfhyg)
+                    pbqr = cerfhyg
+                ryfr:
+                    cevag '%f bx' % ynfg
+            ryfr:
+                cevag '%f bx' % ynfg
+    ryfr:
+        nffreg(bcg.trarengr naq (abg cne2_bx be cne2_rkvfgf))
+        qroht('    fxvccrq: cne2 svyr nyernql trarengrq.\a')
+    erghea pbqr
+
+
+bcgfcrp = """
+ohc sfpx [bcgvbaf...] [svyranzrf...]
 --
-r,repair    attempt to repair errors using par2 (dangerous!)
-g,generate  generate auto-repair information using par2
-v,verbose   increase verbosity (can be used more than once)
-quick       just check pack sha1sum, don't use git verify-pack
-j,jobs=     run 'n' jobs in parallel
-par2-ok     immediately return 0 if par2 is ok, 1 if not
-disable-par2  ignore par2 even if it is available
+e,ercnve    nggrzcg gb ercnve reebef hfvat cne2 (qnatrebhf!)
+t,trarengr  trarengr nhgb-ercnve vasbezngvba hfvat cne2
+i,ireobfr   vapernfr ireobfvgl (pna or hfrq zber guna bapr)
+dhvpx       whfg purpx cnpx fun1fhz, qba'g hfr tvg irevsl-cnpx
+w,wbof=     eha 'a' wbof va cnenyyry
+cne2-bx     vzzrqvngryl erghea 0 vs cne2 vf bx, 1 vs abg
+qvfnoyr-cne2  vtaber cne2 rira vs vg vf ninvynoyr
 """
-o = options.Options('bup fsck', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-par2_setup()
-if opt.par2_ok:
-    if par2_ok:
-        sys.exit(0)  # 'true' in sh
-    else:
-        sys.exit(1)
-if opt.disable_par2:
-    par2_ok = 0
-
-git.check_repo_or_die()
-
-if not extra:
-    debug('fsck: No filenames given: checking all packs.\n')
-    extra = glob.glob(git.repo('objects/pack/*.pack'))
-
-code = 0
-count = 0
-outstanding = {}
-for name in extra:
-    if name.endswith('.pack'):
-        base = name[:-5]
-    elif name.endswith('.idx'):
-        base = name[:-4]
-    elif name.endswith('.par2'):
-        base = name[:-5]
-    elif os.path.exists(name + '.pack'):
-        base = name
-    else:
-        raise Exception('%s is not a pack file!' % name)
-    (dir,last) = os.path.split(base)
-    par2_exists = os.path.exists(base + '.par2')
-    if par2_exists and os.stat(base + '.par2').st_size == 0:
-        par2_exists = 0
-    sys.stdout.flush()
-    debug('fsck: checking %s (%s)\n
-          % (last, par2_ok and par2_exists and 'par2' or 'git'))
-    if not opt.verbose:
-        progress('fsck (%d/%d)\r' % (count, len(extra)))
+b = bcgvbaf.Bcgvbaf('ohc sfpx', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+cne2_frghc()
+vs bcg.cne2_bx:
+    vs cne2_bx:
+        flf.rkvg(0)  # 'gehr' va fu
+    ryfr:
+        flf.rkvg(1)
+vs bcg.qvfnoyr_cne2:
+    cne2_bx = 0
+
+tvg.purpx_ercb_be_qvr()
+
+vs abg rkgen:
+    qroht('sfpx: Ab svyranzrf tvira: purpxvat nyy cnpxf.\a')
+    rkgen = tybo.tybo(tvg.ercb('bowrpgf/cnpx/*.cnpx'))
+
+pbqr = 0
+pbhag = 0
+bhgfgnaqvat = {}
+sbe anzr va rkgen:
+    vs anzr.raqfjvgu('.cnpx'):
+        onfr = anzr[:-5]
+    ryvs anzr.raqfjvgu('.vqk'):
+        onfr = anzr[:-4]
+    ryvs anzr.raqfjvgu('.cne2'):
+        onfr = anzr[:-5]
+    ryvs bf.cngu.rkvfgf(anzr + '.cnpx'):
+        onfr = anzr
+    ryfr:
+        envfr Rkprcgvba('%f vf abg n cnpx svyr!' % anzr)
+    (qve,ynfg) = bf.cngu.fcyvg(onfr)
+    cne2_rkvfgf = bf.cngu.rkvfgf(onfr + '.cne2')
+    vs cne2_rkvfgf naq bf.fgng(onfr + '.cne2').fg_fvmr == 0:
+        cne2_rkvfgf = 0
+    flf.fgqbhg.syhfu()
+    qroht('sfpx: purpxvat %f (%f)\a
+          % (ynfg, cne2_bx naq cne2_rkvfgf naq 'cne2' be 'tvg'))
+    vs abg bcg.ireobfr:
+        cebterff('sfpx (%q/%q)\e' % (pbhag, yra(rkgen)))
     
-    if not opt.jobs:
-        nc = do_pack(base, last)
-        code = code or nc
-        count += 1
-    else:
-        while len(outstanding) >= opt.jobs:
-            (pid,nc) = os.wait()
-            nc >>= 8
-            if pid in outstanding:
-                del outstanding[pid]
-                code = code or nc
-                count += 1
-        pid = os.fork()
-        if pid:  # parent
-            outstanding[pid] = 1
-        else: # child
-            try:
-                sys.exit(do_pack(base, last))
-            except Exception, e:
-                log('exception: %r\n' % e)
-                sys.exit(99)
+    vs abg bcg.wbof:
+        ap = qb_cnpx(onfr, ynfg)
+        pbqr = pbqr be ap
+        pbhag += 1
+    ryfr:
+        juvyr yra(bhgfgnaqvat) >= bcg.wbof:
+            (cvq,ap) = bf.jnvg()
+            ap >>= 8
+            vs cvq va bhgfgnaqvat:
+                qry bhgfgnaqvat[cvq]
+                pbqr = pbqr be ap
+                pbhag += 1
+        cvq = bf.sbex()
+        vs cvq:  # cnerag
+            bhgfgnaqvat[cvq] = 1
+        ryfr: # puvyq
+            gel:
+                flf.rkvg(qb_cnpx(onfr, ynfg))
+            rkprcg Rkprcgvba, r:
+                ybt('rkprcgvba: %e\a' % r)
+                flf.rkvg(99)
                 
-while len(outstanding):
-    (pid,nc) = os.wait()
-    nc >>= 8
-    if pid in outstanding:
-        del outstanding[pid]
-        code = code or nc
-        count += 1
-    if not opt.verbose:
-        progress('fsck (%d/%d)\r' % (count, len(extra)))
-
-if not opt.verbose and istty:
-    log('fsck done.           \n')
-sys.exit(code)
-#!/usr/bin/env python
-import sys, os, struct, getopt, subprocess, signal
-from bup import options, ssh
-from bup.helpers import *
-
-optspec = """
-bup rbackup <hostname> index ...
-bup rbackup <hostname> save ...
-bup rbackup <hostname> split ...
+juvyr yra(bhgfgnaqvat):
+    (cvq,ap) = bf.jnvg()
+    ap >>= 8
+    vs cvq va bhgfgnaqvat:
+        qry bhgfgnaqvat[cvq]
+        pbqr = pbqr be ap
+        pbhag += 1
+    vs abg bcg.ireobfr:
+        cebterff('sfpx (%q/%q)\e' % (pbhag, yra(rkgen)))
+
+vs abg bcg.ireobfr naq vfggl:
+    ybt('sfpx qbar.           \a')
+flf.rkvg(pbqr)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgehpg, trgbcg, fhocebprff, fvtany
+sebz ohc vzcbeg bcgvbaf, ffu
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+ohc eonpxhc <ubfganzr> vaqrk ...
+ohc eonpxhc <ubfganzr> fnir ...
+ohc eonpxhc <ubfganzr> fcyvg ...
 """
-o = options.Options('bup rbackup', optspec, optfunc=getopt.getopt)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-if len(extra) < 2:
-    o.fatal('arguments expected')
-
-class SigException(Exception):
-    def __init__(self, signum):
-        self.signum = signum
-        Exception.__init__(self, 'signal %d received' % signum)
-def handler(signum, frame):
-    raise SigException(signum)
-
-signal.signal(signal.SIGTERM, handler)
-signal.signal(signal.SIGINT, handler)
-
-sp = None
-p = None
-ret = 99
-
-try:
-    hostname = extra[0]
-    argv = extra[1:]
-    p = ssh.connect(hostname, 'rbackup-server')
-
-    argvs = '\0'.join(['bup'] + argv)
-    p.stdin.write(struct.pack('!I', len(argvs)) + argvs)
-    p.stdin.flush()
-
-    main_exe = os.environ.get('BUP_MAIN_EXE') or sys.argv[0]
-    sp = subprocess.Popen([main_exe, 'server'], stdin=p.stdout, stdout=p.stdin)
-
-    p.stdin.close()
-    p.stdout.close()
-
-finally:
-    while 1:
-        # if we get a signal while waiting, we have to keep waiting, just
-        # in case our child doesn't die.
-        try:
-            ret = p.wait()
-            sp.wait()
-            break
-        except SigException, e:
-            log('\nbup rbackup: %s\n' % e)
-            os.kill(p.pid, e.signum)
-            ret = 84
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, os, re
-from bup import options
-
-optspec = """
-bup newliner
+b = bcgvbaf.Bcgvbaf('ohc eonpxhc', bcgfcrp, bcgshap=trgbcg.trgbcg)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+vs yra(rkgen) < 2:
+    b.sngny('nethzragf rkcrpgrq')
+
+pynff FvtRkprcgvba(Rkprcgvba):
+    qrs __vavg__(frys, fvtahz):
+        frys.fvtahz = fvtahz
+        Rkprcgvba.__vavg__(frys, 'fvtany %q erprvirq' % fvtahz)
+qrs unaqyre(fvtahz, senzr):
+    envfr FvtRkprcgvba(fvtahz)
+
+fvtany.fvtany(fvtany.FVTGREZ, unaqyre)
+fvtany.fvtany(fvtany.FVTVAG, unaqyre)
+
+fc = Abar
+c = Abar
+erg = 99
+
+gel:
+    ubfganzr = rkgen[0]
+    neti = rkgen[1:]
+    c = ffu.pbaarpg(ubfganzr, 'eonpxhc-freire')
+
+    netif = '\0'.wbva(['ohc'] + neti)
+    c.fgqva.jevgr(fgehpg.cnpx('!V', yra(netif)) + netif)
+    c.fgqva.syhfu()
+
+    znva_rkr = bf.raiveba.trg('OHC_ZNVA_RKR') be flf.neti[0]
+    fc = fhocebprff.Cbcra([znva_rkr, 'freire'], fgqva=c.fgqbhg, fgqbhg=c.fgqva)
+
+    c.fgqva.pybfr()
+    c.fgqbhg.pybfr()
+
+svanyyl:
+    juvyr 1:
+        # vs jr trg n fvtany juvyr jnvgvat, jr unir gb xrrc jnvgvat, whfg
+        # va pnfr bhe puvyq qbrfa'g qvr.
+        gel:
+            erg = c.jnvg()
+            fc.jnvg()
+            oernx
+        rkprcg FvtRkprcgvba, r:
+            ybt('\aohc eonpxhc: %f\a' % r)
+            bf.xvyy(c.cvq, r.fvtahz)
+            erg = 84
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, er
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc arjyvare
 """
-o = options.Options('bup newliner', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-r = re.compile(r'([\r\n])')
-lastlen = 0
-all = ''
-while 1:
-    l = r.split(all, 1)
-    if len(l) <= 1:
-        try:
-            b = os.read(sys.stdin.fileno(), 4096)
-        except KeyboardInterrupt:
-            break
-        if not b:
-            break
-        all += b
-    else:
-        assert(len(l) == 3)
-        (line, splitchar, all) = l
-        #splitchar = '\n'
-        sys.stdout.write('%-*s%s' % (lastlen, line, splitchar))
-        if splitchar == '\r':
-            lastlen = len(line)
-        else:
-            lastlen = 0
-        sys.stdout.flush()
-
-if lastlen or all:
-    sys.stdout.write('%-*s\n' % (lastlen, all))
-#!/usr/bin/env python
-import sys
-from bup import options, git, _hashsplit
-from bup.helpers import *
-
-
-optspec = """
-bup margin
+b = bcgvbaf.Bcgvbaf('ohc arjyvare', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+e = er.pbzcvyr(e'([\e\a])')
+ynfgyra = 0
+nyy = ''
+juvyr 1:
+    y = e.fcyvg(nyy, 1)
+    vs yra(y) <= 1:
+        gel:
+            o = bf.ernq(flf.fgqva.svyrab(), 4096)
+        rkprcg XrlobneqVagreehcg:
+            oernx
+        vs abg o:
+            oernx
+        nyy += o
+    ryfr:
+        nffreg(yra(y) == 3)
+        (yvar, fcyvgpune, nyy) = y
+        #fcyvgpune = '\a'
+        flf.fgqbhg.jevgr('%-*f%f' % (ynfgyra, yvar, fcyvgpune))
+        vs fcyvgpune == '\e':
+            ynfgyra = yra(yvar)
+        ryfr:
+            ynfgyra = 0
+        flf.fgqbhg.syhfu()
+
+vs ynfgyra be nyy:
+    flf.fgqbhg.jevgr('%-*f\a' % (ynfgyra, nyy))
+#!/hfe/ova/rai clguba
+vzcbeg flf
+sebz ohc vzcbeg bcgvbaf, tvg, _unfufcyvg
+sebz ohc.urycref vzcbeg *
+
+
+bcgfcrp = """
+ohc znetva
 """
-o = options.Options('bup margin', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-git.check_repo_or_die()
-#git.ignore_midx = 1
-
-mi = git.PackIdxList(git.repo('objects/pack'))
-last = '\0'*20
-longmatch = 0
-for i in mi:
-    if i == last:
-        continue
-    #assert(str(i) >= last)
-    pm = _hashsplit.bitmatch(last, i)
-    longmatch = max(longmatch, pm)
-    last = i
-print longmatch
-#!/usr/bin/env python
-from bup import options, drecurse
-from bup.helpers import *
-
-optspec = """
-bup drecurse <path>
+b = bcgvbaf.Bcgvbaf('ohc znetva', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+tvg.purpx_ercb_be_qvr()
+#tvg.vtaber_zvqk = 1
+
+zv = tvg.CnpxVqkYvfg(tvg.ercb('bowrpgf/cnpx'))
+ynfg = '\0'*20
+ybatzngpu = 0
+sbe v va zv:
+    vs v == ynfg:
+        pbagvahr
+    #nffreg(fge(v) >= ynfg)
+    cz = _unfufcyvg.ovgzngpu(ynfg, v)
+    ybatzngpu = znk(ybatzngpu, cz)
+    ynfg = v
+cevag ybatzngpu
+#!/hfe/ova/rai clguba
+sebz ohc vzcbeg bcgvbaf, qerphefr
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+ohc qerphefr <cngu>
 --
-x,xdev,one-file-system   don't cross filesystem boundaries
-q,quiet  don't actually print filenames
-profile  run under the python profiler
+k,kqri,bar-svyr-flfgrz   qba'g pebff svyrflfgrz obhaqnevrf
+d,dhvrg  qba'g npghnyyl cevag svyranzrf
+cebsvyr  eha haqre gur clguba cebsvyre
 """
-o = options.Options('bup drecurse', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one filename expected")
-
-it = drecurse.recursive_dirlist(extra, opt.xdev)
-if opt.profile:
-    import cProfile
-    def do_it():
-        for i in it:
-            pass
-    cProfile.run('do_it()')
-else:
-    if opt.quiet:
-        for i in it:
-            pass
-    else:
-        for (name,st) in it:
-            print name
-
-if saved_errors:
-    log('WARNING: %d errors encountered.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, time, struct
-from bup import hashsplit, git, options, client
-from bup.helpers import *
-from subprocess import PIPE
-
-
-optspec = """
-bup split [-tcb] [-n name] [--bench] [filenames...]
+b = bcgvbaf.Bcgvbaf('ohc qerphefr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar svyranzr rkcrpgrq")
+
+vg = qerphefr.erphefvir_qveyvfg(rkgen, bcg.kqri)
+vs bcg.cebsvyr:
+    vzcbeg pCebsvyr
+    qrs qb_vg():
+        sbe v va vg:
+            cnff
+    pCebsvyr.eha('qb_vg()')
+ryfr:
+    vs bcg.dhvrg:
+        sbe v va vg:
+            cnff
+    ryfr:
+        sbe (anzr,fg) va vg:
+            cevag anzr
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr, fgehpg
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+sebz fhocebprff vzcbeg CVCR
+
+
+bcgfcrp = """
+ohc fcyvg [-gpo] [-a anzr] [--orapu] [svyranzrf...]
 --
-r,remote=  remote repository path
-b,blobs    output a series of blob ids
-t,tree     output a tree id
-c,commit   output a commit id
-n,name=    name of backup set to update (if any)
-N,noop     don't actually save the data anywhere
-q,quiet    don't print progress messages
-v,verbose  increase log output (can be used more than once)
-copy       just copy input to output, hashsplitting along the way
-bench      print benchmark timings to stderr
-max-pack-size=  maximum bytes in a single pack
-max-pack-objects=  maximum number of objects in a single pack
-fanout=  maximum number of blobs in a single tree
+e,erzbgr=  erzbgr ercbfvgbel cngu
+o,oybof    bhgchg n frevrf bs oybo vqf
+g,gerr     bhgchg n gerr vq
+p,pbzzvg   bhgchg n pbzzvg vq
+a,anzr=    anzr bs onpxhc frg gb hcqngr (vs nal)
+A,abbc     qba'g npghnyyl fnir gur qngn naljurer
+d,dhvrg    qba'g cevag cebterff zrffntrf
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
+pbcl       whfg pbcl vachg gb bhgchg, unfufcyvggvat nybat gur jnl
+orapu      cevag orapuznex gvzvatf gb fgqree
+znk-cnpx-fvmr=  znkvzhz olgrf va n fvatyr cnpx
+znk-cnpx-bowrpgf=  znkvzhz ahzore bs bowrpgf va n fvatyr cnpx
+snabhg=  znkvzhz ahzore bs oybof va n fvatyr gerr
 """
-o = options.Options('bup split', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-if not (opt.blobs or opt.tree or opt.commit or opt.name or
-        opt.noop or opt.copy):
-    o.fatal("use one or more of -b, -t, -c, -n, -N, --copy")
-if (opt.noop or opt.copy) and (opt.blobs or opt.tree or 
-                               opt.commit or opt.name):
-    o.fatal('-N is incompatible with -b, -t, -c, -n')
-
-if opt.verbose >= 2:
-    git.verbose = opt.verbose - 1
-    opt.bench = 1
-if opt.max_pack_size:
-    hashsplit.max_pack_size = parse_num(opt.max_pack_size)
-if opt.max_pack_objects:
-    hashsplit.max_pack_objects = parse_num(opt.max_pack_objects)
-if opt.fanout:
-    hashsplit.fanout = parse_num(opt.fanout)
-if opt.blobs:
-    hashsplit.fanout = 0
-
-is_reverse = os.environ.get('BUP_SERVER_REVERSE')
-if is_reverse and opt.remote:
-    o.fatal("don't use -r in reverse mode; it's automatic")
-start_time = time.time()
-
-refname = opt.name and 'refs/heads/%s' % opt.name or None
-if opt.noop or opt.copy:
-    cli = w = oldref = None
-elif opt.remote or is_reverse:
-    cli = client.Client(opt.remote)
-    oldref = refname and cli.read_ref(refname) or None
-    w = cli.new_packwriter()
-else:
-    cli = None
-    oldref = refname and git.read_ref(refname) or None
-    w = git.PackWriter()
-
-files = extra and (open(fn) for fn in extra) or [sys.stdin]
-if w:
-    shalist = hashsplit.split_to_shalist(w, files)
-    tree = w.new_tree(shalist)
-else:
-    last = 0
-    for (blob, bits) in hashsplit.hashsplit_iter(files):
-        hashsplit.total_split += len(blob)
-        if opt.copy:
-            sys.stdout.write(str(blob))
-        megs = hashsplit.total_split/1024/1024
-        if not opt.quiet and last != megs:
-            progress('%d Mbytes read\r' % megs)
-            last = megs
-    progress('%d Mbytes read, done.\n' % megs)
-
-if opt.verbose:
-    log('\n')
-if opt.blobs:
-    for (mode,name,bin) in shalist:
-        print bin.encode('hex')
-if opt.tree:
-    print tree.encode('hex')
-if opt.commit or opt.name:
-    msg = 'bup split\n\nGenerated by command:\n%r' % sys.argv
-    ref = opt.name and ('refs/heads/%s' % opt.name) or None
-    commit = w.new_commit(oldref, tree, msg)
-    if opt.commit:
-        print commit.encode('hex')
-
-if w:
-    w.close()  # must close before we can update the ref
+b = bcgvbaf.Bcgvbaf('ohc fcyvg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+vs abg (bcg.oybof be bcg.gerr be bcg.pbzzvg be bcg.anzr be
+        bcg.abbc be bcg.pbcl):
+    b.sngny("hfr bar be zber bs -o, -g, -p, -a, -A, --pbcl")
+vs (bcg.abbc be bcg.pbcl) naq (bcg.oybof be bcg.gerr be 
+                               bcg.pbzzvg be bcg.anzr):
+    b.sngny('-A vf vapbzcngvoyr jvgu -o, -g, -p, -a')
+
+vs bcg.ireobfr >= 2:
+    tvg.ireobfr = bcg.ireobfr - 1
+    bcg.orapu = 1
+vs bcg.znk_cnpx_fvmr:
+    unfufcyvg.znk_cnpx_fvmr = cnefr_ahz(bcg.znk_cnpx_fvmr)
+vs bcg.znk_cnpx_bowrpgf:
+    unfufcyvg.znk_cnpx_bowrpgf = cnefr_ahz(bcg.znk_cnpx_bowrpgf)
+vs bcg.snabhg:
+    unfufcyvg.snabhg = cnefr_ahz(bcg.snabhg)
+vs bcg.oybof:
+    unfufcyvg.snabhg = 0
+
+vf_erirefr = bf.raiveba.trg('OHC_FREIRE_ERIREFR')
+vs vf_erirefr naq bcg.erzbgr:
+    b.sngny("qba'g hfr -e va erirefr zbqr; vg'f nhgbzngvp")
+fgneg_gvzr = gvzr.gvzr()
+
+ersanzr = bcg.anzr naq 'ersf/urnqf/%f' % bcg.anzr be Abar
+vs bcg.abbc be bcg.pbcl:
+    pyv = j = byqers = Abar
+ryvs bcg.erzbgr be vf_erirefr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    byqers = ersanzr naq pyv.ernq_ers(ersanzr) be Abar
+    j = pyv.arj_cnpxjevgre()
+ryfr:
+    pyv = Abar
+    byqers = ersanzr naq tvg.ernq_ers(ersanzr) be Abar
+    j = tvg.CnpxJevgre()
+
+svyrf = rkgen naq (bcra(sa) sbe sa va rkgen) be [flf.fgqva]
+vs j:
+    funyvfg = unfufcyvg.fcyvg_gb_funyvfg(j, svyrf)
+    gerr = j.arj_gerr(funyvfg)
+ryfr:
+    ynfg = 0
+    sbe (oybo, ovgf) va unfufcyvg.unfufcyvg_vgre(svyrf):
+        unfufcyvg.gbgny_fcyvg += yra(oybo)
+        vs bcg.pbcl:
+            flf.fgqbhg.jevgr(fge(oybo))
+        zrtf = unfufcyvg.gbgny_fcyvg/1024/1024
+        vs abg bcg.dhvrg naq ynfg != zrtf:
+            cebterff('%q Zolgrf ernq\e' % zrtf)
+            ynfg = zrtf
+    cebterff('%q Zolgrf ernq, qbar.\a' % zrtf)
+
+vs bcg.ireobfr:
+    ybt('\a')
+vs bcg.oybof:
+    sbe (zbqr,anzr,ova) va funyvfg:
+        cevag ova.rapbqr('urk')
+vs bcg.gerr:
+    cevag gerr.rapbqr('urk')
+vs bcg.pbzzvg be bcg.anzr:
+    zft = 'ohc fcyvg\a\aTrarengrq ol pbzznaq:\a%e' % flf.neti
+    ers = bcg.anzr naq ('ersf/urnqf/%f' % bcg.anzr) be Abar
+    pbzzvg = j.arj_pbzzvg(byqers, gerr, zft)
+    vs bcg.pbzzvg:
+        cevag pbzzvg.rapbqr('urk')
+
+vs j:
+    j.pybfr()  # zhfg pybfr orsber jr pna hcqngr gur ers
         
-if opt.name:
-    if cli:
-        cli.update_ref(refname, commit, oldref)
-    else:
-        git.update_ref(refname, commit, oldref)
-
-if cli:
-    cli.close()
-
-secs = time.time() - start_time
-size = hashsplit.total_split
-if opt.bench:
-    log('\nbup: %.2fkbytes in %.2f secs = %.2f kbytes/sec\n'
-        % (size/1024., secs, size/1024./secs))
-#!/usr/bin/env python
-import sys, re, struct, mmap
-from bup import git, options
-from bup.helpers import *
-
-
-def s_from_bytes(bytes):
-    clist = [chr(b) for b in bytes]
-    return ''.join(clist)
-
-
-def report(count):
-    fields = ['VmSize', 'VmRSS', 'VmData', 'VmStk']
-    d = {}
-    for line in open('/proc/self/status').readlines():
-        l = re.split(r':\s*', line.strip(), 1)
-        d[l[0]] = l[1]
-    if count >= 0:
-        e1 = count
-        fields = [d[k] for k in fields]
-    else:
-        e1 = ''
-    print ('%9s  ' + ('%10s ' * len(fields))) % tuple([e1] + fields)
-    sys.stdout.flush()
-
-
-optspec = """
-bup memtest [-n elements] [-c cycles]
+vs bcg.anzr:
+    vs pyv:
+        pyv.hcqngr_ers(ersanzr, pbzzvg, byqers)
+    ryfr:
+        tvg.hcqngr_ers(ersanzr, pbzzvg, byqers)
+
+vs pyv:
+    pyv.pybfr()
+
+frpf = gvzr.gvzr() - fgneg_gvzr
+fvmr = unfufcyvg.gbgny_fcyvg
+vs bcg.orapu:
+    ybt('\aohc: %.2sxolgrf va %.2s frpf = %.2s xolgrf/frp\a'
+        % (fvmr/1024., frpf, fvmr/1024./frpf))
+#!/hfe/ova/rai clguba
+vzcbeg flf, er, fgehpg, zznc
+sebz ohc vzcbeg tvg, bcgvbaf
+sebz ohc.urycref vzcbeg *
+
+
+qrs f_sebz_olgrf(olgrf):
+    pyvfg = [pue(o) sbe o va olgrf]
+    erghea ''.wbva(pyvfg)
+
+
+qrs ercbeg(pbhag):
+    svryqf = ['IzFvmr', 'IzEFF', 'IzQngn', 'IzFgx']
+    q = {}
+    sbe yvar va bcra('/cebp/frys/fgnghf').ernqyvarf():
+        y = er.fcyvg(e':\f*', yvar.fgevc(), 1)
+        q[y[0]] = y[1]
+    vs pbhag >= 0:
+        r1 = pbhag
+        svryqf = [q[x] sbe x va svryqf]
+    ryfr:
+        r1 = ''
+    cevag ('%9f  ' + ('%10f ' * yra(svryqf))) % ghcyr([r1] + svryqf)
+    flf.fgqbhg.syhfu()
+
+
+bcgfcrp = """
+ohc zrzgrfg [-a ryrzragf] [-p plpyrf]
 --
-n,number=  number of objects per cycle
-c,cycles=  number of cycles to run
-ignore-midx  ignore .midx files, use only .idx files
+a,ahzore=  ahzore bs bowrpgf cre plpyr
+p,plpyrf=  ahzore bs plpyrf gb eha
+vtaber-zvqk  vtaber .zvqk svyrf, hfr bayl .vqk svyrf
 """
-o = options.Options('bup memtest', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal('no arguments expected')
-
-git.ignore_midx = opt.ignore_midx
-
-git.check_repo_or_die()
-m = git.PackIdxList(git.repo('objects/pack'))
-
-cycles = opt.cycles or 100
-number = opt.number or 10000
-
-report(-1)
-f = open('/dev/urandom')
-a = mmap.mmap(-1, 20)
-report(0)
-for c in xrange(cycles):
-    for n in xrange(number):
-        b = f.read(3)
-        if 0:
-            bytes = list(struct.unpack('!BBB', b)) + [0]*17
-            bytes[2] &= 0xf0
-            bin = struct.pack('!20s', s_from_bytes(bytes))
-        else:
-            a[0:2] = b[0:2]
-            a[2] = chr(ord(b[2]) & 0xf0)
-            bin = str(a[0:20])
-        #print bin.encode('hex')
-        m.exists(bin)
-    report((c+1)*number)
-#!/usr/bin/env python
-import sys, os, stat
-from bup import options, git, vfs
-from bup.helpers import *
-
-def print_node(text, n):
-    prefix = ''
-    if opt.hash:
-        prefix += "%s " % n.hash.encode('hex')
-    if stat.S_ISDIR(n.mode):
-        print '%s%s/' % (prefix, text)
-    elif stat.S_ISLNK(n.mode):
-        print '%s%s@' % (prefix, text)
-    else:
-        print '%s%s' % (prefix, text)
-
-
-optspec = """
-bup ls <dirs...>
+b = bcgvbaf.Bcgvbaf('ohc zrzgrfg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+tvg.vtaber_zvqk = bcg.vtaber_zvqk
+
+tvg.purpx_ercb_be_qvr()
+z = tvg.CnpxVqkYvfg(tvg.ercb('bowrpgf/cnpx'))
+
+plpyrf = bcg.plpyrf be 100
+ahzore = bcg.ahzore be 10000
+
+ercbeg(-1)
+s = bcra('/qri/henaqbz')
+n = zznc.zznc(-1, 20)
+ercbeg(0)
+sbe p va kenatr(plpyrf):
+    sbe a va kenatr(ahzore):
+        o = s.ernq(3)
+        vs 0:
+            olgrf = yvfg(fgehpg.hacnpx('!OOO', o)) + [0]*17
+            olgrf[2] &= 0ks0
+            ova = fgehpg.cnpx('!20f', f_sebz_olgrf(olgrf))
+        ryfr:
+            n[0:2] = o[0:2]
+            n[2] = pue(beq(o[2]) & 0ks0)
+            ova = fge(n[0:20])
+        #cevag ova.rapbqr('urk')
+        z.rkvfgf(ova)
+    ercbeg((p+1)*ahzore)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgng
+sebz ohc vzcbeg bcgvbaf, tvg, isf
+sebz ohc.urycref vzcbeg *
+
+qrs cevag_abqr(grkg, a):
+    cersvk = ''
+    vs bcg.unfu:
+        cersvk += "%f " % a.unfu.rapbqr('urk')
+    vs fgng.F_VFQVE(a.zbqr):
+        cevag '%f%f/' % (cersvk, grkg)
+    ryvs fgng.F_VFYAX(a.zbqr):
+        cevag '%f%f@' % (cersvk, grkg)
+    ryfr:
+        cevag '%f%f' % (cersvk, grkg)
+
+
+bcgfcrp = """
+ohc yf <qvef...>
 --
-s,hash   show hash for each file
+f,unfu   fubj unfu sbe rnpu svyr
 """
-o = options.Options('bup ls', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-top = vfs.RefList(None)
-
-if not extra:
-    extra = ['/']
-
-ret = 0
-for d in extra:
-    try:
-        n = top.lresolve(d)
-        if stat.S_ISDIR(n.mode):
-            for sub in n:
-                print_node(sub.name, sub)
-        else:
-            print_node(d, n)
-    except vfs.NodeError, e:
-        log('error: %s\n' % e)
-        ret = 1
-
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, os, re, stat, readline, fnmatch
-from bup import options, git, shquote, vfs
-from bup.helpers import *
-
-def node_name(text, n):
-    if stat.S_ISDIR(n.mode):
-        return '%s/' % text
-    elif stat.S_ISLNK(n.mode):
-        return '%s@' % text
-    else:
-        return '%s' % text
-
-
-def do_ls(path, n):
-    l = []
-    if stat.S_ISDIR(n.mode):
-        for sub in n:
-            l.append(node_name(sub.name, sub))
-    else:
-        l.append(node_name(path, n))
-    print columnate(l, '')
+b = bcgvbaf.Bcgvbaf('ohc yf', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+gbc = isf.ErsYvfg(Abar)
+
+vs abg rkgen:
+    rkgen = ['/']
+
+erg = 0
+sbe q va rkgen:
+    gel:
+        a = gbc.yerfbyir(q)
+        vs fgng.F_VFQVE(a.zbqr):
+            sbe fho va a:
+                cevag_abqr(fho.anzr, fho)
+        ryfr:
+            cevag_abqr(q, a)
+    rkprcg isf.AbqrReebe, r:
+        ybt('reebe: %f\a' % r)
+        erg = 1
+
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, er, fgng, ernqyvar, sazngpu
+sebz ohc vzcbeg bcgvbaf, tvg, fudhbgr, isf
+sebz ohc.urycref vzcbeg *
+
+qrs abqr_anzr(grkg, a):
+    vs fgng.F_VFQVE(a.zbqr):
+        erghea '%f/' % grkg
+    ryvs fgng.F_VFYAX(a.zbqr):
+        erghea '%f@' % grkg
+    ryfr:
+        erghea '%f' % grkg
+
+
+qrs qb_yf(cngu, a):
+    y = []
+    vs fgng.F_VFQVE(a.zbqr):
+        sbe fho va a:
+            y.nccraq(abqr_anzr(fho.anzr, fho))
+    ryfr:
+        y.nccraq(abqr_anzr(cngu, a))
+    cevag pbyhzangr(y, '')
     
 
-def write_to_file(inf, outf):
-    for blob in chunkyreader(inf):
-        outf.write(blob)
+qrs jevgr_gb_svyr(vas, bhgs):
+    sbe oybo va puhaxlernqre(vas):
+        bhgs.jevgr(oybo)
     
 
-def inputiter():
-    if os.isatty(sys.stdin.fileno()):
-        while 1:
-            try:
-                yield raw_input('bup> ')
-            except EOFError:
-                break
-    else:
-        for line in sys.stdin:
-            yield line
-
-
-def _completer_get_subs(line):
-    (qtype, lastword) = shquote.unfinished_word(line)
-    (dir,name) = os.path.split(lastword)
-    #log('\ncompleter: %r %r %r\n' % (qtype, lastword, text))
-    n = pwd.resolve(dir)
-    subs = list(filter(lambda x: x.name.startswith(name),
-                       n.subs()))
-    return (dir, name, qtype, lastword, subs)
-
-
-_last_line = None
-_last_res = None
-def completer(text, state):
-    global _last_line
-    global _last_res
-    try:
-        line = readline.get_line_buffer()[:readline.get_endidx()]
-        if _last_line != line:
-            _last_res = _completer_get_subs(line)
-            _last_line = line
-        (dir, name, qtype, lastword, subs) = _last_res
-        if state < len(subs):
-            sn = subs[state]
-            sn1 = sn.resolve('')  # deref symlinks
-            fullname = os.path.join(dir, sn.name)
-            if stat.S_ISDIR(sn1.mode):
-                ret = shquote.what_to_add(qtype, lastword, fullname+'/',
-                                          terminate=False)
-            else:
-                ret = shquote.what_to_add(qtype, lastword, fullname,
-                                          terminate=True) + ' '
-            return text + ret
-    except Exception, e:
-        log('\nerror in completion: %s\n' % e)
+qrs vachgvgre():
+    vs bf.vfnggl(flf.fgqva.svyrab()):
+        juvyr 1:
+            gel:
+                lvryq enj_vachg('ohc> ')
+            rkprcg RBSReebe:
+                oernx
+    ryfr:
+        sbe yvar va flf.fgqva:
+            lvryq yvar
+
+
+qrs _pbzcyrgre_trg_fhof(yvar):
+    (dglcr, ynfgjbeq) = fudhbgr.hasvavfurq_jbeq(yvar)
+    (qve,anzr) = bf.cngu.fcyvg(ynfgjbeq)
+    #ybt('\apbzcyrgre: %e %e %e\a' % (dglcr, ynfgjbeq, grkg))
+    a = cjq.erfbyir(qve)
+    fhof = yvfg(svygre(ynzoqn k: k.anzr.fgnegfjvgu(anzr),
+                       a.fhof()))
+    erghea (qve, anzr, dglcr, ynfgjbeq, fhof)
+
+
+_ynfg_yvar = Abar
+_ynfg_erf = Abar
+qrs pbzcyrgre(grkg, fgngr):
+    tybony _ynfg_yvar
+    tybony _ynfg_erf
+    gel:
+        yvar = ernqyvar.trg_yvar_ohssre()[:ernqyvar.trg_raqvqk()]
+        vs _ynfg_yvar != yvar:
+            _ynfg_erf = _pbzcyrgre_trg_fhof(yvar)
+            _ynfg_yvar = yvar
+        (qve, anzr, dglcr, ynfgjbeq, fhof) = _ynfg_erf
+        vs fgngr < yra(fhof):
+            fa = fhof[fgngr]
+            fa1 = fa.erfbyir('')  # qrers flzyvaxf
+            shyyanzr = bf.cngu.wbva(qve, fa.anzr)
+            vs fgng.F_VFQVE(fa1.zbqr):
+                erg = fudhbgr.jung_gb_nqq(dglcr, ynfgjbeq, shyyanzr+'/',
+                                          grezvangr=Snyfr)
+            ryfr:
+                erg = fudhbgr.jung_gb_nqq(dglcr, ynfgjbeq, shyyanzr,
+                                          grezvangr=Gehr) + ' '
+            erghea grkg + erg
+    rkprcg Rkprcgvba, r:
+        ybt('\areebe va pbzcyrgvba: %f\a' % r)
 
             
-optspec = """
-bup ftp
+bcgfcrp = """
+ohc sgc
 """
-o = options.Options('bup ftp', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-
-top = vfs.RefList(None)
-pwd = top
-
-if extra:
-    lines = extra
-else:
-    readline.set_completer_delims(' \t\n\r/')
-    readline.set_completer(completer)
-    readline.parse_and_bind("tab: complete")
-    lines = inputiter()
-
-for line in lines:
-    if not line.strip():
-        continue
-    words = [word for (wordstart,word) in shquote.quotesplit(line)]
-    cmd = words[0].lower()
-    #log('execute: %r %r\n' % (cmd, parm))
-    try:
-        if cmd == 'ls':
-            for parm in (words[1:] or ['.']):
-                do_ls(parm, pwd.resolve(parm))
-        elif cmd == 'cd':
-            for parm in words[1:]:
-                pwd = pwd.resolve(parm)
-        elif cmd == 'pwd':
-            print pwd.fullname()
-        elif cmd == 'cat':
-            for parm in words[1:]:
-                write_to_file(pwd.resolve(parm).open(), sys.stdout)
-        elif cmd == 'get':
-            if len(words) not in [2,3]:
-                raise Exception('Usage: get <filename> [localname]')
-            rname = words[1]
-            (dir,base) = os.path.split(rname)
-            lname = len(words)>2 and words[2] or base
-            inf = pwd.resolve(rname).open()
-            log('Saving %r\n' % lname)
-            write_to_file(inf, open(lname, 'wb'))
-        elif cmd == 'mget':
-            for parm in words[1:]:
-                (dir,base) = os.path.split(parm)
-                for n in pwd.resolve(dir).subs():
-                    if fnmatch.fnmatch(n.name, base):
-                        try:
-                            log('Saving %r\n' % n.name)
-                            inf = n.open()
-                            outf = open(n.name, 'wb')
-                            write_to_file(inf, outf)
-                            outf.close()
-                        except Exception, e:
-                            log('  error: %s\n' % e)
-        elif cmd == 'help' or cmd == '?':
-            log('Commands: ls cd pwd cat get mget help quit\n')
-        elif cmd == 'quit' or cmd == 'exit' or cmd == 'bye':
-            break
-        else:
-            raise Exception('no such command %r' % cmd)
-    except Exception, e:
-        log('error: %s\n' % e)
-        #raise
-#!/usr/bin/env python
-import sys, mmap
-from bup import options, _hashsplit
-from bup.helpers import *
-
-optspec = """
-bup random [-S seed] <numbytes>
+b = bcgvbaf.Bcgvbaf('ohc sgc', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+
+gbc = isf.ErsYvfg(Abar)
+cjq = gbc
+
+vs rkgen:
+    yvarf = rkgen
+ryfr:
+    ernqyvar.frg_pbzcyrgre_qryvzf(' \g\a\e/')
+    ernqyvar.frg_pbzcyrgre(pbzcyrgre)
+    ernqyvar.cnefr_naq_ovaq("gno: pbzcyrgr")
+    yvarf = vachgvgre()
+
+sbe yvar va yvarf:
+    vs abg yvar.fgevc():
+        pbagvahr
+    jbeqf = [jbeq sbe (jbeqfgneg,jbeq) va fudhbgr.dhbgrfcyvg(yvar)]
+    pzq = jbeqf[0].ybjre()
+    #ybt('rkrphgr: %e %e\a' % (pzq, cnez))
+    gel:
+        vs pzq == 'yf':
+            sbe cnez va (jbeqf[1:] be ['.']):
+                qb_yf(cnez, cjq.erfbyir(cnez))
+        ryvs pzq == 'pq':
+            sbe cnez va jbeqf[1:]:
+                cjq = cjq.erfbyir(cnez)
+        ryvs pzq == 'cjq':
+            cevag cjq.shyyanzr()
+        ryvs pzq == 'png':
+            sbe cnez va jbeqf[1:]:
+                jevgr_gb_svyr(cjq.erfbyir(cnez).bcra(), flf.fgqbhg)
+        ryvs pzq == 'trg':
+            vs yra(jbeqf) abg va [2,3]:
+                envfr Rkprcgvba('Hfntr: trg <svyranzr> [ybpnyanzr]')
+            eanzr = jbeqf[1]
+            (qve,onfr) = bf.cngu.fcyvg(eanzr)
+            yanzr = yra(jbeqf)>2 naq jbeqf[2] be onfr
+            vas = cjq.erfbyir(eanzr).bcra()
+            ybt('Fnivat %e\a' % yanzr)
+            jevgr_gb_svyr(vas, bcra(yanzr, 'jo'))
+        ryvs pzq == 'ztrg':
+            sbe cnez va jbeqf[1:]:
+                (qve,onfr) = bf.cngu.fcyvg(cnez)
+                sbe a va cjq.erfbyir(qve).fhof():
+                    vs sazngpu.sazngpu(a.anzr, onfr):
+                        gel:
+                            ybt('Fnivat %e\a' % a.anzr)
+                            vas = a.bcra()
+                            bhgs = bcra(a.anzr, 'jo')
+                            jevgr_gb_svyr(vas, bhgs)
+                            bhgs.pybfr()
+                        rkprcg Rkprcgvba, r:
+                            ybt('  reebe: %f\a' % r)
+        ryvs pzq == 'uryc' be pzq == '?':
+            ybt('Pbzznaqf: yf pq cjq png trg ztrg uryc dhvg\a')
+        ryvs pzq == 'dhvg' be pzq == 'rkvg' be pzq == 'olr':
+            oernx
+        ryfr:
+            envfr Rkprcgvba('ab fhpu pbzznaq %e' % pzq)
+    rkprcg Rkprcgvba, r:
+        ybt('reebe: %f\a' % r)
+        #envfr
+#!/hfe/ova/rai clguba
+vzcbeg flf, zznc
+sebz ohc vzcbeg bcgvbaf, _unfufcyvg
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+ohc enaqbz [-F frrq] <ahzolgrf>
 --
-S,seed=   optional random number seed (default 1)
-f,force   print random data to stdout even if it's a tty
+F,frrq=   bcgvbany enaqbz ahzore frrq (qrsnhyg 1)
+s,sbepr   cevag enaqbz qngn gb fgqbhg rira vs vg'f n ggl
 """
-o = options.Options('bup random', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one argument expected")
-
-total = parse_num(extra[0])
-
-if opt.force or (not os.isatty(1) and
-                 not atoi(os.environ.get('BUP_FORCE_TTY')) & 1):
-    _hashsplit.write_random(sys.stdout.fileno(), total, opt.seed or 0)
-else:
-    log('error: not writing binary data to a terminal. Use -f to force.\n')
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, os, glob
-from bup import options
-
-optspec = """
-bup help <command>
+b = bcgvbaf.Bcgvbaf('ohc enaqbz', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar nethzrag rkcrpgrq")
+
+gbgny = cnefr_ahz(rkgen[0])
+
+vs bcg.sbepr be (abg bf.vfnggl(1) naq
+                 abg ngbv(bf.raiveba.trg('OHC_SBEPR_GGL')) & 1):
+    _unfufcyvg.jevgr_enaqbz(flf.fgqbhg.svyrab(), gbgny, bcg.frrq be 0)
+ryfr:
+    ybt('reebe: abg jevgvat ovanel qngn gb n grezvany. Hfr -s gb sbepr.\a')
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, tybo
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc uryc <pbzznaq>
 """
-o = options.Options('bup help', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) == 0:
-    # the wrapper program provides the default usage string
-    os.execvp(os.environ['BUP_MAIN_EXE'], ['bup'])
-elif len(extra) == 1:
-    docname = (extra[0]=='bup' and 'bup' or ('bup-%s' % extra[0]))
-    exe = sys.argv[0]
-    (exepath, exefile) = os.path.split(exe)
-    manpath = os.path.join(exepath, '../Documentation/' + docname + '.[1-9]')
-    g = glob.glob(manpath)
-    if g:
-        os.execvp('man', ['man', '-l', g[0]])
-    else:
-        os.execvp('man', ['man', docname])
-else:
-    o.fatal("exactly one command name expected")
-#!/usr/bin/env python
-import sys, os, stat, errno, fuse, re, time, tempfile
-from bup import options, git, vfs
-from bup.helpers import *
-
-
-class Stat(fuse.Stat):
-    def __init__(self):
-        self.st_mode = 0
-        self.st_ino = 0
-        self.st_dev = 0
-        self.st_nlink = 0
-        self.st_uid = 0
-        self.st_gid = 0
-        self.st_size = 0
-        self.st_atime = 0
-        self.st_mtime = 0
-        self.st_ctime = 0
-        self.st_blocks = 0
-        self.st_blksize = 0
-        self.st_rdev = 0
-
-
-cache = {}
-def cache_get(top, path):
-    parts = path.split('/')
-    cache[('',)] = top
-    c = None
-    max = len(parts)
-    #log('cache: %r\n' % cache.keys())
-    for i in range(max):
-        pre = parts[:max-i]
-        #log('cache trying: %r\n' % pre)
-        c = cache.get(tuple(pre))
-        if c:
-            rest = parts[max-i:]
-            for r in rest:
-                #log('resolving %r from %r\n' % (r, c.fullname()))
-                c = c.lresolve(r)
-                key = tuple(pre + [r])
-                #log('saving: %r\n' % (key,))
-                cache[key] = c
-            break
-    assert(c)
-    return c
+b = bcgvbaf.Bcgvbaf('ohc uryc', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) == 0:
+    # gur jenccre cebtenz cebivqrf gur qrsnhyg hfntr fgevat
+    bf.rkrpic(bf.raiveba['OHC_ZNVA_RKR'], ['ohc'])
+ryvs yra(rkgen) == 1:
+    qbpanzr = (rkgen[0]=='ohc' naq 'ohc' be ('ohc-%f' % rkgen[0]))
+    rkr = flf.neti[0]
+    (rkrcngu, rkrsvyr) = bf.cngu.fcyvg(rkr)
+    znacngu = bf.cngu.wbva(rkrcngu, '../Qbphzragngvba/' + qbpanzr + '.[1-9]')
+    t = tybo.tybo(znacngu)
+    vs t:
+        bf.rkrpic('zna', ['zna', '-y', t[0]])
+    ryfr:
+        bf.rkrpic('zna', ['zna', qbpanzr])
+ryfr:
+    b.sngny("rknpgyl bar pbzznaq anzr rkcrpgrq")
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgng, reeab, shfr, er, gvzr, grzcsvyr
+sebz ohc vzcbeg bcgvbaf, tvg, isf
+sebz ohc.urycref vzcbeg *
+
+
+pynff Fgng(shfr.Fgng):
+    qrs __vavg__(frys):
+        frys.fg_zbqr = 0
+        frys.fg_vab = 0
+        frys.fg_qri = 0
+        frys.fg_ayvax = 0
+        frys.fg_hvq = 0
+        frys.fg_tvq = 0
+        frys.fg_fvmr = 0
+        frys.fg_ngvzr = 0
+        frys.fg_zgvzr = 0
+        frys.fg_pgvzr = 0
+        frys.fg_oybpxf = 0
+        frys.fg_oyxfvmr = 0
+        frys.fg_eqri = 0
+
+
+pnpur = {}
+qrs pnpur_trg(gbc, cngu):
+    cnegf = cngu.fcyvg('/')
+    pnpur[('',)] = gbc
+    p = Abar
+    znk = yra(cnegf)
+    #ybt('pnpur: %e\a' % pnpur.xrlf())
+    sbe v va enatr(znk):
+        cer = cnegf[:znk-v]
+        #ybt('pnpur gelvat: %e\a' % cer)
+        p = pnpur.trg(ghcyr(cer))
+        vs p:
+            erfg = cnegf[znk-v:]
+            sbe e va erfg:
+                #ybt('erfbyivat %e sebz %e\a' % (e, p.shyyanzr()))
+                p = p.yerfbyir(e)
+                xrl = ghcyr(cer + [e])
+                #ybt('fnivat: %e\a' % (xrl,))
+                pnpur[xrl] = p
+            oernx
+    nffreg(p)
+    erghea p
         
     
 
-class BupFs(fuse.Fuse):
-    def __init__(self, top):
-        fuse.Fuse.__init__(self)
-        self.top = top
+pynff OhcSf(shfr.Shfr):
+    qrs __vavg__(frys, gbc):
+        shfr.Shfr.__vavg__(frys)
+        frys.gbc = gbc
     
-    def getattr(self, path):
-        log('--getattr(%r)\n' % path)
-        try:
-            node = cache_get(self.top, path)
-            st = Stat()
-            st.st_mode = node.mode
-            st.st_nlink = node.nlinks()
-            st.st_size = node.size()
-            st.st_mtime = node.mtime
-            st.st_ctime = node.ctime
-            st.st_atime = node.atime
-            return st
-        except vfs.NoSuchFile:
-            return -errno.ENOENT
-
-    def readdir(self, path, offset):
-        log('--readdir(%r)\n' % path)
-        node = cache_get(self.top, path)
-        yield fuse.Direntry('.')
-        yield fuse.Direntry('..')
-        for sub in node.subs():
-            yield fuse.Direntry(sub.name)
-
-    def readlink(self, path):
-        log('--readlink(%r)\n' % path)
-        node = cache_get(self.top, path)
-        return node.readlink()
-
-    def open(self, path, flags):
-        log('--open(%r)\n' % path)
-        node = cache_get(self.top, path)
-        accmode = os.O_RDONLY | os.O_WRONLY | os.O_RDWR
-        if (flags & accmode) != os.O_RDONLY:
-            return -errno.EACCES
-        node.open()
-
-    def release(self, path, flags):
-        log('--release(%r)\n' % path)
-
-    def read(self, path, size, offset):
-        log('--read(%r)\n' % path)
-        n = cache_get(self.top, path)
-        o = n.open()
-        o.seek(offset)
-        return o.read(size)
-
-
-if not hasattr(fuse, '__version__'):
-    raise RuntimeError, "your fuse module is too old for fuse.__version__"
-fuse.fuse_python_api = (0, 2)
-
-
-optspec = """
-bup fuse [-d] [-f] <mountpoint>
+    qrs trgngge(frys, cngu):
+        ybt('--trgngge(%e)\a' % cngu)
+        gel:
+            abqr = pnpur_trg(frys.gbc, cngu)
+            fg = Fgng()
+            fg.fg_zbqr = abqr.zbqr
+            fg.fg_ayvax = abqr.ayvaxf()
+            fg.fg_fvmr = abqr.fvmr()
+            fg.fg_zgvzr = abqr.zgvzr
+            fg.fg_pgvzr = abqr.pgvzr
+            fg.fg_ngvzr = abqr.ngvzr
+            erghea fg
+        rkprcg isf.AbFhpuSvyr:
+            erghea -reeab.RABRAG
+
+    qrs ernqqve(frys, cngu, bssfrg):
+        ybt('--ernqqve(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        lvryq shfr.Qveragel('.')
+        lvryq shfr.Qveragel('..')
+        sbe fho va abqr.fhof():
+            lvryq shfr.Qveragel(fho.anzr)
+
+    qrs ernqyvax(frys, cngu):
+        ybt('--ernqyvax(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        erghea abqr.ernqyvax()
+
+    qrs bcra(frys, cngu, syntf):
+        ybt('--bcra(%e)\a' % cngu)
+        abqr = pnpur_trg(frys.gbc, cngu)
+        nppzbqr = bf.B_EQBAYL | bf.B_JEBAYL | bf.B_EQJE
+        vs (syntf & nppzbqr) != bf.B_EQBAYL:
+            erghea -reeab.RNPPRF
+        abqr.bcra()
+
+    qrs eryrnfr(frys, cngu, syntf):
+        ybt('--eryrnfr(%e)\a' % cngu)
+
+    qrs ernq(frys, cngu, fvmr, bssfrg):
+        ybt('--ernq(%e)\a' % cngu)
+        a = pnpur_trg(frys.gbc, cngu)
+        b = a.bcra()
+        b.frrx(bssfrg)
+        erghea b.ernq(fvmr)
+
+
+vs abg unfngge(shfr, '__irefvba__'):
+    envfr EhagvzrReebe, "lbhe shfr zbqhyr vf gbb byq sbe shfr.__irefvba__"
+shfr.shfr_clguba_ncv = (0, 2)
+
+
+bcgfcrp = """
+ohc shfr [-q] [-s] <zbhagcbvag>
 --
-d,debug   increase debug level
-f,foreground  run in foreground
+q,qroht   vapernfr qroht yriry
+s,sbertebhaq  eha va sbertebhaq
 """
-o = options.Options('bup fuse', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if len(extra) != 1:
-    o.fatal("exactly one argument expected")
-
-git.check_repo_or_die()
-top = vfs.RefList(None)
-f = BupFs(top)
-f.fuse_args.mountpoint = extra[0]
-if opt.debug:
-    f.fuse_args.add('debug')
-if opt.foreground:
-    f.fuse_args.setmod('foreground')
-print f.multithreaded
-f.multithreaded = False
-
-f.main()
-#!/usr/bin/env python
-from bup import git, options, client
-from bup.helpers import *
-
-optspec = """
-[BUP_DIR=...] bup init [-r host:path]
+b = bcgvbaf.Bcgvbaf('ohc shfr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs yra(rkgen) != 1:
+    b.sngny("rknpgyl bar nethzrag rkcrpgrq")
+
+tvg.purpx_ercb_be_qvr()
+gbc = isf.ErsYvfg(Abar)
+s = OhcSf(gbc)
+s.shfr_netf.zbhagcbvag = rkgen[0]
+vs bcg.qroht:
+    s.shfr_netf.nqq('qroht')
+vs bcg.sbertebhaq:
+    s.shfr_netf.frgzbq('sbertebhaq')
+cevag s.zhygvguernqrq
+s.zhygvguernqrq = Snyfr
+
+s.znva()
+#!/hfe/ova/rai clguba
+sebz ohc vzcbeg tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+[OHC_QVE=...] ohc vavg [-e ubfg:cngu]
 --
-r,remote=  remote repository path
+e,erzbgr=  erzbgr ercbfvgbel cngu
 """
-o = options.Options('bup init', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-
-if opt.remote:
-    git.init_repo()  # local repo
-    git.check_repo_or_die()
-    cli = client.Client(opt.remote, create=True)
-    cli.close()
-else:
-    git.init_repo()
-#!/usr/bin/env python
-import sys, math, struct, glob
-from bup import options, git
-from bup.helpers import *
-
-PAGE_SIZE=4096
-SHA_PER_PAGE=PAGE_SIZE/200.
-
-
-def merge(idxlist, bits, table):
-    count = 0
-    for e in git.idxmerge(idxlist):
-        count += 1
-        prefix = git.extract_bits(e, bits)
-        table[prefix] = count
-        yield e
-
-
-def do_midx(outdir, outfilename, infilenames):
-    if not outfilename:
-        assert(outdir)
-        sum = Sha1('\0'.join(infilenames)).hexdigest()
-        outfilename = '%s/midx-%s.midx' % (outdir, sum)
+b = bcgvbaf.Bcgvbaf('ohc vavg', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+
+vs bcg.erzbgr:
+    tvg.vavg_ercb()  # ybpny ercb
+    tvg.purpx_ercb_be_qvr()
+    pyv = pyvrag.Pyvrag(bcg.erzbgr, perngr=Gehr)
+    pyv.pybfr()
+ryfr:
+    tvg.vavg_ercb()
+#!/hfe/ova/rai clguba
+vzcbeg flf, zngu, fgehpg, tybo
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+CNTR_FVMR=4096
+FUN_CRE_CNTR=CNTR_FVMR/200.
+
+
+qrs zretr(vqkyvfg, ovgf, gnoyr):
+    pbhag = 0
+    sbe r va tvg.vqkzretr(vqkyvfg):
+        pbhag += 1
+        cersvk = tvg.rkgenpg_ovgf(r, ovgf)
+        gnoyr[cersvk] = pbhag
+        lvryq r
+
+
+qrs qb_zvqk(bhgqve, bhgsvyranzr, vasvyranzrf):
+    vs abg bhgsvyranzr:
+        nffreg(bhgqve)
+        fhz = Fun1('\0'.wbva(vasvyranzrf)).urkqvtrfg()
+        bhgsvyranzr = '%f/zvqk-%f.zvqk' % (bhgqve, fhz)
     
-    inp = []
-    total = 0
-    for name in infilenames:
-        ix = git.PackIdx(name)
-        inp.append(ix)
-        total += len(ix)
-
-    log('Merging %d indexes (%d objects).\n' % (len(infilenames), total))
-    if (not opt.force and (total < 1024 and len(infilenames) < 3)) \
-       or (opt.force and not total):
-        log('midx: nothing to do.\n')
-        return
-
-    pages = int(total/SHA_PER_PAGE) or 1
-    bits = int(math.ceil(math.log(pages, 2)))
-    entries = 2**bits
-    log('Table size: %d (%d bits)\n' % (entries*4, bits))
+    vac = []
+    gbgny = 0
+    sbe anzr va vasvyranzrf:
+        vk = tvg.CnpxVqk(anzr)
+        vac.nccraq(vk)
+        gbgny += yra(vk)
+
+    ybt('Zretvat %q vaqrkrf (%q bowrpgf).\a' % (yra(vasvyranzrf), gbgny))
+    vs (abg bcg.sbepr naq (gbgny < 1024 naq yra(vasvyranzrf) < 3)) \
+       be (bcg.sbepr naq abg gbgny):
+        ybt('zvqk: abguvat gb qb.\a')
+        erghea
+
+    cntrf = vag(gbgny/FUN_CRE_CNTR) be 1
+    ovgf = vag(zngu.prvy(zngu.ybt(cntrf, 2)))
+    ragevrf = 2**ovgf
+    ybt('Gnoyr fvmr: %q (%q ovgf)\a' % (ragevrf*4, ovgf))
     
-    table = [0]*entries
-
-    try:
-        os.unlink(outfilename)
-    except OSError:
-        pass
-    f = open(outfilename + '.tmp', 'w+')
-    f.write('MIDX\0\0\0\2')
-    f.write(struct.pack('!I', bits))
-    assert(f.tell() == 12)
-    f.write('\0'*4*entries)
+    gnoyr = [0]*ragevrf
+
+    gel:
+        bf.hayvax(bhgsvyranzr)
+    rkprcg BFReebe:
+        cnff
+    s = bcra(bhgsvyranzr + '.gzc', 'j+')
+    s.jevgr('ZVQK\0\0\0\2')
+    s.jevgr(fgehpg.cnpx('!V', ovgf))
+    nffreg(s.gryy() == 12)
+    s.jevgr('\0'*4*ragevrf)
     
-    for e in merge(inp, bits, table):
-        f.write(e)
+    sbe r va zretr(vac, ovgf, gnoyr):
+        s.jevgr(r)
         
-    f.write('\0'.join(os.path.basename(p) for p in infilenames))
-
-    f.seek(12)
-    f.write(struct.pack('!%dI' % entries, *table))
-    f.close()
-    os.rename(outfilename + '.tmp', outfilename)
-
-    # this is just for testing
-    if 0:
-        p = git.PackMidx(outfilename)
-        assert(len(p.idxnames) == len(infilenames))
-        print p.idxnames
-        assert(len(p) == total)
-        pi = iter(p)
-        for i in merge(inp, total, bits, table):
-            assert(i == pi.next())
-            assert(p.exists(i))
-
-    print outfilename
-
-optspec = """
-bup midx [options...] <idxnames...>
+    s.jevgr('\0'.wbva(bf.cngu.onfranzr(c) sbe c va vasvyranzrf))
+
+    s.frrx(12)
+    s.jevgr(fgehpg.cnpx('!%qV' % ragevrf, *gnoyr))
+    s.pybfr()
+    bf.eranzr(bhgsvyranzr + '.gzc', bhgsvyranzr)
+
+    # guvf vf whfg sbe grfgvat
+    vs 0:
+        c = tvg.CnpxZvqk(bhgsvyranzr)
+        nffreg(yra(c.vqkanzrf) == yra(vasvyranzrf))
+        cevag c.vqkanzrf
+        nffreg(yra(c) == gbgny)
+        cv = vgre(c)
+        sbe v va zretr(vac, gbgny, ovgf, gnoyr):
+            nffreg(v == cv.arkg())
+            nffreg(c.rkvfgf(v))
+
+    cevag bhgsvyranzr
+
+bcgfcrp = """
+ohc zvqk [bcgvbaf...] <vqkanzrf...>
 --
-o,output=  output midx filename (default: auto-generated)
-a,auto     automatically create .midx from any unindexed .idx files
-f,force    automatically create .midx from *all* .idx files
+b,bhgchg=  bhgchg zvqk svyranzr (qrsnhyg: nhgb-trarengrq)
+n,nhgb     nhgbzngvpnyyl perngr .zvqk sebz nal havaqrkrq .vqk svyrf
+s,sbepr    nhgbzngvpnyyl perngr .zvqk sebz *nyy* .vqk svyrf
 """
-o = options.Options('bup midx', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra and (opt.auto or opt.force):
-    o.fatal("you can't use -f/-a and also provide filenames")
-
-git.check_repo_or_die()
-
-if extra:
-    do_midx(git.repo('objects/pack'), opt.output, extra)
-elif opt.auto or opt.force:
-    paths = [git.repo('objects/pack')]
-    paths += glob.glob(git.repo('index-cache/*/.'))
-    for path in paths:
-        log('midx: scanning %s\n' % path)
-        if opt.force:
-            do_midx(path, opt.output, glob.glob('%s/*.idx' % path))
-        elif opt.auto:
-            m = git.PackIdxList(path)
-            needed = {}
-            for pack in m.packs:  # only .idx files without a .midx are open
-                if pack.name.endswith('.idx'):
-                    needed[pack.name] = 1
-            del m
-            do_midx(path, opt.output, needed.keys())
-        log('\n')
-else:
-    o.fatal("you must use -f or -a or provide input filenames")
-#!/usr/bin/env python
-import sys, os, random
-from bup import options
-from bup.helpers import *
-
-
-def randblock(n):
-    l = []
-    for i in xrange(n):
-        l.append(chr(random.randrange(0,256)))
-    return ''.join(l)
-
-
-optspec = """
-bup damage [-n count] [-s maxsize] [-S seed] <filenames...>
+b = bcgvbaf.Bcgvbaf('ohc zvqk', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen naq (bcg.nhgb be bcg.sbepr):
+    b.sngny("lbh pna'g hfr -s/-n naq nyfb cebivqr svyranzrf")
+
+tvg.purpx_ercb_be_qvr()
+
+vs rkgen:
+    qb_zvqk(tvg.ercb('bowrpgf/cnpx'), bcg.bhgchg, rkgen)
+ryvs bcg.nhgb be bcg.sbepr:
+    cnguf = [tvg.ercb('bowrpgf/cnpx')]
+    cnguf += tybo.tybo(tvg.ercb('vaqrk-pnpur/*/.'))
+    sbe cngu va cnguf:
+        ybt('zvqk: fpnaavat %f\a' % cngu)
+        vs bcg.sbepr:
+            qb_zvqk(cngu, bcg.bhgchg, tybo.tybo('%f/*.vqk' % cngu))
+        ryvs bcg.nhgb:
+            z = tvg.CnpxVqkYvfg(cngu)
+            arrqrq = {}
+            sbe cnpx va z.cnpxf:  # bayl .vqk svyrf jvgubhg n .zvqk ner bcra
+                vs cnpx.anzr.raqfjvgu('.vqk'):
+                    arrqrq[cnpx.anzr] = 1
+            qry z
+            qb_zvqk(cngu, bcg.bhgchg, arrqrq.xrlf())
+        ybt('\a')
+ryfr:
+    b.sngny("lbh zhfg hfr -s be -n be cebivqr vachg svyranzrf")
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, enaqbz
+sebz ohc vzcbeg bcgvbaf
+sebz ohc.urycref vzcbeg *
+
+
+qrs enaqoybpx(a):
+    y = []
+    sbe v va kenatr(a):
+        y.nccraq(pue(enaqbz.enaqenatr(0,256)))
+    erghea ''.wbva(y)
+
+
+bcgfcrp = """
+ohc qnzntr [-a pbhag] [-f znkfvmr] [-F frrq] <svyranzrf...>
 --
-   WARNING: THIS COMMAND IS EXTREMELY DANGEROUS
-n,num=   number of blocks to damage
-s,size=  maximum size of each damaged block
-percent= maximum size of each damaged block (as a percent of entire file)
-equal    spread damage evenly throughout the file
-S,seed=  random number seed (for repeatable tests)
+   JNEAVAT: GUVF PBZZNAQ VF RKGERZRYL QNATREBHF
+a,ahz=   ahzore bs oybpxf gb qnzntr
+f,fvmr=  znkvzhz fvmr bs rnpu qnzntrq oybpx
+creprag= znkvzhz fvmr bs rnpu qnzntrq oybpx (nf n creprag bs ragver svyr)
+rdhny    fcernq qnzntr rirayl guebhtubhg gur svyr
+F,frrq=  enaqbz ahzore frrq (sbe ercrngnoyr grfgf)
 """
-o = options.Options('bup damage', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if not extra:
-    o.fatal('filenames expected')
-
-if opt.seed != None:
-    random.seed(opt.seed)
-
-for name in extra:
-    log('Damaging "%s"...\n' % name)
-    f = open(name, 'r+b')
-    st = os.fstat(f.fileno())
-    size = st.st_size
-    if opt.percent or opt.size:
-        ms1 = int(float(opt.percent or 0)/100.0*size) or size
-        ms2 = opt.size or size
-        maxsize = min(ms1, ms2)
-    else:
-        maxsize = 1
-    chunks = opt.num or 10
-    chunksize = size/chunks
-    for r in range(chunks):
-        sz = random.randrange(1, maxsize+1)
-        if sz > size:
-            sz = size
-        if opt.equal:
-            ofs = r*chunksize
-        else:
-            ofs = random.randrange(0, size - sz + 1)
-        log('  %6d bytes at %d\n' % (sz, ofs))
-        f.seek(ofs)
-        f.write(randblock(sz))
-    f.close()
-#!/usr/bin/env python
-import sys, struct, mmap
-from bup import options, git
-from bup.helpers import *
-
-suspended_w = None
-
-
-def init_dir(conn, arg):
-    git.init_repo(arg)
-    log('bup server: bupdir initialized: %r\n' % git.repodir)
-    conn.ok()
-
-
-def set_dir(conn, arg):
-    git.check_repo_or_die(arg)
-    log('bup server: bupdir is %r\n' % git.repodir)
-    conn.ok()
+b = bcgvbaf.Bcgvbaf('ohc qnzntr', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs abg rkgen:
+    b.sngny('svyranzrf rkcrpgrq')
+
+vs bcg.frrq != Abar:
+    enaqbz.frrq(bcg.frrq)
+
+sbe anzr va rkgen:
+    ybt('Qnzntvat "%f"...\a' % anzr)
+    s = bcra(anzr, 'e+o')
+    fg = bf.sfgng(s.svyrab())
+    fvmr = fg.fg_fvmr
+    vs bcg.creprag be bcg.fvmr:
+        zf1 = vag(sybng(bcg.creprag be 0)/100.0*fvmr) be fvmr
+        zf2 = bcg.fvmr be fvmr
+        znkfvmr = zva(zf1, zf2)
+    ryfr:
+        znkfvmr = 1
+    puhaxf = bcg.ahz be 10
+    puhaxfvmr = fvmr/puhaxf
+    sbe e va enatr(puhaxf):
+        fm = enaqbz.enaqenatr(1, znkfvmr+1)
+        vs fm > fvmr:
+            fm = fvmr
+        vs bcg.rdhny:
+            bsf = e*puhaxfvmr
+        ryfr:
+            bsf = enaqbz.enaqenatr(0, fvmr - fm + 1)
+        ybt('  %6q olgrf ng %q\a' % (fm, bsf))
+        s.frrx(bsf)
+        s.jevgr(enaqoybpx(fm))
+    s.pybfr()
+#!/hfe/ova/rai clguba
+vzcbeg flf, fgehpg, zznc
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+fhfcraqrq_j = Abar
+
+
+qrs vavg_qve(pbaa, net):
+    tvg.vavg_ercb(net)
+    ybt('ohc freire: ohcqve vavgvnyvmrq: %e\a' % tvg.ercbqve)
+    pbaa.bx()
+
+
+qrs frg_qve(pbaa, net):
+    tvg.purpx_ercb_be_qvr(net)
+    ybt('ohc freire: ohcqve vf %e\a' % tvg.ercbqve)
+    pbaa.bx()
 
     
-def list_indexes(conn, junk):
-    git.check_repo_or_die()
-    for f in os.listdir(git.repo('objects/pack')):
-        if f.endswith('.idx'):
-            conn.write('%s\n' % f)
-    conn.ok()
-
-
-def send_index(conn, name):
-    git.check_repo_or_die()
-    assert(name.find('/') < 0)
-    assert(name.endswith('.idx'))
-    idx = git.PackIdx(git.repo('objects/pack/%s' % name))
-    conn.write(struct.pack('!I', len(idx.map)))
-    conn.write(idx.map)
-    conn.ok()
-
-
-def receive_objects(conn, junk):
-    global suspended_w
-    git.check_repo_or_die()
-    suggested = {}
-    if suspended_w:
-        w = suspended_w
-        suspended_w = None
-    else:
-        w = git.PackWriter()
-    while 1:
-        ns = conn.read(4)
-        if not ns:
-            w.abort()
-            raise Exception('object read: expected length header, got EOF\n')
-        n = struct.unpack('!I', ns)[0]
-        #log('expecting %d bytes\n' % n)
-        if not n:
-            log('bup server: received %d object%s.\n
-                % (w.count, w.count!=1 and "s" or ''))
-            fullpath = w.close()
-            if fullpath:
-                (dir, name) = os.path.split(fullpath)
-                conn.write('%s.idx\n' % name)
-            conn.ok()
-            return
-        elif n == 0xffffffff:
-            log('bup server: receive-objects suspended.\n')
-            suspended_w = w
-            conn.ok()
-            return
+qrs yvfg_vaqrkrf(pbaa, whax):
+    tvg.purpx_ercb_be_qvr()
+    sbe s va bf.yvfgqve(tvg.ercb('bowrpgf/cnpx')):
+        vs s.raqfjvgu('.vqk'):
+            pbaa.jevgr('%f\a' % s)
+    pbaa.bx()
+
+
+qrs fraq_vaqrk(pbaa, anzr):
+    tvg.purpx_ercb_be_qvr()
+    nffreg(anzr.svaq('/') < 0)
+    nffreg(anzr.raqfjvgu('.vqk'))
+    vqk = tvg.CnpxVqk(tvg.ercb('bowrpgf/cnpx/%f' % anzr))
+    pbaa.jevgr(fgehpg.cnpx('!V', yra(vqk.znc)))
+    pbaa.jevgr(vqk.znc)
+    pbaa.bx()
+
+
+qrs erprvir_bowrpgf(pbaa, whax):
+    tybony fhfcraqrq_j
+    tvg.purpx_ercb_be_qvr()
+    fhttrfgrq = {}
+    vs fhfcraqrq_j:
+        j = fhfcraqrq_j
+        fhfcraqrq_j = Abar
+    ryfr:
+        j = tvg.CnpxJevgre()
+    juvyr 1:
+        af = pbaa.ernq(4)
+        vs abg af:
+            j.nobeg()
+            envfr Rkprcgvba('bowrpg ernq: rkcrpgrq yratgu urnqre, tbg RBS\a')
+        a = fgehpg.hacnpx('!V', af)[0]
+        #ybt('rkcrpgvat %q olgrf\a' % a)
+        vs abg a:
+            ybt('ohc freire: erprvirq %q bowrpg%f.\a
+                % (j.pbhag, j.pbhag!=1 naq "f" be ''))
+            shyycngu = j.pybfr()
+            vs shyycngu:
+                (qve, anzr) = bf.cngu.fcyvg(shyycngu)
+                pbaa.jevgr('%f.vqk\a' % anzr)
+            pbaa.bx()
+            erghea
+        ryvs a == 0kssssssss:
+            ybt('ohc freire: erprvir-bowrpgf fhfcraqrq.\a')
+            fhfcraqrq_j = j
+            pbaa.bx()
+            erghea
             
-        buf = conn.read(n)  # object sizes in bup are reasonably small
-        #log('read %d bytes\n' % n)
-        if len(buf) < n:
-            w.abort()
-            raise Exception('object read: expected %d bytes, got %d\n'
-                            % (n, len(buf)))
-        (type, content) = git._decode_packobj(buf)
-        sha = git.calc_hash(type, content)
-        oldpack = w.exists(sha)
-        # FIXME: we only suggest a single index per cycle, because the client
-        # is currently dumb to download more than one per cycle anyway.
-        # Actually we should fix the client, but this is a minor optimization
-        # on the server side.
-        if not suggested and \
-          oldpack and (oldpack == True or oldpack.endswith('.midx')):
-            # FIXME: we shouldn't really have to know about midx files
-            # at this layer.  But exists() on a midx doesn't return the
-            # packname (since it doesn't know)... probably we should just
-            # fix that deficiency of midx files eventually, although it'll
-            # make the files bigger.  This method is certainly not very
-            # efficient.
-            w.objcache.refresh(skip_midx = True)
-            oldpack = w.objcache.exists(sha)
-            log('new suggestion: %r\n' % oldpack)
-            assert(oldpack)
-            assert(oldpack != True)
-            assert(not oldpack.endswith('.midx'))
-            w.objcache.refresh(skip_midx = False)
-        if not suggested and oldpack:
-            assert(oldpack.endswith('.idx'))
-            (dir,name) = os.path.split(oldpack)
-            if not (name in suggested):
-                log("bup server: suggesting index %s\n" % name)
-                conn.write('index %s\n' % name)
-                suggested[name] = 1
-        else:
-            w._raw_write([buf])
-    # NOTREACHED
-
-
-def read_ref(conn, refname):
-    git.check_repo_or_die()
-    r = git.read_ref(refname)
-    conn.write('%s\n' % (r or '').encode('hex'))
-    conn.ok()
-
-
-def update_ref(conn, refname):
-    git.check_repo_or_die()
-    newval = conn.readline().strip()
-    oldval = conn.readline().strip()
-    git.update_ref(refname, newval.decode('hex'), oldval.decode('hex'))
-    conn.ok()
-
-
-def cat(conn, id):
-    git.check_repo_or_die()
-    try:
-        for blob in git.cat(id):
-            conn.write(struct.pack('!I', len(blob)))
-            conn.write(blob)
-    except KeyError, e:
-        log('server: error: %s\n' % e)
-        conn.write('\0\0\0\0')
-        conn.error(e)
-    else:
-        conn.write('\0\0\0\0')
-        conn.ok()
-
-
-optspec = """
-bup server
+        ohs = pbaa.ernq(a)  # bowrpg fvmrf va ohc ner ernfbanoyl fznyy
+        #ybt('ernq %q olgrf\a' % a)
+        vs yra(ohs) < a:
+            j.nobeg()
+            envfr Rkprcgvba('bowrpg ernq: rkcrpgrq %q olgrf, tbg %q\a'
+                            % (a, yra(ohs)))
+        (glcr, pbagrag) = tvg._qrpbqr_cnpxbow(ohs)
+        fun = tvg.pnyp_unfu(glcr, pbagrag)
+        byqcnpx = j.rkvfgf(fun)
+        # SVKZR: jr bayl fhttrfg n fvatyr vaqrk cre plpyr, orpnhfr gur pyvrag
+        # vf pheeragyl qhzo gb qbjaybnq zber guna bar cre plpyr naljnl.
+        # Npghnyyl jr fubhyq svk gur pyvrag, ohg guvf vf n zvabe bcgvzvmngvba
+        # ba gur freire fvqr.
+        vs abg fhttrfgrq naq \
+          byqcnpx naq (byqcnpx == Gehr be byqcnpx.raqfjvgu('.zvqk')):
+            # SVKZR: jr fubhyqa'g ernyyl unir gb xabj nobhg zvqk svyrf
+            # ng guvf ynlre.  Ohg rkvfgf() ba n zvqk qbrfa'g erghea gur
+            # cnpxanzr (fvapr vg qbrfa'g xabj)... cebonoyl jr fubhyq whfg
+            # svk gung qrsvpvrapl bs zvqk svyrf riraghnyyl, nygubhtu vg'yy
+            # znxr gur svyrf ovttre.  Guvf zrgubq vf pregnvayl abg irel
+            # rssvpvrag.
+            j.bowpnpur.erserfu(fxvc_zvqk = Gehr)
+            byqcnpx = j.bowpnpur.rkvfgf(fun)
+            ybt('arj fhttrfgvba: %e\a' % byqcnpx)
+            nffreg(byqcnpx)
+            nffreg(byqcnpx != Gehr)
+            nffreg(abg byqcnpx.raqfjvgu('.zvqk'))
+            j.bowpnpur.erserfu(fxvc_zvqk = Snyfr)
+        vs abg fhttrfgrq naq byqcnpx:
+            nffreg(byqcnpx.raqfjvgu('.vqk'))
+            (qve,anzr) = bf.cngu.fcyvg(byqcnpx)
+            vs abg (anzr va fhttrfgrq):
+                ybt("ohc freire: fhttrfgvat vaqrk %f\a" % anzr)
+                pbaa.jevgr('vaqrk %f\a' % anzr)
+                fhttrfgrq[anzr] = 1
+        ryfr:
+            j._enj_jevgr([ohs])
+    # ABGERNPURQ
+
+
+qrs ernq_ers(pbaa, ersanzr):
+    tvg.purpx_ercb_be_qvr()
+    e = tvg.ernq_ers(ersanzr)
+    pbaa.jevgr('%f\a' % (e be '').rapbqr('urk'))
+    pbaa.bx()
+
+
+qrs hcqngr_ers(pbaa, ersanzr):
+    tvg.purpx_ercb_be_qvr()
+    arjiny = pbaa.ernqyvar().fgevc()
+    byqiny = pbaa.ernqyvar().fgevc()
+    tvg.hcqngr_ers(ersanzr, arjiny.qrpbqr('urk'), byqiny.qrpbqr('urk'))
+    pbaa.bx()
+
+
+qrs png(pbaa, vq):
+    tvg.purpx_ercb_be_qvr()
+    gel:
+        sbe oybo va tvg.png(vq):
+            pbaa.jevgr(fgehpg.cnpx('!V', yra(oybo)))
+            pbaa.jevgr(oybo)
+    rkprcg XrlReebe, r:
+        ybt('freire: reebe: %f\a' % r)
+        pbaa.jevgr('\0\0\0\0')
+        pbaa.reebe(r)
+    ryfr:
+        pbaa.jevgr('\0\0\0\0')
+        pbaa.bx()
+
+
+bcgfcrp = """
+ohc freire
 """
-o = options.Options('bup server', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal('no arguments expected')
-
-log('bup server: reading from stdin.\n')
-
-commands = {
-    'init-dir': init_dir,
-    'set-dir': set_dir,
-    'list-indexes': list_indexes,
-    'send-index': send_index,
-    'receive-objects': receive_objects,
-    'read-ref': read_ref,
-    'update-ref': update_ref,
-    'cat': cat,
+b = bcgvbaf.Bcgvbaf('ohc freire', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+ybt('ohc freire: ernqvat sebz fgqva.\a')
+
+pbzznaqf = {
+    'vavg-qve': vavg_qve,
+    'frg-qve': frg_qve,
+    'yvfg-vaqrkrf': yvfg_vaqrkrf,
+    'fraq-vaqrk': fraq_vaqrk,
+    'erprvir-bowrpgf': erprvir_bowrpgf,
+    'ernq-ers': ernq_ers,
+    'hcqngr-ers': hcqngr_ers,
+    'png': png,
 }
 
-# FIXME: this protocol is totally lame and not at all future-proof.
-# (Especially since we abort completely as soon as *anything* bad happens)
-conn = Conn(sys.stdin, sys.stdout)
-lr = linereader(conn)
-for _line in lr:
-    line = _line.strip()
-    if not line:
-        continue
-    log('bup server: command: %r\n' % line)
-    words = line.split(' ', 1)
-    cmd = words[0]
-    rest = len(words)>1 and words[1] or ''
-    if cmd == 'quit':
-        break
-    else:
-        cmd = commands.get(cmd)
-        if cmd:
-            cmd(conn, rest)
-        else:
-            raise Exception('unknown server command: %r\n' % line)
-
-log('bup server: done\n')
-#!/usr/bin/env python
-import sys, time, struct
-from bup import hashsplit, git, options, client
-from bup.helpers import *
-from subprocess import PIPE
-
-
-optspec = """
-bup join [-r host:path] [refs or hashes...]
+# SVKZR: guvf cebgbpby vf gbgnyyl ynzr naq abg ng nyy shgher-cebbs.
+# (Rfcrpvnyyl fvapr jr nobeg pbzcyrgryl nf fbba nf *nalguvat* onq unccraf)
+pbaa = Pbaa(flf.fgqva, flf.fgqbhg)
+ye = yvarernqre(pbaa)
+sbe _yvar va ye:
+    yvar = _yvar.fgevc()
+    vs abg yvar:
+        pbagvahr
+    ybt('ohc freire: pbzznaq: %e\a' % yvar)
+    jbeqf = yvar.fcyvg(' ', 1)
+    pzq = jbeqf[0]
+    erfg = yra(jbeqf)>1 naq jbeqf[1] be ''
+    vs pzq == 'dhvg':
+        oernx
+    ryfr:
+        pzq = pbzznaqf.trg(pzq)
+        vs pzq:
+            pzq(pbaa, erfg)
+        ryfr:
+            envfr Rkprcgvba('haxabja freire pbzznaq: %e\a' % yvar)
+
+ybt('ohc freire: qbar\a')
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr, fgehpg
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, pyvrag
+sebz ohc.urycref vzcbeg *
+sebz fhocebprff vzcbeg CVCR
+
+
+bcgfcrp = """
+ohc wbva [-e ubfg:cngu] [ersf be unfurf...]
 --
-r,remote=  remote repository path
+e,erzbgr=  erzbgr ercbfvgbel cngu
 """
-o = options.Options('bup join', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
+b = bcgvbaf.Bcgvbaf('ohc wbva', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
 
-git.check_repo_or_die()
+tvg.purpx_ercb_be_qvr()
 
-if not extra:
-    extra = linereader(sys.stdin)
+vs abg rkgen:
+    rkgen = yvarernqre(flf.fgqva)
 
-ret = 0
+erg = 0
 
-if opt.remote:
-    cli = client.Client(opt.remote)
-    cat = cli.cat
-else:
-    cp = git.CatPipe()
-    cat = cp.join
+vs bcg.erzbgr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    png = pyv.png
+ryfr:
+    pc = tvg.PngCvcr()
+    png = pc.wbva
 
-for id in extra:
-    try:
-        for blob in cat(id):
-            sys.stdout.write(blob)
-    except KeyError, e:
-        sys.stdout.flush()
-        log('error: %s\n' % e)
-        ret = 1
+sbe vq va rkgen:
+    gel:
+        sbe oybo va png(vq):
+            flf.fgqbhg.jevgr(oybo)
+    rkprcg XrlReebe, r:
+        flf.fgqbhg.syhfu()
+        ybt('reebe: %f\a' % r)
+        erg = 1
 
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, re, errno, stat, time, math
-from bup import hashsplit, git, options, index, client
-from bup.helpers import *
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, er, reeab, fgng, gvzr, zngu
+sebz ohc vzcbeg unfufcyvg, tvg, bcgvbaf, vaqrk, pyvrag
+sebz ohc.urycref vzcbeg *
 
 
-optspec = """
-bup save [-tc] [-n name] <filenames...>
+bcgfcrp = """
+ohc fnir [-gp] [-a anzr] <svyranzrf...>
 --
-r,remote=  remote repository path
-t,tree     output a tree id
-c,commit   output a commit id
-n,name=    name of backup set to update (if any)
-v,verbose  increase log output (can be used more than once)
-q,quiet    don't show progress meter
-smaller=   only back up files smaller than n bytes
+e,erzbgr=  erzbgr ercbfvgbel cngu
+g,gerr     bhgchg n gerr vq
+p,pbzzvg   bhgchg n pbzzvg vq
+a,anzr=    anzr bs onpxhc frg gb hcqngr (vs nal)
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
+d,dhvrg    qba'g fubj cebterff zrgre
+fznyyre=   bayl onpx hc svyrf fznyyre guna a olgrf
 """
-o = options.Options('bup save', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-git.check_repo_or_die()
-if not (opt.tree or opt.commit or opt.name):
-    o.fatal("use one or more of -t, -c, -n")
-if not extra:
-    o.fatal("no filenames given")
-
-opt.progress = (istty and not opt.quiet)
-opt.smaller = parse_num(opt.smaller or 0)
-
-is_reverse = os.environ.get('BUP_SERVER_REVERSE')
-if is_reverse and opt.remote:
-    o.fatal("don't use -r in reverse mode; it's automatic")
-
-refname = opt.name and 'refs/heads/%s' % opt.name or None
-if opt.remote or is_reverse:
-    cli = client.Client(opt.remote)
-    oldref = refname and cli.read_ref(refname) or None
-    w = cli.new_packwriter()
-else:
-    cli = None
-    oldref = refname and git.read_ref(refname) or None
-    w = git.PackWriter()
-
-handle_ctrl_c()
-
-
-def eatslash(dir):
-    if dir.endswith('/'):
-        return dir[:-1]
-    else:
-        return dir
-
-
-parts = ['']
-shalists = [[]]
-
-def _push(part):
-    assert(part)
-    parts.append(part)
-    shalists.append([])
-
-def _pop(force_tree):
-    assert(len(parts) >= 1)
-    part = parts.pop()
-    shalist = shalists.pop()
-    tree = force_tree or w.new_tree(shalist)
-    if shalists:
-        shalists[-1].append(('40000', part, tree))
-    else:  # this was the toplevel, so put it back for sanity
-        shalists.append(shalist)
-    return tree
-
-lastremain = None
-def progress_report(n):
-    global count, subcount, lastremain
-    subcount += n
-    cc = count + subcount
-    pct = total and (cc*100.0/total) or 0
-    now = time.time()
-    elapsed = now - tstart
-    kps = elapsed and int(cc/1024./elapsed)
-    kps_frac = 10 ** int(math.log(kps+1, 10) - 1)
-    kps = int(kps/kps_frac)*kps_frac
-    if cc:
-        remain = elapsed*1.0/cc * (total-cc)
-    else:
-        remain = 0.0
-    if (lastremain and (remain > lastremain)
-          and ((remain - lastremain)/lastremain < 0.05)):
-        remain = lastremain
-    else:
-        lastremain = remain
-    hours = int(remain/60/60)
-    mins = int(remain/60 - hours*60)
-    secs = int(remain - hours*60*60 - mins*60)
-    if elapsed < 30:
-        remainstr = ''
-        kpsstr = ''
-    else:
-        kpsstr = '%dk/s' % kps
-        if hours:
-            remainstr = '%dh%dm' % (hours, mins)
-        elif mins:
-            remainstr = '%dm%d' % (mins, secs)
-        else:
-            remainstr = '%ds' % secs
-    progress('Saving: %.2f%% (%d/%dk, %d/%d files) %s %s\r'
-             % (pct, cc/1024, total/1024, fcount, ftotal,
-                remainstr, kpsstr))
-
-
-r = index.Reader(git.repo('bupindex'))
-
-def already_saved(ent):
-    return ent.is_valid() and w.exists(ent.sha) and ent.sha
-
-def wantrecurse_pre(ent):
-    return not already_saved(ent)
-
-def wantrecurse_during(ent):
-    return not already_saved(ent) or ent.sha_missing()
-
-total = ftotal = 0
-if opt.progress:
-    for (transname,ent) in r.filter(extra, wantrecurse=wantrecurse_pre):
-        if not (ftotal % 10024):
-            progress('Reading index: %d\r' % ftotal)
-        exists = ent.exists()
-        hashvalid = already_saved(ent)
-        ent.set_sha_missing(not hashvalid)
-        if not opt.smaller or ent.size < opt.smaller:
-            if exists and not hashvalid:
-                total += ent.size
-        ftotal += 1
-    progress('Reading index: %d, done.\n' % ftotal)
-    hashsplit.progress_callback = progress_report
-
-tstart = time.time()
-count = subcount = fcount = 0
-lastskip_name = None
-lastdir = ''
-for (transname,ent) in r.filter(extra, wantrecurse=wantrecurse_during):
-    (dir, file) = os.path.split(ent.name)
-    exists = (ent.flags & index.IX_EXISTS)
-    hashvalid = already_saved(ent)
-    wasmissing = ent.sha_missing()
-    oldsize = ent.size
-    if opt.verbose:
-        if not exists:
-            status = 'D'
-        elif not hashvalid:
-            if ent.sha == index.EMPTY_SHA:
-                status = 'A'
-            else:
-                status = 'M'
-        else:
-            status = ' '
-        if opt.verbose >= 2:
-            log('%s %-70s\n' % (status, ent.name))
-        elif not stat.S_ISDIR(ent.mode) and lastdir != dir:
-            if not lastdir.startswith(dir):
-                log('%s %-70s\n' % (status, os.path.join(dir, '')))
-            lastdir = dir
-
-    if opt.progress:
-        progress_report(0)
-    fcount += 1
+b = bcgvbaf.Bcgvbaf('ohc fnir', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+tvg.purpx_ercb_be_qvr()
+vs abg (bcg.gerr be bcg.pbzzvg be bcg.anzr):
+    b.sngny("hfr bar be zber bs -g, -p, -a")
+vs abg rkgen:
+    b.sngny("ab svyranzrf tvira")
+
+bcg.cebterff = (vfggl naq abg bcg.dhvrg)
+bcg.fznyyre = cnefr_ahz(bcg.fznyyre be 0)
+
+vf_erirefr = bf.raiveba.trg('OHC_FREIRE_ERIREFR')
+vs vf_erirefr naq bcg.erzbgr:
+    b.sngny("qba'g hfr -e va erirefr zbqr; vg'f nhgbzngvp")
+
+ersanzr = bcg.anzr naq 'ersf/urnqf/%f' % bcg.anzr be Abar
+vs bcg.erzbgr be vf_erirefr:
+    pyv = pyvrag.Pyvrag(bcg.erzbgr)
+    byqers = ersanzr naq pyv.ernq_ers(ersanzr) be Abar
+    j = pyv.arj_cnpxjevgre()
+ryfr:
+    pyv = Abar
+    byqers = ersanzr naq tvg.ernq_ers(ersanzr) be Abar
+    j = tvg.CnpxJevgre()
+
+unaqyr_pgey_p()
+
+
+qrs rngfynfu(qve):
+    vs qve.raqfjvgu('/'):
+        erghea qve[:-1]
+    ryfr:
+        erghea qve
+
+
+cnegf = ['']
+funyvfgf = [[]]
+
+qrs _chfu(cneg):
+    nffreg(cneg)
+    cnegf.nccraq(cneg)
+    funyvfgf.nccraq([])
+
+qrs _cbc(sbepr_gerr):
+    nffreg(yra(cnegf) >= 1)
+    cneg = cnegf.cbc()
+    funyvfg = funyvfgf.cbc()
+    gerr = sbepr_gerr be j.arj_gerr(funyvfg)
+    vs funyvfgf:
+        funyvfgf[-1].nccraq(('40000', cneg, gerr))
+    ryfr:  # guvf jnf gur gbcyriry, fb chg vg onpx sbe fnavgl
+        funyvfgf.nccraq(funyvfg)
+    erghea gerr
+
+ynfgerznva = Abar
+qrs cebterff_ercbeg(a):
+    tybony pbhag, fhopbhag, ynfgerznva
+    fhopbhag += a
+    pp = pbhag + fhopbhag
+    cpg = gbgny naq (pp*100.0/gbgny) be 0
+    abj = gvzr.gvzr()
+    ryncfrq = abj - gfgneg
+    xcf = ryncfrq naq vag(pp/1024./ryncfrq)
+    xcf_senp = 10 ** vag(zngu.ybt(xcf+1, 10) - 1)
+    xcf = vag(xcf/xcf_senp)*xcf_senp
+    vs pp:
+        erznva = ryncfrq*1.0/pp * (gbgny-pp)
+    ryfr:
+        erznva = 0.0
+    vs (ynfgerznva naq (erznva > ynfgerznva)
+          naq ((erznva - ynfgerznva)/ynfgerznva < 0.05)):
+        erznva = ynfgerznva
+    ryfr:
+        ynfgerznva = erznva
+    ubhef = vag(erznva/60/60)
+    zvaf = vag(erznva/60 - ubhef*60)
+    frpf = vag(erznva - ubhef*60*60 - zvaf*60)
+    vs ryncfrq < 30:
+        erznvafge = ''
+        xcffge = ''
+    ryfr:
+        xcffge = '%qx/f' % xcf
+        vs ubhef:
+            erznvafge = '%qu%qz' % (ubhef, zvaf)
+        ryvs zvaf:
+            erznvafge = '%qz%q' % (zvaf, frpf)
+        ryfr:
+            erznvafge = '%qf' % frpf
+    cebterff('Fnivat: %.2s%% (%q/%qx, %q/%q svyrf) %f %f\e'
+             % (cpg, pp/1024, gbgny/1024, spbhag, sgbgny,
+                erznvafge, xcffge))
+
+
+e = vaqrk.Ernqre(tvg.ercb('ohcvaqrk'))
+
+qrs nyernql_fnirq(rag):
+    erghea rag.vf_inyvq() naq j.rkvfgf(rag.fun) naq rag.fun
+
+qrs jnagerphefr_cer(rag):
+    erghea abg nyernql_fnirq(rag)
+
+qrs jnagerphefr_qhevat(rag):
+    erghea abg nyernql_fnirq(rag) be rag.fun_zvffvat()
+
+gbgny = sgbgny = 0
+vs bcg.cebterff:
+    sbe (genafanzr,rag) va e.svygre(rkgen, jnagerphefr=jnagerphefr_cer):
+        vs abg (sgbgny % 10024):
+            cebterff('Ernqvat vaqrk: %q\e' % sgbgny)
+        rkvfgf = rag.rkvfgf()
+        unfuinyvq = nyernql_fnirq(rag)
+        rag.frg_fun_zvffvat(abg unfuinyvq)
+        vs abg bcg.fznyyre be rag.fvmr < bcg.fznyyre:
+            vs rkvfgf naq abg unfuinyvq:
+                gbgny += rag.fvmr
+        sgbgny += 1
+    cebterff('Ernqvat vaqrk: %q, qbar.\a' % sgbgny)
+    unfufcyvg.cebterff_pnyyonpx = cebterff_ercbeg
+
+gfgneg = gvzr.gvzr()
+pbhag = fhopbhag = spbhag = 0
+ynfgfxvc_anzr = Abar
+ynfgqve = ''
+sbe (genafanzr,rag) va e.svygre(rkgen, jnagerphefr=jnagerphefr_qhevat):
+    (qve, svyr) = bf.cngu.fcyvg(rag.anzr)
+    rkvfgf = (rag.syntf & vaqrk.VK_RKVFGF)
+    unfuinyvq = nyernql_fnirq(rag)
+    jnfzvffvat = rag.fun_zvffvat()
+    byqfvmr = rag.fvmr
+    vs bcg.ireobfr:
+        vs abg rkvfgf:
+            fgnghf = 'Q'
+        ryvs abg unfuinyvq:
+            vs rag.fun == vaqrk.RZCGL_FUN:
+                fgnghf = 'N'
+            ryfr:
+                fgnghf = 'Z'
+        ryfr:
+            fgnghf = ' '
+        vs bcg.ireobfr >= 2:
+            ybt('%f %-70f\a' % (fgnghf, rag.anzr))
+        ryvs abg fgng.F_VFQVE(rag.zbqr) naq ynfgqve != qve:
+            vs abg ynfgqve.fgnegfjvgu(qve):
+                ybt('%f %-70f\a' % (fgnghf, bf.cngu.wbva(qve, '')))
+            ynfgqve = qve
+
+    vs bcg.cebterff:
+        cebterff_ercbeg(0)
+    spbhag += 1
     
-    if not exists:
-        continue
-    if opt.smaller and ent.size >= opt.smaller:
-        if exists and not hashvalid:
-            add_error('skipping large file "%s"' % ent.name)
-            lastskip_name = ent.name
-        continue
-
-    assert(dir.startswith('/'))
-    dirp = dir.split('/')
-    while parts > dirp:
-        _pop(force_tree = None)
-    if dir != '/':
-        for part in dirp[len(parts):]:
-            _push(part)
-
-    if not file:
-        # no filename portion means this is a subdir.  But
-        # sub/parentdirectories already handled in the pop/push() part above.
-        oldtree = already_saved(ent) # may be None
-        newtree = _pop(force_tree = oldtree)
-        if not oldtree:
-            if lastskip_name and lastskip_name.startswith(ent.name):
-                ent.invalidate()
-            else:
-                ent.validate(040000, newtree)
-            ent.repack()
-        if exists and wasmissing:
-            count += oldsize
-        continue
-
-    # it's not a directory
-    id = None
-    if hashvalid:
-        mode = '%o' % ent.gitmode
-        id = ent.sha
-        shalists[-1].append((mode
-                             git.mangle_name(file, ent.mode, ent.gitmode),
-                             id))
-    else:
-        if stat.S_ISREG(ent.mode):
-            try:
-                f = hashsplit.open_noatime(ent.name)
-            except IOError, e:
-                add_error(e)
-                lastskip_name = ent.name
-            except OSError, e:
-                add_error(e)
-                lastskip_name = ent.name
-            else:
-                (mode, id) = hashsplit.split_to_blob_or_tree(w, [f])
-        else:
-            if stat.S_ISDIR(ent.mode):
-                assert(0)  # handled above
-            elif stat.S_ISLNK(ent.mode):
-                try:
-                    rl = os.readlink(ent.name)
-                except OSError, e:
-                    add_error(e)
-                    lastskip_name = ent.name
-                except IOError, e:
-                    add_error(e)
-                    lastskip_name = ent.name
-                else:
-                    (mode, id) = ('120000', w.new_blob(rl))
-            else:
-                add_error(Exception('skipping special file "%s"' % ent.name))
-                lastskip_name = ent.name
-        if id:
-            ent.validate(int(mode, 8), id)
-            ent.repack()
-            shalists[-1].append((mode,
-                                 git.mangle_name(file, ent.mode, ent.gitmode),
-                                 id))
-    if exists and wasmissing:
-        count += oldsize
-        subcount = 0
-
-
-if opt.progress:
-    pct = total and count*100.0/total or 100
-    progress('Saving: %.2f%% (%d/%dk, %d/%d files), done.    \n'
-             % (pct, count/1024, total/1024, fcount, ftotal))
-
-while len(parts) > 1:
-    _pop(force_tree = None)
-assert(len(shalists) == 1)
-tree = w.new_tree(shalists[-1])
-if opt.tree:
-    print tree.encode('hex')
-if opt.commit or opt.name:
-    msg = 'bup save\n\nGenerated by command:\n%r' % sys.argv
-    ref = opt.name and ('refs/heads/%s' % opt.name) or None
-    commit = w.new_commit(oldref, tree, msg)
-    if opt.commit:
-        print commit.encode('hex')
-
-w.close()  # must close before we can update the ref
+    vs abg rkvfgf:
+        pbagvahr
+    vs bcg.fznyyre naq rag.fvmr >= bcg.fznyyre:
+        vs rkvfgf naq abg unfuinyvq:
+            nqq_reebe('fxvccvat ynetr svyr "%f"' % rag.anzr)
+            ynfgfxvc_anzr = rag.anzr
+        pbagvahr
+
+    nffreg(qve.fgnegfjvgu('/'))
+    qvec = qve.fcyvg('/')
+    juvyr cnegf > qvec:
+        _cbc(sbepr_gerr = Abar)
+    vs qve != '/':
+        sbe cneg va qvec[yra(cnegf):]:
+            _chfu(cneg)
+
+    vs abg svyr:
+        # ab svyranzr cbegvba zrnaf guvf vf n fhoqve.  Ohg
+        # fho/cneragqverpgbevrf nyernql unaqyrq va gur cbc/chfu() cneg nobir.
+        byqgerr = nyernql_fnirq(rag) # znl or Abar
+        arjgerr = _cbc(sbepr_gerr = byqgerr)
+        vs abg byqgerr:
+            vs ynfgfxvc_anzr naq ynfgfxvc_anzr.fgnegfjvgu(rag.anzr):
+                rag.vainyvqngr()
+            ryfr:
+                rag.inyvqngr(040000, arjgerr)
+            rag.ercnpx()
+        vs rkvfgf naq jnfzvffvat:
+            pbhag += byqfvmr
+        pbagvahr
+
+    # vg'f abg n qverpgbel
+    vq = Abar
+    vs unfuinyvq:
+        zbqr = '%b' % rag.tvgzbqr
+        vq = rag.fun
+        funyvfgf[-1].nccraq((zbqr
+                             tvg.znatyr_anzr(svyr, rag.zbqr, rag.tvgzbqr),
+                             vq))
+    ryfr:
+        vs fgng.F_VFERT(rag.zbqr):
+            gel:
+                s = unfufcyvg.bcra_abngvzr(rag.anzr)
+            rkprcg VBReebe, r:
+                nqq_reebe(r)
+                ynfgfxvc_anzr = rag.anzr
+            rkprcg BFReebe, r:
+                nqq_reebe(r)
+                ynfgfxvc_anzr = rag.anzr
+            ryfr:
+                (zbqr, vq) = unfufcyvg.fcyvg_gb_oybo_be_gerr(j, [s])
+        ryfr:
+            vs fgng.F_VFQVE(rag.zbqr):
+                nffreg(0)  # unaqyrq nobir
+            ryvs fgng.F_VFYAX(rag.zbqr):
+                gel:
+                    ey = bf.ernqyvax(rag.anzr)
+                rkprcg BFReebe, r:
+                    nqq_reebe(r)
+                    ynfgfxvc_anzr = rag.anzr
+                rkprcg VBReebe, r:
+                    nqq_reebe(r)
+                    ynfgfxvc_anzr = rag.anzr
+                ryfr:
+                    (zbqr, vq) = ('120000', j.arj_oybo(ey))
+            ryfr:
+                nqq_reebe(Rkprcgvba('fxvccvat fcrpvny svyr "%f"' % rag.anzr))
+                ynfgfxvc_anzr = rag.anzr
+        vs vq:
+            rag.inyvqngr(vag(zbqr, 8), vq)
+            rag.ercnpx()
+            funyvfgf[-1].nccraq((zbqr,
+                                 tvg.znatyr_anzr(svyr, rag.zbqr, rag.tvgzbqr),
+                                 vq))
+    vs rkvfgf naq jnfzvffvat:
+        pbhag += byqfvmr
+        fhopbhag = 0
+
+
+vs bcg.cebterff:
+    cpg = gbgny naq pbhag*100.0/gbgny be 100
+    cebterff('Fnivat: %.2s%% (%q/%qx, %q/%q svyrf), qbar.    \a'
+             % (cpg, pbhag/1024, gbgny/1024, spbhag, sgbgny))
+
+juvyr yra(cnegf) > 1:
+    _cbc(sbepr_gerr = Abar)
+nffreg(yra(funyvfgf) == 1)
+gerr = j.arj_gerr(funyvfgf[-1])
+vs bcg.gerr:
+    cevag gerr.rapbqr('urk')
+vs bcg.pbzzvg be bcg.anzr:
+    zft = 'ohc fnir\a\aTrarengrq ol pbzznaq:\a%e' % flf.neti
+    ers = bcg.anzr naq ('ersf/urnqf/%f' % bcg.anzr) be Abar
+    pbzzvg = j.arj_pbzzvg(byqers, gerr, zft)
+    vs bcg.pbzzvg:
+        cevag pbzzvg.rapbqr('urk')
+
+j.pybfr()  # zhfg pybfr orsber jr pna hcqngr gur ers
         
-if opt.name:
-    if cli:
-        cli.update_ref(refname, commit, oldref)
-    else:
-        git.update_ref(refname, commit, oldref)
-
-if cli:
-    cli.close()
-
-if saved_errors:
-    log('WARNING: %d errors encountered while saving.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, time
-from bup import options
-
-optspec = """
-bup tick
+vs bcg.anzr:
+    vs pyv:
+        pyv.hcqngr_ers(ersanzr, pbzzvg, byqers)
+    ryfr:
+        tvg.hcqngr_ers(ersanzr, pbzzvg, byqers)
+
+vs pyv:
+    pyv.pybfr()
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq juvyr fnivat.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, gvzr
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc gvpx
 """
-o = options.Options('bup tick', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-t = time.time()
-tleft = 1 - (t - int(t))
-time.sleep(tleft)
-#!/usr/bin/env python
-import os, sys, stat, time
-from bup import options, git, index, drecurse
-from bup.helpers import *
-
-
-def merge_indexes(out, r1, r2):
-    for e in index.MergeIter([r1, r2]):
-        # FIXME: shouldn't we remove deleted entries eventually?  When?
-        out.add_ixentry(e)
-
-
-class IterHelper:
-    def __init__(self, l):
-        self.i = iter(l)
-        self.cur = None
-        self.next()
-
-    def next(self):
-        try:
-            self.cur = self.i.next()
-        except StopIteration:
-            self.cur = None
-        return self.cur
-
-
-def check_index(reader):
-    try:
-        log('check: checking forward iteration...\n')
-        e = None
-        d = {}
-        for e in reader.forward_iter():
-            if e.children_n:
-                if opt.verbose:
-                    log('%08x+%-4d %r\n' % (e.children_ofs, e.children_n,
-                                            e.name))
-                assert(e.children_ofs)
-                assert(e.name.endswith('/'))
-                assert(not d.get(e.children_ofs))
-                d[e.children_ofs] = 1
-            if e.flags & index.IX_HASHVALID:
-                assert(e.sha != index.EMPTY_SHA)
-                assert(e.gitmode)
-        assert(not e or e.name == '/')  # last entry is *always* /
-        log('check: checking normal iteration...\n')
-        last = None
-        for e in reader:
-            if last:
-                assert(last > e.name)
-            last = e.name
-    except:
-        log('index error! at %r\n' % e)
-        raise
-    log('check: passed.\n')
-
-
-def update_index(top):
-    ri = index.Reader(indexfile)
-    wi = index.Writer(indexfile)
-    rig = IterHelper(ri.iter(name=top))
-    tstart = int(time.time())
-
-    hashgen = None
-    if opt.fake_valid:
-        def hashgen(name):
-            return (0100644, index.FAKE_SHA)
-
-    total = 0
-    for (path,pst) in drecurse.recursive_dirlist([top], xdev=opt.xdev):
-        if opt.verbose>=2 or (opt.verbose==1 and stat.S_ISDIR(pst.st_mode)):
-            sys.stdout.write('%s\n' % path)
-            sys.stdout.flush()
-            progress('Indexing: %d\r' % total)
-        elif not (total % 128):
-            progress('Indexing: %d\r' % total)
-        total += 1
-        while rig.cur and rig.cur.name > path:  # deleted paths
-            if rig.cur.exists():
-                rig.cur.set_deleted()
-                rig.cur.repack()
-            rig.next()
-        if rig.cur and rig.cur.name == path:    # paths that already existed
-            if pst:
-                rig.cur.from_stat(pst, tstart)
-            if not (rig.cur.flags & index.IX_HASHVALID):
-                if hashgen:
-                    (rig.cur.gitmode, rig.cur.sha) = hashgen(path)
-                    rig.cur.flags |= index.IX_HASHVALID
-            if opt.fake_invalid:
-                rig.cur.invalidate()
-            rig.cur.repack()
-            rig.next()
-        else:  # new paths
-            wi.add(path, pst, hashgen = hashgen)
-    progress('Indexing: %d, done.\n' % total)
+b = bcgvbaf.Bcgvbaf('ohc gvpx', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+g = gvzr.gvzr()
+gyrsg = 1 - (g - vag(g))
+gvzr.fyrrc(gyrsg)
+#!/hfe/ova/rai clguba
+vzcbeg bf, flf, fgng, gvzr
+sebz ohc vzcbeg bcgvbaf, tvg, vaqrk, qerphefr
+sebz ohc.urycref vzcbeg *
+
+
+qrs zretr_vaqrkrf(bhg, e1, e2):
+    sbe r va vaqrk.ZretrVgre([e1, e2]):
+        # SVKZR: fubhyqa'g jr erzbir qryrgrq ragevrf riraghnyyl?  Jura?
+        bhg.nqq_vkragel(r)
+
+
+pynff VgreUrycre:
+    qrs __vavg__(frys, y):
+        frys.v = vgre(y)
+        frys.phe = Abar
+        frys.arkg()
+
+    qrs arkg(frys):
+        gel:
+            frys.phe = frys.v.arkg()
+        rkprcg FgbcVgrengvba:
+            frys.phe = Abar
+        erghea frys.phe
+
+
+qrs purpx_vaqrk(ernqre):
+    gel:
+        ybt('purpx: purpxvat sbejneq vgrengvba...\a')
+        r = Abar
+        q = {}
+        sbe r va ernqre.sbejneq_vgre():
+            vs r.puvyqera_a:
+                vs bcg.ireobfr:
+                    ybt('%08k+%-4q %e\a' % (r.puvyqera_bsf, r.puvyqera_a,
+                                            r.anzr))
+                nffreg(r.puvyqera_bsf)
+                nffreg(r.anzr.raqfjvgu('/'))
+                nffreg(abg q.trg(r.puvyqera_bsf))
+                q[r.puvyqera_bsf] = 1
+            vs r.syntf & vaqrk.VK_UNFUINYVQ:
+                nffreg(r.fun != vaqrk.RZCGL_FUN)
+                nffreg(r.tvgzbqr)
+        nffreg(abg r be r.anzr == '/')  # ynfg ragel vf *nyjnlf* /
+        ybt('purpx: purpxvat abezny vgrengvba...\a')
+        ynfg = Abar
+        sbe r va ernqre:
+            vs ynfg:
+                nffreg(ynfg > r.anzr)
+            ynfg = r.anzr
+    rkprcg:
+        ybt('vaqrk reebe! ng %e\a' % r)
+        envfr
+    ybt('purpx: cnffrq.\a')
+
+
+qrs hcqngr_vaqrk(gbc):
+    ev = vaqrk.Ernqre(vaqrksvyr)
+    jv = vaqrk.Jevgre(vaqrksvyr)
+    evt = VgreUrycre(ev.vgre(anzr=gbc))
+    gfgneg = vag(gvzr.gvzr())
+
+    unfutra = Abar
+    vs bcg.snxr_inyvq:
+        qrs unfutra(anzr):
+            erghea (0100644, vaqrk.SNXR_FUN)
+
+    gbgny = 0
+    sbe (cngu,cfg) va qerphefr.erphefvir_qveyvfg([gbc], kqri=bcg.kqri):
+        vs bcg.ireobfr>=2 be (bcg.ireobfr==1 naq fgng.F_VFQVE(cfg.fg_zbqr)):
+            flf.fgqbhg.jevgr('%f\a' % cngu)
+            flf.fgqbhg.syhfu()
+            cebterff('Vaqrkvat: %q\e' % gbgny)
+        ryvs abg (gbgny % 128):
+            cebterff('Vaqrkvat: %q\e' % gbgny)
+        gbgny += 1
+        juvyr evt.phe naq evt.phe.anzr > cngu:  # qryrgrq cnguf
+            vs evt.phe.rkvfgf():
+                evt.phe.frg_qryrgrq()
+                evt.phe.ercnpx()
+            evt.arkg()
+        vs evt.phe naq evt.phe.anzr == cngu:    # cnguf gung nyernql rkvfgrq
+            vs cfg:
+                evt.phe.sebz_fgng(cfg, gfgneg)
+            vs abg (evt.phe.syntf & vaqrk.VK_UNFUINYVQ):
+                vs unfutra:
+                    (evt.phe.tvgzbqr, evt.phe.fun) = unfutra(cngu)
+                    evt.phe.syntf |= vaqrk.VK_UNFUINYVQ
+            vs bcg.snxr_vainyvq:
+                evt.phe.vainyvqngr()
+            evt.phe.ercnpx()
+            evt.arkg()
+        ryfr:  # arj cnguf
+            jv.nqq(cngu, cfg, unfutra = unfutra)
+    cebterff('Vaqrkvat: %q, qbar.\a' % gbgny)
     
-    if ri.exists():
-        ri.save()
-        wi.flush()
-        if wi.count:
-            wr = wi.new_reader()
-            if opt.check:
-                log('check: before merging: oldfile\n')
-                check_index(ri)
-                log('check: before merging: newfile\n')
-                check_index(wr)
-            mi = index.Writer(indexfile)
-            merge_indexes(mi, ri, wr)
-            ri.close()
-            mi.close()
-            wr.close()
-        wi.abort()
-    else:
-        wi.close()
-
-
-optspec = """
-bup index <-p|m|u> [options...] <filenames...>
+    vs ev.rkvfgf():
+        ev.fnir()
+        jv.syhfu()
+        vs jv.pbhag:
+            je = jv.arj_ernqre()
+            vs bcg.purpx:
+                ybt('purpx: orsber zretvat: byqsvyr\a')
+                purpx_vaqrk(ev)
+                ybt('purpx: orsber zretvat: arjsvyr\a')
+                purpx_vaqrk(je)
+            zv = vaqrk.Jevgre(vaqrksvyr)
+            zretr_vaqrkrf(zv, ev, je)
+            ev.pybfr()
+            zv.pybfr()
+            je.pybfr()
+        jv.nobeg()
+    ryfr:
+        jv.pybfr()
+
+
+bcgfcrp = """
+ohc vaqrk <-c|z|h> [bcgvbaf...] <svyranzrf...>
 --
-p,print    print the index entries for the given names (also works with -u)
-m,modified print only added/deleted/modified files (implies -p)
-s,status   print each filename with a status char (A/M/D) (implies -p)
-H,hash     print the hash for each object next to its name (implies -p)
-l,long     print more information about each file
-u,update   (recursively) update the index entries for the given filenames
-x,xdev,one-file-system  don't cross filesystem boundaries
-fake-valid mark all index entries as up-to-date even if they aren't
-fake-invalid mark all index entries as invalid
-check      carefully check index file integrity
-f,indexfile=  the name of the index file (default 'index')
-v,verbose  increase log output (can be used more than once)
+c,cevag    cevag gur vaqrk ragevrf sbe gur tvira anzrf (nyfb jbexf jvgu -h)
+z,zbqvsvrq cevag bayl nqqrq/qryrgrq/zbqvsvrq svyrf (vzcyvrf -c)
+f,fgnghf   cevag rnpu svyranzr jvgu n fgnghf pune (N/Z/Q) (vzcyvrf -c)
+U,unfu     cevag gur unfu sbe rnpu bowrpg arkg gb vgf anzr (vzcyvrf -c)
+y,ybat     cevag zber vasbezngvba nobhg rnpu svyr
+h,hcqngr   (erphefviryl) hcqngr gur vaqrk ragevrf sbe gur tvira svyranzrf
+k,kqri,bar-svyr-flfgrz  qba'g pebff svyrflfgrz obhaqnevrf
+snxr-inyvq znex nyy vaqrk ragevrf nf hc-gb-qngr rira vs gurl nera'g
+snxr-vainyvq znex nyy vaqrk ragevrf nf vainyvq
+purpx      pnershyyl purpx vaqrk svyr vagrtevgl
+s,vaqrksvyr=  gur anzr bs gur vaqrk svyr (qrsnhyg 'vaqrk')
+i,ireobfr  vapernfr ybt bhgchg (pna or hfrq zber guna bapr)
 """
-o = options.Options('bup index', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if not (opt.modified or opt['print'] or opt.status or opt.update or opt.check):
-    o.fatal('supply one or more of -p, -s, -m, -u, or --check')
-if (opt.fake_valid or opt.fake_invalid) and not opt.update:
-    o.fatal('--fake-{in,}valid are meaningless without -u')
-if opt.fake_valid and opt.fake_invalid:
-    o.fatal('--fake-valid is incompatible with --fake-invalid')
-
-git.check_repo_or_die()
-indexfile = opt.indexfile or git.repo('bupindex')
-
-handle_ctrl_c()
-
-if opt.check:
-    log('check: starting initial check.\n')
-    check_index(index.Reader(indexfile))
-
-paths = index.reduce_paths(extra)
-
-if opt.update:
-    if not paths:
-        o.fatal('update (-u) requested but no paths given')
-    for (rp,path) in paths:
-        update_index(rp)
-
-if opt['print'] or opt.status or opt.modified:
-    for (name, ent) in index.Reader(indexfile).filter(extra or ['']):
-        if (opt.modified 
-            and (ent.is_valid() or ent.is_deleted() or not ent.mode)):
-            continue
-        line = ''
-        if opt.status:
-            if ent.is_deleted():
-                line += 'D '
-            elif not ent.is_valid():
-                if ent.sha == index.EMPTY_SHA:
-                    line += 'A '
-                else:
-                    line += 'M '
-            else:
-                line += '  '
-        if opt.hash:
-            line += ent.sha.encode('hex') + ' '
-        if opt.long:
-            line += "%7s %7s " % (oct(ent.mode), oct(ent.gitmode))
-        print line + (name or './')
-
-if opt.check and (opt['print'] or opt.status or opt.modified or opt.update):
-    log('check: starting final check.\n')
-    check_index(index.Reader(indexfile))
-
-if saved_errors:
-    log('WARNING: %d errors encountered.\n' % len(saved_errors))
-    sys.exit(1)
-#!/usr/bin/env python
-import sys, os, struct
-from bup import options, helpers
-
-optspec = """
-bup rbackup-server
+b = bcgvbaf.Bcgvbaf('ohc vaqrk', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs abg (bcg.zbqvsvrq be bcg['cevag'] be bcg.fgnghf be bcg.hcqngr be bcg.purpx):
+    b.sngny('fhccyl bar be zber bs -c, -f, -z, -h, be --purpx')
+vs (bcg.snxr_inyvq be bcg.snxr_vainyvq) naq abg bcg.hcqngr:
+    b.sngny('--snxr-{va,}inyvq ner zrnavatyrff jvgubhg -h')
+vs bcg.snxr_inyvq naq bcg.snxr_vainyvq:
+    b.sngny('--snxr-inyvq vf vapbzcngvoyr jvgu --snxr-vainyvq')
+
+tvg.purpx_ercb_be_qvr()
+vaqrksvyr = bcg.vaqrksvyr be tvg.ercb('ohcvaqrk')
+
+unaqyr_pgey_p()
+
+vs bcg.purpx:
+    ybt('purpx: fgnegvat vavgvny purpx.\a')
+    purpx_vaqrk(vaqrk.Ernqre(vaqrksvyr))
+
+cnguf = vaqrk.erqhpr_cnguf(rkgen)
+
+vs bcg.hcqngr:
+    vs abg cnguf:
+        b.sngny('hcqngr (-h) erdhrfgrq ohg ab cnguf tvira')
+    sbe (ec,cngu) va cnguf:
+        hcqngr_vaqrk(ec)
+
+vs bcg['cevag'] be bcg.fgnghf be bcg.zbqvsvrq:
+    sbe (anzr, rag) va vaqrk.Ernqre(vaqrksvyr).svygre(rkgen be ['']):
+        vs (bcg.zbqvsvrq 
+            naq (rag.vf_inyvq() be rag.vf_qryrgrq() be abg rag.zbqr)):
+            pbagvahr
+        yvar = ''
+        vs bcg.fgnghf:
+            vs rag.vf_qryrgrq():
+                yvar += 'Q '
+            ryvs abg rag.vf_inyvq():
+                vs rag.fun == vaqrk.RZCGL_FUN:
+                    yvar += 'N '
+                ryfr:
+                    yvar += 'Z '
+            ryfr:
+                yvar += '  '
+        vs bcg.unfu:
+            yvar += rag.fun.rapbqr('urk') + ' '
+        vs bcg.ybat:
+            yvar += "%7f %7f " % (bpg(rag.zbqr), bpg(rag.tvgzbqr))
+        cevag yvar + (anzr be './')
+
+vs bcg.purpx naq (bcg['cevag'] be bcg.fgnghf be bcg.zbqvsvrq be bcg.hcqngr):
+    ybt('purpx: fgnegvat svany purpx.\a')
+    purpx_vaqrk(vaqrk.Ernqre(vaqrksvyr))
+
+vs fnirq_reebef:
+    ybt('JNEAVAT: %q reebef rapbhagrerq.\a' % yra(fnirq_reebef))
+    flf.rkvg(1)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgehpg
+sebz ohc vzcbeg bcgvbaf, urycref
+
+bcgfcrp = """
+ohc eonpxhc-freire
 --
-    This command is not intended to be run manually.
+    Guvf pbzznaq vf abg vagraqrq gb or eha znahnyyl.
 """
-o = options.Options('bup rbackup-server', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-if extra:
-    o.fatal('no arguments expected')
-
-# get the subcommand's argv.
-# Normally we could just pass this on the command line, but since we'll often
-# be getting called on the other end of an ssh pipe, which tends to mangle
-# argv (by sending it via the shell), this way is much safer.
-buf = sys.stdin.read(4)
-sz = struct.unpack('!I', buf)[0]
-assert(sz > 0)
-assert(sz < 1000000)
-buf = sys.stdin.read(sz)
-assert(len(buf) == sz)
-argv = buf.split('\0')
-
-# stdin/stdout are supposedly connected to 'bup server' that the caller
-# started for us (often on the other end of an ssh tunnel), so we don't want
-# to misuse them.  Move them out of the way, then replace stdout with
-# a pointer to stderr in case our subcommand wants to do something with it.
+b = bcgvbaf.Bcgvbaf('ohc eonpxhc-freire', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+vs rkgen:
+    b.sngny('ab nethzragf rkcrpgrq')
+
+# trg gur fhopbzznaq'f neti.
+# Abeznyyl jr pbhyq whfg cnff guvf ba gur pbzznaq yvar, ohg fvapr jr'yy bsgra
+# or trggvat pnyyrq ba gur bgure raq bs na ffu cvcr, juvpu graqf gb znatyr
+# neti (ol fraqvat vg ivn gur furyy), guvf jnl vf zhpu fnsre.
+ohs = flf.fgqva.ernq(4)
+fm = fgehpg.hacnpx('!V', ohs)[0]
+nffreg(fm > 0)
+nffreg(fm < 1000000)
+ohs = flf.fgqva.ernq(fm)
+nffreg(yra(ohs) == fm)
+neti = ohs.fcyvg('\0')
+
+# fgqva/fgqbhg ner fhccbfrqyl pbaarpgrq gb 'ohc freire' gung gur pnyyre
+# fgnegrq sbe hf (bsgra ba gur bgure raq bs na ffu ghaary), fb jr qba'g jnag
+# gb zvfhfr gurz.  Zbir gurz bhg bs gur jnl, gura ercynpr fgqbhg jvgu
+# n cbvagre gb fgqree va pnfr bhe fhopbzznaq jnagf gb qb fbzrguvat jvgu vg.
 #
-# It might be nice to do the same with stdin, but my experiments showed that
-# ssh seems to make its child's stderr a readable-but-never-reads-anything
-# socket.  They really should have used shutdown(SHUT_WR) on the other end
-# of it, but probably didn't.  Anyway, it's too messy, so let's just make sure
-# anyone reading from stdin is disappointed.
+# Vg zvtug or avpr gb qb gur fnzr jvgu fgqva, ohg zl rkcrevzragf fubjrq gung
+# ffu frrzf gb znxr vgf puvyq'f fgqree n ernqnoyr-ohg-arire-ernqf-nalguvat
+# fbpxrg.  Gurl ernyyl fubhyq unir hfrq fuhgqbja(FUHG_JE) ba gur bgure raq
+# bs vg, ohg cebonoyl qvqa'g.  Naljnl, vg'f gbb zrffl, fb yrg'f whfg znxr fher
+# nalbar ernqvat sebz fgqva vf qvfnccbvagrq.
 #
-# (You can't just leave stdin/stdout "not open" by closing the file
-# descriptors.  Then the next file that opens is automatically assigned 0 or 1,
-# and people *trying* to read/write stdin/stdout get screwed.)
-os.dup2(0, 3)
-os.dup2(1, 4)
-os.dup2(2, 1)
-fd = os.open('/dev/null', os.O_RDONLY)
-os.dup2(fd, 0)
-os.close(fd)
-
-os.environ['BUP_SERVER_REVERSE'] = helpers.hostname()
-os.execvp(argv[0], argv)
-sys.exit(99)
-#!/usr/bin/env python
-import sys, os, glob, subprocess, time
-from bup import options, git
-from bup.helpers import *
-
-par2_ok = 0
-nullf = open('/dev/null')
-
-def debug(s):
-    if opt.verbose:
-        log(s)
-
-def run(argv):
-    # at least in python 2.5, using "stdout=2" or "stdout=sys.stderr" below
-    # doesn't actually work, because subprocess closes fd #2 right before
-    # execing for some reason.  So we work around it by duplicating the fd
-    # first.
-    fd = os.dup(2)  # copy stderr
-    try:
-        p = subprocess.Popen(argv, stdout=fd, close_fds=False)
-        return p.wait()
-    finally:
-        os.close(fd)
-
-def par2_setup():
-    global par2_ok
-    rv = 1
-    try:
-        p = subprocess.Popen(['par2', '--help'],
-                             stdout=nullf, stderr=nullf, stdin=nullf)
-        rv = p.wait()
-    except OSError:
-        log('fsck: warning: par2 not found; disabling recovery features.\n')
-    else:
-        par2_ok = 1
-
-def parv(lvl):
-    if opt.verbose >= lvl:
-        if istty:
-            return []
-        else:
-            return ['-q']
-    else:
-        return ['-qq']
-
-def par2_generate(base):
-    return run(['par2', 'create', '-n1', '-c200'] + parv(2)
-               + ['--', base, base+'.pack', base+'.idx'])
-
-def par2_verify(base):
-    return run(['par2', 'verify'] + parv(3) + ['--', base])
-
-def par2_repair(base):
-    return run(['par2', 'repair'] + parv(2) + ['--', base])
-
-def quick_verify(base):
-    f = open(base + '.pack', 'rb')
-    f.seek(-20, 2)
-    wantsum = f.read(20)
-    assert(len(wantsum) == 20)
-    f.seek(0)
-    sum = Sha1()
-    for b in chunkyreader(f, os.fstat(f.fileno()).st_size - 20):
-        sum.update(b)
-    if sum.digest() != wantsum:
-        raise ValueError('expected %r, got %r' % (wantsum.encode('hex'),
-                                                  sum.hexdigest()))
+# (Lbh pna'g whfg yrnir fgqva/fgqbhg "abg bcra" ol pybfvat gur svyr
+# qrfpevcgbef.  Gura gur arkg svyr gung bcraf vf nhgbzngvpnyyl nffvtarq 0 be 1,
+# naq crbcyr *gelvat* gb ernq/jevgr fgqva/fgqbhg trg fperjrq.)
+bf.qhc2(0, 3)
+bf.qhc2(1, 4)
+bf.qhc2(2, 1)
+sq = bf.bcra('/qri/ahyy', bf.B_EQBAYL)
+bf.qhc2(sq, 0)
+bf.pybfr(sq)
+
+bf.raiveba['OHC_FREIRE_ERIREFR'] = urycref.ubfganzr()
+bf.rkrpic(neti[0], neti)
+flf.rkvg(99)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, tybo, fhocebprff, gvzr
+sebz ohc vzcbeg bcgvbaf, tvg
+sebz ohc.urycref vzcbeg *
+
+cne2_bx = 0
+ahyys = bcra('/qri/ahyy')
+
+qrs qroht(f):
+    vs bcg.ireobfr:
+        ybt(f)
+
+qrs eha(neti):
+    # ng yrnfg va clguba 2.5, hfvat "fgqbhg=2" be "fgqbhg=flf.fgqree" orybj
+    # qbrfa'g npghnyyl jbex, orpnhfr fhocebprff pybfrf sq #2 evtug orsber
+    # rkrpvat sbe fbzr ernfba.  Fb jr jbex nebhaq vg ol qhcyvpngvat gur sq
+    # svefg.
+    sq = bf.qhc(2)  # pbcl fgqree
+    gel:
+        c = fhocebprff.Cbcra(neti, fgqbhg=sq, pybfr_sqf=Snyfr)
+        erghea c.jnvg()
+    svanyyl:
+        bf.pybfr(sq)
+
+qrs cne2_frghc():
+    tybony cne2_bx
+    ei = 1
+    gel:
+        c = fhocebprff.Cbcra(['cne2', '--uryc'],
+                             fgqbhg=ahyys, fgqree=ahyys, fgqva=ahyys)
+        ei = c.jnvg()
+    rkprcg BFReebe:
+        ybt('sfpx: jneavat: cne2 abg sbhaq; qvfnoyvat erpbirel srngherf.\a')
+    ryfr:
+        cne2_bx = 1
+
+qrs cnei(yiy):
+    vs bcg.ireobfr >= yiy:
+        vs vfggl:
+            erghea []
+        ryfr:
+            erghea ['-d']
+    ryfr:
+        erghea ['-dd']
+
+qrs cne2_trarengr(onfr):
+    erghea eha(['cne2', 'perngr', '-a1', '-p200'] + cnei(2)
+               + ['--', onfr, onfr+'.cnpx', onfr+'.vqk'])
+
+qrs cne2_irevsl(onfr):
+    erghea eha(['cne2', 'irevsl'] + cnei(3) + ['--', onfr])
+
+qrs cne2_ercnve(onfr):
+    erghea eha(['cne2', 'ercnve'] + cnei(2) + ['--', onfr])
+
+qrs dhvpx_irevsl(onfr):
+    s = bcra(onfr + '.cnpx', 'eo')
+    s.frrx(-20, 2)
+    jnagfhz = s.ernq(20)
+    nffreg(yra(jnagfhz) == 20)
+    s.frrx(0)
+    fhz = Fun1()
+    sbe o va puhaxlernqre(s, bf.sfgng(s.svyrab()).fg_fvmr - 20):
+        fhz.hcqngr(o)
+    vs fhz.qvtrfg() != jnagfhz:
+        envfr InyhrReebe('rkcrpgrq %e, tbg %e' % (jnagfhz.rapbqr('urk'),
+                                                  fhz.urkqvtrfg()))
         
 
-def git_verify(base):
-    if opt.quick:
-        try:
-            quick_verify(base)
-        except Exception, e:
-            debug('error: %s\n' % e)
-            return 1
-        return 0
-    else:
-        return run(['git', 'verify-pack', '--', base])
+qrs tvg_irevsl(onfr):
+    vs bcg.dhvpx:
+        gel:
+            dhvpx_irevsl(onfr)
+        rkprcg Rkprcgvba, r:
+            qroht('reebe: %f\a' % r)
+            erghea 1
+        erghea 0
+    ryfr:
+        erghea eha(['tvg', 'irevsl-cnpx', '--', onfr])
     
     
-def do_pack(base, last):
-    code = 0
-    if par2_ok and par2_exists and (opt.repair or not opt.generate):
-        vresult = par2_verify(base)
-        if vresult != 0:
-            if opt.repair:
-                rresult = par2_repair(base)
-                if rresult != 0:
-                    print '%s par2 repair: failed (%d)' % (last, rresult)
-                    code = rresult
-                else:
-                    print '%s par2 repair: succeeded (0)' % last
-                    code = 100
-            else:
-                print '%s par2 verify: failed (%d)' % (last, vresult)
-                code = vresult
-        else:
-            print '%s ok' % last
-    elif not opt.generate or (par2_ok and not par2_exists):
-        gresult = git_verify(base)
-        if gresult != 0:
-            print '%s git verify: failed (%d)' % (last, gresult)
-            code = gresult
-        else:
-            if par2_ok and opt.generate:
-                presult = par2_generate(base)
-                if presult != 0:
-                    print '%s par2 create: failed (%d)' % (last, presult)
-                    code = presult
-                else:
-                    print '%s ok' % last
-            else:
-                print '%s ok' % last
-    else:
-        assert(opt.generate and (not par2_ok or par2_exists))
-        debug('    skipped: par2 file already generated.\n')
-    return code
-
-
-optspec = """
-bup fsck [options...] [filenames...]
+qrs qb_cnpx(onfr, ynfg):
+    pbqr = 0
+    vs cne2_bx naq cne2_rkvfgf naq (bcg.ercnve be abg bcg.trarengr):
+        ierfhyg = cne2_irevsl(onfr)
+        vs ierfhyg != 0:
+            vs bcg.ercnve:
+                eerfhyg = cne2_ercnve(onfr)
+                vs eerfhyg != 0:
+                    cevag '%f cne2 ercnve: snvyrq (%q)' % (ynfg, eerfhyg)
+                    pbqr = eerfhyg
+                ryfr:
+                    cevag '%f cne2 ercnve: fhpprrqrq (0)' % ynfg
+                    pbqr = 100
+            ryfr:
+                cevag '%f cne2 irevsl: snvyrq (%q)' % (ynfg, ierfhyg)
+                pbqr = ierfhyg
+        ryfr:
+            cevag '%f bx' % ynfg
+    ryvs abg bcg.trarengr be (cne2_bx naq abg cne2_rkvfgf):
+        terfhyg = tvg_irevsl(onfr)
+        vs terfhyg != 0:
+            cevag '%f tvg irevsl: snvyrq (%q)' % (ynfg, terfhyg)
+            pbqr = terfhyg
+        ryfr:
+            vs cne2_bx naq bcg.trarengr:
+                cerfhyg = cne2_trarengr(onfr)
+                vs cerfhyg != 0:
+                    cevag '%f cne2 perngr: snvyrq (%q)' % (ynfg, cerfhyg)
+                    pbqr = cerfhyg
+                ryfr:
+                    cevag '%f bx' % ynfg
+            ryfr:
+                cevag '%f bx' % ynfg
+    ryfr:
+        nffreg(bcg.trarengr naq (abg cne2_bx be cne2_rkvfgf))
+        qroht('    fxvccrq: cne2 svyr nyernql trarengrq.\a')
+    erghea pbqr
+
+
+bcgfcrp = """
+ohc sfpx [bcgvbaf...] [svyranzrf...]
 --
-r,repair    attempt to repair errors using par2 (dangerous!)
-g,generate  generate auto-repair information using par2
-v,verbose   increase verbosity (can be used more than once)
-quick       just check pack sha1sum, don't use git verify-pack
-j,jobs=     run 'n' jobs in parallel
-par2-ok     immediately return 0 if par2 is ok, 1 if not
-disable-par2  ignore par2 even if it is available
+e,ercnve    nggrzcg gb ercnve reebef hfvat cne2 (qnatrebhf!)
+t,trarengr  trarengr nhgb-ercnve vasbezngvba hfvat cne2
+i,ireobfr   vapernfr ireobfvgl (pna or hfrq zber guna bapr)
+dhvpx       whfg purpx cnpx fun1fhz, qba'g hfr tvg irevsl-cnpx
+w,wbof=     eha 'a' wbof va cnenyyry
+cne2-bx     vzzrqvngryl erghea 0 vs cne2 vf bx, 1 vs abg
+qvfnoyr-cne2  vtaber cne2 rira vs vg vf ninvynoyr
 """
-o = options.Options('bup fsck', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-par2_setup()
-if opt.par2_ok:
-    if par2_ok:
-        sys.exit(0)  # 'true' in sh
-    else:
-        sys.exit(1)
-if opt.disable_par2:
-    par2_ok = 0
-
-git.check_repo_or_die()
-
-if not extra:
-    debug('fsck: No filenames given: checking all packs.\n')
-    extra = glob.glob(git.repo('objects/pack/*.pack'))
-
-code = 0
-count = 0
-outstanding = {}
-for name in extra:
-    if name.endswith('.pack'):
-        base = name[:-5]
-    elif name.endswith('.idx'):
-        base = name[:-4]
-    elif name.endswith('.par2'):
-        base = name[:-5]
-    elif os.path.exists(name + '.pack'):
-        base = name
-    else:
-        raise Exception('%s is not a pack file!' % name)
-    (dir,last) = os.path.split(base)
-    par2_exists = os.path.exists(base + '.par2')
-    if par2_exists and os.stat(base + '.par2').st_size == 0:
-        par2_exists = 0
-    sys.stdout.flush()
-    debug('fsck: checking %s (%s)\n
-          % (last, par2_ok and par2_exists and 'par2' or 'git'))
-    if not opt.verbose:
-        progress('fsck (%d/%d)\r' % (count, len(extra)))
+b = bcgvbaf.Bcgvbaf('ohc sfpx', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+cne2_frghc()
+vs bcg.cne2_bx:
+    vs cne2_bx:
+        flf.rkvg(0)  # 'gehr' va fu
+    ryfr:
+        flf.rkvg(1)
+vs bcg.qvfnoyr_cne2:
+    cne2_bx = 0
+
+tvg.purpx_ercb_be_qvr()
+
+vs abg rkgen:
+    qroht('sfpx: Ab svyranzrf tvira: purpxvat nyy cnpxf.\a')
+    rkgen = tybo.tybo(tvg.ercb('bowrpgf/cnpx/*.cnpx'))
+
+pbqr = 0
+pbhag = 0
+bhgfgnaqvat = {}
+sbe anzr va rkgen:
+    vs anzr.raqfjvgu('.cnpx'):
+        onfr = anzr[:-5]
+    ryvs anzr.raqfjvgu('.vqk'):
+        onfr = anzr[:-4]
+    ryvs anzr.raqfjvgu('.cne2'):
+        onfr = anzr[:-5]
+    ryvs bf.cngu.rkvfgf(anzr + '.cnpx'):
+        onfr = anzr
+    ryfr:
+        envfr Rkprcgvba('%f vf abg n cnpx svyr!' % anzr)
+    (qve,ynfg) = bf.cngu.fcyvg(onfr)
+    cne2_rkvfgf = bf.cngu.rkvfgf(onfr + '.cne2')
+    vs cne2_rkvfgf naq bf.fgng(onfr + '.cne2').fg_fvmr == 0:
+        cne2_rkvfgf = 0
+    flf.fgqbhg.syhfu()
+    qroht('sfpx: purpxvat %f (%f)\a
+          % (ynfg, cne2_bx naq cne2_rkvfgf naq 'cne2' be 'tvg'))
+    vs abg bcg.ireobfr:
+        cebterff('sfpx (%q/%q)\e' % (pbhag, yra(rkgen)))
     
-    if not opt.jobs:
-        nc = do_pack(base, last)
-        code = code or nc
-        count += 1
-    else:
-        while len(outstanding) >= opt.jobs:
-            (pid,nc) = os.wait()
-            nc >>= 8
-            if pid in outstanding:
-                del outstanding[pid]
-                code = code or nc
-                count += 1
-        pid = os.fork()
-        if pid:  # parent
-            outstanding[pid] = 1
-        else: # child
-            try:
-                sys.exit(do_pack(base, last))
-            except Exception, e:
-                log('exception: %r\n' % e)
-                sys.exit(99)
+    vs abg bcg.wbof:
+        ap = qb_cnpx(onfr, ynfg)
+        pbqr = pbqr be ap
+        pbhag += 1
+    ryfr:
+        juvyr yra(bhgfgnaqvat) >= bcg.wbof:
+            (cvq,ap) = bf.jnvg()
+            ap >>= 8
+            vs cvq va bhgfgnaqvat:
+                qry bhgfgnaqvat[cvq]
+                pbqr = pbqr be ap
+                pbhag += 1
+        cvq = bf.sbex()
+        vs cvq:  # cnerag
+            bhgfgnaqvat[cvq] = 1
+        ryfr: # puvyq
+            gel:
+                flf.rkvg(qb_cnpx(onfr, ynfg))
+            rkprcg Rkprcgvba, r:
+                ybt('rkprcgvba: %e\a' % r)
+                flf.rkvg(99)
                 
-while len(outstanding):
-    (pid,nc) = os.wait()
-    nc >>= 8
-    if pid in outstanding:
-        del outstanding[pid]
-        code = code or nc
-        count += 1
-    if not opt.verbose:
-        progress('fsck (%d/%d)\r' % (count, len(extra)))
-
-if not opt.verbose and istty:
-    log('fsck done.           \n')
-sys.exit(code)
-#!/usr/bin/env python
-import sys, os, struct, getopt, subprocess, signal
-from bup import options, ssh
-from bup.helpers import *
-
-optspec = """
-bup rbackup <hostname> index ...
-bup rbackup <hostname> save ...
-bup rbackup <hostname> split ...
+juvyr yra(bhgfgnaqvat):
+    (cvq,ap) = bf.jnvg()
+    ap >>= 8
+    vs cvq va bhgfgnaqvat:
+        qry bhgfgnaqvat[cvq]
+        pbqr = pbqr be ap
+        pbhag += 1
+    vs abg bcg.ireobfr:
+        cebterff('sfpx (%q/%q)\e' % (pbhag, yra(rkgen)))
+
+vs abg bcg.ireobfr naq vfggl:
+    ybt('sfpx qbar.           \a')
+flf.rkvg(pbqr)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, fgehpg, trgbcg, fhocebprff, fvtany
+sebz ohc vzcbeg bcgvbaf, ffu
+sebz ohc.urycref vzcbeg *
+
+bcgfcrp = """
+ohc eonpxhc <ubfganzr> vaqrk ...
+ohc eonpxhc <ubfganzr> fnir ...
+ohc eonpxhc <ubfganzr> fcyvg ...
 """
-o = options.Options('bup rbackup', optspec, optfunc=getopt.getopt)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-if len(extra) < 2:
-    o.fatal('arguments expected')
-
-class SigException(Exception):
-    def __init__(self, signum):
-        self.signum = signum
-        Exception.__init__(self, 'signal %d received' % signum)
-def handler(signum, frame):
-    raise SigException(signum)
-
-signal.signal(signal.SIGTERM, handler)
-signal.signal(signal.SIGINT, handler)
-
-sp = None
-p = None
-ret = 99
-
-try:
-    hostname = extra[0]
-    argv = extra[1:]
-    p = ssh.connect(hostname, 'rbackup-server')
-
-    argvs = '\0'.join(['bup'] + argv)
-    p.stdin.write(struct.pack('!I', len(argvs)) + argvs)
-    p.stdin.flush()
-
-    main_exe = os.environ.get('BUP_MAIN_EXE') or sys.argv[0]
-    sp = subprocess.Popen([main_exe, 'server'], stdin=p.stdout, stdout=p.stdin)
-
-    p.stdin.close()
-    p.stdout.close()
-
-finally:
-    while 1:
-        # if we get a signal while waiting, we have to keep waiting, just
-        # in case our child doesn't die.
-        try:
-            ret = p.wait()
-            sp.wait()
-            break
-        except SigException, e:
-            log('\nbup rbackup: %s\n' % e)
-            os.kill(p.pid, e.signum)
-            ret = 84
-sys.exit(ret)
-#!/usr/bin/env python
-import sys, os, re
-from bup import options
-
-optspec = """
-bup newliner
+b = bcgvbaf.Bcgvbaf('ohc eonpxhc', bcgfcrp, bcgshap=trgbcg.trgbcg)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+vs yra(rkgen) < 2:
+    b.sngny('nethzragf rkcrpgrq')
+
+pynff FvtRkprcgvba(Rkprcgvba):
+    qrs __vavg__(frys, fvtahz):
+        frys.fvtahz = fvtahz
+        Rkprcgvba.__vavg__(frys, 'fvtany %q erprvirq' % fvtahz)
+qrs unaqyre(fvtahz, senzr):
+    envfr FvtRkprcgvba(fvtahz)
+
+fvtany.fvtany(fvtany.FVTGREZ, unaqyre)
+fvtany.fvtany(fvtany.FVTVAG, unaqyre)
+
+fc = Abar
+c = Abar
+erg = 99
+
+gel:
+    ubfganzr = rkgen[0]
+    neti = rkgen[1:]
+    c = ffu.pbaarpg(ubfganzr, 'eonpxhc-freire')
+
+    netif = '\0'.wbva(['ohc'] + neti)
+    c.fgqva.jevgr(fgehpg.cnpx('!V', yra(netif)) + netif)
+    c.fgqva.syhfu()
+
+    znva_rkr = bf.raiveba.trg('OHC_ZNVA_RKR') be flf.neti[0]
+    fc = fhocebprff.Cbcra([znva_rkr, 'freire'], fgqva=c.fgqbhg, fgqbhg=c.fgqva)
+
+    c.fgqva.pybfr()
+    c.fgqbhg.pybfr()
+
+svanyyl:
+    juvyr 1:
+        # vs jr trg n fvtany juvyr jnvgvat, jr unir gb xrrc jnvgvat, whfg
+        # va pnfr bhe puvyq qbrfa'g qvr.
+        gel:
+            erg = c.jnvg()
+            fc.jnvg()
+            oernx
+        rkprcg FvtRkprcgvba, r:
+            ybt('\aohc eonpxhc: %f\a' % r)
+            bf.xvyy(c.cvq, r.fvtahz)
+            erg = 84
+flf.rkvg(erg)
+#!/hfe/ova/rai clguba
+vzcbeg flf, bf, er
+sebz ohc vzcbeg bcgvbaf
+
+bcgfcrp = """
+ohc arjyvare
 """
-o = options.Options('bup newliner', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-r = re.compile(r'([\r\n])')
-lastlen = 0
-all = ''
-while 1:
-    l = r.split(all, 1)
-    if len(l) <= 1:
-        try:
-            b = os.read(sys.stdin.fileno(), 4096)
-        except KeyboardInterrupt:
-            break
-        if not b:
-            break
-        all += b
-    else:
-        assert(len(l) == 3)
-        (line, splitchar, all) = l
-        #splitchar = '\n'
-        sys.stdout.write('%-*s%s' % (lastlen, line, splitchar))
-        if splitchar == '\r':
-            lastlen = len(line)
-        else:
-            lastlen = 0
-        sys.stdout.flush()
-
-if lastlen or all:
-    sys.stdout.write('%-*s\n' % (lastlen, all))
-#!/usr/bin/env python
-import sys
-from bup import options, git, _hashsplit
-from bup.helpers import *
-
-
-optspec = """
-bup margin
+b = bcgvbaf.Bcgvbaf('ohc arjyvare', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+e = er.pbzcvyr(e'([\e\a])')
+ynfgyra = 0
+nyy = ''
+juvyr 1:
+    y = e.fcyvg(nyy, 1)
+    vs yra(y) <= 1:
+        gel:
+            o = bf.ernq(flf.fgqva.svyrab(), 4096)
+        rkprcg XrlobneqVagreehcg:
+            oernx
+        vs abg o:
+            oernx
+        nyy += o
+    ryfr:
+        nffreg(yra(y) == 3)
+        (yvar, fcyvgpune, nyy) = y
+        #fcyvgpune = '\a'
+        flf.fgqbhg.jevgr('%-*f%f' % (ynfgyra, yvar, fcyvgpune))
+        vs fcyvgpune == '\e':
+            ynfgyra = yra(yvar)
+        ryfr:
+            ynfgyra = 0
+        flf.fgqbhg.syhfu()
+
+vs ynfgyra be nyy:
+    flf.fgqbhg.jevgr('%-*f\a' % (ynfgyra, nyy))
+#!/hfe/ova/rai clguba
+vzcbeg flf
+sebz ohc vzcbeg bcgvbaf, tvg, _unfufcyvg
+sebz ohc.urycref vzcbeg *
+
+
+bcgfcrp = """
+ohc znetva
 """
-o = options.Options('bup margin', optspec)
-(opt, flags, extra) = o.parse(sys.argv[1:])
-
-if extra:
-    o.fatal("no arguments expected")
-
-git.check_repo_or_die()
-#git.ignore_midx = 1
-
-mi = git.PackIdxList(git.repo('objects/pack'))
-last = '\0'*20
-longmatch = 0
-for i in mi:
-    if i == last:
-        continue
-    #assert(str(i) >= last)
-    pm = _hashsplit.bitmatch(last, i)
-    longmatch = max(longmatch, pm)
-    last = i
-print longmatch
+b = bcgvbaf.Bcgvbaf('ohc znetva', bcgfcrp)
+(bcg, syntf, rkgen) = b.cnefr(flf.neti[1:])
+
+vs rkgen:
+    b.sngny("ab nethzragf rkcrpgrq")
+
+tvg.purpx_ercb_be_qvr()
+#tvg.vtaber_zvqk = 1
+
+zv = tvg.CnpxVqkYvfg(tvg.ercb('bowrpgf/cnpx'))
+ynfg = '\0'*20
+ybatzngpu = 0
+sbe v va zv:
+    vs v == ynfg:
+        pbagvahr
+    #nffreg(fge(v) >= ynfg)
+    cz = _unfufcyvg.ovgzngpu(ynfg, v)
+    ybatzngpu = znk(ybatzngpu, cz)
+    ynfg = v
+cevag ybatzngpu