From 26b24f58e03af0949578aa618e62f07e3dd18990 Mon Sep 17 00:00:00 2001 From: qiyinxi Date: Sun, 8 Nov 2026 17:39:31 +0100 Subject: [PATCH] =?UTF-8?q?=E4=B8=A4=E4=B8=AA=20exe=20=E5=8A=A0=E4=B8=8A?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E4=BF=A1=E6=81=AF=EF=BC=8C=E4=B8=8D=E5=86=8D?= =?UTF-8?q?=E5=8E=BB=E6=8E=89=E7=AC=A6=E5=8F=B7=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 0.38.2 的 tools\modavd.exe 被 Defender 云端判成 Trojan:Win32/Bearfoos.A!ml,是机器学习规则的误报。 没签名、去了符号、没有版本信息的 Go 程序最容易被这类规则报,这两样先改掉。 - winres 改为一次生成两份 rsrc_windows_amd64.syso:cmd/modavd-gui/ 给 ModAVD.exe,根目录给 tools\modavd.exe(新增)。两份都带图标、清单和版本信息(RT_VERSION):ProductName ModAVD、 FileDescription、FileVersion / ProductVersion 取 buildinfo.Version、CompanyName、LegalCopyright、 OriginalFilename。输出照旧不带时间戳,逐字节可复现。 - build.ps1 编两个 exe 时去掉 -s -w(留符号表和 DWARF);客体里跑的 modavd-proxyd 照旧去符号, 它是 gzip 后嵌进 exe 的 Linux 程序。 - 单测:提交的两份 syso 和按当前 buildinfo.Version 生成的逐字节一致(改了版本号没重新生成就失败); 版本号解析;按 VerQueryValue 的走法逐层解析版本信息块,核长度、对齐、各字符串和 Translation。 - README(中英)写明不去符号、版本信息从哪来、改版本号后要 go generate ./cmd/modavd-gui。 验证:build.ps1 -Test 全部通过;两个 exe 在 Windows 的文件属性里显示 ModAVD 0.6.0 和对应说明; modavd.exe version --json 正常;exe 里没有本机路径,隐私扫描 0 失败;Defender 本地扫描没有报。 大小:modavd.exe 11.5 → 15.7 MB,ModAVD.exe 12.3 → 16.5 MB,各大了约三分之一。云端会不会再判,要等下一版发出去才知道。 --- README.en.md | 1 + README.md | 1 + build.ps1 | 7 +- cmd/modavd-gui/main.go | 7 +- cmd/modavd-gui/rsrc_windows_amd64.syso | Bin 72626 -> 73388 bytes cmd/modavd-gui/winres/main.go | 190 ++++++++++++++++++++++--- cmd/modavd-gui/winres/main_test.go | 156 ++++++++++++++++++++ main.go | 3 + rsrc_windows_amd64.syso | Bin 0 -> 73420 bytes 9 files changed, 342 insertions(+), 23 deletions(-) create mode 100644 cmd/modavd-gui/winres/main_test.go create mode 100644 rsrc_windows_amd64.syso diff --git a/README.en.md b/README.en.md index bf4ae17..4ffb23b 100644 --- a/README.en.md +++ b/README.en.md @@ -300,6 +300,7 @@ pwsh -NoProfile -File build.ps1 -Out -Go - Which go: `-Go`; if not given, the environment variable `MODAVD_GO`; otherwise the go on PATH. If the version differs from the `toolchain` in `go.mod`, it reports an error and never quietly builds with another version. - It uses `-trimpath -buildvcs=false` and does not use `-X` to write the version number: the same source gives byte-identical results on any machine and in any directory. +- It does not pass `-s -w`, so the exes keep their symbol table; both carry version information (product name, description, version) from the committed `rsrc_windows_amd64.syso` files (one in the root for `modavd.exe`, one in `cmd/modavd-gui/` for `ModAVD.exe`). Unsigned, stripped Go programs are what the machine-learning rules of antivirus programs flag most. After changing the version in `internal/buildinfo`, the icon or the manifest, run `go generate ./cmd/modavd-gui` and commit both .syso files; a unit test fails until then. - It uses the standard library only, with no third-party dependencies, and builds offline too (`GOPROXY=off`). - `.gitattributes` makes all text files in the repository LF (binary files such as icons excepted): `go:embed` embeds the bytes in the working tree, and an exe built from CRLF files would differ. diff --git a/README.md b/README.md index eac2226..ecf5311 100644 --- a/README.md +++ b/README.md @@ -302,6 +302,7 @@ pwsh -NoProfile -File build.ps1 -Out <目录> -Go - 用哪个 go:`-Go`,没给就用环境变量 `MODAVD_GO`,再没有就用 PATH 上的 go。版本和 `go.mod` 的 `toolchain` 不一致就报错,不会悄悄换别的版本编。 - `-trimpath -buildvcs=false`,不用 `-X` 写版本号:同一份源码在哪台机器、哪个目录编,结果都逐字节相同。 +- 不加 `-s -w`,exe 留着符号表;两个 exe 都带版本信息(产品名、说明、版本号),来自提交在仓库里的 `rsrc_windows_amd64.syso`(根目录一份给 `modavd.exe`,`cmd/modavd-gui/` 一份给 `ModAVD.exe`)。没签名、去了符号的 Go 程序最容易被杀毒软件的机器学习规则误报。改了 `internal/buildinfo` 的版本号、图标或清单,要跑 `go generate ./cmd/modavd-gui` 重新生成两份 syso 一起提交,没重新生成单测会失败。 - 只用标准库,没有第三方依赖,离线(`GOPROXY=off`)也能编。 - `.gitattributes` 让仓库里的文本文件一律 LF(图标等二进制文件除外):`go:embed` 嵌的是工作区里的字节,换成 CRLF 编出来的 exe 就不一样了。 diff --git a/build.ps1 b/build.ps1 index acbda50..50fc273 100644 --- a/build.ps1 +++ b/build.ps1 @@ -67,9 +67,12 @@ try { # The package layout: \tools\modavd.exe and \ModAVD.exe. Never side by side: Windows names are # case-insensitive, so modavd.exe and ModAVD.exe in one directory are the same file. New-Item -ItemType Directory -Force (Join-Path $Out 'tools') | Out-Null - & $Go build -trimpath -buildvcs=false '-ldflags=-s -w' -o (Join-Path $Out 'tools\modavd.exe') . + # No -s -w: the exes keep their symbol table and DWARF. Stripped, unsigned Go binaries are what the machine-learning + # detections of antivirus programs flag most (0.38.2's tools\modavd.exe was quarantined as Bearfoos.A!ml); the + # version information in the .syso files (cmd/modavd-gui/winres) is there for the same reason. + & $Go build -trimpath -buildvcs=false -o (Join-Path $Out 'tools\modavd.exe') . if ($LASTEXITCODE) { throw "go build modavd.exe failed ($LASTEXITCODE)" } - & $Go build -trimpath -buildvcs=false '-ldflags=-s -w -H=windowsgui' -o (Join-Path $Out 'ModAVD.exe') ./cmd/modavd-gui + & $Go build -trimpath -buildvcs=false '-ldflags=-H=windowsgui' -o (Join-Path $Out 'ModAVD.exe') ./cmd/modavd-gui if ($LASTEXITCODE) { throw "go build ModAVD.exe failed ($LASTEXITCODE)" } } finally { Pop-Location } } finally { diff --git a/cmd/modavd-gui/main.go b/cmd/modavd-gui/main.go index 4eaa9be..3565eb2 100644 --- a/cmd/modavd-gui/main.go +++ b/cmd/modavd-gui/main.go @@ -7,10 +7,11 @@ // // Build (GUI subsystem: no console window): // -// go build -trimpath -buildvcs=false -ldflags "-H=windowsgui -s -w" -o ModAVD.exe ./cmd/modavd-gui +// go build -trimpath -buildvcs=false -ldflags "-H=windowsgui" -o ModAVD.exe ./cmd/modavd-gui // -// rsrc_windows_amd64.syso next to this file carries the icon and the manifest; it is generated by ./winres (see -// there). The icon (modavd.ico) is not covered by the code licence. +// rsrc_windows_amd64.syso next to this file carries the icon, the manifest and the version information; it is +// generated by ./winres (see there), which writes tools\modavd.exe's next to the root main.go too. The icon +// (modavd.ico) is not covered by the code licence. package main //go:generate go run ./winres diff --git a/cmd/modavd-gui/rsrc_windows_amd64.syso b/cmd/modavd-gui/rsrc_windows_amd64.syso index 8dae776b051c846d60edf4a1849f4df66dc36026..ca588af1a6770d422570d8075b4dcd29388ca972 100644 GIT binary patch delta 1308 zcmZWpJ!n%=6#j1dYTFcTz?!szf@E}05(DIL2A9W%PAn~UOi?)&LWJ?;IzbM8C$-0z-y$(OG2dEba`zEKc+ zKhug{Tspp_aFfyGj5~XleoFt-3CzF{eG6!uBR9!0@+a~Xx!1}i(#H%U41SU&c~qfc zkWKP1`8xRwIYS;H7s;dK26>G9fgB}wT3-|DP@pgHyY(xfV(%WRgfcZ+8dDlG8rL=2 z8XFp$8uv7IH1-6YBMR(uWJI867DXjRsAolrcqM{8`#u3=MWAP?Y1SC`BcAUvP-c#A z%_Q(K?ngZLJ>c7{j_+!W*+7j+zU{VwKb-Sz_kzM(KOmcNg|>9ov%{&^2a)bUM6H~6 z+7T(VhDUfpTtb#!8mm}goF*>Q7uz>}`~?)`0>pg2?S?S;=ia|JK{B|fV!b-5D4~J^ ztCg^YJS$i549@`veXde`7)g#BnxD!u!5l_7zrdt2Y~;9LhjMa^@_L5{{IZEV6uqe9 zWlS*N-(ZnhHEigOZ3-wcyYk;U6HZx|&QV*Q$zoS|wv$3@dcGDaU{TsNjuVk`n!3)b zu-aBg=4p{xBv|`Ca|=3i!J#gjCzA#hP-GeCGY`(0nCEu$+}6YkX6|rQuuT-Zg>e>L z^=il$5#e`2BDZH@F>{o#&EZG^x78UIke0q=+v=e+0O5s_Z|M#V=AZ6UxJzr{UEMZ#Hpj8Ll;rnrGwCdARVn8bWo_^ z;NavE7s1idMd+woM#nCK?=HR5rH|x&@BecN`R^WIoTt!n56=aZZt^`h*N$=m8?1`? zxI4#O)fa=6gk&xOoiy1ceR4n&|Kvh_<(d5{@|{%gMWmxv33L*KPfn9-0)@^DL%>Fo z+$U3Hi*(70-j^pHl)d&Bgts+}|B+9O1XBERG@(D5&`o+>~q#sz_17$ag9+>2JV(j1$=J< zA6!GNYkxZinp|X5y$60yOvNM13S9n`7-rAXGE7Ucvlu$dVm{F}+b8XYNti8?NU9^F gBz&7nHdSm2Y^vE*x2a`Q*QV7*vvB}i-4;aV7Z>J3ssI20 diff --git a/cmd/modavd-gui/winres/main.go b/cmd/modavd-gui/winres/main.go index c0c0318..16d6ed0 100644 --- a/cmd/modavd-gui/winres/main.go +++ b/cmd/modavd-gui/winres/main.go @@ -1,11 +1,14 @@ -// Command winres writes rsrc_windows_amd64.syso for ModAVD.exe: the icon (RT_ICON images + one RT_GROUP_ICON) and -// the application manifest (RT_MANIFEST), as a COFF object with a single .rsrc section. The Go linker merges a -// package's .syso files into the executable, so the icon shows in Explorer and the taskbar with no extra tool. +// Command winres writes rsrc_windows_amd64.syso for both exes: cmd/modavd-gui (ModAVD.exe) and the module root +// (tools\modavd.exe). Each holds the icon (RT_ICON images + one RT_GROUP_ICON), the application manifest +// (RT_MANIFEST) and the version information (RT_VERSION: product, description, copyright and buildinfo.Version), as a +// COFF object with a single .rsrc section. The Go linker merges a package's .syso files into the executable, so the +// icon shows in Explorer and the taskbar and the file's Properties show the version, with no extra tool. // -// go run ./cmd/modavd-gui/winres +// go generate ./cmd/modavd-gui (or: go run ./cmd/modavd-gui/winres, from anywhere in the module) // -// The output is deterministic (no timestamps), so the same icon gives the same bytes and release builds stay -// reproducible. Run it again only when modavd.ico or the manifest changes, and commit the .syso. +// The output is deterministic (no timestamps), so the same inputs give the same bytes and release builds stay +// reproducible. Run it again when modavd.ico, the manifest or buildinfo.Version changes, and commit both .syso files; +// TestSysoUpToDate fails until then. // // modavd.ico is not covered by the code licence. package main @@ -19,13 +22,19 @@ import ( "os" "path/filepath" "slices" + "strconv" + "strings" + "unicode/utf16" + + "modavd/internal/buildinfo" ) // The manifest: common controls v6 (MessageBoxW gets the current look), per-monitor DPI awareness (sharp text on // scaled displays), asInvoker (no elevation prompt and no installer heuristics), Windows 10/11 as the supported OS. +// {{NAME}} is the target's assembly name. const manifest = ` - + ModAVD @@ -53,11 +62,29 @@ const manifest = ` ` +// target is one exe: the package folder (relative to the module root) its .syso goes into, and what its manifest and +// version information say. +type target struct { + dir, exe, assembly, description string +} + +var targets = []target{ + {dir: "cmd/modavd-gui", exe: "ModAVD.exe", assembly: "ModAVD.Manager", description: "ModAVD manager"}, + {dir: ".", exe: "modavd.exe", assembly: "ModAVD.CLI", description: "ModAVD command line and MCP server"}, +} + const ( + sysoName = "rsrc_windows_amd64.syso" + icoPath = "cmd/modavd-gui/modavd.ico" + product = "ModAVD" + copyright = "Copyright 2026 qiyinxi" + rtIcon = 3 + rtVersion = 16 rtGroupIcon = 14 rtManifest = 24 langEnUS = 0x0409 + cpUnicode = 1200 machineAMD64 = 0x8664 fileLineNumsGone = 0x0004 @@ -77,23 +104,26 @@ type resource struct { } func main() { - dir := flag.String("dir", ".", "folder with modavd.ico; the .syso is written there") + rootFlag := flag.String("root", "", "module root (default: the nearest folder with go.mod, from the current folder up)") flag.Parse() - ico, err := os.ReadFile(filepath.Join(*dir, "modavd.ico")) - if err != nil { - fail(err) + root := *rootFlag + if root == "" { + var err error + if root, err = moduleRoot(); err != nil { + fail(err) + } } - res, err := iconResources(ico) + files, err := build(root) if err != nil { fail(err) } - res = append(res, resource{typ: rtManifest, id: 1, data: []byte(manifest)}) - out := filepath.Join(*dir, "rsrc_windows_amd64.syso") - obj := coff(res) - if err := os.WriteFile(out, obj, 0o644); err != nil { - fail(err) + for _, t := range targets { + out := filepath.Join(root, t.dir, sysoName) + if err := os.WriteFile(out, files[t.dir], 0o644); err != nil { + fail(err) + } + fmt.Printf("%s: %d bytes (%s, version %s)\n", out, len(files[t.dir]), t.exe, buildinfo.Version) } - fmt.Printf("%s: %d bytes, %d icon images, manifest %d bytes\n", out, len(obj), len(res)-2, len(manifest)) } func fail(err error) { @@ -101,6 +131,47 @@ func fail(err error) { os.Exit(1) } +func moduleRoot() (string, error) { + dir, err := os.Getwd() + if err != nil { + return "", err + } + for { + if _, err := os.Stat(filepath.Join(dir, "go.mod")); err == nil { + return dir, nil + } + up := filepath.Dir(dir) + if up == dir { + return "", errors.New("no go.mod in the current folder or above; pass -root") + } + dir = up + } +} + +// build returns each target's .syso, keyed by the target's dir. +func build(root string) (map[string][]byte, error) { + ico, err := os.ReadFile(filepath.Join(root, filepath.FromSlash(icoPath))) + if err != nil { + return nil, err + } + icons, err := iconResources(ico) + if err != nil { + return nil, err + } + version, err := versionParts(buildinfo.Version) + if err != nil { + return nil, err + } + files := map[string][]byte{} + for _, t := range targets { + res := append(slices.Clone(icons), + resource{typ: rtManifest, id: 1, data: []byte(strings.Replace(manifest, "{{NAME}}", t.assembly, 1))}, + resource{typ: rtVersion, id: 1, data: versionInfo(version, buildinfo.Version, t)}) + files[t.dir] = coff(res) + } + return files, nil +} + // iconResources splits an .ico into RT_ICON resources 1..n and the RT_GROUP_ICON 1 that lists them: each group // entry is the file's directory entry with the 4-byte image offset replaced by the 2-byte resource id. func iconResources(ico []byte) ([]resource, error) { @@ -127,6 +198,89 @@ func iconResources(ico []byte) ([]resource, error) { return append(res, resource{typ: rtGroupIcon, id: 1, data: group}), nil } +// versionParts reads buildinfo.Version as the four 16-bit numbers of a Windows file version (missing ones are 0). +func versionParts(v string) ([4]uint16, error) { + var p [4]uint16 + fields := strings.Split(v, ".") + if len(fields) > 4 { + return p, fmt.Errorf("buildinfo.Version %q is not up to four dot-separated numbers", v) + } + for k, f := range fields { + n, err := strconv.ParseUint(f, 10, 16) + if err != nil { + return p, fmt.Errorf("buildinfo.Version %q is not up to four dot-separated numbers", v) + } + p[k] = uint16(n) + } + return p, nil +} + +// versionInfo is the VS_VERSIONINFO block: VS_FIXEDFILEINFO with the version numbers, a StringFileInfo with one +// en-US / Unicode string table, and a VarFileInfo whose Translation names that table. +func versionInfo(p [4]uint16, version string, t target) []byte { + le := binary.LittleEndian + ms, ls := uint32(p[0])<<16|uint32(p[1]), uint32(p[2])<<16|uint32(p[3]) + var fixed []byte + for _, v := range []uint32{ + 0xFEEF04BD, 0x00010000, // signature, structure version + ms, ls, ms, ls, // file version, product version + 0x3F, 0, // flags mask; flags: none (not debug, pre-release, patched or private) + 0x00040004, 1, 0, // VOS_NT_WINDOWS32, VFT_APP, no subtype + 0, 0, // file date: none, for reproducible builds + } { + fixed = le.AppendUint32(fixed, v) + } + var table [][]byte + for _, s := range [][2]string{ + {"CompanyName", product}, + {"FileDescription", t.description}, + {"FileVersion", version}, + {"InternalName", strings.TrimSuffix(t.exe, ".exe")}, + {"LegalCopyright", copyright}, + {"OriginalFilename", t.exe}, + {"ProductName", product}, + {"ProductVersion", version}, + } { + v := utf16z(s[1]) + table = append(table, verNode(s[0], 1, len(v)/2, v, nil)) + } + strs := verNode("StringFileInfo", 1, 0, nil, [][]byte{verNode("040904b0", 1, 0, nil, table)}) + trans := le.AppendUint16(le.AppendUint16(nil, langEnUS), cpUnicode) + vars := verNode("VarFileInfo", 1, 0, nil, [][]byte{verNode("Translation", 0, len(trans), trans, nil)}) + return verNode("VS_VERSION_INFO", 0, len(fixed), fixed, [][]byte{strs, vars}) +} + +// verNode lays out one version-information structure: wLength, wValueLength (in words for text, type 1; in bytes +// for binary, type 0), wType, the NUL-terminated UTF-16 key, padding to 4 bytes, the value, then each child, each +// starting on a 4-byte boundary. wLength counts no padding after the last child. +func verNode(key string, typ uint16, valueLen int, value []byte, children [][]byte) []byte { + b := append(make([]byte, 6), utf16z(key)...) + b = append(pad4(b), value...) + for _, c := range children { + b = append(pad4(b), c...) + } + le := binary.LittleEndian + le.PutUint16(b[0:], uint16(len(b))) + le.PutUint16(b[2:], uint16(valueLen)) + le.PutUint16(b[4:], typ) + return b +} + +func utf16z(s string) []byte { + var b []byte + for _, c := range utf16.Encode([]rune(s)) { + b = binary.LittleEndian.AppendUint16(b, c) + } + return append(b, 0, 0) +} + +func pad4(b []byte) []byte { + for len(b)%4 != 0 { + b = append(b, 0) + } + return b +} + // coff lays out the resource tree (type -> id -> language -> data entry), then the data, in one .rsrc section and // wraps it in an AMD64 COFF object. Each data entry's OffsetToData holds the data's offset in the section plus an // ADDR32NB relocation against the section symbol; the linker turns that into the RVA Windows expects. diff --git a/cmd/modavd-gui/winres/main_test.go b/cmd/modavd-gui/winres/main_test.go new file mode 100644 index 0000000..1d76873 --- /dev/null +++ b/cmd/modavd-gui/winres/main_test.go @@ -0,0 +1,156 @@ +package main + +import ( + "bytes" + "encoding/binary" + "os" + "path/filepath" + "testing" + "unicode/utf16" + + "modavd/internal/buildinfo" +) + +// The committed .syso files are what winres writes now: a buildinfo.Version bump (or a new icon or manifest) without +// running it again would ship exes whose Properties show the old version. +func TestSysoUpToDate(t *testing.T) { + root := filepath.Join("..", "..", "..") + files, err := build(root) + if err != nil { + t.Fatal(err) + } + if len(files) != 2 { + t.Fatalf("build wrote %d files, want 2", len(files)) + } + for dir, want := range files { + got, err := os.ReadFile(filepath.Join(root, dir, sysoName)) + if err != nil { + t.Fatal(err) + } + if !bytes.Equal(got, want) { + t.Errorf("%s/%s is out of date (buildinfo.Version %s): run go generate ./cmd/modavd-gui and commit it", + dir, sysoName, buildinfo.Version) + } + } +} + +func TestVersionParts(t *testing.T) { + for v, want := range map[string][4]uint16{"0.6.0": {0, 6, 0, 0}, "1.2.3.4": {1, 2, 3, 4}, "7": {7}, "65535.0": {65535}} { + got, err := versionParts(v) + if err != nil || got != want { + t.Errorf("versionParts(%q) = %v, %v; want %v", v, got, err, want) + } + } + for _, v := range []string{"", "1.2.3.4.5", "0.6.0-rc1", "65536.0", "1..2", "v1.2", "-1.0"} { + if _, err := versionParts(v); err == nil { + t.Errorf("versionParts(%q): no error", v) + } + } +} + +type verBlock struct { + key string + typ uint16 + value []byte + children []verBlock +} + +// parseVer reads one structure the way Windows' VerQueryValue walks it, checking every length on the way. +func parseVer(t *testing.T, b []byte) (verBlock, int) { + t.Helper() + le := binary.LittleEndian + if len(b) < 6 { + t.Fatalf("block of %d bytes", len(b)) + } + n, valueLen, typ := int(le.Uint16(b)), int(le.Uint16(b[2:])), le.Uint16(b[4:]) + if n > len(b) || n < 6 { + t.Fatalf("wLength %d with %d bytes left", n, len(b)) + } + b = b[:n] + var key []uint16 + at := 6 + for ; ; at += 2 { + if at+2 > n { + t.Fatal("key without NUL") + } + c := le.Uint16(b[at:]) + if c == 0 { + at += 2 + break + } + key = append(key, c) + } + at = (at + 3) &^ 3 + size := valueLen + if typ == 1 { + size *= 2 + } + if at+size > n { + t.Fatalf("%q: value of %d bytes past wLength %d", string(utf16.Decode(key)), size, n) + } + blk := verBlock{key: string(utf16.Decode(key)), typ: typ, value: b[at : at+size]} + at += size + for { + at = (at + 3) &^ 3 + if at >= n { + break + } + c, used := parseVer(t, b[at:]) + blk.children = append(blk.children, c) + at += used + } + return blk, n +} + +func TestVersionInfo(t *testing.T) { + tg := targets[1] + b := versionInfo([4]uint16{1, 2, 3, 4}, "1.2.3.4", tg) + root, n := parseVer(t, b) + if n != len(b) || root.key != "VS_VERSION_INFO" || root.typ != 0 || len(root.value) != 52 { + t.Fatalf("root: %q type %d, %d of %d bytes, value %d bytes", root.key, root.typ, n, len(b), len(root.value)) + } + le := binary.LittleEndian + fixed := root.value + if le.Uint32(fixed) != 0xFEEF04BD { + t.Fatalf("signature %#x", le.Uint32(fixed)) + } + for k, want := range []uint32{0x00010002, 0x00030004, 0x00010002, 0x00030004} { + if got := le.Uint32(fixed[8+4*k:]); got != want { + t.Errorf("version word %d = %#x, want %#x", k, got, want) + } + } + if len(root.children) != 2 || root.children[0].key != "StringFileInfo" || root.children[1].key != "VarFileInfo" { + t.Fatalf("children %+v", root.children) + } + tables := root.children[0].children + if len(tables) != 1 || tables[0].key != "040904b0" { + t.Fatalf("string tables %+v", tables) + } + got := map[string]string{} + for _, s := range tables[0].children { + if s.typ != 1 || len(s.value) < 2 || le.Uint16(s.value[len(s.value)-2:]) != 0 { + t.Fatalf("string %q: type %d, value not NUL-terminated", s.key, s.typ) + } + u := make([]uint16, len(s.value)/2-1) + for k := range u { + u[k] = le.Uint16(s.value[2*k:]) + } + got[s.key] = string(utf16.Decode(u)) + } + want := map[string]string{ + "CompanyName": "ModAVD", "FileDescription": tg.description, "FileVersion": "1.2.3.4", "InternalName": "modavd", + "LegalCopyright": copyright, "OriginalFilename": "modavd.exe", "ProductName": "ModAVD", "ProductVersion": "1.2.3.4", + } + if len(got) != len(want) { + t.Errorf("strings %v, want %v", got, want) + } + for k, v := range want { + if got[k] != v { + t.Errorf("%s = %q, want %q", k, got[k], v) + } + } + vars := root.children[1].children + if len(vars) != 1 || vars[0].key != "Translation" || !bytes.Equal(vars[0].value, []byte{0x09, 0x04, 0xb0, 0x04}) { + t.Fatalf("VarFileInfo %+v", vars) + } +} diff --git a/main.go b/main.go index 6fcd489..b99360f 100644 --- a/main.go +++ b/main.go @@ -1,5 +1,8 @@ // modavd: command-line manager for ModAVD instances (create, delete, modify, list, start, stop) and an MCP server // over stdio (`modavd mcp`). It works on a ModAVD root directory: \sdk, \avd, \mas-avd.json. +// +// rsrc_windows_amd64.syso next to this file carries the icon, the manifest and the version information; it is +// generated by cmd/modavd-gui/winres (go generate ./cmd/modavd-gui) together with ModAVD.exe's. package main import ( diff --git a/rsrc_windows_amd64.syso b/rsrc_windows_amd64.syso new file mode 100644 index 0000000000000000000000000000000000000000..057ea4f499137432af7596835bc6c6641cc23160 GIT binary patch literal 73420 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

k&DE)X=Yz2?s#3z8Y=bjIy?o6qTi{CoZ% zbe}UG25;lV3^6<(Vo18y1D`XReCRj67{;M9Hr>2rt40LJ@e{nk`K5z@w&8A$g_D>6 zCbwnt^=?J)Hou5!wSuCcLFeg_IJIzbnEMtKDsm8OSGBU-+W~o`<)-utQqH*q#R@$t zprHWrmf{X?J!rSHBQkzlw&&NbNOg%TYeK=AZ+4 zQ0A_H8%`{b96JFINcalTtG(Sz&ErA=7ZLM&A@Pr^L!$cgx~X$pp4si5k5@D|@P4VF z4K%u2N_7)Y@9+TQbAxL`xwX{}AK&VD%Gv|`p*d7^uHUiV?w00PEo*ivq0;lttHaWH zl8jx+>c*#lW9-O!2L99KI%4;w2%zUU)<5G03_+-qZV}#<&AEqFPwz-oE&sWmU+|Pp z+j(XKI0#y!#37z013zpxYXqM;=~q9KzqLPc_o5uLg&OIZLh`owXXbkMrpw@u;y!a9 z^ABo9YXDO*zBN~ljfc;sEfw?nID;U8AP-wM`!Rz-T#h?*=*lJEH=dwMCbWh+(f4h= z_rN#~@9Uj3LiDGVo2u;Nsd5oFncw=0&rX|xc**qfD&cf&@J}h3Dy@O-*GK%9bFg&8 zOh3A&dU&X9<0f8|RC=2aJ?`_`TKvYDw04MDhbv0I^;ru2$c?5&QR z78{aq0)0eH4Ge@B7uS^f0cb#w?^>3M01gnnSLZ{op?{|K1FG{y&sR?e0-@bl;N8$n z4yW|a>`mMrG;}CKomkQt{IVVIV~s@l2Iu^uN4eUrM=HqAe?Y{$;;R^5W!2`(>+M0SWS{m%alGAl_iS)hR8ENIreJI0gJ7}A|1p7aQi|D#@e;{zt3M`?Rr?!Rc5rBX=stM1Yyz@7~>fbGhmvf%op6B%Mk@}aw z>1M8B71M>*^{~w%lCNdIjM_D9I=oGKR0vW}j!9NML90*Z-ySSbVNL)M{7-xh<%4Oh zX{01Z(OV@goQ`f+6*+46R0R`VD>tqb28bv3U3sGqj5xTS)hU9`n$M>9^wQM}x?E#> z&^CWr1w3@p_8s`|qVi+x);f^;Xg2h*ea_2vjff(@Ye8%NC;&AE=JQYvU&8OC(oGCY zDQou8q9{+x+}GNxIoxp%53NdV_abC~^>4BI*E#L1BQ;X89IH+sLR_#TEU-;AOd0&$7R*i`&Q^ykY&JvW0w@6m8$htJSpiP_7eQ|$w z&zhWw76L1NOb0{Zgy}8EOf_4ruw5VH9JimAFmf&^CuxYx6@Y3|=;Wyfzf*FLa97btakjiW{HdMUMpo&x_$lLaslW#S=J zkON_sMaJm#$Tbcjs~seJB6%FoD5nE|!%k+dPNml}nQFcHy8S4pmQ?@wjC4m~FOn^} z4O+$6S^coJ4(je#WHo3AGm}sIkE+0HZ^w|Lut6LQrKDQF{grHG4e?#TBu2D{Jbez& zc6&={S*YIQgkw@IMs4>zX5ZpC%GBNAWf*zPpRjN76Y1`%#r*uHNaOnoj%``yAOG%} zd*DdRgKxx^v@C5~*CA0C)qYA@%VVrJnr#K@+ED+g#h9P3R~KOupi}zR9yVY6n$-^Qr{|GD9Iw-~Q35^4MCK-e0^M1q-Exo^}ole>{{aRMqqo=`x%k z&tTKIY~VtoHCpvJW)p@OzuV~S;Jgny^Z~3U((XYuOr@#n)#dCF2=!b@Pr`G24V=%h zA{QbW29fLpurc6Cp2*-aVNl%q`#f+l*N!X^)b)qjUF*B+O^ z^hd8(Pb&wRMt&SoKbsq|KkF~EuXY*wkk}&lq7wgw3a)>>i6Ew;LIJW{^#rX4Z*E;M zQBO3ASM!dqzdUQUIpV{EaZ942yB*2$KYpd~zCmW_IOh$<6`nA|Y*ag3H0#NlxK^1j_$d!~W3^gmf>K z(DnSt^>P->wMf?QsItLHfU)d)9b;o7tD=ElUq}h1H?6*%n+&(`s%yGLO-csv|R3Oq1^$5xcdD2qn(CQyihOTeF z=hkZZLEc@979KP+)9<)$+4MhmQET&;VmwpwF@x6+ zIU_iq^Hx0B7;-k^P2zqG`o5Zu6_4qu-j&OtQibHHuufHJAfl4{(wV|E2uG4JmExWr z-_+7)d1$V?nC*a&hvtyX{Wj$_S6Vj;)ikeNxA<&#PDYrT1K6n>$bEG(Q-*HT8-Rgi zHknVJ=AoZVsC#GkT_EqCF8-yKChMMpyp~y|_Gr#dJdEsKkhzUAqTQTCBw2~ffw@rL zVI=}mpm_s-*x0kXaeL#%1*}Y;DufC=c9~KK-AccNAjQT=a6ZP#I-+Xh2 z;h%s<&o?ZQq#>F@sw*y=jvNkt%kD0?&Ij!m&v`J&c4_pfY0d1U_MK@Y@_`t2tiV3M z(*4uo)q7qf8`PX3m%GI18yA%PZ05ZSim-Fw0^arD7~dS)U#@wdn9RZI?r*1|m&1ql zT*iBbVbR2Lc?KdV*n0yHuB6pI>W_F%(bOq2|1R&*!h!_q;WbIcsR;g6XgLp7!oD=? zkQe8m)E45U`{X|N#~4op_?2t6vUe=cJy3^0!1 zGw|#w@;Uk212~L_esIO^4EEr3pI)B-E3?O2kdwFDEqg_P5x-pRLV`C9?|u3EbF4+~ z(+fTwUYfV@`Sk_3ndxbLl(j+xKvHm&P-X0+ez2(act@K}hKPY4-Iu>2sBCYwJ}Ap&V!C1i0R zI#_rV4N|MA$?WV0zfmUOAIdV}?bUXhf9He`#UsF!48vZGQ;9p-b0hQr*iYr_cR@<3 z)oJ?v`LS{TSS%0;;LE_@xlNSyZljErYi z#c$fHf_BH%qWgIL5+i!&TMmqr{i*6cza|DEoz)4|3DiKH9^)nayFvB=YjKW|666}I zWgSc`a-a`D4Q^m#SvjY_r1RXYTZnX-l=5b&11=@S=5s>qkhJ5iB4o3H zZgXVp{srMa|26&9ap^P#V)^G<90 zezDKuuTsey6tA0uMRqBzMYLoYI^yNJKoz!+!~zlNPbOe zhOXA9!Fm&`5WRfw(_ELTiXv0@j`gS`ZQg9^gWJi83B>x~yyp}hzM?5uc{6j7482;m z*8zIA!(>wpK6=Pp<(*8aOw~qkX@sOBS;vS-PGYSOZG+Q6DWlV@9v`>Olti|~TNBuK zNZ)T-DZ4Z<1k-mZwjB@$oeWa-P@s+rA?+0%k8s-p7YuHU$&&%mw;J{riLj^ z-xuUd+N#FnJ6fbd5j0%HoxVe;an+EcivN}2%e~1*o~!-u?;@3JS#Sg0$bdP3EB4AS z(N$qjcZg=ag_4BSulF>23ASt zELtWck^B2TpGP7QTH=Vj5vQ--n}m5eQ}aX!C8a6PIJtknyRY_w2FL-KrGxpcyAgcJ z8w5)%F#iryd~HP;9UCTN4)upT%C)DHd4~(nyYv+#RXL}7LAIe}f!{OZn}c_3C^P+& z+V1xjU())sW9MeVdNemUUGVtUlI398g)BRl3K&k)uUOP|Y2wMa(WfsV_~`51 zb{z{mNStAPg`HcpO+VH z?5zC!DgO@mFlznSF{{;b`87xcdHPh@arpx!=6&e&RO_Yl^&=W{*)-s$bp$_RLE0}F za56blCFEK9R7(|;);GnhM`~q?Rj-cJ2b%nysHH%?bJ~&G;!J~<;7=xHK0fft(ZA+u z_lPiBL87SHBgUTULB5TcR3QQmQymmE|A(Wq42!C3qcGj2bazREG}1_SBOQWtHw+RY z-5?E8(%oHyfPi!}bi)u5Lw@J|e#}3v>m1;m*?X^Nt$V#u;au#It7|B`xp8zgdx(rx z!;qpiGas17NB`&82P0YUk8T(*T zn%OKRMM}O4+xSW}*Aw3|R|&jKTQY5@=_h`-)UR8Gz|pLva={W7gcK@O?CD|yZ|B59 zq`cdR4o;xzN6vWtvGR;!K9gB}3ynxkyINCdxWi+iB#B*2jFgAUVWvv<=YbHAfB2qz|6 z_5L%A7vJ+W^}R>W3-(7D&!}a{9`CIFM2mJGgmtF|$-cv9P~U9z+&?u@U5-#76S2Sr^z%KVHue{x-&;#L*Ni zpau>R-w*Y0kFc1sS2;b@9m1lKNY`2gU8XYczT%l-NR=B{-fv3X@9+y{I(EL((r19A zm(A>r%bX6r31O_qR}_50MV6qW?C!*RpThOm7FhjpsD=V!(%<5AeDX%BIs6=FGu@aI z6GchruTt_xYsTdt+QXSd`XF1{Zo}cXNn)BL_b9H7YKU{!*Jv^0ULN`*!QiTsx;QtP zf6^8QZ3N(uQ@jH&Z4i?P9bI)Q% zSMeshk8q5urM5vFs1$xIyO?J#zogsLD&4dVGu){2kR_E)9dSf6pElFiZ(|V}gyY3` ztRDbRa^byHIkWcXxHEU$PpmpH`n0v%$pGB55lR*|s?I6n^S~9B@Xn^FC&Q3iM}}@FGOtGiop9}nUrOUodbFy z9xa8KVH~9-FIXmd?OCQ=Iyyi?7aZ-^cH@u8!b%8^9Mh*Cv3KWcb0S~bRKcBwcW=`p zauw=iN~)epYf z!51f7oxM`JasqF<(SbCFiwxbkS(q5l`1ZgT3C6W<9IG^#zB9kYMz9j{qLm722X0cM<0Z*6IV%yZ|jJW;r3LX zjz;n)oVrg2wrUxo=VHqLr$OAs>IMRLIeF`Xq6 zb@+v-){SCUn}ar?Z#KL)Ic7te0ujoD!8Zj@JjQ zvf+RCfiCIT5YLD(mA?qP$29p3K??ZPEq zVZmgO?1Wg^iestFv41}^ICW|-Kk4c6h^YE;*;vBfop;~8a6*(!=5hKqwZgR9DM0Oe zcW79pymZFMTw3?f=L;sa<_5VFK_zwBS#S27z$QV?u{?Gqcr6o7`Y*}gbfn<%ijKLK z3h)9&b(CC@*xkdbnE&JYuPm}0&f6a=Zg^YVu+q<_e%qvWk=RmHBHt`B9G$n)M)E!m zIjqNtn%v~YN+G^`yMJ!B4t8+qmSHD5x@t7O!6|5{{Gf-wgM0UqYy0}br4vLM@8qNT zvQJ~BsiivcbbRGN()CIr%l+2^p_FQAkI+>lqbT^vfQ(%55<>1GGY@tPKMeFP;}Hsp zmh(H_7rmeArDD<}uZ?D;2?$60B{pRKet<)8?N1}_6Zw2KdCQLH%7jCcw@vxUj-zo~ zcz)iU7g&Wv9*TZ`%(;agq*IbtFljA(rkuaC%nSsg%NKu2OUcrNSc&EmaoDqJ*0TWZ zdZ@kK2jV|3$zrv;iN94XB&xv`YJC4x(-~!Z{w%831$HX)tYe;Ui9@^BS%vVmB z1W>A**?2Y0J=_4`OpgWZTJJhAHn%>VoKRvq4 z8rHX?mk~`!kIl@|dS%G4EXo0E& zuwy{2A`f1bwqWfk{F-VD*x0<->(Z>FQCDh~>-X~@f7)&SnztoI)A8P1;bXAn?dz`| z^nk-g_9K0&k&)lyGBIr3OYj;RNrl>*@7f13oDX(lWpt{x{bSO235!-e*L?#=eT)+> zBh|zs_Ohnj_5PY42*z_;N!G8IRH!hO4m{_k*>+z_A50a*k}4q8PjcU@d? zz%GAZ3CW&X1wFm=H~;9>?R$d*p-XPtVEZQp}^!> zQ#w(ljC8s3Yre4;Ivqu*agTE4%SWZ~v%g)R8E?WKT3_GJduw`CNHfzgie&Fqxq#9P zpu4W&KJRje0)aqkEUkk(#J^hXGdWYU zUGDtjL|j&*1H)AY-RU|^F%lGXM&zi~cRvzA3Epr}c|;p|yqKR~Rilv9#UJU^KYTzO zZ}^Ui_}gw55l6C&kKqd0aTTl(H3bDahBdVF#0ew?GK!eU_D}^?=vNxy0TJlS22=>A zqKEvo<95+HZTniH2d}KX-Cr*jU2}O#*DEOs4?){qBMFcA>B*AwWfHf(*%==mJ5m}C zN4v?1h}~!)rycWt3Pg=q^4);w%{T%U=_;+&>iLE=?FF#^e+u6AYCd#7ZkLx=4!FXF z+Qm(i<=ec8k&9XYqstChhtp)LB&jg0tMkfzL_(jam2_l?V-79f6j|%yY%4GVZRsCI6828a z9_cb=kDudYYSvlL3hI zI_DfZ8r^cV8fp4+E-=lsHWNW?CO(Tf%O^E^l#x7v&5(uEgUJLEkxpzY~P1TB4;gnZ>KlAxX%>lv2>&yx; zJv8s%o;a8CBn?3CiaNjJbaR+IYcLF0;YtAh@gfq?)#ahASBp{!-eKU^YtVgfl|fhR zU3x7I8Aecn`C<#_q%F@`h}%D$$iFLf-(FIxtT6)!ktIYHvCRc&! zbeT$gUGhH8Z8s<=3FHwq2s?}Maj}aRyO5WDHkTfmD&qsZ6M?qexOdS=#h#t`y}dVT zSJ?tG%)i^uaFi1j!ZA6Y;hTdc7)M?tbr>UPTtsu0$^^UV-^>iZMV8lw-g#I;#Em`v z`u6Zxk_5Ak3gg&w9f40ha3oV#WveGRVyOkQ#-VLVd4t~yQdq6^Ax}p1^lt371go&_wYNDLYbJ8uXHfkx5bheQqyiEByoQQDN1*RoW9W(O#J05 zc^fo9%SkDbo^-inx`lL0idvBRQ-j^|;M&-AOArQb%BN$;Oc~dg+c>sEC5^e9dB(ju zCWivUQDI}RWC1w?Yc@)CEwD=w0jdaIn_0nIrQgIqe zo7nyaf+Npws^nya7(_}Kv;_v16El0~!JWMMfGOjfZ9XW9^zLPyaQ9cs%ebxa$c&i|&?$vD@$V9}z}K+^ef|KJ29!`;U9c zl6Q1|2v*ijv#+X%yFTuv-pf2NEiN^_e{>~h(`T=DhmF-htR1liv<^M9;!Xr;T9*#& zC?d_-$Dkk(Zl!4uzAk>{q<;t=XHcs#qH7cF{`E8;N#90)AsZvovR0J(KYMfcT9lcR z87f2E#DJ5RR?E?kgfW3oX5z~|WlnEo+N+2P-WP%SB{}7`6CV%*2|9?zhX?@Ar+qCT zjLGm4K3gzxJ1g>f{@n~fvNQ5XDt21b0Sml&VuZtj z`(0YEtU^TkydvS}m}~Q~M^^82a~)R-6fj+EZ7qE(DiPA2sqIrcMUcHirvJ`7R&F3* zFpTMZ(=uinYqbh|%`?9~;N}J2Ot>G`uG0Mo>`_=d*!cuVVs9^C&+KO1@z~1xG#wh5 zZCACE0XvjU@R~0Y{twSf!*8{e99Lo0r6LYx6~x3nH^udR zBS}ow%K*T?f$zDR-ZTG<<;As`y+1t(l>egSmW2XvKs^U8L-rdGf)kN?v1z;Td{YoI zGw9C2v$k^BPKGJNYU}i_?*K~nu7XEle4vTRpvjyEsF4XT_%VLH4h@b&M^!K2Pa0|< zh~Lp5Pw+VCzPo{iPa^GKn=(JiV@?*|HGa5sNCa9W-IeFhpLoP8u6 zo|4d7O?>#2^Yf!BDy#D{Q4l{2&{{7WW4Co8d4DyucTl~P40+k&mK#|v5 zX0)tlAvOUaC(%CYB3Ju-3c%A98ZrZ2fBMW}pu#`__NHLh%~L&m2}ZJNZK2~)5jnS$ z4yJyQ4Do|bl-Vp}SaUBO4fC7y2txvQC}$$*#7kI+V*Zi;O_1zLcjf+VvuHZ`%k+by zO`}4|1-jHnjGFFaeFkFA^62h_pH)w@wvrO;%Cui)>wk9`Q<*K3LUlxJv9y$=(^qzq z;o8ftADpT$zf8=HgJfTyM|936dTqv`5s%cn{gG76rbG$tiYTbF}JZJ$Q%z*nXBQxSoY8WU%)56MV*zI)#ejIr@3&x5aM*0?{-k z5nsHF*M0ks0{>_--F#TWpMtYeSZiSYCDsDY(jNy*j*;FCN(G_ZmI)BaIK)+BSI&^K z`0#nZe_aIQwXhd!E$vDFS{swsDRZ5nI)_W8%U8ONb9u&T&|C>fAyow)s?mv5%Ea0KJE-dE{rA8x3(|!h8f7BcX zo@-WJ5x`AmhGTYdSV&(C8)8e8Gw{(+Tw|rs`{D7yX(xynxhii+#lDZbbY)Ek`KPFq zy#cmz5kFdk>GhwVlz2zq^OBtMGSh@h5=RfA{Ik0My+v^4SDgCCK^0CkeURKLQF7^E zXMI7>+0TVaS?dcyB4^s~B>~b^rcW=;1^jC5;ss-BfQh=(@KT*Ag(BdOrpn89JK*Bd zHN2=Kc(!IxaqoXy)BQviEp47=7+o$KI*3a#RU&A5RueyIEy10wk!eXT{DrPaK2DN+ zqCvOP@Z##^`E+F$6x z9z2$*oh|?T&}?dAl0@6CXYqh!kLVJ==BO~OmZd>7w{+M4ItML35 zqO}@Z)5LS1T5OHw!(}|sBUTe*U!eQZ@ehxs`I3#(P))5 z|7OY7%hniUYD#;42^(7hhGoNAQKkS3C=D7ko?BQuldlWduL$U7SH}1yx1o&^9r;vtdj2OlS+xFTk9ki$#wqJLYpRS>mj?%uhM-) zcHXo5jw%~QcG+RHeJSJt@yhK3{>Cy4WNv90qJCg0#i&th;nVO@tmnsGgU0qKx=;{6 z0d_JpbhqJds+AEnx2ydz6Kf}Zx0Uhu>U25N5KMrv`9GNwasmLmJek) z#>+)9K%1Eil2wve(k_%0C0X@N>r-Y$+RKPu+{@pa2|*pVWl$^{+AG!;%K$wJD_POD z?O0wrv-LCOmMckkK}mZW9}^Y0wWgE8iB+ZNa4a2^b6GMIE546U5%||PcHvK6XNVtH zSL_&k1ol7%~R zXg?g}d7kTj*LIR-el7G2Fage|=k_sLzeTrh!?Z_`E>LC+#QtzUw`>dC)i3l1KQ}A- zglZ#YhD~|&47HxUvIf|lzQ_JGa1booapNSHNOy@NoBXvx_N0~E>~z&4)AQu8(DFvI z8ZrfcD138&<-=*Yg%(q!cm9t(5L9Z13sBQ0vZm95^#Sq@mBhg@2HYV<3?SI` z^HLOpqoM`J-SJuJ=Y397@Hn4Y${8tEt~rZ-O@O`B~=p9w|>CnhXv_0$`r) zuvcb@Vom?Ma&e;^-1i#%Sh>_L)*hJm@F223nLCwc*86?IhAq*ATda62{^l2J{_Z{C zP$@5uFyQVpiOFzZe3C16%KkppIy^#0fN=!@biu~*C}3rfpc2fQ_G&JUVRUaH=l^}h z`E{%;8M+E?&Ny;Q7w+a+dJeUb1lL`3=9TD|!jTz0e3Ai$N>ccuH} zJQ+x3)J>G18t8mM^YC%7I7Y6DlI1k2!9w2|_H)5ni4n_HGKg{(XDQzWD6U{cl9Ts| z#!n0|I?v}KAORfh@)UyTDQcbX%_?lG+X21xL8y9M&vkE+%kq2;Hn*^_X{TCIlGZr+ zA;#tD^zqP<$O5_+7^;K8oVhzRl|QjNh}%zde;`3+Ir?YOc&FZJ(KmH?8-_Vbi~;Q2 z5>#GscdtHG6Q9~$Ld!uPq#Z=UAP4jrQ+#b8>Ufc71{J2xXCDnJ`x%bvSfMQv=lf?> z3SQ^;s&U!q@&gQfhMb*;wqiaI2~B>Ua2qcpB@I%i_#ryuhZ8p8m$o9s<|fN!0maq* z%NugoYP9ZC(4PHEha;nUm5Ka9%MmrYhr*pd24g_R)MmQ9jNvMn=i4mGznz9ltEhW+ zpPm5^IO;#o*X?4F6mBd%dDw?q<@U~?Ga(XI&6^wcz+1*(&wh1-wqV3dgV^LEpbh*9 z`Wl#53q*oRhBzI`(pLx@@4-_&Q+;_K6o_Kh+;3_Xxs0Nt(@x;y2cvD+c=m2rKY8r) z9<&p;8gVVXDNLSA-V?jMpG6w9h~-&=iRC}f9Mp9zT6u3%>a^S~V4seZv~Kie^tw|G zs}NOVBZaN`4|1#p!J2nxzgTyH(~cKPwSOw5aN(gx!d|dv@3#mgY?dwx4dTQ8>~kMs z74sRCyshV5Z}s6;m^<*GukluLLQZ@~K%%KXj$HJulRpwi91^f#&uxWfL=;Ko#x3MM zufZ9&P~%p@tMYo|^mP4#>XynthHkYg(C+ySI7=do1l^rDH+S)-^pLN*&}cw6rB1 zByoj=38;D*ocAa@@gK;d<#OEfd*~spi8HFqPT57`ei-tACddyk!aw(0>Nz>n;bCZH zb6t$|J`bvX6&a%`VK95g^UhQzU*r1?;2~iZjkRF8Yg#aap5I`Rh_sF0Uwm?EM@Hxp z+_B+=fg{!)4;~Zy;rb;*EJvBLCoa45gYtKPYpcC${seyAs_ENA1iKxTNEAdurcS-c z+qSor4PYB$2*EL`)zt<{KbvU@(CR$r$*4N6)kUk;KD9s30x#*(jyitS$2!W$g5*Hh zr`NFhIZk52h*UHyS0f|R+bH_BV_d<@az6E8H30l1UA4CMhftzDR6?yYZ>R(CWn$B9 za&dvCDJy9hkwlUP>{NTF>4lzh8ifu-53WaRgVNLkuXGTC^&tgCS00*7q{tjG=c2S4 z4eCO0od!QG%s~hrI*OD{sNqSh01EL0P)RYtsLu;p#@KE?Po9=84}X{5cAp$0eA}4s zO&s5}W8f~g<^6kf#O-K~dV2GY&*vGXrtALgi|>4`o6_F4rCbf0>0sDvP%PtAPo0dr zNzFwhV2uVQF`rVxL*bJrs&hQf%Z@xYUw(Lgu1tH){W4h2+e$+c=l(({u~k7{%2Qm3 z8sSL9_IAHeK5uvX`ZWX9xh<_UtukqgyMbwim2DWwyg}HL?(2G1-xnt)dPXJ^N%%OJ zSY`u8;+F$A2W2HAOk_RVhVwJXS2@jg=F6An1+4FjAte=-@DbBw2*G-jpA>2|Xo$R4 z17Vg)+!rxypvmH?oMj8l4{2J!#t=(*i-fcL^4)_MbP`{c$=NWYNXbaSi ze{jTP5h19^>*>YY6sj`pCK_+}z3+|%U5`0&X^-zmjrGuv^FmM@<)>=x2p;8Fyxgk| zj4w#8GHLy)2pH!8?_F_o2_Y>*l3lp)HPKZzwMjfH0q_hE9fj-w-C42nulM>JCT%3j zNt|fLpkN?Gqz&@GejbVSEF%zIDNHMZ z*Jk;t{RK>Ujb6GDgelQ|_zA5ONWFY9ZYHv3mj9aGsm7^I<%Xj)8Y-I%cI+{!_}4-4 z&`K1&2E=^QN08Q{DVnuX7o0-8ain};dKwta*+r=eT6L5-)ciRL(7dH1&kRTMw_3p5 zrSY^O8(QOwE58 z!xG*;lk4p^-LR zq3fVXtjxk%UtBC~X6@{N;2=61Ci?bDnf8Khl*5C#jwyw{EgN)TdH|>57wP~jozP(S z3POd$L%V93_-6Sgp9d-6&Ru4}`+nKG{kLJel!u?ENZ8(;#g#Asg6qAX;Lmw3pZ(p$ z^n3q$2x#MDNHMINg&3XZ<}=m7YqS!E5iYqiQD%N3o8HqD*x zyVe+T#Zx2tHTUTB;DoJOpVtUNheiCjkBLd#pvM!>m+Q^JT_^Gqf=H;uw~lFgR(}4S zRmB}aa2v8niLq^X|5E4ehj(g2#8_`}BG;dBmIKSay=t+lhzzdzVb(v1ho@S5_@xqb zttOkh0iAp+Lc*&XUxGteaM9QKL2nYO4b|fyi(kOKBPDQ!<{@5j*#_@zsgOc-8)HlX zqd!WxOilk8_;+>m2wuDlXOirav#1*Qr<356vmyY{6G_|uK9w_y?Xx~W+~bOKxgxZ@ zfP|9>%%fn>EUbnzGtr}ano8&I8I6z-e*03eA~U5(5k&u1SbC;PyFF5qeGi_-!;lK1 zT)G{JSM~Yxf)|H|yxbJXsGQEp{5Ec8WoGQKACXkd4lXk=??6D{T&sN}RX>@Z7(=YL zFv*p;DyZ?6VAN%G+S(|^K&#=)*+az}1AH5@bvzC`Eiy(CM_3&b&#@KnC-Ir$eZ#Q_j@OA%Zw;*u(cZli2sHWYM7A zov<2R@PnOEJ4({{*AiD^xKk1@1F(agaaXME>kS&_Mz*{_62s=*o0IjJ6g83b%Mn!s zR>1u?2}+1|^R#@dojDHLrhc^<-2Y6sMPn6-z13i5I_#0~VKhhh+PAwrqS3?e_&Hcf z)D2#T3E@$WE-+w-+c~%QuWGZ%G`hh&fVur|8ikL34?9g&=Ydtt9ZZJGudtP+$r#JgcGBfsUvmur)cG=lxlm$B&`HSuF1)SZF|3RB6>2B%)4?Q-G zG-01MSP^zYzy>O9J3)S!v(QK8n;Wm82v-jf5a;@?fffRixMUZ}I3Qm%jn~6y&lW{s z%T8g7hhs$_ayVS4;+DwIlh=K%z81JjjkYixwFu_<*y(@`j{qNz z*LAhvs73soqwM_3IQ{MX#~GpL__)HTHFtJ)Vmciex{n%sU6<_K!JWq?e@443O$kkI zzarBwYJnfqMe=o9^MZah+W5BrpfSyubLO;25tdO?fPpP1U2oyD$Gzwm^s1_llf630 zvUE}qs`d8M^JYPr!#){};xWpv8QXD>YHdcnnN+j4hEcN1|L6E8bMpM0vPzEC!XK^g@SNRUYu{dn*W$Kf9qXyXa3n`;MuuOMEg5UscOm^{UPul zbRLspz1*;1w9|xeJu74^r^m+aPt*t=k{*DTUTcdAX}%_WQljNPzH4z^-D7~{ z_~|HD;j(;IeIGD_TRfqsxFsv6pENAJJqomyC(5`!|=#>V_?MWCA zZTp>dv+ER)p&*999dDuWK2$wgE!!t?p5a#0@CfMj=pBLe-jfyrwVVn+Q!A9F)oGEI z1O`!Y87Q#o+&u7iuQ+8~MH^-Sx7ismkvFT4HU}{8Z%nMP#Pcn+JusCaev4t2@`3&1RhZ#47e8!lyNMXkq3W@j4?!#Mdjakl|$%R-u& zKKjbVq}2!($#kx7q$lK}^Yx<@iLfzZpaP28@W|v$nJ5BJX!z}mDF7WX2MGu`)2+@S zh+3l|WRBB&)5f+|%AuE2yfAzCVc5KlU5-j@t)m}c*jx3U&+;M}v3Tl7ZL1!Aw;2MU z!GSz$bWQ@j5Hs9Evh6uUrp;bbAkfZBV5wiC|Dc^Q`hS@DSCf65`B2UmR|kgzT|DQ|7~kljF&->u$1w@N!t;HeAn49mCj{ z92%)#Te2x6I)~HLOuKz|siw_$2iRWQs`%O#<>7vwuE&{d&*X#h`|-i;6~gJwBOI(e z%K)%aC>#LFTmhXDjy@VC4LJ?31usMNZ+yxbM77)mkz}M$;;GCuI5x z(SO4oCQz>WZSCj3?jO1ug+O8T{egq1nW^3H9HFW~XGOf8RN*#rBant0Ew z^NTmMI(^laj%W`Pa4SH&K8)n%tbQZ|l=lP7Arzd=L>U~0>`BMF&QD57llvqR?j+sv z*zyP0CT1jr2u{F+4Ew*swzT&nTTe0GE~Xq%LOCjxlJKxpLgxg1hi87-C1=+;baW7e zqRsAU5Z_g4D`IK=xTFi7o9{BYV%odhOS#$iJobbTql6u1~`GmTSK)nwV0kMa39O zh7=TObGIDK9^dkJ2Uxa99rJ=i_H6eX`GodjQ=)K|Yj=@0hdJQsr*nVywNB8bK{WYUsnvdc%iZ) zs!MKdfh+1qUVXkQ0^0menyrM#n=#?ANgD}E$%ON!rl#~>c|-NuHSh#6hIQ7bwhITd z?K<^#hjnpIOKxyMsFYC#XUWpc*fKvCdJOMj^wc{nqYwTUqm63J z`4gJ>7uToX;s7K{yVIyVBjxw|pg(JMNtL#}@*5o zvQ8*iK1H!up{XfZkztxK8%S$z6APM+B;qq=v|i}xJLo7yjqZ|gy9+Hs{P3BnCD41F zQWO~!fuDDDD)}+NQ(%iI(fu?+ahF@$LH@N>1|HmCXIh`t*yB!BxY8zyHa|%m!GrP? zyijd8HFzh1_F}>|(5@-@jb2?Ms{i>RalBJ3qLY||*3gqUS~ieK3+=^a>#cK6Yhvt< z#+Y?|XI;_s5uu>G!_R&=+dMxdU=k6#0MufpVG><}KQ*!l2=3IzS*;iv87oAM?vuFP z(`vAHT-mI`9@#8^bOX4a1m~{k(gy{hN24F+vrIc=Ii2 z@3R?K{)RzK1BCNU+QNr{15iVG<}Vwbz4!5}#4-hn?2rNGdAw=57^7MNZrPQ}Ar@ zSP?D_EMhllOXbhb@_iiE7k&U()>;y zJZknTlI!b7xng<(7Ynx~L?Lns6iM@Em&_XRXR-sai9TYCt3UWt?)RBxo(5DL;Y&wi z4L>)n-2GJaS{0@B?_oOammt?pwY>oA)ryrg{$){zC#R{#BE7c7Iqtj5vP|ILCanng zNG#_zzmi~d4mIM1aHb2r0{h;yiOZErm!_b*?~svS^+m!vYmGm+VJsOax%S)tt|#}8 z07ysXsAc)&x}SyDX9%Q)a{H1DMV%y)g+OFaqm$g3yvc7)@y>}9UjZA=jj`Wj1mih?*;VL-G_Dwr^Ag8t^LGdYK$Vmj(rRmpABaN_^RZz z$|KSk9?xCwhXhjeBs8Y9Z(8VKv@4BYWpJ|k=o2JlR8_0A8T+f$*3b0Wd5g`c0R~f> zg?kxKGyCa;D#19iJiYlt{_Esi5zff3tMT*A4fp2Rta9Gxk@#TKc&DOcd%qhXL{lw% z{e6B|(b4(yeCb5&@`NxZZAm~+#OCI#+VhPGS+vmuG8LOB4w(6lmV!T<-^5`yIQyN~ZB&ivGMfT*4VR zkU z*;&Cx8G?%cO+0$$)KJwRM162<0LEY?o(yw%{UoJ*Mc%Sk=&cC=GQr zE+{^jnlArf!R#qnwOSG3(|5ND9E0~AjKr2F*92L4&2IM6w2mW3b2O6Pqi8n7NL`_88f3`n_m=)6zhho%@7+ao7n7Tt@>x3_%JuV<6816=8;lK>Hh=P*s@R@iIR!nXp5x(D6pyhK|p6v7>6Y9$ZI zmL1VTs{!bHE7H#EC>R{oRa3-Eb&kjYM9*rpfv^flDFZP~CM@!SzhSt2jtTeM{gky6 z)};QY)8W)X(fPrzZ^5yY!|Bdsq+i!Kb}br8;*^t%sSG&I>IsiSz&i*@$v{zP0RV2QHVNIM3VE&(;% z-h?cT?@+*4^U|@Bz-X*Xl&X-AOIU019B|$K+>z~j*A1iQ2@aEbC)Z20E~4x5cU~;@ zeG8Lfno{`lOScC_Tf?&LYz03-R#sAOGm;b<%W`;tr%x+-kX=ctHw9fGO{QZy8%QLs z*W^aIVU(ca6UP7)B+i(@<+a)DL&}VBnwCy%f&%$W#p&WW}z$uAy7+I^Yp7XO4 zqx;JAAJIU?091YfT<;-F)p@P{bpMH%&!^wgzD2ridIj&waPH=8z1%+xOcI;?zS=mh zCAYg36G#d{uj_-g@hdm7BQH@!hT+lr>>?%El@hX+^kUfK7Yx!PB*?a0UIV}9gU$k; z?j|LsJG?1*3EVv%?U1(a=-DgJ=u2c5hT1QZssHwJs`VHQ36Ys_?%9vfQp8>Swo*?q zXrLfH_NVN%cYfZw-U0|Sujfzr6~>u@;3i>nMx+(HTWaytT9XUx@CBB9=(EpTtTx^= z;8mfKoXu($dj^5_M$EcHM4fwMe)5D57ABDN;)NzVX`6jgmVuhCrm;HsZ0n5f&$oU~ z^P#M}EUn-Vr(Y$bNEHX%Kt<{J`rnY>$Q{o@}dIG2Yzlw(y?csM2tGNLVzQT+AMUJ~VkZFpZN zIsmvAOwbJ`1x5h;M46SIYq>8r=w+{(-K6<*W$Sxsjdw(_p`k&5kyfsn4XLd}`#L-K zXJ!90&~*pSY5mLx?S?fmBm-@fKbtRGoG0|s%A*-kpn`ZH8C=i8zpOW8)%x@7*fJeO# z5)bu)e>?n^tNQ_kYcepcU`k$<9iu-afDauHr6G#p$dSlQNYL zSLb}Ws+xuM{cE=wy?7>)xQoYZkbG}XHwiC{C8zXr>Qw6#d9Sv>3uA)#uv2eWgt?t) zF{@RgRx+|r(R5_=pRWo(67ign`_7W0kjxz-J6yjHCWuf(m#DQr=O)J;>rDj!mi<{E z1jSDDEGg<zRDG6^JccUr}zS=my7HKDF`edb?uOYw66y zhfSj>E3%J2^vS1s%sD+jq0|)@7Zdc}4|5sbPEzQ!KA135pD_yeE|3A?o5t5i5`ERq zysA_Kt@FQz8W%}Eg<}r$IZD&ssLfanne36&!Du%{9}9dwn{AzwfSj<8B4XNiz^jFU z@k_)=Qtt#Ug~+yA0$#v;cN>uas^^}aVs+zX95RnuVsf*ftuFEA=+r39XPi@VuaOUy z2aMNKMlWJwg24mKd2(KrKDfu?dL#g*?ZWW4!jH0-3+9?1-iX2_Xa=I3F*Yr?;@*Xl zr{-v^!)4-kN9z@RE>N*1LcTaDuUgx|CplxkOU5cEd)m3t>fRb3xIHtOuW+re#{%a) zPg(9K)i`f1tYXPo0saps6kOTly)?XL2v82KNdndwaD;sk$~`+gJkca}k$~!tWy>UG zuI}iv^M}S&6EvjTD7yl!@RVjZ_fdl0$D{Yooi}RIg)~ZIE$521fCp`KfkAsxEJ7Sr zO%htMFYULjlZw5}Do-1~vuStM!oV?Z^Zp_5Pv9ox>0c;yquuOhxsj{*q5M2AH-C5j_}Su&BRFG(I`DfdBna1xMOLWo5!@>((6)-xclwf#T3sGDVhDJpB%WTV zsGc5sNje~sKrmLezy}dghE{LyYB&3nL5DAE6n31k|13X{aE*|*D7$LLm~UDB7aG!dt!${;5E1E`{P_yq#L`HomyuCfp6DyDQRjcMQ;b=YOzYq%V+ixa1=gHY)Y?PrW-9Xj&s0xB%6OsoRf%HB-zbL2 z;46aQO`)fkj%)=|)%T}VGbW=@A3uS9w_oMuh5Xrj0IT;PqAdSFJOBATfOVCXrLPIs zt3PxuBK)ZxDeKLKD}ZuzM=v8)=cLzt&567IN&^(wk{PZt8R0veGq%-H-&lp3`1?VAMC{Q()|&`W*U@oVCGNg1oOR#^Z9WkjQv30?4YlUSx<5xBKd?kl`FZV3dk8c2$@<1X1J=8F8yir86Zz$c4rD-ZeOo z@K~~pOXLE4Wr7fbhIb3a`mrV%$YRA)k!VPg7)s=1nKyGDVvqNH zU7`*+<k)2XV_k~@$+N$ zMMNm4hl75OB;9B*YTQ9Ih;Q=vvBzNBv!LMnYVRP_2lb_A8fV{;nOdt_`jo_C1RY` zEowzC=tQUBe)taE;KoJ>ZVm0kq(msw`a5=UowwD@~bQMd;z706UA@^C9l_D-}p! z{HQGNH%#C3Trl%uG=P|*#7gv6Vu0Rx*E!S6F&;LUM22~iSFz+bV9N>Y6XNXHE|Yz{lVN^qzQnp`*vfCC zAtk{wjDIKIm+SLP3Nq|3VUrUJ$2&jfumUIx1enOhJae)G|BhC(Ul1P~A&Jk2kXo+p z#~Y@lZt`h!JWEae3$4++3>Uqn^!WWEeCC1YAWKZtEuk8#dM98@QOYP~rH!Ax090=s zdsUhCgffon%`~(}scaDXVk05m2Z|T}ue0j_Ybx8;hay!0MHEND7{np8B($LfkS4uI zQP5Eg>6k_mN(2Q4u!EwA$cTuDh>D6*Y$)moVgp1JgrVp#z(@xTox4wfi2Clk_r3Fd zIa%wRwbxqzT6>3lN!Y&+7H3bl}Q? zWboC7#kJA{9f7+as|<8UNmJsLY**H*uK8v72pa9iC}5TNtb%-Uk*B2OlhQDcS$Wwm z#XX4lf4cSTDt*&!EF=3*Oi!9it6Q(oO{n}EbK?H4_I2ZBNil+s2M!p>YV}LklS3Vi zy&pz9wy#}!s8~fZZ{2MM3X1(`y7Z7k_pwD=vd^Dix76MtdpK!>%rJe&dQ5G=bpdjfl4&)z!^u8la$>T5ld)H1$#ckei9C6RO-(wZb{~OxZ0v zMfMQhfETnir{) zDMt+JIqh5MW_L(dT8!S;0Rp#;$`v6p`)sL%h|$j_{K=vc)oQSh#+Q{(_t*&tPE}G@ znk^fHwY%ze1{CET03R)4Sr3EKw{CgZp|Rvs)3U#dx5UT|g+&IFdWkYI#Gl3vIrdmL zVS|%Q%HR2Uv`V;Y$41>>pNFee>mR>}(ixOn$QOHCPw8; zvgXTL(uT8F-k(0DzfnWbn)PR$ULn^1HLlcRVOf}~*u{Ra8UBo3q7~qC827G5CMYGn z{iK1k4hkQe?#Yqfals>wPEWYVIu3n+xj!<@Rm>7;ceK|&{QKqaNGJuf`KN_atmzZdialGOF4G@% zOw%bTynR(ee4wTwhE`h*FTUF`IqSlo&;fwRPd$A%b^WeqbgTw58LP52JKf$!N4@gr zmqu~#WcpjPEOV_FN@W_=z90I+3ZL5Z#4scBkCBeaRO8A+;!UR&3{E`KlIv&*6?4f_}-o|>E-=y;p- zPvd1uHARhVk+kfb`HJ7valZVPKlmPC^sKQkk?pawKiB!BR4_WhlY)NxT4J9EnlQ(VU4$D7mcDqMI5 zsD{##mZkNueIKQ9lhWAxJrDf6{*77E$K-figx2xhzE4KfxUVIyz1WqVZ5M5RUA})Y zpzQkdlmY4BuGSL)tdv#UC27lYQU(hpa1q5Vq2(=I-p$9?x!)jz|CCZFNQwAWZe!pL zwQHD8e5T&Ws4j^{NM}@>o+#6~*?h6yi88q`!{yZ}EMf1q1CoQ9+*@z|PCQ#hS>aY` zp`iZd$)-%8M^&!cetXoScBD&Aw$H`9zjf!$Wg6YbU6O|E%LYfGZF-jgFdnf$v0ChT zhmP4RWts8w(t*Dh-7lK=#ve zgvU`^uR=9F%!O_loOtp+?Q4B27)p;=s4o2%SkDuOcaKUKcHA3lyV+|NbL8+6&*T&P zh7t}adsJ_jaB>Ox4SWs-b^}IQ_JYWDrJcl9AEgl8$J z;Njt}3xlmzk#EGt(7iQ&CodObvC(~m)mf{NE?Q&*sjW}U=Atgl% zg^_Z3AE0sgR*O?_>2ywbbH3`-J(Q1qQT%x1X^9c9-DmZ9V?R>3#ok@vztbmR(N!A+ z=6!eX5@W^gmA0$;rver)S?Dc?QgZ6Lnkuc;kR+kI#2XiDQYGIw-4qxYZF#%MxA^^o zKJ~afL}sRuGqW-^9hCjwam_uFm%?@bYI{V#Z$Zhw;hOtvg(1&)?^tAl#0b0KdO^WP zdZM{m``Ne;2D-sfop^@|EVW!mb7!J_m2yOV`Isd>Ug=Q?Pv=;}o*aAG+x`@H&e&F# zX8p4$SHQlPSNx&5xfinPSG(|A#Gcn{Wv}P*cPK_~m%Q`D%rJ7-rrRaWdxNz1^L?5Y zX(uKo1{w6@Fbx(J>cz3oR`AuSR4N8)w;fhzb*uls_yNJF`nZAVPI^YmFc9~cnD zAUQ}$3FbURKwc8?^U|d=nvo;~i9@QYGg{OF2$Fyhh#AcrIFf|4v}Uwcc?ennVK6fq zLlJ_cp!Mr#w5(+iBn|D@F{9P3g&-LyCT2$C8bOdSBVqJOHUx5+IbMi^ThJ!R2MPpd z2gn;p&X6bM0d!|@-T-9yD3$D+f_+H|H8}3fVLkgS39=NMmFJ#x#o-Y?5D(%&G>8dN zfHxXMhe*IP6Cy(_U??NB!9Ye31~LN=BPa-*AxIx!5rgc24Fh6Bcwo;5+2Daj61sN> zcZiS;$k|?~Ga(INKj+^bSaBhOFfJR!rvYo`591KP0`|`k`X_?E(1m%DfCNW`uegI8 zyudRTc;rA~!ZYkh7gXSDyiLOE+<9>@0D%d3e8mD|<_YbXz&m{&8io)H9(X4TbM%Im z1K)1ImLjx-tH1{M;VM!fD)0gcEA#C&1Y`iB8Gxt=C>hx_tFv9wLYyW+f=GO@Bq8R8V z9z>YS>gz0lptWFrL69%F3wMSKa>swuS6RvHumOa#j$qIcVI&Th#$s9`vHBP!g2W`S zh%_d}66xo=LC+M4;PUWHBA(7-k}Q#Y5*KN0C5OXvxgy{CW}M;B^RK~)5J_wj6C^?4!$am>;MvT=ow@$s<~&yi{mnEckrmF> zw_`CFET*0vi^=1#=-hcwOkg1Y3lwbtGBk)zBe;_IzO0=j&@2;UGvgo=Bdn1Tfk4I* z$w&kp&!mLnDFC_l3~G=l067Ed8w_7B&tS#zIH6pgGn35vFB@uzoGlTTLx(HMir z8sp9IyXP?B(BJvQp}z?(%zmE9f6iUF=tMmND+!){J|rFwtZPv_a6~rECLGTp&H1D9 zcx-btdUhS_i`KC|$Oi4>?u<6TV2shTlX=b?(h5|Wgl03qoSO9~D$CpjCg|h;Aqdvw z#~@xLjysD<6_;YZ`)-z~5E)kbn>(2_ur$izF|R pv_mAZMN*7NIx3RRilplzsZ1nQizIyxmqVCI0=%-rnZPg5{{jK0