mirror of
https://github.com/daveallie/crosspoint-reader.git
synced 2026-02-06 23:57:39 +03:00
hypher tries
This commit is contained in:
parent
ac528bbf01
commit
163fae57ec
@ -3,7 +3,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "LiangHyphenation.h"
|
#include "LiangHyphenation.h"
|
||||||
#include "generated/hyph-en-us.trie.h"
|
#include "generated/hyph-en.trie.h"
|
||||||
|
|
||||||
const EnglishHyphenator& EnglishHyphenator::instance() {
|
const EnglishHyphenator& EnglishHyphenator::instance() {
|
||||||
static EnglishHyphenator instance;
|
static EnglishHyphenator instance;
|
||||||
|
|||||||
16
lib/Epub/Epub/hyphenation/FrenchHyphenator.cpp
Normal file
16
lib/Epub/Epub/hyphenation/FrenchHyphenator.cpp
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#include "FrenchHyphenator.h"
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "LiangHyphenation.h"
|
||||||
|
#include "generated/hyph-fr.trie.h"
|
||||||
|
|
||||||
|
const FrenchHyphenator& FrenchHyphenator::instance() {
|
||||||
|
static FrenchHyphenator instance;
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<size_t> FrenchHyphenator::breakIndexes(const std::vector<CodepointInfo>& cps) const {
|
||||||
|
const LiangWordConfig config(isLatinLetter, toLowerLatin, minPrefix(), minSuffix());
|
||||||
|
return liangBreakIndexes(cps, fr_patterns, config);
|
||||||
|
}
|
||||||
14
lib/Epub/Epub/hyphenation/FrenchHyphenator.h
Normal file
14
lib/Epub/Epub/hyphenation/FrenchHyphenator.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "LanguageHyphenator.h"
|
||||||
|
|
||||||
|
// Implements Liang hyphenation rules for French (Latin script).
|
||||||
|
class FrenchHyphenator final : public LanguageHyphenator {
|
||||||
|
public:
|
||||||
|
static const FrenchHyphenator& instance();
|
||||||
|
|
||||||
|
std::vector<size_t> breakIndexes(const std::vector<CodepointInfo>& cps) const override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
FrenchHyphenator() = default;
|
||||||
|
};
|
||||||
@ -6,6 +6,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "EnglishHyphenator.h"
|
#include "EnglishHyphenator.h"
|
||||||
|
#include "FrenchHyphenator.h"
|
||||||
#include "GermanHyphenator.h"
|
#include "GermanHyphenator.h"
|
||||||
#include "HyphenationCommon.h"
|
#include "HyphenationCommon.h"
|
||||||
#include "LanguageHyphenator.h"
|
#include "LanguageHyphenator.h"
|
||||||
@ -28,6 +29,7 @@ const LanguageHyphenator* hyphenatorForLanguage(const std::string& langTag) {
|
|||||||
if (primary.empty()) return nullptr;
|
if (primary.empty()) return nullptr;
|
||||||
|
|
||||||
if (primary == "en") return &EnglishHyphenator::instance();
|
if (primary == "en") return &EnglishHyphenator::instance();
|
||||||
|
if (primary == "fr") return &FrenchHyphenator::instance();
|
||||||
if (primary == "de") return &GermanHyphenator::instance();
|
if (primary == "de") return &GermanHyphenator::instance();
|
||||||
if (primary == "ru") return &RussianHyphenator::instance();
|
if (primary == "ru") return &RussianHyphenator::instance();
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|||||||
@ -1,288 +1,310 @@
|
|||||||
#include "LiangHyphenation.h"
|
#include "LiangHyphenation.h"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <limits>
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Liang hyphenation pipeline overview (Typst-style binary trie variant)
|
||||||
|
* --------------------------------------------------------------------
|
||||||
|
* 1. Input normalization (buildAugmentedWord)
|
||||||
|
* - Accepts a vector of CodepointInfo structs emitted by the EPUB text
|
||||||
|
* parser. Each codepoint is validated with LiangWordConfig::isLetter so
|
||||||
|
* we abort early on digits, punctuation, etc. If the word is valid we
|
||||||
|
* build an "augmented" byte sequence: leading '.', lowercase UTF-8 bytes
|
||||||
|
* for every letter, then a trailing '.'. While doing this we capture the
|
||||||
|
* UTF-8 byte offset for each character and a reverse lookup table that
|
||||||
|
* maps UTF-8 byte indexes back to codepoint indexes. This lets the rest
|
||||||
|
* of the algorithm stay byte-oriented (matching the serialized automaton)
|
||||||
|
* while still emitting hyphen positions in codepoint space.
|
||||||
|
*
|
||||||
|
* 2. Automaton decoding
|
||||||
|
* - SerializedHyphenationPatterns stores a contiguous blob generated from
|
||||||
|
* Typst's binary tries. The first 4 bytes contain the root offset. Each
|
||||||
|
* node packs transitions, variable-stride relative offsets to child
|
||||||
|
* nodes, and an optional pointer into a shared "levels" list. We parse
|
||||||
|
* that layout lazily via decodeState/transition, keeping everything in
|
||||||
|
* flash memory; no heap allocations besides the stack-local AutomatonState
|
||||||
|
* structs. getAutomaton caches parseAutomaton results per blob pointer so
|
||||||
|
* multiple words hitting the same language only pay the cost once.
|
||||||
|
*
|
||||||
|
* 3. Pattern application
|
||||||
|
* - We walk the augmented bytes left-to-right. For each starting byte we
|
||||||
|
* stream transitions through the trie, terminating when a transition
|
||||||
|
* fails. Whenever a node exposes level data we expand the packed
|
||||||
|
* "dist+level" bytes: `dist` is the delta (in UTF-8 bytes) from the
|
||||||
|
* starting cursor and `level` is the Liang priority digit. Using the
|
||||||
|
* byte→codepoint lookup we mark the corresponding index in `scores`.
|
||||||
|
* Scores are only updated if the new level is higher, mirroring Liang's
|
||||||
|
* "max digit wins" rule.
|
||||||
|
*
|
||||||
|
* 4. Output filtering
|
||||||
|
* - collectBreakIndexes converts odd-valued score entries back to codepoint
|
||||||
|
* break positions while enforcing `minPrefix`/`minSuffix` constraints from
|
||||||
|
* LiangWordConfig. The caller (language-specific hyphenators) can then
|
||||||
|
* translate these indexes into renderer glyph offsets, page layout data,
|
||||||
|
* etc.
|
||||||
|
*
|
||||||
|
* Keeping the entire algorithm small and deterministic is critical on the
|
||||||
|
* ESP32-C3: we avoid recursion, dynamic allocations per node, or copying the
|
||||||
|
* trie. All lookups stay within the generated blob, which lives in flash, and
|
||||||
|
* the working buffers (augmented bytes/scores) scale with the word length rather
|
||||||
|
* than the pattern corpus.
|
||||||
|
*/
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
// Holds the dotted, lower-case representation used by Liang along with the original character order
|
|
||||||
// so we can traverse via Unicode scalars instead of raw UTF-8 bytes.
|
|
||||||
struct AugmentedWord {
|
struct AugmentedWord {
|
||||||
std::vector<uint32_t> chars;
|
std::vector<uint8_t> bytes;
|
||||||
|
std::vector<size_t> charByteOffsets;
|
||||||
|
std::vector<int32_t> byteToCharIndex;
|
||||||
|
|
||||||
bool empty() const { return chars.empty(); }
|
bool empty() const { return bytes.empty(); }
|
||||||
size_t charCount() const { return chars.size(); }
|
size_t charCount() const { return charByteOffsets.size(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
// Adds a single character to the augmented word.
|
// Encode a single Unicode codepoint into UTF-8 and append to the provided buffer.
|
||||||
void appendCharToAugmentedWord(uint32_t cp, AugmentedWord& word) { word.chars.push_back(cp); }
|
size_t encodeUtf8(uint32_t cp, std::vector<uint8_t>& out) {
|
||||||
|
if (cp <= 0x7Fu) {
|
||||||
|
out.push_back(static_cast<uint8_t>(cp));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (cp <= 0x7FFu) {
|
||||||
|
out.push_back(static_cast<uint8_t>(0xC0u | ((cp >> 6) & 0x1Fu)));
|
||||||
|
out.push_back(static_cast<uint8_t>(0x80u | (cp & 0x3Fu)));
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
if (cp <= 0xFFFFu) {
|
||||||
|
out.push_back(static_cast<uint8_t>(0xE0u | ((cp >> 12) & 0x0Fu)));
|
||||||
|
out.push_back(static_cast<uint8_t>(0x80u | ((cp >> 6) & 0x3Fu)));
|
||||||
|
out.push_back(static_cast<uint8_t>(0x80u | (cp & 0x3Fu)));
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
out.push_back(static_cast<uint8_t>(0xF0u | ((cp >> 18) & 0x07u)));
|
||||||
|
out.push_back(static_cast<uint8_t>(0x80u | ((cp >> 12) & 0x3Fu)));
|
||||||
|
out.push_back(static_cast<uint8_t>(0x80u | ((cp >> 6) & 0x3Fu)));
|
||||||
|
out.push_back(static_cast<uint8_t>(0x80u | (cp & 0x3Fu)));
|
||||||
|
return 4;
|
||||||
|
}
|
||||||
|
|
||||||
// Produces the dotted ('.' + lowercase word + '.') UTF-8 byte stream required by Liang. Classic TeX
|
// Build the dotted, lowercase UTF-8 representation plus lookup tables.
|
||||||
// hyphenation logic prepends/appends '.' sentinels so that patterns like ".ab" may anchor to word
|
|
||||||
// boundaries. If any character in the candidate word fails the `isLetter` predicate we abort early
|
|
||||||
// and return an empty structure, signaling the caller to skip hyphenation entirely.
|
|
||||||
AugmentedWord buildAugmentedWord(const std::vector<CodepointInfo>& cps, const LiangWordConfig& config) {
|
AugmentedWord buildAugmentedWord(const std::vector<CodepointInfo>& cps, const LiangWordConfig& config) {
|
||||||
AugmentedWord word;
|
AugmentedWord word;
|
||||||
if (cps.empty()) {
|
if (cps.empty()) {
|
||||||
return word;
|
return word;
|
||||||
}
|
}
|
||||||
|
|
||||||
word.chars.reserve(cps.size() + 2);
|
word.bytes.reserve(cps.size() * 2 + 2);
|
||||||
|
word.charByteOffsets.reserve(cps.size() + 2);
|
||||||
|
|
||||||
|
word.charByteOffsets.push_back(0);
|
||||||
|
word.bytes.push_back('.');
|
||||||
|
|
||||||
appendCharToAugmentedWord('.', word);
|
|
||||||
for (const auto& info : cps) {
|
for (const auto& info : cps) {
|
||||||
if (!config.isLetter(info.value)) {
|
if (!config.isLetter(info.value)) {
|
||||||
word.chars.clear();
|
word.bytes.clear();
|
||||||
|
word.charByteOffsets.clear();
|
||||||
|
word.byteToCharIndex.clear();
|
||||||
return word;
|
return word;
|
||||||
}
|
}
|
||||||
appendCharToAugmentedWord(config.toLower(info.value), word);
|
word.charByteOffsets.push_back(word.bytes.size());
|
||||||
|
encodeUtf8(config.toLower(info.value), word.bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
word.charByteOffsets.push_back(word.bytes.size());
|
||||||
|
word.bytes.push_back('.');
|
||||||
|
|
||||||
|
word.byteToCharIndex.assign(word.bytes.size(), -1);
|
||||||
|
for (size_t i = 0; i < word.charByteOffsets.size(); ++i) {
|
||||||
|
const size_t offset = word.charByteOffsets[i];
|
||||||
|
if (offset < word.byteToCharIndex.size()) {
|
||||||
|
word.byteToCharIndex[offset] = static_cast<int32_t>(i);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
appendCharToAugmentedWord('.', word);
|
|
||||||
return word;
|
return word;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compact header that prefixes every serialized trie blob and lets us locate
|
// Decoded view of a single trie node pulled straight out of the serialized blob.
|
||||||
// the individual sections without storing pointers in flash.
|
// - transitions: contiguous list of next-byte values
|
||||||
struct SerializedTrieHeader {
|
// - targets: packed relative offsets (1/2/3 bytes) for each transition
|
||||||
uint32_t letterCount;
|
// - levels: optional pointer into the global levels list with packed dist/level pairs
|
||||||
uint32_t nodeCount;
|
struct AutomatonState {
|
||||||
uint32_t edgeCount;
|
const uint8_t* data = nullptr;
|
||||||
uint32_t valueBytes;
|
size_t size = 0;
|
||||||
|
size_t addr = 0;
|
||||||
|
uint8_t stride = 1;
|
||||||
|
size_t childCount = 0;
|
||||||
|
const uint8_t* transitions = nullptr;
|
||||||
|
const uint8_t* targets = nullptr;
|
||||||
|
const uint8_t* levels = nullptr;
|
||||||
|
size_t levelsLen = 0;
|
||||||
|
|
||||||
|
bool valid() const { return data != nullptr; }
|
||||||
};
|
};
|
||||||
|
|
||||||
constexpr size_t kNodeRecordSize = 7;
|
// Lightweight descriptor for the entire embedded automaton.
|
||||||
constexpr uint32_t kNoValueOffset = 0x00FFFFFFu;
|
// The blob format is:
|
||||||
|
// [0..3] - big-endian root offset
|
||||||
|
// [4....] - node heap containing variable-sized headers + transition data
|
||||||
|
struct EmbeddedAutomaton {
|
||||||
|
const uint8_t* data = nullptr;
|
||||||
|
size_t size = 0;
|
||||||
|
uint32_t rootOffset = 0;
|
||||||
|
|
||||||
// Lightweight view over the packed blob emitted by the generator script.
|
bool valid() const { return data != nullptr && size >= 4 && rootOffset < size; }
|
||||||
struct SerializedTrieView {
|
|
||||||
const uint32_t* letters = nullptr;
|
|
||||||
const uint8_t* nodes = nullptr;
|
|
||||||
const uint8_t* edgeChildren = nullptr;
|
|
||||||
const uint8_t* edgeLetters = nullptr;
|
|
||||||
const uint8_t* values = nullptr;
|
|
||||||
uint32_t letterCount = 0;
|
|
||||||
uint32_t nodeCount = 0;
|
|
||||||
uint32_t edgeCount = 0;
|
|
||||||
uint32_t valueBytes = 0;
|
|
||||||
size_t edgeLetterBytes = 0;
|
|
||||||
|
|
||||||
static constexpr size_t kInvalidNodeIndex = std::numeric_limits<size_t>::max();
|
|
||||||
static constexpr uint32_t kInvalidLetterIndex = std::numeric_limits<uint32_t>::max();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Splits the raw byte array into typed slices. We purposely keep this logic
|
// Decode the serialized automaton header and root offset.
|
||||||
// very defensive: any malformed blob results in an empty view so the caller can
|
EmbeddedAutomaton parseAutomaton(const SerializedHyphenationPatterns& patterns) {
|
||||||
// bail out quietly.
|
EmbeddedAutomaton automaton;
|
||||||
SerializedTrieView parseSerializedTrie(const SerializedHyphenationPatterns& patterns) {
|
if (!patterns.data || patterns.size < 4) {
|
||||||
SerializedTrieView view;
|
return automaton;
|
||||||
if (!patterns.data || patterns.size < sizeof(SerializedTrieHeader)) {
|
|
||||||
return view;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto* header = reinterpret_cast<const SerializedTrieHeader*>(patterns.data);
|
automaton.data = patterns.data;
|
||||||
const uint8_t* cursor = patterns.data + sizeof(SerializedTrieHeader);
|
automaton.size = patterns.size;
|
||||||
const uint8_t* end = patterns.data + patterns.size;
|
automaton.rootOffset = (static_cast<uint32_t>(patterns.data[0]) << 24) |
|
||||||
|
(static_cast<uint32_t>(patterns.data[1]) << 16) |
|
||||||
const auto requireBytes = [&](size_t bytes) { return bytes <= static_cast<size_t>(end - cursor); };
|
(static_cast<uint32_t>(patterns.data[2]) << 8) |
|
||||||
|
static_cast<uint32_t>(patterns.data[3]);
|
||||||
const size_t lettersBytes = static_cast<size_t>(header->letterCount) * sizeof(uint32_t);
|
if (automaton.rootOffset >= automaton.size) {
|
||||||
if (!requireBytes(lettersBytes)) {
|
automaton.data = nullptr;
|
||||||
return SerializedTrieView{};
|
automaton.size = 0;
|
||||||
}
|
}
|
||||||
view.letters = reinterpret_cast<const uint32_t*>(cursor);
|
return automaton;
|
||||||
cursor += lettersBytes;
|
|
||||||
|
|
||||||
const size_t nodesBytes = static_cast<size_t>(header->nodeCount) * kNodeRecordSize;
|
|
||||||
if (!requireBytes(nodesBytes)) {
|
|
||||||
return SerializedTrieView{};
|
|
||||||
}
|
|
||||||
view.nodes = cursor;
|
|
||||||
cursor += nodesBytes;
|
|
||||||
|
|
||||||
const size_t childBytes = static_cast<size_t>(header->edgeCount) * sizeof(uint16_t);
|
|
||||||
if (!requireBytes(childBytes)) {
|
|
||||||
return SerializedTrieView{};
|
|
||||||
}
|
|
||||||
view.edgeChildren = cursor;
|
|
||||||
cursor += childBytes;
|
|
||||||
|
|
||||||
const size_t letterBits = static_cast<size_t>(header->edgeCount) * 6;
|
|
||||||
const size_t letterBytes = (letterBits + 7) >> 3;
|
|
||||||
if (!requireBytes(letterBytes)) {
|
|
||||||
return SerializedTrieView{};
|
|
||||||
}
|
|
||||||
view.edgeLetters = cursor;
|
|
||||||
view.edgeLetterBytes = letterBytes;
|
|
||||||
cursor += letterBytes;
|
|
||||||
|
|
||||||
if (!requireBytes(header->valueBytes)) {
|
|
||||||
return SerializedTrieView{};
|
|
||||||
}
|
|
||||||
view.values = cursor;
|
|
||||||
view.valueBytes = header->valueBytes;
|
|
||||||
|
|
||||||
view.letterCount = header->letterCount;
|
|
||||||
view.nodeCount = header->nodeCount;
|
|
||||||
view.edgeCount = header->edgeCount;
|
|
||||||
return view;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// The serialized blobs live in PROGMEM, so parsing them repeatedly is cheap but
|
// Cache parsed automata per blob pointer to avoid reparsing.
|
||||||
// wasteful. Keep a tiny cache indexed by the descriptor address so every
|
const EmbeddedAutomaton& getAutomaton(const SerializedHyphenationPatterns& patterns) {
|
||||||
// language builds its view only once.
|
|
||||||
const SerializedTrieView& getSerializedTrie(const SerializedHyphenationPatterns& patterns) {
|
|
||||||
struct CacheEntry {
|
struct CacheEntry {
|
||||||
const SerializedHyphenationPatterns* key;
|
const SerializedHyphenationPatterns* key;
|
||||||
SerializedTrieView view;
|
EmbeddedAutomaton automaton;
|
||||||
};
|
};
|
||||||
static std::vector<CacheEntry> cache;
|
static std::vector<CacheEntry> cache;
|
||||||
|
|
||||||
for (const auto& entry : cache) {
|
for (const auto& entry : cache) {
|
||||||
if (entry.key == &patterns) {
|
if (entry.key == &patterns) {
|
||||||
return entry.view;
|
return entry.automaton;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cache.push_back({&patterns, parseSerializedTrie(patterns)});
|
cache.push_back({&patterns, parseAutomaton(patterns)});
|
||||||
return cache.back().view;
|
return cache.back().automaton;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t readUint16LE(const uint8_t* ptr) {
|
// Interpret the node located at `addr`, returning transition metadata.
|
||||||
return static_cast<uint16_t>(ptr[0]) | static_cast<uint16_t>(static_cast<uint16_t>(ptr[1]) << 8);
|
AutomatonState decodeState(const EmbeddedAutomaton& automaton, size_t addr) {
|
||||||
}
|
AutomatonState state;
|
||||||
|
if (!automaton.valid() || addr >= automaton.size) {
|
||||||
uint32_t readUint24LE(const uint8_t* ptr) {
|
return state;
|
||||||
return static_cast<uint32_t>(ptr[0]) | (static_cast<uint32_t>(ptr[1]) << 8) | (static_cast<uint32_t>(ptr[2]) << 16);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Edges store child indexes and letter indexes in separate, compact arrays. We
|
|
||||||
// read the child from the 16-bit table and decode the 6-bit letter from the
|
|
||||||
// bitstream, which packs two entries per 12 bits on average.
|
|
||||||
uint8_t readEdgeLetterIndex(const SerializedTrieView& trie, const size_t edgeIndex) {
|
|
||||||
if (!trie.edgeLetters) {
|
|
||||||
return 0xFFu;
|
|
||||||
}
|
|
||||||
const size_t bitOffset = edgeIndex * 6;
|
|
||||||
const size_t byteOffset = bitOffset >> 3;
|
|
||||||
if (byteOffset >= trie.edgeLetterBytes) {
|
|
||||||
return 0xFFu;
|
|
||||||
}
|
|
||||||
const uint8_t bitShift = static_cast<uint8_t>(bitOffset & 0x07u);
|
|
||||||
uint32_t chunk = trie.edgeLetters[byteOffset];
|
|
||||||
if (byteOffset + 1 < trie.edgeLetterBytes) {
|
|
||||||
chunk |= static_cast<uint32_t>(trie.edgeLetters[byteOffset + 1]) << 8;
|
|
||||||
}
|
|
||||||
const uint8_t value = static_cast<uint8_t>((chunk >> bitShift) & 0x3Fu);
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Materialized view of a node record so call sites do not repeatedly poke into
|
|
||||||
// the byte array.
|
|
||||||
struct NodeFields {
|
|
||||||
uint16_t firstEdge;
|
|
||||||
uint8_t childCount;
|
|
||||||
uint32_t valueOffset;
|
|
||||||
uint8_t valueLength;
|
|
||||||
};
|
|
||||||
|
|
||||||
NodeFields loadNode(const SerializedTrieView& trie, const size_t nodeIndex) {
|
|
||||||
NodeFields fields{0, 0, kNoValueOffset, 0};
|
|
||||||
if (!trie.nodes || nodeIndex >= trie.nodeCount) {
|
|
||||||
return fields;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const uint8_t* entry = trie.nodes + nodeIndex * kNodeRecordSize;
|
const uint8_t* base = automaton.data + addr;
|
||||||
fields.firstEdge = readUint16LE(entry);
|
size_t remaining = automaton.size - addr;
|
||||||
fields.childCount = entry[2];
|
size_t pos = 0;
|
||||||
fields.valueOffset = readUint24LE(entry + 3);
|
|
||||||
fields.valueLength = entry[6];
|
|
||||||
return fields;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Letter indexes are stored sorted, so a lower_bound gives us O(log n) lookups
|
const uint8_t header = base[pos++];
|
||||||
// without building auxiliary maps.
|
// Header layout (bits):
|
||||||
uint32_t letterIndexForCodepoint(const SerializedTrieView& trie, const uint32_t cp) {
|
// 7 - hasLevels flag
|
||||||
if (!trie.letters || trie.letterCount == 0) {
|
// 6..5 - stride selector (0 -> 1 byte, otherwise 1|2|3)
|
||||||
return SerializedTrieView::kInvalidLetterIndex;
|
// 4..0 - child count (5 bits), 31 == overflow -> extra byte
|
||||||
|
const bool hasLevels = (header >> 7) != 0;
|
||||||
|
uint8_t stride = static_cast<uint8_t>((header >> 5) & 0x03u);
|
||||||
|
if (stride == 0) {
|
||||||
|
stride = 1;
|
||||||
}
|
}
|
||||||
const uint32_t* begin = trie.letters;
|
size_t childCount = static_cast<size_t>(header & 0x1Fu);
|
||||||
const uint32_t* end = begin + trie.letterCount;
|
if (childCount == 31u) {
|
||||||
const auto it = std::lower_bound(begin, end, cp);
|
if (pos >= remaining) {
|
||||||
if (it == end || *it != cp) {
|
return AutomatonState{};
|
||||||
return SerializedTrieView::kInvalidLetterIndex;
|
|
||||||
}
|
|
||||||
return static_cast<uint32_t>(it - begin);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Walks the child edge slice described by the node record using binary search
|
|
||||||
// on the inlined letter indexes. Returns kInvalidNodeIndex when the path ends.
|
|
||||||
size_t findChild(const SerializedTrieView& trie, const size_t nodeIndex, const uint32_t letter) {
|
|
||||||
const uint32_t letterIndex = letterIndexForCodepoint(trie, letter);
|
|
||||||
if (letterIndex == SerializedTrieView::kInvalidLetterIndex) {
|
|
||||||
return SerializedTrieView::kInvalidNodeIndex;
|
|
||||||
}
|
|
||||||
if (!trie.edgeChildren || !trie.edgeLetters) {
|
|
||||||
return SerializedTrieView::kInvalidNodeIndex;
|
|
||||||
}
|
|
||||||
|
|
||||||
const NodeFields node = loadNode(trie, nodeIndex);
|
|
||||||
size_t low = 0;
|
|
||||||
size_t high = node.childCount;
|
|
||||||
while (low < high) {
|
|
||||||
const size_t mid = low + ((high - low) >> 1);
|
|
||||||
const size_t edgeIndex = static_cast<size_t>(node.firstEdge) + mid;
|
|
||||||
if (edgeIndex >= trie.edgeCount) {
|
|
||||||
return SerializedTrieView::kInvalidNodeIndex;
|
|
||||||
}
|
|
||||||
const uint32_t entryLetterIndex = readEdgeLetterIndex(trie, edgeIndex);
|
|
||||||
if (entryLetterIndex == letterIndex) {
|
|
||||||
const uint8_t* childPtr = trie.edgeChildren + edgeIndex * sizeof(uint16_t);
|
|
||||||
return readUint16LE(childPtr);
|
|
||||||
}
|
|
||||||
if (entryLetterIndex < letterIndex) {
|
|
||||||
low = mid + 1;
|
|
||||||
} else {
|
|
||||||
high = mid;
|
|
||||||
}
|
}
|
||||||
|
childCount = base[pos++];
|
||||||
}
|
}
|
||||||
return SerializedTrieView::kInvalidNodeIndex;
|
|
||||||
|
const uint8_t* levelsPtr = nullptr;
|
||||||
|
size_t levelsLen = 0;
|
||||||
|
if (hasLevels) {
|
||||||
|
if (pos + 1 >= remaining) {
|
||||||
|
return AutomatonState{};
|
||||||
|
}
|
||||||
|
const uint8_t offsetHi = base[pos++];
|
||||||
|
const uint8_t offsetLoLen = base[pos++];
|
||||||
|
// The 12-bit offset (hi<<4 | top nibble) points into the blob-level levels list.
|
||||||
|
// The bottom nibble stores how many packed entries belong to this node.
|
||||||
|
const size_t offset = (static_cast<size_t>(offsetHi) << 4) | (offsetLoLen >> 4);
|
||||||
|
levelsLen = offsetLoLen & 0x0Fu;
|
||||||
|
if (offset + levelsLen > automaton.size) {
|
||||||
|
return AutomatonState{};
|
||||||
|
}
|
||||||
|
levelsPtr = automaton.data + offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pos + childCount > remaining) {
|
||||||
|
return AutomatonState{};
|
||||||
|
}
|
||||||
|
const uint8_t* transitions = base + pos;
|
||||||
|
pos += childCount;
|
||||||
|
|
||||||
|
const size_t targetsBytes = childCount * stride;
|
||||||
|
if (pos + targetsBytes > remaining) {
|
||||||
|
return AutomatonState{};
|
||||||
|
}
|
||||||
|
const uint8_t* targets = base + pos;
|
||||||
|
|
||||||
|
state.data = automaton.data;
|
||||||
|
state.size = automaton.size;
|
||||||
|
state.addr = addr;
|
||||||
|
state.stride = stride;
|
||||||
|
state.childCount = childCount;
|
||||||
|
state.transitions = transitions;
|
||||||
|
state.targets = targets;
|
||||||
|
state.levels = levelsPtr;
|
||||||
|
state.levelsLen = levelsLen;
|
||||||
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Merges the pattern's numeric priorities into the global score array (max per slot).
|
// Convert the packed stride-sized delta back into a signed offset.
|
||||||
void applyPatternValues(const SerializedTrieView& trie, const NodeFields& node, const size_t startCharIndex,
|
int32_t decodeDelta(const uint8_t* buf, uint8_t stride) {
|
||||||
std::vector<uint8_t>& scores) {
|
if (stride == 1) {
|
||||||
if (node.valueLength == 0 || node.valueOffset == kNoValueOffset || !trie.values ||
|
return static_cast<int8_t>(buf[0]);
|
||||||
node.valueOffset >= trie.valueBytes) {
|
}
|
||||||
return;
|
if (stride == 2) {
|
||||||
|
return static_cast<int16_t>((static_cast<uint16_t>(buf[0]) << 8) | static_cast<uint16_t>(buf[1]));
|
||||||
|
}
|
||||||
|
const int32_t unsignedVal = (static_cast<int32_t>(buf[0]) << 16) | (static_cast<int32_t>(buf[1]) << 8) |
|
||||||
|
static_cast<int32_t>(buf[2]);
|
||||||
|
return unsignedVal - (1 << 23);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Follow a single byte transition from `state`, decoding the child node on success.
|
||||||
|
bool transition(const EmbeddedAutomaton& automaton, const AutomatonState& state, uint8_t letter,
|
||||||
|
AutomatonState& out) {
|
||||||
|
if (!state.valid()) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const size_t availableBytes = trie.valueBytes - node.valueOffset;
|
// Children remain sorted by letter in the serialized blob, but the lists are
|
||||||
const size_t packedBytesNeeded = (static_cast<size_t>(node.valueLength) + 1) >> 1;
|
// short enough that a linear scan keeps code size down compared to binary search.
|
||||||
const size_t packedBytes = std::min<size_t>(packedBytesNeeded, availableBytes);
|
for (size_t idx = 0; idx < state.childCount; ++idx) {
|
||||||
const uint8_t* packedValues = trie.values + node.valueOffset;
|
if (state.transitions[idx] != letter) {
|
||||||
// Value digits remain nibble-encoded (two per byte) to keep flash usage low;
|
continue;
|
||||||
// expand back to single scores just before applying them.
|
|
||||||
for (size_t valueIdx = 0; valueIdx < node.valueLength; ++valueIdx) {
|
|
||||||
const size_t packedIndex = valueIdx >> 1;
|
|
||||||
if (packedIndex >= packedBytes) {
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
const uint8_t packedByte = packedValues[packedIndex];
|
const uint8_t* deltaPtr = state.targets + idx * state.stride;
|
||||||
const uint8_t value =
|
const int32_t delta = decodeDelta(deltaPtr, state.stride);
|
||||||
(valueIdx & 1u) ? static_cast<uint8_t>((packedByte >> 4) & 0x0Fu) : static_cast<uint8_t>(packedByte & 0x0Fu);
|
// Deltas are relative to the current node's address, allowing us to keep all
|
||||||
const size_t scoreIdx = startCharIndex + valueIdx;
|
// targets within 24 bits while still referencing further nodes in the blob.
|
||||||
if (scoreIdx >= scores.size()) {
|
const int64_t nextAddr = static_cast<int64_t>(state.addr) + delta;
|
||||||
break;
|
if (nextAddr < 0 || static_cast<size_t>(nextAddr) >= automaton.size) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
scores[scoreIdx] = std::max(scores[scoreIdx], value);
|
out = decodeState(automaton, static_cast<size_t>(nextAddr));
|
||||||
|
return out.valid();
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Converts odd score positions back into codepoint indexes, honoring min prefix/suffix constraints.
|
// Converts odd score positions back into codepoint indexes, honoring min prefix/suffix constraints.
|
||||||
// By iterating over codepoint indexes rather than raw byte offsets we naturally support UTF-8 input
|
// Each break corresponds to scores[breakIndex + 1] because of the leading '.' sentinel.
|
||||||
// without bookkeeping gymnastics. Each break corresponds to scores[breakIndex + 1] because of the
|
// Convert odd score entries into hyphen positions while honoring prefix/suffix limits.
|
||||||
// leading '.' sentinel emitted in buildAugmentedWord().
|
|
||||||
std::vector<size_t> collectBreakIndexes(const std::vector<CodepointInfo>& cps, const std::vector<uint8_t>& scores,
|
std::vector<size_t> collectBreakIndexes(const std::vector<CodepointInfo>& cps, const std::vector<uint8_t>& scores,
|
||||||
const size_t minPrefix, const size_t minSuffix) {
|
const size_t minPrefix, const size_t minSuffix) {
|
||||||
std::vector<size_t> indexes;
|
std::vector<size_t> indexes;
|
||||||
@ -301,7 +323,7 @@ std::vector<size_t> collectBreakIndexes(const std::vector<CodepointInfo>& cps, c
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const size_t scoreIdx = breakIndex + 1; // Account for leading '.' sentinel.
|
const size_t scoreIdx = breakIndex + 1;
|
||||||
if (scoreIdx >= scores.size()) {
|
if (scoreIdx >= scores.size()) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -316,41 +338,63 @@ std::vector<size_t> collectBreakIndexes(const std::vector<CodepointInfo>& cps, c
|
|||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
// Entry point that runs the full Liang pipeline for a single word.
|
||||||
std::vector<size_t> liangBreakIndexes(const std::vector<CodepointInfo>& cps,
|
std::vector<size_t> liangBreakIndexes(const std::vector<CodepointInfo>& cps,
|
||||||
const SerializedHyphenationPatterns& patterns, const LiangWordConfig& config) {
|
const SerializedHyphenationPatterns& patterns, const LiangWordConfig& config) {
|
||||||
// Step 1: convert the input word into the dotted UTF-8 stream the Liang algorithm expects. A return
|
|
||||||
// value of {} means the word contained something outside the language's alphabet and should be left
|
|
||||||
// untouched by hyphenation.
|
|
||||||
const auto augmented = buildAugmentedWord(cps, config);
|
const auto augmented = buildAugmentedWord(cps, config);
|
||||||
if (augmented.empty()) {
|
if (augmented.empty()) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 2: run the augmented word through the trie-backed pattern table so we reuse common prefixes
|
const EmbeddedAutomaton& automaton = getAutomaton(patterns);
|
||||||
// instead of rescanning the UTF-8 bytes for every substring.
|
if (!automaton.valid()) {
|
||||||
const SerializedTrieView& trie = getSerializedTrie(patterns);
|
|
||||||
if (!trie.nodes || trie.nodeCount == 0) {
|
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
const size_t charCount = augmented.charCount();
|
|
||||||
std::vector<uint8_t> scores(charCount + 1, 0);
|
const AutomatonState root = decodeState(automaton, automaton.rootOffset);
|
||||||
for (size_t charStart = 0; charStart < charCount; ++charStart) {
|
if (!root.valid()) {
|
||||||
size_t currentNode = 0; // Root node.
|
return {};
|
||||||
for (size_t cursor = charStart; cursor < charCount; ++cursor) {
|
}
|
||||||
const uint32_t letter = augmented.chars[cursor];
|
|
||||||
currentNode = findChild(trie, currentNode, letter);
|
std::vector<uint8_t> scores(augmented.charCount(), 0);
|
||||||
if (currentNode == SerializedTrieView::kInvalidNodeIndex) {
|
|
||||||
|
for (size_t charStart = 0; charStart < augmented.charByteOffsets.size(); ++charStart) {
|
||||||
|
size_t byteStart = augmented.charByteOffsets[charStart];
|
||||||
|
AutomatonState state = root;
|
||||||
|
for (size_t cursor = byteStart; cursor < augmented.bytes.size(); ++cursor) {
|
||||||
|
AutomatonState next;
|
||||||
|
if (!transition(automaton, state, augmented.bytes[cursor], next)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
state = next;
|
||||||
|
|
||||||
const NodeFields node = loadNode(trie, currentNode);
|
if (state.levels && state.levelsLen > 0) {
|
||||||
if (node.valueLength > 0 && node.valueOffset != kNoValueOffset) {
|
size_t offset = 0;
|
||||||
applyPatternValues(trie, node, charStart, scores);
|
for (size_t i = 0; i < state.levelsLen; ++i) {
|
||||||
|
const uint8_t packed = state.levels[i];
|
||||||
|
const size_t dist = static_cast<size_t>(packed / 10);
|
||||||
|
const uint8_t level = static_cast<uint8_t>(packed % 10);
|
||||||
|
offset += dist;
|
||||||
|
const size_t splitByte = byteStart + offset;
|
||||||
|
if (splitByte >= augmented.byteToCharIndex.size()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const int32_t boundary = augmented.byteToCharIndex[splitByte];
|
||||||
|
if (boundary < 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (boundary < 2 || boundary + 2 > static_cast<int32_t>(augmented.charCount())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const size_t idx = static_cast<size_t>(boundary);
|
||||||
|
if (idx >= scores.size()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
scores[idx] = std::max(scores[idx], level);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 3: translate odd-numbered score positions back into codepoint indexes, enforcing per-language
|
|
||||||
// prefix/suffix minima so we do not produce visually awkward fragments.
|
|
||||||
return collectBreakIndexes(cps, scores, config.minPrefix, config.minSuffix);
|
return collectBreakIndexes(cps, scores, config.minPrefix, config.minSuffix);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "LiangHyphenation.h"
|
#include "LiangHyphenation.h"
|
||||||
#include "generated/hyph-ru-ru.trie.h"
|
#include "generated/hyph-ru.trie.h"
|
||||||
|
|
||||||
const RussianHyphenator& RussianHyphenator::instance() {
|
const RussianHyphenator& RussianHyphenator::instance() {
|
||||||
static RussianHyphenator instance;
|
static RussianHyphenator instance;
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
1700
lib/Epub/Epub/hyphenation/generated/hyph-en.trie.h
Normal file
1700
lib/Epub/Epub/hyphenation/generated/hyph-en.trie.h
Normal file
File diff suppressed because it is too large
Load Diff
452
lib/Epub/Epub/hyphenation/generated/hyph-fr.trie.h
Normal file
452
lib/Epub/Epub/hyphenation/generated/hyph-fr.trie.h
Normal file
@ -0,0 +1,452 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstddef>
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
#include "../SerializedHyphenationTrie.h"
|
||||||
|
|
||||||
|
// Auto-generated by generate_hyphenation_trie.py. Do not edit manually.
|
||||||
|
alignas(4) constexpr uint8_t fr_trie_data[] = {
|
||||||
|
0x00, 0x00, 0x1A, 0xF4, 0x02, 0x0C, 0x18, 0x22, 0x16, 0x21, 0x0B, 0x16, 0x21, 0x0E, 0x01, 0x0C,
|
||||||
|
0x0B, 0x3D, 0x0C, 0x2B, 0x0E, 0x0C, 0x0C, 0x33, 0x0C, 0x33, 0x16, 0x34, 0x2A, 0x0D, 0x20, 0x0D,
|
||||||
|
0x0C, 0x0D, 0x2A, 0x17, 0x04, 0x1F, 0x0C, 0x29, 0x0C, 0x20, 0x0B, 0x0C, 0x17, 0x17, 0x0C, 0x3F,
|
||||||
|
0x35, 0x53, 0x4A, 0x36, 0x34, 0x21, 0x2A, 0x0D, 0x0C, 0x2A, 0x0D, 0x16, 0x02, 0x17, 0x15, 0x15,
|
||||||
|
0x0C, 0x15, 0x16, 0x2C, 0x47, 0x0C, 0x49, 0x2B, 0x0C, 0x0D, 0x34, 0x0D, 0x2A, 0x0B, 0x16, 0x2B,
|
||||||
|
0x0C, 0x17, 0x2A, 0x0B, 0x0C, 0x03, 0x0C, 0x16, 0x0D, 0x01, 0x16, 0x0C, 0x0B, 0x0C, 0x3E, 0x48,
|
||||||
|
0x2C, 0x0B, 0x29, 0x16, 0x37, 0x40, 0x1F, 0x16, 0x20, 0x17, 0x36, 0x0D, 0x52, 0x3D, 0x16, 0x1F,
|
||||||
|
0x0C, 0x16, 0x3E, 0x0D, 0x49, 0x0C, 0x03, 0x16, 0x35, 0x0C, 0x22, 0x0F, 0x02, 0x0D, 0x51, 0x0C,
|
||||||
|
0x21, 0x0C, 0x20, 0x0B, 0x16, 0x21, 0x0C, 0x17, 0x21, 0x0C, 0x0D, 0xA0, 0x00, 0x91, 0x21, 0x61,
|
||||||
|
0xFD, 0x21, 0xA9, 0xFD, 0x21, 0xC3, 0xFD, 0x21, 0x72, 0xFD, 0xA0, 0x00, 0xC2, 0x21, 0x68, 0xFD,
|
||||||
|
0x21, 0x63, 0xFD, 0x21, 0x73, 0xFD, 0xA0, 0x00, 0x51, 0x21, 0x6C, 0xFD, 0x21, 0x6F, 0xFD, 0x21,
|
||||||
|
0x6F, 0xFD, 0x21, 0x63, 0xFD, 0xA0, 0x01, 0x12, 0x21, 0x63, 0xFD, 0x21, 0x61, 0xFD, 0x21, 0x6F,
|
||||||
|
0xFD, 0x21, 0x6E, 0xFD, 0x21, 0x69, 0xFD, 0xA0, 0x01, 0x32, 0x21, 0x72, 0xFD, 0x21, 0x74, 0xFD,
|
||||||
|
0x21, 0x73, 0xFD, 0xA0, 0x01, 0x52, 0x21, 0x69, 0xFD, 0x21, 0x73, 0xFD, 0x21, 0xA9, 0xFD, 0x21,
|
||||||
|
0xC3, 0xFD, 0x21, 0x68, 0xFD, 0x21, 0x74, 0xFD, 0x21, 0x73, 0xFD, 0xA0, 0x01, 0x72, 0xA0, 0x01,
|
||||||
|
0xB1, 0x21, 0x65, 0xFD, 0x21, 0x6E, 0xFD, 0xA1, 0x01, 0x72, 0x6E, 0xFD, 0xA0, 0x01, 0x92, 0x21,
|
||||||
|
0xA9, 0xFD, 0x24, 0x61, 0x65, 0xC3, 0x73, 0xE9, 0xF5, 0xFD, 0xE9, 0x21, 0x69, 0xF7, 0x23, 0x61,
|
||||||
|
0x65, 0x74, 0xC2, 0xDA, 0xFD, 0xA0, 0x01, 0xC2, 0x21, 0x61, 0xFD, 0x21, 0x74, 0xFD, 0x21, 0x73,
|
||||||
|
0xFD, 0x21, 0x6F, 0xFD, 0xA0, 0x01, 0xE1, 0x21, 0x61, 0xFD, 0x21, 0x74, 0xFD, 0x41, 0x2E, 0xFF,
|
||||||
|
0x5E, 0x21, 0x74, 0xFC, 0x21, 0x6E, 0xFD, 0x21, 0x65, 0xFD, 0x22, 0x67, 0x70, 0xFD, 0xFD, 0xA0,
|
||||||
|
0x05, 0x72, 0x21, 0x74, 0xFD, 0x21, 0x61, 0xFD, 0x21, 0x6E, 0xFD, 0xC9, 0x00, 0x61, 0x62, 0x65,
|
||||||
|
0x6C, 0x6D, 0x6E, 0x70, 0x73, 0x72, 0x67, 0xFF, 0x4C, 0xFF, 0x58, 0xFF, 0x67, 0xFF, 0x79, 0xFF,
|
||||||
|
0xC3, 0xFF, 0xD6, 0xFF, 0xDF, 0xFF, 0xEF, 0xFF, 0xFD, 0xA0, 0x00, 0x71, 0x27, 0xA2, 0xAA, 0xA9,
|
||||||
|
0xA8, 0xAE, 0xB4, 0xBB, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xA0, 0x02, 0x52, 0x22, 0x61,
|
||||||
|
0x6F, 0xFD, 0xFD, 0xA0, 0x02, 0x93, 0x21, 0x61, 0xFD, 0x21, 0x72, 0xFD, 0xA2, 0x00, 0x61, 0x6E,
|
||||||
|
0x75, 0xF2, 0xFD, 0x21, 0xA9, 0xAC, 0x42, 0xC3, 0x69, 0xFF, 0xFD, 0xFF, 0xA9, 0x21, 0x6E, 0xF9,
|
||||||
|
0x41, 0x74, 0xFF, 0x06, 0x21, 0x61, 0xFC, 0x21, 0x6D, 0xFD, 0x21, 0x72, 0xFD, 0x21, 0x6F, 0xFD,
|
||||||
|
0xA0, 0x01, 0xE2, 0x21, 0x74, 0xFD, 0x21, 0x69, 0xFD, 0x41, 0x72, 0xFF, 0x6B, 0x21, 0x75, 0xFC,
|
||||||
|
0x21, 0x67, 0xFD, 0xA2, 0x02, 0x52, 0x6E, 0x75, 0xF3, 0xFD, 0x41, 0x62, 0xFF, 0x5A, 0x21, 0x61,
|
||||||
|
0xFC, 0x21, 0x66, 0xFD, 0x41, 0x74, 0xFF, 0x50, 0x41, 0x72, 0xFF, 0x4F, 0x21, 0x6F, 0xFC, 0xC4,
|
||||||
|
0x02, 0x52, 0x66, 0x70, 0x72, 0x78, 0xFF, 0xF2, 0xFF, 0xF5, 0xFF, 0x45, 0xFF, 0xFD, 0xA0, 0x06,
|
||||||
|
0x82, 0x21, 0x61, 0xFD, 0x21, 0x74, 0xFD, 0x21, 0x63, 0xFD, 0x21, 0x75, 0xFD, 0x21, 0x72, 0xF4,
|
||||||
|
0x21, 0x72, 0xFD, 0x21, 0x61, 0xFD, 0xA2, 0x06, 0x62, 0x6C, 0x6E, 0xF4, 0xFD, 0x21, 0xA9, 0xF9,
|
||||||
|
0x41, 0x69, 0xFF, 0xA0, 0x21, 0x74, 0xFC, 0x21, 0x69, 0xFD, 0xC3, 0x02, 0x52, 0x6D, 0x71, 0x74,
|
||||||
|
0xFF, 0xFD, 0xFF, 0x96, 0xFF, 0x96, 0x41, 0x6C, 0xFF, 0x8A, 0x21, 0x75, 0xFC, 0x41, 0x64, 0xFE,
|
||||||
|
0xF7, 0xA2, 0x02, 0x52, 0x63, 0x6E, 0xF9, 0xFC, 0x41, 0x62, 0xFF, 0x43, 0x21, 0x61, 0xFC, 0x21,
|
||||||
|
0x74, 0xFD, 0xA0, 0x05, 0xF1, 0xA0, 0x06, 0xC1, 0x21, 0xA9, 0xFD, 0xA7, 0x06, 0xA2, 0x61, 0x65,
|
||||||
|
0xC3, 0x69, 0x6F, 0x75, 0x73, 0xF7, 0xF7, 0xFD, 0xF7, 0xF7, 0xF7, 0xF7, 0x21, 0x72, 0xEF, 0x21,
|
||||||
|
0x65, 0xFD, 0xC2, 0x02, 0x52, 0x69, 0x6C, 0xFF, 0x72, 0xFF, 0x4E, 0x49, 0x66, 0x61, 0x65, 0xC3,
|
||||||
|
0x69, 0x6F, 0x73, 0x74, 0x75, 0xFF, 0x42, 0xFF, 0x58, 0xFF, 0x74, 0xFF, 0xA2, 0xFF, 0xAF, 0xFF,
|
||||||
|
0xC6, 0xFF, 0xD4, 0xFF, 0xF4, 0xFF, 0xF7, 0xC2, 0x00, 0x61, 0x67, 0x6E, 0xFF, 0x16, 0xFF, 0xE4,
|
||||||
|
0x41, 0x75, 0xFE, 0xA7, 0x21, 0x67, 0xFC, 0x41, 0x65, 0xFF, 0x09, 0x21, 0x74, 0xFC, 0xA0, 0x02,
|
||||||
|
0x71, 0x21, 0x75, 0xFD, 0x21, 0x6F, 0xFD, 0x21, 0x61, 0xFD, 0xA0, 0x02, 0x72, 0x21, 0x63, 0xFD,
|
||||||
|
0x21, 0x73, 0xFD, 0x21, 0x69, 0xFD, 0xA4, 0x00, 0x61, 0x6E, 0x63, 0x75, 0x76, 0xDE, 0xE5, 0xF1,
|
||||||
|
0xFD, 0xA0, 0x00, 0x61, 0xC7, 0x00, 0x42, 0x61, 0xC3, 0x65, 0x69, 0x6F, 0x75, 0x79, 0xFE, 0x87,
|
||||||
|
0xFE, 0xA8, 0xFE, 0xC8, 0xFF, 0xC3, 0xFF, 0xF2, 0xFF, 0xFD, 0xFF, 0xFD, 0x42, 0x61, 0x74, 0xFD,
|
||||||
|
0xF4, 0xFE, 0x2F, 0x43, 0x64, 0x67, 0x70, 0xFE, 0x54, 0xFE, 0x54, 0xFE, 0x54, 0xC8, 0x00, 0x61,
|
||||||
|
0x62, 0x65, 0x6D, 0x6E, 0x70, 0x73, 0x72, 0x67, 0xFD, 0xAA, 0xFD, 0xB6, 0xFD, 0xD7, 0xFF, 0xEF,
|
||||||
|
0xFE, 0x34, 0xFE, 0x3D, 0xFF, 0xF6, 0xFE, 0x5B, 0xA0, 0x03, 0x01, 0x21, 0x2E, 0xFD, 0x21, 0x74,
|
||||||
|
0xFD, 0x21, 0x6E, 0xFD, 0x21, 0x65, 0xFD, 0x21, 0x6E, 0xFD, 0x21, 0x69, 0xFD, 0xA1, 0x00, 0x71,
|
||||||
|
0x6D, 0xFD, 0x47, 0xA2, 0xAA, 0xA9, 0xA8, 0xAE, 0xB4, 0xBB, 0xFE, 0x47, 0xFE, 0x47, 0xFF, 0xFB,
|
||||||
|
0xFE, 0x47, 0xFE, 0x47, 0xFE, 0x47, 0xFE, 0x47, 0xA0, 0x02, 0x22, 0x21, 0x6E, 0xFD, 0x21, 0x69,
|
||||||
|
0xFD, 0x21, 0x61, 0xFD, 0x21, 0x6D, 0xFD, 0x21, 0x65, 0xFD, 0x21, 0x73, 0xFD, 0x21, 0x69, 0xFD,
|
||||||
|
0xA0, 0x02, 0x51, 0x43, 0x63, 0x74, 0x75, 0xFE, 0x28, 0xFE, 0x28, 0xFF, 0xFD, 0x41, 0x61, 0xFF,
|
||||||
|
0x4D, 0x44, 0x61, 0x6F, 0x73, 0x75, 0xFF, 0xF2, 0xFF, 0xFC, 0xFE, 0x25, 0xFE, 0x1A, 0x22, 0x61,
|
||||||
|
0x69, 0xDF, 0xF3, 0xA0, 0x03, 0x42, 0x21, 0x65, 0xFD, 0x21, 0x6C, 0xFD, 0x21, 0x6C, 0xFD, 0x21,
|
||||||
|
0x69, 0xFD, 0x21, 0x75, 0xFD, 0x21, 0x65, 0xFD, 0x21, 0x66, 0xFD, 0x21, 0x65, 0xFD, 0x21, 0x72,
|
||||||
|
0xFD, 0x21, 0x76, 0xFD, 0x21, 0xA8, 0xFD, 0xA1, 0x00, 0x71, 0xC3, 0xFD, 0xA0, 0x02, 0x92, 0x21,
|
||||||
|
0x70, 0xFD, 0x21, 0x6C, 0xFD, 0x21, 0x61, 0xFD, 0x21, 0x73, 0xFD, 0xA0, 0x03, 0x31, 0xA0, 0x04,
|
||||||
|
0x42, 0x21, 0x63, 0xFD, 0xA0, 0x04, 0x61, 0x21, 0x65, 0xFD, 0x21, 0x72, 0xFD, 0x21, 0x74, 0xFD,
|
||||||
|
0x21, 0xAE, 0xFD, 0x21, 0xC3, 0xFD, 0x21, 0x61, 0xFD, 0x22, 0x73, 0x6D, 0xE8, 0xFD, 0x21, 0x65,
|
||||||
|
0xFB, 0x21, 0x72, 0xFD, 0xA2, 0x04, 0x31, 0x73, 0x74, 0xD7, 0xFD, 0x41, 0x65, 0xFD, 0xD5, 0x21,
|
||||||
|
0x69, 0xFC, 0xA1, 0x02, 0x52, 0x6C, 0xFD, 0xA0, 0x01, 0x31, 0x21, 0x2E, 0xFD, 0x21, 0x74, 0xFD,
|
||||||
|
0x21, 0x6E, 0xFD, 0x21, 0x65, 0xFD, 0x21, 0x6D, 0xFD, 0x23, 0x6E, 0x6F, 0x6D, 0xDB, 0xE9, 0xFD,
|
||||||
|
0xA0, 0x04, 0x31, 0x21, 0x6C, 0xFD, 0x44, 0x68, 0x69, 0x6F, 0x75, 0xFF, 0x91, 0xFF, 0xA2, 0xFF,
|
||||||
|
0xF3, 0xFF, 0xFD, 0x41, 0x61, 0xFF, 0x9B, 0x21, 0x6F, 0xFC, 0x21, 0x79, 0xFD, 0x21, 0x72, 0xFD,
|
||||||
|
0x21, 0x63, 0xFD, 0x41, 0x6F, 0xFE, 0x7B, 0xA0, 0x04, 0x73, 0x21, 0x72, 0xFD, 0xA0, 0x04, 0xA2,
|
||||||
|
0x21, 0x6C, 0xF7, 0x21, 0x6C, 0xFD, 0x21, 0x65, 0xFD, 0xA0, 0x04, 0x72, 0x21, 0x72, 0xFD, 0x21,
|
||||||
|
0x74, 0xFD, 0x24, 0x63, 0x6D, 0x74, 0x73, 0xE8, 0xEB, 0xF4, 0xFD, 0xA0, 0x04, 0xF3, 0x21, 0x72,
|
||||||
|
0xFD, 0xA1, 0x04, 0xC3, 0x67, 0xFD, 0x21, 0xA9, 0xFB, 0x21, 0x62, 0xE0, 0x21, 0x69, 0xFD, 0x21,
|
||||||
|
0x73, 0xFD, 0x21, 0x74, 0xD7, 0x21, 0x75, 0xD4, 0x23, 0x6E, 0x72, 0x78, 0xF7, 0xFA, 0xFD, 0x21,
|
||||||
|
0x6E, 0xB8, 0x21, 0x69, 0xB5, 0x21, 0x6F, 0xC4, 0x22, 0x65, 0x76, 0xF7, 0xFD, 0xC6, 0x05, 0x23,
|
||||||
|
0x64, 0x67, 0x6C, 0x6E, 0x72, 0x73, 0xFF, 0xAA, 0xFF, 0xF2, 0xFF, 0xF5, 0xFF, 0xFB, 0xFF, 0xAA,
|
||||||
|
0xFF, 0xE5, 0x41, 0xA9, 0xFF, 0x95, 0x21, 0xC3, 0xFC, 0x41, 0x69, 0xFF, 0x97, 0x42, 0x6D, 0x70,
|
||||||
|
0xFF, 0x9C, 0xFF, 0x9C, 0x41, 0x66, 0xFF, 0x98, 0x45, 0x64, 0x6C, 0x70, 0x72, 0x75, 0xFF, 0xEE,
|
||||||
|
0xFF, 0x7F, 0xFF, 0xF1, 0xFF, 0xF5, 0xFF, 0xFC, 0xA0, 0x04, 0xC2, 0x21, 0x93, 0xFD, 0xA0, 0x05,
|
||||||
|
0x23, 0x21, 0x6E, 0xFD, 0xCA, 0x01, 0xC1, 0x61, 0x63, 0xC3, 0x65, 0x69, 0x6F, 0xC5, 0x70, 0x74,
|
||||||
|
0x75, 0xFF, 0x7E, 0xFF, 0x75, 0xFF, 0x92, 0xFF, 0xA4, 0xFF, 0xB9, 0xFF, 0xE4, 0xFF, 0xF7, 0xFF,
|
||||||
|
0x75, 0xFF, 0x75, 0xFF, 0xFD, 0x44, 0x61, 0x69, 0x6F, 0x73, 0xFD, 0xC5, 0xFF, 0x3E, 0xFD, 0xC5,
|
||||||
|
0xFF, 0xDF, 0x21, 0xA9, 0xF3, 0x41, 0xA9, 0xFC, 0x86, 0x41, 0x64, 0xFC, 0x82, 0x22, 0xC3, 0x69,
|
||||||
|
0xF8, 0xFC, 0x41, 0x64, 0xFE, 0x4E, 0x41, 0x69, 0xFC, 0x75, 0x41, 0x6D, 0xFC, 0x71, 0x21, 0x6F,
|
||||||
|
0xFC, 0x24, 0x63, 0x6C, 0x6D, 0x74, 0xEC, 0xF1, 0xF5, 0xFD, 0x41, 0x6E, 0xFC, 0x61, 0x41, 0x68,
|
||||||
|
0xFC, 0x92, 0x23, 0x61, 0x65, 0x73, 0xEF, 0xF8, 0xFC, 0xC4, 0x01, 0xE2, 0x61, 0x69, 0x6F, 0x75,
|
||||||
|
0xFC, 0x5A, 0xFC, 0x5A, 0xFC, 0x5A, 0xFC, 0x5A, 0x21, 0x73, 0xF1, 0x41, 0x6C, 0xFB, 0xFC, 0x45,
|
||||||
|
0x61, 0xC3, 0x69, 0x79, 0x6F, 0xFE, 0xE1, 0xFF, 0xB3, 0xFF, 0xE3, 0xFF, 0xF9, 0xFF, 0xFC, 0x48,
|
||||||
|
0x61, 0x65, 0xC3, 0x69, 0x6F, 0x73, 0x74, 0x75, 0xFC, 0x74, 0xFC, 0x90, 0xFC, 0xBE, 0xFC, 0xCB,
|
||||||
|
0xFC, 0xE2, 0xFC, 0xF0, 0xFD, 0x10, 0xFD, 0x13, 0xC2, 0x00, 0x61, 0x67, 0x6E, 0xFC, 0x35, 0xFF,
|
||||||
|
0xE7, 0x41, 0x64, 0xFE, 0x6A, 0x21, 0x69, 0xFC, 0x41, 0x61, 0xFC, 0x3B, 0x21, 0x63, 0xFC, 0x21,
|
||||||
|
0x69, 0xFD, 0x22, 0x63, 0x66, 0xF3, 0xFD, 0x41, 0x6D, 0xFC, 0x29, 0x22, 0x69, 0x75, 0xF7, 0xFC,
|
||||||
|
0x21, 0x6E, 0xFB, 0x41, 0x73, 0xFB, 0x25, 0x21, 0x6F, 0xFC, 0x42, 0x6B, 0x72, 0xFC, 0x16, 0xFF,
|
||||||
|
0xFD, 0x41, 0x73, 0xFB, 0xE2, 0x42, 0x65, 0x6F, 0xFF, 0xFC, 0xFB, 0xDE, 0x21, 0x72, 0xF9, 0x41,
|
||||||
|
0xA9, 0xFD, 0xED, 0x21, 0xC3, 0xFC, 0x21, 0x73, 0xFD, 0x44, 0x64, 0x69, 0x70, 0x76, 0xFF, 0xF3,
|
||||||
|
0xFF, 0xFD, 0xFD, 0xE3, 0xFB, 0xCA, 0x41, 0x6E, 0xFD, 0xD6, 0x41, 0x74, 0xFD, 0xD2, 0x21, 0x6E,
|
||||||
|
0xFC, 0x42, 0x63, 0x64, 0xFD, 0xCB, 0xFB, 0xB2, 0x24, 0x61, 0x65, 0x69, 0x6F, 0xE1, 0xEE, 0xF6,
|
||||||
|
0xF9, 0x41, 0x78, 0xFD, 0xBB, 0x24, 0x67, 0x63, 0x6C, 0x72, 0xAB, 0xB5, 0xF3, 0xFC, 0x41, 0x68,
|
||||||
|
0xFE, 0xCA, 0x21, 0x6F, 0xFC, 0xC1, 0x01, 0xC1, 0x6E, 0xFD, 0xF2, 0x41, 0x73, 0xFE, 0xBD, 0x41,
|
||||||
|
0x73, 0xFE, 0xBF, 0x44, 0x61, 0x65, 0x69, 0x75, 0xFF, 0xF2, 0xFF, 0xF8, 0xFE, 0xB5, 0xFF, 0xFC,
|
||||||
|
0x41, 0x61, 0xFA, 0xA5, 0x21, 0x74, 0xFC, 0x21, 0x73, 0xFD, 0x21, 0x61, 0xFD, 0x23, 0x67, 0x73,
|
||||||
|
0x74, 0xD5, 0xE6, 0xFD, 0x21, 0xA9, 0xF9, 0xA0, 0x01, 0x11, 0x21, 0x6D, 0xFD, 0x21, 0x61, 0xFD,
|
||||||
|
0x21, 0x69, 0xFD, 0x21, 0x6C, 0xFD, 0x21, 0x6C, 0xFD, 0x41, 0xC3, 0xFA, 0xC6, 0x21, 0x64, 0xFC,
|
||||||
|
0x42, 0xA9, 0xAF, 0xFA, 0xBC, 0xFF, 0xFD, 0x47, 0x61, 0x65, 0xC3, 0x69, 0x6F, 0x75, 0x73, 0xFA,
|
||||||
|
0xA4, 0xFA, 0xA4, 0xFF, 0xF9, 0xFA, 0xA4, 0xFA, 0xA4, 0xFA, 0xA4, 0xFA, 0xA4, 0x21, 0x6F, 0xEA,
|
||||||
|
0x21, 0x6E, 0xFD, 0x44, 0x61, 0xC3, 0x69, 0x6F, 0xFF, 0x82, 0xFF, 0xC1, 0xFF, 0xD3, 0xFF, 0xFD,
|
||||||
|
0x41, 0x68, 0xFA, 0xA5, 0x21, 0x74, 0xFC, 0x21, 0x61, 0xFD, 0x21, 0x6E, 0xFD, 0xA0, 0x06, 0x22,
|
||||||
|
0x21, 0xA9, 0xFD, 0x41, 0xA9, 0xFC, 0x27, 0x21, 0xC3, 0xFC, 0x21, 0x63, 0xFD, 0xA0, 0x07, 0x82,
|
||||||
|
0x21, 0x68, 0xFD, 0x21, 0x64, 0xFD, 0x24, 0x67, 0xC3, 0x73, 0x75, 0xE4, 0xEA, 0xF4, 0xFD, 0x41,
|
||||||
|
0x61, 0xFD, 0x8E, 0xC2, 0x01, 0x72, 0x6C, 0x75, 0xFF, 0xFC, 0xFA, 0x4B, 0x47, 0x61, 0xC3, 0x65,
|
||||||
|
0x69, 0x6F, 0x75, 0x73, 0xFF, 0xF7, 0xFA, 0x53, 0xFA, 0x3F, 0xFA, 0x3F, 0xFA, 0x3F, 0xFA, 0x3F,
|
||||||
|
0xFA, 0x3F, 0x21, 0xA9, 0xEA, 0x22, 0x6F, 0xC3, 0xD1, 0xFD, 0x41, 0xA9, 0xFA, 0xB9, 0x21, 0xC3,
|
||||||
|
0xFC, 0x43, 0x66, 0x6D, 0x72, 0xFA, 0xB2, 0xFF, 0xFD, 0xFA, 0xB5, 0x41, 0x73, 0xFC, 0xC1, 0x42,
|
||||||
|
0x68, 0x74, 0xFA, 0xA4, 0xFC, 0xBD, 0x21, 0x70, 0xF9, 0x23, 0x61, 0x69, 0x6F, 0xE8, 0xF2, 0xFD,
|
||||||
|
0x41, 0xA8, 0xFA, 0x93, 0x42, 0x65, 0xC3, 0xFA, 0x8F, 0xFF, 0xFC, 0x21, 0x68, 0xF9, 0x42, 0x63,
|
||||||
|
0x73, 0xFF, 0xFD, 0xF9, 0xED, 0x41, 0xA9, 0xFA, 0xAB, 0x21, 0xC3, 0xFC, 0x43, 0x61, 0x68, 0x65,
|
||||||
|
0xFF, 0xF2, 0xFF, 0xFD, 0xFA, 0x28, 0x43, 0x6E, 0x72, 0x74, 0xFF, 0xD3, 0xFF, 0xF6, 0xFA, 0x21,
|
||||||
|
0xA0, 0x01, 0xC1, 0x21, 0x61, 0xFD, 0x21, 0x74, 0xFD, 0xC6, 0x00, 0x71, 0x61, 0x65, 0xC3, 0x69,
|
||||||
|
0x6F, 0x75, 0xFB, 0x81, 0xFB, 0x81, 0xFF, 0x57, 0xFB, 0x81, 0xFB, 0x81, 0xFB, 0x81, 0x22, 0x6E,
|
||||||
|
0x72, 0xE8, 0xEB, 0x41, 0x73, 0xFE, 0xE4, 0xA0, 0x07, 0x22, 0x21, 0x61, 0xFD, 0xA2, 0x01, 0x12,
|
||||||
|
0x73, 0x74, 0xFA, 0xFD, 0x43, 0x6F, 0x73, 0x75, 0xFF, 0xEF, 0xFF, 0xF9, 0xF9, 0x61, 0x21, 0x69,
|
||||||
|
0xF6, 0x21, 0x72, 0xFD, 0x21, 0xA9, 0xFD, 0xA0, 0x07, 0x42, 0x21, 0x74, 0xFD, 0x21, 0x73, 0xFD,
|
||||||
|
0x21, 0x6E, 0xFD, 0x21, 0x61, 0xFD, 0x21, 0x6C, 0xFD, 0xA1, 0x00, 0x71, 0x61, 0xFD, 0x41, 0x61,
|
||||||
|
0xFE, 0xA9, 0x21, 0x69, 0xFC, 0x21, 0x72, 0xFD, 0x21, 0x75, 0xFD, 0x41, 0x74, 0xFF, 0x95, 0x21,
|
||||||
|
0x65, 0xFC, 0x21, 0x74, 0xFD, 0x41, 0x6E, 0xFD, 0x23, 0x45, 0x68, 0x69, 0x6F, 0x72, 0x73, 0xF9,
|
||||||
|
0x7C, 0xFF, 0xFC, 0xFD, 0x25, 0xF9, 0x7C, 0xF9, 0x52, 0x21, 0x74, 0xF0, 0x22, 0x6E, 0x73, 0xE6,
|
||||||
|
0xFD, 0x41, 0x6E, 0xFB, 0xFD, 0x21, 0x61, 0xFC, 0x21, 0x6F, 0xFD, 0x21, 0x68, 0xFD, 0x21, 0x63,
|
||||||
|
0xFD, 0x21, 0x79, 0xFD, 0x41, 0x6C, 0xFA, 0xE6, 0x21, 0x64, 0xFC, 0x21, 0x64, 0xFD, 0x49, 0x72,
|
||||||
|
0x61, 0x65, 0xC3, 0x68, 0x6C, 0x6F, 0x73, 0x75, 0xFE, 0xF7, 0xFF, 0x48, 0xFF, 0x70, 0xFF, 0x96,
|
||||||
|
0xFF, 0xAB, 0xFF, 0xBA, 0xFF, 0xDE, 0xFF, 0xF3, 0xFF, 0xFD, 0x41, 0x6E, 0xF9, 0x2B, 0x21, 0x67,
|
||||||
|
0xFC, 0x41, 0x6C, 0xFB, 0x17, 0x21, 0x6C, 0xFC, 0x22, 0x61, 0x69, 0xF6, 0xFD, 0x41, 0x67, 0xFE,
|
||||||
|
0x7D, 0x21, 0x6E, 0xFC, 0x41, 0x72, 0xFB, 0xF2, 0x41, 0x65, 0xFF, 0x18, 0x21, 0x6C, 0xFC, 0x42,
|
||||||
|
0x72, 0x75, 0xFB, 0xE7, 0xFF, 0xFD, 0x41, 0x68, 0xFB, 0xEA, 0xA0, 0x08, 0x02, 0x21, 0x74, 0xFD,
|
||||||
|
0xA1, 0x02, 0x93, 0x6C, 0xFD, 0xA0, 0x08, 0x53, 0xA1, 0x08, 0x23, 0x72, 0xFD, 0x21, 0xA9, 0xFB,
|
||||||
|
0x41, 0x6E, 0xF9, 0x80, 0x21, 0x69, 0xFC, 0x42, 0x6D, 0x6E, 0xFF, 0xFD, 0xF9, 0x79, 0x42, 0x69,
|
||||||
|
0x75, 0xFF, 0xF9, 0xF9, 0x72, 0x41, 0x72, 0xFB, 0x57, 0x45, 0x61, 0xC3, 0x69, 0x6C, 0x75, 0xFF,
|
||||||
|
0xD7, 0xFF, 0xE4, 0xFD, 0x7D, 0xFF, 0xF5, 0xFF, 0xFC, 0xA0, 0x08, 0x83, 0xA1, 0x02, 0x93, 0x74,
|
||||||
|
0xFD, 0x21, 0x75, 0xB9, 0x21, 0x6C, 0xB6, 0xA3, 0x02, 0x93, 0x61, 0x6C, 0x74, 0xFA, 0xFD, 0xB3,
|
||||||
|
0xA0, 0x08, 0x23, 0x21, 0xA9, 0xFD, 0x42, 0x66, 0x74, 0xFB, 0x26, 0xFB, 0x26, 0x42, 0x6D, 0x6E,
|
||||||
|
0xF9, 0x06, 0xFF, 0xF9, 0x42, 0x66, 0x78, 0xFB, 0x18, 0xFB, 0x18, 0x46, 0x61, 0x65, 0xC3, 0x68,
|
||||||
|
0x69, 0x6F, 0xFF, 0xD1, 0xFF, 0xDC, 0xFF, 0xE8, 0xF9, 0x25, 0xFF, 0xF2, 0xFF, 0xF9, 0x22, 0x62,
|
||||||
|
0x72, 0xAB, 0xED, 0x41, 0x76, 0xFB, 0x50, 0x21, 0x75, 0xFC, 0x48, 0x74, 0x79, 0x61, 0x65, 0x63,
|
||||||
|
0x68, 0x75, 0x6F, 0xFF, 0x4E, 0xFF, 0x57, 0xFF, 0x5A, 0xFF, 0x65, 0xFF, 0x6C, 0xF8, 0xBF, 0xFF,
|
||||||
|
0xF4, 0xFF, 0xFD, 0xC3, 0x00, 0x61, 0x6E, 0x75, 0x76, 0xF9, 0xD1, 0xF9, 0xE4, 0xF9, 0xF0, 0x41,
|
||||||
|
0x68, 0xF8, 0x9A, 0x43, 0x63, 0x6E, 0x74, 0xF9, 0xD7, 0xF9, 0xD7, 0xF9, 0xD7, 0x41, 0x6E, 0xF9,
|
||||||
|
0xCD, 0x22, 0x61, 0x6F, 0xF2, 0xFC, 0x21, 0x69, 0xFB, 0x43, 0x61, 0x68, 0x72, 0xFC, 0x52, 0xF8,
|
||||||
|
0x80, 0xFF, 0xFD, 0x41, 0x2E, 0xFE, 0x2D, 0x21, 0x74, 0xFC, 0x21, 0x6E, 0xFD, 0x21, 0x65, 0xFD,
|
||||||
|
0x21, 0x6D, 0xFD, 0x21, 0x6D, 0xFD, 0x21, 0x65, 0xFD, 0x41, 0x62, 0xFD, 0xD2, 0x21, 0x6F, 0xFC,
|
||||||
|
0x21, 0x6E, 0xFD, 0x21, 0x6F, 0xFD, 0x42, 0x73, 0x74, 0xF7, 0xFF, 0xF7, 0xFF, 0x42, 0x65, 0x69,
|
||||||
|
0xF7, 0xF8, 0xFF, 0xF9, 0x41, 0x78, 0xFD, 0xFC, 0xA2, 0x02, 0x72, 0x6C, 0x75, 0xF5, 0xFC, 0x41,
|
||||||
|
0x72, 0xFD, 0xF1, 0x42, 0xA9, 0xA8, 0xFD, 0x4A, 0xFF, 0xFC, 0xC2, 0x02, 0x72, 0x6C, 0x72, 0xFD,
|
||||||
|
0xE6, 0xFD, 0xE6, 0x41, 0x69, 0xF7, 0xD2, 0xA1, 0x02, 0x72, 0x66, 0xFC, 0x41, 0x73, 0xFD, 0xD4,
|
||||||
|
0xA1, 0x01, 0xB1, 0x73, 0xFC, 0x41, 0x72, 0xFA, 0xC2, 0x47, 0x61, 0xC3, 0x65, 0x69, 0x6F, 0x75,
|
||||||
|
0x74, 0xFF, 0xCF, 0xFF, 0xDA, 0xFF, 0xE1, 0xFF, 0xEE, 0xF9, 0x51, 0xFF, 0xF7, 0xFF, 0xFC, 0x21,
|
||||||
|
0xA9, 0xEA, 0x41, 0x70, 0xF8, 0x3E, 0x42, 0x69, 0x6F, 0xF8, 0x3A, 0xF8, 0x3A, 0x21, 0x73, 0xF9,
|
||||||
|
0x41, 0x75, 0xF8, 0x30, 0x44, 0x61, 0x69, 0x6F, 0x72, 0xFF, 0xEE, 0xFF, 0xF9, 0xFF, 0xFC, 0xF8,
|
||||||
|
0x8C, 0x41, 0x63, 0xF8, 0x22, 0x41, 0x72, 0xF8, 0x1B, 0x41, 0x64, 0xF8, 0x17, 0x21, 0x6E, 0xFC,
|
||||||
|
0x21, 0x65, 0xFD, 0x41, 0x73, 0xF8, 0x0D, 0x21, 0x6E, 0xFC, 0x24, 0x65, 0x69, 0x6C, 0x6F, 0xE7,
|
||||||
|
0xEB, 0xF6, 0xFD, 0x41, 0x69, 0xF8, 0x73, 0x21, 0x75, 0xFC, 0xC1, 0x01, 0xE2, 0x65, 0xFA, 0x36,
|
||||||
|
0x41, 0x64, 0xF6, 0xDA, 0x44, 0x62, 0x67, 0x6E, 0x74, 0xF6, 0xD6, 0xF6, 0xD6, 0xFF, 0xFC, 0xF6,
|
||||||
|
0xD6, 0x42, 0x6E, 0x72, 0xF6, 0xC9, 0xF6, 0xC9, 0x21, 0xA9, 0xF9, 0x42, 0x6D, 0x70, 0xF6, 0xBF,
|
||||||
|
0xF6, 0xBF, 0x42, 0x63, 0x70, 0xF6, 0xB8, 0xF6, 0xB8, 0xA0, 0x07, 0xA2, 0x21, 0x6E, 0xFD, 0x21,
|
||||||
|
0x69, 0xFD, 0x21, 0x74, 0xF7, 0x22, 0x63, 0x6E, 0xFD, 0xF4, 0xA2, 0x00, 0xC2, 0x65, 0x69, 0xF5,
|
||||||
|
0xFB, 0xC7, 0x01, 0xE2, 0x61, 0xC3, 0x69, 0x6F, 0x72, 0x75, 0x79, 0xFF, 0xC3, 0xFF, 0xD7, 0xFF,
|
||||||
|
0xDA, 0xFF, 0xE1, 0xFF, 0xF9, 0xF6, 0x99, 0xF6, 0x99, 0xC5, 0x02, 0x52, 0x63, 0x70, 0x71, 0x73,
|
||||||
|
0x74, 0xFF, 0x6B, 0xFF, 0x91, 0xFF, 0x9E, 0xFF, 0xA1, 0xFF, 0xE8, 0x21, 0x73, 0xEE, 0x42, 0xC3,
|
||||||
|
0x65, 0xFF, 0x41, 0xFF, 0xFD, 0x41, 0x74, 0xF7, 0x02, 0x21, 0x61, 0xFC, 0x53, 0x61, 0xC3, 0x62,
|
||||||
|
0x63, 0x64, 0x65, 0x69, 0x6D, 0x70, 0x73, 0x6F, 0x6B, 0x74, 0x67, 0x6E, 0x72, 0x6C, 0x75, 0x79,
|
||||||
|
0xF8, 0xB1, 0xF8, 0xE6, 0xF9, 0x32, 0xF9, 0xCA, 0xFB, 0x03, 0xF7, 0x50, 0xFB, 0x2C, 0xFC, 0x27,
|
||||||
|
0xFD, 0x92, 0xFE, 0x6E, 0xFE, 0x87, 0xFE, 0x93, 0xFE, 0xAD, 0xFE, 0xCA, 0xFE, 0xD7, 0xFF, 0xF2,
|
||||||
|
0xFF, 0xFD, 0xF8, 0x85, 0xF8, 0x85, 0xA0, 0x00, 0x81, 0x41, 0xAE, 0xFE, 0x87, 0xA0, 0x02, 0x31,
|
||||||
|
0x21, 0x2E, 0xFD, 0x21, 0x74, 0xFD, 0x21, 0x6E, 0xFD, 0x42, 0x74, 0x65, 0xF8, 0x91, 0xFF, 0xFD,
|
||||||
|
0x23, 0x68, 0xC3, 0x73, 0xE6, 0xE9, 0xF9, 0x21, 0x68, 0xDF, 0xA0, 0x00, 0xA2, 0x21, 0x65, 0xFD,
|
||||||
|
0x21, 0x72, 0xFD, 0x21, 0x64, 0xFD, 0x21, 0xA8, 0xFD, 0xA0, 0x00, 0xE1, 0x21, 0x6C, 0xFD, 0x21,
|
||||||
|
0x6F, 0xFD, 0x21, 0x6F, 0xFD, 0xA0, 0x00, 0xF2, 0x21, 0x69, 0xFD, 0x21, 0x67, 0xFD, 0x21, 0x6C,
|
||||||
|
0xFD, 0x22, 0x63, 0x61, 0xF1, 0xFD, 0xA0, 0x00, 0xE2, 0x21, 0x69, 0xFD, 0x21, 0x73, 0xFD, 0x21,
|
||||||
|
0xA9, 0xFD, 0x21, 0xC3, 0xFD, 0x21, 0x68, 0xFD, 0x21, 0x74, 0xFD, 0x21, 0x73, 0xFD, 0x41, 0x2E,
|
||||||
|
0xF6, 0x46, 0x21, 0x74, 0xFC, 0x21, 0x6E, 0xFD, 0x21, 0x65, 0xFD, 0x21, 0x6D, 0xFD, 0x41, 0x2E,
|
||||||
|
0xF8, 0xC6, 0x21, 0x74, 0xFC, 0x21, 0x6E, 0xFD, 0x21, 0x65, 0xFD, 0x21, 0x6D, 0xFD, 0x21, 0x72,
|
||||||
|
0xFD, 0x21, 0x65, 0xFD, 0x21, 0x66, 0xFD, 0x21, 0x69, 0xFD, 0x23, 0x65, 0x69, 0x74, 0xD1, 0xE1,
|
||||||
|
0xFD, 0x41, 0x74, 0xFE, 0x84, 0x21, 0x73, 0xFC, 0x41, 0x72, 0xF8, 0xDB, 0x21, 0x61, 0xFC, 0x22,
|
||||||
|
0x6F, 0x70, 0xF6, 0xFD, 0x41, 0x73, 0xF5, 0xD8, 0x21, 0x69, 0xFC, 0x21, 0x70, 0xFD, 0x21, 0xA9,
|
||||||
|
0xFD, 0x21, 0xC3, 0xFD, 0x21, 0x69, 0xFD, 0x21, 0x68, 0xFD, 0xA0, 0x06, 0x41, 0x21, 0x6C, 0xFD,
|
||||||
|
0x21, 0x6C, 0xFD, 0x41, 0x2E, 0xFF, 0x33, 0x21, 0x74, 0xFC, 0x21, 0x6E, 0xFD, 0x22, 0x69, 0x65,
|
||||||
|
0xF3, 0xFD, 0x22, 0x63, 0x6D, 0xE5, 0xFB, 0xA0, 0x02, 0x02, 0x21, 0x6F, 0xFD, 0x21, 0x72, 0xFD,
|
||||||
|
0x21, 0x65, 0xEA, 0x22, 0x74, 0x6D, 0xFA, 0xFD, 0x41, 0x65, 0xFF, 0x1E, 0xA0, 0x03, 0x21, 0x21,
|
||||||
|
0x2E, 0xFD, 0x21, 0x74, 0xFD, 0x21, 0x6E, 0xFD, 0x21, 0x65, 0xFD, 0x21, 0x63, 0xFD, 0x21, 0x73,
|
||||||
|
0xFD, 0x21, 0x65, 0xFD, 0x21, 0x69, 0xFD, 0x21, 0x75, 0xFD, 0x22, 0x63, 0x71, 0xDE, 0xFD, 0x21,
|
||||||
|
0x73, 0xC8, 0x21, 0x6F, 0xFD, 0x21, 0x6E, 0xFD, 0x41, 0x6C, 0xF8, 0x6B, 0x21, 0x69, 0xFC, 0xA0,
|
||||||
|
0x05, 0xE1, 0x21, 0x2E, 0xFD, 0x21, 0x74, 0xFD, 0x21, 0x6E, 0xFD, 0x21, 0x65, 0xFD, 0x21, 0x6D,
|
||||||
|
0xFD, 0x21, 0x61, 0xFD, 0x21, 0x67, 0xFD, 0x21, 0x6C, 0xFD, 0x21, 0x61, 0xFD, 0x41, 0x6D, 0xFF,
|
||||||
|
0xA3, 0x4E, 0x62, 0x64, 0xC3, 0x6C, 0x6E, 0x70, 0x72, 0x73, 0x63, 0x67, 0x76, 0x6D, 0x69, 0x75,
|
||||||
|
0xFE, 0xCF, 0xFE, 0xD6, 0xFE, 0xE5, 0xFF, 0x00, 0xFF, 0x49, 0xFF, 0x5E, 0xFF, 0x91, 0xFF, 0xA2,
|
||||||
|
0xFF, 0xC9, 0xFF, 0xD4, 0xFF, 0xDB, 0xFF, 0xF9, 0xFF, 0xFC, 0xFF, 0xFC, 0x47, 0xA2, 0xA9, 0xA8,
|
||||||
|
0xAA, 0xAE, 0xB4, 0xBB, 0xFE, 0xBD, 0xFE, 0xBD, 0xFE, 0xBD, 0xFE, 0xBD, 0xFE, 0xBD, 0xFE, 0xBD,
|
||||||
|
0xFE, 0xBD, 0xA0, 0x02, 0x41, 0x21, 0x2E, 0xFD, 0xA0, 0x00, 0x41, 0x21, 0x2E, 0xFD, 0x21, 0x74,
|
||||||
|
0xFD, 0xA3, 0x00, 0xE1, 0x2E, 0x73, 0x6E, 0xF1, 0xF4, 0xFD, 0x23, 0x2E, 0x73, 0x6E, 0xE8, 0xEB,
|
||||||
|
0xF4, 0xA1, 0x00, 0xE2, 0x65, 0xF9, 0xA0, 0x02, 0xF1, 0x21, 0x6C, 0xFD, 0x21, 0x6C, 0xFD, 0x21,
|
||||||
|
0x69, 0xFD, 0x42, 0x74, 0x6D, 0xFF, 0xFD, 0xFE, 0xB6, 0xA1, 0x00, 0xE1, 0x75, 0xF9, 0xC2, 0x00,
|
||||||
|
0xE2, 0x65, 0x75, 0xFF, 0xDC, 0xFE, 0xAD, 0x49, 0x61, 0xC3, 0x65, 0x69, 0x6C, 0x6F, 0x72, 0x75,
|
||||||
|
0x79, 0xFE, 0x62, 0xFF, 0xA5, 0xFF, 0xCA, 0xFE, 0x62, 0xFF, 0xDA, 0xFF, 0xF2, 0xFF, 0xF7, 0xFE,
|
||||||
|
0x62, 0xFE, 0x62, 0x43, 0x65, 0x69, 0x75, 0xFE, 0x23, 0xFC, 0x9D, 0xFC, 0x9D, 0x41, 0x69, 0xF4,
|
||||||
|
0xB7, 0xA0, 0x05, 0x92, 0x21, 0x65, 0xFD, 0x21, 0x75, 0xFD, 0x22, 0x65, 0x71, 0xF7, 0xFD, 0x21,
|
||||||
|
0x69, 0xFB, 0x43, 0x65, 0x68, 0x72, 0xFE, 0x04, 0xFF, 0xEB, 0xFF, 0xFD, 0x21, 0x72, 0xE5, 0x21,
|
||||||
|
0x74, 0xFD, 0x21, 0x63, 0xFD, 0x21, 0x74, 0xDC, 0x21, 0x6E, 0xFD, 0x21, 0x65, 0xFD, 0x21, 0x6D,
|
||||||
|
0xFD, 0x21, 0xA9, 0xFD, 0x41, 0x75, 0xF7, 0x4F, 0x21, 0x71, 0xFC, 0x44, 0x65, 0xC3, 0x69, 0x6F,
|
||||||
|
0xFF, 0xE7, 0xFF, 0xF6, 0xFC, 0x55, 0xFF, 0xFD, 0x21, 0x67, 0xB9, 0x21, 0x72, 0xFD, 0x41, 0x74,
|
||||||
|
0xF7, 0x35, 0x22, 0x65, 0x69, 0xF9, 0xFC, 0xC1, 0x01, 0xC2, 0x65, 0xF4, 0x00, 0x21, 0x70, 0xFA,
|
||||||
|
0x21, 0x6F, 0xFD, 0x21, 0x63, 0xFD, 0x21, 0x73, 0xFD, 0x21, 0x69, 0xFD, 0x41, 0x6C, 0xF6, 0xCF,
|
||||||
|
0x21, 0x6C, 0xFC, 0x21, 0x69, 0xFD, 0x41, 0x6C, 0xFE, 0x92, 0x21, 0x61, 0xFC, 0x41, 0x74, 0xFE,
|
||||||
|
0x0B, 0x21, 0x6F, 0xFC, 0x22, 0x76, 0x70, 0xF6, 0xFD, 0x42, 0x69, 0x65, 0xFF, 0xFB, 0xFD, 0x8D,
|
||||||
|
0x21, 0x75, 0xF9, 0x48, 0x63, 0x64, 0x6C, 0x6E, 0x70, 0x6D, 0x71, 0x72, 0xFF, 0x60, 0xFF, 0x7F,
|
||||||
|
0xFF, 0xA8, 0xFF, 0xBF, 0xFF, 0xD6, 0xFF, 0xE0, 0xFF, 0xFD, 0xFE, 0x65, 0x45, 0xA7, 0xA9, 0xA2,
|
||||||
|
0xA8, 0xB4, 0xFD, 0x8D, 0xFF, 0xE7, 0xFE, 0xA1, 0xFE, 0xA1, 0xFE, 0xA1, 0xA0, 0x02, 0xC3, 0x21,
|
||||||
|
0x74, 0xFD, 0x21, 0x75, 0xFD, 0x41, 0x69, 0xFA, 0xC0, 0x41, 0x2E, 0xF3, 0xB5, 0x21, 0x74, 0xFC,
|
||||||
|
0x21, 0x6E, 0xFD, 0x21, 0x65, 0xFD, 0x21, 0x6D, 0xFD, 0x21, 0xAA, 0xFD, 0x21, 0xC3, 0xFD, 0xA3,
|
||||||
|
0x00, 0xE1, 0x6F, 0x70, 0x72, 0xE3, 0xE6, 0xFD, 0xA0, 0x06, 0x51, 0x21, 0x6C, 0xFD, 0x21, 0x6C,
|
||||||
|
0xFD, 0x21, 0x69, 0xFD, 0x44, 0x2E, 0x73, 0x6E, 0x76, 0xFE, 0x9E, 0xFE, 0xA1, 0xFE, 0xAA, 0xFF,
|
||||||
|
0xFD, 0x42, 0x2E, 0x73, 0xFE, 0x91, 0xFE, 0x94, 0xA0, 0x03, 0x63, 0x21, 0x63, 0xFD, 0xA0, 0x03,
|
||||||
|
0x93, 0x21, 0x74, 0xFD, 0x21, 0xA9, 0xFD, 0x22, 0x61, 0xC3, 0xF4, 0xFD, 0x21, 0x72, 0xFB, 0xA2,
|
||||||
|
0x00, 0x81, 0x65, 0x6F, 0xE2, 0xFD, 0xC2, 0x00, 0x81, 0x65, 0x6F, 0xFF, 0xDB, 0xFB, 0x6A, 0x41,
|
||||||
|
0x64, 0xF5, 0x75, 0x21, 0x6E, 0xFC, 0x21, 0x65, 0xFD, 0xCD, 0x00, 0xE2, 0x2E, 0x62, 0x65, 0x67,
|
||||||
|
0x6C, 0x6D, 0x6E, 0x70, 0x72, 0x73, 0x74, 0x77, 0x69, 0xFE, 0x59, 0xFE, 0x5F, 0xFF, 0xBB, 0xFE,
|
||||||
|
0x5F, 0xFF, 0xE6, 0xFE, 0x5F, 0xFE, 0x5F, 0xFE, 0x5F, 0xFF, 0xED, 0xFE, 0x5F, 0xFE, 0x5F, 0xFE,
|
||||||
|
0x5F, 0xFF, 0xFD, 0x41, 0x6C, 0xF2, 0xB8, 0xA1, 0x00, 0xE1, 0x6C, 0xFC, 0xA0, 0x03, 0xC2, 0xC9,
|
||||||
|
0x00, 0xE2, 0x2E, 0x62, 0x65, 0x66, 0x67, 0x68, 0x70, 0x73, 0x74, 0xFE, 0x23, 0xFE, 0x29, 0xFE,
|
||||||
|
0x3B, 0xFE, 0x29, 0xFE, 0x29, 0xFF, 0xFD, 0xFE, 0x29, 0xFE, 0x29, 0xFE, 0x29, 0xC2, 0x00, 0xE2,
|
||||||
|
0x65, 0x61, 0xFE, 0x1D, 0xFC, 0xEE, 0xA0, 0x03, 0xE1, 0x22, 0x63, 0x71, 0xFD, 0xFD, 0xA0, 0x03,
|
||||||
|
0xF2, 0x21, 0x63, 0xF5, 0x21, 0x72, 0xF2, 0x22, 0x6F, 0x75, 0xFA, 0xFD, 0x21, 0x73, 0xFB, 0x27,
|
||||||
|
0x63, 0x64, 0x70, 0x72, 0x73, 0x75, 0x78, 0xEA, 0xEF, 0xE7, 0xE7, 0xFD, 0xE7, 0xE7, 0xA0, 0x04,
|
||||||
|
0x12, 0x21, 0xA9, 0xFD, 0x23, 0x66, 0x6E, 0x78, 0xD2, 0xD2, 0xD2, 0x41, 0x62, 0xFC, 0x3B, 0x21,
|
||||||
|
0x72, 0xFC, 0x41, 0x69, 0xFF, 0x5D, 0x41, 0x2E, 0xFD, 0xE0, 0x21, 0x74, 0xFC, 0x21, 0x6E, 0xFD,
|
||||||
|
0x21, 0x65, 0xFD, 0x42, 0x67, 0x65, 0xFF, 0xFD, 0xF4, 0xBE, 0x21, 0x6E, 0xF9, 0x21, 0x69, 0xFD,
|
||||||
|
0x41, 0x76, 0xF4, 0xB4, 0x21, 0x69, 0xFC, 0x24, 0x75, 0x66, 0x74, 0x6E, 0xD8, 0xDB, 0xF6, 0xFD,
|
||||||
|
0x41, 0x69, 0xF2, 0xCF, 0x21, 0x74, 0xFC, 0x21, 0x69, 0xFD, 0x21, 0x6E, 0xFD, 0x41, 0x6C, 0xF4,
|
||||||
|
0x97, 0x21, 0x75, 0xFC, 0x21, 0x70, 0xFD, 0x21, 0x74, 0xC9, 0x21, 0xA9, 0xFD, 0x21, 0xC3, 0xFD,
|
||||||
|
0x21, 0x70, 0xFD, 0xC7, 0x00, 0xE1, 0x61, 0xC3, 0x65, 0x6E, 0x67, 0x72, 0x6D, 0xFF, 0x8C, 0xFF,
|
||||||
|
0x9E, 0xFF, 0xA1, 0xFF, 0xD4, 0xFF, 0xE7, 0xFF, 0xF1, 0xFF, 0xFD, 0x41, 0x93, 0xFB, 0xFE, 0x41,
|
||||||
|
0x72, 0xF2, 0x88, 0xA1, 0x00, 0xE1, 0x72, 0xFC, 0xC1, 0x00, 0xE1, 0x72, 0xFE, 0x7D, 0x41, 0x64,
|
||||||
|
0xF2, 0x79, 0x21, 0x69, 0xFC, 0x4D, 0x61, 0xC3, 0x65, 0x68, 0x69, 0x6B, 0x6C, 0x6F, 0xC5, 0x72,
|
||||||
|
0x75, 0x79, 0x63, 0xFE, 0x8A, 0xFD, 0x27, 0xFD, 0x4C, 0xFE, 0xE4, 0xFF, 0x12, 0xFF, 0x1A, 0xFF,
|
||||||
|
0x38, 0xFF, 0xCE, 0xFF, 0xE6, 0xFD, 0x5C, 0xFF, 0xEE, 0xFF, 0xF3, 0xFF, 0xFD, 0x41, 0x63, 0xFC,
|
||||||
|
0x7B, 0xC3, 0x00, 0xE1, 0x61, 0x6B, 0x65, 0xFF, 0xFC, 0xFD, 0x17, 0xFD, 0x29, 0x41, 0x63, 0xFF,
|
||||||
|
0x53, 0x21, 0x69, 0xFC, 0x21, 0x66, 0xFD, 0x21, 0x69, 0xFD, 0xA1, 0x00, 0xE1, 0x6E, 0xFD, 0x41,
|
||||||
|
0x74, 0xF2, 0x5A, 0xA1, 0x00, 0x91, 0x65, 0xFC, 0x21, 0x6C, 0xFB, 0xC3, 0x00, 0xE1, 0x6C, 0x6D,
|
||||||
|
0x74, 0xFF, 0xFD, 0xFC, 0x45, 0xFB, 0x1A, 0x41, 0x6C, 0xFF, 0x29, 0x21, 0x61, 0xFC, 0x21, 0x76,
|
||||||
|
0xFD, 0x41, 0x61, 0xF2, 0xF5, 0x21, 0xA9, 0xFC, 0x21, 0xC3, 0xFD, 0x21, 0x72, 0xFD, 0x22, 0x6F,
|
||||||
|
0x74, 0xF0, 0xFD, 0xA0, 0x04, 0xC3, 0x21, 0x67, 0xFD, 0x21, 0xA2, 0xFD, 0x21, 0xC3, 0xFD, 0x21,
|
||||||
|
0x6E, 0xFD, 0x21, 0x65, 0xFD, 0xA2, 0x00, 0xE1, 0x6E, 0x79, 0xE9, 0xFD, 0x41, 0x6E, 0xFF, 0x2B,
|
||||||
|
0x21, 0x6F, 0xFC, 0xA1, 0x00, 0xE1, 0x63, 0xFD, 0x47, 0xA2, 0xA9, 0xA8, 0xAA, 0xAE, 0xB4, 0xBB,
|
||||||
|
0xFB, 0x41, 0xFF, 0xFB, 0xFB, 0x41, 0xFB, 0x41, 0xFB, 0x41, 0xFB, 0x41, 0xFB, 0x41, 0xC2, 0x00,
|
||||||
|
0xE1, 0x2E, 0x73, 0xFC, 0x84, 0xFC, 0x87, 0x41, 0x6F, 0xFB, 0x3F, 0x42, 0x6D, 0x73, 0xFF, 0xFC,
|
||||||
|
0xFB, 0x3E, 0x41, 0x73, 0xFB, 0x34, 0x22, 0xA9, 0xA8, 0xF5, 0xFC, 0x21, 0xC3, 0xFB, 0xA0, 0x02,
|
||||||
|
0xA2, 0x4A, 0x75, 0x69, 0x6F, 0x61, 0xC3, 0x65, 0x6E, 0xC5, 0x73, 0x79, 0xFF, 0x69, 0xFF, 0x7A,
|
||||||
|
0xFF, 0xB4, 0xFB, 0x08, 0xFF, 0xC7, 0xFF, 0xDD, 0xFF, 0xFA, 0xFF, 0x0A, 0xFF, 0xFD, 0xFB, 0x08,
|
||||||
|
0x41, 0x63, 0xF3, 0x54, 0x21, 0x69, 0xFC, 0x41, 0x67, 0xFE, 0x89, 0x21, 0x72, 0xFC, 0x21, 0x75,
|
||||||
|
0xFD, 0x41, 0x61, 0xF3, 0x46, 0xC4, 0x00, 0xE1, 0x74, 0x67, 0x73, 0x6D, 0xFF, 0xEF, 0xF1, 0x62,
|
||||||
|
0xFF, 0xF9, 0xFF, 0xFC, 0x47, 0xA9, 0xA2, 0xA8, 0xAA, 0xAE, 0xB4, 0xBB, 0xFF, 0xF1, 0xFA, 0xC5,
|
||||||
|
0xFA, 0xC5, 0xFA, 0xC5, 0xFA, 0xC5, 0xFA, 0xC5, 0xFA, 0xC5, 0x41, 0x67, 0xF1, 0x3D, 0xC2, 0x00,
|
||||||
|
0xE1, 0x6E, 0x6D, 0xFF, 0xFC, 0xFB, 0x62, 0x42, 0x65, 0x69, 0xFA, 0x7F, 0xF8, 0xF9, 0xC5, 0x00,
|
||||||
|
0xE1, 0x6C, 0x70, 0x2E, 0x73, 0x6E, 0xFF, 0xF9, 0xFB, 0x5A, 0xFB, 0xF4, 0xFB, 0xF7, 0xFC, 0x00,
|
||||||
|
0xC1, 0x00, 0xE1, 0x6C, 0xFB, 0x48, 0x41, 0x6D, 0xF1, 0x11, 0x41, 0x61, 0xF0, 0xC1, 0x21, 0x6F,
|
||||||
|
0xFC, 0x21, 0x69, 0xFD, 0xC3, 0x00, 0xE1, 0x6D, 0x69, 0x64, 0xFB, 0x2C, 0xFF, 0xF2, 0xFF, 0xFD,
|
||||||
|
0x41, 0x68, 0xF8, 0xC0, 0xA1, 0x00, 0xE1, 0x74, 0xFC, 0xA0, 0x07, 0xC2, 0x21, 0x72, 0xFD, 0x43,
|
||||||
|
0x2E, 0x73, 0x75, 0xFB, 0xB3, 0xFB, 0xB6, 0xFF, 0xFD, 0x21, 0x64, 0xF3, 0xA2, 0x00, 0xE2, 0x65,
|
||||||
|
0x79, 0xF3, 0xFD, 0x4A, 0xC3, 0x69, 0x63, 0x6D, 0x65, 0x75, 0x61, 0x79, 0x68, 0x6F, 0xFF, 0x81,
|
||||||
|
0xFF, 0x9B, 0xFB, 0x39, 0xFB, 0x39, 0xFF, 0xAB, 0xFF, 0xBD, 0xFF, 0xD1, 0xFF, 0xE1, 0xFF, 0xF9,
|
||||||
|
0xFA, 0x46, 0xA0, 0x03, 0x11, 0x21, 0x2E, 0xFD, 0x21, 0x74, 0xFD, 0x21, 0x6E, 0xFD, 0x21, 0x65,
|
||||||
|
0xFD, 0x22, 0x63, 0x7A, 0xFD, 0xFD, 0x21, 0x6F, 0xFB, 0x21, 0x64, 0xFD, 0x21, 0x74, 0xFD, 0x21,
|
||||||
|
0x61, 0xFD, 0x21, 0x76, 0xFD, 0x21, 0x6E, 0xE9, 0x21, 0x69, 0xFD, 0x21, 0x6D, 0xFD, 0x21, 0xA9,
|
||||||
|
0xFD, 0x42, 0xC3, 0x73, 0xFF, 0xFD, 0xF3, 0x42, 0x21, 0xA9, 0xF9, 0x41, 0x6E, 0xFA, 0x3D, 0x21,
|
||||||
|
0x69, 0xFC, 0x21, 0x6D, 0xFD, 0x21, 0xA9, 0xFD, 0x41, 0x74, 0xF4, 0xB0, 0x22, 0xC3, 0x73, 0xF9,
|
||||||
|
0xFC, 0xC5, 0x00, 0xE2, 0x69, 0x75, 0xC3, 0x6F, 0x65, 0xFF, 0xD1, 0xFD, 0xED, 0xFF, 0xE7, 0xFF,
|
||||||
|
0xFB, 0xFB, 0x49, 0x41, 0x65, 0xF0, 0x5C, 0x21, 0x6C, 0xFC, 0x42, 0x62, 0x63, 0xFF, 0xFD, 0xF0,
|
||||||
|
0x55, 0x21, 0x61, 0xF9, 0x21, 0x6E, 0xFD, 0xC3, 0x00, 0xE1, 0x67, 0x70, 0x73, 0xFF, 0xFD, 0xFC,
|
||||||
|
0x3E, 0xFC, 0x3E, 0x41, 0x6D, 0xF2, 0x05, 0x44, 0x61, 0x65, 0x69, 0x6F, 0xF2, 0x01, 0xF2, 0x01,
|
||||||
|
0xF2, 0x01, 0xFF, 0xFC, 0x21, 0x6C, 0xF3, 0x21, 0x6C, 0xFD, 0x21, 0x69, 0xFD, 0xA0, 0x06, 0xD2,
|
||||||
|
0x21, 0xA9, 0xFD, 0x21, 0xC3, 0xFD, 0x21, 0x6F, 0xFD, 0x21, 0xA9, 0xFD, 0x21, 0xC3, 0xFD, 0xA2,
|
||||||
|
0x00, 0xE1, 0x70, 0x6C, 0xEB, 0xFD, 0x42, 0xA9, 0xA8, 0xF5, 0x47, 0xF5, 0x47, 0x48, 0x76, 0x61,
|
||||||
|
0x65, 0xC3, 0x69, 0x6F, 0x73, 0x75, 0xFD, 0xEE, 0xF1, 0x6D, 0xF1, 0x6D, 0xFF, 0xF9, 0xF1, 0x6D,
|
||||||
|
0xF1, 0x6D, 0xF1, 0x6D, 0xF1, 0x6D, 0x21, 0x79, 0xE7, 0x41, 0x65, 0xFC, 0xAD, 0x21, 0x72, 0xFC,
|
||||||
|
0x21, 0x74, 0xFD, 0x21, 0x73, 0xFD, 0xA2, 0x00, 0xE1, 0x6C, 0x61, 0xF0, 0xFD, 0xC2, 0x00, 0xE2,
|
||||||
|
0x75, 0x65, 0xF9, 0x7E, 0xFA, 0xAD, 0x43, 0x6D, 0x74, 0x68, 0xFE, 0x5B, 0xF1, 0xA4, 0xEF, 0x15,
|
||||||
|
0xC4, 0x00, 0xE1, 0x72, 0x2E, 0x73, 0x6E, 0xFF, 0xF6, 0xFA, 0x82, 0xFA, 0x85, 0xFA, 0x8E, 0x41,
|
||||||
|
0x6C, 0xEF, 0x95, 0x21, 0x75, 0xFC, 0xA0, 0x06, 0xF3, 0x21, 0x71, 0xFD, 0x21, 0xA9, 0xFD, 0x21,
|
||||||
|
0xC3, 0xFD, 0xA2, 0x00, 0xE1, 0x6E, 0x72, 0xF1, 0xFD, 0x47, 0xA2, 0xA9, 0xA8, 0xAA, 0xAE, 0xB4,
|
||||||
|
0xBB, 0xF9, 0x00, 0xFF, 0xF9, 0xF9, 0x00, 0xF9, 0x00, 0xF9, 0x00, 0xF9, 0x00, 0xF9, 0x00, 0xC1,
|
||||||
|
0x00, 0x81, 0x65, 0xFB, 0xB2, 0x41, 0x73, 0xEF, 0x26, 0x21, 0x6F, 0xFC, 0x21, 0x74, 0xFD, 0xA0,
|
||||||
|
0x07, 0x62, 0x21, 0xA9, 0xFD, 0x21, 0xC3, 0xFD, 0x21, 0x6C, 0xFD, 0x21, 0x73, 0xF4, 0xA2, 0x00,
|
||||||
|
0x41, 0x61, 0x69, 0xFA, 0xFD, 0xC8, 0x00, 0xE2, 0x2E, 0x65, 0x6C, 0x6E, 0x6F, 0x72, 0x73, 0x74,
|
||||||
|
0xFA, 0x1D, 0xFA, 0x35, 0xFF, 0xDA, 0xFA, 0x23, 0xFF, 0xE7, 0xFF, 0xDA, 0xFA, 0x23, 0xFF, 0xF9,
|
||||||
|
0x41, 0xA9, 0xF8, 0xC6, 0x41, 0x75, 0xF8, 0xC2, 0x22, 0xC3, 0x65, 0xF8, 0xFC, 0x41, 0x68, 0xF8,
|
||||||
|
0xB9, 0x21, 0x63, 0xFC, 0x21, 0x79, 0xFD, 0x41, 0x72, 0xF8, 0xAF, 0x22, 0xA8, 0xA9, 0xFC, 0xFC,
|
||||||
|
0x21, 0xC3, 0xFB, 0x4D, 0x72, 0x75, 0x61, 0x69, 0x6F, 0x6C, 0x65, 0xC3, 0x68, 0x6E, 0x73, 0x74,
|
||||||
|
0x79, 0xFE, 0xAE, 0xFE, 0xD4, 0xFF, 0x0C, 0xFC, 0x95, 0xFF, 0x43, 0xFF, 0x4A, 0xFF, 0x5D, 0xFF,
|
||||||
|
0x86, 0xFF, 0xC2, 0xFF, 0xE5, 0xFF, 0xF1, 0xFF, 0xFD, 0xF8, 0x86, 0x41, 0x63, 0xF1, 0xA8, 0x21,
|
||||||
|
0x6F, 0xFC, 0x41, 0x64, 0xF1, 0xA1, 0x21, 0x69, 0xFC, 0x41, 0x67, 0xF1, 0x9A, 0x41, 0x67, 0xF0,
|
||||||
|
0xB7, 0x21, 0x6C, 0xFC, 0x41, 0x6C, 0xF1, 0x8F, 0x23, 0x69, 0x75, 0x6F, 0xF1, 0xF9, 0xFC, 0x41,
|
||||||
|
0x67, 0xF8, 0x89, 0x21, 0x69, 0xFC, 0x21, 0x6C, 0xFD, 0x21, 0x6C, 0xFD, 0x42, 0x65, 0x69, 0xFF,
|
||||||
|
0xFD, 0xF6, 0x84, 0x42, 0x74, 0x6F, 0xF9, 0xAC, 0xFF, 0xE1, 0x41, 0x74, 0xF8, 0x1F, 0x21, 0x61,
|
||||||
|
0xFC, 0x21, 0x6D, 0xFD, 0x21, 0x72, 0xFD, 0x21, 0x6F, 0xFD, 0x26, 0x6E, 0x63, 0x64, 0x74, 0x73,
|
||||||
|
0x66, 0xB5, 0xBC, 0xCE, 0xE2, 0xE9, 0xFD, 0x41, 0xA9, 0xF8, 0xB0, 0x42, 0x61, 0x6F, 0xF8, 0xAC,
|
||||||
|
0xF8, 0xAC, 0x22, 0xC3, 0x69, 0xF5, 0xF9, 0x42, 0x65, 0x68, 0xF7, 0xCF, 0xFF, 0xFB, 0x41, 0x74,
|
||||||
|
0xFC, 0xE0, 0x21, 0x61, 0xFC, 0x22, 0x63, 0x74, 0xF2, 0xFD, 0x41, 0x2E, 0xF0, 0xE1, 0x21, 0x74,
|
||||||
|
0xFC, 0x21, 0x6E, 0xFD, 0x21, 0x65, 0xFD, 0x21, 0x63, 0xFD, 0x42, 0x73, 0x6E, 0xFF, 0xFD, 0xF1,
|
||||||
|
0x19, 0x41, 0x6E, 0xF1, 0x12, 0x22, 0x69, 0x61, 0xF5, 0xFC, 0x42, 0x75, 0x6F, 0xFF, 0x68, 0xF9,
|
||||||
|
0xD4, 0x22, 0x6D, 0x70, 0xF4, 0xF9, 0xA0, 0x00, 0xA1, 0x21, 0x69, 0xFD, 0x21, 0x67, 0xFD, 0x21,
|
||||||
|
0x72, 0xF7, 0x21, 0x68, 0xFD, 0x21, 0x74, 0xFD, 0x22, 0x6C, 0x72, 0xF4, 0xFD, 0x41, 0x6C, 0xF7,
|
||||||
|
0x69, 0x41, 0x72, 0xFA, 0x24, 0x41, 0x74, 0xFA, 0xF9, 0x21, 0x63, 0xFC, 0x21, 0x79, 0xDA, 0x22,
|
||||||
|
0x61, 0x78, 0xFA, 0xFD, 0x41, 0x61, 0xF2, 0x17, 0x49, 0x6E, 0x73, 0x6D, 0x61, 0xC3, 0x6C, 0x62,
|
||||||
|
0x6F, 0x76, 0xFF, 0x72, 0xFF, 0x9D, 0xFF, 0xC9, 0xFF, 0xE0, 0xF7, 0x7E, 0xFF, 0xE5, 0xFF, 0xE9,
|
||||||
|
0xFF, 0xF7, 0xFF, 0xFC, 0x41, 0x70, 0xF8, 0x13, 0x43, 0x65, 0x6F, 0x68, 0xF7, 0x3E, 0xFF, 0xFC,
|
||||||
|
0xF8, 0x0F, 0x41, 0x69, 0xF5, 0xAE, 0x22, 0x63, 0x74, 0xF2, 0xFC, 0xA0, 0x05, 0xB3, 0x21, 0x72,
|
||||||
|
0xFD, 0x21, 0x76, 0xFD, 0x41, 0x65, 0xFE, 0xF9, 0x21, 0x72, 0xFC, 0x22, 0x69, 0x74, 0xF6, 0xFD,
|
||||||
|
0x41, 0x61, 0xFF, 0xA5, 0x21, 0x74, 0xFC, 0x21, 0x73, 0xFD, 0xC2, 0x01, 0x71, 0x63, 0x69, 0xED,
|
||||||
|
0x74, 0xED, 0x74, 0x21, 0x61, 0xF7, 0x21, 0x72, 0xFD, 0x21, 0x74, 0xFD, 0x45, 0x73, 0x6E, 0x75,
|
||||||
|
0x78, 0x72, 0xFF, 0xCA, 0xFF, 0xDF, 0xFF, 0xEB, 0xFF, 0xFD, 0xF8, 0x31, 0xC1, 0x00, 0xE1, 0x6D,
|
||||||
|
0xF7, 0xC4, 0x41, 0x61, 0xF9, 0xFD, 0x41, 0x6D, 0xFA, 0xAA, 0x21, 0x69, 0xFC, 0x21, 0x72, 0xFD,
|
||||||
|
0xA2, 0x00, 0xE1, 0x63, 0x74, 0xF2, 0xFD, 0x47, 0xA2, 0xA9, 0xA8, 0xAA, 0xAE, 0xB4, 0xBB, 0xF6,
|
||||||
|
0xF2, 0xFF, 0xF9, 0xF6, 0xF2, 0xF6, 0xF2, 0xF6, 0xF2, 0xF6, 0xF2, 0xF6, 0xF2, 0x41, 0x68, 0xFB,
|
||||||
|
0xD1, 0x41, 0x70, 0xED, 0x6E, 0x21, 0x6F, 0xFC, 0x43, 0x73, 0x63, 0x74, 0xFA, 0x6A, 0xFF, 0xFD,
|
||||||
|
0xF8, 0x57, 0x41, 0x69, 0xFE, 0x77, 0x41, 0x2E, 0xEE, 0x5F, 0x21, 0x74, 0xFC, 0x21, 0x6E, 0xFD,
|
||||||
|
0x21, 0x65, 0xFD, 0x21, 0x6D, 0xFD, 0x21, 0x67, 0xFD, 0x21, 0x61, 0xFD, 0x21, 0x72, 0xFD, 0x21,
|
||||||
|
0x68, 0xFD, 0x21, 0x70, 0xFD, 0xA3, 0x00, 0xE1, 0x73, 0x6C, 0x61, 0xD3, 0xDD, 0xFD, 0xA0, 0x05,
|
||||||
|
0x52, 0x21, 0x6C, 0xFD, 0x21, 0x64, 0xFA, 0x21, 0x75, 0xFD, 0x22, 0x61, 0x6F, 0xF7, 0xFD, 0x41,
|
||||||
|
0x6E, 0xF7, 0xEF, 0x21, 0x65, 0xFC, 0x4D, 0x27, 0x61, 0xC3, 0x64, 0x65, 0x69, 0x68, 0x6C, 0x6F,
|
||||||
|
0x72, 0x73, 0x75, 0x79, 0xF6, 0x83, 0xFF, 0x76, 0xFF, 0x91, 0xFF, 0xA7, 0xF7, 0xEB, 0xFF, 0xDF,
|
||||||
|
0xFF, 0xF4, 0xFF, 0xFD, 0xF6, 0x83, 0xF7, 0xFB, 0xFB, 0x78, 0xF6, 0x83, 0xF6, 0x83, 0x41, 0x63,
|
||||||
|
0xFA, 0x33, 0x41, 0x72, 0xF6, 0xA6, 0xA1, 0x01, 0xC2, 0x61, 0xFC, 0x41, 0x73, 0xEF, 0xDE, 0xC2,
|
||||||
|
0x05, 0x23, 0x63, 0x74, 0xF0, 0x03, 0xFF, 0xFC, 0x45, 0x70, 0x61, 0x68, 0x6F, 0x75, 0xFF, 0xEE,
|
||||||
|
0xFF, 0xF7, 0xEC, 0xAD, 0xF0, 0x56, 0xF0, 0x56, 0x21, 0x73, 0xF0, 0x21, 0x6E, 0xFD, 0xC4, 0x00,
|
||||||
|
0xE2, 0x69, 0x75, 0x61, 0x65, 0xFA, 0x40, 0xFF, 0xD0, 0xFF, 0xFD, 0xF7, 0x9C, 0x41, 0x79, 0xFB,
|
||||||
|
0x9D, 0x21, 0x68, 0xFC, 0xC3, 0x00, 0xE1, 0x6E, 0x6D, 0x63, 0xFB, 0x66, 0xF6, 0xCC, 0xFF, 0xFD,
|
||||||
|
0x41, 0x6D, 0xFB, 0xEE, 0x21, 0x61, 0xFC, 0x21, 0x72, 0xFD, 0x21, 0xA9, 0xFD, 0x21, 0xC3, 0xFD,
|
||||||
|
0x21, 0x70, 0xFD, 0x41, 0x6D, 0xEE, 0x61, 0x21, 0x61, 0xFC, 0x42, 0x74, 0x2E, 0xFF, 0xFD, 0xF7,
|
||||||
|
0x48, 0xC5, 0x00, 0xE1, 0x72, 0x6D, 0x73, 0x2E, 0x6E, 0xFB, 0x39, 0xFF, 0xEF, 0xFF, 0xF9, 0xF7,
|
||||||
|
0x41, 0xF7, 0x4D, 0xC2, 0x00, 0x81, 0x69, 0x65, 0xF3, 0x22, 0xF8, 0x9E, 0x41, 0x73, 0xEB, 0xD9,
|
||||||
|
0x21, 0x6F, 0xFC, 0x21, 0x6D, 0xFD, 0x44, 0x2E, 0x73, 0x72, 0x75, 0xF7, 0x1C, 0xF7, 0x1F, 0xFF,
|
||||||
|
0xFD, 0xFB, 0x66, 0xC7, 0x00, 0xE2, 0x72, 0x2E, 0x65, 0x6C, 0x6D, 0x6E, 0x73, 0xFF, 0xE0, 0xF7,
|
||||||
|
0x0F, 0xFF, 0xF3, 0xF7, 0x15, 0xF7, 0x15, 0xF7, 0x15, 0xF7, 0x15, 0x41, 0x62, 0xF9, 0x76, 0x41,
|
||||||
|
0x73, 0xEC, 0x06, 0x21, 0x67, 0xFC, 0xC3, 0x00, 0xE1, 0x72, 0x6D, 0x6E, 0xFF, 0xF5, 0xF6, 0x4A,
|
||||||
|
0xFF, 0xFD, 0xC2, 0x00, 0xE1, 0x6D, 0x72, 0xF6, 0x3E, 0xF9, 0x8D, 0x42, 0x62, 0x70, 0xEB, 0x8A,
|
||||||
|
0xEB, 0x8A, 0x44, 0x65, 0x69, 0x6F, 0x73, 0xEB, 0x83, 0xEB, 0x83, 0xFF, 0xF9, 0xEB, 0x83, 0x21,
|
||||||
|
0xA9, 0xF3, 0x21, 0xC3, 0xFD, 0xA1, 0x00, 0xE1, 0x6C, 0xFD, 0x48, 0xA2, 0xA0, 0xA9, 0xA8, 0xAA,
|
||||||
|
0xAE, 0xB4, 0xBB, 0xF5, 0x5F, 0xF5, 0x5F, 0xFF, 0xFB, 0xF5, 0x5F, 0xF5, 0x5F, 0xF5, 0x5F, 0xF5,
|
||||||
|
0x5F, 0xF5, 0x5F, 0x41, 0x74, 0xF1, 0x2A, 0x21, 0x6E, 0xFC, 0x21, 0x69, 0xFD, 0x21, 0x68, 0xFD,
|
||||||
|
0x41, 0x6C, 0xFA, 0x2E, 0x4B, 0x72, 0x61, 0x65, 0x68, 0x75, 0x6F, 0xC3, 0x63, 0x69, 0x74, 0x79,
|
||||||
|
0xFF, 0x0A, 0xFF, 0x20, 0xFF, 0x4D, 0xFF, 0x7F, 0xFF, 0xA2, 0xFF, 0xAE, 0xFF, 0xD6, 0xFF, 0xF9,
|
||||||
|
0xF5, 0x35, 0xFF, 0xFC, 0xF5, 0x35, 0xC1, 0x00, 0xE1, 0x63, 0xF8, 0xEB, 0x47, 0xA2, 0xA9, 0xA8,
|
||||||
|
0xAA, 0xAE, 0xB4, 0xBB, 0xF5, 0x0D, 0xFF, 0xFA, 0xF5, 0x0D, 0xF5, 0x0D, 0xF5, 0x0D, 0xF5, 0x0D,
|
||||||
|
0xF5, 0x0D, 0x41, 0x75, 0xFF, 0x01, 0x21, 0x68, 0xFC, 0xC2, 0x00, 0xE1, 0x72, 0x63, 0xF5, 0x32,
|
||||||
|
0xFF, 0xFD, 0xC2, 0x00, 0xE2, 0x65, 0x61, 0xF6, 0x58, 0xF3, 0x41, 0x41, 0x74, 0xF6, 0x64, 0xC2,
|
||||||
|
0x00, 0xE2, 0x65, 0x69, 0xF6, 0x4B, 0xFF, 0xFC, 0x4A, 0x61, 0xC3, 0x65, 0x69, 0x6C, 0x6F, 0x72,
|
||||||
|
0x73, 0x75, 0x79, 0xFD, 0xC4, 0xFF, 0xC4, 0xF6, 0x39, 0xFF, 0xE1, 0xFF, 0xEA, 0xF4, 0xD1, 0xFF,
|
||||||
|
0xF7, 0xF9, 0xC6, 0xFD, 0xC4, 0xF4, 0xD1, 0x45, 0x61, 0x65, 0x69, 0x6F, 0x79, 0xF4, 0xCF, 0xF4,
|
||||||
|
0xCF, 0xF4, 0xCF, 0xF4, 0xCF, 0xF4, 0xCF, 0x41, 0x75, 0xFA, 0x87, 0x21, 0x71, 0xFC, 0x21, 0x6F,
|
||||||
|
0xFD, 0x21, 0x6C, 0xFD, 0x21, 0x69, 0xFD, 0x21, 0x64, 0xFD, 0x42, 0x6D, 0x6E, 0xF2, 0xE6, 0xFF,
|
||||||
|
0xFD, 0xC2, 0x00, 0xE2, 0x65, 0x61, 0xF5, 0xF9, 0xFF, 0xF9, 0xC1, 0x00, 0xE1, 0x65, 0xF5, 0xF0,
|
||||||
|
0x4C, 0x61, 0xC3, 0x65, 0x68, 0x69, 0x6C, 0x6E, 0x6F, 0x72, 0x75, 0x73, 0x79, 0xF4, 0x79, 0xF5,
|
||||||
|
0xBC, 0xF5, 0xE1, 0xFF, 0xC7, 0xF7, 0xA7, 0xF5, 0xF1, 0xF5, 0xF1, 0xF4, 0x79, 0xFF, 0xF1, 0xFF,
|
||||||
|
0xFA, 0xF9, 0x6E, 0xF4, 0x79, 0x41, 0x69, 0xEF, 0xBB, 0x21, 0x75, 0xFC, 0x42, 0x71, 0x2E, 0xFF,
|
||||||
|
0xFD, 0xF5, 0xA6, 0xC5, 0x00, 0xE1, 0x72, 0x6D, 0x73, 0x2E, 0x6E, 0xEA, 0xD7, 0xF6, 0x80, 0xFF,
|
||||||
|
0xF9, 0xF5, 0x9F, 0xF5, 0xAB, 0x41, 0x69, 0xF6, 0xD1, 0x42, 0x6C, 0x73, 0xFF, 0xFC, 0xEB, 0x02,
|
||||||
|
0xA0, 0x02, 0xD2, 0x21, 0x68, 0xFD, 0x42, 0xC3, 0x61, 0xFA, 0x3F, 0xFF, 0xFD, 0xC2, 0x06, 0x02,
|
||||||
|
0x6F, 0x73, 0xF5, 0x12, 0xF5, 0x12, 0x21, 0x72, 0xF7, 0x21, 0x65, 0xFD, 0xC5, 0x00, 0xE1, 0x63,
|
||||||
|
0x62, 0x6D, 0x72, 0x70, 0xFD, 0xB2, 0xFF, 0xDD, 0xF4, 0xC4, 0xFF, 0xEA, 0xFF, 0xFD, 0x41, 0x6C,
|
||||||
|
0xFC, 0x26, 0xA1, 0x00, 0xE2, 0x75, 0xFC, 0x21, 0x72, 0xFB, 0x41, 0x61, 0xF4, 0x0C, 0x21, 0x69,
|
||||||
|
0xFC, 0x21, 0x74, 0xFD, 0x41, 0x6D, 0xF4, 0x02, 0x21, 0x72, 0xFC, 0x41, 0x6C, 0xF3, 0xFB, 0x41,
|
||||||
|
0x6F, 0xF8, 0xC3, 0x22, 0x65, 0x72, 0xF8, 0xFC, 0x45, 0x6F, 0x61, 0x65, 0x68, 0x69, 0xFF, 0xDF,
|
||||||
|
0xFF, 0xE9, 0xFF, 0xF0, 0xFB, 0x48, 0xFF, 0xFB, 0x41, 0x6F, 0xF6, 0x5E, 0x42, 0x6C, 0x76, 0xFF,
|
||||||
|
0xFC, 0xF3, 0xDA, 0x41, 0x76, 0xF3, 0xD3, 0x22, 0x61, 0x6F, 0xF5, 0xFC, 0x41, 0x70, 0xFB, 0x11,
|
||||||
|
0x41, 0xA9, 0xFB, 0x17, 0x21, 0xC3, 0xFC, 0x41, 0x70, 0xF3, 0xBF, 0xC3, 0x00, 0xE2, 0x2E, 0x65,
|
||||||
|
0x73, 0xF4, 0xF7, 0xF6, 0x66, 0xF4, 0xFD, 0x24, 0x61, 0x6C, 0x6F, 0x68, 0xE5, 0xED, 0xF0, 0xF4,
|
||||||
|
0x41, 0x6D, 0xF9, 0x29, 0xC6, 0x00, 0xE2, 0x2E, 0x65, 0x6D, 0x6F, 0x72, 0x73, 0xF4, 0xDE, 0xF4,
|
||||||
|
0xF6, 0xF4, 0xE4, 0xFF, 0xFC, 0xF4, 0xE4, 0xF4, 0xE4, 0x41, 0x64, 0xF3, 0x8D, 0x21, 0x72, 0xFC,
|
||||||
|
0x21, 0x61, 0xFD, 0x21, 0x64, 0xFD, 0x21, 0x6E, 0xFD, 0x41, 0x6E, 0xF3, 0x7D, 0x21, 0x69, 0xFC,
|
||||||
|
0xA0, 0x07, 0xE2, 0x21, 0x73, 0xFD, 0x21, 0x6F, 0xFD, 0x21, 0xA9, 0xFD, 0x21, 0xC3, 0xFD, 0x21,
|
||||||
|
0x72, 0xFD, 0x21, 0xA9, 0xFD, 0x41, 0x67, 0xFF, 0x5F, 0x41, 0x6B, 0xF3, 0x5D, 0x42, 0x63, 0x6D,
|
||||||
|
0xFF, 0xFC, 0xFF, 0x62, 0x41, 0x74, 0xFA, 0x90, 0x21, 0x63, 0xFC, 0x42, 0x6F, 0x75, 0xFF, 0x81,
|
||||||
|
0xFF, 0xFD, 0x41, 0x65, 0xF3, 0x44, 0x21, 0x6C, 0xFC, 0x27, 0x61, 0x65, 0xC3, 0x69, 0x6F, 0x72,
|
||||||
|
0x79, 0xBD, 0xC4, 0xD9, 0xDC, 0xE4, 0xF2, 0xFD, 0x4D, 0x65, 0x75, 0x70, 0x6C, 0x61, 0xC3, 0x63,
|
||||||
|
0x68, 0x69, 0x6F, 0xC5, 0x74, 0x79, 0xFE, 0xCB, 0xFF, 0x04, 0xFF, 0x40, 0xFF, 0x5F, 0xF3, 0x11,
|
||||||
|
0xF4, 0x54, 0xFF, 0x7F, 0xFF, 0x8C, 0xF3, 0x11, 0xF3, 0x11, 0xF7, 0x13, 0xFF, 0xF1, 0xF3, 0x11,
|
||||||
|
0x41, 0x69, 0xF3, 0x97, 0x21, 0x6E, 0xFC, 0x21, 0x6F, 0xFD, 0x22, 0x6D, 0x73, 0xFD, 0xF6, 0x21,
|
||||||
|
0x6F, 0xFB, 0x21, 0x6E, 0xFD, 0x41, 0x75, 0xED, 0x66, 0x41, 0x73, 0xEC, 0x54, 0x21, 0x64, 0xFC,
|
||||||
|
0x21, 0x75, 0xFD, 0x41, 0x6F, 0xF6, 0xA4, 0x42, 0x73, 0x70, 0xEA, 0xC3, 0xFF, 0xFC, 0x21, 0x69,
|
||||||
|
0xF9, 0x43, 0x6D, 0x62, 0x6E, 0xF3, 0x6F, 0xFF, 0xEF, 0xFF, 0xFD, 0x41, 0x67, 0xF3, 0x5C, 0x21,
|
||||||
|
0x6E, 0xFC, 0x21, 0x6F, 0xFD, 0x21, 0x6C, 0xFD, 0x41, 0x65, 0xFA, 0x82, 0x21, 0x74, 0xFC, 0x41,
|
||||||
|
0x6E, 0xFA, 0xEA, 0x21, 0x6F, 0xFC, 0x42, 0x73, 0x74, 0xF7, 0x88, 0xF7, 0x88, 0x41, 0x6F, 0xF7,
|
||||||
|
0x81, 0x21, 0x72, 0xFC, 0x21, 0xA9, 0xFD, 0x41, 0x6D, 0xF7, 0x77, 0x41, 0x75, 0xF7, 0x73, 0x42,
|
||||||
|
0x64, 0x74, 0xF7, 0x6F, 0xFF, 0xFC, 0x41, 0x6E, 0xF7, 0x68, 0x21, 0x6F, 0xFC, 0x21, 0x69, 0xFD,
|
||||||
|
0x21, 0x74, 0xFD, 0x21, 0x63, 0xFD, 0x22, 0x61, 0x69, 0xE9, 0xFD, 0x25, 0x61, 0xC3, 0x69, 0x6F,
|
||||||
|
0x72, 0xCB, 0xD9, 0xDC, 0xDC, 0xFB, 0x21, 0x74, 0xF5, 0x41, 0x61, 0xE9, 0x22, 0x21, 0x79, 0xFC,
|
||||||
|
0x4B, 0x67, 0x70, 0x6D, 0x72, 0x62, 0x63, 0x64, 0xC3, 0x69, 0x73, 0x78, 0xFF, 0x72, 0xFF, 0x75,
|
||||||
|
0xFF, 0x91, 0xF3, 0x5D, 0xFF, 0xA5, 0xFF, 0xAC, 0xFD, 0x10, 0xF2, 0x46, 0xFF, 0xB3, 0xFF, 0xF6,
|
||||||
|
0xFF, 0xFD, 0x41, 0x6E, 0xE8, 0xBD, 0xA1, 0x00, 0xE1, 0x67, 0xFC, 0x46, 0x61, 0x65, 0x69, 0x6F,
|
||||||
|
0x75, 0x72, 0xFF, 0xFB, 0xF3, 0x86, 0xF2, 0x1E, 0xF2, 0x1E, 0xF2, 0x1E, 0xF2, 0x3B, 0xA0, 0x01,
|
||||||
|
0x71, 0x21, 0xA9, 0xFD, 0x21, 0xC3, 0xFD, 0x41, 0x74, 0xE8, 0x44, 0x21, 0x70, 0xFC, 0x22, 0x69,
|
||||||
|
0x6F, 0xF6, 0xFD, 0xA1, 0x00, 0xE1, 0x6D, 0xFB, 0x47, 0xA2, 0xA9, 0xA8, 0xAA, 0xAE, 0xB4, 0xBB,
|
||||||
|
0xF1, 0xF1, 0xFF, 0xFB, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0x41, 0xA9,
|
||||||
|
0xE9, 0x74, 0xC7, 0x06, 0x02, 0x61, 0x65, 0xC3, 0x69, 0x6F, 0x73, 0x75, 0xF2, 0xCD, 0xF2, 0xCD,
|
||||||
|
0xFF, 0xFC, 0xF2, 0xCD, 0xF2, 0xCD, 0xF2, 0xCD, 0xF2, 0xCD, 0x21, 0x72, 0xE8, 0x47, 0x61, 0x65,
|
||||||
|
0xC3, 0x69, 0x6F, 0x73, 0x75, 0xE9, 0xBD, 0xE9, 0xBD, 0xED, 0x93, 0xE9, 0xBD, 0xE9, 0xBD, 0xE9,
|
||||||
|
0xBD, 0xE9, 0xBD, 0x22, 0x65, 0x6F, 0xE7, 0xEA, 0xA1, 0x00, 0xE1, 0x70, 0xFB, 0x47, 0x61, 0xC3,
|
||||||
|
0x65, 0x69, 0x6F, 0x75, 0x79, 0xF1, 0x9C, 0xFF, 0xAB, 0xF6, 0x71, 0xF4, 0xCA, 0xF1, 0x9C, 0xFA,
|
||||||
|
0x8F, 0xFF, 0xFB, 0x41, 0x76, 0xF3, 0xC0, 0x41, 0x76, 0xE8, 0x54, 0x41, 0x78, 0xE8, 0x50, 0x22,
|
||||||
|
0x6F, 0x61, 0xF8, 0xFC, 0x21, 0x69, 0xFB, 0x41, 0x72, 0xF2, 0x20, 0x21, 0x74, 0xFC, 0x45, 0x63,
|
||||||
|
0x65, 0x76, 0x6E, 0x73, 0xF2, 0x5E, 0xFF, 0xE5, 0xF2, 0x5E, 0xFF, 0xF6, 0xFF, 0xFD, 0x42, 0x6E,
|
||||||
|
0x73, 0xE9, 0xBA, 0xE9, 0xBA, 0x21, 0x69, 0xF9, 0x21, 0x6C, 0xFD, 0x21, 0x6C, 0xFD, 0x21, 0x69,
|
||||||
|
0xFD, 0xC2, 0x00, 0xE1, 0x63, 0x6E, 0xF3, 0x82, 0xFF, 0xFD, 0xC2, 0x00, 0xE1, 0x6C, 0x64, 0xF4,
|
||||||
|
0x69, 0xF9, 0xE8, 0x41, 0x74, 0xF7, 0x1B, 0x21, 0x6F, 0xFC, 0x21, 0x70, 0xFD, 0x21, 0x69, 0xFD,
|
||||||
|
0x42, 0x72, 0x2E, 0xFF, 0xFD, 0xF2, 0x88, 0x42, 0x69, 0x74, 0xEF, 0x79, 0xFF, 0xF9, 0xC3, 0x00,
|
||||||
|
0xE1, 0x6E, 0x2E, 0x73, 0xFF, 0xF9, 0xF2, 0x74, 0xF2, 0x77, 0x41, 0x69, 0xE7, 0x51, 0x21, 0x6B,
|
||||||
|
0xFC, 0x21, 0x73, 0xFD, 0x21, 0x6F, 0xFD, 0xA1, 0x00, 0xE1, 0x6C, 0xFD, 0x47, 0xA2, 0xA9, 0xA8,
|
||||||
|
0xAA, 0xAE, 0xB4, 0xBB, 0xF0, 0xFD, 0xFF, 0xFB, 0xF0, 0xFD, 0xF0, 0xFD, 0xF0, 0xFD, 0xF0, 0xFD,
|
||||||
|
0xF0, 0xFD, 0x41, 0x6D, 0xE9, 0xDD, 0x21, 0x61, 0xFC, 0x21, 0x74, 0xFD, 0xA1, 0x00, 0xE1, 0x6C,
|
||||||
|
0xFD, 0x48, 0x61, 0x69, 0x65, 0xC3, 0x6F, 0x72, 0x75, 0x79, 0xFF, 0x90, 0xFF, 0x99, 0xFF, 0xBD,
|
||||||
|
0xFF, 0xDB, 0xFF, 0xFB, 0xF2, 0x50, 0xF0, 0xD8, 0xF0, 0xD8, 0xA0, 0x01, 0xD1, 0x21, 0x6E, 0xFD,
|
||||||
|
0x21, 0x6F, 0xFD, 0x42, 0x69, 0x75, 0xFF, 0xFD, 0xF0, 0xF8, 0x41, 0x72, 0xF6, 0xE9, 0xA1, 0x00,
|
||||||
|
0xE1, 0x77, 0xFC, 0x48, 0xA2, 0xA0, 0xA9, 0xA8, 0xAA, 0xAE, 0xB4, 0xBB, 0xF0, 0xA6, 0xF0, 0xA6,
|
||||||
|
0xF0, 0xA6, 0xF0, 0xA6, 0xF0, 0xA6, 0xF0, 0xA6, 0xF0, 0xA6, 0xF0, 0xA6, 0x41, 0x2E, 0xE6, 0x8A,
|
||||||
|
0x21, 0x74, 0xFC, 0x21, 0x6E, 0xFD, 0x21, 0x65, 0xFD, 0x4A, 0x69, 0x6C, 0x61, 0xC3, 0x65, 0x6F,
|
||||||
|
0x73, 0x75, 0x79, 0x6D, 0xF3, 0xAE, 0xFF, 0xCA, 0xFF, 0xD5, 0xFF, 0xDA, 0xF1, 0xE8, 0xF0, 0x80,
|
||||||
|
0xF8, 0x95, 0xF0, 0x80, 0xF0, 0x80, 0xFF, 0xFD, 0x41, 0x6C, 0xF3, 0x8B, 0x42, 0x69, 0x65, 0xFF,
|
||||||
|
0xFC, 0xF9, 0xD3, 0xC1, 0x00, 0xE2, 0x2E, 0xF1, 0xAF, 0x49, 0x61, 0xC3, 0x65, 0x68, 0x69, 0x6F,
|
||||||
|
0x72, 0x75, 0x79, 0xF0, 0x50, 0xF1, 0x93, 0xF1, 0xB8, 0xFF, 0xFA, 0xF0, 0x50, 0xF0, 0x50, 0xF0,
|
||||||
|
0x6D, 0xF0, 0x50, 0xF0, 0x50, 0x42, 0x61, 0x65, 0xF0, 0x76, 0xF1, 0xA5, 0xA1, 0x00, 0xE1, 0x75,
|
||||||
|
0xF9, 0x41, 0x69, 0xFA, 0x32, 0x21, 0x72, 0xFC, 0xA1, 0x00, 0xE1, 0x74, 0xFD, 0xA0, 0x01, 0xF2,
|
||||||
|
0x21, 0x2E, 0xFD, 0x22, 0x2E, 0x73, 0xFA, 0xFD, 0x21, 0x74, 0xFB, 0x21, 0x61, 0xFD, 0x4A, 0x75,
|
||||||
|
0x61, 0xC3, 0x65, 0x69, 0x6F, 0xC5, 0x73, 0x78, 0x79, 0xFF, 0xEA, 0xF0, 0x0B, 0xF1, 0x4E, 0xF1,
|
||||||
|
0x73, 0xF0, 0x0B, 0xF0, 0x0B, 0xF4, 0x0D, 0xFF, 0xFD, 0xF8, 0x58, 0xF0, 0x0B, 0x41, 0x68, 0xF8,
|
||||||
|
0x39, 0x21, 0x74, 0xFC, 0x42, 0x73, 0x6C, 0xFF, 0xFD, 0xF8, 0x38, 0x41, 0x6F, 0xFD, 0x5C, 0x21,
|
||||||
|
0x74, 0xFC, 0x22, 0x61, 0x73, 0xF2, 0xFD, 0x42, 0xA9, 0xA8, 0xEF, 0xD2, 0xEF, 0xD2, 0x47, 0x61,
|
||||||
|
0x65, 0xC3, 0x69, 0x6F, 0x75, 0x79, 0xEF, 0xCB, 0xF1, 0x33, 0xFF, 0xF9, 0xEF, 0xCB, 0xEF, 0xCB,
|
||||||
|
0xEF, 0xCB, 0xEF, 0xCB, 0x5D, 0x27, 0x2E, 0x61, 0x62, 0xC3, 0x63, 0x6A, 0x6D, 0x72, 0x70, 0x69,
|
||||||
|
0x65, 0x64, 0x74, 0x66, 0x67, 0x73, 0x6F, 0x77, 0x68, 0x75, 0x76, 0x6C, 0x78, 0x6B, 0x71, 0x6E,
|
||||||
|
0x79, 0x7A, 0xE7, 0xD0, 0xEF, 0x48, 0xF0, 0xCD, 0xF1, 0x53, 0xF2, 0x28, 0xF3, 0xD1, 0xF3, 0xFD,
|
||||||
|
0xF4, 0xAD, 0xF5, 0x6F, 0xF7, 0x2F, 0xF8, 0x34, 0xF8, 0x98, 0xF9, 0x32, 0xFA, 0x80, 0xFA, 0xE4,
|
||||||
|
0xFB, 0x3C, 0xFC, 0xA4, 0xFD, 0x6C, 0xFD, 0x97, 0xFE, 0x19, 0xFE, 0x4A, 0xFE, 0xDD, 0xFF, 0x35,
|
||||||
|
0xFF, 0x58, 0xFF, 0x65, 0xFF, 0x88, 0xFF, 0xAA, 0xFF, 0xDE, 0xFF, 0xEA,
|
||||||
|
};
|
||||||
|
|
||||||
|
constexpr SerializedHyphenationPatterns fr_patterns = {
|
||||||
|
fr_trie_data,
|
||||||
|
sizeof(fr_trie_data),
|
||||||
|
};
|
||||||
File diff suppressed because it is too large
Load Diff
2099
lib/Epub/Epub/hyphenation/generated/hyph-ru.trie.h
Normal file
2099
lib/Epub/Epub/hyphenation/generated/hyph-ru.trie.h
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user