diff --git a/convert-hf-to-gguf.py b/convert-hf-to-gguf.py index f7fe29fd4..c8afbd9d8 100755 --- a/convert-hf-to-gguf.py +++ b/convert-hf-to-gguf.py @@ -169,6 +169,30 @@ class Model: if model_architecture == "PersimmonForCausalLM": return PersimmonModel return Model + + @staticmethod + def from_model_name(model_name: str): + if model_name == "StableLMEpoch": + return StableLMModel + if model_name == "GPTNeoX": + return GPTNeoXModel + if model_name == "Bloom": + return BloomModel + if model_name == "MPT": + return MPTModel + if model_name in ("Baichuan", "BaiChuan"): + return BaichuanModel + if model_name in ("Falcon", "RW"): + return FalconModel + if model_name == "GPTBigCode": + return StarCoderModel + if model_name == "GPTRefact": + return RefactModel + if model_name == "Persimmon": + return PersimmonModel + if model_name == "DeepseekCoder": + return DeepseekCoderModel + return Model def _is_model_safetensors(self) -> bool: return Model.count_model_parts(self.dir_model, ".safetensors") > 0 @@ -201,6 +225,8 @@ class Model: return gguf.MODEL_ARCH.REFACT if arch == "PersimmonForCausalLM": return gguf.MODEL_ARCH.PERSIMMON + if arch == "LlamaForCausalLM": + return gguf.MODEL_ARCH.LLAMA raise NotImplementedError(f'Architecture "{arch}" not supported!') @@ -823,6 +849,68 @@ class PersimmonModel(Model): print(f"{new_name}, n_dims = {n_dims}, {old_dtype} --> {data.dtype}") self.gguf_writer.add_tensor(new_name, data) +class DeepseekCoderModel(Model): + def set_gguf_parameters(self): + block_count = self.hparams["num_hidden_layers"] + head_count = self.hparams["num_attention_heads"] + head_count_kv = self.hparams.get("num_key_value_heads", head_count) + ctx_length = self.hparams["max_position_embeddings"] + + self.gguf_writer.add_name("deepseek_coder") + self.gguf_writer.add_context_length(ctx_length) + self.gguf_writer.add_embedding_length(self.hparams["hidden_size"]) + self.gguf_writer.add_block_count(block_count) + self.gguf_writer.add_feed_forward_length(self.hparams["intermediate_size"]) + self.gguf_writer.add_rope_dimension_count(self.hparams["hidden_size"] // self.hparams["num_attention_heads"]) + self.gguf_writer.add_head_count(head_count) + self.gguf_writer.add_head_count_kv(head_count_kv) + self.gguf_writer.add_layer_norm_rms_eps(self.hparams["rms_norm_eps"]) + self.gguf_writer.add_rope_freq_base(self.hparams["rope_theta"]) + + if self.hparams.get("rope_scaling") is not None and "factor" in self.hparams["rope_scaling"]: + if self.hparams["rope_scaling"].get("type") == "linear": + self.gguf_writer.add_rope_scaling_type(gguf.RopeScalingType.LINEAR) + self.gguf_writer.add_rope_scaling_factor(self.hparams["rope_scaling"]["factor"]) + + def set_vocab(self): + dir_model = self.dir_model + hparams = self.hparams + tokens: list[bytearray] = [] + toktypes: list[int] = [] + + from transformers import AutoTokenizer # type: ignore[attr-defined] + tokenizer = AutoTokenizer.from_pretrained(dir_model) + vocab_size = hparams.get("vocab_size", len(tokenizer.vocab)) + assert max(tokenizer.vocab.values()) < vocab_size + + reverse_vocab = {id_: encoded_tok for encoded_tok, id_ in tokenizer.vocab.items()} + added_vocab = tokenizer.get_added_vocab() + special_tokens = tokenizer.all_special_tokens + for i in range(vocab_size): + if i not in reverse_vocab: + pad_token = f"[PAD{i}]".encode('utf-8') + tokens.append(bytearray(pad_token)) + toktypes.append(gguf.TokenType.USER_DEFINED) + elif reverse_vocab[i] in added_vocab: + tokens.append(reverse_vocab[i]) + if reverse_vocab[i] in special_tokens: + toktypes.append(gguf.TokenType.CONTROL) + else: + toktypes.append(gguf.TokenType.USER_DEFINED) + else: + tokens.append(reverse_vocab[i]) + toktypes.append(gguf.TokenType.NORMAL) + + self.gguf_writer.add_tokenizer_model("deepseek_coder") + self.gguf_writer.add_token_list(tokens) + self.gguf_writer.add_token_types(toktypes) + + special_vocab = gguf.SpecialVocab(dir_model, load_merges=True) + special_vocab.add_to_gguf(self.gguf_writer) + + + + ###### CONVERSION LOGIC ###### @@ -845,6 +933,7 @@ def parse_args() -> argparse.Namespace: "model", type=Path, help="directory containing model file", ) + parser.add_argument("--model-name", type=str, default=None, help="name of the model") return parser.parse_args() @@ -871,7 +960,7 @@ print(f"Loading model: {dir_model.name}") hparams = Model.load_hparams(dir_model) -model_class = Model.from_model_architecture(hparams["architectures"][0]) +model_class = Model.from_model_name(args.model_name) if args.model_name else Model.from_model_architecture(hparams["architectures"][0]) model_instance = model_class(dir_model, ftype_map[args.outtype], fname_out, args.bigendian) print("Set model parameters") diff --git a/llama.cpp b/llama.cpp index d682d2864..4fdac7175 100644 --- a/llama.cpp +++ b/llama.cpp @@ -2265,7 +2265,7 @@ static void llm_load_vocab( vocab.special_unk_id = 0; vocab.special_sep_id = -1; vocab.special_pad_id = -1; - } else if (tokenizer_name == "gpt2") { + } else if (tokenizer_name == "gpt2" || tokenizer_name == "deepseek_coder") { vocab.type = LLAMA_VOCAB_TYPE_BPE; // read bpe merges and populate bpe ranks @@ -5682,136 +5682,32 @@ private: } std::vector bpe_gpt2_preprocess(const std::string & text) { + std::vector bpe_words; std::vector bpe_encoded_words; - - std::string token = ""; - // GPT2 system regex: 's|'t|'re|'ve|'m|'ll|'d| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+ - bool collecting_numeric = false; - bool collecting_letter = false; - bool collecting_special = false; - bool collecting_whitespace_lookahead = false; - bool collecting = false; - - std::vector text_utf; - text_utf.reserve(text.size()); - bpe_words.reserve(text.size()); - bpe_encoded_words.reserve(text.size()); - - auto cps = codepoints_from_utf8(text); - for (size_t i = 0; i < cps.size(); ++i) - text_utf.emplace_back(codepoint_to_utf8(cps[i])); - - for (int i = 0; i < (int)text_utf.size(); i++) { - const std::string & utf_char = text_utf[i]; - bool split_condition = false; - int bytes_remain = text_utf.size() - i; - // forward backward lookups - const std::string & utf_char_next = (i + 1 < (int)text_utf.size()) ? text_utf[i + 1] : ""; - const std::string & utf_char_next_next = (i + 2 < (int)text_utf.size()) ? text_utf[i + 2] : ""; - - // handling contractions - if (!split_condition && bytes_remain >= 2) { - // 's|'t|'m|'d - if (utf_char == "\'" && (utf_char_next == "s" || utf_char_next == "t" || utf_char_next == "m" || utf_char_next == "d")) { - split_condition = true; - } - if (split_condition) { - if (token.size()) { - bpe_words.emplace_back(token); // push previous content as token - } - token = utf_char + utf_char_next; - bpe_words.emplace_back(token); - token = ""; - i++; - continue; + // convert input string to wstring + std::wstring input = from_utf8(text); + std::wstring regex = from_utf8(gpt2_regex); + std::wregex expr(regex); + // std::wsmatch m; + // // use regex match to get where to split the test string + int array[] = {-1,0}; + std::wsregex_token_iterator iter(input.begin(), input.end(), expr, array); + std::wsregex_token_iterator end; + for ( ; iter != end; ++iter){ + if ((*iter).length()>0){ + bpe_words.push_back(to_utf8(*iter)); } } - if (!split_condition && bytes_remain >= 3) { - // 're|'ve|'ll - if (utf_char == "\'" && ( - (utf_char_next == "r" && utf_char_next_next == "e") || - (utf_char_next == "v" && utf_char_next_next == "e") || - (utf_char_next == "l" && utf_char_next_next == "l")) - ) { - split_condition = true; - } - if (split_condition) { - // current token + next token can be defined - if (token.size()) { - bpe_words.emplace_back(token); // push previous content as token - } - token = utf_char + utf_char_next + utf_char_next_next; - bpe_words.emplace_back(token); // the contraction - token = ""; - i += 2; - continue; - } - } - - if (!split_condition && !collecting) { - if (codepoint_type(utf_char) == CODEPOINT_TYPE_LETTER || (!token.size() && utf_char == " " && codepoint_type(utf_char_next) == CODEPOINT_TYPE_LETTER)) { - collecting_letter = true; - collecting = true; - } - else if (codepoint_type(utf_char) == CODEPOINT_TYPE_DIGIT || (!token.size() && utf_char == " " && codepoint_type(utf_char_next) == CODEPOINT_TYPE_DIGIT)) { - collecting_numeric = true; - collecting = true; - } - else if ( - ((codepoint_type(utf_char) != CODEPOINT_TYPE_LETTER && codepoint_type(utf_char) != CODEPOINT_TYPE_DIGIT) && (codepoint_type(utf_char) != CODEPOINT_TYPE_WHITESPACE)) || - (!token.size() && utf_char == " " && codepoint_type(utf_char_next) != CODEPOINT_TYPE_LETTER && codepoint_type(utf_char_next) != CODEPOINT_TYPE_DIGIT && codepoint_type(utf_char_next) != CODEPOINT_TYPE_WHITESPACE) - ) { - collecting_special = true; - collecting = true; - } - else if (codepoint_type(utf_char) == CODEPOINT_TYPE_WHITESPACE && codepoint_type(utf_char_next) == CODEPOINT_TYPE_WHITESPACE) { - collecting_whitespace_lookahead = true; - collecting = true; - } - else if (codepoint_type(utf_char) == CODEPOINT_TYPE_WHITESPACE) { - split_condition = true; - } - } - else if (!split_condition && collecting) { - if (collecting_letter && codepoint_type(utf_char) != CODEPOINT_TYPE_LETTER) { - split_condition = true; - } - else if (collecting_numeric && codepoint_type(utf_char) != CODEPOINT_TYPE_DIGIT) { - split_condition = true; - } - else if (collecting_special && (codepoint_type(utf_char) == CODEPOINT_TYPE_LETTER || codepoint_type(utf_char) == CODEPOINT_TYPE_DIGIT || codepoint_type(utf_char) == CODEPOINT_TYPE_WHITESPACE)) { - split_condition = true; - } - else if (collecting_whitespace_lookahead && (codepoint_type(utf_char_next) == CODEPOINT_TYPE_LETTER || codepoint_type(utf_char_next) == CODEPOINT_TYPE_DIGIT)) { - split_condition = true; - } - } - - if (utf_char_next == "") { - split_condition = true; // final - token += utf_char; - } - - if (split_condition) { - if (token.size()) { - bpe_words.emplace_back(token); - } - token = utf_char; - collecting = false; - collecting_letter = false; - collecting_numeric = false; - collecting_special = false; - collecting_whitespace_lookahead = false; - } - else { - token += utf_char; - } - } - + // convert each word to utf8 for (std::string & word : bpe_words) { + std::string text_utf = ""; + auto utf_word = codepoints_from_utf8(word); + for (size_t i = 0; i < utf_word.size(); ++i) + text_utf += codepoint_to_utf8(utf_word[i]); + std::string encoded_token = ""; - for (char & c : word) { + for (char & c : text_utf) { encoded_token += bytes_to_unicode_bpe(c); } bpe_encoded_words.emplace_back(encoded_token); diff --git a/unicode.h b/unicode.h index aeca879ea..026561dc2 100644 --- a/unicode.h +++ b/unicode.h @@ -4,6 +4,10 @@ #include #include #include +#include +#include +#include +#include static const std::vector> digit_ranges = { {0x30, 0x39}, {0xB2, 0xB3}, {0xB9, 0xB9}, {0x660, 0x669}, {0x6F0, 0x6F9}, {0x7C0, 0x7C9}, {0x966, 0x96F}, {0x9E6, 0x9EF}, {0xA66, 0xA6F}, {0xAE6, 0xAEF}, {0xB66, 0xB6F}, {0xBE6, 0xBEF}, {0xC66, 0xC6F}, @@ -460,3 +464,18 @@ static uint8_t unicode_to_bytes_bpe(const std::string & utf8) { return map.at(utf8); } +static const std::string gpt2_regex = "s|'t|'re|'ve|'m|'ll|'d| ?(?:[A-Z]|[a-z]|\\xc2\\xaa|\\xc2\\xb5|\\xc2\\xba|\\xc3[\\x80-\\x96]|\\xc3[\\x98-\\xb6]|\\xc3[\\xb8-\\xbf]|[\\xc4-\\xca][\\x80-\\xbf]|\\xcb[\\x80\\x81]|\\xcb[\\x86-\\x91]|\\xcb[\\xa0-\\xa4]|\\xcb\\xac|\\xcb\\xae|\\xcd[\\xb0-\\xb4]|\\xcd[\\xb6\\xb7]|\\xcd[\\xba-\\xbd]|\\xcd\\xbf|\\xce\\x86|\\xce[\\x88-\\x8a]|\\xce\\x8c|\\xce[\\x8e-\\xa1]|\\xce[\\xa3-\\xbf]|\\xcf[\\x80-\\xb5]|\\xcf[\\xb7-\\xbf]|[\\xd0\\xd1][\\x80-\\xbf]|\\xd2[\\x80\\x81]|\\xd2[\\x8a-\\xbf]|\\xd3[\\x80-\\xbf]|\\xd4[\\x80-\\xaf]|\\xd4[\\xb1-\\xbf]|\\xd5[\\x80-\\x96]|\\xd5\\x99|\\xd5[\\xa0-\\xbf]|\\xd6[\\x80-\\x88]|\\xd7[\\x90-\\xaa]|\\xd7[\\xaf-\\xb2]|\\xd8[\\xa0-\\xbf]|\\xd9[\\x80-\\x8a]|\\xd9[\\xae\\xaf]|\\xd9[\\xb1-\\xbf]|\\xda[\\x80-\\xbf]|\\xdb[\\x80-\\x93]|\\xdb\\x95|\\xdb[\\xa5\\xa6]|\\xdb[\\xae\\xaf]|\\xdb[\\xba-\\xbc]|\\xdb\\xbf|\\xdc\\x90|\\xdc[\\x92-\\xaf]|\\xdd[\\x8d-\\xbf]|\\xde[\\x80-\\xa5]|\\xde\\xb1|\\xdf[\\x8a-\\xaa]|\\xdf[\\xb4\\xb5]|\\xdf\\xba|\\xe0\\xa0[\\x80-\\x95]|\\xe0\\xa0\\x9a|\\xe0\\xa0\\xa4|\\xe0\\xa0\\xa8|\\xe0\\xa1[\\x80-\\x98]|\\xe0\\xa1[\\xa0-\\xaa]|\\xe0(?:\\xa1[\\xb0-\\xbf]|\\xa2[\\x80-\\x87])|\\xe0\\xa2[\\x89-\\x8e]|\\xe0(?:\\xa2[\\xa0-\\xbf]|\\xa3[\\x80-\\x89])|\\xe0\\xa4[\\x84-\\xb9]|\\xe0\\xa4\\xbd|\\xe0\\xa5\\x90|\\xe0\\xa5[\\x98-\\xa1]|\\xe0(?:\\xa5[\\xb1-\\xbf]|\\xa6\\x80)|\\xe0\\xa6[\\x85-\\x8c]|\\xe0\\xa6[\\x8f\\x90]|\\xe0\\xa6[\\x93-\\xa8]|\\xe0\\xa6[\\xaa-\\xb0]|\\xe0\\xa6\\xb2|\\xe0\\xa6[\\xb6-\\xb9]|\\xe0\\xa6\\xbd|\\xe0\\xa7\\x8e|\\xe0\\xa7[\\x9c\\x9d]|\\xe0\\xa7[\\x9f-\\xa1]|\\xe0\\xa7[\\xb0\\xb1]|\\xe0\\xa7\\xbc|\\xe0\\xa8[\\x85-\\x8a]|\\xe0\\xa8[\\x8f\\x90]|\\xe0\\xa8[\\x93-\\xa8]|\\xe0\\xa8[\\xaa-\\xb0]|\\xe0\\xa8[\\xb2\\xb3]|\\xe0\\xa8[\\xb5\\xb6]|\\xe0\\xa8[\\xb8\\xb9]|\\xe0\\xa9[\\x99-\\x9c]|\\xe0\\xa9\\x9e|\\xe0\\xa9[\\xb2-\\xb4]|\\xe0\\xaa[\\x85-\\x8d]|\\xe0\\xaa[\\x8f-\\x91]|\\xe0\\xaa[\\x93-\\xa8]|\\xe0\\xaa[\\xaa-\\xb0]|\\xe0\\xaa[\\xb2\\xb3]|\\xe0\\xaa[\\xb5-\\xb9]|\\xe0\\xaa\\xbd|\\xe0\\xab\\x90|\\xe0\\xab[\\xa0\\xa1]|\\xe0\\xab\\xb9|\\xe0\\xac[\\x85-\\x8c]|\\xe0\\xac[\\x8f\\x90]|\\xe0\\xac[\\x93-\\xa8]|\\xe0\\xac[\\xaa-\\xb0]|\\xe0\\xac[\\xb2\\xb3]|\\xe0\\xac[\\xb5-\\xb9]|\\xe0\\xac\\xbd|\\xe0\\xad[\\x9c\\x9d]|\\xe0\\xad[\\x9f-\\xa1]|\\xe0\\xad\\xb1|\\xe0\\xae\\x83|\\xe0\\xae[\\x85-\\x8a]|\\xe0\\xae[\\x8e-\\x90]|\\xe0\\xae[\\x92-\\x95]|\\xe0\\xae[\\x99\\x9a]|\\xe0\\xae\\x9c|\\xe0\\xae[\\x9e\\x9f]|\\xe0\\xae[\\xa3\\xa4]|\\xe0\\xae[\\xa8-\\xaa]|\\xe0\\xae[\\xae-\\xb9]|\\xe0\\xaf\\x90|\\xe0\\xb0[\\x85-\\x8c]|\\xe0\\xb0[\\x8e-\\x90]|\\xe0\\xb0[\\x92-\\xa8]|\\xe0\\xb0[\\xaa-\\xb9]|\\xe0\\xb0\\xbd|\\xe0\\xb1[\\x98-\\x9a]|\\xe0\\xb1\\x9d|\\xe0\\xb1[\\xa0\\xa1]|\\xe0\\xb2\\x80|\\xe0\\xb2[\\x85-\\x8c]|\\xe0\\xb2[\\x8e-\\x90]|\\xe0\\xb2[\\x92-\\xa8]|\\xe0\\xb2[\\xaa-\\xb3]|\\xe0\\xb2[\\xb5-\\xb9]|\\xe0\\xb2\\xbd|\\xe0\\xb3[\\x9d\\x9e]|\\xe0\\xb3[\\xa0\\xa1]|\\xe0\\xb3[\\xb1\\xb2]|\\xe0\\xb4[\\x84-\\x8c]|\\xe0\\xb4[\\x8e-\\x90]|\\xe0\\xb4[\\x92-\\xba]|\\xe0\\xb4\\xbd|\\xe0\\xb5\\x8e|\\xe0\\xb5[\\x94-\\x96]|\\xe0\\xb5[\\x9f-\\xa1]|\\xe0\\xb5[\\xba-\\xbf]|\\xe0\\xb6[\\x85-\\x96]|\\xe0\\xb6[\\x9a-\\xb1]|\\xe0\\xb6[\\xb3-\\xbb]|\\xe0\\xb6\\xbd|\\xe0\\xb7[\\x80-\\x86]|\\xe0\\xb8[\\x81-\\xb0]|\\xe0\\xb8[\\xb2\\xb3]|\\xe0\\xb9[\\x80-\\x86]|\\xe0\\xba[\\x81\\x82]|\\xe0\\xba\\x84|\\xe0\\xba[\\x86-\\x8a]|\\xe0\\xba[\\x8c-\\xa3]|\\xe0\\xba\\xa5|\\xe0\\xba[\\xa7-\\xb0]|\\xe0\\xba[\\xb2\\xb3]|\\xe0\\xba\\xbd|\\xe0\\xbb[\\x80-\\x84]|\\xe0\\xbb\\x86|\\xe0\\xbb[\\x9c-\\x9f]|\\xe0\\xbc\\x80|\\xe0\\xbd[\\x80-\\x87]|\\xe0\\xbd[\\x89-\\xac]|\\xe0\\xbe[\\x88-\\x8c]|\\xe1\\x80[\\x80-\\xaa]|\\xe1\\x80\\xbf|\\xe1\\x81[\\x90-\\x95]|\\xe1\\x81[\\x9a-\\x9d]|\\xe1\\x81\\xa1|\\xe1\\x81[\\xa5\\xa6]|\\xe1\\x81[\\xae-\\xb0]|\\xe1(?:\\x81[\\xb5-\\xbf]|\\x82[\\x80\\x81])|\\xe1\\x82\\x8e|\\xe1(?:\\x82[\\xa0-\\xbf]|\\x83[\\x80-\\x85])|\\xe1\\x83\\x87|\\xe1\\x83\\x8d|\\xe1\\x83[\\x90-\\xba]|\\xe1(?:\\x83[\\xbc-\\xbf]|[\\x84-\\x88][\\x80-\\xbf]|\\x89[\\x80-\\x88])|\\xe1\\x89[\\x8a-\\x8d]|\\xe1\\x89[\\x90-\\x96]|\\xe1\\x89\\x98|\\xe1\\x89[\\x9a-\\x9d]|\\xe1(?:\\x89[\\xa0-\\xbf]|\\x8a[\\x80-\\x88])|\\xe1\\x8a[\\x8a-\\x8d]|\\xe1\\x8a[\\x90-\\xb0]|\\xe1\\x8a[\\xb2-\\xb5]|\\xe1\\x8a[\\xb8-\\xbe]|\\xe1\\x8b\\x80|\\xe1\\x8b[\\x82-\\x85]|\\xe1\\x8b[\\x88-\\x96]|\\xe1(?:\\x8b[\\x98-\\xbf]|\\x8c[\\x80-\\x90])|\\xe1\\x8c[\\x92-\\x95]|\\xe1(?:\\x8c[\\x98-\\xbf]|\\x8d[\\x80-\\x9a])|\\xe1\\x8e[\\x80-\\x8f]|\\xe1(?:\\x8e[\\xa0-\\xbf]|\\x8f[\\x80-\\xb5])|\\xe1\\x8f[\\xb8-\\xbd]|\\xe1(?:\\x90[\\x81-\\xbf]|[\\x91-\\x98][\\x80-\\xbf]|\\x99[\\x80-\\xac])|\\xe1\\x99[\\xaf-\\xbf]|\\xe1\\x9a[\\x81-\\x9a]|\\xe1(?:\\x9a[\\xa0-\\xbf]|\\x9b[\\x80-\\xaa])|\\xe1\\x9b[\\xb1-\\xb8]|\\xe1\\x9c[\\x80-\\x91]|\\xe1\\x9c[\\x9f-\\xb1]|\\xe1\\x9d[\\x80-\\x91]|\\xe1\\x9d[\\xa0-\\xac]|\\xe1\\x9d[\\xae-\\xb0]|\\xe1\\x9e[\\x80-\\xb3]|\\xe1\\x9f\\x97|\\xe1\\x9f\\x9c|\\xe1(?:\\xa0[\\xa0-\\xbf]|\\xa1[\\x80-\\xb8])|\\xe1\\xa2[\\x80-\\x84]|\\xe1\\xa2[\\x87-\\xa8]|\\xe1\\xa2\\xaa|\\xe1(?:\\xa2[\\xb0-\\xbf]|\\xa3[\\x80-\\xb5])|\\xe1\\xa4[\\x80-\\x9e]|\\xe1\\xa5[\\x90-\\xad]|\\xe1\\xa5[\\xb0-\\xb4]|\\xe1\\xa6[\\x80-\\xab]|\\xe1(?:\\xa6[\\xb0-\\xbf]|\\xa7[\\x80-\\x89])|\\xe1\\xa8[\\x80-\\x96]|\\xe1(?:\\xa8[\\xa0-\\xbf]|\\xa9[\\x80-\\x94])|\\xe1\\xaa\\xa7|\\xe1\\xac[\\x85-\\xb3]|\\xe1\\xad[\\x85-\\x8c]|\\xe1\\xae[\\x83-\\xa0]|\\xe1\\xae[\\xae\\xaf]|\\xe1(?:\\xae[\\xba-\\xbf]|\\xaf[\\x80-\\xa5])|\\xe1\\xb0[\\x80-\\xa3]|\\xe1\\xb1[\\x8d-\\x8f]|\\xe1\\xb1[\\x9a-\\xbd]|\\xe1\\xb2[\\x80-\\x88]|\\xe1\\xb2[\\x90-\\xba]|\\xe1\\xb2[\\xbd-\\xbf]|\\xe1\\xb3[\\xa9-\\xac]|\\xe1\\xb3[\\xae-\\xb3]|\\xe1\\xb3[\\xb5\\xb6]|\\xe1\\xb3\\xba|\\xe1(?:[\\xb4-\\xb6][\\x80-\\xbf])|\\xe1(?:[\\xb8-\\xbb][\\x80-\\xbf]|\\xbc[\\x80-\\x95])|\\xe1\\xbc[\\x98-\\x9d]|\\xe1(?:\\xbc[\\xa0-\\xbf]|\\xbd[\\x80-\\x85])|\\xe1\\xbd[\\x88-\\x8d]|\\xe1\\xbd[\\x90-\\x97]|\\xe1\\xbd\\x99|\\xe1\\xbd\\x9b|\\xe1\\xbd\\x9d|\\xe1\\xbd[\\x9f-\\xbd]|\\xe1\\xbe[\\x80-\\xb4]|\\xe1\\xbe[\\xb6-\\xbc]|\\xe1\\xbe\\xbe|\\xe1\\xbf[\\x82-\\x84]|\\xe1\\xbf[\\x86-\\x8c]|\\xe1\\xbf[\\x90-\\x93]|\\xe1\\xbf[\\x96-\\x9b]|\\xe1\\xbf[\\xa0-\\xac]|\\xe1\\xbf[\\xb2-\\xb4]|\\xe1\\xbf[\\xb6-\\xbc]|\\xe2\\x81\\xb1|\\xe2\\x81\\xbf|\\xe2\\x82[\\x90-\\x9c]|\\xe2\\x84\\x82|\\xe2\\x84\\x87|\\xe2\\x84[\\x8a-\\x93]|\\xe2\\x84\\x95|\\xe2\\x84[\\x99-\\x9d]|\\xe2\\x84\\xa4|\\xe2\\x84\\xa6|\\xe2\\x84\\xa8|\\xe2\\x84[\\xaa-\\xad]|\\xe2\\x84[\\xaf-\\xb9]|\\xe2\\x84[\\xbc-\\xbf]|\\xe2\\x85[\\x85-\\x89]|\\xe2\\x85\\x8e|\\xe2\\x86[\\x83\\x84]|\\xe2(?:[\\xb0-\\xb2][\\x80-\\xbf]|\\xb3[\\x80-\\xa4])|\\xe2\\xb3[\\xab-\\xae]|\\xe2\\xb3[\\xb2\\xb3]|\\xe2\\xb4[\\x80-\\xa5]|\\xe2\\xb4\\xa7|\\xe2\\xb4\\xad|\\xe2(?:\\xb4[\\xb0-\\xbf]|\\xb5[\\x80-\\xa7])|\\xe2\\xb5\\xaf|\\xe2\\xb6[\\x80-\\x96]|\\xe2\\xb6[\\xa0-\\xa6]|\\xe2\\xb6[\\xa8-\\xae]|\\xe2\\xb6[\\xb0-\\xb6]|\\xe2\\xb6[\\xb8-\\xbe]|\\xe2\\xb7[\\x80-\\x86]|\\xe2\\xb7[\\x88-\\x8e]|\\xe2\\xb7[\\x90-\\x96]|\\xe2\\xb7[\\x98-\\x9e]|\\xe2\\xb8\\xaf|\\xe3\\x80[\\x85\\x86]|\\xe3\\x80[\\xb1-\\xb5]|\\xe3\\x80[\\xbb\\xbc]|\\xe3(?:\\x81[\\x81-\\xbf]|\\x82[\\x80-\\x96])|\\xe3\\x82[\\x9d-\\x9f]|\\xe3(?:\\x82[\\xa1-\\xbf]|\\x83[\\x80-\\xba])|\\xe3\\x83[\\xbc-\\xbf]|\\xe3\\x84[\\x85-\\xaf]|\\xe3(?:\\x84[\\xb1-\\xbf]|\\x85[\\x80-\\xbf]|\\x86[\\x80-\\x8e])|\\xe3\\x86[\\xa0-\\xbf]|\\xe3\\x87[\\xb0-\\xbf]|\\xe3[\\x90-\\xbf][\\x80-\\xbf]|\\xe4[\\x80-\\xb6][\\x80-\\xbf]|\\xe4[\\xb8-\\xbf][\\x80-\\xbf]|[\\xe5-\\xe9][\\x80-\\xbf][\\x80-\\xbf]|\\xea(?:[\\x80-\\x91][\\x80-\\xbf]|\\x92[\\x80-\\x8c])|\\xea\\x93[\\x90-\\xbd]|\\xea(?:[\\x94-\\x97][\\x80-\\xbf]|\\x98[\\x80-\\x8c])|\\xea\\x98[\\x90-\\x9f]|\\xea\\x98[\\xaa\\xab]|\\xea\\x99[\\x80-\\xae]|\\xea(?:\\x99\\xbf|\\x9a[\\x80-\\x9d])|\\xea(?:\\x9a[\\xa0-\\xbf]|\\x9b[\\x80-\\xa5])|\\xea\\x9c[\\x97-\\x9f]|\\xea(?:\\x9c[\\xa2-\\xbf]|\\x9d[\\x80-\\xbf]|\\x9e[\\x80-\\x88])|\\xea(?:\\x9e[\\x8b-\\xbf]|\\x9f[\\x80-\\x8a])|\\xea\\x9f[\\x90\\x91]|\\xea\\x9f\\x93|\\xea\\x9f[\\x95-\\x99]|\\xea(?:\\x9f[\\xb2-\\xbf]|\\xa0[\\x80\\x81])|\\xea\\xa0[\\x83-\\x85]|\\xea\\xa0[\\x87-\\x8a]|\\xea\\xa0[\\x8c-\\xa2]|\\xea\\xa1[\\x80-\\xb3]|\\xea\\xa2[\\x82-\\xb3]|\\xea\\xa3[\\xb2-\\xb7]|\\xea\\xa3\\xbb|\\xea\\xa3[\\xbd\\xbe]|\\xea\\xa4[\\x8a-\\xa5]|\\xea(?:\\xa4[\\xb0-\\xbf]|\\xa5[\\x80-\\x86])|\\xea\\xa5[\\xa0-\\xbc]|\\xea\\xa6[\\x84-\\xb2]|\\xea\\xa7\\x8f|\\xea\\xa7[\\xa0-\\xa4]|\\xea\\xa7[\\xa6-\\xaf]|\\xea\\xa7[\\xba-\\xbe]|\\xea\\xa8[\\x80-\\xa8]|\\xea\\xa9[\\x80-\\x82]|\\xea\\xa9[\\x84-\\x8b]|\\xea\\xa9[\\xa0-\\xb6]|\\xea\\xa9\\xba|\\xea(?:\\xa9[\\xbe\\xbf]|\\xaa[\\x80-\\xaf])|\\xea\\xaa\\xb1|\\xea\\xaa[\\xb5\\xb6]|\\xea\\xaa[\\xb9-\\xbd]|\\xea\\xab\\x80|\\xea\\xab\\x82|\\xea\\xab[\\x9b-\\x9d]|\\xea\\xab[\\xa0-\\xaa]|\\xea\\xab[\\xb2-\\xb4]|\\xea\\xac[\\x81-\\x86]|\\xea\\xac[\\x89-\\x8e]|\\xea\\xac[\\x91-\\x96]|\\xea\\xac[\\xa0-\\xa6]|\\xea\\xac[\\xa8-\\xae]|\\xea(?:\\xac[\\xb0-\\xbf]|\\xad[\\x80-\\x9a])|\\xea\\xad[\\x9c-\\xa9]|\\xea(?:\\xad[\\xb0-\\xbf]|\\xae[\\x80-\\xbf]|\\xaf[\\x80-\\xa2])|\\xea[\\xb0-\\xbf][\\x80-\\xbf]|[\\xeb\\xec][\\x80-\\xbf][\\x80-\\xbf]|\\xed(?:[\\x80-\\x9d][\\x80-\\xbf]|\\x9e[\\x80-\\xa3])|\\xed(?:\\x9e[\\xb0-\\xbf]|\\x9f[\\x80-\\x86])|\\xed\\x9f[\\x8b-\\xbb]|\\xef(?:[\\xa4-\\xa8][\\x80-\\xbf]|\\xa9[\\x80-\\xad])|\\xef(?:\\xa9[\\xb0-\\xbf]|\\xaa[\\x80-\\xbf]|\\xab[\\x80-\\x99])|\\xef\\xac[\\x80-\\x86]|\\xef\\xac[\\x93-\\x97]|\\xef\\xac\\x9d|\\xef\\xac[\\x9f-\\xa8]|\\xef\\xac[\\xaa-\\xb6]|\\xef\\xac[\\xb8-\\xbc]|\\xef\\xac\\xbe|\\xef\\xad[\\x80\\x81]|\\xef\\xad[\\x83\\x84]|\\xef(?:\\xad[\\x86-\\xbf]|\\xae[\\x80-\\xb1])|\\xef(?:\\xaf[\\x93-\\xbf]|[\\xb0-\\xb3][\\x80-\\xbf]|\\xb4[\\x80-\\xbd])|\\xef(?:\\xb5[\\x90-\\xbf]|\\xb6[\\x80-\\x8f])|\\xef(?:\\xb6[\\x92-\\xbf]|\\xb7[\\x80-\\x87])|\\xef\\xb7[\\xb0-\\xbb]|\\xef\\xb9[\\xb0-\\xb4]|\\xef(?:\\xb9[\\xb6-\\xbf]|\\xba[\\x80-\\xbf]|\\xbb[\\x80-\\xbc])|\\xef\\xbc[\\xa1-\\xba]|\\xef\\xbd[\\x81-\\x9a]|\\xef(?:\\xbd[\\xa6-\\xbf]|\\xbe[\\x80-\\xbe])|\\xef\\xbf[\\x82-\\x87]|\\xef\\xbf[\\x8a-\\x8f]|\\xef\\xbf[\\x92-\\x97]|\\xef\\xbf[\\x9a-\\x9c]|\\xf0\\x90\\x80[\\x80-\\x8b]|\\xf0\\x90\\x80[\\x8d-\\xa6]|\\xf0\\x90\\x80[\\xa8-\\xba]|\\xf0\\x90\\x80[\\xbc\\xbd]|\\xf0\\x90(?:\\x80\\xbf|\\x81[\\x80-\\x8d])|\\xf0\\x90\\x81[\\x90-\\x9d]|\\xf0\\x90(?:\\x82[\\x80-\\xbf]|\\x83[\\x80-\\xba])|\\xf0\\x90\\x8a[\\x80-\\x9c]|\\xf0\\x90(?:\\x8a[\\xa0-\\xbf]|\\x8b[\\x80-\\x90])|\\xf0\\x90\\x8c[\\x80-\\x9f]|\\xf0\\x90(?:\\x8c[\\xad-\\xbf]|\\x8d\\x80)|\\xf0\\x90\\x8d[\\x82-\\x89]|\\xf0\\x90\\x8d[\\x90-\\xb5]|\\xf0\\x90\\x8e[\\x80-\\x9d]|\\xf0\\x90(?:\\x8e[\\xa0-\\xbf]|\\x8f[\\x80-\\x83])|\\xf0\\x90\\x8f[\\x88-\\x8f]|\\xf0\\x90(?:[\\x90\\x91][\\x80-\\xbf]|\\x92[\\x80-\\x9d])|\\xf0\\x90(?:\\x92[\\xb0-\\xbf]|\\x93[\\x80-\\x93])|\\xf0\\x90\\x93[\\x98-\\xbb]|\\xf0\\x90\\x94[\\x80-\\xa7]|\\xf0\\x90(?:\\x94[\\xb0-\\xbf]|\\x95[\\x80-\\xa3])|\\xf0\\x90\\x95[\\xb0-\\xba]|\\xf0\\x90(?:\\x95[\\xbc-\\xbf]|\\x96[\\x80-\\x8a])|\\xf0\\x90\\x96[\\x8c-\\x92]|\\xf0\\x90\\x96[\\x94\\x95]|\\xf0\\x90\\x96[\\x97-\\xa1]|\\xf0\\x90\\x96[\\xa3-\\xb1]|\\xf0\\x90\\x96[\\xb3-\\xb9]|\\xf0\\x90\\x96[\\xbb\\xbc]|\\xf0\\x90(?:[\\x98-\\x9b][\\x80-\\xbf]|\\x9c[\\x80-\\xb6])|\\xf0\\x90\\x9d[\\x80-\\x95]|\\xf0\\x90\\x9d[\\xa0-\\xa7]|\\xf0\\x90\\x9e[\\x80-\\x85]|\\xf0\\x90\\x9e[\\x87-\\xb0]|\\xf0\\x90\\x9e[\\xb2-\\xba]|\\xf0\\x90\\xa0[\\x80-\\x85]|\\xf0\\x90\\xa0\\x88|\\xf0\\x90\\xa0[\\x8a-\\xb5]|\\xf0\\x90\\xa0[\\xb7\\xb8]|\\xf0\\x90\\xa0\\xbc|\\xf0\\x90(?:\\xa0\\xbf|\\xa1[\\x80-\\x95])|\\xf0\\x90\\xa1[\\xa0-\\xb6]|\\xf0\\x90\\xa2[\\x80-\\x9e]|\\xf0\\x90\\xa3[\\xa0-\\xb2]|\\xf0\\x90\\xa3[\\xb4\\xb5]|\\xf0\\x90\\xa4[\\x80-\\x95]|\\xf0\\x90\\xa4[\\xa0-\\xb9]|\\xf0\\x90\\xa6[\\x80-\\xb7]|\\xf0\\x90\\xa6[\\xbe\\xbf]|\\xf0\\x90\\xa8\\x80|\\xf0\\x90\\xa8[\\x90-\\x93]|\\xf0\\x90\\xa8[\\x95-\\x97]|\\xf0\\x90\\xa8[\\x99-\\xb5]|\\xf0\\x90\\xa9[\\xa0-\\xbc]|\\xf0\\x90\\xaa[\\x80-\\x9c]|\\xf0\\x90\\xab[\\x80-\\x87]|\\xf0\\x90\\xab[\\x89-\\xa4]|\\xf0\\x90\\xac[\\x80-\\xb5]|\\xf0\\x90\\xad[\\x80-\\x95]|\\xf0\\x90\\xad[\\xa0-\\xb2]|\\xf0\\x90\\xae[\\x80-\\x91]|\\xf0\\x90(?:\\xb0[\\x80-\\xbf]|\\xb1[\\x80-\\x88])|\\xf0\\x90\\xb2[\\x80-\\xb2]|\\xf0\\x90\\xb3[\\x80-\\xb2]|\\xf0\\x90\\xb4[\\x80-\\xa3]|\\xf0\\x90\\xba[\\x80-\\xa9]|\\xf0\\x90\\xba[\\xb0\\xb1]|\\xf0\\x90\\xbc[\\x80-\\x9c]|\\xf0\\x90\\xbc\\xa7|\\xf0\\x90(?:\\xbc[\\xb0-\\xbf]|\\xbd[\\x80-\\x85])|\\xf0\\x90(?:\\xbd[\\xb0-\\xbf]|\\xbe[\\x80\\x81])|\\xf0\\x90(?:\\xbe[\\xb0-\\xbf]|\\xbf[\\x80-\\x84])|\\xf0\\x90\\xbf[\\xa0-\\xb6]|\\xf0\\x91\\x80[\\x83-\\xb7]|\\xf0\\x91\\x81[\\xb1\\xb2]|\\xf0\\x91\\x81\\xb5|\\xf0\\x91\\x82[\\x83-\\xaf]|\\xf0\\x91\\x83[\\x90-\\xa8]|\\xf0\\x91\\x84[\\x83-\\xa6]|\\xf0\\x91\\x85\\x84|\\xf0\\x91\\x85\\x87|\\xf0\\x91\\x85[\\x90-\\xb2]|\\xf0\\x91\\x85\\xb6|\\xf0\\x91\\x86[\\x83-\\xb2]|\\xf0\\x91\\x87[\\x81-\\x84]|\\xf0\\x91\\x87\\x9a|\\xf0\\x91\\x87\\x9c|\\xf0\\x91\\x88[\\x80-\\x91]|\\xf0\\x91\\x88[\\x93-\\xab]|\\xf0\\x91(?:\\x88\\xbf|\\x89\\x80)|\\xf0\\x91\\x8a[\\x80-\\x86]|\\xf0\\x91\\x8a\\x88|\\xf0\\x91\\x8a[\\x8a-\\x8d]|\\xf0\\x91\\x8a[\\x8f-\\x9d]|\\xf0\\x91\\x8a[\\x9f-\\xa8]|\\xf0\\x91(?:\\x8a[\\xb0-\\xbf]|\\x8b[\\x80-\\x9e])|\\xf0\\x91\\x8c[\\x85-\\x8c]|\\xf0\\x91\\x8c[\\x8f\\x90]|\\xf0\\x91\\x8c[\\x93-\\xa8]|\\xf0\\x91\\x8c[\\xaa-\\xb0]|\\xf0\\x91\\x8c[\\xb2\\xb3]|\\xf0\\x91\\x8c[\\xb5-\\xb9]|\\xf0\\x91\\x8c\\xbd|\\xf0\\x91\\x8d\\x90|\\xf0\\x91\\x8d[\\x9d-\\xa1]|\\xf0\\x91\\x90[\\x80-\\xb4]|\\xf0\\x91\\x91[\\x87-\\x8a]|\\xf0\\x91\\x91[\\x9f-\\xa1]|\\xf0\\x91\\x92[\\x80-\\xaf]|\\xf0\\x91\\x93[\\x84\\x85]|\\xf0\\x91\\x93\\x87|\\xf0\\x91\\x96[\\x80-\\xae]|\\xf0\\x91\\x97[\\x98-\\x9b]|\\xf0\\x91\\x98[\\x80-\\xaf]|\\xf0\\x91\\x99\\x84|\\xf0\\x91\\x9a[\\x80-\\xaa]|\\xf0\\x91\\x9a\\xb8|\\xf0\\x91\\x9c[\\x80-\\x9a]|\\xf0\\x91\\x9d[\\x80-\\x86]|\\xf0\\x91\\xa0[\\x80-\\xab]|\\xf0\\x91(?:\\xa2[\\xa0-\\xbf]|\\xa3[\\x80-\\x9f])|\\xf0\\x91(?:\\xa3\\xbf|\\xa4[\\x80-\\x86])|\\xf0\\x91\\xa4\\x89|\\xf0\\x91\\xa4[\\x8c-\\x93]|\\xf0\\x91\\xa4[\\x95\\x96]|\\xf0\\x91\\xa4[\\x98-\\xaf]|\\xf0\\x91\\xa4\\xbf|\\xf0\\x91\\xa5\\x81|\\xf0\\x91\\xa6[\\xa0-\\xa7]|\\xf0\\x91(?:\\xa6[\\xaa-\\xbf]|\\xa7[\\x80-\\x90])|\\xf0\\x91\\xa7\\xa1|\\xf0\\x91\\xa7\\xa3|\\xf0\\x91\\xa8\\x80|\\xf0\\x91\\xa8[\\x8b-\\xb2]|\\xf0\\x91\\xa8\\xba|\\xf0\\x91\\xa9\\x90|\\xf0\\x91(?:\\xa9[\\x9c-\\xbf]|\\xaa[\\x80-\\x89])|\\xf0\\x91\\xaa\\x9d|\\xf0\\x91(?:\\xaa[\\xb0-\\xbf]|\\xab[\\x80-\\xb8])|\\xf0\\x91\\xb0[\\x80-\\x88]|\\xf0\\x91\\xb0[\\x8a-\\xae]|\\xf0\\x91\\xb1\\x80|\\xf0\\x91(?:\\xb1[\\xb2-\\xbf]|\\xb2[\\x80-\\x8f])|\\xf0\\x91\\xb4[\\x80-\\x86]|\\xf0\\x91\\xb4[\\x88\\x89]|\\xf0\\x91\\xb4[\\x8b-\\xb0]|\\xf0\\x91\\xb5\\x86|\\xf0\\x91\\xb5[\\xa0-\\xa5]|\\xf0\\x91\\xb5[\\xa7\\xa8]|\\xf0\\x91(?:\\xb5[\\xaa-\\xbf]|\\xb6[\\x80-\\x89])|\\xf0\\x91\\xb6\\x98|\\xf0\\x91\\xbb[\\xa0-\\xb2]|\\xf0\\x91\\xbc\\x82|\\xf0\\x91\\xbc[\\x84-\\x90]|\\xf0\\x91\\xbc[\\x92-\\xb3]|\\xf0\\x91\\xbe\\xb0|\\xf0\\x92(?:[\\x80-\\x8d][\\x80-\\xbf]|\\x8e[\\x80-\\x99])|\\xf0\\x92(?:[\\x92-\\x94][\\x80-\\xbf]|\\x95[\\x80-\\x83])|\\xf0\\x92(?:\\xbe[\\x90-\\xbf]|\\xbf[\\x80-\\xb0])|\\xf0\\x93(?:[\\x80-\\x8f][\\x80-\\xbf]|\\x90[\\x80-\\xaf])|\\xf0\\x93\\x91[\\x81-\\x86]|\\xf0\\x94(?:[\\x90-\\x98][\\x80-\\xbf]|\\x99[\\x80-\\x86])|\\xf0\\x96(?:[\\xa0-\\xa7][\\x80-\\xbf]|\\xa8[\\x80-\\xb8])|\\xf0\\x96\\xa9[\\x80-\\x9e]|\\xf0\\x96(?:\\xa9[\\xb0-\\xbf]|\\xaa[\\x80-\\xbe])|\\xf0\\x96\\xab[\\x90-\\xad]|\\xf0\\x96\\xac[\\x80-\\xaf]|\\xf0\\x96\\xad[\\x80-\\x83]|\\xf0\\x96\\xad[\\xa3-\\xb7]|\\xf0\\x96(?:\\xad[\\xbd-\\xbf]|\\xae[\\x80-\\x8f])|\\xf0\\x96\\xb9[\\x80-\\xbf]|\\xf0\\x96(?:\\xbc[\\x80-\\xbf]|\\xbd[\\x80-\\x8a])|\\xf0\\x96\\xbd\\x90|\\xf0\\x96\\xbe[\\x93-\\x9f]|\\xf0\\x96\\xbf[\\xa0\\xa1]|\\xf0\\x96\\xbf\\xa3|\\xf0(?:\\x97[\\x80-\\xbf][\\x80-\\xbf]|\\x98(?:[\\x80-\\x9e][\\x80-\\xbf]|\\x9f[\\x80-\\xb7]))|\\xf0\\x98(?:[\\xa0-\\xb2][\\x80-\\xbf]|\\xb3[\\x80-\\x95])|\\xf0\\x98\\xb4[\\x80-\\x88]|\\xf0\\x9a\\xbf[\\xb0-\\xb3]|\\xf0\\x9a\\xbf[\\xb5-\\xbb]|\\xf0\\x9a\\xbf[\\xbd\\xbe]|\\xf0\\x9b(?:[\\x80-\\x83][\\x80-\\xbf]|\\x84[\\x80-\\xa2])|\\xf0\\x9b\\x84\\xb2|\\xf0\\x9b\\x85[\\x90-\\x92]|\\xf0\\x9b\\x85\\x95|\\xf0\\x9b\\x85[\\xa4-\\xa7]|\\xf0\\x9b(?:\\x85[\\xb0-\\xbf]|[\\x86-\\x8a][\\x80-\\xbf]|\\x8b[\\x80-\\xbb])|\\xf0\\x9b(?:\\xb0[\\x80-\\xbf]|\\xb1[\\x80-\\xaa])|\\xf0\\x9b\\xb1[\\xb0-\\xbc]|\\xf0\\x9b\\xb2[\\x80-\\x88]|\\xf0\\x9b\\xb2[\\x90-\\x99]|\\xf0\\x9d(?:\\x90[\\x80-\\xbf]|\\x91[\\x80-\\x94])|\\xf0\\x9d(?:\\x91[\\x96-\\xbf]|\\x92[\\x80-\\x9c])|\\xf0\\x9d\\x92[\\x9e\\x9f]|\\xf0\\x9d\\x92\\xa2|\\xf0\\x9d\\x92[\\xa5\\xa6]|\\xf0\\x9d\\x92[\\xa9-\\xac]|\\xf0\\x9d\\x92[\\xae-\\xb9]|\\xf0\\x9d\\x92\\xbb|\\xf0\\x9d(?:\\x92[\\xbd-\\xbf]|\\x93[\\x80-\\x83])|\\xf0\\x9d(?:\\x93[\\x85-\\xbf]|\\x94[\\x80-\\x85])|\\xf0\\x9d\\x94[\\x87-\\x8a]|\\xf0\\x9d\\x94[\\x8d-\\x94]|\\xf0\\x9d\\x94[\\x96-\\x9c]|\\xf0\\x9d\\x94[\\x9e-\\xb9]|\\xf0\\x9d\\x94[\\xbb-\\xbe]|\\xf0\\x9d\\x95[\\x80-\\x84]|\\xf0\\x9d\\x95\\x86|\\xf0\\x9d\\x95[\\x8a-\\x90]|\\xf0\\x9d(?:\\x95[\\x92-\\xbf]|[\\x96-\\x99][\\x80-\\xbf]|\\x9a[\\x80-\\xa5])|\\xf0\\x9d(?:\\x9a[\\xa8-\\xbf]|\\x9b\\x80)|\\xf0\\x9d\\x9b[\\x82-\\x9a]|\\xf0\\x9d\\x9b[\\x9c-\\xba]|\\xf0\\x9d(?:\\x9b[\\xbc-\\xbf]|\\x9c[\\x80-\\x94])|\\xf0\\x9d\\x9c[\\x96-\\xb4]|\\xf0\\x9d(?:\\x9c[\\xb6-\\xbf]|\\x9d[\\x80-\\x8e])|\\xf0\\x9d\\x9d[\\x90-\\xae]|\\xf0\\x9d(?:\\x9d[\\xb0-\\xbf]|\\x9e[\\x80-\\x88])|\\xf0\\x9d\\x9e[\\x8a-\\xa8]|\\xf0\\x9d(?:\\x9e[\\xaa-\\xbf]|\\x9f[\\x80-\\x82])|\\xf0\\x9d\\x9f[\\x84-\\x8b]|\\xf0\\x9d\\xbc[\\x80-\\x9e]|\\xf0\\x9d\\xbc[\\xa5-\\xaa]|\\xf0\\x9e(?:\\x80[\\xb0-\\xbf]|\\x81[\\x80-\\xad])|\\xf0\\x9e\\x84[\\x80-\\xac]|\\xf0\\x9e\\x84[\\xb7-\\xbd]|\\xf0\\x9e\\x85\\x8e|\\xf0\\x9e\\x8a[\\x90-\\xad]|\\xf0\\x9e\\x8b[\\x80-\\xab]|\\xf0\\x9e\\x93[\\x90-\\xab]|\\xf0\\x9e\\x9f[\\xa0-\\xa6]|\\xf0\\x9e\\x9f[\\xa8-\\xab]|\\xf0\\x9e\\x9f[\\xad\\xae]|\\xf0\\x9e\\x9f[\\xb0-\\xbe]|\\xf0\\x9e(?:[\\xa0-\\xa2][\\x80-\\xbf]|\\xa3[\\x80-\\x84])|\\xf0\\x9e(?:\\xa4[\\x80-\\xbf]|\\xa5[\\x80-\\x83])|\\xf0\\x9e\\xa5\\x8b|\\xf0\\x9e\\xb8[\\x80-\\x83]|\\xf0\\x9e\\xb8[\\x85-\\x9f]|\\xf0\\x9e\\xb8[\\xa1\\xa2]|\\xf0\\x9e\\xb8\\xa4|\\xf0\\x9e\\xb8\\xa7|\\xf0\\x9e\\xb8[\\xa9-\\xb2]|\\xf0\\x9e\\xb8[\\xb4-\\xb7]|\\xf0\\x9e\\xb8\\xb9|\\xf0\\x9e\\xb8\\xbb|\\xf0\\x9e\\xb9\\x82|\\xf0\\x9e\\xb9\\x87|\\xf0\\x9e\\xb9\\x89|\\xf0\\x9e\\xb9\\x8b|\\xf0\\x9e\\xb9[\\x8d-\\x8f]|\\xf0\\x9e\\xb9[\\x91\\x92]|\\xf0\\x9e\\xb9\\x94|\\xf0\\x9e\\xb9\\x97|\\xf0\\x9e\\xb9\\x99|\\xf0\\x9e\\xb9\\x9b|\\xf0\\x9e\\xb9\\x9d|\\xf0\\x9e\\xb9\\x9f|\\xf0\\x9e\\xb9[\\xa1\\xa2]|\\xf0\\x9e\\xb9\\xa4|\\xf0\\x9e\\xb9[\\xa7-\\xaa]|\\xf0\\x9e\\xb9[\\xac-\\xb2]|\\xf0\\x9e\\xb9[\\xb4-\\xb7]|\\xf0\\x9e\\xb9[\\xb9-\\xbc]|\\xf0\\x9e\\xb9\\xbe|\\xf0\\x9e\\xba[\\x80-\\x89]|\\xf0\\x9e\\xba[\\x8b-\\x9b]|\\xf0\\x9e\\xba[\\xa1-\\xa3]|\\xf0\\x9e\\xba[\\xa5-\\xa9]|\\xf0\\x9e\\xba[\\xab-\\xbb]|\\xf0(?:[\\xa0-\\xa9][\\x80-\\xbf][\\x80-\\xbf]|\\xaa(?:[\\x80-\\x9a][\\x80-\\xbf]|\\x9b[\\x80-\\x9f]))|\\xf0(?:\\xaa[\\x9c-\\xbf][\\x80-\\xbf]|\\xab(?:[\\x80-\\x9b][\\x80-\\xbf]|\\x9c[\\x80-\\xb9]))|\\xf0\\xab(?:[\\x9d-\\x9f][\\x80-\\xbf]|\\xa0[\\x80-\\x9d])|\\xf0(?:\\xab(?:[\\xa1-\\xbf][\\x80-\\xbf]|\\xa0[\\xa0-\\xbf])|\\xac(?:[\\x80-\\xb9][\\x80-\\xbf]|\\xba[\\x80-\\xa1]))|\\xf0(?:\\xac(?:[\\xbb-\\xbf][\\x80-\\xbf]|\\xba[\\xb0-\\xbf])|\\xad[\\x80-\\xbf][\\x80-\\xbf]|\\xae(?:[\\x80-\\xae][\\x80-\\xbf]|\\xaf[\\x80-\\xa0]))|\\xf0\\xae(?:\\xaf[\\xb0-\\xbf]|[\\xb0-\\xb8][\\x80-\\xbf]|\\xb9[\\x80-\\x9d])|\\xf0\\xaf(?:[\\xa0-\\xa7][\\x80-\\xbf]|\\xa8[\\x80-\\x9d])|\\xf0(?:\\xb0[\\x80-\\xbf][\\x80-\\xbf]|\\xb1(?:[\\x80-\\x8c][\\x80-\\xbf]|\\x8d[\\x80-\\x8a]))|\\xf0(?:\\xb1(?:[\\x8e-\\xbf][\\x80-\\xbf]|\\x8d[\\x90-\\xbf])|\\xb2(?:[\\x80-\\x8d][\\x80-\\xbf]|\\x8e[\\x80-\\xaf])))+| ?(?:[0-9]|\\xc2[\\xb2\\xb3]|\\xc2\\xb9|\\xc2[\\xbc-\\xbe]|\\xd9[\\xa0-\\xa9]|\\xdb[\\xb0-\\xb9]|\\xdf[\\x80-\\x89]|\\xe0\\xa5[\\xa6-\\xaf]|\\xe0\\xa7[\\xa6-\\xaf]|\\xe0\\xa7[\\xb4-\\xb9]|\\xe0\\xa9[\\xa6-\\xaf]|\\xe0\\xab[\\xa6-\\xaf]|\\xe0\\xad[\\xa6-\\xaf]|\\xe0\\xad[\\xb2-\\xb7]|\\xe0\\xaf[\\xa6-\\xb2]|\\xe0\\xb1[\\xa6-\\xaf]|\\xe0\\xb1[\\xb8-\\xbe]|\\xe0\\xb3[\\xa6-\\xaf]|\\xe0\\xb5[\\x98-\\x9e]|\\xe0\\xb5[\\xa6-\\xb8]|\\xe0\\xb7[\\xa6-\\xaf]|\\xe0\\xb9[\\x90-\\x99]|\\xe0\\xbb[\\x90-\\x99]|\\xe0\\xbc[\\xa0-\\xb3]|\\xe1\\x81[\\x80-\\x89]|\\xe1\\x82[\\x90-\\x99]|\\xe1\\x8d[\\xa9-\\xbc]|\\xe1\\x9b[\\xae-\\xb0]|\\xe1\\x9f[\\xa0-\\xa9]|\\xe1\\x9f[\\xb0-\\xb9]|\\xe1\\xa0[\\x90-\\x99]|\\xe1\\xa5[\\x86-\\x8f]|\\xe1\\xa7[\\x90-\\x9a]|\\xe1\\xaa[\\x80-\\x89]|\\xe1\\xaa[\\x90-\\x99]|\\xe1\\xad[\\x90-\\x99]|\\xe1\\xae[\\xb0-\\xb9]|\\xe1\\xb1[\\x80-\\x89]|\\xe1\\xb1[\\x90-\\x99]|\\xe2\\x81\\xb0|\\xe2\\x81[\\xb4-\\xb9]|\\xe2\\x82[\\x80-\\x89]|\\xe2(?:\\x85[\\x90-\\xbf]|\\x86[\\x80-\\x82])|\\xe2\\x86[\\x85-\\x89]|\\xe2(?:\\x91[\\xa0-\\xbf]|\\x92[\\x80-\\x9b])|\\xe2\\x93[\\xaa-\\xbf]|\\xe2(?:\\x9d[\\xb6-\\xbf]|\\x9e[\\x80-\\x93])|\\xe2\\xb3\\xbd|\\xe3\\x80\\x87|\\xe3\\x80[\\xa1-\\xa9]|\\xe3\\x80[\\xb8-\\xba]|\\xe3\\x86[\\x92-\\x95]|\\xe3\\x88[\\xa0-\\xa9]|\\xe3\\x89[\\x88-\\x8f]|\\xe3\\x89[\\x91-\\x9f]|\\xe3\\x8a[\\x80-\\x89]|\\xe3\\x8a[\\xb1-\\xbf]|\\xea\\x98[\\xa0-\\xa9]|\\xea\\x9b[\\xa6-\\xaf]|\\xea\\xa0[\\xb0-\\xb5]|\\xea\\xa3[\\x90-\\x99]|\\xea\\xa4[\\x80-\\x89]|\\xea\\xa7[\\x90-\\x99]|\\xea\\xa7[\\xb0-\\xb9]|\\xea\\xa9[\\x90-\\x99]|\\xea\\xaf[\\xb0-\\xb9]|\\xef\\xbc[\\x90-\\x99]|\\xf0\\x90\\x84[\\x87-\\xb3]|\\xf0\\x90\\x85[\\x80-\\xb8]|\\xf0\\x90\\x86[\\x8a\\x8b]|\\xf0\\x90\\x8b[\\xa1-\\xbb]|\\xf0\\x90\\x8c[\\xa0-\\xa3]|\\xf0\\x90\\x8d\\x81|\\xf0\\x90\\x8d\\x8a|\\xf0\\x90\\x8f[\\x91-\\x95]|\\xf0\\x90\\x92[\\xa0-\\xa9]|\\xf0\\x90\\xa1[\\x98-\\x9f]|\\xf0\\x90\\xa1[\\xb9-\\xbf]|\\xf0\\x90\\xa2[\\xa7-\\xaf]|\\xf0\\x90\\xa3[\\xbb-\\xbf]|\\xf0\\x90\\xa4[\\x96-\\x9b]|\\xf0\\x90\\xa6[\\xbc\\xbd]|\\xf0\\x90\\xa7[\\x80-\\x8f]|\\xf0\\x90\\xa7[\\x92-\\xbf]|\\xf0\\x90\\xa9[\\x80-\\x88]|\\xf0\\x90\\xa9[\\xbd\\xbe]|\\xf0\\x90\\xaa[\\x9d-\\x9f]|\\xf0\\x90\\xab[\\xab-\\xaf]|\\xf0\\x90\\xad[\\x98-\\x9f]|\\xf0\\x90\\xad[\\xb8-\\xbf]|\\xf0\\x90\\xae[\\xa9-\\xaf]|\\xf0\\x90\\xb3[\\xba-\\xbf]|\\xf0\\x90\\xb4[\\xb0-\\xb9]|\\xf0\\x90\\xb9[\\xa0-\\xbe]|\\xf0\\x90\\xbc[\\x9d-\\xa6]|\\xf0\\x90\\xbd[\\x91-\\x94]|\\xf0\\x90\\xbf[\\x85-\\x8b]|\\xf0\\x91\\x81[\\x92-\\xaf]|\\xf0\\x91\\x83[\\xb0-\\xb9]|\\xf0\\x91\\x84[\\xb6-\\xbf]|\\xf0\\x91\\x87[\\x90-\\x99]|\\xf0\\x91\\x87[\\xa1-\\xb4]|\\xf0\\x91\\x8b[\\xb0-\\xb9]|\\xf0\\x91\\x91[\\x90-\\x99]|\\xf0\\x91\\x93[\\x90-\\x99]|\\xf0\\x91\\x99[\\x90-\\x99]|\\xf0\\x91\\x9b[\\x80-\\x89]|\\xf0\\x91\\x9c[\\xb0-\\xbb]|\\xf0\\x91\\xa3[\\xa0-\\xb2]|\\xf0\\x91\\xa5[\\x90-\\x99]|\\xf0\\x91\\xb1[\\x90-\\xac]|\\xf0\\x91\\xb5[\\x90-\\x99]|\\xf0\\x91\\xb6[\\xa0-\\xa9]|\\xf0\\x91\\xbd[\\x90-\\x99]|\\xf0\\x91\\xbf[\\x80-\\x94]|\\xf0\\x92(?:\\x90[\\x80-\\xbf]|\\x91[\\x80-\\xae])|\\xf0\\x96\\xa9[\\xa0-\\xa9]|\\xf0\\x96\\xab[\\x80-\\x89]|\\xf0\\x96\\xad[\\x90-\\x99]|\\xf0\\x96\\xad[\\x9b-\\xa1]|\\xf0\\x96\\xba[\\x80-\\x96]|\\xf0\\x9d\\x8b[\\x80-\\x93]|\\xf0\\x9d\\x8b[\\xa0-\\xb3]|\\xf0\\x9d\\x8d[\\xa0-\\xb8]|\\xf0\\x9d\\x9f[\\x8e-\\xbf]|\\xf0\\x9e\\x85[\\x80-\\x89]|\\xf0\\x9e\\x8b[\\xb0-\\xb9]|\\xf0\\x9e\\x93[\\xb0-\\xb9]|\\xf0\\x9e\\xa3[\\x87-\\x8f]|\\xf0\\x9e\\xa5[\\x90-\\x99]|\\xf0\\x9e(?:\\xb1[\\xb1-\\xbf]|\\xb2[\\x80-\\xab])|\\xf0\\x9e\\xb2[\\xad-\\xaf]|\\xf0\\x9e\\xb2[\\xb1-\\xb4]|\\xf0\\x9e\\xb4[\\x81-\\xad]|\\xf0\\x9e\\xb4[\\xaf-\\xbd]|\\xf0\\x9f\\x84[\\x80-\\x8c]|\\xf0\\x9f\\xaf[\\xb0-\\xb9])+| ?(?:[\\x00-\\x08]|[\\x0e-\\x1f]|[!-/]|[:-@]|[\\x5b-`]|[{-\\x7f]|\\xc2[\\x80-\\x9f]|\\xc2[\\xa1-\\xa9]|\\xc2[\\xab-\\xb1]|\\xc2\\xb4|\\xc2[\\xb6-\\xb8]|\\xc2\\xbb|\\xc2\\xbf|\\xc3\\x97|\\xc3\\xb7|\\xcb[\\x82-\\x85]|\\xcb[\\x92-\\x9f]|\\xcb[\\xa5-\\xab]|\\xcb\\xad|\\xcb[\\xaf-\\xbf]|\\xcc[\\x80-\\xbf]|\\xcd[\\x80-\\xaf]|\\xcd\\xb5|\\xcd[\\xb8\\xb9]|\\xcd\\xbe|\\xce[\\x80-\\x85]|\\xce\\x87|\\xce\\x8b|\\xce\\x8d|\\xce\\xa2|\\xcf\\xb6|\\xd2[\\x82-\\x89]|\\xd4\\xb0|\\xd5[\\x97\\x98]|\\xd5[\\x9a-\\x9f]|\\xd6[\\x89-\\xbf]|\\xd7[\\x80-\\x8f]|\\xd7[\\xab-\\xae]|\\xd7[\\xb3-\\xbf]|\\xd8[\\x80-\\x9f]|\\xd9[\\x8b-\\x9f]|\\xd9[\\xaa-\\xad]|\\xd9\\xb0|\\xdb\\x94|\\xdb[\\x96-\\xa4]|\\xdb[\\xa7-\\xad]|\\xdb[\\xbd\\xbe]|\\xdc[\\x80-\\x8f]|\\xdc\\x91|\\xdc[\\xb0-\\xbf]|\\xdd[\\x80-\\x8c]|\\xde[\\xa6-\\xb0]|\\xde[\\xb2-\\xbf]|\\xdf[\\xab-\\xb3]|\\xdf[\\xb6-\\xb9]|\\xdf[\\xbb-\\xbf]|\\xe0\\xa0[\\x96-\\x99]|\\xe0\\xa0[\\x9b-\\xa3]|\\xe0\\xa0[\\xa5-\\xa7]|\\xe0\\xa0[\\xa9-\\xbf]|\\xe0\\xa1[\\x99-\\x9f]|\\xe0\\xa1[\\xab-\\xaf]|\\xe0\\xa2\\x88|\\xe0\\xa2[\\x8f-\\x9f]|\\xe0(?:\\xa3[\\x8a-\\xbf]|\\xa4[\\x80-\\x83])|\\xe0\\xa4[\\xba-\\xbc]|\\xe0(?:\\xa4[\\xbe\\xbf]|\\xa5[\\x80-\\x8f])|\\xe0\\xa5[\\x91-\\x97]|\\xe0\\xa5[\\xa2-\\xa5]|\\xe0\\xa5\\xb0|\\xe0\\xa6[\\x81-\\x84]|\\xe0\\xa6[\\x8d\\x8e]|\\xe0\\xa6[\\x91\\x92]|\\xe0\\xa6\\xa9|\\xe0\\xa6\\xb1|\\xe0\\xa6[\\xb3-\\xb5]|\\xe0\\xa6[\\xba-\\xbc]|\\xe0(?:\\xa6[\\xbe\\xbf]|\\xa7[\\x80-\\x8d])|\\xe0\\xa7[\\x8f-\\x9b]|\\xe0\\xa7\\x9e|\\xe0\\xa7[\\xa2-\\xa5]|\\xe0\\xa7[\\xb2\\xb3]|\\xe0\\xa7[\\xba\\xbb]|\\xe0(?:\\xa7[\\xbd-\\xbf]|\\xa8[\\x80-\\x84])|\\xe0\\xa8[\\x8b-\\x8e]|\\xe0\\xa8[\\x91\\x92]|\\xe0\\xa8\\xa9|\\xe0\\xa8\\xb1|\\xe0\\xa8\\xb4|\\xe0\\xa8\\xb7|\\xe0(?:\\xa8[\\xba-\\xbf]|\\xa9[\\x80-\\x98])|\\xe0\\xa9\\x9d|\\xe0\\xa9[\\x9f-\\xa5]|\\xe0\\xa9[\\xb0\\xb1]|\\xe0(?:\\xa9[\\xb5-\\xbf]|\\xaa[\\x80-\\x84])|\\xe0\\xaa\\x8e|\\xe0\\xaa\\x92|\\xe0\\xaa\\xa9|\\xe0\\xaa\\xb1|\\xe0\\xaa\\xb4|\\xe0\\xaa[\\xba-\\xbc]|\\xe0(?:\\xaa[\\xbe\\xbf]|\\xab[\\x80-\\x8f])|\\xe0\\xab[\\x91-\\x9f]|\\xe0\\xab[\\xa2-\\xa5]|\\xe0\\xab[\\xb0-\\xb8]|\\xe0(?:\\xab[\\xba-\\xbf]|\\xac[\\x80-\\x84])|\\xe0\\xac[\\x8d\\x8e]|\\xe0\\xac[\\x91\\x92]|\\xe0\\xac\\xa9|\\xe0\\xac\\xb1|\\xe0\\xac\\xb4|\\xe0\\xac[\\xba-\\xbc]|\\xe0(?:\\xac[\\xbe\\xbf]|\\xad[\\x80-\\x9b])|\\xe0\\xad\\x9e|\\xe0\\xad[\\xa2-\\xa5]|\\xe0\\xad\\xb0|\\xe0(?:\\xad[\\xb8-\\xbf]|\\xae[\\x80-\\x82])|\\xe0\\xae\\x84|\\xe0\\xae[\\x8b-\\x8d]|\\xe0\\xae\\x91|\\xe0\\xae[\\x96-\\x98]|\\xe0\\xae\\x9b|\\xe0\\xae\\x9d|\\xe0\\xae[\\xa0-\\xa2]|\\xe0\\xae[\\xa5-\\xa7]|\\xe0\\xae[\\xab-\\xad]|\\xe0(?:\\xae[\\xba-\\xbf]|\\xaf[\\x80-\\x8f])|\\xe0\\xaf[\\x91-\\xa5]|\\xe0(?:\\xaf[\\xb3-\\xbf]|\\xb0[\\x80-\\x84])|\\xe0\\xb0\\x8d|\\xe0\\xb0\\x91|\\xe0\\xb0\\xa9|\\xe0\\xb0[\\xba-\\xbc]|\\xe0(?:\\xb0[\\xbe\\xbf]|\\xb1[\\x80-\\x97])|\\xe0\\xb1[\\x9b\\x9c]|\\xe0\\xb1[\\x9e\\x9f]|\\xe0\\xb1[\\xa2-\\xa5]|\\xe0\\xb1[\\xb0-\\xb7]|\\xe0\\xb1\\xbf|\\xe0\\xb2[\\x81-\\x84]|\\xe0\\xb2\\x8d|\\xe0\\xb2\\x91|\\xe0\\xb2\\xa9|\\xe0\\xb2\\xb4|\\xe0\\xb2[\\xba-\\xbc]|\\xe0(?:\\xb2[\\xbe\\xbf]|\\xb3[\\x80-\\x9c])|\\xe0\\xb3\\x9f|\\xe0\\xb3[\\xa2-\\xa5]|\\xe0\\xb3\\xb0|\\xe0(?:\\xb3[\\xb3-\\xbf]|\\xb4[\\x80-\\x83])|\\xe0\\xb4\\x8d|\\xe0\\xb4\\x91|\\xe0\\xb4[\\xbb\\xbc]|\\xe0(?:\\xb4[\\xbe\\xbf]|\\xb5[\\x80-\\x8d])|\\xe0\\xb5[\\x8f-\\x93]|\\xe0\\xb5\\x97|\\xe0\\xb5[\\xa2-\\xa5]|\\xe0\\xb5\\xb9|\\xe0\\xb6[\\x80-\\x84]|\\xe0\\xb6[\\x97-\\x99]|\\xe0\\xb6\\xb2|\\xe0\\xb6\\xbc|\\xe0\\xb6[\\xbe\\xbf]|\\xe0\\xb7[\\x87-\\xa5]|\\xe0(?:\\xb7[\\xb0-\\xbf]|\\xb8\\x80)|\\xe0\\xb8\\xb1|\\xe0\\xb8[\\xb4-\\xbf]|\\xe0\\xb9[\\x87-\\x8f]|\\xe0(?:\\xb9[\\x9a-\\xbf]|\\xba\\x80)|\\xe0\\xba\\x83|\\xe0\\xba\\x85|\\xe0\\xba\\x8b|\\xe0\\xba\\xa4|\\xe0\\xba\\xa6|\\xe0\\xba\\xb1|\\xe0\\xba[\\xb4-\\xbc]|\\xe0\\xba[\\xbe\\xbf]|\\xe0\\xbb\\x85|\\xe0\\xbb[\\x87-\\x8f]|\\xe0\\xbb[\\x9a\\x9b]|\\xe0\\xbb[\\xa0-\\xbf]|\\xe0\\xbc[\\x81-\\x9f]|\\xe0\\xbc[\\xb4-\\xbf]|\\xe0\\xbd\\x88|\\xe0(?:\\xbd[\\xad-\\xbf]|\\xbe[\\x80-\\x87])|\\xe0(?:\\xbe[\\x8d-\\xbf]|\\xbf[\\x80-\\xbf])|\\xe1\\x80[\\xab-\\xbe]|\\xe1\\x81[\\x8a-\\x8f]|\\xe1\\x81[\\x96-\\x99]|\\xe1\\x81[\\x9e-\\xa0]|\\xe1\\x81[\\xa2-\\xa4]|\\xe1\\x81[\\xa7-\\xad]|\\xe1\\x81[\\xb1-\\xb4]|\\xe1\\x82[\\x82-\\x8d]|\\xe1\\x82\\x8f|\\xe1\\x82[\\x9a-\\x9f]|\\xe1\\x83\\x86|\\xe1\\x83[\\x88-\\x8c]|\\xe1\\x83[\\x8e\\x8f]|\\xe1\\x83\\xbb|\\xe1\\x89\\x89|\\xe1\\x89[\\x8e\\x8f]|\\xe1\\x89\\x97|\\xe1\\x89\\x99|\\xe1\\x89[\\x9e\\x9f]|\\xe1\\x8a\\x89|\\xe1\\x8a[\\x8e\\x8f]|\\xe1\\x8a\\xb1|\\xe1\\x8a[\\xb6\\xb7]|\\xe1\\x8a\\xbf|\\xe1\\x8b\\x81|\\xe1\\x8b[\\x86\\x87]|\\xe1\\x8b\\x97|\\xe1\\x8c\\x91|\\xe1\\x8c[\\x96\\x97]|\\xe1\\x8d[\\x9b-\\xa8]|\\xe1\\x8d[\\xbd-\\xbf]|\\xe1\\x8e[\\x90-\\x9f]|\\xe1\\x8f[\\xb6\\xb7]|\\xe1(?:\\x8f[\\xbe\\xbf]|\\x90\\x80)|\\xe1\\x99[\\xad\\xae]|\\xe1\\x9a[\\x9b-\\x9f]|\\xe1\\x9b[\\xab-\\xad]|\\xe1\\x9b[\\xb9-\\xbf]|\\xe1\\x9c[\\x92-\\x9e]|\\xe1\\x9c[\\xb2-\\xbf]|\\xe1\\x9d[\\x92-\\x9f]|\\xe1\\x9d\\xad|\\xe1\\x9d[\\xb1-\\xbf]|\\xe1(?:\\x9e[\\xb4-\\xbf]|\\x9f[\\x80-\\x96])|\\xe1\\x9f[\\x98-\\x9b]|\\xe1\\x9f[\\x9d-\\x9f]|\\xe1\\x9f[\\xaa-\\xaf]|\\xe1(?:\\x9f[\\xba-\\xbf]|\\xa0[\\x80-\\x8f])|\\xe1\\xa0[\\x9a-\\x9f]|\\xe1\\xa1[\\xb9-\\xbf]|\\xe1\\xa2[\\x85\\x86]|\\xe1\\xa2\\xa9|\\xe1\\xa2[\\xab-\\xaf]|\\xe1\\xa3[\\xb6-\\xbf]|\\xe1(?:\\xa4[\\x9f-\\xbf]|\\xa5[\\x80-\\x85])|\\xe1\\xa5[\\xae\\xaf]|\\xe1\\xa5[\\xb5-\\xbf]|\\xe1\\xa6[\\xac-\\xaf]|\\xe1\\xa7[\\x8a-\\x8f]|\\xe1\\xa7[\\x9b-\\xbf]|\\xe1\\xa8[\\x97-\\x9f]|\\xe1\\xa9[\\x95-\\xbf]|\\xe1\\xaa[\\x8a-\\x8f]|\\xe1\\xaa[\\x9a-\\xa6]|\\xe1(?:\\xaa[\\xa8-\\xbf]|\\xab[\\x80-\\xbf]|\\xac[\\x80-\\x84])|\\xe1(?:\\xac[\\xb4-\\xbf]|\\xad[\\x80-\\x84])|\\xe1\\xad[\\x8d-\\x8f]|\\xe1(?:\\xad[\\x9a-\\xbf]|\\xae[\\x80-\\x82])|\\xe1\\xae[\\xa1-\\xad]|\\xe1\\xaf[\\xa6-\\xbf]|\\xe1\\xb0[\\xa4-\\xbf]|\\xe1\\xb1[\\x8a-\\x8c]|\\xe1\\xb1[\\xbe\\xbf]|\\xe1\\xb2[\\x89-\\x8f]|\\xe1\\xb2[\\xbb\\xbc]|\\xe1\\xb3[\\x80-\\xa8]|\\xe1\\xb3\\xad|\\xe1\\xb3\\xb4|\\xe1\\xb3[\\xb7-\\xb9]|\\xe1\\xb3[\\xbb-\\xbf]|\\xe1\\xb7[\\x80-\\xbf]|\\xe1\\xbc[\\x96\\x97]|\\xe1\\xbc[\\x9e\\x9f]|\\xe1\\xbd[\\x86\\x87]|\\xe1\\xbd[\\x8e\\x8f]|\\xe1\\xbd\\x98|\\xe1\\xbd\\x9a|\\xe1\\xbd\\x9c|\\xe1\\xbd\\x9e|\\xe1\\xbd[\\xbe\\xbf]|\\xe1\\xbe\\xb5|\\xe1\\xbe\\xbd|\\xe1(?:\\xbe\\xbf|\\xbf[\\x80\\x81])|\\xe1\\xbf\\x85|\\xe1\\xbf[\\x8d-\\x8f]|\\xe1\\xbf[\\x94\\x95]|\\xe1\\xbf[\\x9c-\\x9f]|\\xe1\\xbf[\\xad-\\xb1]|\\xe1\\xbf\\xb5|\\xe1\\xbf[\\xbd-\\xbf]|\\xe2\\x80[\\x8b-\\xae]|\\xe2(?:\\x80[\\xb0-\\xbf]|\\x81[\\x80-\\x9e])|\\xe2\\x81[\\xa0-\\xaf]|\\xe2\\x81[\\xb2\\xb3]|\\xe2\\x81[\\xba-\\xbe]|\\xe2\\x82[\\x8a-\\x8f]|\\xe2(?:\\x82[\\x9d-\\xbf]|\\x83[\\x80-\\xbf]|\\x84[\\x80\\x81])|\\xe2\\x84[\\x83-\\x86]|\\xe2\\x84[\\x88\\x89]|\\xe2\\x84\\x94|\\xe2\\x84[\\x96-\\x98]|\\xe2\\x84[\\x9e-\\xa3]|\\xe2\\x84\\xa5|\\xe2\\x84\\xa7|\\xe2\\x84\\xa9|\\xe2\\x84\\xae|\\xe2\\x84[\\xba\\xbb]|\\xe2\\x85[\\x80-\\x84]|\\xe2\\x85[\\x8a-\\x8d]|\\xe2\\x85\\x8f|\\xe2(?:\\x86[\\x8a-\\xbf]|[\\x87-\\x90][\\x80-\\xbf]|\\x91[\\x80-\\x9f])|\\xe2(?:\\x92[\\x9c-\\xbf]|\\x93[\\x80-\\xa9])|\\xe2(?:[\\x94-\\x9c][\\x80-\\xbf]|\\x9d[\\x80-\\xb5])|\\xe2(?:\\x9e[\\x94-\\xbf]|[\\x9f-\\xaf][\\x80-\\xbf])|\\xe2\\xb3[\\xa5-\\xaa]|\\xe2\\xb3[\\xaf-\\xb1]|\\xe2\\xb3[\\xb4-\\xbc]|\\xe2\\xb3[\\xbe\\xbf]|\\xe2\\xb4\\xa6|\\xe2\\xb4[\\xa8-\\xac]|\\xe2\\xb4[\\xae\\xaf]|\\xe2\\xb5[\\xa8-\\xae]|\\xe2\\xb5[\\xb0-\\xbf]|\\xe2\\xb6[\\x97-\\x9f]|\\xe2\\xb6\\xa7|\\xe2\\xb6\\xaf|\\xe2\\xb6\\xb7|\\xe2\\xb6\\xbf|\\xe2\\xb7\\x87|\\xe2\\xb7\\x8f|\\xe2\\xb7\\x97|\\xe2(?:\\xb7[\\x9f-\\xbf]|\\xb8[\\x80-\\xae])|\\xe2(?:\\xb8[\\xb0-\\xbf]|[\\xb9-\\xbf][\\x80-\\xbf])|\\xe3\\x80[\\x81-\\x84]|\\xe3\\x80[\\x88-\\xa0]|\\xe3\\x80[\\xaa-\\xb0]|\\xe3\\x80[\\xb6\\xb7]|\\xe3(?:\\x80[\\xbd-\\xbf]|\\x81\\x80)|\\xe3\\x82[\\x97-\\x9c]|\\xe3\\x82\\xa0|\\xe3\\x83\\xbb|\\xe3\\x84[\\x80-\\x84]|\\xe3\\x84\\xb0|\\xe3\\x86[\\x8f-\\x91]|\\xe3\\x86[\\x96-\\x9f]|\\xe3\\x87[\\x80-\\xaf]|\\xe3\\x88[\\x80-\\x9f]|\\xe3(?:\\x88[\\xaa-\\xbf]|\\x89[\\x80-\\x87])|\\xe3\\x89\\x90|\\xe3\\x89[\\xa0-\\xbf]|\\xe3\\x8a[\\x8a-\\xb0]|\\xe3(?:[\\x8b-\\x8f][\\x80-\\xbf])|\\xe4\\xb7[\\x80-\\xbf]|\\xea(?:\\x92[\\x8d-\\xbf]|\\x93[\\x80-\\x8f])|\\xea\\x93[\\xbe\\xbf]|\\xea\\x98[\\x8d-\\x8f]|\\xea\\x98[\\xac-\\xbf]|\\xea\\x99[\\xaf-\\xbe]|\\xea\\x9a[\\x9e\\x9f]|\\xea(?:\\x9b[\\xb0-\\xbf]|\\x9c[\\x80-\\x96])|\\xea\\x9c[\\xa0\\xa1]|\\xea\\x9e[\\x89\\x8a]|\\xea\\x9f[\\x8b-\\x8f]|\\xea\\x9f\\x92|\\xea\\x9f\\x94|\\xea\\x9f[\\x9a-\\xb1]|\\xea\\xa0\\x82|\\xea\\xa0\\x86|\\xea\\xa0\\x8b|\\xea\\xa0[\\xa3-\\xaf]|\\xea\\xa0[\\xb6-\\xbf]|\\xea(?:\\xa1[\\xb4-\\xbf]|\\xa2[\\x80\\x81])|\\xea(?:\\xa2[\\xb4-\\xbf]|\\xa3[\\x80-\\x8f])|\\xea\\xa3[\\x9a-\\xb1]|\\xea\\xa3[\\xb8-\\xba]|\\xea\\xa3\\xbc|\\xea\\xa3\\xbf|\\xea\\xa4[\\xa6-\\xaf]|\\xea\\xa5[\\x87-\\x9f]|\\xea(?:\\xa5[\\xbd-\\xbf]|\\xa6[\\x80-\\x83])|\\xea(?:\\xa6[\\xb3-\\xbf]|\\xa7[\\x80-\\x8e])|\\xea\\xa7[\\x9a-\\x9f]|\\xea\\xa7\\xa5|\\xea\\xa7\\xbf|\\xea\\xa8[\\xa9-\\xbf]|\\xea\\xa9\\x83|\\xea\\xa9[\\x8c-\\x8f]|\\xea\\xa9[\\x9a-\\x9f]|\\xea\\xa9[\\xb7-\\xb9]|\\xea\\xa9[\\xbb-\\xbd]|\\xea\\xaa\\xb0|\\xea\\xaa[\\xb2-\\xb4]|\\xea\\xaa[\\xb7\\xb8]|\\xea\\xaa[\\xbe\\xbf]|\\xea\\xab\\x81|\\xea\\xab[\\x83-\\x9a]|\\xea\\xab[\\x9e\\x9f]|\\xea\\xab[\\xab-\\xb1]|\\xea(?:\\xab[\\xb5-\\xbf]|\\xac\\x80)|\\xea\\xac[\\x87\\x88]|\\xea\\xac[\\x8f\\x90]|\\xea\\xac[\\x97-\\x9f]|\\xea\\xac\\xa7|\\xea\\xac\\xaf|\\xea\\xad\\x9b|\\xea\\xad[\\xaa-\\xaf]|\\xea\\xaf[\\xa3-\\xaf]|\\xea\\xaf[\\xba-\\xbf]|\\xed\\x9e[\\xa4-\\xaf]|\\xed\\x9f[\\x87-\\x8a]|\\xed\\x9f[\\xbc-\\xbf]|\\xee[\\x80-\\xbf][\\x80-\\xbf]|\\xef[\\x80-\\xa3][\\x80-\\xbf]|\\xef\\xa9[\\xae\\xaf]|\\xef\\xab[\\x9a-\\xbf]|\\xef\\xac[\\x87-\\x92]|\\xef\\xac[\\x98-\\x9c]|\\xef\\xac\\x9e|\\xef\\xac\\xa9|\\xef\\xac\\xb7|\\xef\\xac\\xbd|\\xef\\xac\\xbf|\\xef\\xad\\x82|\\xef\\xad\\x85|\\xef(?:\\xae[\\xb2-\\xbf]|\\xaf[\\x80-\\x92])|\\xef(?:\\xb4[\\xbe\\xbf]|\\xb5[\\x80-\\x8f])|\\xef\\xb6[\\x90\\x91]|\\xef\\xb7[\\x88-\\xaf]|\\xef(?:\\xb7[\\xbc-\\xbf]|\\xb8[\\x80-\\xbf]|\\xb9[\\x80-\\xaf])|\\xef\\xb9\\xb5|\\xef(?:\\xbb[\\xbd-\\xbf]|\\xbc[\\x80-\\x8f])|\\xef\\xbc[\\x9a-\\xa0]|\\xef(?:\\xbc[\\xbb-\\xbf]|\\xbd\\x80)|\\xef\\xbd[\\x9b-\\xa5]|\\xef(?:\\xbe\\xbf|\\xbf[\\x80\\x81])|\\xef\\xbf[\\x88\\x89]|\\xef\\xbf[\\x90\\x91]|\\xef\\xbf[\\x98\\x99]|\\xef\\xbf[\\x9d-\\xbf]|\\xf0\\x90\\x80\\x8c|\\xf0\\x90\\x80\\xa7|\\xf0\\x90\\x80\\xbb|\\xf0\\x90\\x80\\xbe|\\xf0\\x90\\x81[\\x8e\\x8f]|\\xf0\\x90\\x81[\\x9e-\\xbf]|\\xf0\\x90(?:\\x83[\\xbb-\\xbf]|\\x84[\\x80-\\x86])|\\xf0\\x90\\x84[\\xb4-\\xbf]|\\xf0\\x90(?:\\x85[\\xb9-\\xbf]|\\x86[\\x80-\\x89])|\\xf0\\x90(?:\\x86[\\x8c-\\xbf]|[\\x87-\\x89][\\x80-\\xbf])|\\xf0\\x90\\x8a[\\x9d-\\x9f]|\\xf0\\x90\\x8b[\\x91-\\xa0]|\\xf0\\x90\\x8b[\\xbc-\\xbf]|\\xf0\\x90\\x8c[\\xa4-\\xac]|\\xf0\\x90\\x8d[\\x8b-\\x8f]|\\xf0\\x90\\x8d[\\xb6-\\xbf]|\\xf0\\x90\\x8e[\\x9e\\x9f]|\\xf0\\x90\\x8f[\\x84-\\x87]|\\xf0\\x90\\x8f\\x90|\\xf0\\x90\\x8f[\\x96-\\xbf]|\\xf0\\x90\\x92[\\x9e\\x9f]|\\xf0\\x90\\x92[\\xaa-\\xaf]|\\xf0\\x90\\x93[\\x94-\\x97]|\\xf0\\x90\\x93[\\xbc-\\xbf]|\\xf0\\x90\\x94[\\xa8-\\xaf]|\\xf0\\x90\\x95[\\xa4-\\xaf]|\\xf0\\x90\\x95\\xbb|\\xf0\\x90\\x96\\x8b|\\xf0\\x90\\x96\\x93|\\xf0\\x90\\x96\\x96|\\xf0\\x90\\x96\\xa2|\\xf0\\x90\\x96\\xb2|\\xf0\\x90\\x96\\xba|\\xf0\\x90(?:\\x96[\\xbd-\\xbf]|\\x97[\\x80-\\xbf])|\\xf0\\x90\\x9c[\\xb7-\\xbf]|\\xf0\\x90\\x9d[\\x96-\\x9f]|\\xf0\\x90\\x9d[\\xa8-\\xbf]|\\xf0\\x90\\x9e\\x86|\\xf0\\x90\\x9e\\xb1|\\xf0\\x90(?:\\x9e[\\xbb-\\xbf]|\\x9f[\\x80-\\xbf])|\\xf0\\x90\\xa0[\\x86\\x87]|\\xf0\\x90\\xa0\\x89|\\xf0\\x90\\xa0\\xb6|\\xf0\\x90\\xa0[\\xb9-\\xbb]|\\xf0\\x90\\xa0[\\xbd\\xbe]|\\xf0\\x90\\xa1[\\x96\\x97]|\\xf0\\x90\\xa1[\\xb7\\xb8]|\\xf0\\x90\\xa2[\\x9f-\\xa6]|\\xf0\\x90(?:\\xa2[\\xb0-\\xbf]|\\xa3[\\x80-\\x9f])|\\xf0\\x90\\xa3\\xb3|\\xf0\\x90\\xa3[\\xb6-\\xba]|\\xf0\\x90\\xa4[\\x9c-\\x9f]|\\xf0\\x90(?:\\xa4[\\xba-\\xbf]|\\xa5[\\x80-\\xbf])|\\xf0\\x90\\xa6[\\xb8-\\xbb]|\\xf0\\x90\\xa7[\\x90\\x91]|\\xf0\\x90\\xa8[\\x81-\\x8f]|\\xf0\\x90\\xa8\\x94|\\xf0\\x90\\xa8\\x98|\\xf0\\x90\\xa8[\\xb6-\\xbf]|\\xf0\\x90\\xa9[\\x89-\\x9f]|\\xf0\\x90\\xa9\\xbf|\\xf0\\x90\\xaa[\\xa0-\\xbf]|\\xf0\\x90\\xab\\x88|\\xf0\\x90\\xab[\\xa5-\\xaa]|\\xf0\\x90\\xab[\\xb0-\\xbf]|\\xf0\\x90\\xac[\\xb6-\\xbf]|\\xf0\\x90\\xad[\\x96\\x97]|\\xf0\\x90\\xad[\\xb3-\\xb7]|\\xf0\\x90\\xae[\\x92-\\xa8]|\\xf0\\x90(?:\\xae[\\xb0-\\xbf]|\\xaf[\\x80-\\xbf])|\\xf0\\x90\\xb1[\\x89-\\xbf]|\\xf0\\x90\\xb2[\\xb3-\\xbf]|\\xf0\\x90\\xb3[\\xb3-\\xb9]|\\xf0\\x90\\xb4[\\xa4-\\xaf]|\\xf0\\x90(?:\\xb4[\\xba-\\xbf]|[\\xb5-\\xb8][\\x80-\\xbf]|\\xb9[\\x80-\\x9f])|\\xf0\\x90\\xb9\\xbf|\\xf0\\x90\\xba[\\xaa-\\xaf]|\\xf0\\x90(?:\\xba[\\xb2-\\xbf]|\\xbb[\\x80-\\xbf])|\\xf0\\x90\\xbc[\\xa8-\\xaf]|\\xf0\\x90\\xbd[\\x86-\\x90]|\\xf0\\x90\\xbd[\\x95-\\xaf]|\\xf0\\x90\\xbe[\\x82-\\xaf]|\\xf0\\x90\\xbf[\\x8c-\\x9f]|\\xf0(?:\\x90\\xbf[\\xb7-\\xbf]|\\x91\\x80[\\x80-\\x82])|\\xf0\\x91(?:\\x80[\\xb8-\\xbf]|\\x81[\\x80-\\x91])|\\xf0\\x91\\x81\\xb0|\\xf0\\x91\\x81[\\xb3\\xb4]|\\xf0\\x91(?:\\x81[\\xb6-\\xbf]|\\x82[\\x80-\\x82])|\\xf0\\x91(?:\\x82[\\xb0-\\xbf]|\\x83[\\x80-\\x8f])|\\xf0\\x91\\x83[\\xa9-\\xaf]|\\xf0\\x91(?:\\x83[\\xba-\\xbf]|\\x84[\\x80-\\x82])|\\xf0\\x91\\x84[\\xa7-\\xb5]|\\xf0\\x91\\x85[\\x80-\\x83]|\\xf0\\x91\\x85[\\x85\\x86]|\\xf0\\x91\\x85[\\x88-\\x8f]|\\xf0\\x91\\x85[\\xb3-\\xb5]|\\xf0\\x91(?:\\x85[\\xb7-\\xbf]|\\x86[\\x80-\\x82])|\\xf0\\x91(?:\\x86[\\xb3-\\xbf]|\\x87\\x80)|\\xf0\\x91\\x87[\\x85-\\x8f]|\\xf0\\x91\\x87\\x9b|\\xf0\\x91\\x87[\\x9d-\\xa0]|\\xf0\\x91\\x87[\\xb5-\\xbf]|\\xf0\\x91\\x88\\x92|\\xf0\\x91\\x88[\\xac-\\xbe]|\\xf0\\x91\\x89[\\x81-\\xbf]|\\xf0\\x91\\x8a\\x87|\\xf0\\x91\\x8a\\x89|\\xf0\\x91\\x8a\\x8e|\\xf0\\x91\\x8a\\x9e|\\xf0\\x91\\x8a[\\xa9-\\xaf]|\\xf0\\x91\\x8b[\\x9f-\\xaf]|\\xf0\\x91(?:\\x8b[\\xba-\\xbf]|\\x8c[\\x80-\\x84])|\\xf0\\x91\\x8c[\\x8d\\x8e]|\\xf0\\x91\\x8c[\\x91\\x92]|\\xf0\\x91\\x8c\\xa9|\\xf0\\x91\\x8c\\xb1|\\xf0\\x91\\x8c\\xb4|\\xf0\\x91\\x8c[\\xba-\\xbc]|\\xf0\\x91(?:\\x8c[\\xbe\\xbf]|\\x8d[\\x80-\\x8f])|\\xf0\\x91\\x8d[\\x91-\\x9c]|\\xf0\\x91(?:\\x8d[\\xa2-\\xbf]|[\\x8e\\x8f][\\x80-\\xbf])|\\xf0\\x91(?:\\x90[\\xb5-\\xbf]|\\x91[\\x80-\\x86])|\\xf0\\x91\\x91[\\x8b-\\x8f]|\\xf0\\x91\\x91[\\x9a-\\x9e]|\\xf0\\x91\\x91[\\xa2-\\xbf]|\\xf0\\x91(?:\\x92[\\xb0-\\xbf]|\\x93[\\x80-\\x83])|\\xf0\\x91\\x93\\x86|\\xf0\\x91\\x93[\\x88-\\x8f]|\\xf0\\x91(?:\\x93[\\x9a-\\xbf]|[\\x94\\x95][\\x80-\\xbf])|\\xf0\\x91(?:\\x96[\\xaf-\\xbf]|\\x97[\\x80-\\x97])|\\xf0\\x91\\x97[\\x9c-\\xbf]|\\xf0\\x91(?:\\x98[\\xb0-\\xbf]|\\x99[\\x80-\\x83])|\\xf0\\x91\\x99[\\x85-\\x8f]|\\xf0\\x91\\x99[\\x9a-\\xbf]|\\xf0\\x91\\x9a[\\xab-\\xb7]|\\xf0\\x91\\x9a[\\xb9-\\xbf]|\\xf0\\x91\\x9b[\\x8a-\\xbf]|\\xf0\\x91\\x9c[\\x9b-\\xaf]|\\xf0\\x91\\x9c[\\xbc-\\xbf]|\\xf0\\x91(?:\\x9d[\\x87-\\xbf]|[\\x9e\\x9f][\\x80-\\xbf])|\\xf0\\x91(?:\\xa0[\\xac-\\xbf]|\\xa1[\\x80-\\xbf]|\\xa2[\\x80-\\x9f])|\\xf0\\x91\\xa3[\\xb3-\\xbe]|\\xf0\\x91\\xa4[\\x87\\x88]|\\xf0\\x91\\xa4[\\x8a\\x8b]|\\xf0\\x91\\xa4\\x94|\\xf0\\x91\\xa4\\x97|\\xf0\\x91\\xa4[\\xb0-\\xbe]|\\xf0\\x91\\xa5\\x80|\\xf0\\x91\\xa5[\\x82-\\x8f]|\\xf0\\x91(?:\\xa5[\\x9a-\\xbf]|\\xa6[\\x80-\\x9f])|\\xf0\\x91\\xa6[\\xa8\\xa9]|\\xf0\\x91\\xa7[\\x91-\\xa0]|\\xf0\\x91\\xa7\\xa2|\\xf0\\x91\\xa7[\\xa4-\\xbf]|\\xf0\\x91\\xa8[\\x81-\\x8a]|\\xf0\\x91\\xa8[\\xb3-\\xb9]|\\xf0\\x91(?:\\xa8[\\xbb-\\xbf]|\\xa9[\\x80-\\x8f])|\\xf0\\x91\\xa9[\\x91-\\x9b]|\\xf0\\x91\\xaa[\\x8a-\\x9c]|\\xf0\\x91\\xaa[\\x9e-\\xaf]|\\xf0\\x91(?:\\xab[\\xb9-\\xbf]|[\\xac-\\xaf][\\x80-\\xbf])|\\xf0\\x91\\xb0\\x89|\\xf0\\x91\\xb0[\\xaf-\\xbf]|\\xf0\\x91\\xb1[\\x81-\\x8f]|\\xf0\\x91\\xb1[\\xad-\\xb1]|\\xf0\\x91(?:\\xb2[\\x90-\\xbf]|\\xb3[\\x80-\\xbf])|\\xf0\\x91\\xb4\\x87|\\xf0\\x91\\xb4\\x8a|\\xf0\\x91(?:\\xb4[\\xb1-\\xbf]|\\xb5[\\x80-\\x85])|\\xf0\\x91\\xb5[\\x87-\\x8f]|\\xf0\\x91\\xb5[\\x9a-\\x9f]|\\xf0\\x91\\xb5\\xa6|\\xf0\\x91\\xb5\\xa9|\\xf0\\x91\\xb6[\\x8a-\\x97]|\\xf0\\x91\\xb6[\\x99-\\x9f]|\\xf0\\x91(?:\\xb6[\\xaa-\\xbf]|[\\xb7-\\xba][\\x80-\\xbf]|\\xbb[\\x80-\\x9f])|\\xf0\\x91(?:\\xbb[\\xb3-\\xbf]|\\xbc[\\x80\\x81])|\\xf0\\x91\\xbc\\x83|\\xf0\\x91\\xbc\\x91|\\xf0\\x91(?:\\xbc[\\xb4-\\xbf]|\\xbd[\\x80-\\x8f])|\\xf0\\x91(?:\\xbd[\\x9a-\\xbf]|\\xbe[\\x80-\\xaf])|\\xf0\\x91\\xbe[\\xb1-\\xbf]|\\xf0\\x91\\xbf[\\x95-\\xbf]|\\xf0\\x92(?:\\x8e[\\x9a-\\xbf]|\\x8f[\\x80-\\xbf])|\\xf0\\x92\\x91[\\xaf-\\xbf]|\\xf0\\x92(?:\\x95[\\x84-\\xbf]|[\\x96-\\xbd][\\x80-\\xbf]|\\xbe[\\x80-\\x8f])|\\xf0\\x92\\xbf[\\xb1-\\xbf]|\\xf0\\x93(?:\\x90[\\xb0-\\xbf]|\\x91\\x80)|\\xf0(?:\\x93(?:[\\x92-\\xbf][\\x80-\\xbf]|\\x91[\\x87-\\xbf])|\\x94[\\x80-\\x8f][\\x80-\\xbf])|\\xf0(?:\\x94(?:[\\x9a-\\xbf][\\x80-\\xbf]|\\x99[\\x87-\\xbf])|\\x95[\\x80-\\xbf][\\x80-\\xbf]|\\x96[\\x80-\\x9f][\\x80-\\xbf])|\\xf0\\x96\\xa8[\\xb9-\\xbf]|\\xf0\\x96\\xa9\\x9f|\\xf0\\x96\\xa9[\\xaa-\\xaf]|\\xf0\\x96\\xaa\\xbf|\\xf0\\x96\\xab[\\x8a-\\x8f]|\\xf0\\x96\\xab[\\xae-\\xbf]|\\xf0\\x96\\xac[\\xb0-\\xbf]|\\xf0\\x96\\xad[\\x84-\\x8f]|\\xf0\\x96\\xad\\x9a|\\xf0\\x96\\xad\\xa2|\\xf0\\x96\\xad[\\xb8-\\xbc]|\\xf0\\x96(?:\\xae[\\x90-\\xbf]|[\\xaf-\\xb8][\\x80-\\xbf])|\\xf0\\x96(?:\\xba[\\x97-\\xbf]|\\xbb[\\x80-\\xbf])|\\xf0\\x96\\xbd[\\x8b-\\x8f]|\\xf0\\x96(?:\\xbd[\\x91-\\xbf]|\\xbe[\\x80-\\x92])|\\xf0\\x96(?:\\xbe[\\xa0-\\xbf]|\\xbf[\\x80-\\x9f])|\\xf0\\x96\\xbf\\xa2|\\xf0\\x96\\xbf[\\xa4-\\xbf]|\\xf0\\x98\\x9f[\\xb8-\\xbf]|\\xf0\\x98\\xb3[\\x96-\\xbf]|\\xf0(?:\\x98(?:[\\xb5-\\xbf][\\x80-\\xbf]|\\xb4[\\x89-\\xbf])|\\x99[\\x80-\\xbf][\\x80-\\xbf]|\\x9a(?:[\\x80-\\xbe][\\x80-\\xbf]|\\xbf[\\x80-\\xaf]))|\\xf0\\x9a\\xbf\\xb4|\\xf0\\x9a\\xbf\\xbc|\\xf0\\x9a\\xbf\\xbf|\\xf0\\x9b\\x84[\\xa3-\\xb1]|\\xf0\\x9b(?:\\x84[\\xb3-\\xbf]|\\x85[\\x80-\\x8f])|\\xf0\\x9b\\x85[\\x93\\x94]|\\xf0\\x9b\\x85[\\x96-\\xa3]|\\xf0\\x9b\\x85[\\xa8-\\xaf]|\\xf0\\x9b(?:\\x8b[\\xbc-\\xbf]|[\\x8c-\\xaf][\\x80-\\xbf])|\\xf0\\x9b\\xb1[\\xab-\\xaf]|\\xf0\\x9b\\xb1[\\xbd-\\xbf]|\\xf0\\x9b\\xb2[\\x89-\\x8f]|\\xf0(?:\\x9b(?:[\\xb3-\\xbf][\\x80-\\xbf]|\\xb2[\\x9a-\\xbf])|\\x9c[\\x80-\\xbf][\\x80-\\xbf]|\\x9d[\\x80-\\x8a][\\x80-\\xbf])|\\xf0\\x9d\\x8b[\\x94-\\x9f]|\\xf0\\x9d(?:\\x8b[\\xb4-\\xbf]|\\x8c[\\x80-\\xbf]|\\x8d[\\x80-\\x9f])|\\xf0\\x9d(?:\\x8d[\\xb9-\\xbf]|[\\x8e\\x8f][\\x80-\\xbf])|\\xf0\\x9d\\x91\\x95|\\xf0\\x9d\\x92\\x9d|\\xf0\\x9d\\x92[\\xa0\\xa1]|\\xf0\\x9d\\x92[\\xa3\\xa4]|\\xf0\\x9d\\x92[\\xa7\\xa8]|\\xf0\\x9d\\x92\\xad|\\xf0\\x9d\\x92\\xba|\\xf0\\x9d\\x92\\xbc|\\xf0\\x9d\\x93\\x84|\\xf0\\x9d\\x94\\x86|\\xf0\\x9d\\x94[\\x8b\\x8c]|\\xf0\\x9d\\x94\\x95|\\xf0\\x9d\\x94\\x9d|\\xf0\\x9d\\x94\\xba|\\xf0\\x9d\\x94\\xbf|\\xf0\\x9d\\x95\\x85|\\xf0\\x9d\\x95[\\x87-\\x89]|\\xf0\\x9d\\x95\\x91|\\xf0\\x9d\\x9a[\\xa6\\xa7]|\\xf0\\x9d\\x9b\\x81|\\xf0\\x9d\\x9b\\x9b|\\xf0\\x9d\\x9b\\xbb|\\xf0\\x9d\\x9c\\x95|\\xf0\\x9d\\x9c\\xb5|\\xf0\\x9d\\x9d\\x8f|\\xf0\\x9d\\x9d\\xaf|\\xf0\\x9d\\x9e\\x89|\\xf0\\x9d\\x9e\\xa9|\\xf0\\x9d\\x9f\\x83|\\xf0\\x9d\\x9f[\\x8c\\x8d]|\\xf0\\x9d(?:[\\xa0-\\xbb][\\x80-\\xbf])|\\xf0\\x9d\\xbc[\\x9f-\\xa4]|\\xf0(?:\\x9d(?:[\\xbd-\\xbf][\\x80-\\xbf]|\\xbc[\\xab-\\xbf])|\\x9e\\x80[\\x80-\\xaf])|\\xf0\\x9e(?:\\x81[\\xae-\\xbf]|[\\x82\\x83][\\x80-\\xbf])|\\xf0\\x9e\\x84[\\xad-\\xb6]|\\xf0\\x9e\\x84[\\xbe\\xbf]|\\xf0\\x9e\\x85[\\x8a-\\x8d]|\\xf0\\x9e(?:\\x85[\\x8f-\\xbf]|[\\x86-\\x89][\\x80-\\xbf]|\\x8a[\\x80-\\x8f])|\\xf0\\x9e\\x8a[\\xae-\\xbf]|\\xf0\\x9e\\x8b[\\xac-\\xaf]|\\xf0\\x9e(?:\\x8b[\\xba-\\xbf]|[\\x8c-\\x92][\\x80-\\xbf]|\\x93[\\x80-\\x8f])|\\xf0\\x9e\\x93[\\xac-\\xaf]|\\xf0\\x9e(?:\\x93[\\xba-\\xbf]|[\\x94-\\x9e][\\x80-\\xbf]|\\x9f[\\x80-\\x9f])|\\xf0\\x9e\\x9f\\xa7|\\xf0\\x9e\\x9f\\xac|\\xf0\\x9e\\x9f\\xaf|\\xf0\\x9e\\x9f\\xbf|\\xf0\\x9e\\xa3[\\x85\\x86]|\\xf0\\x9e\\xa3[\\x90-\\xbf]|\\xf0\\x9e\\xa5[\\x84-\\x8a]|\\xf0\\x9e\\xa5[\\x8c-\\x8f]|\\xf0\\x9e(?:\\xa5[\\x9a-\\xbf]|[\\xa6-\\xb0][\\x80-\\xbf]|\\xb1[\\x80-\\xb0])|\\xf0\\x9e\\xb2\\xac|\\xf0\\x9e\\xb2\\xb0|\\xf0\\x9e(?:\\xb2[\\xb5-\\xbf]|\\xb3[\\x80-\\xbf]|\\xb4\\x80)|\\xf0\\x9e\\xb4\\xae|\\xf0\\x9e(?:\\xb4[\\xbe\\xbf]|[\\xb5-\\xb7][\\x80-\\xbf])|\\xf0\\x9e\\xb8\\x84|\\xf0\\x9e\\xb8\\xa0|\\xf0\\x9e\\xb8\\xa3|\\xf0\\x9e\\xb8[\\xa5\\xa6]|\\xf0\\x9e\\xb8\\xa8|\\xf0\\x9e\\xb8\\xb3|\\xf0\\x9e\\xb8\\xb8|\\xf0\\x9e\\xb8\\xba|\\xf0\\x9e(?:\\xb8[\\xbc-\\xbf]|\\xb9[\\x80\\x81])|\\xf0\\x9e\\xb9[\\x83-\\x86]|\\xf0\\x9e\\xb9\\x88|\\xf0\\x9e\\xb9\\x8a|\\xf0\\x9e\\xb9\\x8c|\\xf0\\x9e\\xb9\\x90|\\xf0\\x9e\\xb9\\x93|\\xf0\\x9e\\xb9[\\x95\\x96]|\\xf0\\x9e\\xb9\\x98|\\xf0\\x9e\\xb9\\x9a|\\xf0\\x9e\\xb9\\x9c|\\xf0\\x9e\\xb9\\x9e|\\xf0\\x9e\\xb9\\xa0|\\xf0\\x9e\\xb9\\xa3|\\xf0\\x9e\\xb9[\\xa5\\xa6]|\\xf0\\x9e\\xb9\\xab|\\xf0\\x9e\\xb9\\xb3|\\xf0\\x9e\\xb9\\xb8|\\xf0\\x9e\\xb9\\xbd|\\xf0\\x9e\\xb9\\xbf|\\xf0\\x9e\\xba\\x8a|\\xf0\\x9e\\xba[\\x9c-\\xa0]|\\xf0\\x9e\\xba\\xa4|\\xf0\\x9e\\xba\\xaa|\\xf0(?:\\x9e(?:[\\xbb-\\xbf][\\x80-\\xbf]|\\xba[\\xbc-\\xbf])|\\x9f[\\x80-\\x83][\\x80-\\xbf])|\\xf0\\x9f(?:\\x84[\\x8d-\\xbf]|[\\x85-\\xae][\\x80-\\xbf]|\\xaf[\\x80-\\xaf])|\\xf0\\x9f(?:\\xaf[\\xba-\\xbf]|[\\xb0-\\xbf][\\x80-\\xbf])|\\xf0\\xaa\\x9b[\\xa0-\\xbf]|\\xf0\\xab\\x9c[\\xba-\\xbf]|\\xf0\\xab\\xa0[\\x9e\\x9f]|\\xf0\\xac\\xba[\\xa2-\\xaf]|\\xf0\\xae\\xaf[\\xa1-\\xaf]|\\xf0(?:\\xae(?:[\\xba-\\xbf][\\x80-\\xbf]|\\xb9[\\x9e-\\xbf])|\\xaf[\\x80-\\x9f][\\x80-\\xbf])|\\xf0\\xaf(?:\\xa8[\\x9e-\\xbf]|[\\xa9-\\xbf][\\x80-\\xbf])|\\xf0\\xb1\\x8d[\\x8b-\\x8f]|\\xf0(?:[\\xb3-\\xbf][\\x80-\\xbf][\\x80-\\xbf]|\\xb2(?:[\\x8f-\\xbf][\\x80-\\xbf]|\\x8e[\\xb0-\\xbf]))|[\\xf1-\\xf3][\\x80-\\xbf][\\x80-\\xbf][\\x80-\\xbf]|\\xf4[\\x80-\\x8f][\\x80-\\xbf][\\x80-\\xbf])+|(?:[\\x09-\\x0d]|\\x20|\\xc2\\xa0|\\xe1\\x9a\\x80|\\xe2\\x80[\\x80-\\x8a]|\\xe2\\x80\\xaf|\\xe2\\x81\\x9f|\\xe3\\x80\\x80)+(?!(?:[\\x00-\\x08]|[\\x0e-\\x1f]|[!-\\x7f]|\\xc2[\\x80-\\x9f]|\\xc2[\\xa1-\\xbf]|[\\xc3-\\xdf][\\x80-\\xbf]|\\xe0[\\xa0-\\xbf][\\x80-\\xbf]|\\xe1[\\x80-\\x99][\\x80-\\xbf]|\\xe1(?:\\x9a[\\x81-\\xbf]|[\\x9b-\\xbf][\\x80-\\xbf])|\\xe2\\x80[\\x8b-\\xae]|\\xe2(?:\\x80[\\xb0-\\xbf]|\\x81[\\x80-\\x9e])|\\xe2(?:\\x81[\\xa0-\\xbf]|[\\x82-\\xbf][\\x80-\\xbf])|\\xe3(?:[\\x81-\\xbf][\\x80-\\xbf]|\\x80[\\x81-\\xbf])|[\\xe4-\\xec][\\x80-\\xbf][\\x80-\\xbf]|\\xed[\\x80-\\x9f][\\x80-\\xbf]|[\\xee\\xef][\\x80-\\xbf][\\x80-\\xbf]|\\xf0[\\x90-\\xbf][\\x80-\\xbf][\\x80-\\xbf]|[\\xf1-\\xf3][\\x80-\\xbf][\\x80-\\xbf][\\x80-\\xbf]|\\xf4[\\x80-\\x8f][\\x80-\\xbf][\\x80-\\xbf]))|(?:[\\x09-\\x0d]|\\x20|\\xc2\\xa0|\\xe1\\x9a\\x80|\\xe2\\x80[\\x80-\\x8a]|\\xe2\\x80\\xaf|\\xe2\\x81\\x9f|\\xe3\\x80\\x80)+"; + +inline std::wstring from_utf8(const std::string& s) +{ + std::wstring_convert> conv; + return conv.from_bytes(s); +} + +inline std::string to_utf8(const std::wstring& ws) +{ + // code to convert from utf32/utf16 to utf8 + std::wstring_convert, wchar_t> converter; + std::string utf8 = converter.to_bytes(ws); + return utf8; +} \ No newline at end of file