diff --git a/deps/nostalgia/Makefile b/deps/nostalgia/Makefile index 5e5c49c..83654e0 100644 --- a/deps/nostalgia/Makefile +++ b/deps/nostalgia/Makefile @@ -15,7 +15,11 @@ PROJECT_PLAYER=./build/${BC_VAR_CURRENT_BUILD}/bin/${BC_VAR_PROJECT_NAME_CAP} .PHONY: pkg-gba pkg-gba: build - ${BC_CMD_ENVRUN} ${BC_PY3} ./util/scripts/pkg-gba.py sample_project ${BC_VAR_PROJECT_NAME} + ${BC_CMD_ENVRUN} ${BC_PY3} ./util/scripts/pkg-gba.py sample_project ${BC_VAR_PROJECT_NAME_CAP} + +.PHONY: generate-studio-rsrc +generate-studio-rsrc: + ${BC_CMD_ENVRUN} ${BC_PY3} ./util/scripts/file-to-cpp.py --rsrc src/nostalgia/studio/rsrc.json .PHONY: build-player build-player: @@ -28,10 +32,10 @@ run-studio: build ${PROJECT_STUDIO} .PHONY: gba-run gba-run: pkg-gba - ${MGBA} ${BC_VAR_PROJECT_NAME}.gba + ${MGBA} ${BC_VAR_PROJECT_NAME_CAP}.gba .PHONY: debug debug: build - ${BC_CMD_HOST_DEBUGGER} ./build/${BC_VAR_CURRENT_BUILD}/bin/${BC_VAR_PROJECT_NAME} sample_project + ${BC_CMD_HOST_DEBUGGER} ${PROJECT_PLAYER} sample_project .PHONY: debug-studio debug-studio: build ${BC_CMD_HOST_DEBUGGER} ${PROJECT_STUDIO} diff --git a/deps/nostalgia/deps/buildcore/scripts/file-to-cpp.py b/deps/nostalgia/deps/buildcore/scripts/file-to-cpp.py deleted file mode 100755 index 057976a..0000000 --- a/deps/nostalgia/deps/buildcore/scripts/file-to-cpp.py +++ /dev/null @@ -1,30 +0,0 @@ -#! /usr/bin/env python3 - -# -# Copyright 2016 - 2025 gary@drinkingtea.net -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# - -import argparse -import sys - - -def main() -> int: - parser = argparse.ArgumentParser() - parser.add_argument('--file', help='path to file') - parser.add_argument('--out-cpp', help='path to output cpp file') - parser.add_argument('--out-hpp', help='path to output hpp file') - parser.add_argument('--namespace', help='path to output hpp file') - args = parser.parse_args() - return 0 - - -if __name__ == '__main__': - try: - err = main() - sys.exit(err) - except KeyboardInterrupt: - sys.exit(1) diff --git a/deps/nostalgia/deps/ox/src/ox/fs/filestore/filestoretemplate.hpp b/deps/nostalgia/deps/ox/src/ox/fs/filestore/filestoretemplate.hpp index 392b249..dd75728 100644 --- a/deps/nostalgia/deps/ox/src/ox/fs/filestore/filestoretemplate.hpp +++ b/deps/nostalgia/deps/ox/src/ox/fs/filestore/filestoretemplate.hpp @@ -433,14 +433,14 @@ Error FileStoreTemplate::resize() { template Error FileStoreTemplate::resize(std::size_t size, void *newBuff) { if (m_buffer->size() > size) { - return ox::Error(1); + return ox::Error{1, "new buffer is too small for existing data"}; } m_buffSize = static_cast(size); if (newBuff) { - m_buffer = reinterpret_cast(newBuff); + m_buffer = static_cast(newBuff); OX_RETURN_ERROR(m_buffer->setSize(static_cast(size))); } - return ox::Error(0); + return {}; } template diff --git a/deps/nostalgia/deps/ox/src/ox/fs/filesystem/filesystem.hpp b/deps/nostalgia/deps/ox/src/ox/fs/filesystem/filesystem.hpp index fc7459e..d53feea 100644 --- a/deps/nostalgia/deps/ox/src/ox/fs/filesystem/filesystem.hpp +++ b/deps/nostalgia/deps/ox/src/ox/fs/filesystem/filesystem.hpp @@ -20,7 +20,7 @@ namespace ox { namespace detail { -static inline void fsBuffFree(char *buff) noexcept { +inline void fsBuffFree(char *buff) noexcept { safeDelete(buff); } } @@ -49,11 +49,11 @@ class FileSystem { Result read(StringViewCR path) noexcept; - inline Error read(StringViewCR path, void *buffer, std::size_t buffSize) noexcept { + Error read(StringViewCR path, void *buffer, std::size_t buffSize) noexcept { return readFilePath(path, buffer, buffSize); } - inline Error read(uint64_t inode, void *buffer, std::size_t buffSize) noexcept { + Error read(uint64_t inode, void *buffer, std::size_t buffSize) noexcept { return readFileInode(inode, buffer, buffSize); } @@ -69,8 +69,7 @@ class FileSystem { * @param path * @param readStart * @param readSize - * @param buffer - * @param size + * @param buff * @return error or number of bytes read */ Result read( @@ -102,36 +101,36 @@ class FileSystem { Error write(const FileAddress &addr, const void *buffer, uint64_t size, FileType fileType = FileType::NormalFile) noexcept; - inline Error write(StringViewCR path, const void *buffer, uint64_t size, FileType fileType) noexcept { + Error write(StringViewCR path, const void *buffer, uint64_t size, FileType fileType) noexcept { return writeFilePath(path, buffer, size, fileType); } - inline Error write(uint64_t inode, const void *buffer, uint64_t size, FileType fileType) noexcept { + Error write(uint64_t inode, const void *buffer, uint64_t size, FileType fileType) noexcept { return writeFileInode(inode, buffer, size, fileType); } - inline Result stat(uint64_t inode) const noexcept { + Result stat(uint64_t inode) const noexcept { return statInode(inode); } - inline Result stat(StringViewCR path) const noexcept { + Result stat(StringViewCR path) const noexcept { return statPath(path); } Result stat(const FileAddress &addr) const noexcept; [[nodiscard]] - inline bool exists(uint64_t inode) const noexcept { + bool exists(uint64_t inode) const noexcept { return statInode(inode).ok(); } [[nodiscard]] - inline bool exists(ox::StringView path) const noexcept { + bool exists(ox::StringView path) const noexcept { return statPath(path).ok(); } [[nodiscard]] - inline bool exists(FileAddress const&addr) const noexcept { + bool exists(FileAddress const&addr) const noexcept { return stat(addr).ok(); } @@ -178,11 +177,11 @@ class MemFS: public FileSystem { public: Result directAccess(const FileAddress &addr) const noexcept; - inline Result directAccess(StringViewCR path) const noexcept { + Result directAccess(StringViewCR path) const noexcept { return directAccessPath(path); } - inline Result directAccess(uint64_t inode) const noexcept { + Result directAccess(uint64_t inode) const noexcept { return directAccessInode(inode); } diff --git a/deps/nostalgia/release-notes.md b/deps/nostalgia/release-notes.md index 003c2e5..9ad0165 100644 --- a/deps/nostalgia/release-notes.md +++ b/deps/nostalgia/release-notes.md @@ -1,4 +1,14 @@ -# d2025.02 +# d2025.04.0 + +* Add app icon for both window and file +* Fix selection clearing in TileSheet editor to work when clicking outside + image. + +# d2025.02.1 + +* Fix closing tab with unsaved changes (a44c5acc4b) + +# d2025.02.0 * Rename core namespace to gfx. * Add PaletteV5 to accommodate namespace change. diff --git a/deps/nostalgia/sample_project/TileSheets/NS_Logo16.nts b/deps/nostalgia/sample_project/TileSheets/NS_Logo16.nts new file mode 100644 index 0000000..4049fc1 --- /dev/null +++ b/deps/nostalgia/sample_project/TileSheets/NS_Logo16.nts @@ -0,0 +1,269 @@ +K1;e7ae945e-d6c5-4444-5738-be95b4e5937a;O1;net.drinkingtea.nostalgia.gfx.TileSheet;5;{ + "bpp" : 4, + "defaultPalette" : "uuid://c79f21e2-f74f-4ad9-90ed-32b0ef7da6ed", + "subsheet" : + { + "columns" : 2, + "name" : "Root", + "pixels" : + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 2, + 3, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 3, + 2, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 3, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "rows" : 2 + } +} \ No newline at end of file diff --git a/deps/nostalgia/sample_project/TileSheets/NS_Logo32.nts b/deps/nostalgia/sample_project/TileSheets/NS_Logo32.nts new file mode 100644 index 0000000..0aa8ad8 --- /dev/null +++ b/deps/nostalgia/sample_project/TileSheets/NS_Logo32.nts @@ -0,0 +1,1039 @@ +K1;d432168e-52cf-4071-ee35-d4d2542afab4;O1;net.drinkingtea.nostalgia.gfx.TileSheet;5;{ + "bpp" : 4, + "defaultPalette" : "uuid://c79f21e2-f74f-4ad9-90ed-32b0ef7da6ed", + "idIt" : 2, + "subsheet" : + { + "columns" : 4, + "id" : 1, + "name" : "Root", + "pixels" : + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 3, + 0, + 0, + 0, + 0, + 3, + 3, + 3, + 3, + 0, + 0, + 0, + 0, + 3, + 3, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 3, + 3, + 3, + 0, + 0, + 0, + 0, + 2, + 3, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 3, + 3, + 2, + 0, + 0, + 0, + 0, + 3, + 3, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 3, + 3, + 3, + 0, + 0, + 0, + 0, + 3, + 3, + 3, + 3, + 0, + 0, + 0, + 0, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "rows" : 4 + } +} \ No newline at end of file diff --git a/deps/nostalgia/src/nostalgia/modules/gfx/src/keel/typeconv.cpp b/deps/nostalgia/src/nostalgia/modules/gfx/src/keel/typeconv.cpp index c2448e4..927c167 100644 --- a/deps/nostalgia/src/nostalgia/modules/gfx/src/keel/typeconv.cpp +++ b/deps/nostalgia/src/nostalgia/modules/gfx/src/keel/typeconv.cpp @@ -183,8 +183,8 @@ ox::Error TileSheetV4ToTileSheetV5Converter::convert( keel::Context&, TileSheetV4 &src, TileSheetV5 &dst) const noexcept { - dst.bpp = src.bpp; - dst.idIt = src.idIt; + dst.bpp = src.bpp; + dst.idIt = src.idIt; OX_RETURN_ERROR(src.defaultPalette.getPath().moveTo(dst.defaultPalette)); convertSubsheet(dst.bpp, src.subsheet, dst.subsheet); return {}; diff --git a/deps/nostalgia/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.cpp b/deps/nostalgia/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.cpp index 6e94845..de2e598 100644 --- a/deps/nostalgia/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.cpp +++ b/deps/nostalgia/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.cpp @@ -96,7 +96,7 @@ TileSheetEditorImGui::TileSheetEditorImGui(studio::StudioContext &sctx, ox::Stri m_model{m_view.model()} { // connect signal/slots m_subsheetEditor.inputSubmitted.connect(this, &TileSheetEditorImGui::updateActiveSubsheet); - m_exportMenu.inputSubmitted.connect(this, &TileSheetEditorImGui::exportSubhseetToPng); + m_exportMenu.inputSubmitted.connect(this, &TileSheetEditorImGui::exportSubsheetToPng); // load config auto const&config = studio::readConfig( keelCtx(m_sctx), itemPath()); @@ -397,7 +397,7 @@ void TileSheetEditorImGui::showSubsheetEditor() noexcept { } } -ox::Error TileSheetEditorImGui::exportSubhseetToPng(int const scale) const noexcept { +ox::Error TileSheetEditorImGui::exportSubsheetToPng(int const scale) const noexcept { OX_REQUIRE(path, studio::saveFile({{"PNG", "png"}})); // subsheet to png auto const&s = m_model.activeSubSheet(); diff --git a/deps/nostalgia/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.hpp b/deps/nostalgia/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.hpp index f338408..9895e71 100644 --- a/deps/nostalgia/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.hpp +++ b/deps/nostalgia/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.hpp @@ -10,7 +10,6 @@ #include #include -#include "tilesheetpixelgrid.hpp" #include "tilesheetpixels.hpp" #include "tilesheeteditorview.hpp" @@ -91,7 +90,7 @@ class TileSheetEditorImGui: public studio::Editor { private: void showSubsheetEditor() noexcept; - ox::Error exportSubhseetToPng(int scale) const noexcept; + ox::Error exportSubsheetToPng(int scale) const noexcept; void drawTileSheet(ox::Vec2 const&fbSize) noexcept; @@ -99,8 +98,6 @@ class TileSheetEditorImGui: public studio::Editor { ox::Error updateActiveSubsheet(ox::StringView const&name, int cols, int rows) noexcept; - // slots - private: void setActiveSubsheet(TileSheet::SubSheetIdx path) noexcept; }; diff --git a/deps/nostalgia/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditormodel.cpp b/deps/nostalgia/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditormodel.cpp index 80c6768..5178e50 100644 --- a/deps/nostalgia/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditormodel.cpp +++ b/deps/nostalgia/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditormodel.cpp @@ -120,7 +120,7 @@ bool TileSheetEditorModel::acceptsClipboardPayload() const noexcept { return cb.ok(); } -ox::StringView TileSheetEditorModel::palPath() const noexcept { +ox::String const &TileSheetEditorModel::palPath() const & noexcept { return m_palPath; } @@ -263,7 +263,13 @@ ox::Error TileSheetEditorModel::rotateRight() noexcept { } void TileSheetEditorModel::setSelection(studio::Selection const&sel) noexcept { - m_selection.emplace(sel); + auto const &ss = activeSubSheet(); + if (sel.a.x < ss.columns * TileWidth && sel.a.y < ss.rows * TileHeight) { + m_selection.emplace(sel); + } else { + m_selTracker.finishSelection(); + m_selection.reset(); + } m_updated = true; } diff --git a/deps/nostalgia/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditormodel.hpp b/deps/nostalgia/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditormodel.hpp index f1c60a5..a373597 100644 --- a/deps/nostalgia/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditormodel.hpp +++ b/deps/nostalgia/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditormodel.hpp @@ -62,7 +62,7 @@ class TileSheetEditorModel: public ox::SignalHandler { constexpr Palette const&pal() const noexcept; [[nodiscard]] - ox::StringView palPath() const noexcept; + ox::String const &palPath() const & noexcept; ox::Error setPalette(ox::StringViewCR path) noexcept; diff --git a/deps/nostalgia/src/nostalgia/player/app.cpp b/deps/nostalgia/src/nostalgia/player/app.cpp index f658004..f43a6bf 100644 --- a/deps/nostalgia/src/nostalgia/player/app.cpp +++ b/deps/nostalgia/src/nostalgia/player/app.cpp @@ -64,13 +64,10 @@ static void testKeyEventHandler(turbine::Context &tctx, turbine::Key key, bool d [[maybe_unused]] static ox::Error runTest(turbine::Context &tctx) { - constexpr ox::StringView TileSheetAddr{"/TileSheets/Charset.nts"}; - constexpr ox::StringView PaletteAddr{"/Palettes/Chester.npal"}; OX_REQUIRE_M(cctx, gfx::init(tctx)); turbine::setApplicationData(tctx, cctx.get()); - OX_REQUIRE(tsStat, turbine::rom(tctx)->stat(PaletteAddr)); - OX_RETURN_ERROR(gfx::loadSpriteTileSheet(*cctx, TileSheetAddr)); - OX_RETURN_ERROR(gfx::loadSpritePalette(*cctx, PaletteAddr)); + OX_RETURN_ERROR(gfx::loadSpriteTileSheet(*cctx, "/TileSheets/Charset.nts")); + OX_RETURN_ERROR(gfx::loadSpritePalette(*cctx, "/Palettes/Chester.npal")); OX_RETURN_ERROR(gfx::initConsole(*cctx)); gfx::puts(*cctx, 10, 9, "DOPENESS!!!"); turbine::setUpdateHandler(tctx, testUpdateHandler); @@ -86,7 +83,6 @@ static ox::Error runTileSheetSetTest(turbine::Context &tctx) { constexpr ox::StringView PaletteAddr{"/Palettes/Charset.npal"}; OX_REQUIRE_M(cctx, gfx::init(tctx)); turbine::setApplicationData(tctx, cctx.get()); - OX_REQUIRE(tsStat, turbine::rom(tctx)->stat(PaletteAddr)); gfx::TileSheetSet const set{ .bpp = 4, .entries = { diff --git a/deps/nostalgia/src/nostalgia/studio/CMakeLists.txt b/deps/nostalgia/src/nostalgia/studio/CMakeLists.txt index 3a5a25a..3057fc5 100644 --- a/deps/nostalgia/src/nostalgia/studio/CMakeLists.txt +++ b/deps/nostalgia/src/nostalgia/studio/CMakeLists.txt @@ -1,4 +1,8 @@ -add_executable(NostalgiaStudio WIN32 MACOSX_BUNDLE) +add_executable( + NostalgiaStudio WIN32 MACOSX_BUNDLE + ns.rc + icondata.cpp +) target_link_libraries( NostalgiaStudio diff --git a/deps/nostalgia/src/nostalgia/studio/icondata.cpp b/deps/nostalgia/src/nostalgia/studio/icondata.cpp new file mode 100644 index 0000000..6b45658 --- /dev/null +++ b/deps/nostalgia/src/nostalgia/studio/icondata.cpp @@ -0,0 +1,1495 @@ +// Generated + +#include +#include + +namespace studio { + +static constexpr ox::Array WindowIcon16Data { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, + 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x00, 0x00, 0x10, 0x02, 0x03, 0x00, 0x00, 0x00, 0x62, + 0x9d, 0x17, 0xf2, 0x00, 0x00, 0x00, 0x0c, 0x50, 0x4c, 0x54, + 0x45, 0x00, 0x00, 0x28, 0xb0, 0xb0, 0xb0, 0x40, 0x40, 0xa0, + 0xd8, 0xd8, 0xd8, 0x8f, 0x37, 0x17, 0x71, 0x00, 0x00, 0x00, + 0x35, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0x4d, 0xcc, 0xbd, + 0x09, 0x00, 0x20, 0x0c, 0x44, 0xe1, 0x27, 0xc4, 0x46, 0x9b, + 0x1b, 0xc9, 0x11, 0x1c, 0xd1, 0xd1, 0x1c, 0xc5, 0x60, 0xf0, + 0xe7, 0x2b, 0x1e, 0xa4, 0xc8, 0x11, 0x52, 0xf3, 0x98, 0x4e, + 0xae, 0x0c, 0x1d, 0x95, 0x69, 0xa8, 0x0e, 0x8b, 0xf3, 0xf3, + 0x3e, 0xf6, 0x80, 0x5b, 0x80, 0x0c, 0x03, 0x3a, 0x59, 0xa5, + 0x8f, 0x74, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, + 0xae, 0x42, 0x60, 0x82, +}; + +ox::SpanView WindowIcon16() noexcept { return WindowIcon16Data; } + +static constexpr ox::Array WindowIcon24Data { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, + 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x18, + 0x00, 0x00, 0x00, 0x18, 0x02, 0x03, 0x00, 0x00, 0x00, 0x9d, + 0x19, 0xd5, 0x6b, 0x00, 0x00, 0x00, 0x0c, 0x50, 0x4c, 0x54, + 0x45, 0x00, 0x00, 0x28, 0xb0, 0xb0, 0xb0, 0x40, 0x40, 0xa0, + 0xd8, 0xd8, 0xd8, 0x8f, 0x37, 0x17, 0x71, 0x00, 0x00, 0x00, + 0x44, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0x7d, 0x8e, 0xc1, + 0x09, 0x00, 0x21, 0x0c, 0x04, 0xf7, 0x20, 0xaf, 0x7b, 0x6d, + 0x1d, 0x77, 0x4d, 0x58, 0xaa, 0x4f, 0x4b, 0xb3, 0x0c, 0xd7, + 0x10, 0x24, 0x3e, 0x74, 0x44, 0x26, 0x84, 0x2c, 0x09, 0x16, + 0x4f, 0x71, 0x19, 0x5d, 0xb4, 0xac, 0x33, 0x33, 0xa5, 0x6f, + 0x78, 0x2b, 0xa8, 0xf7, 0x75, 0xd5, 0xc4, 0xdf, 0xa4, 0x68, + 0xc6, 0xc8, 0x9d, 0x7d, 0x5f, 0x1c, 0x91, 0x52, 0x03, 0xcf, + 0xfb, 0x05, 0x88, 0xa2, 0x8c, 0xe5, 0xd5, 0x00, 0x00, 0x00, + 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, +}; + +ox::SpanView WindowIcon24() noexcept { return WindowIcon24Data; } + +static constexpr ox::Array WindowIcon32Data { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, + 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x20, 0x02, 0x03, 0x00, 0x00, 0x00, 0x0e, + 0x14, 0x92, 0x67, 0x00, 0x00, 0x00, 0xc2, 0x7a, 0x54, 0x58, + 0x74, 0x52, 0x61, 0x77, 0x20, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x65, 0x78, + 0x69, 0x66, 0x00, 0x00, 0x78, 0xda, 0x6d, 0x50, 0xdb, 0x0d, + 0xc3, 0x20, 0x0c, 0xfc, 0xf7, 0x14, 0x1d, 0x01, 0x3f, 0x20, + 0x66, 0x1c, 0xd2, 0xa4, 0x52, 0x37, 0xe8, 0xf8, 0x35, 0xd8, + 0x89, 0x42, 0xd3, 0x43, 0x9c, 0x9f, 0x3a, 0x8c, 0x61, 0xff, + 0xbc, 0x5f, 0xf0, 0xe8, 0x20, 0x14, 0x90, 0xbc, 0x68, 0xa9, + 0xa5, 0x24, 0x83, 0x54, 0xa9, 0xd4, 0xcc, 0xd1, 0xe4, 0x68, + 0x83, 0x31, 0xc9, 0xe0, 0x01, 0x8a, 0x92, 0xc5, 0x53, 0x1e, + 0xce, 0x02, 0x59, 0x8a, 0xcd, 0xb2, 0x87, 0x5a, 0xa2, 0xff, + 0xc8, 0xe3, 0x29, 0xe0, 0xa6, 0x99, 0x97, 0x2f, 0x42, 0xfa, + 0x8c, 0xc2, 0x3a, 0x17, 0xaa, 0x84, 0xbe, 0xfe, 0x08, 0xc5, + 0xcb, 0xdc, 0x27, 0xea, 0xfe, 0x16, 0x42, 0x35, 0x84, 0x98, + 0xbc, 0x80, 0x21, 0xd0, 0xfc, 0x5b, 0xa9, 0x54, 0x5d, 0xae, + 0x5f, 0x58, 0xf7, 0x34, 0x43, 0xfd, 0x42, 0x27, 0xd1, 0x79, + 0xec, 0x5b, 0xbc, 0xd8, 0xf6, 0xb6, 0x6c, 0xef, 0x30, 0xd1, + 0xce, 0xc8, 0xc9, 0x98, 0x59, 0x7d, 0x00, 0xee, 0x37, 0x03, + 0x37, 0x73, 0xc4, 0x18, 0x19, 0x7b, 0xa3, 0x9d, 0x66, 0x4d, + 0x65, 0xe4, 0x31, 0xc4, 0x6c, 0x21, 0xff, 0xf6, 0x74, 0x00, + 0xbe, 0xd8, 0xb1, 0x59, 0x09, 0x0b, 0x87, 0x2e, 0x13, 0x00, + 0x00, 0x01, 0x83, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, + 0x20, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, + 0x78, 0x9c, 0x7d, 0x91, 0x3d, 0x48, 0xc3, 0x40, 0x1c, 0xc5, + 0x5f, 0xd3, 0x6a, 0x45, 0x2a, 0x0e, 0x76, 0x10, 0x71, 0x08, + 0x58, 0x9d, 0xec, 0xa2, 0x22, 0x8e, 0xa5, 0x8a, 0x45, 0xb0, + 0x50, 0xda, 0x0a, 0xad, 0x3a, 0x98, 0x5c, 0xfa, 0x05, 0x4d, + 0x1a, 0x92, 0x14, 0x17, 0x47, 0xc1, 0xb5, 0xe0, 0xe0, 0xc7, + 0x62, 0xd5, 0xc1, 0xc5, 0x59, 0x57, 0x07, 0x57, 0x41, 0x10, + 0xfc, 0x00, 0x71, 0x17, 0x9c, 0x14, 0x5d, 0xa4, 0xc4, 0xff, + 0x25, 0x85, 0x16, 0x31, 0x1e, 0x1c, 0xf7, 0xe3, 0xdd, 0xbd, + 0xc7, 0xdd, 0x3b, 0x40, 0x68, 0x56, 0x99, 0x6a, 0x06, 0x62, + 0x80, 0xaa, 0x59, 0x46, 0x3a, 0x11, 0x17, 0x73, 0xf9, 0x55, + 0x31, 0xf8, 0x8a, 0x00, 0x42, 0xf0, 0x63, 0x0c, 0xbd, 0x12, + 0x33, 0xf5, 0x64, 0x66, 0x31, 0x0b, 0xcf, 0xf1, 0x75, 0x0f, + 0x1f, 0x5f, 0xef, 0xa2, 0x3c, 0xcb, 0xfb, 0xdc, 0x9f, 0x63, + 0x40, 0x29, 0x98, 0x0c, 0xf0, 0x89, 0xc4, 0x31, 0xa6, 0x1b, + 0x16, 0xf1, 0x06, 0xf1, 0xec, 0xa6, 0xa5, 0x73, 0xde, 0x27, + 0x0e, 0xb3, 0xb2, 0xa4, 0x10, 0x9f, 0x13, 0x4f, 0x1a, 0x74, + 0x41, 0xe2, 0x47, 0xae, 0xcb, 0x2e, 0xbf, 0x71, 0x2e, 0x39, + 0x2c, 0xf0, 0xcc, 0xb0, 0x91, 0x4d, 0xcf, 0x13, 0x87, 0x89, + 0xc5, 0x52, 0x17, 0xcb, 0x5d, 0xcc, 0xca, 0x86, 0x4a, 0x3c, + 0x43, 0x1c, 0x51, 0x54, 0x8d, 0xf2, 0x85, 0x9c, 0xcb, 0x0a, + 0xe7, 0x2d, 0xce, 0x6a, 0xb5, 0xce, 0xda, 0xf7, 0xe4, 0x2f, + 0x0c, 0x15, 0xb4, 0x95, 0x0c, 0xd7, 0x69, 0x8e, 0x22, 0x81, + 0x25, 0x24, 0x91, 0x82, 0x08, 0x19, 0x75, 0x54, 0x50, 0x85, + 0x85, 0x28, 0xad, 0x1a, 0x29, 0x26, 0xd2, 0xb4, 0x1f, 0xf7, + 0xf0, 0x8f, 0x38, 0xfe, 0x14, 0xb9, 0x64, 0x72, 0x55, 0xc0, + 0xc8, 0xb1, 0x80, 0x1a, 0x54, 0x48, 0x8e, 0x1f, 0xfc, 0x0f, + 0x7e, 0x77, 0x6b, 0x16, 0xa7, 0xa7, 0xdc, 0xa4, 0x50, 0x1c, + 0xe8, 0x79, 0xb1, 0xed, 0x8f, 0x71, 0x20, 0xb8, 0x0b, 0xb4, + 0x1a, 0xb6, 0xfd, 0x7d, 0x6c, 0xdb, 0xad, 0x13, 0xc0, 0xff, + 0x0c, 0x5c, 0x69, 0x1d, 0x7f, 0xad, 0x09, 0xcc, 0x7d, 0x92, + 0xde, 0xe8, 0x68, 0x91, 0x23, 0x60, 0x70, 0x1b, 0xb8, 0xb8, + 0xee, 0x68, 0xf2, 0x1e, 0x70, 0xb9, 0x03, 0x0c, 0x3f, 0xe9, + 0x92, 0x21, 0x39, 0x92, 0x9f, 0xa6, 0x50, 0x2c, 0x02, 0xef, + 0x67, 0xf4, 0x4d, 0x79, 0x60, 0xe8, 0x16, 0xe8, 0x5f, 0x73, + 0x7b, 0x6b, 0xef, 0xe3, 0xf4, 0x01, 0xc8, 0x52, 0x57, 0xcb, + 0x37, 0xc0, 0xc1, 0x21, 0x30, 0x51, 0xa2, 0xec, 0x75, 0x8f, + 0x77, 0xf7, 0x75, 0xf7, 0xf6, 0xef, 0x99, 0x76, 0x7f, 0x3f, + 0x56, 0x49, 0x72, 0x9b, 0x36, 0xb9, 0xdb, 0x07, 0x00, 0x00, + 0x0d, 0x76, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, + 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, + 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3f, + 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x62, 0x65, + 0x67, 0x69, 0x6e, 0x3d, 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, + 0x69, 0x64, 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, + 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, 0x53, 0x7a, + 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, 0x39, 0x64, 0x22, 0x3f, + 0x3e, 0x0a, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, + 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, + 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, + 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, + 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, + 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x34, 0x2e, 0x34, 0x2e, + 0x30, 0x2d, 0x45, 0x78, 0x69, 0x76, 0x32, 0x22, 0x3e, 0x0a, + 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, + 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, + 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, + 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, + 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, + 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, + 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x3c, + 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, + 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, + 0x6d, 0x70, 0x4d, 0x4d, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, + 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, 0x2f, 0x22, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x73, + 0x74, 0x45, 0x76, 0x74, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, + 0x31, 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x2f, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x23, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x70, 0x75, 0x72, + 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x64, 0x63, 0x2f, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, + 0x31, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, + 0x6c, 0x6e, 0x73, 0x3a, 0x47, 0x49, 0x4d, 0x50, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x67, 0x69, 0x6d, 0x70, 0x2e, 0x6f, 0x72, 0x67, 0x2f, + 0x78, 0x6d, 0x70, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, + 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, + 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, + 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, + 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, + 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, + 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x6f, 0x63, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x67, + 0x69, 0x6d, 0x70, 0x3a, 0x64, 0x6f, 0x63, 0x69, 0x64, 0x3a, + 0x67, 0x69, 0x6d, 0x70, 0x3a, 0x64, 0x31, 0x66, 0x35, 0x65, + 0x32, 0x30, 0x66, 0x2d, 0x30, 0x66, 0x31, 0x34, 0x2d, 0x34, + 0x31, 0x35, 0x66, 0x2d, 0x62, 0x36, 0x35, 0x35, 0x2d, 0x62, + 0x37, 0x65, 0x63, 0x63, 0x63, 0x38, 0x38, 0x65, 0x33, 0x62, + 0x32, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x70, 0x4d, + 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, + 0x64, 0x3a, 0x32, 0x36, 0x35, 0x63, 0x31, 0x61, 0x36, 0x39, + 0x2d, 0x30, 0x34, 0x36, 0x64, 0x2d, 0x34, 0x31, 0x37, 0x64, + 0x2d, 0x39, 0x37, 0x34, 0x32, 0x2d, 0x33, 0x61, 0x39, 0x31, + 0x37, 0x63, 0x30, 0x66, 0x30, 0x30, 0x36, 0x62, 0x22, 0x0a, + 0x20, 0x20, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x4f, + 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, + 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x64, 0x63, 0x34, + 0x35, 0x63, 0x36, 0x31, 0x63, 0x2d, 0x62, 0x38, 0x36, 0x39, + 0x2d, 0x34, 0x66, 0x32, 0x31, 0x2d, 0x38, 0x62, 0x65, 0x61, + 0x2d, 0x66, 0x39, 0x35, 0x35, 0x65, 0x35, 0x63, 0x31, 0x33, + 0x62, 0x63, 0x66, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x64, 0x63, + 0x3a, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x3d, 0x22, 0x69, + 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x70, 0x6e, 0x67, 0x22, 0x0a, + 0x20, 0x20, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x3a, 0x41, 0x50, + 0x49, 0x3d, 0x22, 0x32, 0x2e, 0x30, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x47, 0x49, 0x4d, 0x50, 0x3a, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x3d, 0x22, 0x57, 0x69, 0x6e, 0x64, + 0x6f, 0x77, 0x73, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x47, 0x49, + 0x4d, 0x50, 0x3a, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, + 0x6d, 0x70, 0x3d, 0x22, 0x31, 0x37, 0x34, 0x34, 0x34, 0x32, + 0x38, 0x39, 0x36, 0x33, 0x38, 0x37, 0x36, 0x32, 0x34, 0x37, + 0x22, 0x0a, 0x20, 0x20, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x3a, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x32, + 0x2e, 0x31, 0x30, 0x2e, 0x33, 0x38, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, + 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x31, + 0x22, 0x0a, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x70, 0x3a, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, + 0x3d, 0x22, 0x47, 0x49, 0x4d, 0x50, 0x20, 0x32, 0x2e, 0x31, + 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x70, 0x3a, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x44, 0x61, + 0x74, 0x65, 0x3d, 0x22, 0x32, 0x30, 0x32, 0x35, 0x3a, 0x30, + 0x34, 0x3a, 0x31, 0x31, 0x54, 0x32, 0x32, 0x3a, 0x33, 0x36, + 0x3a, 0x30, 0x31, 0x2d, 0x30, 0x35, 0x3a, 0x30, 0x30, 0x22, + 0x0a, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, + 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3d, 0x22, + 0x32, 0x30, 0x32, 0x35, 0x3a, 0x30, 0x34, 0x3a, 0x31, 0x31, + 0x54, 0x32, 0x32, 0x3a, 0x33, 0x36, 0x3a, 0x30, 0x31, 0x2d, + 0x30, 0x35, 0x3a, 0x30, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x48, 0x69, + 0x73, 0x74, 0x6f, 0x72, 0x79, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x53, 0x65, 0x71, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, + 0x3a, 0x6c, 0x69, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x73, 0x74, 0x45, 0x76, 0x74, 0x3a, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x3d, 0x22, 0x73, 0x61, 0x76, 0x65, 0x64, 0x22, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x45, + 0x76, 0x74, 0x3a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x3d, 0x22, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3a, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, + 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x62, 0x39, 0x32, + 0x61, 0x61, 0x63, 0x38, 0x66, 0x2d, 0x34, 0x30, 0x37, 0x64, + 0x2d, 0x34, 0x39, 0x33, 0x64, 0x2d, 0x62, 0x62, 0x31, 0x33, + 0x2d, 0x35, 0x38, 0x36, 0x31, 0x33, 0x30, 0x32, 0x66, 0x66, + 0x31, 0x36, 0x35, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3a, 0x73, 0x6f, 0x66, + 0x74, 0x77, 0x61, 0x72, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x3d, 0x22, 0x47, 0x69, 0x6d, 0x70, 0x20, 0x32, 0x2e, 0x31, + 0x30, 0x20, 0x28, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, + 0x29, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, + 0x74, 0x45, 0x76, 0x74, 0x3a, 0x77, 0x68, 0x65, 0x6e, 0x3d, + 0x22, 0x32, 0x30, 0x32, 0x35, 0x2d, 0x30, 0x34, 0x2d, 0x31, + 0x31, 0x54, 0x32, 0x32, 0x3a, 0x33, 0x36, 0x3a, 0x30, 0x33, + 0x22, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x72, 0x64, 0x66, 0x3a, 0x53, 0x65, 0x71, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, + 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x3e, 0x0a, 0x20, + 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, + 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, + 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, + 0x65, 0x74, 0x61, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x0a, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x3d, 0x22, 0x77, 0x22, + 0x3f, 0x3e, 0x1b, 0x35, 0x9e, 0x89, 0x00, 0x00, 0x00, 0x0c, + 0x50, 0x4c, 0x54, 0x45, 0x00, 0x00, 0x28, 0xb0, 0xb0, 0xb0, + 0x40, 0x40, 0xa0, 0xd8, 0xd8, 0xd8, 0x8f, 0x37, 0x17, 0x71, + 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, + 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, + 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, + 0xe9, 0x04, 0x0c, 0x03, 0x24, 0x03, 0x28, 0x6e, 0xf7, 0xd7, + 0x00, 0x00, 0x00, 0x41, 0x49, 0x44, 0x41, 0x54, 0x18, 0xd3, + 0x63, 0x60, 0x40, 0x02, 0x8c, 0x0e, 0xe8, 0x0c, 0x11, 0x11, + 0x28, 0xc3, 0x81, 0x11, 0x27, 0x83, 0x04, 0x10, 0x02, 0x22, + 0x44, 0x81, 0xe6, 0x33, 0x30, 0x68, 0xad, 0x00, 0x1a, 0x81, + 0x60, 0x00, 0xed, 0x59, 0xf5, 0x0a, 0x68, 0x1f, 0x88, 0xb1, + 0x7a, 0x15, 0x88, 0x81, 0xa9, 0x06, 0xae, 0x9d, 0x54, 0x80, + 0xc7, 0xf1, 0x70, 0x0f, 0x62, 0xfa, 0x1d, 0x0c, 0x00, 0x4b, + 0x12, 0x0b, 0x32, 0x88, 0xee, 0x7e, 0x62, 0x00, 0x00, 0x00, + 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, +}; + +ox::SpanView WindowIcon32() noexcept { return WindowIcon32Data; } + +static constexpr ox::Array WindowIcon40Data { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, + 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x28, + 0x00, 0x00, 0x00, 0x28, 0x08, 0x03, 0x00, 0x00, 0x00, 0xbb, + 0x20, 0x48, 0x5f, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, + 0x42, 0x01, 0xd9, 0xc9, 0x2c, 0x7f, 0x00, 0x00, 0x00, 0x04, + 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, + 0x61, 0x05, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52, 0x4d, + 0x00, 0x00, 0x7a, 0x26, 0x00, 0x00, 0x80, 0x84, 0x00, 0x00, + 0xfa, 0x00, 0x00, 0x00, 0x80, 0xe8, 0x00, 0x00, 0x75, 0x30, + 0x00, 0x00, 0xea, 0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, + 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x00, 0x00, 0x00, 0x0c, + 0x50, 0x4c, 0x54, 0x45, 0x00, 0x00, 0x28, 0xb0, 0xb0, 0xb0, + 0x40, 0x40, 0xa0, 0xd8, 0xd8, 0xd8, 0x8f, 0x37, 0x17, 0x71, + 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, + 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, + 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, + 0xe9, 0x04, 0x0c, 0x03, 0x00, 0x24, 0x7c, 0x8c, 0xa3, 0x1a, + 0x00, 0x00, 0x00, 0x8c, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, + 0xdd, 0x94, 0xe1, 0x0e, 0x80, 0x20, 0x08, 0x84, 0xf1, 0xde, + 0xff, 0xa1, 0xc3, 0xcc, 0x25, 0x42, 0x7a, 0x36, 0xff, 0x14, + 0x9b, 0x35, 0xc7, 0x37, 0x20, 0xa0, 0x13, 0x79, 0x6f, 0x50, + 0xa3, 0xc0, 0xa4, 0xc6, 0xc4, 0x4b, 0x09, 0xf9, 0xcc, 0xf3, + 0x66, 0x46, 0x1f, 0x98, 0xc7, 0x6b, 0xdf, 0x23, 0xb0, 0x16, + 0xba, 0x09, 0x94, 0x5a, 0x1b, 0xd9, 0xa1, 0x4f, 0xdb, 0x60, + 0x0d, 0x8c, 0x4b, 0xbb, 0xf7, 0xd4, 0x36, 0xe3, 0x42, 0x77, + 0x6b, 0xf7, 0xec, 0x74, 0x41, 0x82, 0x29, 0x00, 0x96, 0xbc, + 0xa7, 0x05, 0xcf, 0xe5, 0x20, 0x70, 0x9b, 0x02, 0x53, 0x5e, + 0xe1, 0x2c, 0x78, 0x21, 0x0e, 0x2c, 0x5c, 0x04, 0x76, 0xa9, + 0x0b, 0xe7, 0x53, 0xd3, 0x1f, 0xb3, 0xd0, 0x1e, 0xba, 0xe1, + 0xfc, 0x08, 0xff, 0xbb, 0xc2, 0xdc, 0xef, 0xba, 0x5f, 0x29, + 0x68, 0x91, 0xa2, 0x65, 0x8f, 0x17, 0x52, 0x5e, 0x9a, 0x17, + 0xc4, 0x3e, 0xb6, 0x03, 0x4e, 0x6b, 0x01, 0xa7, 0x1c, 0x52, + 0x2e, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, + 0xae, 0x42, 0x60, 0x82, +}; + +ox::SpanView WindowIcon40() noexcept { return WindowIcon40Data; } + +static constexpr ox::Array WindowIcon48Data { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, + 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x30, + 0x00, 0x00, 0x00, 0x30, 0x02, 0x03, 0x00, 0x00, 0x00, 0x2a, + 0x6c, 0x11, 0x14, 0x00, 0x00, 0x00, 0x0c, 0x50, 0x4c, 0x54, + 0x45, 0x00, 0x00, 0x28, 0xb0, 0xb0, 0xb0, 0x40, 0x40, 0xa0, + 0xd8, 0xd8, 0xd8, 0x8f, 0x37, 0x17, 0x71, 0x00, 0x00, 0x00, + 0x52, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xbd, 0x92, 0xb1, + 0x0e, 0x80, 0x40, 0x08, 0x43, 0x5d, 0x6e, 0xf1, 0xeb, 0xfa, + 0x89, 0xce, 0x5d, 0xfc, 0x3f, 0x27, 0x05, 0xe3, 0x40, 0xa4, + 0x18, 0x6f, 0xa0, 0xc9, 0xe5, 0x78, 0x0c, 0xa4, 0xa1, 0x2c, + 0x1f, 0x1a, 0x50, 0x80, 0x21, 0xe0, 0x2a, 0xf1, 0x17, 0x5a, + 0xf4, 0xd8, 0xf7, 0x3f, 0x80, 0x3d, 0xf2, 0x36, 0x15, 0xc0, + 0x78, 0xe5, 0xb1, 0x79, 0xfb, 0x0d, 0x3b, 0x13, 0xd0, 0xd3, + 0x0a, 0x07, 0x9d, 0x6b, 0x98, 0xc9, 0x07, 0x2a, 0xed, 0xe2, + 0x42, 0x32, 0x9d, 0xf4, 0x06, 0x18, 0x93, 0x18, 0xd8, 0x5c, + 0xbc, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, + 0x42, 0x60, 0x82, +}; + +ox::SpanView WindowIcon48() noexcept { return WindowIcon48Data; } + +static constexpr ox::Array WindowIcon128Data { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, + 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x80, 0x02, 0x03, 0x00, 0x00, 0x00, 0xbe, + 0x50, 0x89, 0x58, 0x00, 0x00, 0x0e, 0x86, 0x7a, 0x54, 0x58, + 0x74, 0x52, 0x61, 0x77, 0x20, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x65, 0x78, + 0x69, 0x66, 0x00, 0x00, 0x78, 0xda, 0xd5, 0x99, 0x59, 0x72, + 0x1c, 0xbb, 0x92, 0x44, 0xff, 0xb1, 0x8a, 0x5e, 0x02, 0xe6, + 0x00, 0x96, 0x83, 0xd1, 0xac, 0x77, 0xd0, 0xcb, 0xef, 0x13, + 0x40, 0x16, 0x45, 0x52, 0x94, 0xae, 0xa8, 0xfb, 0x7e, 0x1e, + 0xcb, 0xc8, 0xac, 0x21, 0x0b, 0x43, 0x84, 0x87, 0xbb, 0x07, + 0x68, 0xd6, 0xff, 0xfd, 0xef, 0x36, 0xff, 0xc3, 0x4f, 0x14, + 0x89, 0x26, 0x26, 0x29, 0xb9, 0xe6, 0x6c, 0xf9, 0x89, 0x35, + 0x56, 0xdf, 0x78, 0x52, 0xec, 0xfd, 0x69, 0xe7, 0xaf, 0xb3, + 0xf1, 0xfc, 0x3d, 0x3f, 0xaf, 0x8f, 0x78, 0xfd, 0xe1, 0x7d, + 0xf3, 0xf6, 0x81, 0xe7, 0xad, 0xc0, 0x35, 0x3c, 0x5f, 0xc8, + 0xcf, 0xfd, 0xaf, 0xf7, 0xdd, 0xdb, 0x00, 0xf7, 0xd2, 0x78, + 0x96, 0xde, 0x0f, 0x34, 0x9e, 0x0f, 0xfa, 0xc7, 0x0f, 0x6a, + 0x7c, 0xc6, 0x2f, 0x9f, 0x06, 0x7a, 0x26, 0x0a, 0xba, 0x22, + 0xcf, 0x93, 0xf9, 0x0c, 0x54, 0x9f, 0x81, 0x82, 0xbf, 0x1f, + 0xb8, 0x67, 0x80, 0x76, 0xb7, 0x65, 0x73, 0x2d, 0xf2, 0x7e, + 0x0b, 0x7d, 0xdd, 0xeb, 0x7c, 0xed, 0xa4, 0xdc, 0x5f, 0xa3, + 0x7f, 0x82, 0x9c, 0xb1, 0xdf, 0x06, 0xf9, 0xfc, 0x3a, 0x0a, + 0xd1, 0x9b, 0x89, 0x37, 0x83, 0xf7, 0x2b, 0xb8, 0x60, 0xf9, + 0x1b, 0x82, 0xbf, 0x0b, 0x08, 0xfa, 0xeb, 0x4d, 0x68, 0x7c, + 0xe0, 0xcf, 0xdf, 0xca, 0x8d, 0x2e, 0x08, 0xcf, 0x13, 0x8f, + 0xf3, 0xce, 0xb3, 0x12, 0x02, 0xf2, 0x55, 0x9c, 0xde, 0x7e, + 0xb8, 0xcf, 0x6c, 0x5d, 0x6a, 0xfc, 0xf2, 0xa6, 0x0f, 0x59, + 0x79, 0x7b, 0xe6, 0xbe, 0x7e, 0xdf, 0x7c, 0xce, 0x56, 0xf4, + 0xcf, 0x2d, 0xe1, 0x53, 0x90, 0xf3, 0xdb, 0xf5, 0xcb, 0xf7, + 0x8d, 0x4b, 0x5f, 0x67, 0xe5, 0x84, 0xfe, 0xdd, 0xcc, 0xb1, + 0x3c, 0xcf, 0xfc, 0xc7, 0xf7, 0x53, 0x71, 0xcf, 0x8a, 0x3e, + 0x45, 0x5f, 0x7f, 0xf7, 0x9e, 0x65, 0x9f, 0x3d, 0xb3, 0x8b, + 0x16, 0x33, 0xa1, 0xce, 0xcf, 0xa6, 0x5e, 0x5b, 0x39, 0xcf, + 0xb8, 0xaf, 0x33, 0x85, 0x4e, 0x5d, 0x0c, 0x4b, 0xcb, 0x56, + 0xf8, 0x4d, 0x0c, 0x21, 0xe7, 0x51, 0x79, 0x14, 0x50, 0x3d, + 0xc8, 0xda, 0xb4, 0xc3, 0x76, 0x1e, 0xc3, 0x55, 0xe7, 0x49, + 0xd7, 0x76, 0xd1, 0x4d, 0xd7, 0xdc, 0x76, 0xeb, 0x5c, 0x87, + 0x1b, 0x2c, 0x31, 0xfa, 0x65, 0xbc, 0xf0, 0xc4, 0xfb, 0xe1, + 0xc3, 0x79, 0xb3, 0x04, 0xf1, 0xd5, 0x8f, 0xa0, 0xf9, 0x8b, + 0xfa, 0x70, 0xdb, 0x4b, 0xa8, 0x61, 0x86, 0x42, 0x6e, 0xc7, + 0x49, 0x7b, 0x0c, 0xfe, 0x6d, 0x2d, 0xee, 0x4c, 0x5b, 0xed, + 0x30, 0x67, 0xb6, 0xc2, 0xcc, 0xd3, 0x71, 0xab, 0x77, 0x0c, + 0xa6, 0x70, 0xf8, 0xf6, 0xc3, 0x7c, 0xf7, 0x0b, 0x7b, 0x6b, + 0x29, 0x10, 0xe0, 0xf2, 0x16, 0x2b, 0xd6, 0xe5, 0xbd, 0x06, + 0x9b, 0x65, 0x68, 0xe6, 0xf4, 0x2f, 0xb7, 0x91, 0x11, 0xb7, + 0x9f, 0xa0, 0xa6, 0x13, 0xe0, 0xd7, 0xe3, 0xf3, 0x8f, 0xe6, + 0x35, 0x90, 0xc1, 0xa4, 0x51, 0xd6, 0x12, 0xa9, 0x04, 0xb6, + 0xdf, 0x21, 0x7a, 0x72, 0x3f, 0x98, 0x20, 0x9c, 0x44, 0x07, + 0x6e, 0x4c, 0x5c, 0x6f, 0xb9, 0x38, 0x99, 0xcf, 0x00, 0x84, + 0x88, 0xa9, 0x13, 0x8b, 0x71, 0x81, 0x0c, 0x90, 0x35, 0x17, + 0x92, 0xcb, 0xce, 0x8a, 0xf7, 0xe2, 0x1c, 0x81, 0x2c, 0x24, + 0xa8, 0xb1, 0x74, 0x1f, 0xa2, 0xef, 0x64, 0xc0, 0xa5, 0xe4, + 0x27, 0x8b, 0xf4, 0x31, 0x84, 0x4c, 0x6e, 0x8a, 0xd7, 0xa9, + 0xf9, 0x8a, 0xb8, 0x73, 0xab, 0x4f, 0x9e, 0xb7, 0x0d, 0xef, + 0x43, 0x66, 0x64, 0x22, 0x85, 0x4c, 0x9d, 0x15, 0x32, 0xd4, + 0x48, 0x56, 0x8c, 0x09, 0xfc, 0x48, 0x2c, 0x60, 0xa8, 0x51, + 0x7a, 0x31, 0xa5, 0x94, 0x93, 0xa4, 0x92, 0x6a, 0x6a, 0x39, + 0xe4, 0x98, 0x53, 0xce, 0x59, 0xb2, 0x92, 0x62, 0x93, 0x00, + 0x43, 0x4a, 0x92, 0x2c, 0x22, 0x45, 0xaa, 0xb4, 0x12, 0x4a, + 0x2c, 0xa9, 0xe4, 0x22, 0xa5, 0x94, 0x5a, 0x5a, 0xf5, 0x35, + 0x40, 0x9a, 0xa9, 0xe6, 0x2a, 0xb5, 0xd4, 0x5a, 0x5b, 0x63, + 0xce, 0xc6, 0xc8, 0x8d, 0x6f, 0x37, 0x6e, 0x68, 0xad, 0xfb, + 0x1e, 0x7a, 0xec, 0xc9, 0xf4, 0xdc, 0xa5, 0x97, 0x5e, 0x7b, + 0x1b, 0xc0, 0x67, 0xc4, 0x91, 0x46, 0x1e, 0x32, 0xca, 0xa8, + 0xa3, 0x4d, 0x3f, 0xc3, 0x84, 0x3f, 0x66, 0x9e, 0x32, 0xcb, + 0xac, 0xb3, 0x2d, 0xb7, 0x80, 0xd2, 0x8a, 0x2b, 0xad, 0xbc, + 0x64, 0x95, 0x55, 0x57, 0xdb, 0x40, 0x6d, 0x07, 0xb3, 0xe3, + 0x4e, 0x3b, 0x6f, 0xd9, 0x65, 0xd7, 0xdd, 0xde, 0xb2, 0xf6, + 0xa4, 0xf5, 0xa7, 0xc7, 0x37, 0xb2, 0xe6, 0x9e, 0xac, 0xf9, + 0x93, 0x29, 0xbd, 0x51, 0xde, 0xb2, 0xc6, 0xbb, 0x22, 0xaf, + 0x21, 0x9c, 0xd2, 0x49, 0xd2, 0x9c, 0x91, 0x30, 0x6f, 0xa2, + 0x23, 0xe3, 0xa2, 0x29, 0x00, 0xd0, 0x5e, 0x73, 0x66, 0x8b, + 0x8b, 0xd1, 0x6b, 0xe6, 0x34, 0x67, 0xb6, 0x7a, 0xaa, 0x22, + 0x79, 0x16, 0x99, 0x34, 0x67, 0xd3, 0x69, 0xc6, 0xc8, 0x60, + 0x5c, 0xce, 0xa7, 0xed, 0x5e, 0xb9, 0x33, 0xfe, 0x66, 0x54, + 0x33, 0xf7, 0xaf, 0xf2, 0x66, 0x24, 0x7e, 0xc8, 0x9b, 0xff, + 0xdb, 0xcc, 0x19, 0x4d, 0xdd, 0x37, 0x33, 0xf7, 0x73, 0xde, + 0xbe, 0xca, 0xda, 0x54, 0x19, 0x1a, 0x27, 0x63, 0xb7, 0x0a, + 0x35, 0xa8, 0x36, 0x50, 0x7d, 0x1b, 0x92, 0xf3, 0xa5, 0xf9, + 0x3e, 0x3d, 0xcc, 0x53, 0xf4, 0xb9, 0xfd, 0x71, 0x35, 0x9f, + 0xdf, 0xf8, 0xf9, 0xba, 0x46, 0x5f, 0xae, 0xb3, 0x75, 0xe6, + 0x24, 0xb8, 0xbb, 0x94, 0x99, 0x07, 0xe9, 0x2d, 0x32, 0x66, + 0xa9, 0x3d, 0x8c, 0xbc, 0x72, 0xda, 0x66, 0x59, 0x09, 0x7b, + 0x78, 0x7c, 0x80, 0x65, 0xae, 0xd2, 0xf7, 0x72, 0x71, 0x4b, + 0x89, 0x3c, 0x91, 0x11, 0x36, 0x2b, 0xa1, 0xe6, 0xba, 0x5e, + 0x47, 0x9a, 0xc4, 0xbf, 0xb6, 0x92, 0xda, 0x9e, 0x31, 0xf7, + 0x14, 0x56, 0xee, 0x2c, 0x70, 0x55, 0x26, 0x28, 0x26, 0x85, + 0x49, 0x1e, 0xf5, 0xc6, 0xba, 0x21, 0xe1, 0x51, 0x26, 0x2f, + 0xb6, 0x96, 0x79, 0x5a, 0xa1, 0x6f, 0xe7, 0x75, 0xb8, 0xc6, + 0xce, 0x85, 0xe0, 0xe5, 0x99, 0x53, 0x93, 0x18, 0x56, 0x8a, + 0xb1, 0x97, 0x45, 0x8e, 0x83, 0x50, 0xcd, 0x6e, 0x2f, 0x0f, + 0xd5, 0xf6, 0x1a, 0x62, 0x0a, 0xb5, 0xd5, 0xb9, 0x26, 0x1c, + 0xb1, 0x8a, 0xb8, 0x1e, 0x93, 0x23, 0xdd, 0xa5, 0xf8, 0x7f, + 0xde, 0xf9, 0x73, 0x35, 0x7f, 0x7a, 0xe3, 0xa7, 0x6b, 0xef, + 0x5e, 0x37, 0xc0, 0x86, 0x03, 0xcb, 0x94, 0x41, 0xf5, 0x37, + 0xb2, 0xdd, 0xc8, 0xab, 0xcf, 0xab, 0xf0, 0x7c, 0x81, 0x1a, + 0xf4, 0xa1, 0xb4, 0x0d, 0xdc, 0xe7, 0x70, 0x6d, 0x85, 0x7c, + 0xc2, 0x50, 0xc2, 0x3c, 0x11, 0xf3, 0x36, 0x55, 0x81, 0x6f, + 0x4f, 0x00, 0x62, 0x1e, 0x35, 0xb9, 0xd0, 0xea, 0x20, 0x6b, + 0x3b, 0xb3, 0xdd, 0x89, 0x54, 0x50, 0xab, 0x6d, 0x97, 0x94, + 0x35, 0x20, 0x40, 0xd8, 0xaf, 0x0e, 0x1e, 0xc6, 0x5c, 0x31, + 0xf5, 0xe8, 0x88, 0x08, 0x20, 0x9e, 0xb3, 0x23, 0x11, 0xc4, + 0x85, 0x2a, 0x09, 0x95, 0x30, 0x02, 0x30, 0x61, 0x58, 0xe4, + 0x88, 0x6f, 0xeb, 0x04, 0x67, 0xfc, 0xbd, 0xa2, 0xe3, 0x05, + 0xcf, 0x4a, 0x69, 0x61, 0x85, 0x13, 0xfc, 0xe2, 0xe4, 0x24, + 0x0d, 0x88, 0x51, 0x7c, 0x93, 0x9c, 0x4b, 0xaa, 0x27, 0x1d, + 0x7d, 0xae, 0x6a, 0x41, 0xee, 0xf4, 0xbc, 0x56, 0xf2, 0xef, + 0x20, 0x82, 0xfa, 0xdb, 0xe1, 0xde, 0xaf, 0xe6, 0x02, 0x60, + 0x70, 0x5d, 0xde, 0x77, 0xd6, 0xe9, 0x70, 0x87, 0x67, 0x9d, + 0xa5, 0x0b, 0xac, 0xcc, 0x3a, 0x6d, 0x9c, 0x4b, 0x66, 0x8f, + 0xbb, 0xea, 0x3a, 0xd3, 0xec, 0x3d, 0x1a, 0x4f, 0x6a, 0x5d, + 0x4d, 0x5e, 0x90, 0x65, 0x16, 0x8a, 0x00, 0xa6, 0x1d, 0x9b, + 0x0c, 0xb7, 0xce, 0x90, 0x10, 0xc6, 0x00, 0x52, 0xf6, 0xac, + 0xb3, 0x51, 0xaa, 0x2d, 0x10, 0xad, 0xb5, 0x63, 0x24, 0xf7, + 0x43, 0x88, 0x32, 0x5b, 0x9a, 0x3d, 0x55, 0xb3, 0xed, 0xca, + 0x35, 0xf8, 0xd5, 0x82, 0xb4, 0xda, 0xb3, 0x2f, 0x0c, 0xbb, + 0x92, 0xdd, 0x29, 0xdb, 0x3e, 0x6b, 0xd9, 0x68, 0x42, 0x2f, + 0xb3, 0x6d, 0x08, 0xe0, 0xec, 0x95, 0x3c, 0xbd, 0xed, 0xf6, + 0xae, 0xff, 0xee, 0xd8, 0xe8, 0x96, 0x5b, 0x64, 0x5d, 0xa1, + 0xf5, 0xd9, 0x06, 0x2b, 0xb7, 0x8a, 0x21, 0x25, 0x1f, 0x7b, + 0x4a, 0x0b, 0x53, 0xf1, 0x27, 0x57, 0xf3, 0xa7, 0x37, 0x72, + 0x0d, 0x6b, 0x06, 0x7d, 0xba, 0x3d, 0x60, 0x28, 0xa7, 0xee, + 0x52, 0x62, 0x63, 0xab, 0x43, 0x1a, 0xc6, 0x0f, 0x02, 0x9f, + 0xe2, 0xee, 0x63, 0x6e, 0x5f, 0xe7, 0xac, 0x29, 0x86, 0x69, + 0x01, 0x86, 0xcc, 0x15, 0xd2, 0x80, 0x08, 0x61, 0x97, 0xb2, + 0x46, 0x69, 0x79, 0x51, 0x9e, 0x32, 0x32, 0x72, 0xac, 0xa1, + 0x83, 0x30, 0x96, 0x4a, 0x33, 0x81, 0x0b, 0x6d, 0x57, 0xd3, + 0x96, 0x82, 0x14, 0xb6, 0x1d, 0xb1, 0x1e, 0x88, 0x2a, 0x42, + 0x7b, 0x03, 0x22, 0x7d, 0x1d, 0x84, 0x66, 0x2a, 0x58, 0x11, + 0x1a, 0x24, 0x27, 0x10, 0x6a, 0x0f, 0x42, 0x9b, 0x96, 0x76, + 0x75, 0x94, 0xaf, 0xb8, 0xb4, 0x96, 0xa3, 0xfa, 0x7f, 0x9b, + 0xa1, 0x5d, 0xef, 0x3c, 0x37, 0xc8, 0x77, 0x26, 0xaa, 0x52, + 0x6b, 0x01, 0x30, 0xb1, 0x55, 0xe0, 0x46, 0x2d, 0x14, 0x36, + 0x61, 0x12, 0xe0, 0x10, 0x28, 0x60, 0xd4, 0xe6, 0x85, 0x59, + 0x26, 0xb3, 0x68, 0xc2, 0xca, 0x6e, 0xf0, 0xed, 0x8d, 0x87, + 0xb8, 0x27, 0x1e, 0xce, 0xe7, 0x0e, 0x79, 0xfa, 0x3d, 0xf2, + 0x4e, 0xb2, 0x7b, 0x23, 0x1c, 0x05, 0xb0, 0x27, 0x38, 0x7b, + 0x52, 0x88, 0x63, 0xcf, 0xc9, 0x0a, 0x81, 0x1b, 0x95, 0xe3, + 0x89, 0x09, 0xe1, 0x18, 0xb9, 0xce, 0xb1, 0x4b, 0xbf, 0x65, + 0xba, 0x16, 0xae, 0xec, 0xb7, 0x85, 0x6c, 0xfe, 0xa2, 0xf2, + 0x9f, 0x2b, 0xd0, 0x5a, 0x2c, 0x57, 0x83, 0xb1, 0x01, 0xa4, + 0x2d, 0x71, 0xc6, 0x2e, 0xec, 0x27, 0x6f, 0xef, 0xb3, 0xa3, + 0x6c, 0x86, 0x78, 0x36, 0xd0, 0xd7, 0xc9, 0x72, 0x88, 0xa7, + 0xae, 0x0e, 0xc3, 0x12, 0x5a, 0x4d, 0xe2, 0x61, 0x58, 0x37, + 0x16, 0x2c, 0xc7, 0x20, 0x40, 0x1b, 0x69, 0x15, 0x83, 0x0f, + 0x55, 0xe4, 0xfa, 0xe6, 0x2b, 0xe6, 0xd3, 0xef, 0x7c, 0x30, + 0x5e, 0x3e, 0x83, 0x32, 0x10, 0x72, 0x8a, 0x7f, 0x79, 0x3b, + 0x61, 0xe6, 0x50, 0x97, 0x0f, 0xa9, 0x4f, 0x18, 0x97, 0xe9, + 0x31, 0x36, 0x63, 0x9b, 0x40, 0x9d, 0xf4, 0x5d, 0xdc, 0x80, + 0x1b, 0xa0, 0x9c, 0xa1, 0xb4, 0x92, 0x0a, 0xdc, 0xb9, 0x95, + 0x81, 0x5a, 0x04, 0x2a, 0xd8, 0xa3, 0xc2, 0x97, 0xfa, 0x40, + 0xe7, 0x16, 0x95, 0xed, 0x86, 0xa6, 0x93, 0x09, 0x10, 0x35, + 0x9b, 0x18, 0x80, 0x2a, 0x9e, 0x26, 0x17, 0xf7, 0x7d, 0x5e, + 0xfd, 0xe2, 0x6a, 0xda, 0xdf, 0x47, 0xfb, 0xbf, 0x7b, 0xa0, + 0x3f, 0x53, 0x59, 0x15, 0x59, 0xf3, 0xb7, 0x2a, 0x0b, 0xe1, + 0xbe, 0x63, 0x14, 0x6d, 0xb3, 0xde, 0x93, 0xca, 0x3f, 0x70, + 0x4a, 0x7d, 0xe3, 0x14, 0xe4, 0xa4, 0xa0, 0x4e, 0xcc, 0x4d, + 0xf3, 0x09, 0xae, 0xc6, 0xc4, 0xb1, 0x59, 0xda, 0x8f, 0xbe, + 0x2b, 0xc6, 0x06, 0x62, 0x59, 0x3e, 0x15, 0x08, 0x24, 0x9f, + 0x5d, 0x29, 0x21, 0xa3, 0xd9, 0x88, 0x86, 0x73, 0x4b, 0xf9, + 0xb8, 0x4e, 0x4a, 0x00, 0xbd, 0xaf, 0x01, 0x3e, 0x86, 0x7a, + 0xe8, 0xbe, 0x98, 0xed, 0xec, 0xc8, 0x28, 0xac, 0x17, 0xf5, + 0x8b, 0xe5, 0x49, 0xb9, 0xcf, 0x91, 0x18, 0xf0, 0x4b, 0xae, + 0x5d, 0x75, 0xc3, 0x23, 0x3e, 0x13, 0x96, 0x1e, 0x59, 0x53, + 0xae, 0xc0, 0x70, 0xfa, 0x40, 0x81, 0x23, 0xf6, 0xc3, 0x20, + 0x0a, 0x85, 0xc5, 0x66, 0x6e, 0x9c, 0x01, 0xb5, 0x99, 0x95, + 0x26, 0x3b, 0x87, 0xaa, 0x46, 0x08, 0xbd, 0x59, 0xc3, 0xf1, + 0xf6, 0x56, 0xf1, 0xb9, 0x3a, 0xcb, 0x8b, 0x42, 0x1f, 0x30, + 0x4b, 0x68, 0xf9, 0x44, 0x6f, 0x77, 0x3e, 0x8e, 0xd1, 0xf0, + 0xca, 0xb5, 0xd9, 0x57, 0xeb, 0x01, 0x46, 0x4c, 0x63, 0x14, + 0x1c, 0x19, 0xf3, 0x53, 0x52, 0x9d, 0xb5, 0xcf, 0xeb, 0x53, + 0xf2, 0x91, 0xca, 0xb9, 0x57, 0x88, 0x02, 0x5d, 0x11, 0x2a, + 0x7d, 0x1f, 0x66, 0x53, 0xda, 0x75, 0x1d, 0x7e, 0x32, 0x10, + 0x58, 0x63, 0xd4, 0x86, 0x2a, 0x45, 0x71, 0x12, 0x13, 0xec, + 0xd6, 0x3a, 0x0a, 0x95, 0x95, 0x51, 0x73, 0x9c, 0x74, 0x17, + 0x36, 0xcf, 0xea, 0x24, 0x2f, 0xbb, 0x76, 0x0e, 0xa7, 0xd6, + 0x85, 0xd0, 0x8f, 0x94, 0xc3, 0x0f, 0xf6, 0x32, 0xd0, 0xd7, + 0xc5, 0xcd, 0x7b, 0xd5, 0x80, 0x6a, 0x80, 0x02, 0x0d, 0x31, + 0x53, 0xda, 0x0d, 0x93, 0x44, 0xac, 0x6f, 0xab, 0x2b, 0x67, + 0xc8, 0x7b, 0xe1, 0x48, 0x2f, 0x0d, 0xbf, 0xf3, 0x24, 0xd1, + 0xfc, 0x8e, 0x87, 0xdf, 0xd1, 0x70, 0x21, 0x82, 0x4b, 0x34, + 0x1d, 0x45, 0xa4, 0x03, 0x19, 0xab, 0x9c, 0x1a, 0x31, 0x67, + 0x38, 0x53, 0x1f, 0x56, 0x33, 0xca, 0x5f, 0x53, 0xca, 0x2c, + 0x89, 0x20, 0x62, 0x50, 0xb7, 0xa4, 0xbe, 0x12, 0x68, 0x46, + 0x2e, 0xa4, 0x21, 0x96, 0x55, 0xf3, 0xdd, 0x27, 0xb9, 0xc2, + 0x8b, 0x27, 0xfa, 0x20, 0x12, 0x5e, 0x66, 0xe8, 0x60, 0x02, + 0x59, 0x39, 0xfa, 0x0e, 0xa8, 0xab, 0x59, 0x8f, 0x1b, 0x29, + 0x1a, 0xfb, 0xfc, 0x78, 0x91, 0x4e, 0xa7, 0x32, 0x77, 0x61, + 0x7d, 0xe4, 0xe7, 0x45, 0x64, 0xb9, 0xe3, 0x94, 0xe9, 0xaf, + 0x0f, 0x91, 0xe1, 0xea, 0xea, 0xe1, 0x31, 0xab, 0xa5, 0xc3, + 0xa2, 0x8d, 0x0a, 0x0e, 0x7a, 0x0d, 0xe6, 0x27, 0x11, 0xaf, + 0x1f, 0x8d, 0xdf, 0x4f, 0xbe, 0xec, 0xd7, 0xb6, 0xcc, 0x7c, + 0xcf, 0x97, 0xfd, 0xda, 0x96, 0x99, 0xef, 0xf9, 0xb2, 0x5f, + 0xdb, 0x32, 0xf3, 0x3d, 0x5f, 0xf6, 0x6b, 0x5b, 0x66, 0xae, + 0x2f, 0xc3, 0x32, 0xfd, 0x50, 0x9f, 0x7f, 0xd6, 0x9e, 0x97, + 0xf4, 0x74, 0x52, 0x46, 0x33, 0xa7, 0xe1, 0x35, 0x04, 0xe5, + 0xd1, 0xd0, 0xee, 0xae, 0x33, 0xa2, 0xc3, 0x7b, 0xae, 0x0e, + 0x7b, 0xa6, 0x45, 0x75, 0x76, 0x73, 0x4b, 0xea, 0x58, 0x42, + 0x42, 0x4a, 0x3b, 0x5d, 0x8b, 0x4f, 0x3d, 0xcd, 0xe0, 0x1d, + 0x15, 0x9c, 0xcc, 0xec, 0xde, 0x2f, 0x18, 0x66, 0x14, 0x05, + 0x7f, 0xdc, 0xb9, 0x51, 0xab, 0x49, 0xf0, 0xf7, 0xab, 0x00, + 0x87, 0x0e, 0x88, 0x5c, 0x7f, 0x11, 0x42, 0xb7, 0x24, 0xec, + 0x44, 0x05, 0x8b, 0x9f, 0xfa, 0xad, 0x43, 0x3d, 0x9c, 0x40, + 0xb2, 0x2b, 0x85, 0x98, 0x6a, 0x15, 0xa1, 0xbc, 0x20, 0xab, + 0xc1, 0x32, 0xd3, 0x68, 0x9a, 0xa6, 0x00, 0x54, 0xc4, 0x83, + 0x5c, 0x5a, 0xc8, 0x19, 0x81, 0x73, 0xa3, 0x8f, 0x6a, 0x3b, + 0x04, 0xdc, 0xe9, 0xb5, 0x80, 0x03, 0xe0, 0xbf, 0x2c, 0xa0, + 0xd1, 0xf3, 0x3b, 0xfc, 0xde, 0x58, 0x83, 0x5e, 0x92, 0x22, + 0xa0, 0x04, 0x83, 0x8f, 0x98, 0x49, 0xe0, 0x1d, 0xab, 0x1b, + 0x63, 0xb5, 0x69, 0xd1, 0xf4, 0xa4, 0x05, 0x6c, 0xa1, 0xc0, + 0xde, 0x68, 0x49, 0x3a, 0xed, 0xa7, 0x55, 0x06, 0xc2, 0x11, + 0x25, 0xbc, 0xd0, 0xce, 0xc6, 0xae, 0x96, 0xde, 0x53, 0x02, + 0xe1, 0xc8, 0xbd, 0x27, 0x02, 0x49, 0x20, 0x12, 0x5b, 0x81, + 0xff, 0x28, 0x51, 0x28, 0x6a, 0x28, 0x6f, 0x2a, 0x4f, 0x07, + 0xdb, 0x7f, 0x72, 0x85, 0xdd, 0xfc, 0x83, 0xa4, 0x7f, 0xa5, + 0xe8, 0xa7, 0x97, 0x82, 0xba, 0xc2, 0x69, 0xab, 0xea, 0x85, + 0x81, 0xd1, 0xbd, 0x86, 0xf3, 0x11, 0x69, 0x4f, 0x3b, 0x24, + 0xaa, 0xda, 0x25, 0x58, 0x56, 0x70, 0xe6, 0x11, 0xce, 0x53, + 0xfb, 0x12, 0x20, 0x15, 0xb1, 0xfb, 0xea, 0xcb, 0x0b, 0x3f, + 0xde, 0x8e, 0xab, 0x30, 0xe4, 0xc6, 0x03, 0x48, 0xdf, 0xc0, + 0xfa, 0x50, 0xf4, 0x60, 0x44, 0xfc, 0x44, 0xc1, 0x2c, 0xe8, + 0xd9, 0x70, 0xdb, 0x46, 0xb6, 0xa6, 0xed, 0x9d, 0x4e, 0x1a, + 0x65, 0x21, 0x74, 0x2d, 0xaa, 0x41, 0x9b, 0x0d, 0xd3, 0xf3, + 0x53, 0x41, 0x99, 0x4f, 0x15, 0x75, 0xd1, 0x8b, 0xfa, 0x94, + 0x82, 0x85, 0x2d, 0x4b, 0x31, 0x8a, 0x44, 0x66, 0x88, 0xd8, + 0x0d, 0xa8, 0x1f, 0x7d, 0xc3, 0xf5, 0x05, 0x44, 0xcb, 0xd1, + 0x24, 0x8c, 0xe6, 0x16, 0xde, 0x5c, 0x7a, 0x70, 0x66, 0x51, + 0x64, 0x14, 0xfc, 0xed, 0x1b, 0x7e, 0x61, 0x7d, 0x21, 0x08, + 0x5a, 0xf8, 0x48, 0x4e, 0xa5, 0xa7, 0xe2, 0x67, 0xb6, 0xb7, + 0x13, 0xb0, 0xdc, 0xa7, 0xd5, 0xf5, 0x94, 0x88, 0x0d, 0x4f, + 0x23, 0xe0, 0xd3, 0x29, 0xb1, 0x59, 0x55, 0xa2, 0xa9, 0x98, + 0xf5, 0x5a, 0x86, 0xf2, 0xd0, 0x40, 0x01, 0x74, 0x19, 0xa2, + 0x87, 0x70, 0x2c, 0x23, 0x81, 0x83, 0xca, 0x2a, 0x26, 0xac, + 0x20, 0x60, 0xc4, 0x4c, 0xa1, 0x67, 0x58, 0x03, 0xbc, 0xdd, + 0x05, 0x5d, 0x9b, 0xfc, 0x5a, 0xd2, 0xb1, 0xc9, 0xcf, 0xa2, + 0x26, 0xa1, 0xa3, 0x15, 0x86, 0xbb, 0x99, 0xc5, 0x93, 0x5a, + 0xf8, 0x8b, 0x84, 0x58, 0xf2, 0x96, 0xa7, 0x56, 0x3f, 0xf4, + 0xaf, 0x12, 0x01, 0xda, 0x4e, 0x0e, 0x2c, 0x38, 0x04, 0x8c, + 0xd2, 0x75, 0x71, 0x27, 0x62, 0x4d, 0xfa, 0xad, 0xf7, 0xf5, + 0x4c, 0xd4, 0x9e, 0x26, 0x8c, 0x25, 0xab, 0x13, 0x85, 0xfe, + 0x70, 0x6c, 0x43, 0x67, 0x2b, 0xed, 0xc9, 0xf1, 0x07, 0x0f, + 0x71, 0x1d, 0x04, 0xfe, 0x41, 0x83, 0x3e, 0x94, 0xe8, 0x37, + 0x72, 0xcb, 0x6e, 0xc9, 0x70, 0xd7, 0x33, 0x0e, 0xa0, 0x01, + 0xe1, 0x79, 0x94, 0x02, 0xaa, 0xc5, 0x2e, 0x0c, 0x5b, 0xb4, + 0xab, 0x3b, 0x3b, 0xce, 0x18, 0x85, 0xdc, 0x10, 0x0a, 0x81, + 0x2d, 0x9a, 0x23, 0xff, 0xbf, 0x68, 0x95, 0xc2, 0x74, 0x78, + 0xc8, 0x85, 0x6b, 0xe8, 0x64, 0xc0, 0x6f, 0xc3, 0x0e, 0xeb, + 0x2d, 0xc1, 0xac, 0xb6, 0x46, 0xd3, 0x5b, 0xc9, 0xeb, 0x2d, + 0xae, 0x10, 0xe2, 0x98, 0xa7, 0xb8, 0x66, 0x0d, 0xc5, 0x5e, + 0x79, 0xa7, 0x3b, 0x44, 0x9b, 0x90, 0x87, 0xe3, 0x4b, 0x4a, + 0x6e, 0x03, 0x65, 0xa1, 0xa7, 0x8d, 0x77, 0xdf, 0x95, 0x80, + 0xbd, 0xf5, 0x21, 0x36, 0x40, 0x24, 0x39, 0x09, 0xa6, 0xb5, + 0x25, 0x1a, 0x80, 0xac, 0x07, 0xaf, 0x02, 0x7a, 0x36, 0xa9, + 0x8d, 0xca, 0x72, 0xc3, 0x06, 0x98, 0x67, 0xe8, 0x61, 0x02, + 0xb5, 0x19, 0x2f, 0x43, 0x3a, 0x95, 0xad, 0x13, 0x3e, 0xd9, + 0x67, 0x20, 0x8f, 0x97, 0x81, 0xd7, 0x85, 0xc4, 0xc3, 0xd1, + 0xa1, 0x4d, 0xa4, 0xb9, 0xf4, 0xd4, 0x29, 0x9e, 0xea, 0x63, + 0xc1, 0x71, 0xdc, 0xc3, 0x16, 0x77, 0x0e, 0x5b, 0x5a, 0x6a, + 0x8c, 0x64, 0x3c, 0xae, 0xa6, 0xd6, 0x00, 0x45, 0xf4, 0x37, + 0x85, 0xb7, 0x7a, 0x46, 0x41, 0x45, 0x4f, 0x39, 0xa7, 0xbb, + 0xf3, 0x52, 0x24, 0x49, 0x5d, 0x31, 0x68, 0xc2, 0x1a, 0x43, + 0xd1, 0x30, 0x63, 0x53, 0x72, 0x0e, 0xb1, 0xad, 0x8c, 0x8b, + 0x31, 0x1a, 0xca, 0x95, 0x5d, 0xbe, 0x6e, 0x5b, 0xff, 0x61, + 0xf0, 0x76, 0xa5, 0x41, 0xd3, 0xc6, 0xf7, 0x39, 0x1b, 0x29, + 0x24, 0x2e, 0xf7, 0x8c, 0xaa, 0x51, 0xf6, 0x79, 0xc4, 0x59, + 0xf5, 0x6c, 0xe4, 0x94, 0xbb, 0x0d, 0x75, 0x1b, 0x36, 0x16, + 0xa0, 0x29, 0x30, 0x79, 0xe6, 0x7a, 0x20, 0xa3, 0xfc, 0x74, + 0xca, 0x45, 0x21, 0x03, 0x60, 0x68, 0x31, 0x68, 0x59, 0x28, + 0x69, 0xc8, 0x3a, 0x81, 0x48, 0x48, 0xe2, 0xc8, 0x8a, 0x45, + 0x7b, 0x60, 0x72, 0xdb, 0xbd, 0x39, 0xdc, 0x72, 0x80, 0xb6, + 0x54, 0x40, 0xcb, 0xe5, 0x9a, 0xe7, 0x08, 0xa7, 0x3e, 0x3a, + 0x7b, 0x8e, 0x70, 0x94, 0x68, 0x68, 0xc4, 0xca, 0x46, 0x27, + 0x46, 0x4a, 0xca, 0x5f, 0x0d, 0x47, 0xd9, 0xf5, 0xf4, 0xdc, + 0x3b, 0x43, 0x4b, 0x34, 0x9b, 0x55, 0x06, 0x2b, 0xb8, 0x38, + 0x40, 0x7e, 0xd6, 0xc3, 0xf2, 0x9d, 0x1b, 0x30, 0x88, 0xb4, + 0x83, 0x77, 0xfc, 0xc5, 0x1a, 0x51, 0xab, 0x05, 0x3e, 0x38, + 0x60, 0x85, 0x39, 0xd6, 0xad, 0x04, 0x5e, 0x41, 0x1c, 0x46, + 0x0e, 0x99, 0x11, 0x0e, 0xc2, 0xab, 0xb6, 0x81, 0x2f, 0x12, + 0x8e, 0x88, 0x1c, 0x50, 0xb4, 0xac, 0x1f, 0x40, 0x56, 0x3a, + 0x43, 0xe8, 0xb1, 0x61, 0xb8, 0xd6, 0x68, 0x27, 0x10, 0x00, + 0x35, 0x57, 0x02, 0x01, 0x63, 0x4e, 0x35, 0x9d, 0x4b, 0x71, + 0xf4, 0x38, 0x86, 0x97, 0x37, 0x7f, 0x3a, 0x34, 0xb0, 0xa0, + 0xee, 0x1c, 0x97, 0xe3, 0x28, 0x56, 0xfc, 0x91, 0x04, 0xc5, + 0x4f, 0x56, 0xac, 0xa1, 0x92, 0xcc, 0xaa, 0x47, 0x0b, 0xd7, + 0x9c, 0x2b, 0x79, 0x9a, 0x87, 0x3d, 0x35, 0x02, 0x97, 0x3b, + 0x95, 0x39, 0x61, 0x13, 0xfc, 0x79, 0x8a, 0x05, 0xb3, 0x8d, + 0x43, 0xa7, 0xc8, 0xe3, 0x69, 0xfa, 0xdf, 0xfc, 0x39, 0x12, + 0xf6, 0x74, 0xb8, 0x1e, 0xbf, 0x8a, 0x25, 0x4c, 0x86, 0x16, + 0x97, 0xaf, 0xdf, 0x16, 0x17, 0x87, 0x12, 0xbb, 0xd5, 0x0e, + 0x37, 0x68, 0x87, 0xab, 0x5c, 0x9c, 0x02, 0x85, 0xa0, 0x32, + 0x49, 0x99, 0x4a, 0x58, 0xc4, 0x45, 0x3b, 0xfb, 0x6b, 0x72, + 0x8e, 0xcf, 0x23, 0xdc, 0xf8, 0xb3, 0x3c, 0x8d, 0x1a, 0xbd, + 0x2c, 0xf5, 0x18, 0x3d, 0xfa, 0xc7, 0x7c, 0x94, 0xe2, 0x9a, + 0x1c, 0x51, 0x67, 0x8f, 0xcc, 0x8a, 0x3a, 0xfb, 0xe8, 0x86, + 0x1d, 0xad, 0x89, 0x1a, 0x7b, 0xac, 0x1c, 0x22, 0xfd, 0x32, + 0xf6, 0xfd, 0x90, 0xa7, 0x39, 0xec, 0x99, 0xbe, 0x3c, 0x11, + 0xb9, 0x16, 0x3d, 0x81, 0x63, 0x76, 0x4a, 0x51, 0xbb, 0xda, + 0xe4, 0xa5, 0xf0, 0x93, 0x3a, 0x3b, 0x8c, 0x01, 0xd7, 0xa9, + 0x27, 0x6f, 0x86, 0x4a, 0x8e, 0xea, 0x0b, 0xa7, 0x16, 0x6a, + 0x50, 0x8b, 0x3e, 0xd7, 0xb5, 0xe8, 0xeb, 0xa9, 0xbb, 0xae, + 0x75, 0xe7, 0x4e, 0xa9, 0x3c, 0x16, 0xfd, 0x16, 0x8b, 0xbe, + 0x68, 0xc7, 0x94, 0x63, 0xd3, 0xbb, 0x81, 0xc3, 0x07, 0x62, + 0x47, 0x24, 0xd4, 0xa2, 0x4b, 0x7f, 0x59, 0x74, 0xed, 0xb6, + 0x91, 0x4e, 0x25, 0x3b, 0x2c, 0xfa, 0xce, 0x8f, 0x45, 0x57, + 0x5b, 0x54, 0xa9, 0x1b, 0xf2, 0xd6, 0xb1, 0x9a, 0x00, 0xb8, + 0x4d, 0x9a, 0x20, 0x6f, 0xcd, 0x4a, 0xf1, 0x5a, 0xf4, 0x36, + 0x21, 0x8b, 0x47, 0xe1, 0x03, 0x5d, 0x40, 0x45, 0x84, 0x16, + 0x0e, 0x2b, 0x1f, 0x4b, 0xa4, 0x67, 0x20, 0x58, 0x74, 0xb6, + 0xaf, 0x2e, 0xbd, 0x69, 0x0a, 0xe0, 0x8f, 0x9a, 0xca, 0xcb, + 0xa4, 0x9b, 0x77, 0x21, 0x19, 0xfd, 0x34, 0x69, 0x7a, 0x3e, + 0x75, 0xdb, 0x21, 0x97, 0xf5, 0x84, 0xa4, 0x9e, 0x76, 0x28, + 0x94, 0x95, 0xb4, 0x1d, 0x02, 0x3b, 0x6a, 0xb5, 0xaf, 0xd3, + 0x7a, 0x19, 0x7b, 0xbc, 0xb3, 0xb9, 0xce, 0x1e, 0xcd, 0x45, + 0xab, 0xd4, 0xd9, 0xa3, 0xff, 0xbd, 0xa8, 0xb3, 0xc7, 0xa2, + 0x47, 0xd5, 0x3c, 0x5c, 0x0e, 0xea, 0x5d, 0xa9, 0x47, 0xf5, + 0xe6, 0x90, 0x6f, 0x53, 0xe0, 0xaa, 0x35, 0xdf, 0x73, 0x57, + 0xec, 0x7d, 0x05, 0xb4, 0xb2, 0x88, 0x11, 0x22, 0x40, 0xbe, + 0x1b, 0xdd, 0x5a, 0xd9, 0x2a, 0x38, 0x53, 0x9d, 0xaf, 0x3f, + 0xf6, 0x3c, 0x6a, 0xbb, 0x84, 0x6b, 0xd2, 0xff, 0x8f, 0xd8, + 0x8f, 0x6e, 0xf4, 0xea, 0xff, 0xe3, 0x47, 0x71, 0xa3, 0xe6, + 0xe5, 0xcc, 0xaf, 0x1f, 0x89, 0x72, 0x9c, 0x39, 0x88, 0x24, + 0x43, 0x21, 0xd3, 0x9d, 0x89, 0xfa, 0x11, 0x51, 0x67, 0x2e, + 0x60, 0xf1, 0x65, 0xa5, 0xcb, 0x71, 0xe7, 0x8f, 0x7d, 0x04, + 0x04, 0xed, 0x10, 0xdb, 0xbf, 0x3f, 0x3d, 0xe0, 0x6a, 0xfe, + 0x23, 0xbd, 0xfa, 0x7f, 0xdd, 0x40, 0xcf, 0x49, 0x53, 0x74, + 0xe8, 0x3b, 0x34, 0x56, 0xa3, 0xca, 0x06, 0x85, 0x0d, 0x15, + 0x2e, 0x4d, 0xb1, 0x96, 0x8b, 0xac, 0xe7, 0xa8, 0xc9, 0xec, + 0x7b, 0xca, 0x70, 0x79, 0xac, 0x8d, 0x8e, 0xbd, 0x96, 0xc3, + 0x63, 0x4e, 0x4f, 0x19, 0x94, 0xc7, 0xe2, 0x35, 0xe0, 0xa8, + 0x9c, 0x9e, 0x31, 0x01, 0xae, 0x0d, 0x3e, 0xc2, 0x67, 0x3d, + 0x37, 0x2f, 0x41, 0xef, 0xcf, 0x49, 0xd3, 0x6d, 0xd0, 0x0e, + 0x0c, 0x12, 0x0d, 0x5a, 0xa4, 0x42, 0x0e, 0x0c, 0xb6, 0x36, + 0x68, 0x0a, 0x83, 0x83, 0x21, 0xa4, 0x59, 0x4f, 0x12, 0xef, + 0x51, 0x13, 0xc8, 0x28, 0xc1, 0xcc, 0x1c, 0x2d, 0x76, 0x6d, + 0x4e, 0x18, 0x9a, 0x5e, 0x66, 0xd7, 0x92, 0x4f, 0xd5, 0xbb, + 0xad, 0xe7, 0x4c, 0x01, 0xa4, 0xe0, 0xd2, 0xe1, 0x5c, 0xf8, + 0x79, 0xfe, 0xee, 0xa4, 0xc9, 0xfc, 0x47, 0x22, 0xbd, 0x7b, + 0x34, 0x04, 0x4b, 0x71, 0xad, 0x2a, 0x55, 0x66, 0xd2, 0xf3, + 0x51, 0x5c, 0x2e, 0x5e, 0x45, 0x15, 0x9b, 0x8a, 0xa4, 0xd3, + 0x40, 0x38, 0x32, 0x36, 0xc5, 0x4a, 0xf2, 0xd0, 0x02, 0x3d, + 0xd3, 0x94, 0xa6, 0xc7, 0x8d, 0x7a, 0xfc, 0x0a, 0x0d, 0x64, + 0x3d, 0x40, 0xcd, 0x10, 0x9b, 0xd0, 0x7e, 0x1c, 0x29, 0xca, + 0x53, 0xa5, 0x48, 0x82, 0x4a, 0x11, 0xdd, 0xf1, 0x8c, 0xb3, + 0xc3, 0x45, 0x48, 0x91, 0x2f, 0xd2, 0x8e, 0x3f, 0xc4, 0x20, + 0xd6, 0x23, 0x45, 0x47, 0x65, 0xdd, 0x69, 0x83, 0x51, 0xd9, + 0xc3, 0x60, 0xa6, 0x50, 0x43, 0x68, 0xec, 0x21, 0xe0, 0xfe, + 0x22, 0xe0, 0x1f, 0xfc, 0xab, 0x82, 0x77, 0x74, 0xf8, 0x99, + 0x47, 0x25, 0x0f, 0x63, 0x82, 0x73, 0x8d, 0x47, 0xf2, 0xea, + 0x10, 0xaf, 0x92, 0xe7, 0x0c, 0xda, 0x36, 0x54, 0x65, 0xdf, + 0x26, 0xfa, 0x21, 0xe7, 0x54, 0x35, 0x63, 0x5c, 0x25, 0xff, + 0xc1, 0x29, 0x18, 0x00, 0x9a, 0x4e, 0xf8, 0x44, 0x9e, 0x60, + 0x80, 0x04, 0x52, 0x6a, 0x76, 0x47, 0xad, 0x1d, 0x84, 0x4b, + 0xcf, 0x3f, 0xf0, 0x7c, 0x39, 0xc1, 0x3f, 0x09, 0xa4, 0x39, + 0xec, 0x64, 0x3a, 0xd1, 0x38, 0xb2, 0x04, 0x41, 0x11, 0x91, + 0x4e, 0xb3, 0x05, 0x47, 0x2e, 0x3f, 0xae, 0x45, 0x82, 0xba, + 0x1e, 0x66, 0x34, 0xf6, 0x5b, 0xe7, 0xe8, 0xbf, 0xbe, 0x9a, + 0x8f, 0x27, 0x22, 0x1f, 0xdd, 0xfc, 0x77, 0xcc, 0xbc, 0xf9, + 0xd2, 0xcd, 0x47, 0xda, 0xe2, 0x8d, 0x69, 0x49, 0x1a, 0xbf, + 0x59, 0xb4, 0xb3, 0xfa, 0xda, 0x83, 0x3c, 0x16, 0xa4, 0x07, + 0x31, 0xc4, 0xe1, 0x9a, 0x1d, 0xfa, 0x7e, 0x2c, 0x1e, 0x66, + 0x47, 0x48, 0x13, 0x4a, 0x0f, 0x94, 0x61, 0xc7, 0xe2, 0x17, + 0xed, 0x90, 0x1e, 0x05, 0x17, 0x8b, 0x04, 0x10, 0x9a, 0x2d, + 0x7a, 0x58, 0xfe, 0x93, 0x27, 0x37, 0x2f, 0x53, 0x4e, 0x61, + 0x0c, 0xe2, 0x9b, 0x23, 0x35, 0xf5, 0x85, 0x21, 0x7b, 0x9f, + 0x41, 0x9e, 0xff, 0xfc, 0xcf, 0x34, 0xf3, 0xf6, 0xdf, 0xb4, + 0x5f, 0x59, 0xb1, 0xaf, 0x9c, 0xd8, 0x3b, 0x1f, 0x16, 0xf6, + 0x35, 0x61, 0xe6, 0x77, 0x2e, 0xec, 0x3b, 0x26, 0xcc, 0xfc, + 0xce, 0x85, 0x7d, 0xe7, 0x5c, 0xf9, 0xdf, 0x55, 0xff, 0x3b, + 0x97, 0x67, 0xfe, 0xc6, 0xe6, 0x7d, 0xe5, 0xf2, 0xcc, 0xd7, + 0x36, 0xaf, 0xc6, 0xaf, 0x5a, 0xf2, 0x8f, 0x1d, 0xf9, 0xeb, + 0x7f, 0x9d, 0xb4, 0xe2, 0x30, 0xa7, 0x39, 0x86, 0x9e, 0x98, + 0x34, 0x6d, 0x71, 0xd4, 0xd0, 0xe3, 0xc7, 0xb2, 0xa6, 0x9b, + 0x76, 0xfc, 0x36, 0x12, 0xb7, 0xa0, 0x09, 0x56, 0x20, 0x56, + 0x09, 0x58, 0xa1, 0x06, 0xed, 0xa7, 0xf0, 0xfd, 0xb1, 0x1c, + 0xd1, 0x94, 0x54, 0xf3, 0xff, 0xe9, 0xbb, 0xfc, 0xac, 0xad, + 0xc8, 0x54, 0x8d, 0x00, 0x00, 0x01, 0x84, 0x69, 0x43, 0x43, + 0x50, 0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x00, 0x00, 0x78, 0x9c, 0x7d, 0x91, 0x3d, 0x48, + 0xc3, 0x40, 0x1c, 0xc5, 0x5f, 0x5b, 0xa5, 0x22, 0x15, 0x87, + 0x16, 0x14, 0x71, 0xc8, 0x50, 0x9d, 0xec, 0xa2, 0x52, 0x74, + 0xab, 0x55, 0x28, 0x42, 0x85, 0x50, 0x2b, 0xb4, 0xea, 0x60, + 0x72, 0xe9, 0x17, 0x34, 0x69, 0x48, 0x52, 0x5c, 0x1c, 0x05, + 0xd7, 0x82, 0x83, 0x1f, 0x8b, 0x55, 0x07, 0x17, 0x67, 0x5d, + 0x1d, 0x5c, 0x05, 0x41, 0xf0, 0x03, 0xc4, 0xd1, 0xc9, 0x49, + 0xd1, 0x45, 0x4a, 0xfc, 0x5f, 0x52, 0x68, 0x11, 0xe3, 0xc1, + 0x71, 0x3f, 0xde, 0xdd, 0x7b, 0xdc, 0xbd, 0x03, 0xfc, 0xcd, + 0x2a, 0x53, 0xcd, 0x9e, 0x04, 0xa0, 0x6a, 0x96, 0x91, 0x49, + 0x25, 0x85, 0x5c, 0x7e, 0x55, 0x08, 0xbe, 0x22, 0x84, 0x30, + 0x86, 0x10, 0xc7, 0xac, 0xc4, 0x4c, 0x7d, 0x4e, 0x14, 0xd3, + 0xf0, 0x1c, 0x5f, 0xf7, 0xf0, 0xf1, 0xf5, 0x2e, 0xc6, 0xb3, + 0xbc, 0xcf, 0xfd, 0x39, 0x06, 0x94, 0x82, 0xc9, 0x00, 0x9f, + 0x40, 0x9c, 0x60, 0xba, 0x61, 0x11, 0x6f, 0x10, 0xc7, 0x37, + 0x2d, 0x9d, 0xf3, 0x3e, 0x71, 0x84, 0x95, 0x25, 0x85, 0xf8, + 0x9c, 0x78, 0xc2, 0xa0, 0x0b, 0x12, 0x3f, 0x72, 0x5d, 0x76, + 0xf9, 0x8d, 0x73, 0xc9, 0x61, 0x3f, 0xcf, 0x8c, 0x18, 0xd9, + 0xcc, 0x3c, 0x71, 0x84, 0x58, 0x28, 0x75, 0xb1, 0xdc, 0xc5, + 0xac, 0x6c, 0xa8, 0xc4, 0xd3, 0xc4, 0x51, 0x45, 0xd5, 0x28, + 0xdf, 0x9f, 0x73, 0x59, 0xe1, 0xbc, 0xc5, 0x59, 0xad, 0xd6, + 0x59, 0xfb, 0x9e, 0xfc, 0x85, 0xa1, 0x82, 0xb6, 0xb2, 0xcc, + 0x75, 0x9a, 0xa3, 0x48, 0x61, 0x11, 0x4b, 0x10, 0x21, 0x40, + 0x46, 0x1d, 0x15, 0x54, 0x61, 0x21, 0x46, 0xab, 0x46, 0x8a, + 0x89, 0x0c, 0xed, 0x27, 0x3d, 0xfc, 0x23, 0x8e, 0x5f, 0x24, + 0x97, 0x4c, 0xae, 0x0a, 0x18, 0x39, 0x16, 0x50, 0x83, 0x0a, + 0xc9, 0xf1, 0x83, 0xff, 0xc1, 0xef, 0x6e, 0xcd, 0xe2, 0xd4, + 0xa4, 0x9b, 0x14, 0x4a, 0x02, 0xbd, 0x2f, 0xb6, 0xfd, 0x31, + 0x06, 0x04, 0x77, 0x81, 0x56, 0xc3, 0xb6, 0xbf, 0x8f, 0x6d, + 0xbb, 0x75, 0x02, 0x04, 0x9e, 0x81, 0x2b, 0xad, 0xe3, 0xaf, + 0x35, 0x81, 0x99, 0x4f, 0xd2, 0x1b, 0x1d, 0x2d, 0x7a, 0x04, + 0x0c, 0x6e, 0x03, 0x17, 0xd7, 0x1d, 0x4d, 0xde, 0x03, 0x2e, + 0x77, 0x80, 0xe1, 0x27, 0x5d, 0x32, 0x24, 0x47, 0x0a, 0xd0, + 0xf4, 0x17, 0x8b, 0xc0, 0xfb, 0x19, 0x7d, 0x53, 0x1e, 0x08, + 0xdf, 0x02, 0xfd, 0x6b, 0x6e, 0x6f, 0xed, 0x7d, 0x9c, 0x3e, + 0x00, 0x59, 0xea, 0x2a, 0x7d, 0x03, 0x1c, 0x1c, 0x02, 0xe3, + 0x25, 0xca, 0x5e, 0xf7, 0x78, 0x77, 0x5f, 0x77, 0x6f, 0xff, + 0x9e, 0x69, 0xf7, 0xf7, 0x03, 0x34, 0xd7, 0x72, 0xf4, 0xbc, + 0xbe, 0x40, 0x67, 0x00, 0x00, 0x0e, 0x5b, 0x69, 0x54, 0x58, + 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, + 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, 0x22, + 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x57, + 0x35, 0x4d, 0x30, 0x4d, 0x70, 0x43, 0x65, 0x68, 0x69, 0x48, + 0x7a, 0x72, 0x65, 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, + 0x63, 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x0a, 0x3c, 0x78, 0x3a, + 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, + 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, + 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, + 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, + 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, + 0x20, 0x34, 0x2e, 0x34, 0x2e, 0x30, 0x2d, 0x45, 0x78, 0x69, + 0x76, 0x32, 0x22, 0x3e, 0x0a, 0x20, 0x3c, 0x72, 0x64, 0x66, + 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, + 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, + 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, + 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, + 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, + 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3d, + 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, + 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, + 0x6d, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, + 0x6c, 0x6e, 0x73, 0x3a, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3d, + 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, + 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x73, + 0x54, 0x79, 0x70, 0x65, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x23, 0x22, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x64, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, + 0x2f, 0x64, 0x63, 0x2f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, 0x2f, 0x22, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x47, + 0x49, 0x4d, 0x50, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x69, 0x6d, 0x70, + 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x78, 0x6d, 0x70, 0x2f, 0x22, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, + 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, + 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, + 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, + 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, + 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x70, 0x4d, + 0x4d, 0x3a, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x49, 0x44, 0x3d, 0x22, 0x67, 0x69, 0x6d, 0x70, 0x3a, 0x64, + 0x6f, 0x63, 0x69, 0x64, 0x3a, 0x67, 0x69, 0x6d, 0x70, 0x3a, + 0x63, 0x61, 0x34, 0x37, 0x61, 0x34, 0x35, 0x61, 0x2d, 0x62, + 0x35, 0x36, 0x64, 0x2d, 0x34, 0x38, 0x64, 0x37, 0x2d, 0x61, + 0x39, 0x65, 0x63, 0x2d, 0x35, 0x33, 0x61, 0x64, 0x37, 0x64, + 0x65, 0x39, 0x64, 0x65, 0x65, 0x32, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, + 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x30, 0x65, 0x64, + 0x34, 0x38, 0x37, 0x35, 0x62, 0x2d, 0x64, 0x38, 0x30, 0x30, + 0x2d, 0x34, 0x36, 0x61, 0x37, 0x2d, 0x39, 0x30, 0x33, 0x31, + 0x2d, 0x66, 0x33, 0x34, 0x66, 0x65, 0x39, 0x63, 0x62, 0x31, + 0x32, 0x30, 0x65, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x78, 0x6d, + 0x70, 0x4d, 0x4d, 0x3a, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, + 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, + 0x64, 0x3a, 0x31, 0x33, 0x38, 0x34, 0x34, 0x32, 0x30, 0x33, + 0x2d, 0x34, 0x35, 0x36, 0x65, 0x2d, 0x34, 0x34, 0x62, 0x37, + 0x2d, 0x39, 0x32, 0x64, 0x64, 0x2d, 0x66, 0x64, 0x37, 0x64, + 0x32, 0x62, 0x32, 0x36, 0x62, 0x33, 0x38, 0x39, 0x22, 0x0a, + 0x20, 0x20, 0x20, 0x64, 0x63, 0x3a, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x3d, 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, + 0x70, 0x6e, 0x67, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x47, 0x49, + 0x4d, 0x50, 0x3a, 0x41, 0x50, 0x49, 0x3d, 0x22, 0x32, 0x2e, + 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x47, 0x49, 0x4d, 0x50, + 0x3a, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3d, + 0x22, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x47, 0x49, 0x4d, 0x50, 0x3a, 0x54, 0x69, 0x6d, 0x65, + 0x53, 0x74, 0x61, 0x6d, 0x70, 0x3d, 0x22, 0x31, 0x36, 0x37, + 0x31, 0x34, 0x39, 0x34, 0x31, 0x31, 0x39, 0x38, 0x34, 0x34, + 0x33, 0x37, 0x36, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x47, 0x49, + 0x4d, 0x50, 0x3a, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x3d, 0x22, 0x32, 0x2e, 0x31, 0x30, 0x2e, 0x33, 0x32, 0x22, + 0x0a, 0x20, 0x20, 0x20, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, + 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x3d, 0x22, 0x31, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x78, 0x6d, + 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, + 0x6f, 0x6f, 0x6c, 0x3d, 0x22, 0x47, 0x49, 0x4d, 0x50, 0x20, + 0x32, 0x2e, 0x31, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x78, + 0x6d, 0x70, 0x3a, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x44, 0x61, 0x74, 0x65, 0x3d, 0x22, 0x32, 0x30, 0x32, + 0x32, 0x3a, 0x31, 0x32, 0x3a, 0x31, 0x39, 0x54, 0x31, 0x37, + 0x3a, 0x35, 0x35, 0x3a, 0x31, 0x39, 0x2d, 0x30, 0x36, 0x3a, + 0x30, 0x30, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x70, + 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, + 0x65, 0x3d, 0x22, 0x32, 0x30, 0x32, 0x32, 0x3a, 0x31, 0x32, + 0x3a, 0x31, 0x39, 0x54, 0x31, 0x37, 0x3a, 0x35, 0x35, 0x3a, + 0x31, 0x39, 0x2d, 0x30, 0x36, 0x3a, 0x30, 0x30, 0x22, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, 0x4d, + 0x3a, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x53, + 0x65, 0x71, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x72, 0x64, 0x66, 0x3a, 0x6c, 0x69, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3a, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x73, 0x61, 0x76, + 0x65, 0x64, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x73, 0x74, 0x45, 0x76, 0x74, 0x3a, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x3d, 0x22, 0x2f, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3a, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, + 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, + 0x39, 0x35, 0x65, 0x64, 0x39, 0x33, 0x37, 0x38, 0x2d, 0x61, + 0x38, 0x30, 0x39, 0x2d, 0x34, 0x63, 0x39, 0x35, 0x2d, 0x61, + 0x30, 0x38, 0x62, 0x2d, 0x31, 0x66, 0x66, 0x38, 0x66, 0x66, + 0x36, 0x34, 0x66, 0x30, 0x66, 0x37, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3a, + 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x41, 0x67, + 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x47, 0x69, 0x6d, 0x70, 0x20, + 0x32, 0x2e, 0x31, 0x30, 0x20, 0x28, 0x4c, 0x69, 0x6e, 0x75, + 0x78, 0x29, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x73, 0x74, 0x45, 0x76, 0x74, 0x3a, 0x77, 0x68, 0x65, 0x6e, + 0x3d, 0x22, 0x32, 0x30, 0x32, 0x32, 0x2d, 0x31, 0x32, 0x2d, + 0x31, 0x39, 0x54, 0x31, 0x37, 0x3a, 0x34, 0x34, 0x3a, 0x31, + 0x30, 0x2d, 0x30, 0x36, 0x3a, 0x30, 0x30, 0x22, 0x2f, 0x3e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, + 0x3a, 0x6c, 0x69, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x73, 0x74, 0x45, 0x76, 0x74, 0x3a, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x3d, 0x22, 0x73, 0x61, 0x76, 0x65, 0x64, 0x22, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x45, + 0x76, 0x74, 0x3a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x3d, 0x22, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3a, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, + 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x65, 0x61, 0x64, + 0x31, 0x64, 0x39, 0x66, 0x39, 0x2d, 0x32, 0x61, 0x63, 0x66, + 0x2d, 0x34, 0x31, 0x62, 0x66, 0x2d, 0x61, 0x31, 0x34, 0x32, + 0x2d, 0x30, 0x30, 0x34, 0x33, 0x39, 0x37, 0x33, 0x33, 0x62, + 0x36, 0x34, 0x62, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x73, 0x74, 0x45, 0x76, 0x74, 0x3a, 0x73, 0x6f, 0x66, + 0x74, 0x77, 0x61, 0x72, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x3d, 0x22, 0x47, 0x69, 0x6d, 0x70, 0x20, 0x32, 0x2e, 0x31, + 0x30, 0x20, 0x28, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x29, 0x22, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x45, + 0x76, 0x74, 0x3a, 0x77, 0x68, 0x65, 0x6e, 0x3d, 0x22, 0x32, + 0x30, 0x32, 0x32, 0x2d, 0x31, 0x32, 0x2d, 0x31, 0x39, 0x54, + 0x31, 0x37, 0x3a, 0x35, 0x35, 0x3a, 0x31, 0x39, 0x2d, 0x30, + 0x36, 0x3a, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x53, 0x65, + 0x71, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x78, 0x6d, + 0x70, 0x4d, 0x4d, 0x3a, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x79, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, + 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, + 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, + 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x3c, 0x3f, 0x78, + 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, + 0x3d, 0x22, 0x77, 0x22, 0x3f, 0x3e, 0xfb, 0xad, 0x5d, 0x4c, + 0x00, 0x00, 0x00, 0x0c, 0x50, 0x4c, 0x54, 0x45, 0x00, 0x00, + 0x28, 0xd8, 0xd8, 0xd8, 0x40, 0x40, 0xa0, 0xb0, 0xb0, 0xb0, + 0x7b, 0x52, 0x1f, 0x1c, 0x00, 0x00, 0x00, 0x01, 0x62, 0x4b, + 0x47, 0x44, 0x00, 0x88, 0x05, 0x1d, 0x48, 0x00, 0x00, 0x00, + 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, + 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, + 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xe6, 0x0c, 0x13, + 0x17, 0x37, 0x13, 0x86, 0x45, 0x13, 0x50, 0x00, 0x00, 0x00, + 0xc5, 0x49, 0x44, 0x41, 0x54, 0x58, 0xc3, 0x63, 0x60, 0x18, + 0x7a, 0x80, 0xfb, 0xff, 0xff, 0x07, 0x78, 0x15, 0x70, 0x86, + 0x86, 0x26, 0x0c, 0xb0, 0x02, 0xad, 0xf5, 0xff, 0xff, 0xff, + 0x5a, 0x81, 0x47, 0x81, 0x69, 0x0c, 0x04, 0x0f, 0x66, 0x05, + 0xa1, 0xa1, 0x20, 0x05, 0xa1, 0xa1, 0x83, 0x5b, 0x41, 0x15, + 0x30, 0x98, 0xb5, 0xd6, 0xe2, 0x51, 0x90, 0x00, 0x89, 0xb0, + 0x81, 0x54, 0x50, 0x0f, 0x4e, 0xb0, 0xdc, 0x7f, 0x19, 0x46, + 0xc1, 0x28, 0x18, 0xf2, 0x20, 0x34, 0x34, 0x04, 0x53, 0x50, + 0x14, 0x29, 0x8f, 0x82, 0x33, 0x2d, 0x46, 0x69, 0x43, 0x4f, + 0x05, 0xdc, 0xff, 0xc1, 0xe5, 0x02, 0xb8, 0x28, 0x5e, 0x05, + 0x04, 0x30, 0xf6, 0xda, 0x50, 0x68, 0xdd, 0x81, 0x54, 0x80, + 0x23, 0x2b, 0x40, 0x88, 0xd3, 0x5e, 0x01, 0xa8, 0x8e, 0x78, + 0x80, 0x4d, 0x01, 0x37, 0xb4, 0xee, 0x40, 0x2a, 0x9b, 0x41, + 0xd2, 0xff, 0x5f, 0xad, 0x5a, 0x85, 0x52, 0x76, 0x0f, 0x3e, + 0x05, 0xab, 0xff, 0x83, 0x14, 0x0d, 0x3e, 0x05, 0x04, 0x83, + 0x7a, 0x30, 0xa4, 0x07, 0xc2, 0x89, 0x76, 0x30, 0xe4, 0x2c, + 0x22, 0xb2, 0xff, 0x28, 0x18, 0x05, 0x43, 0x16, 0x10, 0x6c, + 0xaa, 0x0d, 0x86, 0xf6, 0x24, 0xe1, 0x46, 0xef, 0x50, 0x68, + 0xba, 0x0f, 0x89, 0x4e, 0x10, 0xe1, 0xae, 0xdc, 0x60, 0xe8, + 0x6f, 0x12, 0xee, 0x14, 0x0f, 0x4e, 0x00, 0x00, 0xf2, 0xdc, + 0xf4, 0xc0, 0xf3, 0xd9, 0xaa, 0x2b, 0x00, 0x00, 0x00, 0x00, + 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, +}; + +ox::SpanView WindowIcon128() noexcept { return WindowIcon128Data; } + +static constexpr ox::Array WindowIcon264Data { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, + 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x01, 0x08, + 0x00, 0x00, 0x01, 0x08, 0x02, 0x03, 0x00, 0x00, 0x00, 0xde, + 0x98, 0x82, 0x6c, 0x00, 0x00, 0x00, 0x0c, 0x50, 0x4c, 0x54, + 0x45, 0x00, 0x00, 0x28, 0xb0, 0xb0, 0xb0, 0x40, 0x40, 0xa0, + 0xd8, 0xd8, 0xd8, 0x8f, 0x37, 0x17, 0x71, 0x00, 0x00, 0x00, + 0xc2, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0xd5, 0x41, + 0x0e, 0x82, 0x30, 0x10, 0x46, 0x61, 0x30, 0x61, 0xe3, 0xbe, + 0xf7, 0xe1, 0x08, 0x2c, 0xfa, 0xdf, 0xc7, 0xa3, 0xb8, 0xf6, + 0x12, 0xde, 0xcc, 0x3a, 0x1a, 0x8b, 0x62, 0x63, 0x62, 0x42, + 0x88, 0xd3, 0xfa, 0xde, 0x66, 0x42, 0x98, 0xf9, 0x58, 0xd2, + 0x11, 0xfd, 0x71, 0x41, 0x56, 0x84, 0x80, 0x68, 0x91, 0x18, + 0xa4, 0xf1, 0x36, 0x7b, 0x69, 0x82, 0x80, 0x68, 0x8b, 0x58, + 0xde, 0x65, 0x0d, 0x02, 0x02, 0x02, 0x02, 0xc2, 0x3f, 0x41, + 0x44, 0x44, 0x44, 0x44, 0x44, 0xdb, 0x16, 0x64, 0xc5, 0x55, + 0xbb, 0x10, 0x10, 0x4e, 0x89, 0x41, 0x1a, 0xcb, 0xcd, 0xfd, + 0x69, 0xee, 0x58, 0xbe, 0xed, 0xa5, 0x09, 0x02, 0xc2, 0x3f, + 0xf1, 0xc6, 0x3d, 0xda, 0xe5, 0xeb, 0x94, 0x2e, 0xf7, 0x79, + 0x28, 0x77, 0xe6, 0x2f, 0x43, 0x40, 0xd4, 0x49, 0x9c, 0x53, + 0xca, 0x14, 0x04, 0x44, 0x9d, 0x84, 0x8f, 0xff, 0x08, 0x04, + 0xc4, 0x76, 0x84, 0x15, 0x64, 0xc5, 0xee, 0xab, 0x3e, 0xec, + 0x42, 0x40, 0xf8, 0x25, 0x88, 0x88, 0x88, 0x88, 0x88, 0xe8, + 0xb7, 0xf5, 0xd2, 0xf4, 0x7c, 0x1a, 0xa4, 0x11, 0x02, 0x02, + 0x02, 0x02, 0xa2, 0x0e, 0xe2, 0xe5, 0x6e, 0xa9, 0x41, 0x40, + 0x34, 0x42, 0x58, 0x41, 0x56, 0xec, 0xd6, 0x04, 0x01, 0xe1, + 0x97, 0x20, 0xaa, 0xbb, 0x2b, 0xd0, 0x36, 0xee, 0x24, 0x18, + 0x4b, 0x42, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, + 0x44, 0xae, 0x42, 0x60, 0x82, +}; + +ox::SpanView WindowIcon264() noexcept { return WindowIcon264Data; } + +static constexpr ox::Array WindowIcon1080Data { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, + 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x03, 0x48, + 0x00, 0x00, 0x03, 0x48, 0x02, 0x03, 0x00, 0x00, 0x00, 0x80, + 0x89, 0x27, 0x48, 0x00, 0x00, 0x00, 0x0c, 0x50, 0x4c, 0x54, + 0x45, 0x00, 0x00, 0x28, 0xb0, 0xb0, 0xb0, 0x40, 0x40, 0xa0, + 0xd8, 0xd8, 0xd8, 0x8f, 0x37, 0x17, 0x71, 0x00, 0x00, 0x03, + 0x02, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xec, 0xcf, 0xa1, + 0x15, 0x02, 0x41, 0x14, 0x04, 0x41, 0x10, 0x84, 0x40, 0x3e, + 0x84, 0x80, 0x80, 0xfc, 0x53, 0x41, 0x9d, 0xb9, 0xf7, 0x10, + 0xa8, 0xfd, 0xbd, 0x54, 0xd9, 0x31, 0xd3, 0x17, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xbf, 0x77, 0x7f, 0x9f, 0xbc, + 0x56, 0x3f, 0x92, 0x24, 0xa9, 0x49, 0x52, 0x81, 0xa4, 0x02, + 0x49, 0x05, 0x92, 0x0a, 0x24, 0x15, 0x48, 0x2a, 0x90, 0x54, + 0x20, 0xa9, 0x40, 0x52, 0x81, 0xa4, 0x02, 0x49, 0x05, 0x92, + 0x0a, 0x24, 0x15, 0x48, 0x2a, 0x90, 0x54, 0xb0, 0x4f, 0xd2, + 0xed, 0x28, 0x78, 0x9c, 0x97, 0xeb, 0xb1, 0x3c, 0x57, 0x7f, + 0x94, 0x24, 0xa9, 0x40, 0x52, 0x81, 0xa4, 0x02, 0x49, 0x05, + 0x92, 0x0a, 0x24, 0x15, 0x48, 0x2a, 0x90, 0x54, 0x20, 0xa9, + 0x40, 0x52, 0x81, 0xa4, 0x02, 0x49, 0x05, 0x92, 0x0a, 0x24, + 0x15, 0x48, 0x2a, 0x90, 0x54, 0xb0, 0x4f, 0xd2, 0x2f, 0x7f, + 0xbf, 0x57, 0x8f, 0x22, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, + 0x4d, 0x22, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x4d, 0x22, + 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x4d, 0x22, 0x49, 0x92, + 0x24, 0x49, 0x92, 0x24, 0x4d, 0x22, 0x49, 0x92, 0x24, 0x49, + 0x92, 0x24, 0x4d, 0x22, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, + 0x4d, 0x22, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x4d, 0x22, + 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x4d, 0x22, 0x49, 0x92, + 0x24, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0xf3, 0x61, 0x8f, 0x8e, 0x71, 0x10, 0x84, 0x01, 0x30, 0x8c, + 0xaa, 0x89, 0x0b, 0x3b, 0xf7, 0xf1, 0x08, 0x0e, 0x70, 0x1f, + 0x8f, 0xc2, 0xcc, 0x25, 0xbc, 0x99, 0xba, 0x58, 0x07, 0x4c, + 0x2d, 0x4d, 0x4d, 0xb4, 0xe5, 0x7d, 0x2b, 0x50, 0xfe, 0x97, + 0x4a, 0xaa, 0xb3, 0x7e, 0x5c, 0x34, 0x54, 0xbf, 0x05, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0xa9, 0x11, 0xd2, 0x31, 0x7c, + 0x75, 0x2a, 0xd9, 0xd0, 0xcd, 0xc9, 0xa6, 0x92, 0xf3, 0xf7, + 0x61, 0xe5, 0x19, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x69, + 0x3b, 0xa4, 0x2c, 0x76, 0xb4, 0x43, 0x5c, 0x70, 0x7f, 0x76, + 0x7b, 0x7b, 0x72, 0x29, 0xf9, 0xe3, 0x87, 0x1b, 0x40, 0x42, + 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, + 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, + 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x5a, 0x47, 0xba, 0x06, + 0x4a, 0x1c, 0x8b, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, + 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, + 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, + 0xb4, 0x8e, 0x94, 0xf5, 0x4e, 0xba, 0x6e, 0x4e, 0x36, 0x95, + 0x9c, 0x9f, 0x75, 0x03, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, + 0x48, 0xad, 0x91, 0x5e, 0xf5, 0xe3, 0xa2, 0x61, 0xf7, 0xb3, + 0xbe, 0xb4, 0x05, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0xa9, + 0x35, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, + 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, + 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, + 0x49, 0xff, 0xd7, 0xa3, 0xfd, 0x39, 0x34, 0x42, 0x28, 0x88, + 0x82, 0x20, 0x58, 0x08, 0x42, 0x20, 0x1f, 0x42, 0x40, 0xf0, + 0xf3, 0x4f, 0x05, 0x03, 0x06, 0x73, 0x50, 0x88, 0x7b, 0x43, + 0x75, 0xeb, 0x15, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x6b, 0xa7, 0xe3, 0xe9, 0xb6, 0xde, 0x9e, + 0x5f, 0xdb, 0xeb, 0xee, 0xd7, 0x92, 0x24, 0xcd, 0x23, 0x49, + 0x92, 0x24, 0x49, 0x92, 0x24, 0x4d, 0x22, 0x49, 0x92, 0x24, + 0x49, 0x92, 0x24, 0x4d, 0x22, 0x49, 0x92, 0x24, 0x49, 0x92, + 0x24, 0x4d, 0x22, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x4d, + 0x22, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x4d, 0x22, 0x49, + 0x92, 0x24, 0x49, 0x92, 0x24, 0x4d, 0x22, 0x49, 0x92, 0x24, + 0x49, 0x92, 0x24, 0x4d, 0x22, 0x49, 0x92, 0x24, 0x49, 0x92, + 0x24, 0x4d, 0x22, 0xa9, 0x90, 0xf4, 0xc1, 0xdf, 0x6f, 0xaa, + 0x47, 0x91, 0x54, 0x20, 0xa9, 0x40, 0x52, 0x81, 0xa4, 0x02, + 0x49, 0x05, 0x92, 0x0a, 0x24, 0x15, 0x48, 0x2a, 0x90, 0x54, + 0x20, 0xa9, 0x40, 0x52, 0x81, 0xa4, 0x02, 0x49, 0x05, 0x92, + 0x0a, 0x24, 0x15, 0x48, 0x2a, 0x90, 0x94, 0x72, 0x39, 0xde, + 0xdc, 0x77, 0x3f, 0x92, 0x24, 0xa9, 0x49, 0x52, 0x81, 0xa4, + 0x02, 0x49, 0x05, 0x92, 0x0a, 0x24, 0x15, 0x48, 0x2a, 0x90, + 0x54, 0x20, 0xa9, 0x40, 0x52, 0x81, 0xa4, 0x02, 0x49, 0x05, + 0x92, 0x0a, 0x24, 0x15, 0x48, 0x2a, 0x90, 0x54, 0xf0, 0x87, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x7a, + 0x00, 0x0f, 0x52, 0x7b, 0xe5, 0xa8, 0x16, 0x87, 0x8b, 0x00, + 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, + 0x82, +}; + +ox::SpanView WindowIcon1080() noexcept { return WindowIcon1080Data; } + +ox::Vector> WindowIcons() noexcept { + return { + WindowIcon16(), + WindowIcon24(), + WindowIcon32(), + WindowIcon40(), + WindowIcon48(), + WindowIcon128(), + WindowIcon264(), + WindowIcon1080(), + }; +} + +} diff --git a/deps/nostalgia/src/nostalgia/studio/ns.rc b/deps/nostalgia/src/nostalgia/studio/ns.rc new file mode 100644 index 0000000..765682a --- /dev/null +++ b/deps/nostalgia/src/nostalgia/studio/ns.rc @@ -0,0 +1 @@ +IDI_ICON1 ICON DISCARDABLE "ns_logo.ico" diff --git a/deps/nostalgia/src/nostalgia/studio/ns_logo.ico b/deps/nostalgia/src/nostalgia/studio/ns_logo.ico new file mode 100644 index 0000000..320502f Binary files /dev/null and b/deps/nostalgia/src/nostalgia/studio/ns_logo.ico differ diff --git a/deps/nostalgia/src/nostalgia/studio/ns_logo1080.png b/deps/nostalgia/src/nostalgia/studio/ns_logo1080.png new file mode 100644 index 0000000..cca331c Binary files /dev/null and b/deps/nostalgia/src/nostalgia/studio/ns_logo1080.png differ diff --git a/deps/nostalgia/src/nostalgia/studio/ns_logo16.png b/deps/nostalgia/src/nostalgia/studio/ns_logo16.png new file mode 100644 index 0000000..19d7dd8 Binary files /dev/null and b/deps/nostalgia/src/nostalgia/studio/ns_logo16.png differ diff --git a/deps/nostalgia/src/nostalgia/studio/ns_logo24.png b/deps/nostalgia/src/nostalgia/studio/ns_logo24.png new file mode 100644 index 0000000..3a5eff6 Binary files /dev/null and b/deps/nostalgia/src/nostalgia/studio/ns_logo24.png differ diff --git a/deps/nostalgia/src/nostalgia/studio/ns_logo264.png b/deps/nostalgia/src/nostalgia/studio/ns_logo264.png new file mode 100644 index 0000000..dce287d Binary files /dev/null and b/deps/nostalgia/src/nostalgia/studio/ns_logo264.png differ diff --git a/deps/nostalgia/src/nostalgia/studio/ns_logo32.png b/deps/nostalgia/src/nostalgia/studio/ns_logo32.png new file mode 100644 index 0000000..3837350 Binary files /dev/null and b/deps/nostalgia/src/nostalgia/studio/ns_logo32.png differ diff --git a/deps/nostalgia/src/nostalgia/studio/ns_logo40.png b/deps/nostalgia/src/nostalgia/studio/ns_logo40.png new file mode 100644 index 0000000..cc169bd Binary files /dev/null and b/deps/nostalgia/src/nostalgia/studio/ns_logo40.png differ diff --git a/deps/nostalgia/src/nostalgia/studio/ns_logo48.png b/deps/nostalgia/src/nostalgia/studio/ns_logo48.png new file mode 100644 index 0000000..434223f Binary files /dev/null and b/deps/nostalgia/src/nostalgia/studio/ns_logo48.png differ diff --git a/deps/nostalgia/src/nostalgia/studio/rsrc.json b/deps/nostalgia/src/nostalgia/studio/rsrc.json new file mode 100644 index 0000000..79f169e --- /dev/null +++ b/deps/nostalgia/src/nostalgia/studio/rsrc.json @@ -0,0 +1,39 @@ +{ + "cpp": "icondata.cpp", + "namespace": "studio", + "all_files": "WindowIcons", + "files": [ + { + "path": "ns_logo16.png", + "cpp_name": "WindowIcon16" + }, + { + "path": "ns_logo24.png", + "cpp_name": "WindowIcon24" + }, + { + "path": "ns_logo32.png", + "cpp_name": "WindowIcon32" + }, + { + "path": "ns_logo40.png", + "cpp_name": "WindowIcon40" + }, + { + "path": "ns_logo48.png", + "cpp_name": "WindowIcon48" + }, + { + "path": "ns_logo128.png", + "cpp_name": "WindowIcon128" + }, + { + "path": "ns_logo264.png", + "cpp_name": "WindowIcon264" + }, + { + "path": "ns_logo1080.png", + "cpp_name": "WindowIcon1080" + } + ] +} diff --git a/deps/nostalgia/src/olympic/studio/applib/src/app.cpp b/deps/nostalgia/src/olympic/studio/applib/src/app.cpp index 9408119..b4bd9e3 100644 --- a/deps/nostalgia/src/olympic/studio/applib/src/app.cpp +++ b/deps/nostalgia/src/olympic/studio/applib/src/app.cpp @@ -32,11 +32,15 @@ static void keyEventHandler(turbine::Context &ctx, turbine::Key key, bool down) sctx->ui.handleKeyEvent(key, down); } +[[nodiscard]] +ox::Vector> WindowIcons() noexcept; + static ox::Error runApp( ox::StringViewCR appName, ox::StringViewCR projectDataDir, ox::UPtr &&fs) noexcept { OX_REQUIRE_M(ctx, turbine::init(std::move(fs), appName)); + oxLogError(turbine::setWindowIcon(*ctx, WindowIcons())); turbine::setWindowTitle(*ctx, keelCtx(*ctx).appName); turbine::setKeyEventHandler(*ctx, keyEventHandler); turbine::setRefreshWithin(*ctx, 0); diff --git a/deps/nostalgia/src/olympic/studio/modlib/include/studio/selectiontracker.hpp b/deps/nostalgia/src/olympic/studio/modlib/include/studio/selectiontracker.hpp index 35173b0..aa07b1a 100644 --- a/deps/nostalgia/src/olympic/studio/modlib/include/studio/selectiontracker.hpp +++ b/deps/nostalgia/src/olympic/studio/modlib/include/studio/selectiontracker.hpp @@ -71,12 +71,6 @@ class SelectionTracker { return m_selectionOngoing; } - constexpr void startSelection(ox::Point cursor) noexcept { - m_pointA = cursor; - m_pointB = cursor; - m_selectionOngoing = true; - } - /** * * @param cursor diff --git a/deps/nostalgia/src/olympic/turbine/include/turbine/gfx.hpp b/deps/nostalgia/src/olympic/turbine/include/turbine/gfx.hpp index b618390..52c1556 100644 --- a/deps/nostalgia/src/olympic/turbine/include/turbine/gfx.hpp +++ b/deps/nostalgia/src/olympic/turbine/include/turbine/gfx.hpp @@ -26,20 +26,22 @@ void removeDrawer(Context &ctx, Drawer *cd) noexcept; ox::Error initGfx(Context &ctx) noexcept; +ox::Error setWindowIcon(Context &ctx, ox::SpanView> const &iconPngs) noexcept; + void setWindowTitle(Context &ctx, ox::StringViewCR title) noexcept; void focusWindow(Context &ctx) noexcept; [[nodiscard]] -int getScreenWidth(Context &ctx) noexcept; +int getScreenWidth(Context const &ctx) noexcept; [[nodiscard]] -int getScreenHeight(Context &ctx) noexcept; +int getScreenHeight(Context const &ctx) noexcept; [[nodiscard]] -ox::Size getScreenSize(Context &ctx) noexcept; +ox::Size getScreenSize(Context const &ctx) noexcept; -ox::Bounds getWindowBounds(Context &ctx) noexcept; +ox::Bounds getWindowBounds(Context const &ctx) noexcept; ox::Error setWindowBounds(Context &ctx, ox::Bounds const&bnds) noexcept; diff --git a/deps/nostalgia/src/olympic/turbine/src/gba/gfx.cpp b/deps/nostalgia/src/olympic/turbine/src/gba/gfx.cpp index 393cb74..3d0bf44 100644 --- a/deps/nostalgia/src/olympic/turbine/src/gba/gfx.cpp +++ b/deps/nostalgia/src/olympic/turbine/src/gba/gfx.cpp @@ -27,19 +27,19 @@ ox::Error initGfx(Context&) noexcept { void setWindowTitle(Context&, ox::StringViewCR) noexcept { } -int getScreenWidth(Context&) noexcept { +int getScreenWidth(Context const&) noexcept { return 240; } -int getScreenHeight(Context&) noexcept { +int getScreenHeight(Context const&) noexcept { return 160; } -ox::Size getScreenSize(Context&) noexcept { +ox::Size getScreenSize(Context const&) noexcept { return {240, 160}; } -ox::Bounds getWindowBounds(Context&) noexcept { +ox::Bounds getWindowBounds(Context const&) noexcept { return {0, 0, 240, 160}; } diff --git a/deps/nostalgia/src/olympic/turbine/src/glfw/CMakeLists.txt b/deps/nostalgia/src/olympic/turbine/src/glfw/CMakeLists.txt index 47f7885..4eb91b4 100644 --- a/deps/nostalgia/src/olympic/turbine/src/glfw/CMakeLists.txt +++ b/deps/nostalgia/src/olympic/turbine/src/glfw/CMakeLists.txt @@ -21,4 +21,5 @@ target_link_libraries( glad glfw imgui + lodepng ) diff --git a/deps/nostalgia/src/olympic/turbine/src/glfw/gfx.cpp b/deps/nostalgia/src/olympic/turbine/src/glfw/gfx.cpp index 40f3b10..6676158 100644 --- a/deps/nostalgia/src/olympic/turbine/src/glfw/gfx.cpp +++ b/deps/nostalgia/src/olympic/turbine/src/glfw/gfx.cpp @@ -4,6 +4,7 @@ #include #include +#include #if TURBINE_USE_IMGUI #include #include @@ -228,6 +229,39 @@ ox::Error initGfx(Context &ctx) noexcept { return {}; } +struct IconData { + std::vector pixels; + int w{}, h{}; +}; + +[[nodiscard]] +static ox::Result toGlfwImgPixels(ox::SpanView const &iconPng) noexcept { + ox::Result out; + unsigned w{}, h{}; + if (lodepng::decode(out.value.pixels, w, h, iconPng.data(), iconPng.size())) { + return ox::Error{1, "unable to decode window icon PNG data"}; + } + out.value.w = static_cast(w); + out.value.h = static_cast(h); + return out; +} + +ox::Error setWindowIcon(Context &ctx, ox::SpanView> const &iconPngs) noexcept { + ox::Vector src; + ox::Vector imgs; + for (auto const &iconPng : iconPngs) { + OX_RETURN_ERROR(toGlfwImgPixels(iconPng).moveTo(src.emplace_back())); + auto &icon = *src.back().unwrap(); + imgs.emplace_back(GLFWimage{ + .width = icon.w, + .height = icon.h, + .pixels = icon.pixels.data(), + }); + } + glfwSetWindowIcon(ctx.window, static_cast(imgs.size()), imgs.data()); + return {}; +} + void setWindowTitle(Context &ctx, ox::StringViewCR title) noexcept { auto cstr = ox_malloca(title.bytes() + 1, char); ox::strncpy(cstr.get(), title.data(), title.bytes()); @@ -238,25 +272,25 @@ void focusWindow(Context &ctx) noexcept { glfwFocusWindow(ctx.window); } -int getScreenWidth(Context &ctx) noexcept { +int getScreenWidth(Context const &ctx) noexcept { int w = 0, h = 0; glfwGetFramebufferSize(ctx.window, &w, &h); return w; } -int getScreenHeight(Context &ctx) noexcept { +int getScreenHeight(Context const &ctx) noexcept { int w = 0, h = 0; glfwGetFramebufferSize(ctx.window, &w, &h); return h; } -ox::Size getScreenSize(Context &ctx) noexcept { +ox::Size getScreenSize(Context const &ctx) noexcept { int w = 0, h = 0; glfwGetFramebufferSize(ctx.window, &w, &h); return {w, h}; } -ox::Bounds getWindowBounds(Context &ctx) noexcept { +ox::Bounds getWindowBounds(Context const &ctx) noexcept { ox::Bounds bnds; glfwGetWindowPos(ctx.window, &bnds.x, &bnds.y); glfwGetWindowSize(ctx.window, &bnds.width, &bnds.height); diff --git a/deps/nostalgia/util/scripts/file-to-cpp.py b/deps/nostalgia/util/scripts/file-to-cpp.py new file mode 100755 index 0000000..79e789b --- /dev/null +++ b/deps/nostalgia/util/scripts/file-to-cpp.py @@ -0,0 +1,114 @@ +#! /usr/bin/env python3 + +# +# Copyright 2016 - 2025 gary@drinkingtea.net +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +import argparse +import os +import json +import pathlib +import sys + + +def write_txt_file(path: str, txt: str): + with open(path, "w") as f: + f.write(txt) + print(f'Wrote {path}') + + +def file_to_hex(path: str, line_prefix: str) -> tuple[str, int]: + with open(path, 'rb') as f: + out = line_prefix + data = f.read() + i = 1 + for b in data: + out += f"{b:#0{4}x}," + if i % 10 == 0: + out += '\n\t' + else: + out += ' ' + i += 1 + return out[:-1], len(data) + + +def file_to_cpp(path: str, cpp_name: str) -> tuple[str, str]: + cpp = '' + hpp = '' + data, data_len = file_to_hex(path, "\t") + cpp += f'\nstatic constexpr ox::Array {cpp_name}Data {{\n{data}\n}};\n' + cpp += f'\nox::SpanView {cpp_name}() noexcept {{ return {cpp_name}Data; }}\n' + hpp += f'\n[[nodiscard]]\nox::SpanView {cpp_name}() noexcept;\n' + return cpp, hpp + + +def proc_rsrc_file(rsrc_path: str):# Open and read the JSON file + with open(rsrc_path, 'r') as file: + data = json.load(file) + base_path = pathlib.Path(rsrc_path).parent.absolute() + if 'all_files' in data: + all_files = data['all_files'] + else: + all_files = None + if 'namespace' in data: + namespace = data['namespace'] + else: + namespace = '' + if len(namespace) > 0: + push_ns = f'namespace {namespace} {{\n' + pop_ns = '\n}\n' + else: + push_ns = '' + pop_ns = '' + cpp = '// Generated\n\n#include \n' + cpp += '#include \n\n' + hpp = '// Generated\n\n#include \n\n' + cpp += push_ns + hpp += push_ns + all_files_func_decl = '' + all_files_func = '' + if all_files is not None: + all_files_func_decl += f'\n[[nodiscard]]\nox::Vector> {all_files}() noexcept;\n' + all_files_func += f'\nox::Vector> {all_files}() noexcept {{\n\treturn {{\n' + for f in data['files']: + if 'path' not in f: + print('src file path missing', file=sys.stderr) + sys.exit(1) + path = f['path'] + if 'cpp_name' not in f: + print('var name missing', file=sys.stderr) + sys.exit(1) + cpp_name = f['cpp_name'] + c, h = file_to_cpp(os.path.join(base_path, path), cpp_name) + cpp += c + if len(h) > 0: + hpp += h + if all_files is not None: + all_files_func += f'\t\t{cpp_name}(),\n' + cpp += all_files_func + '\t};\n}\n' + hpp += all_files_func_decl + cpp += pop_ns + hpp += pop_ns + write_txt_file(os.path.join(base_path, data['cpp']), cpp) + if 'hpp' in data: + write_txt_file(os.path.join(base_path, data['hpp']), hpp) + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument('--rsrc', help='path to file', required=True) + args = parser.parse_args() + proc_rsrc_file(args.rsrc) + return 0 + + +if __name__ == '__main__': + try: + err = main() + sys.exit(err) + except KeyboardInterrupt: + sys.exit(1)