]> arthur.barton.de Git - bup.git/blobdiff - t/testfile1
git: remove unused _git_capture()
[bup.git] / t / testfile1
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