pkg/build/builder/ansible/static.go

Summary

Maintainability
C
1 day
Test Coverage
F
21%
// Code generated by "esc -no-compress -ignore static.go -o ansible/static.go -pkg ansible ansible"; DO NOT EDIT.

package ansible

import (
    "bytes"
    "compress/gzip"
    "encoding/base64"
    "fmt"
    "io"
    "io/ioutil"
    "net/http"
    "os"
    "path"
    "sync"
    "time"
)

type _escLocalFS struct{}

var _escLocal _escLocalFS

type _escStaticFS struct{}

var _escStatic _escStaticFS

type _escDirectory struct {
    fs   http.FileSystem
    name string
}

type _escFile struct {
    compressed string
    size       int64
    modtime    int64
    local      string
    isDir      bool

    once sync.Once
    data []byte
    name string
}

func (_escLocalFS) Open(name string) (http.File, error) {
    f, present := _escData[path.Clean(name)]
    if !present {
        return nil, os.ErrNotExist
    }
    return os.Open(f.local)
}

func (_escStaticFS) prepare(name string) (*_escFile, error) {
    f, present := _escData[path.Clean(name)]
    if !present {
        return nil, os.ErrNotExist
    }
    var err error
    f.once.Do(func() {
        f.name = path.Base(name)
        if f.size == 0 {
            return
        }
        var gr *gzip.Reader
        b64 := base64.NewDecoder(base64.StdEncoding, bytes.NewBufferString(f.compressed))
        gr, err = gzip.NewReader(b64)
        if err != nil {
            return
        }
        f.data, err = ioutil.ReadAll(gr)
    })
    if err != nil {
        return nil, err
    }
    return f, nil
}

func (fs _escStaticFS) Open(name string) (http.File, error) {
    f, err := fs.prepare(name)
    if err != nil {
        return nil, err
    }
    return f.File()
}

func (dir _escDirectory) Open(name string) (http.File, error) {
    return dir.fs.Open(dir.name + name)
}

func (f *_escFile) File() (http.File, error) {
    type httpFile struct {
        *bytes.Reader
        *_escFile
    }
    return &httpFile{
        Reader:   bytes.NewReader(f.data),
        _escFile: f,
    }, nil
}

func (f *_escFile) Close() error {
    return nil
}

func (f *_escFile) Readdir(count int) ([]os.FileInfo, error) {
    if !f.isDir {
        return nil, fmt.Errorf(" escFile.Readdir: %q is not directory", f.name)
    }

    fis, ok := _escDirs[f.local]
    if !ok {
        return nil, fmt.Errorf(" escFile.Readdir: %q is directory, but we have no info about content of this dir, local=%s", f.name, f.local)
    }
    limit := count
    if count <= 0 || limit > len(fis) {
        limit = len(fis)
    }

    if len(fis) == 0 && count > 0 {
        return nil, io.EOF
    }

    return fis[0:limit], nil
}

func (f *_escFile) Stat() (os.FileInfo, error) {
    return f, nil
}

func (f *_escFile) Name() string {
    return f.name
}

func (f *_escFile) Size() int64 {
    return f.size
}

func (f *_escFile) Mode() os.FileMode {
    return 0
}

func (f *_escFile) ModTime() time.Time {
    return time.Unix(f.modtime, 0)
}

func (f *_escFile) IsDir() bool {
    return f.isDir
}

func (f *_escFile) Sys() interface{} {
    return f
}

// FS returns a http.Filesystem for the embedded assets. If useLocal is true,
// the filesystem's contents are instead used.
func FS(useLocal bool) http.FileSystem {
    if useLocal {
        return _escLocal
    }
    return _escStatic
}

// Dir returns a http.Filesystem for the embedded assets on a given prefix dir.
// If useLocal is true, the filesystem's contents are instead used.
func Dir(useLocal bool, name string) http.FileSystem {
    if useLocal {
        return _escDirectory{fs: _escLocal, name: name}
    }
    return _escDirectory{fs: _escStatic, name: name}
}

// FSByte returns the named file from the embedded assets. If useLocal is
// true, the filesystem's contents are instead used.
func FSByte(useLocal bool, name string) ([]byte, error) {
    if useLocal {
        f, err := _escLocal.Open(name)
        if err != nil {
            return nil, err
        }
        b, err := ioutil.ReadAll(f)
        _ = f.Close()
        return b, err
    }
    f, err := _escStatic.prepare(name)
    if err != nil {
        return nil, err
    }
    return f.data, nil
}

// FSMustByte is the same as FSByte, but panics if name is not present.
func FSMustByte(useLocal bool, name string) []byte {
    b, err := FSByte(useLocal, name)
    if err != nil {
        panic(err)
    }
    return b
}

// FSString is the string version of FSByte.
func FSString(useLocal bool, name string) (string, error) {
    b, err := FSByte(useLocal, name)
    return string(b), err
}

// FSMustString is the string version of FSMustByte.
func FSMustString(useLocal bool, name string) string {
    return string(FSMustByte(useLocal, name))
}

var _escData = map[string]*_escFile{
    "/ansible/callback/__init__.py": {
        name:    "__init__.py",
        local:   "ansible/callback/__init__.py",
        size:    43,
        modtime: 1571135671,
        compressed: `
H4sIAAAAAAAA/wArANT/IyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiMgbW9kdWxlIGNhbGxiYWNrCgEA
AP//FlIoGisAAAA=
`,
    },

    "/ansible/callback/live.py": {
        name:    "live.py",
        local:   "ansible/callback/live.py",
        size:    19916,
        modtime: 1575962212,
        compressed: `
H4sIAAAAAAAA/wDMTTOyIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyAoYykgMjAxMi0yMDE0LCBNaWNo
YWVsIERlSGFhbiA8bWljaGFlbC5kZWhhYW5AZ21haWwuY29tPgojIChjKSAyMDE3IEFuc2libGUgUHJv
amVjdAojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYzLjArIChzZWUgQ09QWUlORyBvciBodHRw
czovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0KQoKIyBNYWtlIGNvZGluZyBtb3JlIHB5
dGhvbjMtaXNoCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgKGFic29sdXRlX2ltcG9ydCwgZGl2aXNpb24s
IHByaW50X2Z1bmN0aW9uKQpfX21ldGFjbGFzc19fID0gdHlwZQoKRE9DVU1FTlRBVElPTiA9ICcnJwog
ICAgY2FsbGJhY2s6IGxpdmUKICAgIHR5cGU6IHN0ZG91dAogICAgc2hvcnRfZGVzY3JpcHRpb246IHNj
cmVlbiBvdXRwdXQgZm9yIHNvbG8gbW9kZQogICAgdmVyc2lvbl9hZGRlZDogaGlzdG9yaWNhbAogICAg
ZGVzY3JpcHRpb246CiAgICAgICAgLSBTb2xvIG1vZGUgd2l0aCBsaXZlIHN0ZG91dCBmb3IgcmF3IGFu
ZCBzY3JpcHQgdGFza3Mgd2l0aCBmYWxsYmFjayB0byBtaW5pbWFsCicnJwoKCmZyb20gYW5zaWJsZS5w
bHVnaW5zLmNhbGxiYWNrIGltcG9ydCBDYWxsYmFja0Jhc2UKZnJvbSBhbnNpYmxlIGltcG9ydCBjb25z
dGFudHMgYXMgQwpmcm9tIGFuc2libGUudmFycy5jbGVhbiBpbXBvcnQgc3RyaXBfaW50ZXJuYWxfa2V5
cwpmcm9tIGFuc2libGUubW9kdWxlX3V0aWxzLl90ZXh0IGltcG9ydCB0b190ZXh0CmZyb20gYW5zaWJs
ZS51dGlscy5jb2xvciBpbXBvcnQgc3RyaW5nYwpmcm9tIGFuc2libGUuZXJyb3JzIGltcG9ydCBBbnNp
YmxlRXJyb3IKCmltcG9ydCBvcwppbXBvcnQganNvbiwgcmUKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQg
SXRlcmFibGUKCmltcG9ydCBsb2dib2VrCmZyb20gd2VyZi5saXZlX3N0ZG91dCBpbXBvcnQgTGl2ZVN0
ZG91dExpc3RlbmVyCgojIFRha2VuIGZyb20gRHN0YXQKY2xhc3MgdnQxMDA6CiAgICBibGFjayA9ICdc
MDMzWzA7MzBtJwogICAgZGFya3JlZCA9ICdcMDMzWzA7MzFtJwogICAgZGFya2dyZWVuID0gJ1wwMzNb
MDszMm0nCiAgICBkYXJreWVsbG93ID0gJ1wwMzNbMDszM20nCiAgICBkYXJrYmx1ZSA9ICdcMDMzWzA7
MzRtJwogICAgZGFya21hZ2VudGEgPSAnXDAzM1swOzM1bScKICAgIGRhcmtjeWFuID0gJ1wwMzNbMDsz
Nm0nCiAgICBncmF5ID0gJ1wwMzNbMDszN20nCgogICAgZGFya2dyYXkgPSAnXDAzM1sxOzMwbScKICAg
IHJlZCA9ICdcMDMzWzE7MzFtJwogICAgZ3JlZW4gPSAnXDAzM1sxOzMybScKICAgIHllbGxvdyA9ICdc
MDMzWzE7MzNtJwogICAgYmx1ZSA9ICdcMDMzWzE7MzRtJwogICAgbWFnZW50YSA9ICdcMDMzWzE7MzVt
JwogICAgY3lhbiA9ICdcMDMzWzE7MzZtJwogICAgd2hpdGUgPSAnXDAzM1sxOzM3bScKCiAgICBibGFj
a2JnID0gJ1wwMzNbNDBtJwogICAgcmVkYmcgPSAnXDAzM1s0MW0nCiAgICBncmVlbmJnID0gJ1wwMzNb
NDJtJwogICAgeWVsbG93YmcgPSAnXDAzM1s0M20nCiAgICBibHVlYmcgPSAnXDAzM1s0NG0nCiAgICBt
YWdlbnRhYmcgPSAnXDAzM1s0NW0nCiAgICBjeWFuYmcgPSAnXDAzM1s0Nm0nCiAgICB3aGl0ZWJnID0g
J1wwMzNbNDdtJwoKICAgIHJlc2V0ID0gJ1wwMzNbMDswbScKICAgIGJvbGQgPSAnXDAzM1sxbScKICAg
IHJldmVyc2UgPSAnXDAzM1sybScKICAgIHVuZGVybGluZSA9ICdcMDMzWzRtJwoKICAgIGNsZWFyID0g
J1wwMzNbMkonCiAgICAjICAgIGNsZWFybGluZSA9ICdcMDMzW0snCiAgICBjbGVhcmxpbmUgPSAnXDAz
M1sySycKICAgIHNhdmUgPSAnXDAzM1tzJwogICAgcmVzdG9yZSA9ICdcMDMzW3UnCiAgICBzYXZlX2Fs
bCA9ICdcMDMzNycKICAgIHJlc3RvcmVfYWxsID0gJ1wwMzM4JwogICAgbGluZXdyYXAgPSAnXDAzM1s3
aCcKICAgIG5vbGluZXdyYXAgPSAnXDAzM1s3bCcKCiAgICB1cCA9ICdcMDMzWzFBJwogICAgZG93biA9
ICdcMDMzWzFCJwogICAgcmlnaHQgPSAnXDAzM1sxQycKICAgIGxlZnQgPSAnXDAzM1sxRCcKCgpjbGFz
cyBsQ29sb3I6CiAgICBDT0xPUl9PSyA9IHZ0MTAwLmRhcmtncmVlbgogICAgQ09MT1JfQ0hBTkdFRCA9
IHZ0MTAwLmRhcmt5ZWxsb3cKICAgIENPTE9SX0VSUk9SID0gdnQxMDAuZGFya3JlZAogICAgQ09MT1Jf
REVCVUcgPSB2dDEwMC5kYXJrZ3JheQoKCmNsYXNzIExpdmVDYWxsYmFja0hlbHBlcnMoQ2FsbGJhY2tC
YXNlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzdXBlcihMaXZlQ2FsbGJhY2tIZWxw
ZXJzLCBzZWxmKS5fX2luaXRfXygpCgogICAgZGVmIExvZ0FyZ3Moc2VsZiwgKmFyZ3MpOgogICAgICAg
IGxvZ2JvZWsuTG9nKHUnJy5qb2luKHNlbGYuX2ZsYXR0ZW4oYXJncykpLmVuY29kZSgndXRmLTgnKSkK
CiAgICAjIG5lc3RlZCBhcnJheXMgaW50byBmbGF0IGFycmF5ICAgICMgYWN0aW9uKG1vZHVsZSBuYW1l
KQogICAgIyBhY3Rpb24obW9kdWxlIG5hbWUpICd0YXNrIG5hbWUnCgogICAgZGVmIF9mbGF0dGVuKHNl
bGYsIGwpOgogICAgICAgICIiIllpZWxkIGl0ZW1zIGZyb20gYW55IG5lc3RlZCBpdGVyYWJsZSIiIgog
ICAgICAgIGlmIGlzaW5zdGFuY2UobCwgKHVuaWNvZGUsIHN0ciwgYnl0ZXMpKToKICAgICAgICAgICAg
eWllbGQgbAogICAgICAgICAgICByZXR1cm4KICAgICAgICBmb3IgeCBpbiBsOgogICAgICAgICAgICBp
ZiBub3QgeDoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
eCwgSXRlcmFibGUpIGFuZCBub3QgaXNpbnN0YW5jZSh4LCAodW5pY29kZSwgc3RyLCBieXRlcykpOgog
ICAgICAgICAgICAgICAgZm9yIHN1Yl94IGluIHNlbGYuX2ZsYXR0ZW4oeCk6CiAgICAgICAgICAgICAg
ICAgICAgeWllbGQgc3ViX3gKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHlpZWxkIHgK
CiAgICAjIHN0cmluZyBtZXRob2RzCiAgICBkZWYgX3NxdWFzaF9jZW50ZXIoc2VsZiwgcywgbCwgcGxh
Y2Vob2xkZXI9Jy4uLicpOgogICAgICAgIHBsID0gbGVuKHBsYWNlaG9sZGVyKQogICAgICAgIGlmIGxl
bihzKSA+IGw6CiAgICAgICAgICAgICMgZWRnZSBsZW5ndGggb2YgcyB0byBkaXNwbGF5CiAgICAgICAg
ICAgIHNwID0gaW50KChsIC0gcGwpLzIpCiAgICAgICAgICAgIHJldHVybiB1JyVzJXMlcycgJSAoc1sw
OnNwXSwgcGxhY2Vob2xkZXIsIHNbbGVuKHMpLXNwLTErKGwlMik6XSkKICAgICAgICBlbHNlOgogICAg
ICAgICAgICByZXR1cm4gcwoKICAgIGRlZiBfc3F1YXNoX3JpZ2h0KHNlbGYsIHMsIGwsIHBsYWNlaG9s
ZGVyPScuLi4nKToKICAgICAgICBwbCA9IGxlbihwbGFjZWhvbGRlcikKICAgICAgICBpZiBsZW4ocykg
PiBsOgogICAgICAgICAgICByZXR1cm4gdSclcyVzJyAlIChzWzA6bC1wbF0sIHBsYWNlaG9sZGVyKQog
ICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBzCgogICAgZGVmIF9jbGVhbl9zdHIoc2VsZiwg
cyk6CiAgICAgICAgcyA9IHRvX3RleHQocykKICAgICAgICBzID0gcmUuc3ViKHInXHMrJywgcicgJywg
cywgZmxhZ3M9cmUuVU5JQ09ERSkKICAgICAgICByZXR1cm4gcy5zdHJpcCgpCgogICAgZGVmIF9pbmRl
bnQoc2VsZiwgaW5kZW50LCBzKToKICAgICAgICBwYXJ0cyA9IHJlLnNwbGl0KHInKFxuKScsIHMpCiAg
ICAgICAgcmV0dXJuICcnLmpvaW4ocCBpZiBwID09ICJcbiIgZWxzZSAnJXMlcycgJSAoaW5kZW50LCBw
KSBmb3IgcCBpbiBwYXJ0cykKCgpjbGFzcyBDYWxsYmFja01vZHVsZShMaXZlQ2FsbGJhY2tIZWxwZXJz
KToKICAgIENBTExCQUNLX1ZFUlNJT04gPSAyLjAKICAgIENBTExCQUNLX1RZUEUgPSAnc3Rkb3V0Jwog
ICAgQ0FMTEJBQ0tfTkFNRSA9ICdsaXZlJwoKICAgIEhFQURFUl9QTEFDRUhPTERFUiA9ICcuLi4nCiAg
ICBIRUFERVJfTkFNRV9JTkZPX0xFTiA9IDU1CiAgICBIRUFERVJfSU5GT19NSU5fTEVOID0gNSArIDMg
KyA1ICAjIDUgbGV0dGVycyBmcm9tIHRoZSBlZGdlcyBhbmQgYSBwbGFjZWhvbGRlciBsZW5ndGgKCiAg
ICAjIG5hbWUgZm9yIHRoaXMgdGFza3MgY2FuIGJlIGdlbmVyYXRlZCBmcm9tIGZyZWVfZm9ybSAoX3Jh
d19wYXJhbXMgYXJndW1lbnQpCiAgICBGUkVFX0ZPUk1fTU9EVUxFUyA9ICgncmF3JywgJ3NjcmlwdCcs
ICdjb21tYW5kJywgJ3NoZWxsJywgJ21ldGEnKQoKICAgICMgTW9kdWxlcyB0aGF0IGFyZSBvcHRpbWl6
ZWQgYnkgc3F1YXNoaW5nIGxvb3AgaXRlbXMgaW50byBhIHNpbmdsZSBjYWxsIHRvCiAgICAjIHRoZSBt
b2R1bGUsIG1vc3RseSBwYWNrYWdpbmcgbW9kdWxlcyB3aXRoIG5hbWUgYXJndW1lbnQKICAgICMgKGFw
dCwgYXBrLCBkbmYsIGhvbWVicmV3LCBvcGVuYnNkX3BrZywgcGFjbWFuLCBwa2duZywgeXVtLCB6eXBw
ZXIpCiAgICBTUVVBU0hfTE9PUF9NT0RVTEVTID0gZnJvemVuc2V0KEMuREVGQVVMVF9TUVVBU0hfQUNU
SU9OUykKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc3VwZXIoQ2FsbGJhY2tNb2R1bGUs
IHNlbGYpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLl9wbGF5ID0gTm9uZQogICAgICAgIHNlbGYuX2xp
dmVfc3Rkb3V0X2xpc3RlbmVyID0gTGl2ZVN0ZG91dExpc3RlbmVyKCkKCgojIGhlYWRlciBmb3JtYXQg
aXM6CiAgICAjIGFjdGlvbiAndGFzayBuYW1lJyBbc2lnbmlmaWNhbnQgYXJncyBpbmZvXQogICAgIyBp
ZiB0YXNrIG5hbWUgbGVuZ3RoIGV4Y2VlZCBpdHMgbWF4aW11bSB0aGVuIGZvcm1hdCBpczoKICAgICMg
YWN0aW9uICd0YXNrIG5hbWUnCiAgICAjIGlmIG5vIHRhc2sgbmFtZToKICAgICMgYWN0aW9uIFtzaWdu
aWZpY2FudCBhcmdzIGluZm9dCiAgICAjIHRhc2sgbmFtZSBhbmQgc2lnbmlmaWNhbnQgYXJncyBpbmZv
IGFyZSBzcXVhc2hlZCB0byBmaXQgaW50byBhdmFpbGFibGUgc3BhY2UKICAgIGRlZiBfdGFza19kZXRh
aWxzKHNlbGYsIHRhc2ssIHN0YXJ0PUZhbHNlKToKICAgICAgICB0YXNrX25hbWUgPSBzZWxmLl9jbGVh
bl9zdHIodGFzay5uYW1lKQogICAgICAgIGluZm8gPSBzZWxmLl9nZXRfdGFza19pbmZvX2Zyb21fYXJn
cyh0YXNrLCBzdGFydCkgb3IgJycKCiAgICAgICAgaWYgaW5mbyAhPSAnJzoKICAgICAgICAgICAgaW5m
b19zcGFjZSA9IHNlbGYuSEVBREVSX05BTUVfSU5GT19MRU4gLSBsZW4odGFza19uYW1lKQogICAgICAg
ICAgICBpZiBpbmZvX3NwYWNlID49IHNlbGYuSEVBREVSX0lORk9fTUlOX0xFTiBvciBpbmZvX3NwYWNl
ID49IGxlbihpbmZvKToKICAgICAgICAgICAgICAgIGluZm8gPSAnIFslc10nICUgc2VsZi5fc3F1YXNo
X2NlbnRlcihpbmZvLCBpbmZvX3NwYWNlLTMpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAg
ICBpbmZvID0gJycKCiAgICAgICAgaWYgdGFza19uYW1lICE9ICcnOgogICAgICAgICAgICBpZiBsZW4o
dGFza19uYW1lKStsZW4oaW5mbykgPiBzZWxmLkhFQURFUl9OQU1FX0lORk9fTEVOOgogICAgICAgICAg
ICAgICAgdGFza19uYW1lID0gc2VsZi5fc3F1YXNoX3JpZ2h0KHRhc2tfbmFtZSwgc2VsZi5IRUFERVJf
TkFNRV9JTkZPX0xFTi1sZW4oaW5mbykpCiAgICAgICAgICAgIHRhc2tfbmFtZSA9ICIgJyVzJyIgJSB0
YXNrX25hbWUKCiAgICAgICAgcmV0dXJuIHUnJXMlcyVzJyAlICh0YXNrLmFjdGlvbiwgdGFza19uYW1l
LCBpbmZvKQoKICAgICMgaXRlbSBkZXRhaWxzIGZvcm1hdCBpczoKICAgICMgYWN0aW9uICd0YXNrIG5h
bWUnIGl0ZW0gJ2l0ZW1fbmFtZScKICAgICMgaWYgbm8gdGFza19uYW1lOgogICAgIyBhY3Rpb24gaXRl
bSAnaXRlbV9uYW1lJwogICAgIyB0YXNrX25hbWUgYW5kIGl0ZW1fbmFtZSBhcmUgc3F1YXNoZWQgaWYg
Y2Fubm90IGZpdCBpbnRvIGF2YWlsYWJsZSBzcGFjZQogICAgZGVmIF9pdGVtX2RldGFpbHMoc2VsZiwg
dGFzaywgaXRlbV9yZXN1bHQpOgogICAgICAgIHRhc2tfbmFtZSA9IHNlbGYuX2NsZWFuX3N0cih0YXNr
Lm5hbWUpCiAgICAgICAgaWYgJ19hbnNpYmxlX2l0ZW1fbGFiZWwnIGluIGl0ZW1fcmVzdWx0OgogICAg
ICAgICAgICBpdGVtX25hbWUgPSBpdGVtX3Jlc3VsdC5nZXQoJ19hbnNpYmxlX2l0ZW1fbGFiZWwnLCcn
KQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGl0ZW1fbmFtZSA9IHNlbGYuX2NsZWFuX3N0cihpdGVt
X3Jlc3VsdC5nZXQoJ2l0ZW0nLCAnJykpCgogICAgICAgIGlmIHRhc2tfbmFtZSAhPSAnJzoKICAgICAg
ICAgICAgdGFza19zcGFjZSA9IHNlbGYuSEVBREVSX05BTUVfSU5GT19MRU4gLSBsZW4oaXRlbV9uYW1l
KQogICAgICAgICAgICBpZiB0YXNrX3NwYWNlID49IHNlbGYuSEVBREVSX0lORk9fTUlOX0xFTiBvciB0
YXNrX3NwYWNlID49IGxlbih0YXNrX25hbWUpOgogICAgICAgICAgICAgICAgdGFza19uYW1lID0gc2Vs
Zi5fc3F1YXNoX3JpZ2h0KHRhc2tfbmFtZSwgdGFza19zcGFjZSAtIDMpCiAgICAgICAgICAgICAgICB0
YXNrX25hbWUgPSAiICclcyciICUgdGFza19uYW1lCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAg
ICAgICB0YXNrX25hbWUgPSAnJwoKICAgICAgICBpZiBpdGVtX25hbWUgIT0gJyc6CiAgICAgICAgICAg
IGlmIGxlbih0YXNrX25hbWUpK2xlbihpdGVtX25hbWUpID4gc2VsZi5IRUFERVJfTkFNRV9JTkZPX0xF
TjoKICAgICAgICAgICAgICAgIGl0ZW1fbmFtZSA9IHNlbGYuX3NxdWFzaF9yaWdodChpdGVtX25hbWUs
IHNlbGYuSEVBREVSX05BTUVfSU5GT19MRU4tbGVuKHRhc2tfbmFtZSkpCiAgICAgICAgICAgIGl0ZW1f
bmFtZSA9ICIgaXRlbSAnJXMnIiAlIChpdGVtX25hbWUpCgogICAgICAgIHJldHVybiB1JyVzJXMlcycg
JSAodGFzay5hY3Rpb24sIHRhc2tfbmFtZSwgaXRlbV9uYW1lKQoKICAgICMgUmV0dXJuIGNvbnRlbnQg
ZnJvbSBzaWduaWZpY2FudCBhcmd1bWVudHMgZm9yIHdlbGwga25vd24gbW9kdWxlcwogICAgIyBBbHNv
IHN1cHBvcnQgaXRlbXMgZm9yIHRoZSBsb29wcy4KICAgIGRlZiBfZ2V0X3Rhc2tfaW5mb19mcm9tX2Fy
Z3Moc2VsZiwgdGFzaywgc3RhcnQ9RmFsc2UpOgogICAgICAgIGluZm8gPSAnJwogICAgICAgIGlmIHRh
c2suYWN0aW9uIGluIHNlbGYuRlJFRV9GT1JNX01PRFVMRVM6CiAgICAgICAgICAgIGluZm8gPSB0YXNr
LmFyZ3MuZ2V0KCdfcmF3X3BhcmFtcycsICcnKQogICAgICAgIGlmIHRhc2suYWN0aW9uID09ICdmaWxl
JzoKICAgICAgICAgICAgaW5mbyA9IHRhc2suYXJncy5nZXQoJ3BhdGgnLCcnKQogICAgICAgIGlmIHRh
c2suYWN0aW9uID09ICdjb3B5JzoKICAgICAgICAgICAgaW5mbyA9IHRhc2suYXJncy5nZXQoJ2Rlc3Qn
LCcnKQogICAgICAgIGlmIHRhc2suYWN0aW9uID09ICdncm91cCc6CiAgICAgICAgICAgIGluZm8gPSB0
YXNrLmFyZ3MuZ2V0KCduYW1lJywnJykKICAgICAgICBpZiB0YXNrLmFjdGlvbiA9PSAndXNlcic6CiAg
ICAgICAgICAgIGluZm8gPSB0YXNrLmFyZ3MuZ2V0KCduYW1lJywnJykKICAgICAgICBpZiB0YXNrLmFj
dGlvbiA9PSAnZ2V0X3VybCc6CiAgICAgICAgICAgIGluZm8gPSB0YXNrLmFyZ3MuZ2V0KCd1cmwnLCcn
KQogICAgICAgIGlmIHRhc2suYWN0aW9uID09ICdnZXRlbnQnOgogICAgICAgICAgICBkYiA9IHRhc2su
YXJncy5nZXQoJ2RhdGFiYXNlJywnJykKICAgICAgICAgICAga2V5ID0gdGFzay5hcmdzLmdldCgna2V5
JywnJykKICAgICAgICAgICAgaW5mbyA9ICclcyAlcycgJSAoZGIsIGtleSkKICAgICAgICBpZiB0YXNr
LmFjdGlvbiA9PSAnYXBrJzoKICAgICAgICAgICAgaW5mbyA9IHRhc2suYXJncy5nZXQoJ25hbWUnLCAn
JykKICAgICAgICBpZiB0YXNrLmFjdGlvbiA9PSAnYXB0JzoKICAgICAgICAgICAgaW5mbzEgPSB0YXNr
LmFyZ3MuZ2V0KCduYW1lJywgTm9uZSkKICAgICAgICAgICAgaW5mbzIgPSB0YXNrLmFyZ3MuZ2V0KCdw
YWNrYWdlJywgTm9uZSkKICAgICAgICAgICAgaW5mbzMgPSB0YXNrLmFyZ3MuZ2V0KCdwa2cnLCBOb25l
KQogICAgICAgICAgICBpbmZvID0gJywgJy5qb2luKGxpc3Qoc2VsZi5fZmxhdHRlbihbaW5mbzEsIGlu
Zm8yLCBpbmZvM10pKSkKICAgICAgICBpZiB0YXNrLmFjdGlvbiA9PSAnYXB0X3JlcG9zaXRvcnknOgog
ICAgICAgICAgICBpbmZvID0gdGFzay5hcmdzLmdldCgncmVwbycsICcnKQogICAgICAgIGlmIHRhc2su
YWN0aW9uID09ICdhcHRfa2V5JzoKICAgICAgICAgICAgaW5mbyA9IHRhc2suYXJncy5nZXQoJ2lkJywg
JycpCiAgICAgICAgaWYgdGFzay5hY3Rpb24gPT0gJ3VuYXJjaGl2ZSc6CiAgICAgICAgICAgIGluZm8g
PSB0YXNrLmFyZ3MuZ2V0KCdzcmMnLCAnJykKICAgICAgICBpZiB0YXNrLmFjdGlvbiA9PSAnbG9jYWxl
X2dlbic6CiAgICAgICAgICAgIGluZm8gPSB0YXNrLmFyZ3MuZ2V0KCduYW1lJywgJycpCiAgICAgICAg
aWYgdGFzay5hY3Rpb24gPT0gJ2xpbmVpbmZpbGUnOgogICAgICAgICAgICBpbmZvID0gdGFzay5hcmdz
LmdldCgncGF0aCcsICcnKQogICAgICAgIGlmIHRhc2suYWN0aW9uID09ICdibG9ja2luZmlsZSc6CiAg
ICAgICAgICAgIGluZm8gPSB0YXNrLmFyZ3MuZ2V0KCdwYXRoJywgJycpCiAgICAgICAgaWYgdGFzay5h
Y3Rpb24gPT0gJ2NvbXBvc2VyJzoKICAgICAgICAgICAgaW5mbyA9IHRhc2suYXJncy5nZXQoJ2NvbW1h
bmQnLCAnaW5zdGFsbCcpCgogICAgICAgIGlmIHRhc2subG9vcCBhbmQgc3RhcnQ6CiAgICAgICAgICAg
IGxvb3BfYXJncyA9IHRhc2subG9vcAoKICAgICAgICAgICAgaWYgbGVuKGxvb3BfYXJncykgPiAwOgog
ICAgICAgICAgICAgICAgaW5mbyA9ICInJXMnIG92ZXIgJXMiICUgKGluZm8sIHRvX3RleHQobG9vcF9h
cmdzKSkKCiAgICAgICAgcmV0dXJuIHNlbGYuX2NsZWFuX3N0cihpbmZvKQoKICAgICMgZGlzcGxheSB0
YXNrIHJlc3VsdCBjb250ZW50IHdpdGggaW5kZW50YXRpb24KICAgICMgTm9ybWFsbHkgZWFjaCBpdGVt
IGlzIGRpc3BsYXllZCBzZXBhcmF0ZWx5LiBCdXQgdGhlcmUgYXJlIHNxdWFzaGVkCiAgICAjIG1vZHVs
ZXMsIHdoZXJlIGl0ZW1zIGFyZSBzcXVhc2hlZCBpbnRvIGxpc3QgYW5kIHRoZSByZXN1bHQgaXMgaW4g
dGhlIGZpcnN0ICdyZXN1bHRzJyBpdGVtLgogICAgZGVmIF9kaXNwbGF5X21zZyhzZWxmLCB0YXNrLCBy
ZXN1bHQsIGNvbG9yKToKICAgICAgICBpZiB0YXNrLmFjdGlvbiBpbiBzZWxmLlNRVUFTSF9MT09QX01P
RFVMRVMgYW5kICdyZXN1bHRzJyBpbiByZXN1bHQ6CiAgICAgICAgICAgIGlmIGxlbihyZXN1bHRbJ3Jl
c3VsdHMnXSkgPiAwOgogICAgICAgICAgICAgICAgc2VsZi5Mb2dBcmdzKHN0cmluZ2MocmVzdWx0Wydy
ZXN1bHRzJ11bMF0sIGNvbG9yKSwgIlxuIikKICAgICAgICAgICAgICAgIHJldHVybgoKICAgICAgICAj
IHByZXZlbnQgZHVibGljYXRpb24gb2Ygc3Rkb3V0IGluIGNhc2Ugb2YgbGl2ZV9zdGRvdXQKICAgICAg
ICBpZiBub3Qgc2VsZi5fbGl2ZV9zdGRvdXRfbGlzdGVuZXIuaXNfbGl2ZV9zdGRvdXQoKToKICAgICAg
ICAgICAgc3Rkb3V0ID0gcmVzdWx0LmdldCgnc3Rkb3V0JywgcmVzdWx0LmdldCgnbW9kdWxlX3N0ZG91
dCcsICcnKSkKICAgICAgICAgICAgaWYgc3Rkb3V0OgogICAgICAgICAgICAgICAgc2VsZi5Mb2dBcmdz
KHZ0MTAwLmJvbGQsICJzdGRvdXQ6IiwgdnQxMDAucmVzZXQsICJcbiIpCiAgICAgICAgICAgICAgICBz
ZWxmLkxvZ0FyZ3Moc2VsZi5faW5kZW50KCcgICcsIHN0ZG91dCksICJcbiIpCiAgICAgICAgICAgIHN0
ZGVyciA9IHJlc3VsdC5nZXQoJ3N0ZGVycicsIHJlc3VsdC5nZXQoJ21vZHVsZV9zdGRlcnInLCAnJykp
CiAgICAgICAgICAgIGlmIHN0ZGVycjoKICAgICAgICAgICAgICAgIHNlbGYuTG9nQXJncyh2dDEwMC5i
b2xkLCAic3RkZXJyOiIsIHZ0MTAwLnJlc2V0LCAiXG4iKQogICAgICAgICAgICAgICAgc2VsZi5Mb2dB
cmdzKHNlbGYuX2luZGVudCgnICAnLCBzdHJpbmdjKHN0ZGVyciwgQy5DT0xPUl9FUlJPUikpLCAiXG4i
KQoKICAgICAgICBpZiBzZWxmLl9tc2dfaXNfbmVlZGVkKHRhc2ssIHJlc3VsdCk6CiAgICAgICAgICAg
IHNlbGYuTG9nQXJncyhzdHJpbmdjKHUiXG4iLmpvaW4oc2VsZi5fZmxhdHRlbihyZXN1bHRbJ21zZydd
KSksIGNvbG9yKSwgIlxuIikKCiAgICAgICAgaWYgJ3JjJyBpbiByZXN1bHQ6CiAgICAgICAgICAgIGV4
aXRDb2RlID0gcmVzdWx0WydyYyddCiAgICAgICAgICAgIGV4aXRDb2xvciA9IEMuQ09MT1JfT0sKICAg
ICAgICAgICAgaWYgZXhpdENvZGUgIT0gJzAnIGFuZCBleGl0Q29kZSAhPSAwOgogICAgICAgICAgICAg
ICAgZXhpdENvbG9yID0gQy5DT0xPUl9FUlJPUgogICAgICAgICAgICBzZWxmLkxvZ0FyZ3Moc3RyaW5n
YygnZXhpdCBjb2RlOiAlcycgJSBleGl0Q29kZSwgZXhpdENvbG9yKSwgIlxuIikKCiAgICBkZWYgX21z
Z19pc19uZWVkZWQoc2VsZiwgdGFzaywgcmVzdWx0KToKICAgICAgICBpZiAnbXNnJyBub3QgaW4gcmVz
dWx0OgogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAjIE5vIG5lZWQgdG8gZGlzcGxheSBt
c2cgZm9yIGxvb3AgdGFzaywgYmVjYXVzZSBlYWNoIGl0ZW0gaXMgZGlzcGxheWVkIHNlcGFyYXRlbHku
CiAgICAgICAgIyBNc2cgaXMgbmVlZGVkIGlmIHRoZXJlIGFyZSBubyBpdGVtcy4KICAgICAgICBpZiAn
cmVzdWx0cycgaW4gcmVzdWx0OgogICAgICAgICAgICBpZiBsZW4ocmVzdWx0WydyZXN1bHRzJ10pID4g
MDoKICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICMgVE9ETyBtb3JlIHZhcmlhbnRz
Li4uCiAgICAgICAgcmV0dXJuIFRydWUKCiAgICBkZWYgX2Rpc3BsYXlfZGVidWdfbXNnKHNlbGYsIHRh
c2ssIHJlc3VsdCk6CiAgICAgICAgI2lmIChzZWxmLl9kaXNwbGF5LnZlcmJvc2l0eSA+IDAgb3IgJ19h
bnNpYmxlX3ZlcmJvc2VfYWx3YXlzJyBpbiByZXN1bHQpIGFuZCAnX2Fuc2libGVfdmVyYm9zZV9vdmVy
cmlkZScgbm90IGluIHJlc3VsdDoKICAgICAgICBpZiB0YXNrLmFyZ3MuZ2V0KCdtc2cnKToKICAgICAg
ICAgICAgY29sb3IgPSBDLkNPTE9SX09LCiAgICAgICAgICAgIG1zZyA9IHUiXG4iLmpvaW4oc2VsZi5f
ZmxhdHRlbihyZXN1bHQuZ2V0KCdtc2cnLCAnJykpKQogICAgICAgIGlmIHRhc2suYXJncy5nZXQoJ3Zh
cicpOgogICAgICAgICAgICB2YXJfa2V5ID0gdGFzay5hcmdzLmdldCgndmFyJykKICAgICAgICAgICAg
aWYgaXNpbnN0YW5jZSh2YXJfa2V5LCAobGlzdCwgZGljdCkpOgogICAgICAgICAgICAgICAgdmFyX2tl
eSA9IHRvX3RleHQodHlwZSh2YXJfa2V5KSkKICAgICAgICAgICAgdmFyX29iaiA9IHJlc3VsdC5nZXQo
dmFyX2tleSkKCiAgICAgICAgICAgIHNlbGYuTG9nQXJncyh2dDEwMC5ib2xkLAogICAgICAgICAgICAg
ICAgICAgICAgICAidmFyPSVzIiAlIHRvX3RleHQodGFzay5hcmdzLmdldCgndmFyJykpLAogICAgICAg
ICAgICAgICAgICAgICAgICAiLCAiLCBzdHJpbmdjKHRvX3RleHQodHlwZSh2YXJfb2JqKSksIEMuQ09M
T1JfREVCVUcpLAogICAgICAgICAgICAgICAgICAgICAgICB2dDEwMC5yZXNldCwgIlxuIikKCiAgICAg
ICAgICAgIGlmIGlzaW5zdGFuY2UodmFyX29iaiwgKHVuaWNvZGUsIHN0ciwgYnl0ZXMpKToKICAgICAg
ICAgICAgICAgIGNvbG9yID0gQy5DT0xPUl9PSwogICAgICAgICAgICAgICAgaWYgJ0lTIE5PVCBERUZJ
TkVEJyBpbiB2YXJfb2JqOgogICAgICAgICAgICAgICAgICAgIGNvbG9yID0gQy5DT0xPUl9FUlJPUgog
ICAgICAgICAgICAgICAgbXNnID0gdmFyX29iagogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAg
ICAgY29sb3IgPSBDLkNPTE9SX09LCiAgICAgICAgICAgICAgICBtc2cgPSBqc29uLmR1bXBzKHZhcl9v
YmosIGluZGVudD00KQoKICAgICAgICBzZWxmLkxvZ0FyZ3Moc3RyaW5nYyhtc2csIGNvbG9yKSwgIlxu
IikKCiAgICAjIFRPRE8gcmVtb3ZlIHN0ZG91dCBoZXJlIGlmIGxpdmVfc3Rkb3V0IQogICAgIyBUT0RP
IGhhbmRsZSByZXN1bHRzIGZvciBsb29wZWQgdGFza3MKICAgIGRlZiBfZHVtcF9yZXN1bHRzKHNlbGYs
IHJlc3VsdCwgaW5kZW50PU5vbmUsIHNvcnRfa2V5cz1UcnVlLCBrZWVwX2ludm9jYXRpb249RmFsc2Up
OgogICAgICAgIGlmIG5vdCBpbmRlbnQgYW5kIChyZXN1bHQuZ2V0KCdfYW5zaWJsZV92ZXJib3NlX2Fs
d2F5cycpIG9yIHNlbGYuX2Rpc3BsYXkudmVyYm9zaXR5ID4gMik6CiAgICAgICAgICAgIGluZGVudCA9
IDQKCiAgICAgICAgIyBBbGwgcmVzdWx0IGtleXMgc3RhdGluZyB3aXRoIF9hbnNpYmxlXyBhcmUgaW50
ZXJuYWwsIHNvIHJlbW92ZSB0aGVtIGZyb20gdGhlIHJlc3VsdCBiZWZvcmUgd2Ugb3V0cHV0IGFueXRo
aW5nLgogICAgICAgIGFicmlkZ2VkX3Jlc3VsdCA9IHN0cmlwX2ludGVybmFsX2tleXMocmVzdWx0KQoK
ICAgICAgICAjIHJlbW92ZSBpbnZvY2F0aW9uIHVubGVzcyBzcGVjaWZpY2FsbHkgd2FudGluZyBpdAog
ICAgICAgIGlmIG5vdCBrZWVwX2ludm9jYXRpb24gYW5kIHNlbGYuX2Rpc3BsYXkudmVyYm9zaXR5IDwg
MyBhbmQgJ2ludm9jYXRpb24nIGluIHJlc3VsdDoKICAgICAgICAgICAgZGVsIGFicmlkZ2VkX3Jlc3Vs
dFsnaW52b2NhdGlvbiddCgogICAgICAgICMgcmVtb3ZlIGRpZmYgaW5mb3JtYXRpb24gZnJvbSBzY3Jl
ZW4gb3V0cHV0CiAgICAgICAgaWYgc2VsZi5fZGlzcGxheS52ZXJib3NpdHkgPCAzIGFuZCAnZGlmZicg
aW4gcmVzdWx0OgogICAgICAgICAgICBkZWwgYWJyaWRnZWRfcmVzdWx0WydkaWZmJ10KCiAgICAgICAg
IyByZW1vdmUgZXhjZXB0aW9uIGZyb20gc2NyZWVuIG91dHB1dAogICAgICAgIGlmICdleGNlcHRpb24n
IGluIGFicmlkZ2VkX3Jlc3VsdDoKICAgICAgICAgICAgZGVsIGFicmlkZ2VkX3Jlc3VsdFsnZXhjZXB0
aW9uJ10KCiAgICAgICAgIyByZW1vdmUgbXNnLCBmYWlsZWQsIGNoYW5nZWQKICAgICAgICAjaWYgJ21z
ZycgaW4gYWJyaWRnZWRfcmVzdWx0OgogICAgICAgICMgICAgZGVsIGFicmlkZ2VkX3Jlc3VsdFsnbXNn
J10KICAgICAgICBpZiAnZmFpbGVkJyBpbiBhYnJpZGdlZF9yZXN1bHQ6CiAgICAgICAgICAgIGRlbCBh
YnJpZGdlZF9yZXN1bHRbJ2ZhaWxlZCddCiAgICAgICAgaWYgJ2NoYW5nZWQnIGluIGFicmlkZ2VkX3Jl
c3VsdDoKICAgICAgICAgICAgZGVsIGFicmlkZ2VkX3Jlc3VsdFsnY2hhbmdlZCddCgogICAgICAgIGlm
IGxlbihhYnJpZGdlZF9yZXN1bHQpID4gMDoKICAgICAgICAgICAgcmV0dXJuIGpzb24uZHVtcHMoYWJy
aWRnZWRfcmVzdWx0LCBpbmRlbnQ9aW5kZW50LCBlbnN1cmVfYXNjaWk9RmFsc2UsIHNvcnRfa2V5cz1z
b3J0X2tleXMpCgogICAgICAgIHJldHVybiAnJwoKICAgIGRlZiB2Ml9wbGF5Ym9va19vbl9wbGF5X3N0
YXJ0KHNlbGYsIHBsYXkpOgogICAgICAgIHNlbGYuX3BsYXkgPSBwbGF5CgogICAgICAgIGxvZ2JvZWsu
SW5pdCgpCiAgICAgICAgdHJ5OgogICAgICAgICAgICBjb2xzID0gaW50KG9zLmVudmlyb25bJ0NPTFVN
TlMnXSkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIGNvbHMgPSAxNDAKICAgICAgICAjY29scz02
MAogICAgICAgIHNlbGYuSEVBREVSX05BTUVfSU5GT19MRU4gPSBjb2xzLTIKICAgICAgICBsb2dib2Vr
LlNldFRlcm1pbmFsV2lkdGgoY29scykKICAgICAgICBsb2dib2VrLkVuYWJsZUZpdE1vZGUoKQogICAg
ICAgICNsb2dib2VrLkxvZ1Byb2Nlc3NTdGFydChwbGF5Lm5hbWUpCiAgICAgICAgc2VsZi5fbGl2ZV9z
dGRvdXRfbGlzdGVuZXIuc3RhcnQoKQoKICAgIGRlZiB2Ml9wbGF5Ym9va19vbl9zdGF0cyhzZWxmLCBz
dGF0cyk6CiAgICAgICAgI3Bhc3MKICAgICAgICBzZWxmLl9saXZlX3N0ZG91dF9saXN0ZW5lci5zdG9w
KCkKICAgICAgICAjaWYgc3RhdHMuZmFpbHVyZXM6CiAgICAgICAgIyAgICBsb2dib2VrLkxvZ1Byb2Nl
c3NGYWlsKCkKICAgICAgICAjZWxzZToKICAgICAgICAjICAgIGxvZ2JvZWsuTG9nUHJvY2Vzc0VuZCgp
CgogICAgZGVmIHYyX3BsYXlib29rX29uX3Rhc2tfc3RhcnQoc2VsZiwgdGFzaywgaXNfY29uZGl0aW9u
YWwpOgogICAgICAgIHNlbGYuX2Rpc3BsYXkudigiVEFTSyBhY3Rpb249JXMgYXJncz0lcyIgJSAodGFz
ay5hY3Rpb24sIGpzb24uZHVtcHModGFzay5hcmdzLCBpbmRlbnQ9NCkpKQoKICAgICAgICBpZiBzZWxm
Ll9wbGF5LnN0cmF0ZWd5ID09ICdmcmVlJzoKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgICMgdGFz
ayBoZWFkZXIgbGluZQogICAgICAgIGxvZ2JvZWsuTG9nUHJvY2Vzc1N0YXJ0KHNlbGYuX3Rhc2tfZGV0
YWlscyh0YXNrLCBzdGFydD1UcnVlKS5lbmNvZGUoJ3V0Zi04JykpCiAgICAgICAgIyByZXNldCBsaXZl
X3N0ZG91dCBmbGFnIG9uIHRhc2sgc3RhcnQKICAgICAgICBzZWxmLl9saXZlX3N0ZG91dF9saXN0ZW5l
ci5zZXRfbGl2ZV9zdGRvdXQoRmFsc2UpCgogICAgZGVmIHYyX3J1bm5lcl9vbl9vayhzZWxmLCByZXN1
bHQpOgogICAgICAgIHNlbGYuX2Rpc3BsYXkudigiVEFTSyBhY3Rpb249JXMgT0sgPT4gJXMiICUgKHJl
c3VsdC5fdGFzay5hY3Rpb24sIGpzb24uZHVtcHMocmVzdWx0Ll9yZXN1bHQsIGluZGVudD00KSkpCiAg
ICAgICAgc2VsZi5fY2xlYW5fcmVzdWx0cyhyZXN1bHQuX3Jlc3VsdCwgcmVzdWx0Ll90YXNrLmFjdGlv
bikKICAgICAgICBzZWxmLl9oYW5kbGVfd2FybmluZ3MocmVzdWx0Ll9yZXN1bHQpCgogICAgICAgIHRy
eToKICAgICAgICAgICAgdGFzayA9IHJlc3VsdC5fdGFzawogICAgICAgICAgICBjb2xvciA9IEMuQ09M
T1JfT0sKICAgICAgICAgICAgaWYgJ2NoYW5nZWQnIGluIHJlc3VsdC5fcmVzdWx0IGFuZCByZXN1bHQu
X3Jlc3VsdFsnY2hhbmdlZCddOgogICAgICAgICAgICAgICAgY29sb3IgPSBDLkNPTE9SX0NIQU5HRUQK
CiAgICAgICAgICAgICMgdGFzayByZXN1bHQgaW5mbyBpZiBhbnkKICAgICAgICAgICAgaWYgdGFzay5h
Y3Rpb24gPT0gJ2RlYnVnJzoKICAgICAgICAgICAgICAgIHNlbGYuX2Rpc3BsYXlfZGVidWdfbXNnKHJl
c3VsdC5fdGFzaywgcmVzdWx0Ll9yZXN1bHQpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAg
ICBzZWxmLl9kaXNwbGF5X21zZyhyZXN1bHQuX3Rhc2ssIHJlc3VsdC5fcmVzdWx0LCBjb2xvcikKICAg
ICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgIHNlbGYuTG9nQXJncyhzdHJpbmdj
KHUnRXhjZXB0aW9uOiAlcyclZSwgQy5DT0xPUl9FUlJPUiksICJcbiIpCiAgICAgICAgZmluYWxseToK
ICAgICAgICAgICAgIyB0YXNrIGZvb3RlciBsaW5lCiAgICAgICAgICAgIGxvZ2JvZWsuTG9nUHJvY2Vz
c0VuZCgpCgogICAgZGVmIHYyX3J1bm5lcl9pdGVtX29uX29rKHNlbGYsIHJlc3VsdCk6CiAgICAgICAg
c2VsZi5fZGlzcGxheS52KCJUQVNLIGFjdGlvbj0lcyBpdGVtIE9LID0+ICVzIiAlIChyZXN1bHQuX3Rh
c2suYWN0aW9uLCBqc29uLmR1bXBzKHJlc3VsdC5fcmVzdWx0LCBpbmRlbnQ9NCkpKQogICAgICAgIHNl
bGYuX2NsZWFuX3Jlc3VsdHMocmVzdWx0Ll9yZXN1bHQsIHJlc3VsdC5fdGFzay5hY3Rpb24pCiAgICAg
ICAgc2VsZi5faGFuZGxlX3dhcm5pbmdzKHJlc3VsdC5fcmVzdWx0KQoKICAgICAgICB0YXNrID0gcmVz
dWx0Ll90YXNrCiAgICAgICAgaWYgdGFzay5hY3Rpb24gaW4gc2VsZi5TUVVBU0hfTE9PUF9NT0RVTEVT
OgogICAgICAgICAgICByZXR1cm4KICAgICAgICBjb2xvciA9IEMuQ09MT1JfT0sKICAgICAgICBpZiAn
Y2hhbmdlZCcgaW4gcmVzdWx0Ll9yZXN1bHQgYW5kIHJlc3VsdC5fcmVzdWx0WydjaGFuZ2VkJ106CiAg
ICAgICAgICAgIGNvbG9yID0gQy5DT0xPUl9DSEFOR0VECgogICAgICAgICMgaXRlbSByZXN1bHQgaW5m
byBpZiBhbnkKICAgICAgICBpZiB0YXNrLmFjdGlvbiA9PSAnZGVidWcnOgogICAgICAgICAgICBzZWxm
Ll9kaXNwbGF5X2RlYnVnX21zZyhyZXN1bHQuX3Rhc2ssIHJlc3VsdC5fcmVzdWx0KQogICAgICAgIGVs
c2U6CiAgICAgICAgICAgIHNlbGYuX2Rpc3BsYXlfbXNnKHJlc3VsdC5fdGFzaywgcmVzdWx0Ll9yZXN1
bHQsIGNvbG9yKQoKICAgICAgICBsb2dib2VrLkxvZ1Byb2Nlc3NTdGVwRW5kKHUnJy5qb2luKFsKICAg
ICAgICAgICAgdnQxMDAucmVzZXQsIHZ0MTAwLmJvbGQsCiAgICAgICAgICAgIHNlbGYuX2NsZWFuX3N0
cihzZWxmLl9pdGVtX2RldGFpbHModGFzaywgcmVzdWx0Ll9yZXN1bHQpKSwgdnQxMDAucmVzZXQsCiAg
ICAgICAgICAgICcgJywKICAgICAgICAgICAgc3RyaW5nYyh1J1tPS10nLCBjb2xvcikKICAgICAgICAg
ICAgXSkuZW5jb2RlKCd1dGYtOCcpCiAgICAgICAgKQoKICAgICAgICAjIHJlc2V0IGxpdmVfc3Rkb3V0
IGZsYWcgb24gaXRlbSBlbmQKICAgICAgICBzZWxmLl9saXZlX3N0ZG91dF9saXN0ZW5lci5zZXRfbGl2
ZV9zdGRvdXQoRmFsc2UpCgoKCiAgICBkZWYgdjJfcnVubmVyX29uX2ZhaWxlZChzZWxmLCByZXN1bHQs
ICoqa3dhcmdzKToKICAgICAgICBzZWxmLl9kaXNwbGF5LnYoIlRBU0sgYWN0aW9uPSVzIEZBSUxFRCA9
PiAlcyIgJSAocmVzdWx0Ll90YXNrLmFjdGlvbiwganNvbi5kdW1wcyhyZXN1bHQuX3Jlc3VsdCwgaW5k
ZW50PTQpKSkKICAgICAgICBzZWxmLl9oYW5kbGVfZXhjZXB0aW9uKHJlc3VsdC5fcmVzdWx0KQogICAg
ICAgIHNlbGYuX2hhbmRsZV93YXJuaW5ncyhyZXN1bHQuX3Jlc3VsdCkKCiAgICAgICAgdHJ5OgogICAg
ICAgICAgICB0YXNrID0gcmVzdWx0Ll90YXNrCiAgICAgICAgICAgICMgdGFzayByZXN1bHQgaW5mbyBp
ZiBhbnkKICAgICAgICAgICAgc2VsZi5fZGlzcGxheV9tc2codGFzaywgcmVzdWx0Ll9yZXN1bHQsIEMu
Q09MT1JfRVJST1IpCgogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgbG9n
Ym9lay5Mb2codSJ7MH1cbiIuZm9ybWF0KGUpLmVuY29kZSgidXRmLTgiKSkKICAgICAgICBmaW5hbGx5
OgogICAgICAgICAgICBsb2dib2VrLkxvZ1Byb2Nlc3NGYWlsKCkKCiAgICBkZWYgdjJfcnVubmVyX2l0
ZW1fb25fZmFpbGVkKHNlbGYsIHJlc3VsdCwgaWdub3JlX2Vycm9ycz1GYWxzZSk6CiAgICAgICAgc2Vs
Zi5fZGlzcGxheS52KCJUQVNLIGFjdGlvbj0lcyBJVEVNIEZBSUxFRCA9PiAlcyIgJSAocmVzdWx0Ll90
YXNrLmFjdGlvbiwganNvbi5kdW1wcyhyZXN1bHQuX3Jlc3VsdCwgaW5kZW50PTQpKSkKICAgICAgICBz
ZWxmLl9oYW5kbGVfZXhjZXB0aW9uKHJlc3VsdC5fcmVzdWx0KQogICAgICAgIHNlbGYuX2hhbmRsZV93
YXJuaW5ncyhyZXN1bHQuX3Jlc3VsdCkKCiAgICAgICAgdGFzayA9IHJlc3VsdC5fdGFzawogICAgICAg
IGlmIHRhc2suYWN0aW9uIGluIHNlbGYuU1FVQVNIX0xPT1BfTU9EVUxFUzoKICAgICAgICAgICAgcmV0
dXJuCiAgICAgICAgIyB0YXNrIGl0ZW0gcmVzdWx0IGluZm8gaWYgYW55CiAgICAgICAgc2VsZi5fZGlz
cGxheV9tc2codGFzaywgcmVzdWx0Ll9yZXN1bHQsIEMuQ09MT1JfRVJST1IpCiAgICAgICAgIyB0YXNr
IGl0ZW0gc3RhdHVzIGxpbmUKICAgICAgICBsb2dib2VrLkxvZ1Byb2Nlc3NTdGVwRW5kKHUnJy5qb2lu
KFsKICAgICAgICAgICAgdnQxMDAucmVzZXQsIHZ0MTAwLmJvbGQsCiAgICAgICAgICAgIHNlbGYuX2Ns
ZWFuX3N0cihzZWxmLl9pdGVtX2RldGFpbHModGFzaywgcmVzdWx0Ll9yZXN1bHQpKSwgdnQxMDAucmVz
ZXQsCiAgICAgICAgICAgICcgJywKICAgICAgICAgICAgc3RyaW5nYyh1J1tGQUlMXScsIEMuQ09MT1Jf
RVJST1IpLAogICAgICAgICAgICBdKS5lbmNvZGUoJ3V0Zi04JykKICAgICAgICApCiAgICAgICAgIyBy
ZXNldCBsaXZlX3N0ZG91dCBmbGFnIG9uIGl0ZW0gZW5kCiAgICAgICAgc2VsZi5fbGl2ZV9zdGRvdXRf
bGlzdGVuZXIuc2V0X2xpdmVfc3Rkb3V0KEZhbHNlKQoKICAgIGRlZiB2Ml9ydW5uZXJfb25fc2tpcHBl
ZChzZWxmLCByZXN1bHQpOgogICAgICAgIHNlbGYuTG9nQXJncyhzdHJpbmdjKCJTS0lQUEVEIiwgQy5D
T0xPUl9TS0lQKSwgIlxuIikKICAgICAgICBsb2dib2VrLkxvZ1Byb2Nlc3NFbmQoKQoKICAgICMgSW1w
bGVtZW50ZWQgZm9yIGNvbXBsZXRlbmVzcy4gTG9jYWwgY29ubmVjdGlvbiBjYW5ub3QgYmUgdW5yZWFj
aGFibGUuCiAgICBkZWYgdjJfcnVubmVyX29uX3VucmVhY2hhYmxlKHNlbGYsIHJlc3VsdCk6CiAgICAg
ICAgc2VsZi5Mb2dBcmdzKHN0cmluZ2MoIlVOUkVBQ0hBQkxFISIsIEMuQ09MT1JfVU5SRUFDSEFCTEUp
LCAiXG4iKQogICAgICAgIGxvZ2JvZWsuTG9nUHJvY2Vzc0VuZCgpCgogICAgZGVmIHYyX29uX2ZpbGVf
ZGlmZihzZWxmLCByZXN1bHQpOgogICAgICAgIGlmICdkaWZmJyBpbiByZXN1bHQuX3Jlc3VsdCBhbmQg
cmVzdWx0Ll9yZXN1bHRbJ2RpZmYnXToKICAgICAgICAgICAgc2VsZi5Mb2dBcmdzKHNlbGYuX2dldF9k
aWZmKHJlc3VsdC5fcmVzdWx0WydkaWZmJ10pLCAiXG4iKQoKICAgIGRlZiBfaGFuZGxlX2V4Y2VwdGlv
bihzZWxmLCByZXN1bHQsIHVzZV9zdGRlcnI9RmFsc2UpOgogICAgICAgIGlmICdleGNlcHRpb24nIGlu
IHJlc3VsdDoKICAgICAgICAgICAgbXNnID0gIkFuIGV4Y2VwdGlvbiBvY2N1cnJlZCBkdXJpbmcgdGFz
ayBleGVjdXRpb24uIFRoZSBmdWxsIHRyYWNlYmFjayBpczpcbiIgKyByZXN1bHRbJ2V4Y2VwdGlvbidd
CiAgICAgICAgICAgIGRlbCByZXN1bHRbJ2V4Y2VwdGlvbiddCiAgICAgICAgICAgIHNlbGYuTG9nQXJn
cyhzdHJpbmdjKG1zZywgQy5DT0xPUl9FUlJPUikpCgogICAgZGVmIF9oYW5kbGVfd2FybmluZ3Moc2Vs
ZiwgcmVzKToKICAgICAgICAnJycgZGlzcGxheSB3YXJuaW5ncywgaWYgZW5hYmxlZCBhbmQgYW55IGV4
aXN0IGluIHRoZSByZXN1bHQgJycnCiAgICAgICAgaWYgQy5BQ1RJT05fV0FSTklOR1M6CiAgICAgICAg
ICAgIGlmICd3YXJuaW5ncycgaW4gcmVzIGFuZCByZXNbJ3dhcm5pbmdzJ106CiAgICAgICAgICAgICAg
ICBmb3Igd2FybmluZyBpbiByZXNbJ3dhcm5pbmdzJ106CiAgICAgICAgICAgICAgICAgICAgc2VsZi5M
b2dBcmdzKHN0cmluZ2ModSdbV0FSTklOR106ICVzJyAlIHdhcm5pbmcsIEMuQ09MT1JfV0FSTikpCiAg
ICAgICAgICAgICAgICBkZWwgcmVzWyd3YXJuaW5ncyddCiAgICAgICAgICAgIGlmICdkZXByZWNhdGlv
bnMnIGluIHJlcyBhbmQgcmVzWydkZXByZWNhdGlvbnMnXToKICAgICAgICAgICAgICAgIGZvciB3YXJu
aW5nIGluIHJlc1snZGVwcmVjYXRpb25zJ106CiAgICAgICAgICAgICAgICAgICAgc2VsZi5Mb2dBcmdz
KHN0cmluZ2Moc2VsZi5fZGVwcmVjYXRlZF9tc2coKip3YXJuaW5nKSwgQy5DT0xPUl9ERVBSRUNBVEUp
KQogICAgICAgICAgICAgICAgZGVsIHJlc1snZGVwcmVjYXRpb25zJ10KCiAgICBkZWYgX2RlcHJlY2F0
ZWRfbXNnKHNlbGYsIG1zZywgdmVyc2lvbj1Ob25lLCByZW1vdmVkPUZhbHNlKToKICAgICAgICAnJycg
dXNlZCB0byBwcmludCBvdXQgYSBkZXByZWNhdGlvbiBtZXNzYWdlLicnJwogICAgICAgIGlmIG5vdCBy
ZW1vdmVkIGFuZCBub3QgQy5ERVBSRUNBVElPTl9XQVJOSU5HUzoKICAgICAgICAgICAgcmV0dXJuCgog
ICAgICAgIGlmIG5vdCByZW1vdmVkOgogICAgICAgICAgICBpZiB2ZXJzaW9uOgogICAgICAgICAgICAg
ICAgbmV3X21zZyA9ICJbREVQUkVDQVRJT04gV0FSTklOR106ICVzLiBUaGlzIGZlYXR1cmUgd2lsbCBi
ZSByZW1vdmVkIGluIHZlcnNpb24gJXMuIiAlIChtc2csIHZlcnNpb24pCiAgICAgICAgICAgIGVsc2U6
CiAgICAgICAgICAgICAgICBuZXdfbXNnID0gIltERVBSRUNBVElPTiBXQVJOSU5HXTogJXMuIFRoaXMg
ZmVhdHVyZSB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4iICUgKG1zZykKICAgICAg
ICAgICAgbmV3X21zZyA9IG5ld19tc2cgKyAiIERlcHJlY2F0aW9uIHdhcm5pbmdzIGNhbiBiZSBkaXNh
YmxlZCBieSBzZXR0aW5nIGRlcHJlY2F0aW9uX3dhcm5pbmdzPUZhbHNlIGluIGFuc2libGUuY2ZnLlxu
XG4iCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmFpc2UgQW5zaWJsZUVycm9yKCJbREVQUkVDQVRF
RF06ICVzLlxuUGxlYXNlIHVwZGF0ZSB5b3VyIHBsYXlib29rcy4iICUgbXNnKQoKICAgICAgICByZXR1
cm4gbmV3X21zZwoBAAD//wxwyt3MTQAA
`,
    },

    "/ansible/callback/werf.py": {
        name:    "werf.py",
        local:   "ansible/callback/werf.py",
        size:    2663,
        modtime: 1575962212,
        compressed: `
H4sIAAAAAAAA/wBnCpj1IyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyAoYykgMjAxOCwgSXZhbiBNaWto
ZXlraW4gPGl2YW4ubWlraGV5a2luQGZsYW50LmNvbT4KIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSB2My4wKyAoc2VlIENPUFlJTkcgb3IgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4w
LnR4dCkKCiMgTWFrZSBjb2RpbmcgbW9yZSBweXRob24zLWlzaApmcm9tIF9fZnV0dXJlX18gaW1wb3J0
IChhYnNvbHV0ZV9pbXBvcnQsIGRpdmlzaW9uLCBwcmludF9mdW5jdGlvbikKX19tZXRhY2xhc3NfXyA9
IHR5cGUKCgpET0NVTUVOVEFUSU9OID0gJycnCiAgICBjYWxsYmFjazogd2VyZgogICAgdHlwZTogc3Rk
b3V0CiAgICBzaG9ydF9kZXNjcmlwdGlvbjogUHJpbnQgcmVsYXRlZCB3ZXJmIGNvbmZpZyBzZWN0aW9u
IGluIGNhc2Ugb2YgdGFzayBmYWlsdXJlCiAgICB2ZXJzaW9uX2FkZGVkOiAiMi40IgogICAgZGVzY3Jp
cHRpb246CiAgICAgICAgLSBTb2xvIG1vZGUgd2l0aCBsaXZlIHN0ZG91dCBmb3IgcmF3IGFuZCBzY3Jp
cHQgdGFza3MKICAgICAgICAtIHdlcmYgc3BlY2lmaWMgZXJyb3IgbWVzc2FnZXMKICAgIHJlcXVpcmVt
ZW50czoKICAgICAgLSBzZXQgYXMgc3Rkb3V0IGNhbGxiYWNrIGluIGNvbmZpZ3VyYXRpb24KJycnCgpm
cm9tIGNhbGxiYWNrLmxpdmUgaW1wb3J0IENhbGxiYWNrTW9kdWxlIGFzIENhbGxiYWNrTW9kdWxlX2xp
dmUKZnJvbSBjYWxsYmFjay5saXZlIGltcG9ydCB2dDEwMCwgbENvbG9yCmZyb20gYW5zaWJsZSBpbXBv
cnQgY29uc3RhbnRzIGFzIEMKZnJvbSBhbnNpYmxlLnV0aWxzLmNvbG9yIGltcG9ydCBzdHJpbmdjCgpp
bXBvcnQgb3MKaW1wb3J0IGpzb24KCmNsYXNzIENhbGxiYWNrTW9kdWxlKENhbGxiYWNrTW9kdWxlX2xp
dmUpOgoKICAgIENBTExCQUNLX1ZFUlNJT04gPSAyLjAKICAgIENBTExCQUNLX1RZUEUgPSAnc3Rkb3V0
JwogICAgQ0FMTEJBQ0tfTkFNRSA9ICd3ZXJmJwoKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAg
ICBzZWxmLnN1cGVyX3JlZiA9IHN1cGVyKENhbGxiYWNrTW9kdWxlLCBzZWxmKQogICAgICAgIHNlbGYu
c3VwZXJfcmVmLl9faW5pdF9fKCkKCiAgICBkZWYgdjJfcnVubmVyX29uX2ZhaWxlZChzZWxmLCByZXN1
bHQsICoqa3dhcmdzKToKICAgICAgICBzZWxmLnN1cGVyX3JlZi52Ml9ydW5uZXJfb25fZmFpbGVkKHJl
c3VsdCwgKiprd2FyZ3MpCgogICAgICAgICMgZ2V0IGNvbmZpZyBzZWN0aW9ucyBmcm9tIHdlcmYKICAg
ICAgICAjIHRhc2sgY29uZmlnIHRleHQgaXMgaW4gYSBsYXN0IHRhZwogICAgICAgICMgZG9jdGV4dCBp
cyBpbiBhIGZpbGUgV0VSRl9EVU1QX0NPTkZJR19ET0NfUEFUSAogICAgICAgIHNlbGYuX2Rpc3BsYXlf
d2VyZl9jb25maWcocmVzdWx0Ll90YXNrKQoKICAgIGRlZiBfcmVhZF9kdW1wX2NvbmZpZ19kb2Moc2Vs
Zik6CiAgICAgICAgIyByZWFkIGNvbnRlbnQgZnJvbSBmaWxlIGluIFdFUkZfRFVNUF9DT05GSUdfRE9D
X1BBVEggZW52CiAgICAgICAgaWYgJ1dFUkZfRFVNUF9DT05GSUdfRE9DX1BBVEgnIG5vdCBpbiBvcy5l
bnZpcm9uOgogICAgICAgICAgICByZXR1cm4ge30KICAgICAgICBkdW1wX3BhdGggPSBvcy5lbnZpcm9u
WydXRVJGX0RVTVBfQ09ORklHX0RPQ19QQVRIJ10KICAgICAgICByZXMgPSB7fQogICAgICAgIHRyeToK
ICAgICAgICAgICAgZmggPSBvcGVuKGR1bXBfcGF0aCwgJ3InKQogICAgICAgICAgICByZXMgPSBqc29u
LmxvYWQoZmgpCiAgICAgICAgICAgIGZoLmNsb3NlKCkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAg
IHBhc3MKCiAgICAgICAgcmV0dXJuIHJlcwoKICAgICMgd2VyZl9zdGFnZV9uYW1lIGNvbW1lbnRlZCBm
b3IgY29uc2lzdGVuY3kgd2l0aCB3ZXJmZmlsZS15bWwgYmVoYXZpb3VyCiAgICBkZWYgX2Rpc3BsYXlf
d2VyZl9jb25maWcoc2VsZiwgdGFzayk6CiAgICAgICAgdGFncyA9IHRhc2sudGFncwogICAgICAgIGlm
IG5vdCB0YWdzIG9yIGxlbih0YWdzKSA9PSAwOgogICAgICAgICAgICByZXR1cm4KCiAgICAgICAgIyBs
YXN0IHRhZyBpcyBhIGtleSB0byBhIHNlY3Rpb24gZHVtcCBpbiBkdW1wX2NvbmZpZwogICAgICAgIGR1
bXBfY29uZmlnX3NlY3Rpb25fa2V5ID0gdGFnc1stMV0KCiAgICAgICAgZHVtcF9jb25maWcgPSBzZWxm
Ll9yZWFkX2R1bXBfY29uZmlnX2RvYygpCiAgICAgICAgZHVtcF9jb25maWdfZG9jID0gZHVtcF9jb25m
aWcuZ2V0KCdkdW1wX2NvbmZpZ19kb2MnLCAnJykKICAgICAgICBkdW1wX2NvbmZpZ19zZWN0aW9ucyA9
IGR1bXBfY29uZmlnLmdldCgnZHVtcF9jb25maWdfc2VjdGlvbnMnLCB7fSkKICAgICAgICBkdW1wX2Nv
bmZpZ19zZWN0aW9uID0gZHVtcF9jb25maWdfc2VjdGlvbnMuZ2V0KGR1bXBfY29uZmlnX3NlY3Rpb25f
a2V5LCAnJykKICAgICAgICBzZWxmLkxvZ0FyZ3MoCiAgICAgICAgICAgIHUiXG4iLAogICAgICAgICAg
ICBsQ29sb3IuQ09MT1JfREVCVUcsIHUiRmFpbGVkIHRhc2sgY29uZmlndXJhdGlvbjpcblxuIiwgdnQx
MDAucmVzZXQsCiAgICAgICAgICAgIHN0cmluZ2MoZHVtcF9jb25maWdfc2VjdGlvbiwgQy5DT0xPUl9E
RUJVRyksCiAgICAgICAgICAgIHUiXG4iLAogICAgICAgICAgICBzdHJpbmdjKGR1bXBfY29uZmlnX2Rv
YywgQy5DT0xPUl9ERUJVRyksCiAgICAgICAgICAgIHUiXG4iKQoBAAD//yW/giBnCgAA
`,
    },

    "/ansible/crypt.py": {
        name:    "crypt.py",
        local:   "ansible/crypt.py",
        size:    45,
        modtime: 1571135671,
        compressed: `
H4sIAAAAAAAA/wAtANL/ZGVmIGNyeXB0KHdvcmQsIHNhbHQpOgogIHJldHVybiAiRkFLRV9DUllQVCIK
AQAA///ZwIS+LQAAAA==
`,
    },

    "/ansible/sitecustomize.py": {
        name:    "sitecustomize.py",
        local:   "ansible/sitecustomize.py",
        size:    2019,
        modtime: 1571135671,
        compressed: `
H4sIAAAAAAAA/wDjBxz4ZnJvbSB3ZXJmLnRlZV9wb3BlbiBpbXBvcnQgVGVlUG9wZW4KaW1wb3J0IHN5
cywgcmUKaW1wb3J0IG9zCgojIF9fZGVsX18gaXMgY2FsbGVkIHdoZW4gcHl0aG9uIGFzc2lnbnMgcmVh
bCBhcmd1bWVudHMgaW50byBzeXMuYXJndgpjbGFzcyBJc0Fuc2liYWxsWihvYmplY3QpOgogICAgYW5z
aWJhbGx6X3JlID0gcmUuY29tcGlsZShyJy9BbnNpYmFsbFouKlwucHkkJykKCiAgICBkZWYgX19kZWxf
XyhzZWxmKToKICAgICAgICBpZiBsZW4oc3lzLmFyZ3YpID4gMDoKICAgICAgICAgICAgaWYgc2VsZi5h
bnNpYmFsbHpfcmUuc2VhcmNoKHN5cy5hcmd2WzBdKToKICAgICAgICAgICAgICAgIG1vY2tfc3VicHJv
Y2Vzc19Qb3Blbl9mb3JfQW5zaWJhbGxaKCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAg
IG1vY2tfc3VicHJvY2Vzc19Qb3Blbl9pbl9sb3dfbGV2ZWxfZXhlY3V0ZSgpCgoKc3lzLmFyZ3YgPSBJ
c0Fuc2liYWxsWigpCgojIE1vY2sgc3VicHJvY2Vzcy5Qb3BlbiB3aXRoIHdlcmYuVGVlUG9wZW4uCiMg
VXNlIFRlZVBvcGVuIG9ubHkgaWYgcGF5bG9hZC56aXAgaXMgaW4gc3lzLnBhdGguCmRlZiBtb2NrX3N1
YnByb2Nlc3NfUG9wZW5fZm9yX0Fuc2liYWxsWigpOgogICAgYW5zaWJhbGx6X3BhdGhfcmUgPSByZS5j
b21waWxlKHInL2Fuc2libGVfKGNvbW1hbmR8YXB0fGFwa3x5dW0pX3BheWxvYWRcLnppcCQnKQogICAg
aW1wb3J0IHN1YnByb2Nlc3MKICAgIG9yaWdpbmFsX3BvcGVuID0gc3VicHJvY2Vzcy5Qb3BlbgogICAg
ZGVmIG5ld19Qb3BlbihhcmdzLCAqKmt3YXJncyk6CiAgICAgICAgaW1wb3J0IHN5cwogICAgICAgIGlm
IGFuc2liYWxsel9wYXRoX3JlLnNlYXJjaChzeXMucGF0aFswXSk6CiAgICAgICAgICAgIHJldHVybiBU
ZWVQb3BlbihhcmdzLCBvcmlnaW5hbF9wb3Blbj1vcmlnaW5hbF9wb3BlbiwgKiprd2FyZ3MpCiAgICAg
ICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsX3BvcGVuKGFyZ3MsICoqa3dhcmdzKQog
ICAgc3VicHJvY2Vzcy5Qb3BlbiA9IG5ld19Qb3BlbgoKCiMgTW9jayBzdXByb2Nlc3MuUG9wZW4gZm9y
IF9sb3dfbGV2ZWxfZXhlY3V0ZV9jb21tYW5kCiMgaWYgcmF3IG9yIHNjcmlwdCBhY3Rpb24gYXJlIGlu
IHVzZS4KZGVmIG1vY2tfc3VicHJvY2Vzc19Qb3Blbl9pbl9sb3dfbGV2ZWxfZXhlY3V0ZSgpOgogICAg
ZnJvbSBhbnNpYmxlLnBsdWdpbnMuYWN0aW9uIGltcG9ydCBBY3Rpb25CYXNlCiAgICBpbXBvcnQgc3Vi
cHJvY2VzcwogICAgb3JpZ2luYWxfbG93X2V4ZWMgPSBBY3Rpb25CYXNlLl9sb3dfbGV2ZWxfZXhlY3V0
ZV9jb21tYW5kCiAgICBkZWYgbmV3X2xvd19leGVjKHNlbGYsIGNtZCwgKiprd2FyZ3MpOgogICAgICAg
IGxlX29yaWdpbmFsX3BvcGVuID0gc3VicHJvY2Vzcy5Qb3BlbgoKICAgICAgICBzZWxmX25hbWUgPSBz
dHIodHlwZShzZWxmKSkKICAgICAgICB1c2VfdGVlID0gRmFsc2UKICAgICAgICBpZiAnYW5zaWJsZS5w
bHVnaW5zLmFjdGlvbi5yYXcuQWN0aW9uTW9kdWxlJyBpbiBzZWxmX25hbWU6CiAgICAgICAgICAgIHVz
ZV90ZWUgPSBUcnVlCgogICAgICAgIGlmICdhbnNpYmxlLnBsdWdpbnMuYWN0aW9uLnNjcmlwdC5BY3Rp
b25Nb2R1bGUnIGluIHNlbGZfbmFtZToKICAgICAgICAgICAgdXNlX3RlZSA9IFRydWUKCiAgICAgICAg
aWYgdXNlX3RlZToKICAgICAgICAgICAgZGVmIG5ld19wb3BlbihhcmdzLCAqKmt3YXJncyk6CiAgICAg
ICAgICAgICAgICByZXR1cm4gVGVlUG9wZW4oYXJncywgb3JpZ2luYWxfcG9wZW49bGVfb3JpZ2luYWxf
cG9wZW4sICoqa3dhcmdzKQogICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuID0gbmV3X3BvcGVuCgog
ICAgICAgIHJlcyA9IG9yaWdpbmFsX2xvd19leGVjKHNlbGYsIGNtZCwgKiprd2FyZ3MpCgogICAgICAg
IHN1YnByb2Nlc3MuUG9wZW4gPSBsZV9vcmlnaW5hbF9wb3BlbgogICAgICAgIHJldHVybiByZXMKICAg
IEFjdGlvbkJhc2UuX2xvd19sZXZlbF9leGVjdXRlX2NvbW1hbmQgPSBuZXdfbG93X2V4ZWMKAQAA///w
yD7S4wcAAA==
`,
    },

    "/ansible/werf/__init__.py": {
        name:    "__init__.py",
        local:   "ansible/werf/__init__.py",
        size:    383,
        modtime: 1571135671,
        compressed: `
H4sIAAAAAAAA/wB/AYD+IyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmRlZiB0ZXJtUHJpbnQoYXJncyk6
CiAgICBpbXBvcnQgc3lzCiAgICBvcmlnX3N0ZG91dCA9IHN5cy5zdGRvdXQKICAgIHRlcm0gPSBvcGVu
KCIvZGV2L3B0cy8wIiwgIndiKyIsIGJ1ZmZlcmluZz0wKQogICAgc3lzLnN0ZG91dCA9IHRlcm0KICAg
IHByaW50KGFyZ3MpCiAgICBzeXMuc3Rkb3V0ID0gb3JpZ19zdGRvdXQKICAgIHRlcm0uY2xvc2UoKQoK
U1RET1VUX1VOSVhfU09DS19OQU1FID0gJy8ud2VyZi9hbnNpYmxlLXRtcGRpci9sb2NhbC9hbnNpYmxl
X2xpdmVfc3Rkb3V0LnNvY2snClNUREVSUl9VTklYX1NPQ0tfTkFNRSA9ICcvLndlcmYvYW5zaWJsZS10
bXBkaXIvbG9jYWwvYW5zaWJsZV9saXZlX3N0ZGVyci5zb2NrJwoBAAD//1sibMV/AQAA
`,
    },

    "/ansible/werf/live_stdout.py": {
        name:    "live_stdout.py",
        local:   "ansible/werf/live_stdout.py",
        size:    2917,
        modtime: 1571664076,
        compressed: `
H4sIAAAAAAAA/wBlC5r0IyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmltcG9ydCB0aHJlYWRpbmcKaW1w
b3J0IG9zCmltcG9ydCBzb2NrZXQKaW1wb3J0IHNlbGVjdAoKaW1wb3J0IGxvZ2JvZWsKZnJvbSB3ZXJm
IGltcG9ydCBTVERPVVRfVU5JWF9TT0NLX05BTUUKCicnJwoKJycnCmNsYXNzIExpdmVTdGRvdXRMaXN0
ZW5lcihvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHNlbGYuX3N0ZG91dF9z
b2NrID0gTm9uZQogICAgICAgIHNlbGYuX3N0ZGVycl9zb2NrID0gTm9uZQogICAgICAgIHNlbGYuX3N0
b3AgPSBGYWxzZQogICAgICAgIHNlbGYuX2VuYWJsZV9saXZlX3N0ZG91dCA9IFRydWUKICAgICAgICBz
ZWxmLl9saXZlX3N0ZG91dCA9IEZhbHNlCgogICAgZGVmIHN0YXJ0KHNlbGYpOgogICAgICAgIHNlbGYu
X3N0ZG91dF9zb2NrID0gc2VsZi5fb3Blbl9zb2NrZXQoU1RET1VUX1VOSVhfU09DS19OQU1FKQogICAg
ICAgICNzZWxmLl9zdGRlcnJfc29jayA9IHNlbGYuX29wZW5fc29ja2V0KFNUREVSUl9VTklYX1NPQ0tf
TkFNRSkKICAgICAgICBzZWxmLl9yZWFkZXIgPSBMaXZlU3Rkb3V0UmVhZGVyKHN0ZG91dF9zb2NrPXNl
bGYuX3N0ZG91dF9zb2NrLCBzdGRlcnJfc29jaz1zZWxmLl9zdGRlcnJfc29jaywgbGlzdGVuZXI9c2Vs
ZikKICAgICAgICBzZWxmLl9yZWFkZXIuc3RhcnQoKQoKICAgIGRlZiBzdG9wKHNlbGYpOgogICAgICAg
IHNlbGYuX3N0b3AgPSBUcnVlCgogICAgICAgIGlmIHNlbGYuX3JlYWRlciAhPSBOb25lOgogICAgICAg
ICAgICBzZWxmLl9yZWFkZXIuc3RvcCgpCiAgICAgICAgICAgIHNlbGYuX3JlYWRlci5qb2luKDEwKQoK
ICAgICAgICBzZWxmLl9zdGRvdXRfc29jay5jbG9zZSgpCiAgICAgICAgb3MudW5saW5rKFNURE9VVF9V
TklYX1NPQ0tfTkFNRSkKCiAgICBkZWYgX29wZW5fc29ja2V0KHNlbGYsIGZpbGVuYW1lKToKICAgICAg
ICB0cnk6CiAgICAgICAgICAgIG9zLnVubGluayhmaWxlbmFtZSkKICAgICAgICBleGNlcHQgT1NFcnJv
cjoKICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZmlsZW5hbWUpOgogICAgICAgICAgICAgICAg
cmFpc2UKCiAgICAgICAgIyBDcmVhdGUgYSBVRFMgc29ja2V0CiAgICAgICAgc29jayA9IHNvY2tldC5z
b2NrZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICBzb2NrLmJpbmQo
ZmlsZW5hbWUpCgogICAgICAgIHJldHVybiBzb2NrCgogICAgIyBpcyB0aGVyZSB3YXMgbGl2ZSBvdXRw
dXQ/CiAgICBkZWYgaXNfbGl2ZV9zdGRvdXQoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuX2VuYWJs
ZV9saXZlX3N0ZG91dCBhbmQgc2VsZi5fbGl2ZV9zdGRvdXQKCiAgICAjIHNldCBsaXZlX3N0ZG91dCBm
bGFnCiAgICBkZWYgc2V0X2xpdmVfc3Rkb3V0KHNlbGYsIGxpdmVfc3Rkb3V0KToKICAgICAgICBzZWxm
Ll9saXZlX3N0ZG91dCA9IGxpdmVfc3Rkb3V0CgogICAgIyBpcyBsaXZlIG91dHB1dCBlbmFibGVkPwog
ICAgZGVmIGlzX2VuYWJsZWRfbGl2ZV9zdGRvdXQoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuX2Vu
YWJsZV9saXZlX3N0ZG91dAoKICAgICMgZW5hYmxlZCBvciBkaXNhYmxlIGxpdmVfb3V0cHV0CiAgICBk
ZWYgc2V0X2VuYWJsZV9saXZlX3N0ZG91dChzZWxmLCBlbmFibGVfbGl2ZV9zdGRvdXQpOgogICAgICAg
IHNlbGYuX2VuYWJsZV9saXZlX3N0ZG91dCA9IGVuYWJsZV9saXZlX3N0ZG91dAoKCgpjbGFzcyBMaXZl
U3Rkb3V0UmVhZGVyKHRocmVhZGluZy5UaHJlYWQpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0ZG91
dF9zb2NrPU5vbmUsIHN0ZGVycl9zb2NrPU5vbmUsIGxpc3RlbmVyPU5vbmUpOgogICAgICAgIHNlbGYu
c3Rkb3V0X3NvY2s9c3Rkb3V0X3NvY2sKICAgICAgICBzZWxmLnN0ZGVycl9zb2NrPXN0ZGVycl9zb2Nr
CiAgICAgICAgc2VsZi5saXN0ZW5lcj1saXN0ZW5lcgogICAgICAgIHNlbGYuX3N0b3AgPSBGYWxzZQog
ICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKICAgICAgICBzZWxmLnNldERhZW1v
bihUcnVlKQoKICAgIGRlZiBzdG9wKHNlbGYpOgogICAgICAgIHNlbGYuX3N0b3AgPSBUcnVlCgogICAg
ZGVmIHJ1bihzZWxmKToKICAgICAgICBzZWxmLnN0ZG91dF9zb2NrLmxpc3RlbigxKQoKICAgICAgICBy
c29ja2V0cyA9IFtzZWxmLnN0ZG91dF9zb2NrXQogICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAg
ICMgdGltZW91dCAxMDBtcyB0byBzdG9wIHF1aWNrZXIKICAgICAgICAgICAgcmZkcywgd2ZkcywgZWZk
cyA9IHNlbGVjdC5zZWxlY3QocnNvY2tldHMsIFtdLCBbXSwgMC4xKQoKICAgICAgICAgICAgZm9yIHMg
aW4gcmZkczoKICAgICAgICAgICAgICAgIGlmIHMgaXMgc2VsZi5zdGRvdXRfc29jazoKICAgICAgICAg
ICAgICAgICAgICBjb25uZWN0aW9uLCBjbGllbnRfYWRkcmVzcyA9IHNlbGYuc3Rkb3V0X3NvY2suYWNj
ZXB0KCkKICAgICAgICAgICAgICAgICAgICByc29ja2V0cy5hcHBlbmQoY29ubmVjdGlvbikKICAgICAg
ICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgcGFydCA9IHMucmVjdigxMDI0KQogICAg
ICAgICAgICAgICAgICAgIGlmIHBhcnQ6CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGlzdGVu
ZXIuc2V0X2xpdmVfc3Rkb3V0KFRydWUpCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYubGlz
dGVuZXIuaXNfZW5hYmxlZF9saXZlX3N0ZG91dCgpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
bG9nYm9lay5PdXQocGFydCkKICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAg
ICAgICAgICBzLmNsb3NlKCkKICAgICAgICAgICAgICAgICAgICAgICAgcnNvY2tldHMucmVtb3ZlKHMp
CgogICAgICAgICAgICBpZiBzZWxmLl9zdG9wOgogICAgICAgICAgICAgICAgYnJlYWsKCgEAAP//yCwk
mGULAAA=
`,
    },

    "/ansible/werf/tee_popen.py": {
        name:    "tee_popen.py",
        local:   "ansible/werf/tee_popen.py",
        size:    6054,
        modtime: 1571135671,
        compressed: `
H4sIAAAAAAAA/wCmF1noIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiMgVGVlUG9wZW4gaXMgYSByZWFk
ZXIgZnJvbSBzdGRvdXQgYW5kIHN0ZGVyciBvZiBzdWJwcm9jZXNzLlBvcGVuIGludG8KIyBwaXBlcyB0
byByZXR1cm4gdG8gYW5zaWJsZSBhbmQgaW50byB1bml4IHNvY2tldCB0byBzZW5kIHRvIHdlcmYgbG9n
Z2VyIChsb2dib2VrKS4KIwojIHN0ZG91dCBmcm9tIHN1YnByb2Nlc3MuUG9wZW4gKG9yaWdpbmFsX3Bv
cGVuKQojIHwKIyB8IGxvb3BlZCByZWFkIGJ5IFRlZVNwbGl0dGVyIGFuZCB3cml0ZSBpbnRvIDIgc3Ry
ZWFtczoKIyDihpMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLeKGkwojIHN0ZG91dF9saXZlX3NvY2sg
ICAgICAgICAgIGZkX291dF93cml0ZQojIHwgICAgICAgICAgICAgICAgICAgICAgICAgIOKGkwojIHwg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZkX291dF9yZWFkCiMg4oaTICAgICAgICAgICAgICAgICAg
ICAgICAgICDihpMKIyBMaXZlU3Rkb3V0TGlzdGVuZXIgICAgICAgICBleGVjX2NvbW1hbmQgaW4gQW5z
aWJhbGxaJ3MgYmFzaWMucHkKIyBpbiBsaXZlLnB5CiMKIyBUaGUgc2FtZSBpcyBoYXBwZW4gd2l0aCBz
dGRlcnIuCgppbXBvcnQgb3MKaW1wb3J0IHNlbGVjdAppbXBvcnQgc29ja2V0CmltcG9ydCB0aW1lCmlt
cG9ydCB0aHJlYWRpbmcKCmZyb20gd2VyZiBpbXBvcnQgU1RET1VUX1VOSVhfU09DS19OQU1FCgoKY2xh
c3MgVGVlUG9wZW4ob2JqZWN0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcmdzLCBvcmlnaW5hbF9w
b3Blbj1Ob25lLCBidWZzaXplPTAsICoqa3dhcmdzKToKICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBO
b25lCiAgICAgICAgaWYgb3JpZ2luYWxfcG9wZW4gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICMgcGlw
ZSBmb3Igc3Rkb3V0IGJhY2sgdG8gYW5zaWJsZQogICAgICAgICAgICBzZWxmLmZkX291dF9yZWFkLCBz
ZWxmLmZkX291dF93cml0ZSA9IHNlbGYucGlwZV9jbG9leGVjKCkKICAgICAgICAgICAgc2VsZi5zdGRv
dXQgPSBvcy5mZG9wZW4oc2VsZi5mZF9vdXRfcmVhZCwgJ3JiJywgYnVmc2l6ZSkKICAgICAgICAgICAg
c2VsZi5zdGRvdXRfYmFja190b19hbnNpYmxlID0gb3MuZmRvcGVuKHNlbGYuZmRfb3V0X3dyaXRlLCAn
d2InLCAwKQogICAgICAgICAgICAjIHBpcGUgZm9yIHN0ZGVyciBiYWNrIHRvIGFuc2libGUKICAgICAg
ICAgICAgc2VsZi5mZF9lcnJfcmVhZCwgc2VsZi5mZF9lcnJfd3JpdGUgPSBzZWxmLnBpcGVfY2xvZXhl
YygpCiAgICAgICAgICAgIHNlbGYuc3RkZXJyID0gb3MuZmRvcGVuKHNlbGYuZmRfZXJyX3JlYWQsICdy
YicsIGJ1ZnNpemUpCiAgICAgICAgICAgIHNlbGYuc3RkZXJyX2JhY2tfdG9fYW5zaWJsZSA9IG9zLmZk
b3BlbihzZWxmLmZkX2Vycl93cml0ZSwgJ3diJywgMCkKCiAgICAgICAgICAgICMgdW5peCBzb2NrZXQg
Zm9yIHN0ZG91dCByZWRpcmVjdAogICAgICAgICAgICBzZWxmLnN0ZG91dF9saXZlX3NvY2s9Tm9uZQog
ICAgICAgICAgICBzZWxmLnN0ZG91dF9saXZlX3NvY2sgPSBzZWxmLl9vcGVuX2xpdmVfc29jayhTVERP
VVRfVU5JWF9TT0NLX05BTUUpCiAgICAgICAgICAgICMgdW5peCBzb2NrZXQgZm9yIHN0ZGVyciByZWRp
cmVjdAogICAgICAgICAgICAjc2VsZi5zdGRlcnJfbGl2ZV9zb2NrID0gc2VsZi5fb3Blbl9saXZlX3Nv
Y2soU1RERVJSX1VOSVhfU09DS19OQU1FKQoKICAgICAgICAgICAgc2VsZi5jbWQgPSBvcmlnaW5hbF9w
b3BlbihhcmdzLCBidWZzaXplPWJ1ZnNpemUsICoqa3dhcmdzKQogICAgICAgICAgICBzZWxmLnN0ZGlu
ID0gc2VsZi5jbWQuc3RkaW4KCiAgICAgICAgICAgIHNlbGYuX3NwbGl0dGVyID0gVGVlU3BsaXR0ZXIo
CiAgICAgICAgICAgICAgICBpbl9hPXNlbGYuY21kLnN0ZG91dCwKICAgICAgICAgICAgICAgIGluX2I9
c2VsZi5jbWQuc3RkZXJyLAogICAgICAgICAgICAgICAgb3V0X2E9c2VsZi5zdGRvdXRfYmFja190b19h
bnNpYmxlLAogICAgICAgICAgICAgICAgb3V0X2I9c2VsZi5zdGRlcnJfYmFja190b19hbnNpYmxlLAog
ICAgICAgICAgICAgICAgb3V0X2FiPXNlbGYuc3Rkb3V0X2xpdmVfc29jaywKICAgICAgICAgICAgKQog
ICAgICAgICAgICBzZWxmLl9zcGxpdHRlci5zdGFydCgpCgogICAgICAgICAgICAjIFBlcmlvZGljYWxs
eSBjYWxsIHBvbGwgdG8gY2hlY2sgaWYgY21kIGlzIGRvbmUgYW5kIGNsb3NlIGZkX291dF93cml0ZQog
ICAgICAgICAgICAjIGFuZCBmZF9lcnJfd3JpdGUgZm9yIG5vbmJsb2NraW5nIGNvbW11bmljYXRlIG1l
dGhvZC4KICAgICAgICAgICAgc2VsZi5wb2xsX3RocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0
PXNlbGYuX3BvbGxfY2hlY2tlcl90aHJlYWQpCiAgICAgICAgICAgIHNlbGYucG9sbF90aHJlYWQuc2V0
RGFlbW9uKFRydWUpCiAgICAgICAgICAgIHNlbGYucG9sbF90aHJlYWQuc3RhcnQoKQoKICAgICMgZnJv
bSBzdXByb2Nlc3MuUG9wZW4KICAgIGRlZiBwaXBlX2Nsb2V4ZWMoc2VsZik6CiAgICAgICAgIiIiQ3Jl
YXRlIGEgcGlwZSB3aXRoIEZEcyBzZXQgQ0xPRVhFQy4iIiIKICAgICAgICAjIFBpcGVzJyBGRHMgYXJl
IHNldCBDTE9FWEVDIGJ5IGRlZmF1bHQgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZW0KICAgICAgICAj
IHRvIGJlIGluaGVyaXRlZCBieSBvdGhlciBzdWJwcm9jZXNzZXM6IHRoZSBDTE9FWEVDIGZsYWcgaXMg
cmVtb3ZlZAogICAgICAgICMgZnJvbSB0aGUgY2hpbGQncyBGRHMgYnkgX2R1cDIoKSwgYmV0d2VlbiBm
b3JrKCkgYW5kIGV4ZWMoKS4KICAgICAgICAjIFRoaXMgaXMgbm90IGF0b21pYzogd2Ugd291bGQgbmVl
ZCB0aGUgcGlwZTIoKSBzeXNjYWxsIGZvciB0aGF0LgogICAgICAgIHIsIHcgPSBvcy5waXBlKCkKICAg
ICAgICBzZWxmLl9zZXRfY2xvZXhlY19mbGFnKHIpCiAgICAgICAgc2VsZi5fc2V0X2Nsb2V4ZWNfZmxh
Zyh3KQogICAgICAgIHJldHVybiByLCB3CgogICAgIyBmcm9tIHN1cHJvY2Vzcy5Qb3BlbgogICAgZGVm
IF9zZXRfY2xvZXhlY19mbGFnKHNlbGYsIGZkLCBjbG9leGVjPVRydWUpOgogICAgICAgIGltcG9ydCBm
Y250bAogICAgICAgIHRyeToKICAgICAgICAgICAgY2xvZXhlY19mbGFnID0gZmNudGwuRkRfQ0xPRVhF
QwogICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgY2xvZXhlY19mbGFnID0g
MQoKICAgICAgICBvbGQgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGRCkKICAgICAgICBpZiBj
bG9leGVjOgogICAgICAgICAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGRCwgb2xkIHwgY2xv
ZXhlY19mbGFnKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5G
X1NFVEZELCBvbGQgJiB+Y2xvZXhlY19mbGFnKQoKICAgIGRlZiBfb3Blbl9saXZlX3NvY2soc2VsZiwg
ZmlsZW5hbWUpOgogICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLCBzb2Nr
ZXQuU09DS19TVFJFQU0pCiAgICAgICAgdHJ5OgogICAgICAgICAgICBzb2NrLmNvbm5lY3QoZmlsZW5h
bWUpCiAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKICAgICAgICAgICAgcmFpc2UKICAgICAgICBy
ZXR1cm4gc29jawoKICAgICMgcG9sbCBjbWQgd2hpbGUgbm90IE5vbmUuIGNsb3NlIHN0ZG91dCBhbmQg
c3RkZXJyIHRvIHVuYmxvY2sgY29tbXVuaWNhdGUgbWV0aG9kCiAgICBkZWYgX3BvbGxfY2hlY2tlcl90
aHJlYWQoc2VsZik6CiAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgcmVzID0gc2VsZi5wb2xs
KCkKICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCiAgICAgICAgICAgIGlmIHJlcyBpcyBub3QgTm9u
ZToKICAgICAgICAgICAgICAgIGJyZWFrCgogICAgZGVmIHBvbGwoc2VsZik6CiAgICAgICAgc2VsZi5y
ZXR1cm5jb2RlID0gc2VsZi5jbWQucG9sbCgpCiAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIG5v
dCBOb25lOgogICAgICAgICAgICAjIGNtZCBpcyBmaW5pc2hlZCwgc28gc3RvcCBzcGxpdHRlciB0aHJl
YWQKICAgICAgICAgICAgc2VsZi5fc3BsaXR0ZXIuc3RvcCgpCiAgICAgICAgICAgIHNlbGYuX3NwbGl0
dGVyLmpvaW4oMSkKICAgICAgICAgICAgIyBjbG9zZSBzb2NrZXRzCiAgICAgICAgICAgIHNlbGYuc3Rk
b3V0X2xpdmVfc29jay5jbG9zZSgpCiAgICAgICAgICAgIHNlbGYuc3Rkb3V0X2JhY2tfdG9fYW5zaWJs
ZS5jbG9zZSgpCiAgICAgICAgICAgIHNlbGYuc3RkZXJyX2JhY2tfdG9fYW5zaWJsZS5jbG9zZSgpCiAg
ICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQoKICAgIGRlZiB3YWl0KHNlbGYpOgogICAgICAgIHNl
bGYucmV0dXJuY29kZSA9IHNlbGYuY21kLndhaXQoKQogICAgICAgIHJldHVybiBzZWxmLnJldHVybmNv
ZGUKCiAgICBkZWYgY29tbXVuaWNhdGUoc2VsZiwgYXJncyk6CiAgICAgICAgc2VsZi5jbWQuc3Rkb3V0
ID0gc2VsZi5zdGRvdXQKICAgICAgICBzZWxmLmNtZC5zdGRlcnIgPSBzZWxmLnN0ZGVycgogICAgICAg
IHN0ZG91dCwgc3RkZXJyID0gc2VsZi5jbWQuY29tbXVuaWNhdGUoYXJncykKICAgICAgICByZXR1cm4g
c3Rkb3V0LCBzdGRlcnIKCgpjbGFzcyBUZWVTcGxpdHRlcih0aHJlYWRpbmcuVGhyZWFkKToKICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBpbl9hPU5vbmUsIGluX2I9Tm9uZSwgb3V0X2E9Tm9uZSwgb3V0X2I9Tm9u
ZSwgb3V0X2FiPU5vbmUpOgogICAgICAgIHNlbGYuaW5fYSA9IGluX2EKICAgICAgICBzZWxmLmluX2Ig
PSBpbl9iCiAgICAgICAgc2VsZi5vdXRfYSA9IG91dF9hCiAgICAgICAgc2VsZi5vdXRfYiA9IG91dF9i
CiAgICAgICAgc2VsZi5vdXRfYWIgPSBvdXRfYWIKICAgICAgICBzZWxmLl9zdG9wID0gRmFsc2UKICAg
ICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCiAgICAgICAgc2VsZi5zZXREYWVtb24o
VHJ1ZSkKCiAgICBkZWYgc3RvcChzZWxmKToKICAgICAgICBzZWxmLl9zdG9wID0gVHJ1ZQoKICAgIGRl
ZiBydW4oc2VsZik6CiAgICAgICAgcnBpcGVzID0gW3NlbGYuaW5fYSwgc2VsZi5pbl9iXQogICAgICAg
IHdoaWxlIFRydWU6CiAgICAgICAgICAgIHJmZHMsIHdmZHMsIGVmZHMgPSBzZWxlY3Quc2VsZWN0KHJw
aXBlcywgW10sIFtdLCAwLjEpCgogICAgICAgICAgICBmb3IgcyBpbiByZmRzOgogICAgICAgICAgICAg
ICAgZGF0YSA9IHNlbGYuX3JlYWRfZnJvbV9waXBlcyhycGlwZXMsIHJmZHMsIHMpCiAgICAgICAgICAg
ICAgICBpZiBzIGlzIHNlbGYuaW5fYToKICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKHNlbGYu
b3V0X2EsIGRhdGEpCiAgICAgICAgICAgICAgICBpZiBzIGlzIHNlbGYuaW5fYjoKICAgICAgICAgICAg
ICAgICAgICBzZWxmLndyaXRlKHNlbGYub3V0X2IsIGRhdGEpCiAgICAgICAgICAgICAgICBzZWxmLndy
aXRlKHNlbGYub3V0X2FiLCBkYXRhKQoKICAgICAgICAgICAgaWYgc2VsZi5fc3RvcDoKICAgICAgICAg
ICAgICAgIGJyZWFrCgogICAgICAgICAgICBpZiBub3QgcnBpcGVzOgogICAgICAgICAgICAgICAgYnJl
YWsKCiAgICBkZWYgX3JlYWRfZnJvbV9waXBlcyhzZWxmLCBycGlwZXMsIHJmZHMsIGZpbGVfZGVzY3Jp
cHRvcik6CiAgICAgICAgZGF0YSA9ICcnCiAgICAgICAgaWYgZmlsZV9kZXNjcmlwdG9yIGluIHJmZHM6
CiAgICAgICAgICAgIGRhdGEgPSBvcy5yZWFkKGZpbGVfZGVzY3JpcHRvci5maWxlbm8oKSwgOTAwMCkK
ICAgICAgICAgICAgaWYgZGF0YSA9PSAnJzoKICAgICAgICAgICAgICAgIHJwaXBlcy5yZW1vdmUoZmls
ZV9kZXNjcmlwdG9yKQoKICAgICAgICByZXR1cm4gZGF0YQoKICAgIGRlZiB3cml0ZShzZWxmLCBzLCBk
YXRhKToKICAgICAgICBpZiBpc2luc3RhbmNlKHMsIHNvY2tldC5zb2NrZXQpOgogICAgICAgICAgICBz
LnNlbmRhbGwoZGF0YSkKICAgICAgICBlbGlmIGlzaW5zdGFuY2UocywgaW50KToKICAgICAgICAgICAg
b3Mud3JpdGUocywgZGF0YSkKICAgICAgICBlbGlmIGlzaW5zdGFuY2UocywgZmlsZSk6CiAgICAgICAg
ICAgIHMud3JpdGUoZGF0YSkKICAgICAgICBlbHNlOgogICAgICAgICAgICByYWlzZSBUeXBlRXJyb3Io
dHlwZShzKSkKAQAA///3bZmkphcAAA==
`,
    },

    "/ansible": {
        name:  "ansible",
        local: `ansible`,
        isDir: true,
    },

    "/ansible/callback": {
        name:  "callback",
        local: `ansible/callback`,
        isDir: true,
    },

    "/ansible/werf": {
        name:  "werf",
        local: `ansible/werf`,
        isDir: true,
    },
}

var _escDirs = map[string][]os.FileInfo{
    "ansible": {
        _escData["/ansible/callback"],
        _escData["/ansible/crypt.py"],
        _escData["/ansible/sitecustomize.py"],
        _escData["/ansible/werf"],
    },

    "ansible/callback": {
        _escData["/ansible/callback/__init__.py"],
        _escData["/ansible/callback/live.py"],
        _escData["/ansible/callback/werf.py"],
    },

    "ansible/werf": {
        _escData["/ansible/werf/__init__.py"],
        _escData["/ansible/werf/live_stdout.py"],
        _escData["/ansible/werf/tee_popen.py"],
    },
}