From 6336701c9378c23c85d1c0e464b663ca2bbb8e60 Mon Sep 17 00:00:00 2001 From: Galunid Date: Mon, 23 Oct 2023 17:47:03 +0200 Subject: [PATCH 01/79] Fix baichuan convert script not detecing model (#3739) It seems nobody objects. --- convert-baichuan-hf-to-gguf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/convert-baichuan-hf-to-gguf.py b/convert-baichuan-hf-to-gguf.py index 3b64ecb8870722..5ee99be73134e6 100755 --- a/convert-baichuan-hf-to-gguf.py +++ b/convert-baichuan-hf-to-gguf.py @@ -110,7 +110,7 @@ def parse_args() -> argparse.Namespace: with open(dir_model / "config.json", "r", encoding="utf-8") as f: hparams = json.load(f) print("hello print: ",hparams["architectures"][0]) -if hparams["architectures"][0] != "BaichuanForCausalLM": +if hparams["architectures"][0] != "BaichuanForCausalLM" and hparams["architectures"][0] != "BaiChuanForCausalLM": print("Model architecture not supported: " + hparams["architectures"][0]) sys.exit() From 5be6c803fa5378f62a1590f3ad8c6b64c7c0c2ce Mon Sep 17 00:00:00 2001 From: Marcus Dunn <51931484+MarcusDunn@users.noreply.github.com> Date: Mon, 23 Oct 2023 12:40:03 -0700 Subject: [PATCH 02/79] llama : remove token functions with `context` args in favor of `model` (#3720) * added `llama_model_token_*` variants to all the `llama_token_*` functions. * added `LLAMA_API` * formatting Co-authored-by: Georgi Gerganov * removed old `llama_token` functions * changed 3 more functions to take in model - `llama_token_get_text` - `llama_token_get_score` - `llama_token_get_type` * added back docs * fixed main.cpp * changed token functions to use new model variants * changed token functions to use new model variants --------- Co-authored-by: Georgi Gerganov --- common/common.cpp | 8 ++--- common/sampling.cpp | 4 +-- common/train.cpp | 6 ++-- examples/batched/batched.cpp | 2 +- examples/beam-search/beam-search.cpp | 2 +- examples/infill/infill.cpp | 30 +++++++++--------- examples/llama-bench/llama-bench.cpp | 4 +-- examples/llava/llava-utils.h | 2 +- examples/main/main.cpp | 8 ++--- examples/parallel/parallel.cpp | 2 +- examples/perplexity/perplexity.cpp | 4 +-- examples/server/server.cpp | 14 ++++----- examples/simple/simple.cpp | 2 +- examples/speculative/speculative.cpp | 2 +- llama.cpp | 47 ++++++++++++++-------------- llama.h | 21 +++++++------ 16 files changed, 80 insertions(+), 78 deletions(-) diff --git a/common/common.cpp b/common/common.cpp index bbd1518ca29340..44bb76618f5f8b 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -880,13 +880,13 @@ std::tuple llama_init_from_gpt_par } if (params.ignore_eos) { - params.sparams.logit_bias[llama_token_eos(lctx)] = -INFINITY; + params.sparams.logit_bias[llama_token_eos(model)] = -INFINITY; } { LOG("warming up the model with an empty run\n"); - std::vector tmp = { llama_token_bos(lctx), llama_token_eos(lctx), }; + std::vector tmp = { llama_token_bos(model), llama_token_eos(model), }; llama_decode(lctx, llama_batch_get_one(tmp.data(), std::min(tmp.size(), (size_t) params.n_batch), 0, 0)); llama_kv_cache_tokens_rm(lctx, -1, -1); llama_reset_timings(lctx); @@ -941,7 +941,7 @@ std::string llama_token_to_piece(const struct llama_context * ctx, llama_token t } std::string llama_detokenize_spm(llama_context * ctx, const std::vector & tokens) { - const llama_token bos_id = llama_token_bos(ctx); + const llama_token bos_id = llama_token_bos(llama_get_model(ctx)); std::string piece; std::string result; @@ -1186,7 +1186,7 @@ void dump_non_result_info_yaml(FILE * stream, const gpt_params & params, const l fprintf(stream, "hellaswag: %s # default: false\n", params.hellaswag ? "true" : "false"); fprintf(stream, "hellaswag_tasks: %zu # default: 400\n", params.hellaswag_tasks); - const auto logit_bias_eos = sparams.logit_bias.find(llama_token_eos(lctx)); + const auto logit_bias_eos = sparams.logit_bias.find(llama_token_eos(llama_get_model(lctx))); const bool ignore_eos = logit_bias_eos != sparams.logit_bias.end() && logit_bias_eos->second == -INFINITY; fprintf(stream, "ignore_eos: %s # default: false\n", ignore_eos ? "true" : "false"); diff --git a/common/sampling.cpp b/common/sampling.cpp index 6f0af3c4a2afd5..5258d4e8263693 100644 --- a/common/sampling.cpp +++ b/common/sampling.cpp @@ -147,7 +147,7 @@ llama_token llama_sampling_sample( // apply penalties if (!prev.empty()) { - const float nl_logit = logits[llama_token_nl(ctx_main)]; + const float nl_logit = logits[llama_token_nl(llama_get_model(ctx_main))]; llama_sample_repetition_penalties(ctx_main, &cur_p, prev.data() + prev.size() - penalty_last_n, @@ -155,7 +155,7 @@ llama_token llama_sampling_sample( if (!penalize_nl) { for (size_t idx = 0; idx < cur_p.size; idx++) { - if (cur_p.data[idx].id == llama_token_nl(ctx_main)) { + if (cur_p.data[idx].id == llama_token_nl(llama_get_model(ctx_main))) { cur_p.data[idx].logit = nl_logit; break; } diff --git a/common/train.cpp b/common/train.cpp index 154ca56e5fa877..3cce5da269637e 100644 --- a/common/train.cpp +++ b/common/train.cpp @@ -236,8 +236,8 @@ int64_t get_example_targets_batch( int64_t used_samples = 0; ggml_set_f32(target_probs, 0.0f); - llama_token bos = llama_token_bos(lctx); - llama_token eos = llama_token_eos(lctx); + llama_token bos = llama_token_bos(llama_get_model(lctx)); + llama_token eos = llama_token_eos(llama_get_model(lctx)); // printf("%s: example_id=%d n_batch=%d n_train_samples=%zu\n", __func__, example_id, n_batch, n_train_samples); for (int k=0; k mark the stream as finished - if (new_token_id == llama_token_eos(ctx) || n_cur == n_len) { + if (new_token_id == llama_token_eos(model) || n_cur == n_len) { i_batch[i] = -1; LOG_TEE("\n"); if (n_parallel > 1) { diff --git a/examples/beam-search/beam-search.cpp b/examples/beam-search/beam-search.cpp index f078ab8a87fa5f..679b382e19b4e0 100644 --- a/examples/beam-search/beam-search.cpp +++ b/examples/beam-search/beam-search.cpp @@ -47,7 +47,7 @@ struct beam_search_callback_data { // In this case, end-of-beam (eob) is equivalent to end-of-sentence (eos) but this need not always be the same. // For example, eob can be flagged due to maximum token length, stop words, etc. static bool is_at_eob(const beam_search_callback_data & callback_data, const llama_token * tokens, size_t n_tokens) { - return n_tokens && tokens[n_tokens-1] == llama_token_eos(callback_data.ctx); + return n_tokens && tokens[n_tokens-1] == llama_token_eos(llama_get_model(callback_data.ctx)); } // Function matching type llama_beam_search_callback_fn_t. diff --git a/examples/infill/infill.cpp b/examples/infill/infill.cpp index 6331335e3c423e..9c52b7bbad1dba 100644 --- a/examples/infill/infill.cpp +++ b/examples/infill/infill.cpp @@ -246,14 +246,14 @@ int main(int argc, char ** argv) { if (suff_rm_leading_spc && inp_sfx[0] == space_token) { inp_sfx.erase(inp_sfx.begin()); } - inp_pfx.insert(inp_pfx.begin(), llama_token_prefix(ctx)); + inp_pfx.insert(inp_pfx.begin(), llama_token_prefix(model)); if (add_bos) { - inp_pfx.insert(inp_pfx.begin(), llama_token_bos(ctx)); + inp_pfx.insert(inp_pfx.begin(), llama_token_bos(model)); } - inp_sfx.insert(inp_sfx.begin(), llama_token_suffix(ctx)); + inp_sfx.insert(inp_sfx.begin(), llama_token_suffix(model)); embd_inp = inp_pfx; embd_inp.insert(embd_inp.end(), inp_sfx.begin(), inp_sfx.end()); - embd_inp.push_back(llama_token_middle(ctx)); + embd_inp.push_back(llama_token_middle(model)); LOG("prefix: \"%s\"\n", log_tostr(params.input_prefix)); LOG("suffix: \"%s\"\n", log_tostr(params.input_suffix)); @@ -261,7 +261,7 @@ int main(int argc, char ** argv) { // Should not run without any tokens if (embd_inp.empty()) { - embd_inp.push_back(llama_token_bos(ctx)); + embd_inp.push_back(llama_token_bos(model)); LOG("embd_inp was considered empty and bos was added: %s\n", LOG_TOKENS_TOSTR_PRETTY(ctx, embd_inp).c_str()); } @@ -577,10 +577,10 @@ int main(int argc, char ** argv) { if ((int) embd_inp.size() <= n_consumed) { // deal with eot token in infill mode - if ((llama_sampling_last(ctx_sampling) == llama_token_eot(ctx) || is_interacting) && params.interactive){ + if ((llama_sampling_last(ctx_sampling) == llama_token_eot(model) || is_interacting) && params.interactive){ if(is_interacting && !params.interactive_first) { // print an eot token - printf("%s", llama_token_to_piece(ctx, llama_token_eot(ctx)).c_str()); + printf("%s", llama_token_to_piece(ctx, llama_token_eot(model)).c_str()); } fflush(stdout); printf("\n"); @@ -627,14 +627,14 @@ int main(int argc, char ** argv) { if (suff_rm_leading_spc && inp_sfx[0] == space_token) { inp_sfx.erase(inp_sfx.begin()); } - inp_pfx.insert(inp_pfx.begin(), llama_token_prefix(ctx)); + inp_pfx.insert(inp_pfx.begin(), llama_token_prefix(model)); if (add_bos) { - inp_pfx.insert(inp_pfx.begin(), llama_token_bos(ctx)); + inp_pfx.insert(inp_pfx.begin(), llama_token_bos(model)); } - inp_sfx.insert(inp_sfx.begin(), llama_token_suffix(ctx)); + inp_sfx.insert(inp_sfx.begin(), llama_token_suffix(model)); embd_inp = inp_pfx; embd_inp.insert(embd_inp.end(), inp_sfx.begin(), inp_sfx.end()); - embd_inp.push_back(llama_token_middle(ctx)); + embd_inp.push_back(llama_token_middle(model)); embd.clear(); embd_guidance.clear(); n_remain = params.n_predict; @@ -644,7 +644,7 @@ int main(int argc, char ** argv) { is_interacting = false; } // deal with end of text token in interactive mode - else if (llama_sampling_last(ctx_sampling) == llama_token_eos(ctx)) { + else if (llama_sampling_last(ctx_sampling) == llama_token_eos(model)) { LOG("found EOS token\n"); if (params.interactive) { @@ -661,7 +661,7 @@ int main(int argc, char ** argv) { if (params.input_prefix_bos) { LOG("adding input prefix BOS token\n"); - embd_inp.push_back(llama_token_bos(ctx)); + embd_inp.push_back(llama_token_bos(model)); } std::string buffer; @@ -724,7 +724,7 @@ int main(int argc, char ** argv) { } // end of text token - if (!embd.empty() && embd.back() == llama_token_eos(ctx) && !params.interactive) { + if (!embd.empty() && embd.back() == llama_token_eos(model) && !params.interactive) { break; } @@ -736,7 +736,7 @@ int main(int argc, char ** argv) { } } if (!params.interactive && n_remain <= 0) { - printf("%s", llama_token_to_piece(ctx, llama_token_eot(ctx)).c_str()); + printf("%s", llama_token_to_piece(ctx, llama_token_eot(model)).c_str()); fflush(stdout); } diff --git a/examples/llama-bench/llama-bench.cpp b/examples/llama-bench/llama-bench.cpp index a04115c962655a..20767d555b206d 100644 --- a/examples/llama-bench/llama-bench.cpp +++ b/examples/llama-bench/llama-bench.cpp @@ -933,7 +933,7 @@ struct sql_printer : public printer { }; static void test_prompt(llama_context * ctx, int n_prompt, int n_past, int n_batch, int n_threads) { - std::vector tokens(n_batch, llama_token_bos(ctx)); + std::vector tokens(n_batch, llama_token_bos(llama_get_model(ctx))); int n_processed = 0; llama_set_n_threads(ctx, n_threads, n_threads); @@ -946,7 +946,7 @@ static void test_prompt(llama_context * ctx, int n_prompt, int n_past, int n_bat } static void test_gen(llama_context * ctx, int n_gen, int n_past, int n_threads) { - llama_token token = llama_token_bos(ctx); + llama_token token = llama_token_bos(llama_get_model(ctx)); llama_set_n_threads(ctx, n_threads, n_threads); diff --git a/examples/llava/llava-utils.h b/examples/llava/llava-utils.h index 45b2b1ad30226c..320c719670b02d 100644 --- a/examples/llava/llava-utils.h +++ b/examples/llava/llava-utils.h @@ -137,7 +137,7 @@ inline llama_token sample_id(llama_context * ctx_llama, gpt_params & params) { inline const char * sample(struct llama_context * ctx_llama, gpt_params & params, int * n_past) { int id = sample_id(ctx_llama, params); static std::string ret; - if (id == llama_token_eos(ctx_llama)) { + if (id == llama_token_eos(llama_get_model(ctx_llama))) { ret = ""; } else { ret = llama_token_to_piece(ctx_llama, id); diff --git a/examples/main/main.cpp b/examples/main/main.cpp index 2621bd539875f6..3d9f670b9da7f2 100644 --- a/examples/main/main.cpp +++ b/examples/main/main.cpp @@ -248,7 +248,7 @@ int main(int argc, char ** argv) { // Should not run without any tokens if (embd_inp.empty()) { - embd_inp.push_back(llama_token_bos(ctx)); + embd_inp.push_back(llama_token_bos(model)); LOG("embd_inp was considered empty and bos was added: %s\n", LOG_TOKENS_TOSTR_PRETTY(ctx, embd_inp).c_str()); } @@ -693,7 +693,7 @@ int main(int argc, char ** argv) { } // deal with end of text token in interactive mode - if (llama_sampling_last(ctx_sampling) == llama_token_eos(ctx)) { + if (llama_sampling_last(ctx_sampling) == llama_token_eos(model)) { LOG("found EOS token\n"); if (params.interactive) { @@ -720,7 +720,7 @@ int main(int argc, char ** argv) { if (params.input_prefix_bos) { LOG("adding input prefix BOS token\n"); - embd_inp.push_back(llama_token_bos(ctx)); + embd_inp.push_back(llama_token_bos(model)); } std::string buffer; @@ -804,7 +804,7 @@ int main(int argc, char ** argv) { } // end of text token - if (!embd.empty() && embd.back() == llama_token_eos(ctx) && !(params.instruct || params.interactive)) { + if (!embd.empty() && embd.back() == llama_token_eos(model) && !(params.instruct || params.interactive)) { LOG_TEE(" [end of text]\n"); break; } diff --git a/examples/parallel/parallel.cpp b/examples/parallel/parallel.cpp index eb64adef8a3895..9a0b9c183d1070 100644 --- a/examples/parallel/parallel.cpp +++ b/examples/parallel/parallel.cpp @@ -347,7 +347,7 @@ int main(int argc, char ** argv) { // client.id, client.seq_id, id, client.n_decoded, client.i_batch, token_str.c_str()); if (client.n_decoded > 2 && - (id == llama_token_eos(ctx) || + (id == llama_token_eos(model) || (params.n_predict > 0 && client.n_decoded + client.n_prompt >= params.n_predict) || client.response.find("User:") != std::string::npos || client.response.find('\n') != std::string::npos)) { diff --git a/examples/perplexity/perplexity.cpp b/examples/perplexity/perplexity.cpp index 7d0038bd407573..3c2542e8c105e7 100644 --- a/examples/perplexity/perplexity.cpp +++ b/examples/perplexity/perplexity.cpp @@ -227,7 +227,7 @@ static results_perplexity perplexity_v2(llama_context * ctx, const gpt_params & // add BOS token for the first batch of each chunk if (add_bos && j == 0) { - tokens[batch_start] = llama_token_bos(ctx); + tokens[batch_start] = llama_token_bos(llama_get_model(ctx)); } const auto batch_logits = llama_get_logits(ctx); @@ -350,7 +350,7 @@ static results_perplexity perplexity(llama_context * ctx, const gpt_params & par // add BOS token for the first batch of each chunk if (add_bos && j == 0) { - tokens[batch_start] = llama_token_bos(ctx); + tokens[batch_start] = llama_token_bos(llama_get_model(ctx)); } if (llama_decode(ctx, llama_batch_get_one(tokens.data() + batch_start, batch_size, j * n_batch, 0))) { diff --git a/examples/server/server.cpp b/examples/server/server.cpp index c3279dbc9c456b..693f9b7735e493 100644 --- a/examples/server/server.cpp +++ b/examples/server/server.cpp @@ -726,7 +726,7 @@ struct llama_server_context if (json_value(data, "ignore_eos", false)) { - slot->sparams.logit_bias[llama_token_eos(ctx)] = -INFINITY; + slot->sparams.logit_bias[llama_token_eos(model)] = -INFINITY; } const auto &logit_bias = data.find("logit_bias"); @@ -1056,7 +1056,7 @@ struct llama_server_context slot.has_next_token = false; } - if (!slot.cache_tokens.empty() && result.tok == llama_token_eos(ctx)) + if (!slot.cache_tokens.empty() && result.tok == llama_token_eos(model)) { slot.stopped_eos = true; slot.has_next_token = false; @@ -1130,7 +1130,7 @@ struct llama_server_context json get_formated_generation(llama_client_slot &slot) { - const auto eos_bias = slot.sparams.logit_bias.find(llama_token_eos(ctx)); + const auto eos_bias = slot.sparams.logit_bias.find(llama_token_eos(model)); const bool ignore_eos = eos_bias != slot.sparams.logit_bias.end() && eos_bias->second < 0.0f && std::isinf(eos_bias->second); return json { @@ -1555,11 +1555,11 @@ struct llama_server_context suffix_tokens.erase(suffix_tokens.begin()); } - prefix_tokens.insert(prefix_tokens.begin(), llama_token_prefix(ctx)); - prefix_tokens.insert(prefix_tokens.begin(), llama_token_bos(ctx)); // always add BOS - prefix_tokens.insert(prefix_tokens.end(), llama_token_suffix(ctx)); + prefix_tokens.insert(prefix_tokens.begin(), llama_token_prefix(model)); + prefix_tokens.insert(prefix_tokens.begin(), llama_token_bos(model)); // always add BOS + prefix_tokens.insert(prefix_tokens.end(), llama_token_suffix(model)); prefix_tokens.insert(prefix_tokens.end(), suffix_tokens.begin(), suffix_tokens.end()); - prefix_tokens.push_back(llama_token_middle(ctx)); + prefix_tokens.push_back(llama_token_middle(model)); prompt_tokens = prefix_tokens; } else diff --git a/examples/simple/simple.cpp b/examples/simple/simple.cpp index 55385f566aa6f6..f376c050994d19 100644 --- a/examples/simple/simple.cpp +++ b/examples/simple/simple.cpp @@ -138,7 +138,7 @@ int main(int argc, char ** argv) { const llama_token new_token_id = llama_sample_token_greedy(ctx, &candidates_p); // is it an end of stream? - if (new_token_id == llama_token_eos(ctx) || n_cur == n_len) { + if (new_token_id == llama_token_eos(model) || n_cur == n_len) { LOG_TEE("\n"); break; diff --git a/examples/speculative/speculative.cpp b/examples/speculative/speculative.cpp index 894321ce9648cf..92ad27e8e423cc 100644 --- a/examples/speculative/speculative.cpp +++ b/examples/speculative/speculative.cpp @@ -163,7 +163,7 @@ int main(int argc, char ** argv) { printf("%s", token_str.c_str()); fflush(stdout); - if (id == llama_token_eos(ctx_tgt)) { + if (id == llama_token_eos(model_tgt)) { has_eos = true; } diff --git a/llama.cpp b/llama.cpp index c63e6251c76769..61f30c3982f184 100644 --- a/llama.cpp +++ b/llama.cpp @@ -7493,7 +7493,7 @@ void llama_sample_grammar(struct llama_context * ctx, llama_token_data_array * c } } - const llama_token eos = llama_token_eos(ctx); + const llama_token eos = llama_token_eos(&ctx->model); std::vector, llama_partial_utf8>> candidates_decoded; std::vector candidates_grammar; @@ -7703,7 +7703,7 @@ llama_token llama_sample_token(struct llama_context * ctx, llama_token_data_arra void llama_grammar_accept_token(struct llama_context * ctx, struct llama_grammar * grammar, llama_token token) { const int64_t t_start_sample_us = ggml_time_us(); - if (token == llama_token_eos(ctx)) { + if (token == llama_token_eos(&ctx->model)) { for (const auto & stack : grammar->stacks) { if (stack.empty()) { return; @@ -8912,7 +8912,7 @@ struct llama_context * llama_new_context_with_model( // build worst-case graph int n_tokens = (int)std::min(cparams.n_ctx, cparams.n_batch); int n_past = cparams.n_ctx - n_tokens; - llama_token token = llama_token_bos(ctx); // not actually used by llama_build_graph, but required to choose between token and embedding inputs graph + llama_token token = llama_token_bos(&ctx->model); // not actually used by llama_build_graph, but required to choose between token and embedding inputs graph ggml_cgraph * gf = llama_build_graph(*ctx, llama_batch_get_one(&token, n_tokens, n_past, 0)); #ifdef GGML_USE_METAL @@ -9673,43 +9673,44 @@ float * llama_get_embeddings(struct llama_context * ctx) { return ctx->embedding.data(); } -const char * llama_token_get_text(const struct llama_context * ctx, llama_token token) { - return ctx->model.vocab.id_to_token[token].text.c_str(); +const char * llama_token_get_text(const struct llama_model * model, llama_token token) { + return model->vocab.id_to_token[token].text.c_str(); } -float llama_token_get_score(const struct llama_context * ctx, llama_token token) { - return ctx->model.vocab.id_to_token[token].score; +float llama_token_get_score(const struct llama_model * model, llama_token token) { + return model->vocab.id_to_token[token].score; } -llama_token_type llama_token_get_type(const struct llama_context * ctx, llama_token token) { - return ctx->model.vocab.id_to_token[token].type; +llama_token_type llama_token_get_type(const struct llama_model * model, llama_token token) { + return model->vocab.id_to_token[token].type; } -llama_token llama_token_bos(const struct llama_context * ctx) { - return ctx->model.vocab.special_bos_id; +llama_token llama_token_bos(const struct llama_model * model) { + return model->vocab.special_bos_id; } -llama_token llama_token_eos(const struct llama_context * ctx) { - return ctx->model.vocab.special_eos_id; +llama_token llama_token_eos(const struct llama_model * model) { + return model->vocab.special_eos_id; } -llama_token llama_token_nl(const struct llama_context * ctx) { - return ctx->model.vocab.linefeed_id; +llama_token llama_token_nl(const struct llama_model * model) { + return model->vocab.linefeed_id; } -llama_token llama_token_prefix(const struct llama_context * ctx) { - return ctx->model.vocab.special_prefix_id; + +llama_token llama_token_prefix(const struct llama_model * model) { + return model->vocab.special_prefix_id; } -llama_token llama_token_middle(const struct llama_context * ctx) { - return ctx->model.vocab.special_middle_id; +llama_token llama_token_middle(const struct llama_model * model) { + return model->vocab.special_middle_id; } -llama_token llama_token_suffix(const struct llama_context * ctx) { - return ctx->model.vocab.special_suffix_id; +llama_token llama_token_suffix(const struct llama_model * model) { + return model->vocab.special_suffix_id; } -llama_token llama_token_eot(const struct llama_context * ctx) { - return ctx->model.vocab.special_eot_id; +llama_token llama_token_eot(const struct llama_model * model) { + return model->vocab.special_eot_id; } int llama_tokenize( diff --git a/llama.h b/llama.h index 306f5b383cb111..2f2fee0e2ff9f3 100644 --- a/llama.h +++ b/llama.h @@ -494,21 +494,22 @@ extern "C" { // Vocab // - LLAMA_API const char * llama_token_get_text(const struct llama_context * ctx, llama_token token); + LLAMA_API const char * llama_token_get_text(const struct llama_model * model, llama_token token); - LLAMA_API float llama_token_get_score(const struct llama_context * ctx, llama_token token); + LLAMA_API float llama_token_get_score(const struct llama_model * model, llama_token token); - LLAMA_API enum llama_token_type llama_token_get_type(const struct llama_context * ctx, llama_token token); + LLAMA_API enum llama_token_type llama_token_get_type(const struct llama_model * model, llama_token token); // Special tokens - LLAMA_API llama_token llama_token_bos(const struct llama_context * ctx); // beginning-of-sentence - LLAMA_API llama_token llama_token_eos(const struct llama_context * ctx); // end-of-sentence - LLAMA_API llama_token llama_token_nl (const struct llama_context * ctx); // next-line + LLAMA_API llama_token llama_token_bos(const struct llama_model * model); // beginning-of-sentence + LLAMA_API llama_token llama_token_eos(const struct llama_model * model); // end-of-sentence + LLAMA_API llama_token llama_token_nl (const struct llama_model * model); // next-line + // codellama infill tokens - LLAMA_API llama_token llama_token_prefix(const struct llama_context * ctx); // Beginning of infill prefix - LLAMA_API llama_token llama_token_middle(const struct llama_context * ctx); // Beginning of infill middle - LLAMA_API llama_token llama_token_suffix(const struct llama_context * ctx); // Beginning of infill suffix - LLAMA_API llama_token llama_token_eot (const struct llama_context * ctx); // End of infill middle + LLAMA_API llama_token llama_token_prefix(const struct llama_model * model); // Beginning of infill prefix + LLAMA_API llama_token llama_token_middle(const struct llama_model * model); // Beginning of infill middle + LLAMA_API llama_token llama_token_suffix(const struct llama_model * model); // Beginning of infill suffix + LLAMA_API llama_token llama_token_eot (const struct llama_model * model); // End of infill middle // // Tokenization From 69a6735087c3634963c642fd69f0851ac479cd78 Mon Sep 17 00:00:00 2001 From: Galunid Date: Mon, 23 Oct 2023 21:46:00 +0200 Subject: [PATCH 03/79] Update special token handling in conversion scripts for gpt2 derived tokenizers (#3746) We still have the heads up in `README.md` regarding `bpe` tokenizers and this patch is needed for - a couple of tokenizer tests - some more `special` and `non-special` added tokens handling (as far as I understand it) * Update special token handling * Add mpt --- convert-bloom-hf-to-gguf.py | 17 +++++++++++++---- convert-gptneox-hf-to-gguf.py | 17 +++++++++++++---- convert-mpt-hf-to-gguf.py | 6 ++++-- convert-refact-hf-to-gguf.py | 17 +++++++++++++---- convert-starcoder-hf-to-gguf.py | 18 +++++++++++++----- 5 files changed, 56 insertions(+), 19 deletions(-) diff --git a/convert-bloom-hf-to-gguf.py b/convert-bloom-hf-to-gguf.py index 14dbd793c84448..6e866d9434818c 100755 --- a/convert-bloom-hf-to-gguf.py +++ b/convert-bloom-hf-to-gguf.py @@ -118,15 +118,24 @@ def parse_args() -> argparse.Namespace: vocab_size = hparams.get("vocab_size", len(tokenizer.vocab)) assert max(tokenizer.vocab.values()) < vocab_size +added_vocab = tokenizer.get_added_vocab() reverse_vocab = {id: encoded_tok for encoded_tok, id in tokenizer.vocab.items()} for i in range(vocab_size): - tokens.append(reverse_vocab[i] if i in reverse_vocab else f"[PAD{i}]") - scores.append(0.0) # dummy - toktypes.append(gguf.TokenType.NORMAL) + if i not in reverse_vocab: + tokens.append(f"[PAD{i}]") + toktypes.append(gguf.TokenType.USER_DEFINED) + elif reverse_vocab[i] in added_vocab: + tokens.append(reverse_vocab[i]) + if tokenizer.added_tokens_decoder[i].special: + toktypes.append(gguf.TokenType.CONTROL) + else: + toktypes.append(gguf.TokenType.USER_DEFINED) + else: + tokens.append(reverse_vocab[i]) + toktypes.append(gguf.TokenType.NORMAL) gguf_writer.add_token_list(tokens) -gguf_writer.add_token_scores(scores) gguf_writer.add_token_types(toktypes) special_vocab = gguf.SpecialVocab(dir_model, load_merges=True, n_vocab = len(tokens)) diff --git a/convert-gptneox-hf-to-gguf.py b/convert-gptneox-hf-to-gguf.py index f1599b0c44e34a..02d1fdf164eea1 100755 --- a/convert-gptneox-hf-to-gguf.py +++ b/convert-gptneox-hf-to-gguf.py @@ -123,15 +123,24 @@ def parse_args() -> argparse.Namespace: vocab_size = hparams.get("vocab_size", len(tokenizer.vocab)) assert max(tokenizer.vocab.values()) < vocab_size +added_vocab = tokenizer.get_added_vocab() reverse_vocab = {id: encoded_tok for encoded_tok, id in tokenizer.vocab.items()} for i in range(vocab_size): - tokens.append(reverse_vocab[i] if i in reverse_vocab else f"[PAD{i}]") - scores.append(0.0) # dummy - toktypes.append(gguf.TokenType.NORMAL) + if i not in reverse_vocab: + tokens.append(f"[PAD{i}]") + toktypes.append(gguf.TokenType.USER_DEFINED) + elif reverse_vocab[i] in added_vocab: + tokens.append(reverse_vocab[i]) + if tokenizer.added_tokens_decoder[i].special: + toktypes.append(gguf.TokenType.CONTROL) + else: + toktypes.append(gguf.TokenType.USER_DEFINED) + else: + tokens.append(reverse_vocab[i]) + toktypes.append(gguf.TokenType.NORMAL) gguf_writer.add_token_list(tokens) -gguf_writer.add_token_scores(scores) gguf_writer.add_token_types(toktypes) special_vocab = gguf.SpecialVocab(dir_model, load_merges = True, n_vocab = len(tokens)) diff --git a/convert-mpt-hf-to-gguf.py b/convert-mpt-hf-to-gguf.py index 2d2fa2329dd1bc..70d154b3f5c01e 100755 --- a/convert-mpt-hf-to-gguf.py +++ b/convert-mpt-hf-to-gguf.py @@ -136,9 +136,11 @@ def parse_args() -> argparse.Namespace: tokens.append(f"[PAD{i}]") toktypes.append(gguf.TokenType.USER_DEFINED) elif reverse_vocab[i] in added_vocab: - # NOTE: wouldn't we like to distinguish CONTROL tokens here? tokens.append(reverse_vocab[i]) - toktypes.append(gguf.TokenType.USER_DEFINED) + if tokenizer.added_tokens_decoder[i].special: + toktypes.append(gguf.TokenType.CONTROL) + else: + toktypes.append(gguf.TokenType.USER_DEFINED) else: tokens.append(reverse_vocab[i]) toktypes.append(gguf.TokenType.NORMAL) diff --git a/convert-refact-hf-to-gguf.py b/convert-refact-hf-to-gguf.py index 934f3852b24188..f0cfe84d81c8ba 100755 --- a/convert-refact-hf-to-gguf.py +++ b/convert-refact-hf-to-gguf.py @@ -139,15 +139,24 @@ def parse_args() -> argparse.Namespace: vocab_size = hparams.get("vocab_size", len(tokenizer.vocab)) assert max(tokenizer.vocab.values()) < vocab_size +added_vocab = tokenizer.get_added_vocab() reverse_vocab = {id: encoded_tok for encoded_tok, id in tokenizer.vocab.items()} for i in range(vocab_size): - tokens.append(reverse_vocab[i] if i in reverse_vocab else f"[PAD{i}]") - scores.append(0.0) # dummy - toktypes.append(gguf.TokenType.NORMAL) + if i not in reverse_vocab: + tokens.append(f"[PAD{i}]") + toktypes.append(gguf.TokenType.USER_DEFINED) + elif reverse_vocab[i] in added_vocab: + tokens.append(reverse_vocab[i]) + if tokenizer.added_tokens_decoder[i].special: + toktypes.append(gguf.TokenType.CONTROL) + else: + toktypes.append(gguf.TokenType.USER_DEFINED) + else: + tokens.append(reverse_vocab[i]) + toktypes.append(gguf.TokenType.NORMAL) gguf_writer.add_token_list(tokens) -gguf_writer.add_token_scores(scores) gguf_writer.add_token_types(toktypes) special_vocab = gguf.SpecialVocab(dir_model, load_merges=True, n_vocab = len(tokens)) diff --git a/convert-starcoder-hf-to-gguf.py b/convert-starcoder-hf-to-gguf.py index fe8815cbf6f474..a9bfed85e31bab 100755 --- a/convert-starcoder-hf-to-gguf.py +++ b/convert-starcoder-hf-to-gguf.py @@ -111,17 +111,25 @@ def parse_args() -> argparse.Namespace: vocab_size = hparams.get("vocab_size", len(tokenizer.vocab)) assert max(tokenizer.vocab.values()) < vocab_size +added_vocab = tokenizer.get_added_vocab() reverse_vocab = {id: encoded_tok for encoded_tok, id in tokenizer.vocab.items()} for i in range(vocab_size): - tokens.append(reverse_vocab[i] if i in reverse_vocab else f"[PAD{i}]") - scores.append(0.0) # dummy - toktypes.append(gguf.TokenType.NORMAL) + if i not in reverse_vocab: + tokens.append(f"[PAD{i}]") + toktypes.append(gguf.TokenType.USER_DEFINED) + elif reverse_vocab[i] in added_vocab: + tokens.append(reverse_vocab[i]) + if tokenizer.added_tokens_decoder[i].special: + toktypes.append(gguf.TokenType.CONTROL) + else: + toktypes.append(gguf.TokenType.USER_DEFINED) + else: + tokens.append(reverse_vocab[i]) + toktypes.append(gguf.TokenType.NORMAL) gguf_writer.add_token_list(tokens) -gguf_writer.add_token_scores(scores) gguf_writer.add_token_types(toktypes) - special_vocab = gguf.SpecialVocab(dir_model, load_merges = True, n_vocab = len(tokens)) special_vocab.add_to_gguf(gguf_writer) From 9d02956443e5c1ded29b7b5ed8a21bc01ba6f563 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Yusuf=20Sar=C4=B1g=C3=B6z?= Date: Mon, 23 Oct 2023 22:57:16 +0300 Subject: [PATCH 04/79] issues : separate bug and enhancement template + no default title (#3748) --- .github/ISSUE_TEMPLATE/{custom.md => bug.md} | 9 +++---- .github/ISSUE_TEMPLATE/enhancement.md | 28 ++++++++++++++++++++ 2 files changed, 32 insertions(+), 5 deletions(-) rename .github/ISSUE_TEMPLATE/{custom.md => bug.md} (96%) create mode 100644 .github/ISSUE_TEMPLATE/enhancement.md diff --git a/.github/ISSUE_TEMPLATE/custom.md b/.github/ISSUE_TEMPLATE/bug.md similarity index 96% rename from .github/ISSUE_TEMPLATE/custom.md rename to .github/ISSUE_TEMPLATE/bug.md index 8fd95535677803..d7879b232b54dd 100644 --- a/.github/ISSUE_TEMPLATE/custom.md +++ b/.github/ISSUE_TEMPLATE/bug.md @@ -1,8 +1,7 @@ --- -name: Issue and enhancement template -about: Used to report issues and request enhancements for llama.cpp -title: "[User] Insert summary of your issue or enhancement.." -labels: '' +name: Bug template +about: Used to report bugs in llama.cpp +labels: ["bug"] assignees: '' --- @@ -46,7 +45,7 @@ $ g++ --version # Failure Information (for bugs) -Please help provide information about the failure if this is a bug. If it is not a bug, please remove the rest of this template. +Please help provide information about the failure / bug. # Steps to Reproduce diff --git a/.github/ISSUE_TEMPLATE/enhancement.md b/.github/ISSUE_TEMPLATE/enhancement.md new file mode 100644 index 00000000000000..dcffda7500f527 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/enhancement.md @@ -0,0 +1,28 @@ +--- +name: Enhancement template +about: Used to request enhancements for llama.cpp +labels: ["enhancement"] +assignees: '' + +--- + +# Prerequisites + +Please answer the following questions for yourself before submitting an issue. + +- [ ] I am running the latest code. Development is very rapid so there are no tagged versions as of now. +- [ ] I carefully followed the [README.md](https://github.com/ggerganov/llama.cpp/blob/master/README.md). +- [ ] I [searched using keywords relevant to my issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/filtering-and-searching-issues-and-pull-requests) to make sure that I am creating a new issue that is not already open (or closed). +- [ ] I reviewed the [Discussions](https://github.com/ggerganov/llama.cpp/discussions), and have a new bug or useful enhancement to share. + +# Feature Description + +Please provide a detailed written description of what you were trying to do, and what you expected `llama.cpp` to do as an enhancement. + +# Motivation + +Please provide a detailed written description of reasons why this feature is necessary and how it is useful to `llama.cpp` users. + +# Possible Implementation + +If you have an idea as to how it can be implemented, please write a detailed description. Feel free to give links to external sources or share visuals that might be helpful to understand the details better. From e3932593d46c30145301a13097895f9376cba509 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Mon, 23 Oct 2023 23:46:05 +0300 Subject: [PATCH 05/79] Revert "make : add optional CUDA_NATIVE_ARCH (#2482)" This reverts commit 96981f37b1e3f450d9e63e571514217bf60f0a7f. See: https://github.com/ggerganov/llama.cpp/pull/2482#issuecomment-1775975866 --- Makefile | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 705c4acb4a0a98..80179631f95a5b 100644 --- a/Makefile +++ b/Makefile @@ -391,12 +391,9 @@ else endif #LLAMA_CUDA_NVCC ifdef CUDA_DOCKER_ARCH NVCCFLAGS += -Wno-deprecated-gpu-targets -arch=$(CUDA_DOCKER_ARCH) -endif # CUDA_DOCKER_ARCH -ifdef CUDA_NATIVE_ARCH - NVCCFLAGS += -arch=$(CUDA_NATIVE_ARCH) else NVCCFLAGS += -arch=native -endif # CUDA_NATIVE_ARCH +endif # CUDA_DOCKER_ARCH ifdef LLAMA_CUDA_FORCE_DMMV NVCCFLAGS += -DGGML_CUDA_FORCE_DMMV endif # LLAMA_CUDA_FORCE_DMMV From 469c9addef75893e6be12edda852d12e840bf064 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Tue, 24 Oct 2023 09:46:50 +0300 Subject: [PATCH 06/79] metal : handle ggml_scale for n%4 != 0 (close #3754) ggml-ci --- ggml-metal.m | 18 +++++++++++++----- ggml-metal.metal | 10 +++++++++- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/ggml-metal.m b/ggml-metal.m index c908106be5e680..c1901dca75269d 100644 --- a/ggml-metal.m +++ b/ggml-metal.m @@ -62,6 +62,7 @@ GGML_METAL_DECL_KERNEL(mul); GGML_METAL_DECL_KERNEL(mul_row); // TODO: avoid this extra kernel, instead extend the "mul" kernel to support broadcast GGML_METAL_DECL_KERNEL(scale); + GGML_METAL_DECL_KERNEL(scale_4); GGML_METAL_DECL_KERNEL(silu); GGML_METAL_DECL_KERNEL(relu); GGML_METAL_DECL_KERNEL(gelu); @@ -249,6 +250,7 @@ static void ggml_metal_log(enum ggml_log_level level, const char* format, ...){ GGML_METAL_ADD_KERNEL(mul); GGML_METAL_ADD_KERNEL(mul_row); GGML_METAL_ADD_KERNEL(scale); + GGML_METAL_ADD_KERNEL(scale_4); GGML_METAL_ADD_KERNEL(silu); GGML_METAL_ADD_KERNEL(relu); GGML_METAL_ADD_KERNEL(gelu); @@ -347,6 +349,7 @@ void ggml_metal_free(struct ggml_metal_context * ctx) { GGML_METAL_DEL_KERNEL(mul); GGML_METAL_DEL_KERNEL(mul_row); GGML_METAL_DEL_KERNEL(scale); + GGML_METAL_DEL_KERNEL(scale_4); GGML_METAL_DEL_KERNEL(silu); GGML_METAL_DEL_KERNEL(relu); GGML_METAL_DEL_KERNEL(gelu); @@ -923,15 +926,20 @@ void ggml_metal_graph_compute( const float scale = *(const float *) src1->data; - [encoder setComputePipelineState:ctx->pipeline_scale]; + int64_t n = ggml_nelements(dst); + + if (n % 4 == 0) { + n /= 4; + [encoder setComputePipelineState:ctx->pipeline_scale_4]; + } else { + [encoder setComputePipelineState:ctx->pipeline_scale]; + } + [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; [encoder setBytes:&scale length:sizeof(scale) atIndex:2]; - const int64_t n = ggml_nelements(dst); - GGML_ASSERT(n % 4 == 0); - - [encoder dispatchThreadgroups:MTLSizeMake(n/4, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; + [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; } break; case GGML_OP_UNARY: switch (ggml_get_unary_op(gf->nodes[i])) { diff --git a/ggml-metal.metal b/ggml-metal.metal index 69fc7136279ad4..f4b460564453c5 100644 --- a/ggml-metal.metal +++ b/ggml-metal.metal @@ -125,9 +125,17 @@ kernel void kernel_mul_row( } kernel void kernel_scale( + device const float * src0, + device float * dst, + constant float & scale, + uint tpig[[thread_position_in_grid]]) { + dst[tpig] = src0[tpig] * scale; +} + +kernel void kernel_scale_4( device const float4 * src0, device float4 * dst, - constant float & scale, + constant float & scale, uint tpig[[thread_position_in_grid]]) { dst[tpig] = src0[tpig] * scale; } From daab3d7f45832e10773c99f3484b0d5b14d86c0c Mon Sep 17 00:00:00 2001 From: Galunid Date: Tue, 24 Oct 2023 09:17:17 +0200 Subject: [PATCH 07/79] Add more tokenizer tests (#3742) * Add more tokenizer tests * Add starcoder * Update test vocab files * Restrict bpe tokenizer tests to unicode planes * Update comment * Comment cosmetics * Remove bloom vocab/test --- models/ggml-vocab-baichuan.gguf | Bin 0 -> 1340998 bytes models/ggml-vocab-gpt-neox.gguf | Bin 0 -> 1771431 bytes models/ggml-vocab-refact.gguf | Bin 0 -> 1720666 bytes models/ggml-vocab-starcoder.gguf | Bin 0 -> 1719281 bytes tests/CMakeLists.txt | 4 ++++ tests/test-tokenizer-1-bpe.cpp | 15 ++++++++++++--- 6 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 models/ggml-vocab-baichuan.gguf create mode 100644 models/ggml-vocab-gpt-neox.gguf create mode 100644 models/ggml-vocab-refact.gguf create mode 100644 models/ggml-vocab-starcoder.gguf diff --git a/models/ggml-vocab-baichuan.gguf b/models/ggml-vocab-baichuan.gguf new file mode 100644 index 0000000000000000000000000000000000000000..7caaf8239b052b1fc2f2b74441fe377a73758bd1 GIT binary patch literal 1340998 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%0Df9CiGWSWvwKRA0MzUTq99}Y! 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μTLDX)J&O=- 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�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 z2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8 zXdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEa zhz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p> zfoLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~2 z8i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34U zqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvz zAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh z2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8 zXdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEa zhz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p> zfoLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~2 z8i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34U zqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvz zAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh z2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8 zXdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEa zhz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p> zfoLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~2 z8i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34U zqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvz zAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh z2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8 zXdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEa zhz6p8XdoJh2L8V`kUqixdJP@Wr(6GCqq_~x-=jyrzWF;37}DW?e$=5?*ThczkK6sf j9PRf1IGWJWjQ{JV3H~2<9oVUB*Ixa5{NL{UKTiIikumof literal 0 HcmV?d00001 diff --git a/models/ggml-vocab-gpt-neox.gguf b/models/ggml-vocab-gpt-neox.gguf new file mode 100644 index 0000000000000000000000000000000000000000..b9af16845ccb4d4888c15f1293b1f47291928412 GIT binary patch literal 1771431 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¨w^u|SfVLV2eQ+VbduRirHeG>qaq0wXdED4SxrUcG?CO`_Bd2hL%(2q zR&~)3l2M%1+l}*~d6fJ@GFk@*!mOkkr?SfFN!wgEVY;Rza7(O_(vgJp%=yQs=X88l zD@dl|x#74(j^!;w$YTUE#2`3gk6bknbNdHo1sX3Elae*k)O;q<7Tx-->iZ_E8uN+Hpu?eu#dln2^W#-HPtBfq4;6s@2D&kGIufgN0($t;|)Gxs{$? zbxe=pcTpG3g!l)#XhV(0+|H>RU4gR14UqpnD}=mj-Bj|2Q&lVAD!=O9aEF%i zF?yp@UW`vay!iVkADIr2K~;aeXoOQcc14Z>W~UlLQN6jw@FNrnN!iZUhs1J$+vH^E z%|W5om7nWJ)2JR%@H*L?7E#_X6v1l5Lp})Rn4bE4{J6PUj>MgQp|m>u9Spr9PDM)) zO8L1{u+j~x5{y5}9*#H;Od}AYGA6wmU1|cLT4KwQ(FHF26j$VMhpWRINd*jJa8xWD zV7wt~$Y5@#T=oYSKlV3I`=tGPhq-!~P%slaJkC0<&F5Br;}E7B3a=CTEOIz_V`*N= z1SZu3D%3S>lK;f9&~oiEI%?V7zTrs$d;X>CkuUW4Us~Ki-;Z@S5Sh;!^>`kcuTZzsfJtz+g==ehcb^#XfEgfspRwj?qB0gIMxqSz+nWxA2df4 zP`x}Jldm&7)+sK?zhC=9RGwIi8lvbvtb_j0OBeJ+krpqGnjoLX^T^elf$pZ_d302I zJdHUzV94@nj)1&1aZtYUhjtjj<~V~tbyat1BgxC(dGgyhx1_hnpHUji^@m14C7(Pk zmx3u+0SlZD$1#EZR8`2igq|@ZRrND?Dm!{BJ|L7^{8hC4@WStq8$Xd3g6Xe|Aa()c zWmKeL^9{H!3p!;bl&Xc&4#T_9!jaO+yj9#iB$geN{8f5ZP9A9ZG6+UalMg;%Y_=hY za_K_|&Z2k~AI8HnvBfX(sd7rsQad9pE!mFHVxRuuc?DCZ$6wmQ@QbN{+VH{@V#gtF z3jzp7-uJUB>n1QF35UhQagw9CKxmv#0A;g1|3BH-8)J zRtpfpRAT#N{+1Stgf`RlLAd^dC!gs5#(K#?ht2BLi3!+G(LXQVXJvZyYxKOciU!5p zAwyoMAT-Wk+}?xu=~mufLZhU;LI;S1V{%*L zT5ldc>Xm*WRPp$_X zZ-|~49_!}s{N)Yl@&yEo%|V}#Nx{2}{ElyPj$XAa#Lz%>+nuaPqYJm6Dz)OsMKf3B z!FYRv9|D}UqyPjf1ZDA9D9(=$@VNNc2f$GWsiosj%E~F-MG}g=cboaI*afYscnXg?&`_rd$|89iEg+ ziogTPQd<5B3uioFa8#;scZ#o*=E!|w*u2@{Nnvix<*gV5Q;#*1{mE~pAsLn@*&k=K zpIXT6dEZ97lbZu0Bevz7b6{FgxH~=osb5YQP-K1?!H(GwO*e~p|0q7OpU{xKm;Ypu)bjUshRX#Z}*c2=sXp?f|5ttKs-J; z$}+F)!FTzWO}2hyiOK5IP+oK{9T0*_!nOU2Ucus&VBj;SiwPY zqyGnW0E}0V*<}}#z;5Ln02kw{wG7X?3XX80?B;eWsRuml@hZavB1HtVy6#VFPX;zha3>>poH8;>O0>Myy0=#P~o~Xx7?UZ@~|LPg!xD+Q9Vx;wk*SM-NU7&vV9NY2q-LYYdjJ|? zc5UdqaU2$8yYrbF1&n{zN2-!nCMvf(vTA6KBf$PrXkFx;9_(0lnCCWF4s zjuzIy;z+lLQ1S;831Djv5$zM(ec9Ox6C}oe?ycB(q*~_KeesKC65gsB1I(!^?lPq@ z7(F>SzJ-kADga*S9qyge6*Pz*et#?a(DdO|o^)biE&Jt^Q+~H;OHnBydL|#>3 zD5_OUeN(BN<7A3^_?8@LxUPTDUSLmMMtAc&o zcg2dQA3pgw2tkX?+Bs)lz5mtK$8e)e)U;}TpBm;p zCAJ;(THGvBejd+xP>5hiox_GK@p!{2;?!Jxc9<3+xTTm8(cHq4Tcd~GR>1M*XXHID zt%=TrtxSYGJgI<5@W;f+yz%ur+OlHZkSjivs%irQCH<%kLC9&2aTMk(WN$sM%E-0X zF)r!?OHfiNE_q@(EY}!+P(rVQdFx zVLaX6VlAE!WwY4NufDP$t5n{SrZ@Vx%<(NyMEb5R^n^6Xa_mUUVjKep>%0E(l z&>B32#T}*VnA&F~pKZSw7wGS)ZC9_?SmL6vaq)|M>S;&;(@9-anqh^8kf%#oHnTd% zT+rQml|U&ZR0%uo05Rd33-T#DyE*vd=%F^gcky8yGIe!`pP5M!0i^mTr=#3fmrj>~ zo7;yOF!OoS4y0(&#j%5`dIDEA^*u;?S+gPJ(N=+V>Q)-;%mvZ^#Ua92rfdk4lpd(; zJo(Te&oCWKJ6V$8KH{smvJwT1H5p&ocSjpKpcbJ;zSUvYOrhKNFP{E4(+Lm>`lNqX zbt4;fN(JzHPn?{iqAxKYEYv&}bik~Kmb##Mgrp(2Bx*At&6Z*dh~uF4=KAM`r7erB z0#0uYPN31KTNtw4qs^~pb{5y_Y)lVVgK7 z{^<)|`Kwb?!3C5)_bcJu)0F4b7_V-tx%rs0a_Wy$(k`~#>!1X#)e=v`rJoYx`todE z+k#kFwt_R|c(op#F-6YbxCjICG9?&;!#5BX&2+BoZ54=lC}v4C2WcK_L%8Z@@k@8k zPgTFFI&=grFk{aRP6%K44a%GET3GlPUK*F~08g8|c)#)rT>AhMZ^FEZ+H0{S&IJ8Q zN;i#57e~+)9x4S$1iOlrVFM6QP2I6~oHxIG8z}6hXci8ymh$Si3SvEhG^BWn0|^Si z9OlpjGEEL`G;u8!6;s5n`BChjQhti#q1P{Wyx7$_8zW{=1RLH?z@S*{!Jl-aju+q# z+z9HT(eL-mk*5-b{D~Do*J|_?7f$<~B$}9GD`^_1qnCj4N6$Wc*E>wyk6;1ciWd`2 zn(%TF?5m(Ul=XD);)I4g`9A8WS2#uoBjN$SEKxG%LJ~9XRb!(WJytW6a74zlfi}W( z-dA|VL$p+aLI>PFtxSe(5Uw+&JQXPcb&Di}$4W4e-Z2mi# zq(OCQ5v6L=34ZzFs+6Ke)@JTLHn;hFRn}*W(*P7EotTR1_r}bs+!Y&TPRAfrMp4ZB zn=b`h-I;LbUms?<6H-IU*#SQei&@=@lCCBgLMd%Vxw&Gh6NNctc{0sl@3-AKYpIvO zXTfGb%@=3tacu}eQ?KesnlBw^xaZy;m)iEazVIJlQ^Y)bi_44io3VJR4t_R%29i>? zqLts@x7U~xhtSQ?E5=)qrT`fSCtW(OMMPw1IUQ-~#%d6SeIArdEVcYosZ&T36D3J( z|GWT-$x!Tq1~@0o6zUmPn4O*$SOKxg%j-esFFun+=H+TZP#6LNVA$i4L}w<$mvUHC zZsjIP>BuXRgltFtkcAc3vMgM4tfk4yX(c>jQjc?+pxn?R6Q$8(4 zB~YGgAs!S5)Msmntw9Esv){ZtfmWpqclrukn?!12?(Ajg@Vgdk4P%tPfxxZKf_Ox#s7qG~8pE`t68P!5Mh zW}rQl>J6wMh3FeigK?Y3{giT0u*PfA9 z0IOPs0!^g6?3%2%I3@-dJFliOC}}0$K((k(VsYGPKets64__+K4HPg9iOU+ZvEX}LUH{Ky&SB@+vDi7~w&W8FDZA#%g7l;uFlr*kg)o*3`14 zqf~~036%)SJeN9Pvp8CAdAbztz_W`1h_a8!7* zr&0mRqV{;Rt&Dj_WwEMed)9>3X)ZcM1vCgn23xMLH8BqsIv!9sx8T*nA0S^r@iVC| zZCdqGBC5k0E0l<;*=h?V)#}#MkBp6?{Qn;W#gE4suSKOSz=qQ?D)3H;hqt2&94R(P zgfEksr7o#o&P?!e`6}9?Rsf1vsu4?@OKYqC_%anbB``P6Up)DlnFL(PptL`~Y=-2W zfTI*FiKz|Ie$&Ud#~#E75>g|7tyA?&ytp$S7|G8Nm=ue61hi=%j@sZwRlI6VT>KI^ zdgc0xZEj`BihFZw0OT-E(^m?{aIRlcM>EzNfkKNg1=V3;=yV?>V!gnnQD^ zaTxqn^iNz_>`DK)oExG21qFxgV#TOZVR4J(AjagTkW2|6dEx2lQP_!J?e0mV0 z3BFih`pCxJ28t+07q%k*m~&H{h+UI1{n5~McyWZzLKpE;VooWse%Eo$Jp-{OG?FKe z=3H%%QyjywfW3orlS+mC28j5{^gZr{1`P6eB#fON`xZm~>=3kYGm80r^r7S=!5@o! z=^6>)F7ZBMTGJ9L85uvwa?EdkSbT5@+dRZF{bI8?Mekjd6w)^+`{^FqxBG=dT#eta z7he$-^r6=JJ%3_G{X~#)+w*ihieLUf7l+5fR}UX$F%Wtq2GeY2O0MS$JhcgwJ?6$t9}MUk8I)XD+K3(GVpme0pZpr$ zA`@(C=H=k5m9@oQCb|NM8s>5yJrmE+ZF;*vkw^jaz|;&t1u%KKMs4K}Bwg%N-6O_Q zGR5a(nxMOt(C*QQ1tR)A+S2KPP=G;8+_Gayx*~{(lTBF71lM+wg*M5hc_!3Nb>I3Y zBS)SUPL^tgoeuWeA@&;PYJC$TMzLAkWNfK_BWRSS1*N1)4I0j~{gv$w^`aPfIdA`JZE@4P{!_Y63Ssu}p9i)!oy@YnMk(WwtA}lq3PFN7|+x z_Oq+NQ6eh@x>8C<9EmUfp%=)lt8}{{B8s`|`rIoq0!1zRc>oFVB5CY!Pz5bHh=S?o zT-2?hLP~If02`|_@_j#pQn&`^)h$m)`DWn-zyi10&-lM1w8T0qc2*-;A;WRBPV4! zU+^P0Obm$gz8cxkk7_47S; zC&;1>RMx10_621D&i_sP%$O-c&@azY=v}>XHJ%wBR4juUGusYT9z&kQi^tFAmnc)0 zFQkaW=d8&I$0ck+At|sT#mLal6y&x0uEaeIMo9fnHcOz zcy7EEaks<#-3oJs1X2{7nabrt9gdfFUPVKd%~j_4<$+g?q1qm5x2i^H>b1||J} z#2JA)j*XxvPuP0%=x!dlHG5*8%wM~BIzA~19g3O~Y`9osYP4yHA2Ag@)(UY#H0}&` zP^TC0qDLmI0ee~PZWlyUHVLxcAS4a2#x$SB*KDRa=x33()|*8|QQ|DXfQeYdl`@-w z6725~1`7our?fTCjvxpsTZ~0$U@GQ-=cXV}1a9=VxRGHO%P3A1U}BE={o=m@%1l=Q znol;ZFkV4z#;YNiLT`trX&oRB`ok5N3 z`;&M#S)RVjNLu-DUuE*UL1_{b^eM&q-RZXYFL%3*R|?P za70Xs^wSjVsKQ0*Cp}SFo$;cEq)^(RrD}`S)mW-5v|@3PRmli`zP0{4J9pTtmCcBK zy)2Sl6kkptCLVkcyTd(8VdbKUx6H6q65I7}DN-~jd5`4FT(!FRPpZXLk^KEXdwK^d z_~pZiw4<0nbx|(S6TS*)ykYq7%DuHwuqI${wA|R)>6zEfhUol69|c7TzQA$%>nFdC z-w+?XD0cbj2N&P>EWxk3)YG#R#PdhZ3mo5)CKbD*Y#_l9{phkh3&9=u<5dsd4i)M| zsW4e`Lzg<&FHn7At0qn@RCZWDh^RF(sHl0;iP z+BVTTJeTa6AQMLR|8?r8pBEH%PY*P$49+}Q1M0ln&r@{v_3#M@7lQ411e`wvXYK8 znOpybFQ*OF8a}97bNo+GR6d|w9`I;<*+Eo%6tsKp{;%KC;TpNoW0tJox|g?#>xz92 z!eAmO(&Rl^C0y>O=@2Wf@EgHRJNM(Uc0<%WLA+|MxSh2x z6j-a=Lv>v6NGr9gG1>mjHxwTOJ~6oVD|h3SvI~e6n=Yd*nXN3w8>B2hm-?0Bkg3?* zhv~D>#uksPAl@KU)4PQFdfzUuPVH)kqOby18oHCoNG0^MiINYq%gg0b6{;R5GEtyd zWm}G)5RL^!Wx)Lt2WZ&OWbgklE*g*8-^v~3Ev81pOfUyo4e4+s)S!ACG2pk}{j90i zHCN%&m=NOOC{Ox=Q4%YyIfQAMj)ghzlyW|tJ#rf+Or&1Vlh_*UV|x^t z4N;4uVw>bs>J@pRE5zSpz8D-;)}!=&u>NmyBV9c9gq4sB;H5TNAIuQ=N+p7>u;vN*0O@eXQ1We9OtVRk&{+YtL)L_>nX(dMUfez3qVsfTY0X8qA+b zA5HB^Et}&T+{M5A-Jj=gA6)$A$wzS^{OJ`lCffp{H)JUwJe354%tqVJXFv`HNz+_3TqqrB0Gir+6%c2DNB?^cOcmVB9(> zx#3EOQgTGhmMrbbwlfz$x6tGklDxyeWEFCu)>@LW!USS4u8)cw=z0U$`$B0J#|}r7 z%gT_9YV9Pa2*zkEAbtxBqKCyH!dukTN-kCtV-`?47P?^yt4rPkTy_P3v^zq~Gi#?N zA1hXYesRuuX4s(T=FPW* z@yk{9ij8-Zcfalhym2%t0VgVi`@G;U0?8j=dloRezqZ=Hp8<6mUwRr`Q7Xz2Z&r3+ zu_(a6pWO2aY`xr-dQo;rSq<^d5x6VQXO=VVOUMA`^MmRfTfne++61D)fS)NMI5Nt12h+G>U7B8;UNlsY_r?*mrc2b~K zNCutmOI7zw$uKM^^3h&D0B~sW-}&8l^v^%V{tGeLqE0azT)GIRSk+)${A;Z)baeL&i;v4txGQwsRG24%6)9rTPR)Zd9R7K7ykn|l%}zA87OozP$5X)* zWHE;3gW2EYoS*2`^4)acoiGRSwdA!@Z_E!|{6x+?Zys5bL{m&EC7?{m56<^{7k?A4 zmnK>qeR%9ig5kK7tRO}E&>x{h%kc1Pc6#z%5aOlafz&Sp(VYJ45Mj@LvB3HwUf7C_)~KJR9A!jzsa)f3R%W z9-d4%;&E$q4fGhlS{! zs|Lcv8r1SBHC4{oY2;**6`(F3#ASJh7=qwXu?vVib7{tB z1O$jRnSSedB(#4%tVa@P;|w~ij7uRlRO&98!hL4SP!x!;Lp>#}PPl+4L7TPSW(XCO z#b5cm?J$e@w{Dr}DAQu_tp}L}xWYl??-S!pUTtk8<0GU( zsgAAMhsh{6t|xRt5}(uI6U`>bDN~7!yDx3Vi^p%hXln1CD5w|broV-8ZSEYYKY}~F z&K8H_u_|}xMZ9!$Kel}Hdi=DXA))oEGUE{{EQhjCS#0|C*Itk1D=JehnFc)#D$dTe zPLc5|bVsQwY6|%O%cw%EjcTh^)OSHMZnJnD+Q)x=^0VNR=~uHlkZ!QFO#6yd=IQ#* z#rI-(RE++vr?bM#O4|Ic?itysL7chV%B9(5k8#{j2hu)8q0PtWoD`^cc|daTThRt@ z7Exx>Xj2yicTi6H@CenWTzssavOZ>mQ`{oeOV>kp92^$fsBCjg6Ai;bC49?WirezP zfiolsjR!Jqj1D?y%5)W+s{>%Z1^7)FRGqM1=T;k0ZG4TseG7bm#HmMz- z2|Z?}L7mP_HX(hGex4g%Hok0+*c*%AFpIR}#W5&WPAMKP=O&6#-pOL`L(47hdFdH4 z89ZET&tzX=6WqIMDW=JtXVt8XRQ7K=nv=i za!wMSzDRCrJcWSb8jQC|Y~=YDvVz_5llv&+W#e{tDdthUo`A1(i^QCSXaqVi5_BRC z)(c+_8X)?A5+lo5F<~1~uP#2LY#=W0IQaKnrA6WES4!7rf*uW?X;G`BdO$5lX;H6D zc1ZeKZ*A3+1(EbA824;?T&Jd|eH!t|;ivM}wm5ezOO9KAr0P2p*X zu5|Z-_ν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

t0k_GkeUrcl*cFy2sI@c%#8zs;TOD?| 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

!yQPr^4O0`1k!ZTL z8w^iDX0nP;I)U^vfWKu!#LyWx0RYRh%SWU^i?j>`pWR!5nS+N)JOtacT$3Lk_ZS0S zEo-*&Q4p9sNHG1UzRVbb9vN<)CIi99Sg0n}#BX5-emWsHtnB`w1CeH%j;No;FpOF| z76fTN6a$$aSny@h69xvc>@5!x67%ZqqX$c7Oz2j#04roR zUJqzftLwR(#k-yWWhO;0;)oK1RwWf%a5E{p1DI`&lhI9CD`BxC�j^;2Xg_RK9U@ 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%0D3PD7D1=B%t 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

Q5O)(&N)g@nEP3TMhL5+cMkQxsG5XL8W~Xo7)* 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 C$dsG_ literal 0 HcmV?d00001 diff --git a/models/ggml-vocab-refact.gguf b/models/ggml-vocab-refact.gguf new file mode 100644 index 0000000000000000000000000000000000000000..8f26cfb76c9f287f5ff06bf0445ba9ac363f11e8 GIT binary patch literal 1720666 zcmcG%372EXl_n?btp(QgX@6VzH{-9?y)6RV5)akyQ|L6M(EDo2)KA01uh3 z3cv%gWLA@v&~2c5Zj`(Qz{B#83W5U;5I&zxZUUm$&cUZs*g%#D@Gb{`t=qpGYQ?bTG;C z!G*&#=`23_U;OSzZ{Iz#j{gPxv;28a_mY!zbbFAG`nN~@@$Gat&U*R4aQg12%m09D zK-_n;UV3|SGECVo7iW^+O$XUa>FC12LBDsQpLf!pEl$8C{(CT-{4tUK(6iy=_}{=o z_QKcxU;GPy|4#XzFJ1m-I_TtGTb^%T<>FrMX8qekEO>Tr@wGaaY@5a-vJ!b>h zU-@p*x%zLGpY02*JIKVpIXJvMo+P93RY8%B$I~=?Il20G_+t5GJMZ_gN>~5ghraIR z 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

rh|14 z5rnFsTiiB2Z#i*Ib;A~gy0pkr-}Wp2qts;;yPgF`Ypk> z#P=XG5JWR{inaHgF#59KKwaU&!gU7)ny*54^RP#FjCR<4GRz3pH)KpZdrz$a*-` zI3dWckY4#5MsXW|))o~F4`r@{;go|_)(8>KVlz(=BA`gVlQQ9*uXHjFRW*Yckq6_K zZ*^n-k)0bRNtYtA{MzgA@+jkGS@O$uEhUs^0yIXXiDo=A8!kuQ$|LJ1m@U8G$+eL) zh^T~m-GXGjr#9FJKbfW0X9R}J!Eu~NuNXHcHmV!!7sup4C-6WLv03yy0Lx>tH_|SL zg&cb5CV2!#I$>k~9ci(SWqzFw<8Yi_*5WG85zn5}d-fdnv-vqqEOUqa6$K2y93UX+=YjS!qq-oMELw~WeJ^!gIP2krv%fNN3ZmB@WO2A@ZNzvoKuR{ z5&VzLdQmPcc|;-DNRVk~go@Ovzc&!m`ne$4uHK4R*O2)ZdTv{9{- z$U5Tt#q3#!A9e?L0VC8LraIU6U2-{)9EW4}*W^g%Sq{cn?i0+*&T#)Yp1?;(5O!rF zhRW*^FcTeNmJo#iGD1^!@33OqMb3}q)$=|MpW_+Uioq8`&10 zhOI)|vv!TkW?n3g*)Me-!W#CZXs5c<P*aq+jUNgbva8vY+Pef8O3B0!qbR z`x9PD{GUG>Jz`C`^3`Vu)zbMTHj};+)f>ep{Ce#AR7ILqZHry4r6}eS{yv-2u$y!s z5gVeUOhz!DnqSXn>B4I%nvk}O*?fgL@Rp`(2993Ory6)Qd(5DA@|8}P4-HC#1%WGO zQi35a^6`mGeY;wQv%fB0*(UAG}iEi6yFkAV@<3lL=?08itg-N3J>-L$JSexmoX zSUrL2>Ql$!#HUAFqH`lmfxxY^6q4;NL|}_4&-F{f+I9&eKZ4_h#T^NFPELkm!JMnQuT{gf_ytLB1O4jDa#wSg)?|iEAbUasbG)QvEZ? zlYA&O3uLs#BLfb5^ze`=2#Ki9$059xAEB<}@X`=gABk`qDSL=5kVlxHKD|mf;E8jS z6ckv^b2@=rpIx;BhvNG^kOc8GN@YV>mjf+pk8%PC?ZK?+oYeT3Bg2^M$^*Qu?7gvL?Xkmusoa)&$D-mvVF06I|p=-eTJV$~dE~T=r$_uh!P3Qx!hP1^Q z!e91tcKr>r3_4a?v8f7Yh2S^0??B{i)}?-g%)m?7B~EpB1-3kGXcYNl#xN-eoCl}x ziOB_bmOHeD*ihatTqFDdPj9NT5+;1(VV|rym~#0@W7;BbwD6`78^zy-Jqa)yHGaA7S&bW6#3QGW%Q*w{S8GMx z6nVjeWWiB&ewZ_stF#}-nv5je+mWS{_xb1fbTRV?!8jNamK6_9f-gY~8$8FIwF&E`Bo4j|XYO zdbnU~vj_>|d_8C;9Aq9^vmV zoR6ZGBI!LQRlbHJov(G|X-96k*Kk`jm8 z@qAC%*!k`9>IFXBgi6h}6~QG6%!>iuO;|T;`~ixKS@FL--=ZEx`PnT_<=8^g*xQ~c zF_g#U_?GbD3l0-s2;1SWFpn$Zai_v>&)z8H62vBfHI0+Rk-&%g@C*=;mMt}ZfWdHu z&+oZaqwmp9K!XcX2kP0ejgJ?fA=t zFr`dxnWHSSKnzd^nR7z$n=ii^u88PO;b|S;^6_hyg~q)z4w;So2{wpqqD-0vbCcQf zNd!_8y~%xus0*;}XY`(r`OZBYGx=n5*ck}?bZD7qK9r}}nOvl! z81(odfxZzXYu&O-9w`k`=Op;Fj#KE%qS!iUA&#lb6=zseOeO+-XC%{te=z}Xoy zsLyL_oF0l(5TTVlhtjLCEP1X19K{G%aynRGUfIOcBx@cJKJB@(*2N#u*hy8dYm5`w zqj{#-V#H8snThH4XzbjT1~crcd@ykK5&8d;vha$>WJ)6QyHr)QpSr8dPEm?=?^$UFQ4i> zz;tweBqsuTcaNC7-sA$brYg*^UL{bW*1BV-ll#QaUF7$rKaTx0c6a!8)`3jP@1d#t z_6a6_{(`ff%~7T>kz^v7u%GG}$F_*iyFFl>QyHq48`V08x?VcD2oZ$AapYGjc_0VR z^TQBKvqQ_?6>VaM7_p^!eozN*|Gm~lVmkT_+z46uhp%2CorMSRc?S2EZZ-McwNi~@gxqHIqR z2jCig<|m{yNBT3YNFvbP z#ndCz)dCZiMD$zIJ+XG^O#2Xi9L~(7UM)NFRW1=~s4w@qju(|ki{JpF2!?gDstMaB zO+tO*XP_(?;`um&Vk|_EUG6ssSk@IVCLhbI0p~3r{?@k$m8tXm))QxA7Y_V_AN^Yt zF)ZY^+y(?=o}tIV@gp%|O12XwLX!Ms!w*pRIPNv6?g;u|zc)(1A>k}$FHRj3o!kO} z{kMT!F6NUZEb#sMBOZ!{Bf<@TAf2qsn?F8JA}YTpxc5}jC5K<%Hv@D!tMTMtl!gIk z(&Gb84)0kii%$qqUr{|IjUZN3i=UeSIm^GF^OW!a2<7Q9IDO0CZOeKAjw1t1 zAT>U;4TmFpt-2lQSS%tzP~M?TnsAf3n+VDeyMfEMXeWOfx0 zlsc+$X!D`mji?L<3>XSm8D6zmCTt{BRb{G%SS8XQ`7Gd<3B%{9(f@L~e@0 z5KAb=v}xu-f(g$&vQ)T4h!s*l(}6;|*5iT`l?q3iByvISNhwN4xo<7Qj`N!87RRZq zZB^MeR^{!N#izfqMP$MH=N1K18D$tq;6vp~z=a4WU!(=W>=x(9$1Vp%xVh;fvYqw( zyoF>F+t1sIJTZ3)R?>$JQ3%d?z>4C^QR_NV8xn5v*hI2r`5?~Z&2thmd~^!BS$5vy z+ARhi4ZOZ-SF15_?foG5SxBfWD#W&`*r#BI^TjKzj9eNRh@{dPr#Og|co;$0@A}h3 z%tIWw;vp?v$c20g!4MX=Tfk*0HL((7Cj92v-8(_GtQ?iVs4EPNlPr7H_q%`TsR2o9jVSwOWpqpYfpfROtE+}Wmeg^Clza5|Aa z%XGpx;`CA7_OM?gBo?Jk7?Y7@d2#caOW%U<_$!1I5DSOdjjBr3(&58HwRw^drKv>3b=gqyvjRA4KpWf^Z0L-?jj`s8(_!+x5W3yY^v1q2u^Wg5JirwbyV4HuB+tRCfm<3Y@ zhZiLsB{J2e6APzjFSY@QNWANXM4Hd;RXNv+=XWOZ4Pg1CnGX+mdcr7!)QWjxAqR=0 zsG%&p$$pV%!WlHB+hY&*#*x*gvRC6nwQZ6$PDk@u5O@2*p6~OB!p?x!Uva#i2es`B z_L^81lnh}Bd>^EvSj;ZFu?phJ>mU3t}UjC^f3{5k<~C(4$%Ri2+NBwBA}ML}6} zz51>QU{z zfW4&CQ;!pM+q>-2?noVpp&^7is#;lnrpej0;)pKO?fCu?j3Dj>g#zi54%Tu`3Nb7? znzDR4)=fE|b8K<~u$<)D46PJ;8GCF3ZG@s!oyZ!Ek}bd`avJQ{r3xC!u@9(%GFr~n zC=OiAAX5-u`*MiA1iu&GUJMq-EvcOQ+#kf}EQ65UTD@s88YkP`dXp~)qr7|V;fnr{ zFZbdD9&zSTvPRbeYlsf8ZJZROFHFn=Pb7n(NN{C~qqVW;qg40(H3AL7kW2)T+5|I# zVU{p$bueeY3#J#b9n+1S?F6EC&-Kk1?Uvd_Ot)p}-<%gs=BP+|%2hb$%2m#8u61Zj zPdk~!R#R9@wxY_;Ee7h6uEB;ud3Wt?oza|Iron&HY<}YheY}#1DF|xV7 zfBK#;YBEM~7y{PIMKo;%m6$jU#|hE1y5buMv}{F?I6kD(sE8%9kPGqqP5_IS_ve=VPO{1{<3MI! z_JYw!ih4ktN8}^m!Qp>E+d)YC z2-Wxa79_05JpaHwrijIG`hqtx9a(7}_Fu2;keTk4qOndO^KhDhnroGhJg*r?00%~Z zXH4g2YUQHu?E1*kQrR8Y)cb@2@-DkG>%KOZsT>kFt)w$C2G4)$jxC6S9i7M)`^v{c zLh1L}b+9{fcoYD0)91H8{Wf3ehv0F};HHFP1S!C9Pk`@v^;1v}zrC62jKoHO7my>b z$CY7|PGnGl)zldV%n1su|{J=nKJt0}<({tVYI&JfvLyryhZw`)g2 zXT+Z4plHZ;stUEby2`O`#(5psIQ+hC^K;BL^Jv|ztilfDF+K~Qb5zm~t4Qo2O4Pf! zse`T?-O;pPZSWBY(Gu~XFoo6eA;4^-nYAJXbk9SbO3y0Kn4r>H(1X7i>bdZD6BR+* zj^5gih4PS6Iy!8c9y12U!r$+ywcGGTK88BR86omTliq{p$#G~(P;gB8i-@h1nvTOz zR#F(m9m4CuXUF|*M)yTe3i66Q-5-n`f@mIX|1u_vNbMorqDNS(kOjDIdy^#dc&g-kp}D?I`a% zgB;9Z!4Ra@B0txQsKO|lwsbC_%=2g=l@=l#A#BG%K=43s2&-L-vvm44C>N@NeoRtCfL$#+R_EB31P%uVw|wf-v32AKPGfI=&j! zCci#R-4R<=q$8wWxAiYC6BV0QZJPjOBMU0rdZlO@9V+o$kD-}q)DiFrpIcg4f{ z`3`?TZnJw==bDmFu_CUWj6F>nh6BECNmbgk&?|Mu!bvNVH7_~)tilt{g_+!wWeSjfR*HAG!wti7>+G>d_5#ciTW2#C|5ypb|Xe@8g0f ziOKaX649+ols16NGRmBIzUG_`+J}N~ARV#O%0j~b**nD#os@V2vA3RIiZ+Sdp2MDH z;1il!mmL5_^8z6J#@s?y%*Ho090ac1WQ+M{k)#HV4T$t^XrAMsU)A-Asoy$^GmVf( z2@IyFbMj?S8CRr}qAU#e!^Geg6aP7hFElfko+WW`IGCM0 zpK(Jl1#_~*zC9hVAY&Pz&5P9%NrTG3t%-{5ZB80yI8Jmo7`*rimY<(_Arq+ZtvmcF zlz;m!d%$Xu5D$@E?vSIdf!@Fhy5Y%85qxFQ2^<6`ZtF5*SvK8%6lotPp}_OW&QK~{ zp}i;Y>G696d`XZDDVFAzBmB!=gBHdYixlE7_1$eHs6~nmS$+9mj)D9iakTYV0*lJn zTD;5T{O9xQ&mDwFg)<`Wk@{dD4*QbeLgpqgumH%_XlHMmIE5x|Ax(S*mJ2S?jo@!! z2dMfhqH3p^g5)3)#tCW9X-iG|L*IFj!WN>2%eOd*T{8ypL$DbU1|%S&G&6x)b$Ko8 z-1EI;xrtD_*aK`tPS{r;=W}2zrBcQ2+Ro1qv4?1BZibc$MC{e8L;!>jneeXT8WMiL zfm)Bg0ARJKH^<))g?z}A5-X4x|BujOhhDF8zU67o*TH;$$j2%s^79ASrIk!DoEHP( zgPRqEweZ766*fp;1}idRvCtgO^!c&qe$7=E7(+M~VluQgh#ht*)Fc!>v>x3B06zD9 zeh*b$fSOS_KISaa<@7B=8kjs^!}cx!Cd&cid(n2zFTv(mL1=d0Xjs4s|P5z5!cxEFa~5`!RAD0 z5JTq4Z|kNa`chdE-(s$mC7AL}1U(!`J%G9vOp{zyXmZeoh=(i+M)e!NpWe;%^5PX&4V8n zPak%?;Yl(GR8v&SUY%f=cT9SN#aqi*QHh-=+ldzXL|`0822tDYl7??a#UjnlEXPkf zRG#EMGB2s6^m2;Xz>N=<2x&d_HkVIdA)$4puR^P1mxxtV7$e*{u3S#6 zJQX`iPRu{acVK=IGX#MC_0o9)QK^f!7PDoqCWSy@9U92!<*V?Fyw5h=*@A8#(Sq!< zm8$-Gko@DzEw%t1Pil+JiR`?#$JHNr>03l@5XK-la9ntUw1msLBVtFE!6q&wN}>o{ zs1nqyi6%46yC!@+M8EkO-K@xR9X6|rWp?C!mk&Z5@*;+~Gq*{AO&+n_TRsSW=K3FU zb3{ZN3)~Y{0>4%XD(WZ2JH9n%hVCV2;Yy46dq1S{2~z+`YT6Ti>@p&o07}MD6OK%UKD&HIEbHh zf#+Hzu`FNY9;vPIVGCncaOe8seP>6xOfokAs0JGDlhAI3B&4{{5%NKtKyiCh&wXsO zhkZ>btx2Nat#5F;pxw7g3iHY~VntSHQ0dEehN_Tu?6uFa#XjLIdpeIHhDCP^-)r-U zd(jd5a5PW_f$u(-YJ43K6wa2inI1BtEb?EX+15ntJnMT_Fg(kURk`xvvJzdEQ_Noe z8qs3$27C%B*r-@d+%?iR@wG88?ZD|BsE#K##BbOY;u*EMa$7O>Ym$S@{&_o6CoQ;v zqku040N5XhRd$}UH$MF~M_=FeHxNR3;8(Qa>JGka=|_Cw!V+JYt?Qc{EuTDNi*20t#cTw+7dAh>@mI$6LF}&!q1Shg3X#ZZsy{< z**yUsQBmc6FoIyznnLoxdno0&)W4JX2? z$*ra%v&T}A;^f;F<3aQ+y}+-5M>qC|TyZ`#yzAJgglue1C`EvdZ-L;s@JEr10Y?)b z#paTL733E7-iWj<)W7G~YrCA|by~szptkfbgeT$zp=uHUzVa1* zi`A15TWM6ei0$0sBl)Qj;^8>z?b|Ed`FI;Ftt{uorGR_&& z)Z}`+Sw~PbheV(tf)%N9*3;kvSja<1Iv$)0(Q$#(Ll9d4oQu`S8gQ{X8$h?#F0slH zPDO|nh3StI%@RRx+LWWri-(WWg{nLdyLD^&_z-2~_)aY{t)tMtj`Ffpw{$u?%&hha z$p%6RLlFtoFc)Q;0arT$#ZcqQuBg?caB27tUCXy2{J2j1E*T^l=^V3=wc;ZlK&3}K zG8){;RrJ0mscB{TB1s@P%m^?78o8)gAc$@JA=1F?_SRF01drj553Q`eOyZv}I8h2o z?;Hn&RodN)gMBW zTr<1kWq!{o$rne&cS=c&m?&lz3c^n%pCh{AfP>Nl>~J6?5E2J-XNX|_UR-t?=NnuB zT9C^6(|iu1YLqwudn>!1x|Jz``HaH^RmmO0SRObSxqB;;bgMfqDF1cw9;bt-W1K@= zgklCA4B=Ho26z}WY|GW=XrM0;s9=Jk!=8>8a+&NpF}@RGHIvA?jKX1X*>F%Rgk`LW z9bFHmPyPytIcRId0%ErLU_FG2_)@geaDws4iU&|)Kwolfx5dO0GwAy@p)e>&{Cc|j zEPHFGJz@omJ_ngUPA7_CL<#>VIB_fucD>|@P}7bpv$@4-lw~Bi{74d#a}s_Ih&p~; zW2?Vj{FLumetcZU<)MJ4;;-1{0sQl9!&;@qtL^B7HG`zKo?Xj+g)hKbpbSP_=6#>v zano8Wz@D5Jp0D0mG6-R)sqRO@vuU{DWfkpi}A(ZL-#CbiH(G{n^ z0yW@Kj59arUndmsKBPKk&t5(K$h&_y_!4!FxLDh3Y(4c9$A?NlTr{J*o3UTC;P6hk zez}9i;?g164CN%)XCkwgm3}6q*b%<>x814G6%zOBI)Y8G>zp`^qkewyx+uaBhpa|v z)c!==@Boo9oCe(6yBr--Sx+&7okW(j34(0`>mj#|3xV*7 zD3=-Pi1gdc{B;fww8*(Pnb>N;hNe4RKi9wJx8nw1bNb95;GA)Lt_@YgKqn1h|Y;iXAn;exJ2XmLKpmke!$m}I_&kS`hO*XvcnfN&4K4x!9! zc>HDPRx6mgO?Px)=QRkpWv4o=j7NJoQebj25>=dpgHz);hYbV^g>K9F^52A zoNt6})eD5es4DGYPnzr0%KLHZ7Foc4z#5QK%}+3r{pj?44nI~r4Jwpna_mA3s5RNw z9!?ClA&^RIUh*;w2z3y10pY#E-Dde-mL|u~czvPZnG{UAU3tb=5q=-5D$M6#KKp<@pqxZ>Yu2GE{wymJ7OI?|_9ppw)?V0U+ALtQ z?Y3jWt{YjXkx{uOdPhb9x7enY3gm~emDVGeRylwOvRE)k-$Z$(S>Z2W!KRt|e9V@> z=W5r)9ky{56CVl}5J)#eaY^}1VAz9l$8~_wG{l>-yWRTsxi8EsDWO%t$V-;X?S|t@+dY*7hTQZMhC;4%Odt)WNBj}jZ1p`2chLZ!9$;1)=0tZQ) zz1M9MW-Rx-?z}&Y`0m9p&*0nSqM<^o5Q}P!lIizgwsQLl?Ap?mKqGt^=i+ZT$E5ED zv^R>M^J@s^oEEIRC;~_9bQC3A#`5?8?Y>L|u(c+t3^G4H*@8j z-3?JP>gzgc<`FgQV~%HjwEEMqUXr+MD_MDS;#!FvT0+Fua${^*AePYdMj>uFRbY7L zd1MV3k%_QQChmCTSC!bA;Ih<`*OuG%D1^=0mJCOx&@Eg)Yz!YJ79tPEmMG*EI~C{8 z_|HV=f4h9}&-+*5?XA-{h!zOegdMnm^2HxA&&YuW)|0Ijv=-duq_;+e-Cl#Z%C{Te z*y7jOFpabq$cdx_=tx#sov$Dao~sOLBUdn-m1dEo15yI-;Mf~=4g$lhBBT)}PEtfc zx3W??dq%kVSc0j=St3w|z3o&aNW;4DJ z>fLCbJE=HMsAXe5UJiqai|OJ(M$D6^a8zNoBSF?8c^2sLo}vNUaww_x7p=$n>b&6Q7D zTG2a_RZz|0O+JlCKA&z2IRnHj1R7i?#(uVTuki;Q?Y}zxIak(m&L9nIy|3?a%9dGZ z$RgaxR?-o>viu0afVVC#hF%lYOVYgia0wEe>Og5!sGqV}0qsQs3PlBH56<&GX$!Fmm+v~YPH|D8m5Agr1hbRJhU_67o955%^AWTAQ&1W zBLW*L#t=9fd=Bg{^BeI%uv67yN;D_<#!!o%Gc@~*4})RN!9@huEP8+-KmovR72h!k zErrd0hAr961+W(G_)ie@yl_P(L3$0swvH0m^1RrO)edp*lqtWUI3kC2{P-DRX~CGu z@$5i5@W5pg=|vik$(GW@U1*MlF*E{VcTWNtij%Zlh3|;{z$_MNab?IZsbo8`NE!6?c;|{yJvyKQ1P(!@sWr> zsPUX@<5`le;$S2vfqhDTg)WJ>N{3+EEDW6T7OK&6Iu*-wk5mX$Q8Amn9<8o7xpNGQ z!42TuCdN$&Tl(Uc=O?un1^?_8C%jj!pX1?f4$QyB)ZoAI<+@J@!lf{Z%^TmAj546a zH6*268S@ReEBn$4L4a;Ygy8pMzSFj137p`@Ccm~^t+DGUIMB+heJ&25ozKQe_HI;+ z5Xo)uK(IIHq^ZK8_I4Xh{{eTM^8*~1BZc08rce`Rq2evv+gvrs#lPafV53k)h_s&b zuT4nnTv~Job`ZsSVjF1>u0{Kc(au>BU# zq^AT9^*k2UzhxB!3pryOJh+%=coXTK&#=($ybhe%6;Hv#YPsUrQyg7er_$rt$+ z>?|B@I6mM(Tm#8p#npJzvh;p#emf;bqNPGKw+YZ&DbSGF6{bHzlO3qrLH)*Bq( zWPDjBQ`N=-pVgV0!(Hb?BS=Dlr~o8(yKN#spEF!nP+Bm*|IjJAjCY0fO%#Hpe#zIi zqcYrOG(^&*J9zq zc^w?Wj(cXE&h|Gr9Efr-wgMx1t{qvHVb4;S>0L$rz>0$$R>D_@3=gwCCya!7sU#3J ze_6cEU%rJuwqYW2Dfz+aFL-2?ik1ruWB7Np;L!a)a>?~Tew?!pKK*kN1?+YU22eT%u`VW(wDua6~rjjXY)JK&)zCtBZ!f090lfFY=NKz^A1nZxn(8d zLUq{a*azyyIV|S;;~eitmD_?hir9eH3t}lw4t9Z}LtFryIT9l+e=LnW34mj<)ByA* z$OwEDVz(9@R}g`>5iaZ-T62x014qGzQsq6f3E)uI zcI>x0BJ?UEe%R;XLNO3%%28!<*b(_YY@e>G+o}?i&pk>^wOv(6jW749 zgw%Mx4t0ZHcaWPze1&+EUy)pb7Gx2Sd=%>(5&Y9>bc|bwyqoZJdOD1-$ONuK7`G#8 zGfx%AIKmx%e5Ro=1Kd_*EQ>$X>h8TOqZ&*A^TYwCGj0_c8O>W)fIgTmr(}mh65QS=slzQUGMlOj~T_5)T?o6GOO6l$;o! zbr_&j#wB*4Sjv{z&E+c#s=ntRL3j~ks>z^V9fZ4HN%R27(z1MZ2+`wiMnWj3W15iz zTb`2MMX1V6x*9}!S1XNt{mrE1U6l28*}c{0;rpAe;@}Fv)1Pu#5&0ISlV9?yZfn=B zHwjCKq;-CjwAJnXC}tdW6}(qyClW7^#l|1tpovx;OXzWCh`Qr=7LNx0=PNbO=H~CH z#)m^w9BsYA?jh$P#Dr)^FttlV7j%Z#eVGsZ8amj89FJxFRN`)^ObJx<)Ae#DLX~G3 z#{&^((V9nvyUh>4Re=VmL${bcuS8*-IJq+{leOYhHw2u!Rkf_N#SZO?R!7xFHDvYj z$LqWMO;?AY8ie>~UliY0KXR`%jd71*~baZ7f{TG=@=_%Mq-dVq-nILQRDv)xZ3_?+4Ri z<51mlOwRqv^Gl=+WSV(;CQReInoYUL_&0ksmka)RU9(%bF9QB{cE3H=Icnxyzv~Q1 z9hL>av0)(g1Ep;xp*Y<@VKc5A1Z=ytgK!}3E?fu4havmGa6&9xd6e+sNQll3M7`P7 zU;NPyL3V%yCZuMtgZm0INDd@aK{UhN5`+LXdlu>^z$Bubw*y#YRhpXK#vxI!Pq#&E zY;m~T3SL}US>>a!EhusTiWqi}4-H=d;`sgZqTmR_r1r$h(jze^nY%rQ{ zq^Vv8!MiK57<$}LF;eX#-}+V~B0Aq-3DW{wBo}+SA>Lxrj2Edz^pm3EN@tWv5Lt3& z?DDnQkgx{F??=QI1aa{}^le#U{Am+^T;|PSE8s7POOl__&Vh)gul32}(2`CGYa_39>@*Q+}Ou@z0J0oynq*^85}?OGWk ze;$1z{ovu+AIP17(876F?6M7xl}0v@#X|TNW7g+FfhG{iltouTAWRI>nJ)&y5lvPh z5$?fN!7)~(Uf=>!oqK3U!4Y6_KPZ0eONr{~(%ftlgQoc-ykE$H=0H}^oCsQ3y2ytP zamjUT`$9THh+PveMk=P)aKJW+A1?V!WT^1mflk_%Tnu97$VkrR$k1_r?a4RCcMcTk zVkwaj%D8Il@UGi+@tg@VX5L{N<1jjDe|JUYJ``OpW|Nh^4zm0Ikn`f?r z(=tJun{jioa#%l!!Y~(VKtc)rjk9ArpV&7;3R~>5WgUrL#N%ja?W?wYkUkWewpjKw@{$J(X2?l z0wqHr5dU34ATYbC*L{>;7Vg+$e~{#nD8m&ni2}|Kk!RAz8R}q+WmtpgcEVk0F7DEm zOz?*-$0-$&k!N=95wb}CEzxcAOa!TRaIlCd<;&| z_fKWuMii(hsvs(7Apk=vpE>=(VB!l# zQG$W9yRt%BY@psUmk`&E-g=4?uo4=s9zbOLfmfx6j!ZE(1QwRjm+bt)dG>)^AH?=? zC}eJG7Vvg1o#zj@^e3VmB;r9zW*5*z?q#m2Lb@>;bn`?MWRALys!q5uPeaXJ!I|B_ zeS<_f(xyUA8SxzIa0bJ<4{Z1&5zOlgQgny-IxiIw-r+=gC^YWxBhX!5&EVtAqaQ7V zk$AU@5G5$~;3f1hMGMSgk5(tnt>;~(l(k{*R=!jSuIC$ONlv9FfkSz06Y=Pe!cU}_ z!!?CA+XZ#@M_6H5kJ2b$q$qyQ*@H%Y$~I1WKXl*s`xFg^Xvx5|^vX64UG9K}% z%zf7&Y)6FhKK@c|mxmp^*KdY;R|Lw0m9}Dg7H%DRrY{-KZZAsx_KQY&d+C?w@>+aL z=x4P#c&HVb!Yt&2ufxnsq;7&EOWZIuhGd11M6;XlIa6fiL$gW;5NY`+D%;yfPQ6~O zDE8=BmdZw1DTRcQc_<5<^SUVP!qRz;2q%k|qk}1v--oi`oJ<+$&!6lv2I=dSPPl4- zza?gECcT)a-mVxWy=<%#`0LH>Exuya{dAOc<>hEwWi&nmue1lI_tI3MN_S;g-Sw(2 zEsKmK?0e9pTycjh8p}d3V2c;|VDqD<6xK;MWqyVs(U%)}l!tjo2Tda!Bz`_XqJH)C zEl&JS#_f)XhxvU@l6v+lTZ9z|gV&Ucx1NX(o6}umL2e5r92^*na)IQ>X<3Xak0KD5 z-3yB)b6j>Z$?%B^Y-M%>8hZfqRfg5I5HqV=kriM_g_`sUNp1aBD8>#KRL=#q;pRduE9Y`epi76ONl&M5 zauEd~zcnt`oot5ZtPnJNZuH(Vk&3_z(!wtEWy|+9h9! zZac!{usKBI%Wk8MqTLRKbHwVy8}oPPybHxS52vlqIACBXn94E=(Gm)TOM1U;;mJZ= zkVxaL(@)smMu0fmyO6=zh6`GF0!xDi9%1bV#apBb1&i?ubE_hJ!v!+jNK0gdfdGfI4ObGF5!D9RW&}G*6fe z14BjZfos4Nz<2wq@Qnhegtv|z?i`I*;_;QnUD6KdB~D5n?Pj%Z4<33h z5Ih^~uDZ=(Phk4s+a^uGWvM+5P9D44A;uxT%VC7EAe1b0M8d1CO%bAYL=gsvZ@_sC zDp>BwDPTeHn$V^ULqzj_O;zTT(4RcH)&fb2A8?6GddH7^GKmuzE-Vub&o5o#3+4`l zyx{|Z8HpiVrk4!mU?D#u@+vpjx+a&-%a5_ohXMc~drW-dLB}`iv4jiE)e>s?2#g@O z^V$A=`U9@GRi7J=BOxBAIBX8?wE>@wjC31{#p%eB0~=Q;nm`~!V6flp2rJ)@Ij7Zg zMAVv}K*r(X?8aBUG(s~+bR8rjV%=QMvOD5pXGFV`)*uy1cL=9>WX-%Id*YR)3l}cp z|9lJ15*_=Mt%k(z>mJ7r(R7cGZy@oQGpJV^r0s{3WJ^0|6tkB*Z-=%2m&DY156se~ z*K7o1p>KiyyzT*?wpzJh)5HZL6I>&~qW-$jxv~|-g&{*CCk-}&Ouce1{NBOTI2^nmVzheX9 z0vOJB)7TAvGH&7m8;C-QRuE>ujk#b*K~@Jqn6sl0)Qfc@gkv$#Ze)dAxy{jGTX*)e zn4oC39j=<&dD!vIs>6Jc=h7i3@Pd0h6w2}|VG7}F5!b{ygeny5A2F&`B#%U^6GB>l zNic&|f{Qb}8>tdl-aM{>X{x$IW-OEt*L3u+3HETIc!YhEs{HsI8z~__So;*N2+weU zGe#i`Pa`SBSr5#CRsx@kh25?7*sO9&(^#;!gOYH*^pe95)5WjZ&HC<+EY&y5n0CFVQtP({QC9`YXEDr~g7r(NU$>?OK%5 zhg~=l(n{Kc5Yxu}u63i`o3< zR^=KITRD210^Dzz8>qF!|K)q%{3fT{^^{#ZjwP72$GYSf7g3R@A>@=a9jR#bP>YP{ z&yXiZ)?&2NIIqqHeSC9xeXes`jx5XeDp6hqcmVK>{0EULSu$ma>J|@i)5$ zP8r!*7Zoko;k56uYV{hQUo%C^p(snvxj2qAZjvIVfk-62hj`zC{FNa?fT%?HgKsqI zqS^x&FYvi+5>;qJkw3x-M7+fICZZ92#3L`31r{%5dsP8mc5M~AuUADLJBn{;ScyX2 z0TFbMz?&9Kx8rFms;C4RRwC^AN1YWI(!oFoDeR0ne}vprCh0lqFs=$5BqPlg(|C^n zA7@HP-rH~Tq(*LKD@P(O$AQA6jv}iel5Q=4O!Np4ERjIMYxt3vY{o^`v8)l>h$~-1 zkopOC%39$GfQ4Wtkdp3`BL{0N#Au0IF9z@c>mB8%0FBNBfgD6`AS-Lx9iU2IX z()!-!CI=rUU7gNYDTK!mlr78eAZ~Z6A^`}0ePPp_1MCVMS!&v)bLaRq3`okxIs3~` z|D4}%p{g(^aQ-~O2F`v|=x~D-XBq`Ry%;I`eC1G*q zE6RmKJf8=VLxL{e^09-XjEHO2wslHd#Fu+XQ0m0)%_5Ly0*g-Y>&>R>0Dx$NWavXc zit;R-kb^AK{nbcNIeUYf6gSzGwMh9z2*HhGmyX2xAc&xh9M=en6#^MK^d2r}j^@y| zTTlHe09+mSB;T{T5Po|Lj$}_sg#bYGz_s-xK|(kXoSl*58rrRv6y$DspnUJ_-A}*G zk#LZ|R>;6_P7iS$q%~<*!0f`eflW~uXl1H|*OuF(v183u#8;q#b##coQT*ccgVN8c z<+D&aLKMm&X>XcAQzyc;NOtUo#8&oTfJh2KfFw~KDpcIn`cCC{I+9#s3Z7%JQM&F) z;m8h1%}>plfD8Xf?RQQekZbIF_tp_1#V2l4#y|C@F*WG8}V3y5a7M#TE4W3dW(xMmqh(eu8VQUOu zfQv%!oWANJ1e2FG7{Zka2;e9PNblg;05mrAz_X+gIE zg8h+s&>y>n*2X5n2?(?uFt`h<%Dr;Wn2{p}k7KFrJ zqB!=-T8IeY!mTTkZ{YUM;0k!3xWxf#X%XNL1QpCvxNLYv;XKTS$g*CFH~gKh9DG)_ zN@jBK_6vljzE0f2isHC5#^pQ~2`Zv6Yl{dE6JLDXlo{)U#muaj?0lT6f(?pKA{xno zynUW+IImRQteua^)q|Z3)_L;~vp+;D^R2H(6+7TeE6+jx2rs#c4Fz`Z>1W%hM#jfr z1QXLhsleSWj&nGalL#SRFn|$nd)G-hU}esRH*433L~x~_A?#f#z~hd57GSThbFG6y z7$Sk#Aw1F^@cmUe(oKjXyv^w1Q5+9-e!mI-4g+>M$d`bKFVP z34xYB;Ubtg!DM>AVYfA!Mfozd-p>hWign)4Ym=lt1Dmz&)R_m?I)&Z(l7LC{VA&Vhac(jD{ZqJtjnKe4f{b1GNyXE02Sv*Y>P@s?Xi*dv zP<~i^z-i)S4W0u1`k;98^Z`F1HyUqpAc(am3i1gd79S8N&)@bF(Bh&{NXkw1Ff2zd z5O7p+UDW6nD}re~uJs$PlOz2?U64r-=qOW3zT;DbIms-n#Bb0poJnG}r3izU{M6@z z@=ly;xS(E6&x*Dbq_5Wr2Il;(KW`U1dRGX}^sP%TnLli$B-srTrqy1rY>BBr9P$~2 zVsCtZBjjxGeQ=^JuHXD#d*7W8pxbD5p*sc1iBHdY&+A;a8`~TKM+BsDeu4r9rb=Mo zoi&pfrw1D|a1D!{CV|o|YNL|tvSa1Y-RG4_q{Hn^TZlR5a293YMmt<2@PboQWi(1o zw&1|!?4gbdY7j39%5b>gj3CfB9W0K9Lo~vrMEukZr3l%hl`G^gCTyQ76U3A{r?R=7 zi?2b>7x7vJT%o`+j|mfEc~_s}2h^a5E6^Z|F)|t7L|t%pjQ~Fp^IXT`65_O4DD`Gb z;nIy2LX#gXx#vMu;Nm#y6=XW!LCm}J|2q0Yj04vki&s`4&?FJ$Dk%gu7J&=@2$J;O z=kPvw;ya|bn!Isol<;Fh1*SnP6*F95L`>X_iv1amMF!AO6gOviaZxy<2?ltLT|lgP zgse8{$_jws2NaqlWLH-m!8@pEADNxsEk5Q`Yl<)nZh{Z_{q_cdZ=wu=4umo+oTLSP z5xNi&yt^45n9^aN*fhDcTRXr%zWCLv1OMwLt~2HG=5;mxl! zY7IgOlq^LN@?&rj$!-T;tO#eOHdm#KgMvUb5WPnrte~D>I*I+GAcMVJfwU$(?Ud>t zm*OysDvN}uv&DRH_>s9J@U2WN6pG+C3|@XPm!kyw>vd9Wh{RkdE^ieqyuwsBjmp(+ zC^;Ku7Iln#50O|f!FmvLdng-xrSY_*02q7RcrWQy?+J)E5(h~X6G&f}L6Z1w8!DB3QFS-i1zzqB9gLV zBxJl+MKja`~m0Z7G_3bEnl~)?G z=vnzP_mqTtbpmCGEh6||#MqS(0b7Z4#0Q_gQv8Z*g>xyy(`s&Ze!oxXV93*+19^yd zK@j=m^j$wB%K+S{v=~xNBY*B5e3R^Qn0qW@W8q>L`0f@Q4Y-pvI$7?R z-H4rpLT03(dDatQ3|E5igPqe7eM1(N5P{2pqp2WKDn1NDL@r^5=QR8g7C3uf=X!#; zVUFQpQK2R4**3n+x8G{??IQ8lr3cR%6SRZ$*roF8#TY#$-{ zoA^W20b~s?-tkZcP1`km6jBqCb3H!{uUWV?4?~!?2vRY7TO4E2;K6oJnqoEx0t=dvlsGl{3r_HE|KnPvZSk})q4vZGe~rZF(zswV+f(ep#fVf z$HRs4=-b0jpl8j$;q$>m_Y)$dnEfefs%0K5en0Jq6~p}W2+3$uMmuE2@LAN9ViN`E z9Vw0LgbFYQ`GLP##3I`e^deriuf#@NnV=KR%I5VXZ5%0C(*!Pf_&K$^xT5|*#%@IR zOki8^kgK3V>7dxMO4pp%{TDa`#E|gI3$g*hn)W7XGg#X_1Pt2feIf}B(Iv^ zg=q2$yIs&5Wd6>hi##p+%H;&BnhF;+3>*Xj&MH%9h(R#e=%j`U2oEVZ3b7ItiJ$V} zc77lyY~w}ON*@&PpAiYb9G_o{R9p=7mS_J#D1-d(=hFlAVgcc>rWHVVRGO*YkpOpPNxI0YTVbMFbX^3WYMl{ z$l(tA#OtT8JH;+mqk=D4W4bVSVQKX#WlwyD#!HZKENeTpVASEg-!{BRT7ZF6s012uqt_!`G%@X*^NaW6$(GAhoZY?u7I2$p+75{w1e!$tXBOfuO32{a!0H+=Q>7V;G zP_fr%hyVgUKSBXWLTg?)uSe0SU%55}a!SOD=k9;e((Z3eO783e5-|v3^`C{ z*Nl*~aW8E6kBc9%N8Elu08kLs_3Vu}JqYC{Pc;QQ6Z!U)r6o2| zi;f7v-i9I4<0asTsB-hnMNbc*oaAc~(suT@2@C?7x?)Dg^A@BD$i>fbK1g}b-Gkji z*oPx~Aj=I3L3ofxSH?XgD&*1bsVUR4VJQyWV0Xn*!PO=?yyOJaF5?h0w$oUhVaI&m z85;~kD4^KVOp}*nia>m?v@J^{bu}uQYm!~$78ILogpUXRBks*^FL1@ zk-+DUT`N363WPQbCz+@^M8NuQuwHo)Gs|RTe~7g381u8g@JiZQ*VqgxVr5A+zt-K{ zfe@%a;}esG;xutI$;tRd;TYtTMnw=2bsU$@X7DP31Cw;)CB%<*blW-B^dy8}5&-C# zT%%fW=b(g?SR*j{Y7y1<2x;*oi8VPjOQRmqhTVZmSy9L^uH&&3A9)5~3Nc;C!9@Td zKUgI_ky@~Y!>i06ajv;2+)6FD!GA(lAwOhyp$lL5gPhL3an`SMLS@BL@scVow0B=9 zDoIThd2fsvf@@!C!0y+9zWa;f$KHKg6p!#Y#SoM=*t9l>a!4bHjQrk^2+*8~>_ z?q0ul_y7a!WIOyUpVR#E8azbP=D3kymLzz7uVuicy`H|;v@HQvj#uGXz`94t#Ll9 zcCKY|fw^+=@l(*K_###kCp52S@MN5|6Ax>;vLsccu}y%W-NKzYoM<<}E%p;ae)eV* zYx-y1EPxW)#Ljx`MMV0@&-eo(u)O+HGRR&Ex`pF7_?9?F z3mbNW1VUq6)BtLM4)n8ReBkJfEi(S`i6g6j{+2PEHZz= z;rttyy^+}!=_P>%gC@uUcI(e_&d}v!4vk2offuB)is7XONnBd_a>$C3E-tY()}<@})}%7NZ){wgJGkEo0+RCicH`y}dGPN{gd$3({l21dCK>k_ z^mFqT^COZJtQaTXIeXV{GEBTM`tmIW&28;g?N+vbSuktGmwr(u>{A6AT?+FdkYoxqmUQU%;{Ln2FB6 zG)R#gWGnSD)@Fo9Mk%(TVnm>G**(+VH;z)10(}DQ1obqCH}ILrkyE=-<#T4NN2)uY z11Edk?+0&g5*k=LiQCP2;Z%OESrQ4f5B6wMNVJq?CJ6fn98p-x**`55dc3~7y%!;7 zs`x4M)@dh(5|XUers9>fz( z`Quz$iX0lmIl`<>Ttgmanl8@$)VR=wxHV3FiWjn8XYmq4U6LK0J?F<^*7{@oJgSaiWw3oJtB* z-?BVY4uG4F#2->gFSyBY10Y5XCmN(z3ie=a=H1E4CqOek2gJ;~VRB zK5zmv2ixdd0u!=zqiu{^+fQF5pb@cH0ubLeZ=O#e%EJI7xfhAG=AQKJ`;Y~>fT4aOM>u{yMPhzu04rdWj(UBtNP_zWtG}LnoD|!<@`c_F8G8}0t+`Dp0vbV zY_nJ$d&j}@vRD>ULOBoA_x5xAmD3-P8jx)Q>UGTEQbId<{fp8cDy9RGD8l1BZo!|P z>$zO~?V68c!7Tg~>gt0oxFIUtljK$7c1A*PSWI1Hdq>bLeA1Kj+mxu~`upOR zihnk5_)=8s@_M{Dg(r=VEH~E9xZlXb2(d3YmrLUNHgV=|tNxoP825Qt1)wfsp zwcTT*^Ay!mz)dCFL0f^ON1{N4@f8v`{MG#0QV7`DjmlPSgXozDGK-azryqAjJiv93DLNb>AllAheQ# zu2!I&N?i1?6Yj;}d{OI_&Hd(ef@)zdzf~><-0bu%POX@s_L)q-;B@bvs%{#j#eQlP z2MAyX)f|XCB+`^oGyJiMoEa{3P!a9JR9u9$xF$D}NZ5l3ZvMtubfaZuAU|!0YD9 zGhu+FifaV?Q#0+$3W0k`*w2pvD;v zdGfYn?RYD}OSl@D)CAMH-Pzx`LGAZ%( z3SR?%T5!n2JjL(BH7{HiM1IN|uvxgR`)!75|vrAaIAh{xrAnE?!H z3U9%=PLcqNYuKCBBIVYdqBVZ6lt!p_WzOhuDx+zS-M~H34#Pk5CnN++C388wiO%% zK_FY|E|Nv5+PrmDQL@L@xQk?wDv4yVNtP~lE12$?2{1rTkn<|%AaB&Z-`cX>zFz^l z{Jrv9yXtw?rrkX=>6yHW=Cn^0>;K=EwfA0oU7od;`ibgcb-Eg>k}50~9^$0)J&l?BN##gnpsgz`-b8botm zvuQ*&m82%(Cb(UV5D1O2LNJ_?THD4faB#5?)X)f@oO7u3Zu_<;$lI32NVBdPmkN3= z>=7EmMB`N7Q9(k(z4lY>Y$!t+`{HhM6)q$N^0Rsyg(9IrVMeRn!;}!MTHP{t4DlS< zN?qfX@HqsN3gSxb#V{?eFtaMeh`Yr=#m%}1_EK|2b4FSFZ2YzkEM+9rBlayX!ldv= z8p9)Z2+$C zRAA34zz(S%zyEEnUL4CB(ptwQJo~K47tq2gqX=hy{%Ns1EbYAi=S+?;4!iguE% zuIee0o~#fK{1`MyYcRXrVvuyeahkB|!A*{ToUw%Pe8m++(;QYMwG5`CT|9vK6fvNr5 z@gKx9Q1$I?P=l<=YnlqN1A|KLi4DMAqM?J9)k|#>o#gt&GFBo7XqwbM*1L;(30?U) z4gCjxq3uZ9DV8wjz}qgy5xsGFk~&Ubsg+!V14H|AdWcC8Z#B2j&FNigc1;=5*q^+t z8yT76bb<6`%u0H+!`7(rm)OYDvV|do<-I)JIsfuXc>na1qWMD4;@0NDNTbD5#(pM? zhDeK_bXlVv-@jKSh?yXiv{s5xP1YdoMlCU&kvgBbXsH|>{N0p4TC2@F0l0-(_`SCi zy3I9VF$?otc7|*p!MTx35!_o{?2-#HL=$zCL1Y@y!N4L7TVvNDh9Tcz?u~eP zJ=$Kk_<|4tTwK!(YhZEKv)$a9e0ykZ>>?>l@eqhvT=!-D0X!=!-R1s-O)jkFkNbYMXui zq2|%56wd`e@SnzSXjF92%f0*N$(uS>%Y@ekA@vd$_&`flMimGd8vr(mv&$#H`w#lu zz&fU}5YnE#wlcSD$9B($jS{64WyxsPC zGoS1fwLYmrmMCppE{_6-t=w@(B%(s^5k0Fs7;KtvHI^;Rsd|LMM%me<|6mA%IppjtFfv z15}QV_i`npe2kle<`2f7is~qh6$gq0HJV;T_;RUeIwjoMbe=jctdkQM8xM<4*XvD& z4aCl+(3I37$|8ntE%|aDxF^m$rs0vf+E}+$UQh>JQ2UkHr^TjolpT>5b^hnm3K@aKeH4VxgnfZn@&Dqm+1U%zk@ny{;Zan@Mj7L|kS zI@X`+R$OdhSl2wBb6DSzp|9{aaV<>aq`;0HuckLfp(yF~ojS*x<%s|x**N;7%dKBL zqhl0~t1vTZS46!bmr0*mu&Z5(cXn9S*@QrcIaiLw2Z@?}epf&`iRKVHVX< zD^iKrG8`3Yv#OmNQd!T}{#x2TqCC=TDf~d6X#s5=&r!noOVvpqKDgCwE#K_V^l8I; zIv^+p0fW!+e8`eH{z}cS9vYc}*X30&F31!@am|<8txK1EcVcUY>7*TS#VX7?XqKcS z$<4S@wG_Zb4W@xQ;X%*qw$YuxtSM~SzP>v+II7kqU|DI&z-ut@>Hi!4>HQ}SDI?P5 zR;7?{BeQAVD_J?J379Jx0iI=j0jaoW@8-nJ3R=i?d=tmO8)|R0-O+1v5h$WrFA}$w zdkrb0WKB^UMXt1~pxd}Kr>i8=;r*-rX#gZx#%FXVu%MHY1?nQAl&vNJ`HyIKWf*jf{fVFyUd zTDsOVYJ8ics+Egc!o@qFAGy0e)(-BrpVh}}k6+Z<2FWK?n)Oa=rQ-`>5^1PkqU@bM zgMINhZ^wbiIqcrPv16AA(z9L}-~Y`8jsHT$pk;a2EW&j%*a2LTFK%vB3pX5M=+XEm zDnF}bz6qOqP2DWdi+s(J9$nv{%ZKCl^whOSHTdE+-Zvr`T>m8CNgKGeAK;84(Q34f z{fM$*06D@*8WHuy!u5BZ@`(~VzWBJlf1;j2s>jjPw6H=pAl03DI@z2f71>+JNv7=)Udon;TH^W8Uv0M%kQII*O(!| zOH{$4`FVz{5h3dFlXb{oHqv0LNlyIlMB?v$_xE8~o*{e`wWtrRNw0s@xp+>=Nu8SZF_p@DEE2R0Q{0L>S$>+R$KpwbClES;-UtG z9glp5nZ+2J4u1(9P;yrbjG{!XBLyLCtg=*z+ma` zjXzTp*Up~HnUT9|Tm4?1=&BmfO)n3ITSw(%zDy;H15_+wEWNz4e>i!Z&TKeLLJzA{ms^&7{@^vBw(KV!UpQ=hvPTpc*3Lue+7fYy?w zjnw{{BW^s+9UFU!rCdACAB}U_@=v4%)k<70k>zR_pGqB2+t}LjHn{Hm;#i|?k_wfs zVx=$EK~8^-JzL{iiyfu$9v@mPjtFVr>qBx2=!Nx2!78dO&t**uG7@{@3mJD8KB(~n zZHYwy^nu=217Mx2komyvs2|p3*L<&(VTh#j0jSYv$@ZJ%*})!HfiCdw`22D!Iu?t4 zw7jMUMh9lm+&)B_rGuF3(j%G2$6j43Q=5Nwy%}i(@@uJ^pdCEtTxF!8A{mqBy|UH3 zmU3Yb-{wGTT5OaS-9iSNEg^dR|Rf6O{*1a?NpBelaS;`jFnEU)g6Tc=Jm9Hf!0QYlPiq>J5Q)#1Yr zKb#l*H2l;8c4N&}gK!s(UsjV?k29=g9(K6SlOu%WZeliNU#r8#j@lru+yO}J)Z%EW*y1Se4UM3{L5fo^ z=U{??CV2nEP_>zBv)U2S<}Kg|*$Uzz_e6&MULW38gU_9ROb3FaPUdXiW|x}{`#64T zxO8L3;j-{!Y*mj7BS2%Gar@ep&~v_wVGjF=Ys9 z0SnF7Cm(50FcK#W=^k3#BKVV3*?MS&8UZ?2Q-C9kRD(dz9r_DMl3Ly=7lV6#cMQZp zjV@D*L!ZMGqo<1N@GA`;T^TOe8>%u+DNUNlJNzTwo0HVZMQYRtz?!eDYXn#c7W6rs zy_)8w)od{AYH=PelkeN@NfO*puYZY=_&Wnr>@+BW_D zn|g)OmuxpV)=7Toya6$I#sS$3163zGFTpKblU2MclJ*;#;#LA+ zUI%>omPWf4{t(@=Wvt0i82BiOh@Jfu0FC{fg~?|hJF6$x>}1tnN*%cH>3G@KyWYob zuuTadAyaBy(Sq=C&;Uuy;XY}((nW)1@HklxY3WYB$!FtQstoh&iVAanDPVS5lbyo@ zYl^X8>4YTd)!108b&8OBA&S31bVF7OiB#>8pwu_ZPVJhAib5%8AQ-oN<-s3D5vQv0 zV{HtaWE#Ifts%Oqix3X9guU?AXegngzzXymvD-&(lMZ9iQr5bgQG&$3Rq0_%wW0k@ zpF+vFYBn%UJ~L6lTXYHR!}xO@%I9aE%r`joxgk)_OR6i)hm3!fd<_C9-)pWoPIM9! zOt zZ;h(KY~3YlaNwXw(!ov=hii`Pz+dadc5@+#(Ky_}u8<*QbK%|9lbvBVQr!ntE7T5DCsdZ_S32Hu7cIYI)lMkQ=|ONfOwC zRiN(U5*mQ--Y7vZ(TFTs%wI>>(jayyrmV3~le4RzdF)C&yqhD{8m>(Kd{5` zI*(`?cTGX>fc#4 z^y^Y{MT4P`gW3xKUvL_YzT43+9DB??nXT#K1q~UC4yFA zc2&C7_S2dsn~HJ`=^<#blxk@KOpFMP4u$HPb2$jZt44#iH~VBRT5wR(6Bpg z#;^uJih7BXliVblA9NCB38gVQkDJt%md&2AF*nkPgl>?+40~Qwnz}61{`x{w1S@D6 zoOb$Yv9+WzZBpMmHB>alZ^nPfVdb3|xPM2BO&y)uPT^Pe31>5qc}GoDKJhaTwPCTh{H!30ri2* zW~5=DY(s^$WzPB6c5>lx4XCfC=hkHUZGx_N67wmmE@+OC5t_+%L%qlujV; zAIMH%V7SJ$6yfsom*L*Vp)Z3us;=g#BtyCHEYJi4tFK(bnI(|I$Yc)MvdsiVFQ6!9 z@Jn`S(eEej7v`MBctQ?7mA!1eoe0;Cf~&kkNe=*eFiF~Ef|<V1 z6%7Y(qjdqU_o$F$MvE);LGJe0HSBI{daVSbzi1Rkar%6s#yiMrnkyryF{t;d47S)1 z28OtDL4uA)h1aRVef)><4-$NYSX0U8)0*3&I6J(S`eOHK@&UEZH2j@ST$cK&c&|Rt z&P((Y4%G=r2k)!d#*ifshxO>vYjKTQ4=*7{_ODsSo zm3^K#0}7I*E*NF6%+@cpR@Ct#5}Bq~^kOd_cq(<&i5wDok*43g3gV$_4mcbQpeYI zXP?PjuWQrKqxWbM0Rkcgw0elNtEj8)zf^@WDF~!Wn}ltD>J^1_;0(k_PUJqA{8tZ< zpsy}P2Eruc5+jpHmG>ChMp1aZS^S-1EN5m!or#90wc%{Nq8EDM$q;2QALJr&h{Jbd zv)YFB2Q04HW07!0m2m!sgI)ZCqmDP9Ocy$X5sMUOE-XD7=Ht#K$a&kXlC@CwDKb3p zY%W4?_uzV!WoBx1$mT&g20e)C)uaHaYqH1JsWGmxGL%y$c(T8=jh!zgY&a?+V4!P` zE65?ac$qPaz}Tu-F>Y_Ao6zu=dsR{mr0EPWzSXx&wTDpm2LF4- z6+;T>rmpS|YBZ@p#hS~b4Naif(_%682aLB|yxfi&1n0QYflF3~B;iu%&iS>lU@hts zvs%U%9>1vmBQrqcXs%kfePsshm!6vg5h)C(6HkbE!2iqO|^6 zf9`EmQNEL$_S!_Kke`qLAnMHxcJ%fmPpFqb-69gzjAAWQ8;|e*>}To+(W!5HZB%(k zGzx(il_8u&mFlvJ5ra3GeM!*wlFuql3?@v9r%z)2K_1(6DRkw@%-8 zGP}PvYy++hW~Y6EB|$A=`?~q|>569y(?sCfP$8BCVpk0=kziXSnqMV}VLmv? z3$8I^`<`Tn)zi4AQY42Y#E@ujvSZ5O>mTO9J{nA~^FAV8Ms%u7k%nBy-HJD? z+6YbzkN((wMoqGhxa_j5A5NFl{zKMCy1jW))l3gVi%oSQd7`l&$TazH5O4FR44HrK zZ<=@Gd=7B=k7FkfJNM{ATFkXxrHqC} z?PI_A3Zl}>Tt)m>8xm#}RrNF&(h!OIOKZ9RNV=%8l!!E+#jE8|XlfJpTOx-*;_hWw zL$Tk7OGf@WoZ`a{mS6eIUGU5kLey`!pQ>%1~#PIrcy&Yg#wf@2jkEzR>#_G)(#)IF) zsKP8}y4G6F1qe9bVHoXmNYb9Y!0VTv4{OI@MXuG?9471+vH~ch6J61Iy-wUMF2qdWXV6}FN-=F+ULv7 ztksC6>UtEv6`dmn^=@_jfMKvAP5=18t==Ku*Zk%-J~s^^)4{4w{PR{W78je=B@2wz zC#V?PM8HNUrF3*K!A2zu}E9WiO+Nsz~Ky3E0VL5fJu7m#0#eb8VD|ZFg zO$D70FM=FIaYT&OT-8VlxaXh&;#+{r zru~8{(P(2ffuFfHJDZb<%J6E49Hi{e6l%Fyhrw%5sL@?rfWarGKk zDewKEmgwS{C-re-w5MH-0b-h6Nk1;N?9~URp})49wtXT56gHcL!Agn^Ge>a?sI2$) z)PyG*Y!kSuM$eu-tB+4S`lN=<6o;EWJ~*2)*yBbD$i@9Ej z<=otOKQvMdYJnru7@m8{n3sUCY7ZA%ZeD>u3U9l*kG&-JUheP4Tx+S-eO4pIaGoV!*YK)kBmhYbxz;GT>KnT^-wB|*@YB= z)!|dB_{=n+f%=MkD>{JJE~FNGy^7J*>V`am-Bpk8IXDszg@%V|{vZG`rUj8BW~khR zzMDDy+$h>9_^wyB$<0c{{ zu7?+}5YeK&y4uwnB@czZM6ExIx%f};KUef_uQ%1g(eB8`7XY}aG)JY{Dv9~Qpvv7! z%H@fnUBk!PFcGDaA&|HOzAqjV?x*1f&UuSOgvpAO3qz~BR|ba>+^VsntbRTIG#ecR z4BAG7_NBR80@8`}j0pZ^pvS#60vhd`MxCy=Es|}O(jS^j@U{|upeHZ9Wb^no4)VMu zfG-DLKuFR^kUYWs z=@&Eycg@xJ$;q1`GG-LRQx9n_zp^HCwA=4j*yjQY(`-VCI=*gxR903!Q^SuuNBXv2 zGz7JN_9yy#sB1NZaKiHg!=-0ijoeju(<(F)tf4Os3&pAO#%#zVUyly`PITSs9bGR> zCi_M(vh0R+%b}$gXMFu`W)4ye!eMUI>w{1j%`fioPh>{He^ZOsXj=;)j_gP}bC{!! z`%}xd-fM6pXtXF%rxC4p9F5cf;i%&p7&UH1jD>2MHR&HlP+<7~HHv0pJ2xp@f0z_t@;f64%D&(3fER~HGi9j_4j(WSD4tN5a z9bcCaom`8(B2AiabSL&{EkcZ8V)@Zl1?m`{F`tav7>cW<{XvTR!9n1tMSpDfKJUoH zYO=sCH-^3#H@7T%P>Smt(H1~y-(Cy+r9BUNQohr-Qy)Kt&e#jHNta^$(;nwg5R{i~ z&piIP#)BC%5@x=tN7+Olo>cH0b|E5-HWCpVYK6QKeFL)FRG%ZYndZLKYA)!xZrCd| zuBlN+&21iAS6Hj8o%?kx?CU4L*Vwuxs`|gQGK1~27RmJ3Ja&%3vD_D7N+@ZK)9Tf` zk)Zqzc8&BPu1zYrswH*<6@o=7blOPy=E+R`-eqR6qZ@It;mh(!|xY z_V1qJD8*)n5eo9 zj%@CdutBJWTX9`FBq!2I?67Cl470Wh^~4iT%;wCnG~qr;u2BM0ioL}zFHwC+Lpyiw zA$_Elj6U{`><-k;t)7va%pAC9j*;k{QYQilIE{KVFy~q}0RVGFjuG>{>0ul1p1hjf zJMUNjj%5Y}e4q2k@UN#S$f6!8dhA(3OJ8>jVfN6uIPWAbA?k_VgjwF|RZG*JfaW#c z`P~Ss@|GnF>GK*4s^Xzdm~lSv7H3r9a_5pBT#UR-8tPwDB}a`TTZQ-~T7?!tE2dpk z$0jR?hl*L^Zsx{XT+zffY%5~VdZ-A0Uuy(WDsY&4rQjCX!zrqvEpng>PZfFZ-Fr-9 zM&NYuolw5BOeX^W%j0*{P4h}Ki>AipdXCNr`;3Q)9oeE)17=1~2g#<$NUqCU`!PoY-<4C=8^qC^fTPhJQ3 z7pg|CEH8)czS=T)2W-m17>?&))An!LtAZ=Hz}1nP*2cy?6X4Oa8e9ikGJMxuq7#k+ z>?OIQ7y26`i;!{OYd@WRP8ia+IOU)ho;$IAF znVQA%%4yOo?Ekl_bKTen=95`CJ0o04nOlvsT(VB9DXciB@FtDrT=K<SHg{a*@Mae?5P`0-H<|n5$P#zn%X$w#cTK*(spIk0JI8Yg#q%0Ej%h))sd%!x7i- zf_gu5&7n=)Km=5aneSCt)Dl7AF_EQJ56xfEr)z(s6$qy4)rs9P*sZqzO8=PF5}>mi zI0f0eaLH36l*oruB7Lz8m6Rak|e zES&}}Vb|~XE8qr>T&*oqanF|+^0*}?MDYmi`A8$%$m<{&kEhS;%t_6S?_a!lF^S*X zCG?Dp`vx~)&HE-HR2chgY{P!yR*3FSd&vtg%&K+rN~K5_sG<-cYRQX&tiyv^@r}!; z@+co2qm8;t>?$@7_HKJ`ks@t?Cr8vKZp|`w$=&EpQDV6gGM?25^(yvQmjLNjxH1Zc zVrDdtrw+>m^#4EFnvo{+f5|89(%{@26D?U|e%_n(KLR5DkNF(3N6re-p3yjLB@zOGIMh}XJgVCh4nxr`Baxo4?3ESD#r>PNu0 zfnLyfF4y_UBgw(hkpx0?xKsZ$lEspULEn(|K0mS0I!Q>8bHHkYwMfqr2T4sAEoQgf zu+sw5^q1q$G{&$MR#_0a9n>O$)Ti#~!<{OWnuy{WS}OaZdS@XySmNW?Uefv$=Wa5_ zfVxz|L%F>5(sk#~p=xLqfk%1q@v9nrK^SF}R!PjI-y-7%mz%l{@VMO&bCLMYD$;V} z>B>Qk?G*u7l!F9jD+Q2NiTyTDsLROEz-1&VaK@OOTEe$tHK;p0NZ4uI*aW(yhpU@; zPpF)6PR+q{A-bps;;HB$W;}4#K?P`N%y$8>iJDKiP)3uwX&UcTNzqqK#KXINbM2#a zMvw`qBXgxvM7XG&DBKO%PrC>9`wjp5qkb%v05p>|tS^~y7=iYUgp@aq8=}|_0sf{jf+(!EL4cw3%Xe>`yj+*h z>l?UyYEgsZAh(OfD^T^6!4lhg$`8AJ`#1>;)|lb9838@YlC_c0RL^uG{eUP15ZZw^ zrL$7sLllXdnZgL-N$q|m%@kaqewjb8D~gNnORX!H(y6rK=#>)jP&y}?rH2A|*VZ6t zUr7(7&PM2gz}4ZJ)SJ^lC!&3|yO%R$NntNu5>DoDXp8MN*wL%Unfth1Dq(AvY`|eEC3d)LJ9uwJZLvkTussXp zuRnhOJ2g=J=qKy% zIs)-15@l#}6(^&5_;R-^l&_#gYsHwk}Cw+any6zl6|F*vc5WgOc5!9P(8Ud_P8dE&X|iGRW3i%l18fpSQZzq#zr17)CPS+ zw0Ps>O?9zGk-Lt@iUotT436xgt>el@3#)}{I=`SP0()0Ai_GtgcXK_PoVkn(l2!K& zbt4Nm@nqVZI1O%sf7Uk`={uR~6`RVyF}d&v5~5)wb~9Kn%*XJr?pOkxUz!(ZVV7;* z?1tE<(ZoJH1&;&a>m$lmpvHnNKy!iQ$*~23nI8zz}_# zcoMaymsgjY+9i)Zp=Uy2O)Dh0AWXtqyT}w}i4`($Tcy5abvdYC3XYmign`;C6jtU~ zRPFEO#(ZuhS9UYFdTu=srrIsIn!`S;cjuQ{9`qX+ejMA?TCkh|?+$@QiWD%-*}F4vXD>1%|HaqF`xP1&uM*vmNy2WsIbH@M`KJ_huX}i0-3Vvq^@> zb5pJ7+&K$_f8hr;TM#TuQl|b5BS$nz1mQgWuM$r52dyj1TpZIP!9w3I#MWOoMN-HH znit-$B`(kc3(QM{{a@D$ImLJ7+a)eD-RfAWQ!Xy3b9H}hwz3eNc|?D{KHAXkIlQf& z;H=Zcuhu$-1I-wL%^CLlyBsXw=(Lh)#={9>cEl)Zung{g`UlKh}HmGroJ)O|QTeMVxYsSj>qs8{QNcdK|^m`O1R ztG@|u=h%V(JJdeg@xLGcdyV55TnU<+2#M>M@_d?KyV+H5TzM~QfLPVj8B8(_yCvpX zhGKHpljHl3Kl-@3iWEphF^RC!j;vj~;bqk5py#TkJVO0;jy{1wKBg%HY^R6OuE&@ z-2pHl`!?pNil3@!fHRPxpAE zf?;5p4sPgKl09ETpa_uzDMq_iMMHcQd8lx%jon(g(paj4?xqkE4FTzJ*FGX)mb{oS z$}h(6i*DolH%QHZPf0@|1(x+?TsrE0qwm-nAj!Q+!D|hO!-{6)iFI$AmmftHR}p?{ zsP^r|#qoch7@Pw`hFu>zCB~zbc2bh^X?j3vGo*RBPb{2%39ZNnDN-%Q%@lm?j(L5QYW)Ut%_|u%Q&5kG&M`yU0!={KhqOIQwrw{arF#Z+-Kd|?;6l65!H}6^)gGT{gDt8dr~tEz9ywXV`Zq!78`_#vxlg!B-iy9M5(UmyB2g1e22c#|dt zAGA4sW7mISqLsUbwTZA^jSC#d?vWQ^esx*Q_d--4@c+|*Vr361pd4Txd&0J?_AgQh z%>J@zQ97*;=?I4w6%fyljzZkm&I#O6NnN52Ljqv0n!#i3F*u7{0JhK~#@4v}xTMY1 z@tXbKV&>vAqBREITZ8^>eI4%KjXf-OK?yevIh0qY-{tV=5kw|!4>aE6(a}8N8~IXi z+eozejKxJ2N*nVwo$3HRKl{`Og`85Q@%IQPi=lXboIU2vKc`S4jV?Y#Affhn)1qu$Y z!AFY$wy$HH_kOLnqeiKEp>kzEi`(I2vA#s5@yn?cY?02T)O=GT0aeb8fzdA~JHje$ z#tK#yX%oAQUc{pLQ9fI;A!#r$Z{Ny%DfrTL2z@=$rCcz24moGwD_V zZD|+bYmwC=ZYO07vn+)g5Uy|jD|%v^%h>c=wlY8W&~xgr0FM(56t?KT1N+L2_<8*I z#91mg!1U>50v))wE9#+!C6bbOk0csg9Vsxk0fv(Oqev4bTCa|dU0Onie5Iv{fYe`j zTHFkVM_4$1hsuJrgBX;We8*}u*l5w2?CAZU+rV<}U-eHz$yLypuiw#cs2s6V2o%={ zK;(L9(YwLL>KB9r8yJJ1+xbu`6X_|;0H2AZVKzh(aeK>Q`7|44lV5JM^Xupchu_${59H zV8tu05jWMw=CAuagvV?2!Yp2r^bAP0o!?n1eCPLHNvB&Sp=aa=0 zK3YY*FZ4@&SiMN!-;6&Nfl%(z-^?;_<$ZJVo~GM4?3YBn`p#Vv|94+ap-d72<6rNW zXvL2;>qvhP?A(lE?dg2+7;!)^7O}PxWY64tOr&AK^8Md9L=)dx8p*;Es!NbK;lsNi z{5X3<-=O$)uMaCQMwJV7ny*g8Us|2h$Ie<)DO4V8y%pZdINsP?oTgZC}Cn}a;%Ys8CoITdC~1VG^X&Ig>)Ovh=Xw{M{WpODD8&@;}p zZ2niZOR$~=4lvIchq<^+v{wMNAhPINi1vAN!N_@9zhV9RZ2Z2qPB+-GdVvp2z&aWx zSC#M0qSwQnwBB(C>{n%G;#NYu)2k#cvZg{X46tlXa^}2+DCFZh@CLFq^%U90)D(FN zyi1RePd5@VKp9WX3uo71%VvunVcu$rYEfzmepm&x-ZGS>+q{%{&jLN67f3MgaLDZ{ z;t?c*9tn7jh=QxSc*C{H2)_z*seb0sK;t-HSy&ICp{9V*{L6&QhW=88!vYP&4&gss zLB%DRNq<)xIEpDtveoK>GD$H7uJy9V{QAi!dguxs#s$%efH{qZmoK+`jgRlY@WKmz z{f+T!nj*&PeH;+_8i4Dar2R|xoa+D*YBT5| zQ8PqKv%1LMQU||c1|dK~q@vhCY!1DNcC}GuLk^8?5*;V1&rxk&pKr4_^x^?ADRya) zd8}eQ5r)uiUAo-Wdn?Unx+31hs;OT%%tta3o%WsPTz?QNjG*DE&Xs@-HMU7XA8q;x z8Z7VpHCU5K5Wp+e*{|)6sw@>tt!Zu)@#96Gl+}{TS*=XVEQuar3N!R-K1^+qamgD4 zNgMBowpJspD|obrt^_j5WTKdq_bWR*`HL%KX~?84XPrlWlQ^smy>@h}FfI^FZ3GApx8Lhk-@(MB?SsT9Rro~X zYDXKDCFEuie^?m&C>uPY0rNn3Oe|OST1Pg5$nmO|kx9NCf2*knQxu(-NfyLu%L#LB z;GEa@?*fzlpT@7Np*0lt)Zvas+{bDOd6X*O=2szOp1kdqhY9&C(&&S{Rg0ofuu|H9 zp}~|=BI$ZT?T3>Y2y`hA4$R1c2&Ncyh*>Aojq!}{55%fOuni8t@`~6O9&zex%#7h( z@?^qSc3^wN0)_D%91N2w zQxp*7hkojy(*241*Qy534)3N$dFH3u8cVAUUuCe1i<%}oJyS5Sv~Q2?_GI02qlJkm zmH+X563iw0E6BgBSdY&pN)p!l2OpJo+9vJPEp>Z4;*X`|bGh0zQBby;0j%m{&2x1F znU!;@$C~YqR5b2@uuD&z%zB=~9-7j9eGeZ}gnNn#6rsr&O7QdjHPY~C!02}*X4IpI z=VxpY3C-J9?+Dtg-OiwoNM)y1AXz2s;oc3MF&pK^)00Js`$E*?dap=)7 z?C0@AgvY3n`yVj(M96Z5JDgvNVYARtZm=YQM!VqAhLmInplY=PaRuG2bZY( zsytw;+`r4j)C1>K8)`O`)-C^o>buv>IRU)RjR2dF)c0-tz0_ zt|JF9QDMoh%(4Nr!UV1DMSg_rdwW>nzKR}RU9-qNpYgx1G@`IQae_sxfcb+p&EWR{ z08HE+t`g4UR#t|G2Ug~psKp1|f|?{v`i%D@2XX#z`%aE}|G-cr9HqoR_x&T@_G|*} zzf!ATJ9%~dy0-m`R=C2Vu|22zFML3M;jK4$Pg}HTv#;xP^!INKaJYoCThrL)hIc6a z{OU@ltI}ap20t~2<>AxVcdFY8_(!A|m7qeeACOb#weSD7t}J+9ahCoOViMzX@u{C_ zU(7r)qm}(3`U_X#gN#Avs;M?fxuURxXjn1{syHC~Nz6vEhC4Iibc&_#=MrLB3d!>zJcipb*R6N5>yQcq*? zdqsPwQ;_OvadloxwKg)UB^*YR>t9X&7;!$ne-0q376@@+rxJ%xr8X_G&*~lNol+Dz za^OkGp`yTqdiLY4)#1j))1S?(?q?x#ruXv6JDSMKz~L$1{eJwKXuzbN)#nDuxHR;* zAPJD-&f-c$ucoG5(!CKSU8(eeM7N%{dVQ zL|RZa$K<gIVq&;F%e3W5_X!gSTHd zIk{5-w`kCV!^5=gVsON}=Y7Fz)>Ma)OevWcskuZFK;`dfS%2dMOq1M!!E|$k6Q{er zPu2S`b0>xCO|6D{swV^Jy@{n&bQsm{Iov95kH63f#61T>l%)L6ic)B5xVkA8u9m-h zXZ(Ts4EJ(%i@t^@^K*^~nR3L{!+?vwzo?&TA*vkcGkyqD7EuGnq>e+gD11z$UTrTl z+oII`iZ&(6?CR30QLW9DMpe_kcmgZ%_r@I_Ky+sN?TS&^%GWl5t& zoc1B!JhlNH$!bj`A-W#XLSv3foE=H~pq&cjXNe;femy-@iVo=gAXwkzX)QGua-t<= zsm6kD+wv!|t1pl3&x4L(#;r<4wb1DU0qg?*}GVV?&b3gi%p?JI#t+Y*7&{Lt&yFJdJ%^spO)1nuRy?aiC59o5Ym_R zX0hsj%70%Szo(8+QJ*qI2u|9ZTfdYyH6eKg--?88Yf#XT*k^kgm`dda0!X8!J4)sh zSEwaVEPU-|_D?-Z4HnVH2Mw>-hnYk&kfvGe5`hUAUi??&#ob9rj8V^Fy6Ht7S+$Id z-?0%erSK2c;JA|gLqob6{xW^(?}H%KDox|CJjTFH_I%&XU(yy1Z}ZR&@rUhJAz*+j zUSnD%ACy`~&PF%d@s6Zkr+ba0$)O|Vv+zUewClFS#64N1;h}u9NQwIqt~w1QRF5F> zjj1h>zg`nG^cqnSmuQKsP@kkmM3$;66#?CfLce+-jE%7`M7Qz%XP$XRJK@fr5kq?e z(#YuVXU{mXTojo#UAb<4fAX=|=$#5g&$>m5$oIAGla%QuDI2(zBMNCe`42p}kr8j5 z%MG1)EI^T-q7u4QJWOmJb!wuUX-GF+MCZaIXEo*B+c$R1sqx0fvWZLJ);sl2KpSw(Y2${ni-$gvA5CN&@Y&}C~csAe)5BVdTNQ}p|uN|6hNV6=;t0@VZV?J^siLyQZdxd=8_naup??tWXD)S;!l;)fU>xc z?(u#(2L(2f37_Pct8V2q_kn4 z`PTWn+3{b=*VB{6YfYBCvEH4rAM}rg%#L? z>83Qq3Hto|->IKKco>!cH#R?_9-j`Tk1OWLcHe;irof1A=7>7ik1Qb}!4UUSWDq6uRu^;AbG}!JtHeegG zf*NIJr?T9kLv2*H(U5GHm$mYw{?&U?XJ~c7gEyGz+JzZyqhj0G1rw+9KF^&pF&esi zB=rX;AE{AXSf7vIR&VXhUCl~679qIxAO*H**q-GVPJDz$T6zpg%!g{`+H*772_b9y zN`h;=JN{hbD3&h^Z^e4bC9GdDi~!y6w@APAK&ueSC8=uE2V+fdN5O*Hb`b`dgYe(E z-KFLVJ}*(v`OcdER>JSp@uc{pC&)>BZ*250yz~=ImVPG& z0}US!o}n2VeY7`?b>=0F6|wn^@q;klpS-6ITl0;`6r{D`5Hz|C?WZ$m&gkRpqmOEd zTA@$q3o=!jJiC-e-L;V_0-z$CxVo6|82UH{=nKu!_U9Ec1uznIcyY!?c3f^RIBn?7 z;W1`=jkgu$JWc1}R+Xfx@JA70&B6_ILPQNlD$30_*SaFd9NBTW=0xQ`VI-WynCO9G zPm4XN#-OgT&zqwyr>*Sod(2n@agwP=_(h-}G;QF+B5fqTx~+~%R+~WCXy)XY`0D%L z=2q{86+ZEe_mQ`_l)@Gv8eFYvS8U^u{mKpv;-u9qS7NiVpk6!k?bceXil!F~Nk7Kc zFH*6_4s2T=o9$Iiu!DsLkdH<&x}mm6QTDFp%Gti|>pv3IR>+sAI-V&rI+v+9r?z=5 z3K)tCLl{q>53*GhTy;0VnV=s~51Va$LDfi?9b0zuz?#akO&85MwS(06xLyrUr&Wf6 zf!4^D`=xNLj(QdUrgvM*jrOw|d0aMksotxjN&%q; zEX6Vfi8(FL%$$>OPrz+yHDky~33A7N*zJ;YPO}JUocajrD&lmKH<3>BzHNsLsThj`>D?&_?lT!y2hU?n5?G)|rg*p252)?SFg^FF$pr~WE z6>L`&4~fGwy3(}GEHIgZ=K-a;EHP3TD(WixHb1!WjgI3lL z^VJwOk34vw8sBD)4Y=tSC*NwYht$%ncK5HI(wvSEs?*Hgd0M2$W#aJZ$Da^IB2wYB zukVE?a*&N}_^76i4^(f_)^W{EANz@Z;aU#!$=B)?zV^C?%t~!Kxa5l6i$wFjp~rVC zk+kH3?>qVSfg{fc$F>O}09H}}ZmEC(i4t7#Uyt8Z?|7BcEJY;I?@k;%a(4EfCb=;1 zRfwIz;G~$au`!LQ|5vN`3yZZRg2!o=d@E4tA+`1msf6R8tCuq&cE~)#mKsMuWI$uH zP{EB@umCov#UMG)( zrrNorPv@*uvwm;oC<>}dH0MNR=rSj9-z8j-96|!EO^5S@Hll$Vn~Se3vMp58{qp2X zb$_R!zwZ<0x?`oT=m76%7T792)wwK&Fh<~|;Ci5gV%OJr$)~+;J2)YCINIUE%e-iRe<(s=v>h}KvIaX7{N4)fZv@|cGrWRmC>cfoMyc}((_zKqs$x@ zUI3lINjlX8G(LCD7v-;JT|BEdvdIIv`kU{6tGSHt|LUANDJJ0uA|Ud`q;!%-vpG_q zVc!cEtX`Z{Aj~G0UF9~awwS*K4&=}Uvse%6+eINX(Pt^~NO*v-nPrQ6J|7G#Mc}!+ z5%R7@D!x~ZDY9dZUsVej)Hl>k@5LAO@r4(j(DN~zf#dGEvImyVsbYxsXA!OBjz}s+ z5FzYeJzcJl6s?s@9kmZTf9K?ZItHMik5y<~?-rRya|a$#@yWyskA0pFAa?6riZxk``KQZF`1_;`Q3lskgeYzGU?RfAeDN8Br6EQhFlEYcFCQjkYR>Wv{GVjvC-! za62tBnx)!XTdk@Q6qeMhB1%$3)q254Yc+BmW4?aEauzUcNt^gJu$+f8Ok?b{E>-I7 zJX)0ov~%Fo92q}Da}a6R1whZ$1gK~;zVZD#miX7B;;3Fha(OR3rBn-Fr)Sba7{1 z=Gq~Lh-MgB)l? zxlG;%H43h5)5fUIaQm3c*F83{fcmBzkyiD1BwjpwMt-@eGh(5?-K(naVyw=+Ud&Y$ zHm8I+sim7XxKa$IuA=)_59^UNV*@dlA>yY3-<)7fMM-$B?_!)%Z;Gk}z$d8?k|K+- z))Aa2NexptQV|xrGdJq0T*Q%t@8d}DEh0NV9e?=a|B73HRe6Q~eIR@*t`lwI7RRV*Ry*~j3=fs>dS!TAR66IoRwq13+FYmW2`71l)|g*g_l9_9 z{GmRx?&+s`gT&Vla*$!=P~$~99@uEez3GyQV9HV%BusliJ!s^s+&m@2b1=YcIy`Sl zu6b?~!e;FoHuOxR#G38>aPNg|xp9p0w*dq*+md*vzQ{a+>r6W>$_YDEgGGGnY*o%mn^{>&v>A;Da>&f})(Fo-``Tp!e=te4)5G*`<14iX?~x*jDEwR$oKKa?bC15v-K$rvnGtkZ;!1!HEViKt$LdWhliuRJ_}y zKvBlU1TM?7e(u_1>ZXULrk#xfNwMdY=((v59n7W}v|LJ}>QS#NXG`GOhUO&j!m!Y5 zA4KC7^9$!-%7^i6RKd)~5jk-F0UObDu@zF}z~^jX=-KoR?c*fx;ZL-*jrq$tu}Lyb z(Q2-xQH2CpF(@1@#WbKLp|T`$svahICN(|wqI&A|eV>M9`Q$Ub{&b{T^Naia10YwCh+LD7g>y9{=e z>)IwH)?N&@Ty=dO^|mdEEM?jN3Na+hEZ!&xCW@BpeJVEO5Q-*a&QfBu@_b$RD=l%k zzV(GWV5yZIZB2x{iahYP5=@@mOb(qkM(@^+2w(Q|5h*S6S)^3bZHW#m!~FmuXLltY ziYrZxbvjFGEVR9N+eR{MwFUpAm4R(v9~f(gBzx%ErU5n&yB!Jd{!D_2xJjn;OV9bg zL};p?(MXV42`S21;R-J)Of?nQ&ks>0frq&@*dnt{F6osBOlk&rHdzEADFF>lH`6Wa zmvewflXBq3v@4rV^G1!Mz$53#l#EmhLJcN>A@*#J??0P~`M{Ln3$#sRdw55~0!$rF zN?NvI1@EqA%judFz|(PS!jF(!Y(|Ll?&^z0iz_DjP*IigRYI~qle&;>M)Tz6Bb zRc(ZDCX6ccN~u?+F=T4i1N|H7gPm+J=NrdKdR`nz{2Ok?5WvXU+wm@E9 zTN8coU%Wj2s;B~Qi6Uq}UyZ#)^a-~TCuw&?isPX{6eZR!gE#kXZVfVMtYjzS(0-V1 z5`?1L)xa88)HC<=Vb8Jb11C~s+j}F%Z98(=lHWY1k^QF1yA8H-X-PjEd*0-2(2@k# z08LuK^2wL;{ogUpuQJRWff8v?uONy&Qwo8I{$ahvG+{<`0td@BCFz8|oJfG_6AO1YW5 zWhQDO270nEX(T0qgO6V0sAj&Tlo4f{s~S(|`k>C}dlfsqI@}+I=M~hg8V_MAvu{E~ z^1AC`Y#_&rktkCSvojxzKRuty%3o+1(LfPy*49OxNv2h?wgav(e^0sCXUi^|bLTBZ2|4#lkP3SBl{%lsg1Q2A|2H~P=CeMo4%Qt<} z-%M%vyTAMX@9e0Ek~Y?jZdqzTr~(o&f1Pw5>WrOExSPn*4*QKZTZEKHpqP3i`;hAi zKYGy-A7p~cNx>o_Nc~+da=^uO0fF~<+r&63_%@GkjU&{NJc2#i6!4!*U55z zaWvdtn|M3z3ZvF>7OG+|?T%3Yd=;IY`MJov?~3FJ`5r`(O$~xzL!abMvfQoVF?pl4 zknQd>dLALkA-R!~1>sXqwVIBmy56_;S41x|9*IV!4337^y)Eho+!5n{nz_RT`<{f1 zElMxP4PPu4B7dnVc)7d0B*LL~gcUjWIg&5~+`ao(I!F-)`_G2LYNUwcDFj8DvB-EU zIpoEKSb!9x8spCS~*{w zya>`+&}L(&szW2UjHcH?aI1hofOB985$_;Odz|O^o9M3T5~7XULEpGGzs#U7_`=sG z?`nl2x&lb($W|S6p49#jfNegj@xqId2P2yxI)iL|#;O)|2)TMAF~yrZm85tBzLtc$ ziIIQDn&4W5XYB54zl50tp+lQ--Da#fsco%FR0Go+bG_X#Olj`p`zSb-m$k@s5RVPUkbMipB9RA+)(O<6y( zJ?m_uiHIl=0h8vjdC4F`P&8Q%jBlm5=()kN!Y=V!;3nHk;_66zVjMA9?l{o zHA^H`=%RV7+DPv#nA<`hs0R>89yD>yH$asZzoVyqWg6gm0!NT>`E13vHD}bIBCPAE zlmPBv__;N(jX(#{i-p!y2?MfBFxN6f5&NvqK(UBgN?{#SiMd;iFih`QaxD+zw}Q9l z00jY)v%e9yKK`So($6GPXJ?+$xWcx< zcJM=co>=6p&Zz(r$$>O|AolR4Rs^jqtXEr|rrua?wCt)yEBYjn?Pt$Cr7Z$KoB~_b zYq-)pPiWh-!w|WTdoYO?x!snU;ww*gbVMU|p`=VylYlcX`MIkGfrUZiUKfR2^u(hV3`+yBH7LhAk^S`@Ej5Z-f1$R}?yYyv?G86Ia2zn1 zk0PuQ!@SvA`+%$_Ne{I2CG(nB^=RNkk4$nB9-$Tg<+??|eH>jkEFm4;?j1;di<>Fx zh7%xR%f|TrZ=A=gbrjY$(IDzu+^(xcJ^JXQ`VGl9uK8;E5lZx-zSB{u-6;B%5Xx{W zi$17>Ri=@neH3Z(6>8eidTrr+1noxacs;>%FOOf&d=A7|ub}1Vv2K-?4s3QcAn9TD7k%)q1f} zrwYcN@ao~d6}jSygjF61oI3rT|L?0~%!ry>94%@osryLGwc{NRK2LphhoceVku22o)Vw+h%XD1>{6yD;t31 z#&@*}CA2MLCgda0&m|Rle=BbSq;2w96|o`zNVHsJlz}Pxcr0h+N4sLKME?20iDV#^ zwlYaB7c!lOKE8kNUgC0pJ*og>7^OG>nmO4#^IW9;eYFIjXe!)G5pAbM0Z)-3q*%nP zat1P@LKl;6#qxbz&xV)&!uyeN&dxfEc|q9bwU){CG%eU$Yu=Iz%3UR9An{_K(LRVk z<4A3wH;J43=Hx4XduROd*!io*_h(&8j#5W;>a3$o;R}|Ei`*eKfBlRb3%Tx7eJhx! zKZsPM9Z!f%pjwftwShN$T(@gW3)f_&dJ%G?6Nuefv@3!qntHWEaXk$kZWA#XC+|yZ3ZaZF zb?^tz2Hrtw>i=3YR<5O_t$)-Mu3Gixz4zXm}hyB6TmrJP2jaR_}` zyNY!%8|ZI^_fyLN&~r2AUz*Wp-q}<)H+!ZiHl#b)iFCa2NW3$CIRXd9hF{^U zc>nv~ifkBAqj02}B9nBEbGSbVDOPK-U#ASPx`4WPJk{EbNdb5b5^-UusZdjgot|4C z{NL%yjmZBehHWMYfgh-+@BV)5h-0i|2Gua+osFJ)jokz3lg+}o zu&-*3uJ8S~+7z`}*Pk_&py0{3HC3jDO;ZIY*J`_~ja=ewA)I&{5QRiTPQ;=}5$Wc^ zSf(3^{2^6&IP~jxPCnPHuW|QlZXhTp&Ji_Ml4#VO#x ziFRyP%_b~^VcSiI5V+9cAwUgMEx&TDsdj(x#RYIUh=ykjeA)^G&9;v znzL`Q_@)sVIW^Iu=g&KrWq^0E>^kNSp7gO$2U>>$(wWCjqd`EUN?dA0MK=G0c%b*z zei$CM)FdiYdn>@FC!Z!s4z3&B#Fg4l?_h`{ABu>#Z0sJq_@Xvc0relI_%tld4>O#$ARb=Tb79^*c|)g)ng6gRZOCLg5?e!Ckq2A$R{$zo zYqr%O8wFbGTaaN~c~?gV=u#OUv(#Fu7InyN%H9ys_?)4fq&oSH8l8_YUw45G=~OgI zT@(S2ml+(WKDeXW=-`scS}i4*6oOe^K}6A$WhE^Sg|jfMc8KHJ6idxT+tRwL3&zC2 zuqm68^P8y2wLia@6c6piAW>%;^SLp|h~o1%j6~X^3>-A8z7tK?!-|ra9ysb3a3=FPl|k?w~(p6<}_-!J&nf zYqRGywEbn7lGvi@lsoHQV*Gv9J5g1TeyV6*!fO)GbMEINUSy{=C3}%XQDdM61@eJbd2`n) z8kNI!oM0zT7R7Br<#U*>ew?{??J>PRx7ro$3T7%re~u@@o2DAleGQ@S+%+P$!0Stl zuUdjRQ_t6gxNW7J670@g04b+M;q=-im`7!wZ>_AY+e|fc(MYF-Wl>^vy<0tU;ldfs z@Dlt{4{jIC@*1`{*Db&`FkY@)@7(m_z4x6u-xQgKKzS{_x z@AIE8o5G{qM%F=mpl}l=Ci%(}^Tlpbc9=tVUW88G@tN zPPNF`qTd=NL`>g+%zinxV>)zNE{<1p#MfNW!*>7$3p8znj||lsQ1~6>m*yQIB7;;G z;ihR`SvmTve`@F0%)${W|CjxBy5_6sjo*%6(-9&fUsNG}>#uZAG;9Gc7@lh6?dC7l zEC(*bg0{B3F-yG;pYAiWkDb*UjopLmRYdh9fnLu12>IFy+E20$7(~DrT0Iw*FfH`% zT}p0p-D^g7HY!c~7b6=!!mNHLeO#@sFFYcHQ&+)n92ZEQ1TNF94J_~?6J}h`jq*hn z`!=dOHw*!9WfS|<(yV>M2pQE~UYxusR+2EXPEvOEp|k242(z#Jl85B9)KVooJ^Roj z**kHCD2SQN^RA^yq%inc&YcLmu#bz9Pp?$=dD0bX9D~E->)Pl=2nb_V5`|m65}<~G zvOBJX1~BhjwY%OeMJN4McPHsF4o=-;TQ~4u4fE$PsPejx;Tz+xPd?IK;ASn*Tkp3h z!lq$^p1a}KNbP&_v3}{mBDM1$ae0ym2M&2V_g(0Ym8j94SY*^0jHdmRyLiz8zHMltH?JgS=Ykk?_wND=%DJKg{-m>&h^ZZu2M7B%0xu`Bsws_`{Q>+=9pnv zhIAI6Pi`1yuCX;&>?-x0zJ#QuQJ`IA&JaLNW2X}DSJ{=ez%C^52m4s929=0BJgDNv zb^wP~cfrh44h?~)AChmimm5#WO|G_~84$)i1Xz1p>j!VIjeq$9A66Z=Kd)esuWr z=_Y^pU-?fI$4d*;1u;nrJ-pSE!~_<6lPTs>JNg5iF1r_41%`|JngVBLT z8=hATZTrVz%C+cAxrbSiDH0#lvCen4tB8`|_}rZuHLiGl+^wTJBX!HBPfci~R-_6$ z{Zw0@5Y-^9#tmS+;mG1n6nlzaHB&UHqV|RutqZrPb;QDxK28$=T@}Kv&pp|JKGP^K zBrF+<{XuJiFjVEXCI}tuN-oC~JEwE_v&Z!5rkC&Xz$!Lr91MmhZM04pDFB+9b$}l# zJ!&C6BTe)nUrz+-S9U3uE954#!1+w79Y%u_2Y|H=gh7RXmx#DwC^M5`m4Vi2{@c9` zG9ZXZlnK@ktkxGNuln1&s1%=SMrbfrPgokHNkjE^5Tp)T-X{E}wz*yOK4Gvf#twd) zJW!P|alJ%GSz92Rplky$xxfI2g*0>w7xal#z~isA31C%`MbOGDr)HmuI^~S&8CnRp zV3kL5tzGibYJ^+Zy0q3ucK=hC)O(GMgWdEKbJ%q zU`08Vcx$x3OU6ve6vgxv`8sX;n*ibJD;`keEp0EdCj(8Z(1>eyS2sde);exPV3}=! zHyom~%DrAF01w0pHZqjT9oUgAEG@2w6` zGU#Z>g`f%3s( z^u_`uPDGyFt%`R|54@g>pbt$0q9X0-Rd+Zar>nXWk=Doh={;{beW0b%Z8h|yOB zbW&bfRf-ImC9@$|3+o^ft3@UKlh03Y&wO^Wy>+nH63>>aMUB6uMz<+a zJa_H6YkD5*CVYW=D@!Mgc8@B`Y*{tOri>Y&+|D8vnCmVj=RO zwPCq7v%THH&Hk=$$fGJ(`f~BEXsfSOQQjHKh~$jlSfhE)Wi$YPHQSZre6pHaDQpuC z-9tlq{Beyh5`r#<%Suo7m_x2g72ZKm8r2N-QxUH81&K7x`=is@?$A>!#7ggGvZ1hw ze5GzthYYk_TwD|l_6K+LL~Jin8VHWj7#ajArkl>marqgs?aPGVg2zCs)e5NewO%|T ziD9$NV+oDPf0O60oUqzNP25v4)n+i z>bc#|WMtf8Css`8k5r?29kuiA?|&z<244+vT}+2NG5p+Ghpl|qI##Rl?f0+f6~gP!CITFPPJ zxz!iK&6{lvCm4Eh44QqSKM`=P$sz21tQY6Q-mIa9-8thfNWO^~$I=;MBu4No42uZ} zBhqo-nPDpfNiC`AG)G>Qtx=W7g-x7Z!S3L|=x4J2?4$Ak6U+E?QlqBn4$%=`jF#lm z`u`w)`XgUd%F3EB{GbL_U|9Cyi?k78xYp{lvB!pILJM$p5N>{-F2Y@rUPV-xm~96A zIz?*XVBwt4+Xyx`k&v`v(3S)uux8(*+%tVdJP~hwA4Y(!(;NWLq|E@x9T9_gQB?Q~ zZ)_7ze9s-`IQ;&8YpW{EIQ-FmhQ z8IrV~&p)msb};fmc%Fay^PRgdYKcN+IGtpyAE`#vG1VBp9Dk9F2Dz8go&5K!lehFt zxfv@s@Fc#rqeUnBk(_h(k8nY~@Iv-ZWbZ}_gMkKAvna-|pM0xU8i8=$bv=?x4H4rC z`BL<`gU?Sd6tQZ{AhJfc+ty?J>@X#`r`?gqLwRQCA^K1dghV;leR-Zae@2UZ$vWtkgLTVF z*gQ5kw56ppN!+JqV`oB4pOwh#0Bj^lM^%VSs)0!ai4=CCu4iA+?gPmcxS=BLi9)Ch zuZ$gw8ZKBw8Y^x$YF^zeb&$Qw1Ff1#1PBS#er+vy8Aj2Q>xh9UJfr477DaO!H%AA^QoS#58~|?gJ;9B0 zP#4O&ocQK|xW6LWF19>)o+l~O$d?()PTAMu8nMqc z(VYlh(?sz-VOrH=3;5;qnPf{=l7bF z0>w1omm^E;&~`zhwlzF3h1wg3{V=C%ZLz!VSJ6vcWJD2=uSx?L-@gez@JMH7XP?kv z$v|;67B*}vj3IMZHlYb$*C60ot-rRn;m)@8+d1b@-58N4A0vqNH!`GcRtT=d>1iP7 zI#V>ip5-h!s~okBaxx?p=^5SlH`9Om8Pg>mSyLml_|WcZE6Zz?NV$v{CMnC)Sy^h+EY61h;6Hmge^z?66o{sQL&#Q6x6(w=eR@zlsONs!K-^;&qGoR;NNYy>vJw4`(sxy)Q|6R{L_bksj z2LpdNQSvx6wmYcoY7+J{r4?+9amiU3U~|p$TbQ5GI$=%HIz9ce8bVU4C;L+G;PPOl`gyPyCo-2AA%jBZXK~8&QLK@HocHn+1nS0?v8|Lh8v7B%sHvKjnJWq^M)h% z?85V&?WP)Vk6a9ICq2Tw*NHbWSK^xK)EMrm5qB3E&A5cYxyR4ykKNaDq$GLLpJ$D@ zi1OLVW{JDY{$pLDAf(8Dr16F^sXDgBI2c&!W4ndmA=cy&iQgaI%NF2dV~@Rt^4oJ7 zVFB}Nb4xO4u6vOJj@PIcre~>_ckVIm=4K{Z55d{V%p**3%yk)ZKJ5b&(XZkDQ>%Qg zkR()uI{rlcqk2S&wxqQc@cQ`;2SpWek7vh+Xn2PN%<7;Di zD$ad%5hXqoBgcjBvMiwok`{8;EFLA^k<%d?R({-)T%(JtW#9JTn}^!*F?5jJu-cnT zSF~t58T}4w79plel!a&T(I55T((HmxGVbJ$G&i_*MgnqZztp+{B!nkeevGTiL%UQ# z+ZP??!X5G1qd#a}`X#-)x@kmcyhi`3cMH{&tlVO%!#kY$aLVOchn~A*%hjqfy7&Qd z&V;6;ZgvBprWtqk(@A=tdL*A9o4x<&_ZncpLXYq21dPmRsDK~jc|pE!YRzzN{zPwb z1h9%~cSZ>UrZ8se_b_T4zwa?pv?=PX==)Rzpc2!eg${WH&ZNb;lmP-o=dK#Pd;F>9 zHnr}0&;iODAqF+pFcqmc#)=G>=N^AE3+hJSAO5LIt^eNeccphwnTb##aPc^f5>?93*-L={tCQrx z+Dq80Z;H6mfXsMSCGnQ62zaXS9|h7+i+A?a8BKC(J~K94A!}HYB3Uov9c|03O*NNV zbEb-i|MB=^y@IYcst=)8E?zZpm6{g##NQkme-f^aI8^UComu} zzgBj-e`KTR(-SZHji^BVK!d|O*SoF-#0T9eEJ$}h^R!)YW-$Ia!XMT2s0N+Md?$G z1wBdt*8H4!R`?XqxQK{W_egLipzdm*R`uc{2ql+oow|5Q-JzO|QOV}l+#h#Cz}Bl+ zHQUpAKGuG`!P+kV6hVPoHe&{U9jm6uuQ~R|Y4+og7m)$Coq7s=&W1b~L}WQEwgNpn zd($?z!_L+Xy;lx|mYU730=T9#>jC4e9jn-T(+Lu`(eAcp#HNp8uhb@-4Cb8lM^r?_ zir_~Qo4Ea?_F%EubT}jF$g2kRkX`n;fTuMuV6prAk-sTP zU@>9~2_My3;PPATjLo4)98hwtwivwm4F5|9`pH#(8!~XLp3ZRT6oOWTzgu0YOwrq_!Sb$`^VOa zuLm;3q&1-QQCjf}s;a^q9r!^e91aQX*>qKp5C;t0OBA;}Yt^`@w9XD5kyv9{TdNkn zv(UA)!oN!20=kkp48#*hPE$mN|Ib60f3EZ~IQ9}6t46ZYH)p{EVdw+bpo4$6``3Hf z>?RJ!+=J%0#E1qrcuk8IK=MkqpuAN#i}YT&V9Ua(GcStB;>ep{a5zF7F$E6q{OW>@ zr0t$l39N<(Khf-{``=`HB$~>RH;~lx+f{O&Xc3OqZJUT>>!V~j+C?%?w)L4zu|7fA z`;746ss!+-=5D|KQuZ@j2|ScL*-Dm&hq&05EIMC&R{fBv&>1AIUe;e*OEZR;!ulg9 zMMQ%7a4W*9HH4Y0S%=I;VGaGzy=jAToFHpapewuUerUf6Kcc`z#sFa2Me5F8mx_3y z0bXq_d9bG^&Yly4!HNj^!%nm;gcBkBWiul$h<-(FBNc`kr9(+L zVp69v{;A>R;<428+(uvW-(S=bgyaFDe0(*0Pc0z`6)`%ayvQNpe1}64T-Q85?6Br7 zQM;v7iptz|m#T< ziBV(b&dZ{Jjd2)_HYJqgIzSK7sVW>H2oVRHM~DpQpb??_?CNNHE8Qe<0aA8_d&ut3 zMr$_vA{-MQowM1sf;iRop`QU1sIf1Q*xW!JEGSXY@MA6H)v*y)qv2Lyh`x&`|AQMu4;M5HMxy*azrN1hqo!f}93YK0Kd2+%s=Eqhv6u&@Vd6_5m1w;dTm{?|Vq-_tk( zn60Mqfmg=+yBY0#3jbd&arim+?82Yoh@oESXCf>kJ#aOAdMAmq`dhC+U_l)SBYG8~ zoG75wC}}F0B*_4s(gW@=?{M!!Gry3K*OXMA6m9iCbx&=q+1!|tew$5+a-UkPurAe6 z5Od_8`S;@k$sO@$a*6)4|5po39RAfgU5G0^`*<)#*yi*joocY-s|x$OiK^XdX9X*ayN~PeT~|-N)1tkN&Q@b@qnHTL#YXr&jU8uXZ5U`if1*;< z`&9A#T=VAk3obVB_Kv@PN^5~`mEtK? zS7t=lFspl-)x^^mG!4wq=rJB73=W&}q2tP4e^QPK06lmE$cSs?9bl~Etp;e=B0tceTrdB-{XF)gD#Otz*LDu!i155`^Zwg{c#Me_HL2A)6*=; zr^B!H4JR{Y5F~5OAG-dY9%xT3wicGu5RE(h_LVdCHqJH{pVjU!?yjcS4JkNa4nd9D zZ-i=!10&VwLg3P`Sg&pq`HHTC0teOia4f06tQ^_)${93m3@=jkf`tTcZ}Ci;8B*-`Y=i zGIpqKv&@lI+nV9<&g-`)p3rDIp^)ZMw3_-M${$;{8yUBb#EiK7@q9#LA?s{^k`D9yALaW0at?9*)>={?2a z@H&R@bXU#dH6k>{xOcJ)^sHt^IX?{&3&pF3fnnOAh?Zuxc3`7%Z`UFW&#ir?G!TCnYj9=J4z(bLvkN8GiH^i5YA{|9??Sb)XH+L-X zQ>(^`)X0sVc$LQVG??GEhThp)8Q9!UnY5YZ=_V#5MbYn~hqVch+0Vkc@AtH<>^5Qc=Lh&@={G_<9u1wFWX zQ$&O&{Cj;y_OX)(t3uz=eABIqdh=H<8vF>K6`@|0St$-B z9uPfEWL~Z+6#tju=TQH9!w>ZUsMeR9(yW+jNeZMNFGXJZByd8`$c3v(H+BvrBMFdN zk^$;v8mprGB9i*^Yznjs?rc5U+XKKZ`HeXtX+=gq8~FGWqNELcrwtCpdW4_U%dt2r zXpN+%lXKW3GBUDtX(zf|XgQ2h`ob&&4eav-8*boOsnS610H75ibF-d3dsck_Q^UrJ z7^ao!Y&)Wad`qI~B4~}p5-nWF#As%NB3HqhB2KeT81cJgQ$t-XJaV z4T3cDmk7t#w|%MzB@(#6B-4}~SuE@@pS# zn|FqY8X?wJG9v&+!wD?Ymal%!$9HuG{}u_k$^M)V!$FrsvzMB4bx!3a{K%p!@*qRK zSxbI+Co-XAGhAV|IAT%cHp|}#F}9nF6XaAhVI&`U*Tgc%0jT;qzt<#`#d}-glNp0M zBCl%Yg;|A7gyB;(x6*MkwG|TJYbK1~7FkNnu5PBSq&3%GYRpX;4t2%$i1Vi`Q#7V< zNwu|GFaE8%yT0a0l4Rf;O&{OEW;*Z@ObI+NO_9MTPaHBDr0dBcr&b_@X{t1+&l@+j zVZ?c**Qp|7=wV3%*rFh4-e_&i!N#1TUW9o*{Q=NnB$s%#6a}3{+uW4# zoN0(N3%k*{!(EkN;!_uFtX%5YuNv4>wT8sP8m3ave!+G??Dd*$BOuSB=!fqgf1)37 zPjwt)^YrVdG?}oz!q@c*JgJNy9!itu4;k$t|)k?89OAVi(Fedl5Ma$RiOBtV*H|zCUL%P!-xqCkv z-YZoA-qsMfZla!fc7&C_Qel7oq8|J~ZY|6Z-)Abvz;&nzQqckY)0#bv<5!=rau4V; zAR}80QS~a%z~sPy#c(fxVuD?0vI|y?izhFUdTR+Mm}(gQwbZhg;WtktXWNfUFiQhQ zH^qgfCnmY~A)}6SiTvyd4PeT_JW&L_mYyQ{iJrRc0!^>lR)@GuY~fpdkt6G#Hij^P zIFaYb=b6?vVE*9p_unlvI9u-2P;lfB&*rOw6MJ(-f z-YWxg7I$oDzFdJmX1LTu76mZBS{n^NI{rq>ux55g@?7maAUX>XPrrUTV@&Tq`a@O) zdj^|x_EDxF0t3PTo=44bwfI)t>e;H&C>fXI^yNY*GEI~1Z49)Y!1Xfy>9do0f^ZWe z*yxS@uAvaz^yptc+3ZmbZRL2pm3bv*nvHhTr!eAN?-u0mr<&3zXjb!G#VChtu0i~A z{7@T;rI(Z z^YnzJ4-6M5;p!*ck5S@9o3p*21)o>)`UqqFV9Tqz-KkJ^%k4?61NkENaTiEw!SSow zZ|W}!x`biIYpXnsm?bq>AVDGlq||Xne68hcCPnV~%BnXDNL!O=!BF)4{G~i}=n&XQ zEDfAF<0{C()h(ewf?F0DA)rxyQO!W9&DFtA%>^!vL%>BNoV0GoDsme|1V{R7^)AOn zMp8d-+2jkE0g5PRI{-O7+zPqMYbfQ_B?M?ObtgC@cW%+0G!U*4SihD$R7n^}q=~9- z5t1s~sCTsPbh_bzh;qtdTU7stqeLQVFHA;{e#a&CQKmkl{tqP^=GV1Izd5gSi+dnd ztC0giKXGFwX8^q|dRX4^o^yVjUgP$evzlN*n%NI=1CVPuj~Z~y7^t1d<8rrSX%Pnh z>0wexso;<~PM@CmsRkF4wXOayS&ZbKpPmuD7tO5%xK-SCk1pQP6OaT3=TdP_e=6Zi zBapvH3}Z-f2-IHlP)r!Y30aWJ>skR$9*`1m$%A9EgR?PT4~=1uOQUEv&j{-BPo$gq zmxY+C+oDw>NJCgIT(STUC{{)Mwooy$?PIL=3m`6F|TJoPit&Mhmy>m-L*LAVfM zJln9(Bv6FhxY_VF_oUWyaTLSm6dId`grL?P{Ey@H7@^Om#wg!{9Lb4og=?$)O~aa* z6qDkvq%0@7nHHim^c^qhy~v}uzRY;s%UC+4F}|{p_!m_X)^0TJHkRI z!W`@n-=%?$Eg@J>MsD#>$A>KpAGij9&>E?A zztUuwbSbS!zH4 z_6{y$cBz!@0>esHG1)zMN(bw|A%l^)LfCpo_l0lMV8!DodF@Q3)5V~!ukGey6j~Qu zLL{K3f%|MGBVpq{3T(=+-=_+e zg5L|l@f&Ri3e@;~s3o%W>P&>q^JcaBxPHDEzN?1FL;=gtvsbW`#q^U_=A&%pAzGmx zLEHt4g}l(YRcd5 zg$`Z3&Lz-!W?s#HG4AQ4ae>-}{wo8-Poxt#k-v8a%f8+{=w|kzNX%NNcnUwS zH5E?NV6Cz>asoaQ*>-mNJGUt7R>@OfThs-bnt#BvRn>Drpb*ivi3T<2#JOrW-u&JM zivI|On5&8gA7W@4&0=_A0am9gy^h-sf=zEv(~9!`t`XK`i1)aQrqrCH$A6PXr}sbhrQsS=H#^PY29L3^{mE7A^akNdB(;9dp+Fw<0Wy?-o; zQ?3aCu%l=-QEa3=PTbWLrCaq&xQh2GM$B~@`Mk2Nl4-CtxopmU`<0A_c=*xq`{eB0 z_V5!t4Rr#fvA0O;0}J&fLSf_Qwd;#y!!l9B6)9Vp$An7=OOlQWS`V9EnHvH3vAC50 zzCp#6yb&WM!|)po0Py$EM6JPbN}!s4Bofxy-6pp<^f`u=0Jl}fNYDe>%orA-$&hfd zXZ7w{U7}=aK2l?gJq%uRaC@KzZ3BP$sdIV+(}h}vbhmu%hZqpJ7VTpMPo?JuVfF6t z9lhAy+uLz43$}JADaN9$nd7E#t|w~JS_UeL`h$_WuJ%y0Zft1sL9OKu$)zf;UEe3| z=9C7BJ@LciPsQ)c>56awz-OZUUDC6Sl946_Mgpyvoo{AL=mBnYt3Z*`joR>%plZUV z^%T}pYAlI{3inAa)!DlBn)Q)G=U0K<==CtZb}A$DIF+%_J?pos^*IrFI5j`rG%0sh zO9~0!n71A78R)L$f!looCbcz<#Y=5{jw(m`%q>?1KknlK)9fPC2`Z@MgUd78o85lN zmQulBN-nPI;9&={-y~$D+=fybEi&4xmsyg~VPw&878;kDS}jT!Rpu59g(7Flp6hw^ z=zIF}bi?Hr3ryof{`Z5S(Mrn!qZHXded8=4=}2F_1q4_P18@0H8c0Y2={3dLpq0Rr zRl@J|JuWf+v-(5?ed@TRG3-w2R{l{w_#dfv|CJ|lY&S6-h-gCH+rIM8@8n-07VF4{ zmx8)+8Qp?`0r}WMOreoitKh5_;izS=MNt(6E8rk-v3 z9!JorF2zj~VuxlbY1o&#)I&~57K7ol_GY1DEjlD6t2iq}UJvxp#95aGwDMsK#A7FH z8Sfr{Dk8fXIUPH;I5Znt&q#(9!DuFy*Z?g^T#>#r;&|cc6j8OC&n+i?6y%h7)Y*w& zYPkE8l@WxS&iuB!6G3R&sZqsW^;>|SYGGk%@w^W8zv9S_c#DqR<;z-;xQ?oFHIXMK z@`q>G`2jaNy6IWc%ZWvEf(rR@72a#=9HXV)-pENxZZ%5>+PQmcbGt_d`k3cIr z+uI$<4-J=s@;SpGqH{b=Dx!i%(`t}f*@y7e<|YRa z&u+L=*wd~3R}C4(Uy*LN^&1)*hkLV|WQQbj0Cn#+d9l`Fb| z4x(?%r68JUvU3xbnm(JA>-u4TN4&I#Mn4Q&*3y0nGkpUnL%qRC?oS)Dt zPvl}Ey`c8`%!K2}Z#qH+`*wfTdLz^RI6Zmf#VNIjljinspe^oM-G+>nL9x17Mi|sM za_V`%UtQUqju}2Ni92fc&U?m@U9w^*Y z?;hoWDyVAxeSXdiW9n*CM1l9xNQx`Z>PiUQ36^1|Ws6WBN0U~+$ZJK9%st%hh6PU) zN^Mm<3nHo0XVo1b@Go;FzzeAeO57@xHWS5I2 zksVZCh5v>{f6aPJxJ!+g=Y&Ld$B}zfBO{3>fv>d@kL;_X^uZe6!sLWxfjf0f@?ZO$ z4HZ}2$bTzt(_SDEXm0=5belXPl&k~Wy8yLi+E9E?JsVg+l%Jc>GGDBcxXqGZB!o6C zba6B$#;%|BJCNmAn?Gx07w4Df?AhZGRu+=De$!@&VDe(lAmpeY)Lg`hZu-F?YWl$r zQAtV|c#Wka5;CGqL`;|gwD3=y*CZk7uk|@1Jv2e`AcV+cmy{&6qH1W1;X$7qzo*wh zxLFoPdPpxNK!i%HIP`#4G7Hqj#m20SJfS0On9{HYb$ywQOw{KzO1L#d$OkfZLp zmS?0;X!(y;*0a5U354#c_Evkl0bNk%jpe0zwSvq}bgNpKZ5YLk#?rNSmaX`HXoMme zlZ(`Ao*nrRzb$rAS4Tp`u0ktMB1l0@&d=N52;tc?7rYf=N~|PIAYu5`Jicf-k+WZv(rJu#^YK_w=_Yx{QFe zb*mZ_wx%<`)alzaCk|0F;tDlgaH=eJq5uh&U7QXS>sgtC@kdUq{>Z$!I$lql8rP5^HGllh5eKuv{M^D|UPxp1`mnR40_<$RMm@1v3F+>gwEF>C}2s z2Psfzi;Y8!(u7Go_@zF-!aog}`a5g3HZC-RRgrsIZM2J`q4yTharGXl6f>G-Q@0u8Z&p>Pft($B!@K#z(e0!b5!zmY)Rg6uL0Ax0Kq=Y ztu=kGjgov?L>(9ALUq%=WA#9Otdt(?G2g03q)Q^jH0+tf>l^m?;cn1!Ap?p^5es~% z*7{c95dqU;g+M}jI=wvCtfKg)(!ovw9BZrd3(ZAs2p}f-N_WcwMCe;1e;y1?Y&Uk3 zyK~dm3q|N}pj~O4SAmjgl1Ql-CPf`1s~D`4Bc_St5S%ynn(1$tY0r|-9#JTe-?#nue`OcOsC zXoj#X>{AIZE@4FJyuvlUsf`4#T{ribldJQel83H4;i2PJp9=0;f1C|788sZvJZ zE^rX0%}S|-2Ai7ibdEe>AF)+hhs6&KPh;tXpd4i3A%2j01bLvnF+RqA-9a!$y4@{{_I$e|s?e^P}H$>_`Ew2G=vJ0^!>6 zL${NiJp8*XZP(i`esMt-;Zt=#!iL7*e(;mF67F$}2t81l;mpuBkX<pDS~@jHuG>>y*2z+C+W~=&|;Cm0FXO4KdBbr0DnBT4)*ZPG^``v z_?8NIJCdR!a`E377_5`DKUn!uZF+JCYsGtsMLMKutpN!Gwk!v8s|SIk^JXFPsO7LX zeZZOOyT|W{RfJ0{q!2xcThmZclD-U3FGSg4cEz!)t*k5u0V-4jNE8O6Q;F-kiv z*Wc;)%i%pCr`WYGhwuLQe?r3)7>!DXjIP6kESnVVC2ywLPB6!eBsf4YDV7^Dz`LTelVbWHY0S~OwlSH!qPt*@# z;^t*VC)Z2GFyiS=HWt+rWmqfmCEQ6L{?9i4;0XGW4^vBY!bP%+Sf{Q=IV<$7s8U9l zY_f$q$Pw;>0e;KcIuLyAe-TRX&{UYX$he-#H}(TIBtAB*tW;VFHq;gdaJ-qBBH~I; z;0-2QbC&4IoR#OH5!Ed;-Ipeu)#?I*hnFwZXgx#lUQTv_l$K_}FjTH&*uvWwb_-V^vt zg-rO&_L5G-UtzL8X1o8ozv!ZSwGvW~Dr+#Bp~im|XJloTBLAu;+1u{tK8(DStf-oP z!gnv+12dPl5M^}r#$?|KrA7(O^W21)71ddfM|i?EmX~~Bdevh_PO#$YRQQ8%_VD(n$epN-;1Jo+Ql)8_}){j zf?E&pQTkB3k6KLB>V~I<((cb(Z8x<%$L~O}e?lkVf9rZyn>MzU6rt+3xYLcA zY)mJ+oN3LrD(l1xnT#t^9owQuAxEb<8{T=$c@mbVe*NE_{fimli$0klp&+BWi7ATU z*If1&GsFGqi6@`bQY>AL;3e%8*}Bc?x$wDn`&Alx%*h!|B{Py53QnKN4sL-^Kot_b zKQ>{rB~IUKHj>HD`5%N$(+gxw(#O+3wU0Qg;OcL%8&+lwe6PD}`yV4A0jQoMu9UQ1 zNywC~?1A`G>oZ+PiU7@>n^J?1y?E_(E?$4voT}9SOR4b^2?~>1AHGX&k~j62R}@^$SwRso=!SB}amxvHy_2;$tP>c$Y?99wRg>5#IRZtO;h?tg2&#HyA`eubPQWF7c5I)fQbCIn*Zhj(O$NL zj4-MC4JoC+W|@VWj+yAKP2Q(U*y0!vye$sFdm+7QqBqkHPGXNgAAgYTleo*P*LkhF zhA?6WKh}iEz%foVtp#rnrsONlH#ZmFHg6$z<)Zpn*tHP?G7A7wI{3jYo zBS7sM^*X9Yor4aeN>H;86LP_h7h-DDXK^ubK5CIEBx4*QKGZ&o04LBe&GmJjlK5)|Tu`5g)c>ervweJN07MalcHa>T4 z0E1IcX$Xe~f^osUua^3&USg5}F zHp=97+qc-+3JkE0tXGYdFz3|X2fG9)teFqOKdEh=aw%@trjJo^ta~{3j^BLrJ8e+- z$Ivw6F4dxUuKUb`ZP*%Aw-%=SsNbtOul28cT`-UJvbg=;#)`!*aU9LGJlPFzr+S=j zT@eqVhp7IRwO+AO>=+G)G&}x(o=xEMKbFo{;Lvi#gqzq9+glyz7 z`_1_$Q}%q81faNO8L0NMwE@zm8zs#&yvr3Dub3{as~oMYO05hZ8ya@xox^9L3kRVX zk|i&x`r5GPWpe)ce0}@ITF(%>m`{ZfzO=Bcw)E;CYhbP83pwB()(7wt5YcV6 zcy+PiYPqw$qr8uQ-CT5im*Jh2?k4Fwu%>HqVZ#n8o{ubJC;cd7Ks~2N(VhOHHLOy) zA@FYNXtL0euDQ}^Z`rpYi-wj1*w=|_>9gI)sHV=AD7B&|;}llj)ce5N-W5Rt0C>ZK z(~3PzL_KnBb67YN;v`$XVPrR*BTZkx;|NSQ!`y<0NSGpBJFYvEEFS(R}BtpI1FqjAE> zchIlwPFqEC)HzxlgL%}@QPys1EY9YzS8z0;4C^s+hiH(O4-R(Q`2O&rY2m}O>XUi; zm7l&YB7z0l281=#exUus-n!pj4k21Dsx}%9r+5GAxL{z8Xspkw=|ClmKI2$rfWd5Q zwyEh}?r(R=JZt@QI*dqa0vv?xj`$w#YqFR7seatY1Zw6Rca`UP15djKz!k|c)^bqK zBa@_rO_`*k7HK)5ZxU8-V-ZK*l==AM*G_BXZ0jbXUiBU}9_}4=S*ij%U<}JZxa)eA zY3@p6aq4ozhQIxeVaDx}3P>Hvwxot1zJYJ}4Xs6QtGe2!2}Mfm1l(}lKpCzX!e~5` zCUzS&7_hX7vsxUg0iFA)TEEyc-yXTiYun;gD#YRPP&4x-tEavd-tdXOt(Sj!19E}2 z&5e-{>oVtTNF11i$xQ9tLRHcDo{757qLAgemTy56U5^D&GY~z!f)-lq-jiW>7u}X@ zVUZC;Qc(Di9ntCYwX!!zUb%*qH2}NXq2kV|3?mfY6W1C;qDv*4e0&lRe^!%-9&hUO zqBceU5g?;UqL3_VAp-`OxlRu8;#R{dIzv?z`~LA4DyW(7Q@Gd0ucgb@fjgyqxa4K7 ztRG)>m?^){cBWZ`YC|LPPCpVXe8O|FVZK6^!Sv4-Ke`qLMfPHEFH5^H(UH=jM(4P$ z>ZsHxZj($c_U=2`E3|c;@0-NBn!)x6~a1Ren4CSkolsUAPO>-MMp*Ync&*VFRgLuad{tnl@P7W?L^^JNu$Ow%V69^ErwY z>(8fOoX}h$^JKPx$;i64?d64lfau9k94%xVY@(fNA~4LgP(dbdrEMDvq+Ue(>bqva zQXgquW5SwdJ*@F-{T0pMfcQu)M4*NSe&$-8ytO@}zi;e0Cq6ztn0qd=Vw~cl0g<~@J9_CA(>zR)>R`XT+5$VK&WYWFJ5~+NgFOn z*df}imJd3h%oKtd(4m@g$wE~D^4m-HiGcdYdZyVd&z&fjdepVWu_V^X@&E`tU|q9_ z(COFh=I(^SoLES;SxRBdI1lqpTXD|+?5ykFHK~B(|eN!u_0^kOU-fq$gE zO9_3yw*F-Q4ZLtw%!5#aI3jWeT*ehpeR;Z}RbHshQ4|yw5upRx)s6yQiKdj~(nCl* z4gf@C^Ti40WJpQhD3L$RFw${`j@wVXE^>?XrYkPTu)MT1KPLj>Vz^6gg%jAE^^U8f z0P3$RvIZrjgNMrQS}lq)H0Lv&B5v)U=VYd=L#*!a8K8lx^@c{_h#E?AYBy(_(`tg4 zH|GOc=x^QH$k4X&-lb_BKKJJFH#)!*7fxr|!HrscxXjv-21mVJZaCzWY?r@R&(t+u z(t5*ELyfL&p!+url80f>QJ}V|Hz%$o@@QnOO}<0f@{l@2D_6|ITbCT-6O|#bQ`ty@ z!DL|NAu>Yk+N~QQ5G4*m4enIt==Lov66UPPk_Ke`r2NxL5m1w`ND6b2i+4B6S57+3 zNvF5=zsP!5#R1fIyZ9{9yHtv>X`eabZyi5~{~dm)j&F3d@Lf% z9{w)Ry%M}q1RH(Q=mRS_&d^*P?K8JEvJmV8*2G|Q_`72mwHA;Rok$I$s?e?V8E?0f zULsMe33RTV#Uj{hh0)yW3xOOv27UGNMNvw-L4)$yZh@_BVC9qd2>a8A_KWwa8A&DK?+P5YU5mNyKBvdK$ z_HI^X3_1tF`^Mbx#p|y=@gaVu$Le#a;3*Zur9Hdip-=GGnQ*O_VOe-de2+C&XPw z#R^G9bHocc`cPwH5$z9c&J=I34o#_wDtZF%@_7m_&2f4lJ<9&K=KSc}6jpdsD}^RF z#>DGk%x-yv0|1_5Ip;uicu)GzN{Ge@9|t&j5(L`RJJV<{X(L`gudai;1d6CzA!GyZ zQ*zVf!Q9_-WEemIyLI9QfG;MEG$YYvV{gN^PGCAhFtlX^1o?c{5EpA$1HvBl>9eJA zk@UQ6&@*@fY7*lNK+fSt!uHneV3CPXP&mSKdQNSutdm-NU^io&+~!MXb+#- zB+UB{$Dir(-rlR(e3?B|=po$))%?k*YP()&FVAZ8h^6u=$3(m~sVg!x^dE&6{Y(BL z_6KskyO)_8F}adDOA`reNV1^)Zr5T1Mv)9CLb+I+(&#%k(&0{((JVnc4$@G^=?HUSy|%!V}PEK=I)`EJRO{Ev z-RPU6IY$Nxjh5(i@tr4ct8HS>rWUj=B=oc=Gk{&rpMa}eI@^@SE!!V&mqHOw4wDGL%fCw@5aeku06s$7E za7$$j-4rOFAREne3~2RCC(hWZgbMt%h-EQs>G~3G7Wda)vv9kUlZtSM!YLSLv1xlfx> z+DMCt%CY9di%1+PeRR?mMX?YFfGR@TGtG7T+}W> z5ZANVeOYY{lfq)*1JJ9pGfmAe;v!21hg=WVIG`)()u8NMQ9`qALN6Yug>X5Q(z)s^ z^v{E3ui)-r1z$3`rbG^4+`c{jaP+_0SWbO$r>Tu`W-@(6-lk}&FMy-&N{$8egAJU+ zJ1@U{+L7?#I!1ghWif z{-9+g;!VQ>9fV}0;V*SI!mc8|(69JHq}Ec`58rt7I}P@k&dm;X%3eZRIlGXs&s!*X z+JaG{4K~;AD3L?p_TaKdjS8a<51HoTf@7#7f8p z=H3k|CvIs64*Cwxe$CMafty7r;g-;nz>q+^>!tP!vs#lYr1>Sh$!k)C#k+d&^y80f z7z;C$a*TW{+TuWx@~&n8i+4d#(j%rVwRptt>M=?=`KnsWQb$iu*m;5dEmUjYFs$Qy z$M0w&7eP>Lxt8HM7o~pgInl{ZID^z34xP$yh`a`^tEmyY(vwskFv+~Ot{^>@0}#TG z|5u&igt=Ma-S*2V5JiWpWK=dwU3RHr`{<8adrsK9;4@wRDDrCnIyaY={-FJBc8 zb#3G#c~sfQYjr&E2&*M>D9Dd!(xe>%M%NpB#Z?ULY`&vWLuW_58mvUhFYqurr{~Z6 zAYAwx?GUUk%uQ)(2-yc=SEG*$rsWD_3!{tyAuFZBMvSDS6R~Rc164c6c(paXbXm=Z zgDo=|oOh(1Yua6>B`ciUipiu57+ z6=}|^9ggcAhsEx9jA88U+6c+59FB2~ZuVCDIjh<5lHFUfa)tMG2lrUnPtgcjJZGdq zYZoGls?^ibkRr}b?SsckCs*KUYEkqS=5@8w+iymI+){-xB8hWv-?c$vr^4c8k?u5E z14P;(pP*xSTJY+GN0h3BTI*mEkN%LuBX6_DeSK}EV)kq9Xn5!LODRfGB^WialDtk& zyqwKp4A2+El-kBT-CD%ZpuQ+5v#L#nj-ccf&^AeENE!pzSz76&RsTZ{djvInmirWO zIOBTfYX11G^#2c5xF+=j@jX6Mr%yTA39&WbJp3=(3ogE8yrhe5oxYvE?I(E6A%HM} zs7VB-dzv$fTffrA$;w0QM=*rks1fv5+-cI>5b5jP3^ASrJCyH~^hGvg<4CUD+-&IG z;aj;c5aFe0#)2~n!LZY(Ybr8vM*jFfA9%@MrS0!QyU{2sLlox z_)EYdhVKn+$O>am_V6OH^nHJ;ix{E_I8GR1HQZCmi!y%NLCsfK~0`+fq{i0)LNV zC2YRNR)Q$=C6B4aw)}86?HwR1gi&8hSH!c0PR}%Sxur4O>~8kR{jRRyeNNDq6VpSm%JGTc@O;uKr#mJuL!7Rl-1_HaJRnJeHdJnb$zq zr*3#}_&#a#-X;^0G3zh}9U^Rb1f41K1YQ$dn~!CoF^efmf@Spp>b>y zp-*xZ4X9mG)|dxD>oC`J8jM}K=_xBnhR-xTq>=-!kjk1$;tDP5rIr?Tw^vnH2&DB1 z!wLs95g&RjdAxvztj-#KtL zG@Op_AKw%Gadv&loPP32{rTa86S@3>Feg-MYPRugQ&iE8Y-mZq`vZ9zi1H|~3{TPan*b)e`IGUGO>Ku2P>MoEo0%nTOAa4cd^76~ca zw;m=JaU}NDqO{r$M4MUEJIy0lOO>1$glPuPUJA66v?Z7j7Qp>T{tnrzk1)RgOv$fN zO2&|w>G>(G7)pAE^ufF~vIO$n{M=s)h9GiCLqB)nDQyg}m2GeRC`-Y2m>)jL-xplV zxZINOLX6)XzprsDW4y3s4dN)P4tKQ)vP2B0g(QGNNcgi06^9`9PqY!%G6JDln%(>p zg4U=YnpQbbNuiT!knEu)lIHUZNNl-)nEv`khqUcz@SOid73J?nP8k0!ZtzmW^U)u5 zs3%V8(+l(2I0Y9E?7PSOwRsTcRt>8zei?2v?=of&WF1>UkU>5i`l3TxUsMa^7w~m9 zwW7an@2{mXII3mTE?z>%ipPe~AnnmqW9qVRuQ+`<0qPg_ZL}e_M6cWoEI~eohO*(f zL~MX$;LiQKH0T+z8)}7bx$BvEj#!8rw)2pQAe+X&lCf65B3er8JZp>bVdcVv`5jc! z5_thPfsCs;Afa(aHMXUG*e*0DSjAlf78>(f%~k&C{Qy(qXw^^Hgw6i1HoYs&=~iWq z#NNOmRtxAbN5lY$Qll()*s;{&%P*fgug}9fzj`9saK!mlhC`0D8PQl{_OuX^-hT8) z9p-CKyqKML!ikWLj!K1CcbK?s9|j;(HE<*Ai3KPw^i&N$lETGzEg=Vde^Upu!-78G zzt8i|#-1PiRIkIXqmHHz!~(e))$3$?TFjZN9RcFt)+p4*#sUL`YbKuK@ zwIGU0D+BmElfj%mgwEOGU zEIER1Ccajfj{WgO?Y71vuQ)>At#IMh+e-(1bVnrGS(Hf}|2@T6Y zWIT%@F6QK^3ypeIJEi@)0r>yW@2A&{-M<9wME}C`V+lHU1-wvg2^clvzv?e>+D9-A z?Fsid9*?wLkoF}X7FW~5jr}%{SJ^>SpI1YhF3Ha{Wy+&>4SySf=EO(z0yd5hhEBac zfYy~8rHB0Jq`K}~=TkCoKFv&fw>2ut7t9xjvU!~PRO}eXzVQGTu<4(@~gt37? z$HbA1t#1u7>a=)xDg~8X=zk`C+kNcgHX*EJ1%)S{ynS19M1i4Rr`qLI_O~+o3#aX1 zVEG)v*|!4MD4B{x8kb(s@PoR@lX9X&AaVh5H~+4NG>sEF4FAgi6>CKU7^Q#JP>biT zN~BMcEC(1{akSZa>w3Nyv0U1>(-VfZ6HGu9h3Ka^%6KrpkMd{dHmr451{=io**iyS zj%Drj@XpUq=`$<;ndmGcvl{y0`u?t=)a$q~HN*lEdP_5xqcsmzgk-w(&?ueEQ36mP zEx3#J;xz}BHOY@dXe0W8`iCEXt%ay$UZxH;c`)~I4mrpGPps9-xGaDtI5ge159Au%wC2^$S`@UpWS#udC#;*#9;L z;CL)Zutwhv?~A>&#oq%oeEax~p)X!a!C3SOfA_J=2GNfF1-H+=uHECVU5$*uqLqo; zXEa!rwNc071x8ql_3P*K!ro?;&Td@0TqlCm012f6LizhgzgOePH=GJR7#Cf29E&yN zKj=q7tF|V6`I1 z4gen0y#SX>^ByR98YVt2%z4^Va5GPYjZJcA_6eC#R3mZSoJl;0MTVxZ*GwfGjSR5UABO4Wqq8e!~UO#f8xIf zCc1YL*%CO&{-I95*`H~hBKhfwvlV5)a?+Su)1`mN9aGm;90A=lW`aP83Rb&Ve+SMG zh|dD9kH<^fIw(Nl#1uyXUo+_6{`R-Byq5xQV4aTN2VrueddS0n7=Ei^BIxb`k;|@c z9$0nd+}KA0{f)wzOoqRC^1Oy033fBG25WlX;cM(YXK%#bs=T!S!Mm*8F8^0MeWPos zD0m^Mz`3_H6VXFcnQqP7-t9aE5hRyw?}Bdg_#?4N0a$ClcS>YPW($A? zqUBp2ejXUN9&IcwEw)hF)%3X7v%aDnMvgj37|0XANy8y<;xFVROdnVz=P0Q*DwQE% zyIO6`(1B#h7vPlN0?WEbIDw(|^K*o1h{DL5b6^Pk?x7_m@K~KatrQj7aPEcWGEi4~ zH3Ux2Ek?$%(cJK>5x!{)%)@sc{a(8j^Bkc_(+o%4+^XiV6lR35h-n$o(jwyF3oT1H zC{9+VUB=$4p35LtE4Rz&VpQwYTNstX&@2{a8dEk!Qx(hNA$MM6xBNz@3b@3#Lsv3J zPUx8jl<)^`F7b%`!4GNW? zv!xa zXfd<1=5>$gpS`_7CYgiMLfZOX`+N%xi%Dsp4~pMF`wEsFIRz25$O#%B`L$fq`h}(# z-jh$B(F1`((Vu^L?wrmOR2d={f|5Fi-;+Ju9-ZNxR|n|V+Mbus>p4z&ze*?@=5dRi zm_qI!e;{F}2pKrxxPsNp^UvOD_My+0__te9+s1CJnP$}&fJlfHf5q=Rs7p&^k6 zwMUWEP9JM*NXD&{Tc`W@Xj9dm8cV?`mxo)U?1y<6smSc480^5n9B3VE`uHQ&KrBi+ zdi5xlYl%n?8y^99c55{Ey+^;(fe!1ZUEEWdWQmk189dV>=tg7(*#aHmf4|C59*m&f zo^wl(JEA4RSb<8k~ zMnMkhCp?rpkec?8H>M)^plYId)U&n?8@NS<`Ym6AZSa{6)joe#Cjgl@5vYg}X@O$z zh;P)Eb?O?N4x_F_9Go&Zjx;wQBCgd#@Y&z!?*IcIQ`eCK$qAXT zu$)&DCk72$l_PkHS@O^2WPYi(2jFTGSM(t<{C^?Xi2oHahtGQy6RR0MJ@I<3?ID*TG}MkU}(t>Abx! z&dTH+PPTFl#29sh{M5=9;G+tsL7o|#RAB~@gD?N z+yJVcg*?eKmE~ZjHK~>-E;xoZYWnUTRM_f;sHNQAizJgptn!A)tIKqez+Hh9BWCd0e^TzzFllo5!+FKiFu!G%O zEWI`^8MGQ`|5{CldJkN`QuyQSh6_MXj7>}CFNa(x@E6el4xo_~q`u=&Y}w|!)pG)s zJtH)YXD!14n!|PTeJp2A|!{mE)rTXunP5h)NzF5i00Ku?!hS6v;Gj`DLQrE5;fAmU>g&^^A@4!k(MSlD&JW`>7aYtXn!m*{=LT1 zTwGjU$h&2#Kn^IZu6=0(P1G8#ru7G&-gYeob^rqbHa!t}uv}*}Q?uo?vl;rn0CX`}v>so<9L=9ZyqE$Vmho~WJa9Zo z7~Z$heo^kripy>ybfy<07!mU^_s1wP`u|!oI~*!W6)rfkHfy+8TCn(K#lFMMZY}hd z06N)7hj*|eIzTr~9is#$>u&PzO9s2Y*Paq8ppQ5ECW?q0M61r-9KLh>E@A;D2R*&n zvwL{F%GN<=Vc>cUSwo8*q5x8uM-r}+${hLf%V#Vmvau9m%WZ9N!T>_(z`;%zo7rrM zP*k%jW1s;nFS(e}qRBVTO%}06gWl+`8GLy_hw5YnhG`}EiX1ko0m`)hPyuT5lJxbSP$OCnC$f&rJIaNcG>aMGyad6ITXLq*} zxZs}eQ4h_@(ZbS+#RI`5Z`;M@bIZhBYIJcm=I0rwkQya*97POiZw2V_f{r{s+Ul8s zxl5aft3)MU%KHgr-D=O{kDt>DU}(dU(J97GHFvX9<+ET}!>E@>Vx-7?j#KrnUVv^y z1)+dHreTNLf=1`e|DoR%G>Nz=BJ@nVsmFn_a#g0?lUg^%cXw_&Pt!UjX`NMb3i*%R z|03HE`Zzx!WoSg(gZ=ar;51-Q)L}3gj)Twa(VER{osEI-p1JSfFyS3}N?%#BsA!J3IcdMH^Nnu=z$i2LkcK7;@*a|`6`14$FxP6n$ zr1JcL;LjD=wa0WR4RnNOivWwE{zLRYbT7X}nOF~I#J7>+gfN;eSVzF_C$|OB@yon( zN1CTr4^~!f^Nj?kMahSAPwBDg`Q=J%!;E@o`1kq^a|opDQQseafkOWPYpt`ZMU_{w z5#$RCsK}zi#>~vTk>99LjxqwIwwG5!OqTz&g{T9;vLtz(|EX38I=S(G{r@QS%6$A! z{a=l(v%PCe?9Ft;Z{zRwrc!DqG}6p0h~jU!OEA-8J4jn?a__nAy^YHFGBbaPGNSqo z%gpb!++p{qcY@5y`P1^A_1mIC1`@T#G?NOF0DuY+$qw0Xx3#QM=uAhj8L2F|O(=V&klF^(d2R1gWvf&-rg?`!} z*fEP!xhf`!?%s9ODwu}mqUgK@V)AG{^LwANtMS75YgPh5(P}7cp+(Hal4%&@wzWHbPpc1FxhM*d(>!6A~`yWWNbbt8a@ds*q3BQ5u zm!Pt~K7LQj5F!G1#g}>NsVjaEGMn~2^cYlFarW@eRC=8zUpV_4{&pWks7qGDDV+0e zz(GieE=uO2Rq%q&v#vL&tcp>gLrq`g#!T6pCFtxW-g2U%Y$wuqaq z^AV-X*&4NU?n&)JG+@?>>~AJFb$MR%zDvqeia_Y-Ph&aPXUy>?Mz(>BZ|g^zcZazDp0?y@tpZ+xT*&$X1d?fa zxmGc%X5bV;(HeDy)Li&CHiSY6g;A4_^tC0G>^FI z02t_J5{FK_qVa;*#>JR&F}&cQANW{p1uCO~T?>(VsJrLbAU^}g)n^vB;!_v7)6`Xj z2c+?agJ4X_#fZJqW0=0)KK@+u-OanVfNjJKLfr*lQ3M`MjJV4TH7*vk`#Q^{=HDow zo?Mpp!H8qz-mFC}I}Kyv!c&hu>BAOFSh;_|6MmKx-tdNwGr|TF($7ot^D}C*)P*oW zd3fikpQ&?T^WnADDL?Zw&Hu5?=zH#!B&&5ysx?_HHZP_~3F>PmA1#P^y9T%(irSMm z_I++_XMM)Tv+iWRd?8~*jgZ_q*z}4HRz{(@p4`15aR20Ug;WBpn4a{B3r|0FP7NTq zjB;-#@!|E0G&p)lNCn}`fD9Cnf74SrG0B; z`~se+lOaG5p?#@nd*2Sf*5*uKNg`5KUHvxqyoj+R|JT}J@TbCvenRxCPwsw7IajgF z`b^^(>DVb4p7{-@aJ*{iomJfQ*=x=v5$yD*Cq;v3e2%&VS3JEuwWM=YvQK_Cvi$1t z3#ZQfQmahsngmE&Ow9TQMU`)n3Ou?-yGHRi*8X^I|3A;&B)y@7YnySSs7&5UzNhu^4OuKIne^j)r{->LB z)xja$CvR8;#*GzSktb5f{8QTHzxKBrMTiS^F|T%HqNzkNtGoXYQ_4&-{ z)2G#@G(OAyOV)-);FU@l1S3Mq5wb+37$4D8e+od$@t<|vF1mIOrcahda|z#77U}5R z@ZC3q9AF`iE2v}95L-ToLmg2pa(fOgn?{Y@>uDBC5jG#LVLdy!$L*#04(~ku+g!4# z7>D+9e{*mUNur(^Q_(oF*uTO5QRg@%ZMnVpV}tM%<{S+gpWR81ot?b&t+58yQ3({IaYxwHBL+iqKn+1KWWWb+~351npe*^!2p@V`tV2_8S5l^7lUF1 zR@&|v^#dy~7e0+8Ej&(a%dX7ArqJGs6Qx6J#ct{o1Bp3wX+H1+8TU)kM;jw>v69$J zONR8g<#YD%KMn6|1lPMa^8O1rrZc*eMlIc&Bk!+To4D}AQ|EMMo-Y5?-tf*#r}OjA z&g%0jsX;^B%@Eo4Zu8cxQSw3yh&TBe7z!T=G zni3RD&LcMym4?*a6{4cs8s8QWcg=`f?fs!mmTQ3Lyx^b}H%Tg}Gwo1T{ek_!VUN!x zi2vIlOb;-cRI^kB80|(7tj>3)kDWLUcBb$kK!nfw8%q=4R_CwbE>*Ehop2Ol5))ZeW zp*mIw#|Mx8m}OZ|OhX^aDRcr^k@E{|ya=S}LvzsC&F&(nVOVkX($xIS^6cCRWXlf> zC3+J2LweS{=3CSHc+^Sf@tp>#*)mH2zI5k&E3w*B1-Pe$B7cEB%CjYxi#ZLvYF!Iw z;~{nejb;yZWIb={`@^q}{|xn$^+3a#&)5r`w>r9%hD(hL`uK2YU?*uF0K#^XyWa)n z_95JzWa(ORPH}H7jojQPk-$=e3XysBrgq?3m9GWX(q39@Pyk(XCuqWtgd1@ zG_bN_`e>im)mE@z$2o(^9doMvNfRM@Y(%qYc`=1T9pa;a`$A)_chP!{7X1KMXJ|MJ)w`+_st0+&Tyk*{}94A8d>r8 zM}}EaG^RG&q+0a}=vre07|Ad$Aa;733n#p&kwj2`YAiUHzKD4CQtDRW59x6U!3I5! z`@?sKU*eT~bNE1~00S^j=-Yr5T(4#kfzf`O(GS1pIwn|B&!Zmx`Pj@KHV__}B)o!} zFTqb8%+AF|FMImu<5q{EO3K1LW||Yj%!D{%zc|8p0xOqTTM|e>c@j zcO|sBbF;UX){3aA`&jbo74SQOR?X+x0pvmJ7N{)U%(D=oZx0}ew}#*38;9sLyLr&} z(#(skdaiOUvC^c3vTF?U9%VCFTN`=V$UI1k9mj(|W7}_pYA16=HQ!I2dy0!oqr(0e zfP%VmvoM!d{ZXPnJ2o%xtX3C8w^|TxJj8=Hbb6*Ioi#q@GfK{F(IHT?Kn9W5j8TZE zws#dWK1xqg@K2#{6Qrye&){8M5LGcPhxJWdsG=1J2wJ4`abW`s~w7ZVn z2sDG7m4GZDe87||-%sp>FR*q*R3?pttu0hMG4^pvG%a-CNP&4Ha?7@Yg76)jQR@Nae2 zejt1NYmFIy{k@u#L4u=llNw?mWGfR-6cIF*hiiUqR7yR|;huX!Eb?WWPLWKtfat1$ z2Dd|NwwQL3yzd>qIlQNphZQ@q5<1_s7!jQDgGayD))I9eURCt~>GqLz?MJwg_U!ji zfW9`9y?^{UR*VpJzHq~&c{+Bkhd#(k{StnfbX0`?X!~2?%s!GwE6#v-1+0>VQsmd( z#&##y8vFhVGH!s=MU`QsxY#44O}!$yeL8$!Khs3mfd`e?O8Mkc&s8f%nqec|?Ev}B^?~}a9jJVsgy-d~w%k%6KA%gJJG|`0xmFx{x2Jxq( z0`nJfL_&cz2ng~WeTF-xmJ}t5J}0v4`{OsYvV(Kiyk^ z_SP!e-s!*E@wrge6Hrf)Cwk4S!R_|5U#dT{LT$wggW zn5JTwT7|_>doaIk5So`4+9-eQya9&Dca|5!RT-%=Lv~PS;DG>E`qT)Vkgl~`?KO3Ir%G_n2t65*_|z@2M{1q}0} z;XB&S!4{>bMDgoLar%rjVFniHrgTaZ6K~@kqM|2x>dfui6Pn0UW}#~wgf^%j@DZ!; zu!C1Sjbt>+rfmki*t~={P;VZsnYRa77)l(nKgq~V5eP2Rx9CFUv>mQGe7y8ZK{lK#$AP_tKutY4Lm9!jyJpGHb&kIK>iu=p&@{usnjkwH?Guz-ge5# z>vnC15o3S9y7fW77+^AR(x|wk_XZ{AwYnqXBmsxl&R&l1nob{UzNSN9e`NdZZrSx) zTz8SLckO?dFbJyjuM2Yj*k9EXhSN$OL4$nFHeQ%dNKJY&95VXcLV47Jwq`3(PCyD; zm*#RYPd$C=2~81c{jh=`Kv~;4$w=MLSbTsWlNA!uIf$pZOFdk*RFE@bC4rCG9#ppc zu$+;mPY-uc^iBQyI~`m5x@$Hd6pNkX-Xl};Afo8R=3abEvprh1dcg&LLOa4cu6YA> z!B?zz)^;r@fn|3bJ2a8`*!Tf=pXhsI>sGke>cBc6GGqmF07yiC0Eo~*g=K?UJAPZY zF}Ow+v)CWJOx&<6Q@*iX@K(Cx3#AvZ*?vW&Hw*6FzL>=m$z3$Rr!N>wHES;)=`4r^ zQRnPtq&U+X3yl{v)nYh`RMVm@RAYNoA`s`Mj%%DmTz$pcY%&25c#r=+(zMzm;Hq^5 z5Hr;xt)gmVAqb+77eyo`o>W6%tu1rxV@25XHTm%WJ$@(W)Oii?mtI1gG-GIwmR{sg zEDiQ`fNV`!o1{yb#R4C$t#SB|?x|^RN9QnwKbh|m`{1D2s|<4r$P!|QyS+#J$X8nP z-JWfskq`^|3>&yf_7-)mvLfZ+z==|EU}zktuAO;8yAe9oHum@vG!|wrT$dWaV$@c% zt!RqWUQI(|r<)gBbJdmi6aHy45RNZa8H{e9Ig@LSn0jETE5hJt8>03jRhjcy8nq){nd0J}@$kq1^Zt|Jr<2 z&(SwYGSmo%K6Jh00VUvkGn`VIbZhas{23{DK9*E8-ylYyd`|9VLFVbFHStbBQaMlQpoxb65ac%pqMyDxfFpu<1f8X+2pkc`OqsFNu z-`zVD9}L4P;(Cg68y)*0SL!MiQG^6AM81dBlH|V?({7KhQtjZ;sxLNpR9u!B9oOkp zmR+*u4lE1W{+AuCfB-w8!bb7Q<+gVBSrXogaJfOZZNnJn@XV=Q$eV7v2L|b+k^+;? zq8KB1N9H192G}aIVr@kEhzck}8Gc_Mi z2FPw?$I$Em9GE3i14VsyxH2O~P~UeWZ63R!g}~dB`tRyy6>f`{JRslJmXWWzfn2tH zQS3`+f5x}NH4^t)h zD$HxcZOTQ3aP z?^FZ&jsVMm5mx?c(!W%5Ku(G9EG-t^gE~h2R~IHO=y3FJ+Wu2G%-1DRjw5pi2X;fn z7|bch8B@t3cl^1A8O&n%sW{YXj~71mRgJ!4ko54*<7a-U=ORfNrUx|whJ;XO%@r1b z!Ej^|6eS?)-J_<|+ew)FzQi#A;GM}UTGu@6RGgK7$-(wcSYFg1_u}XL_o>)i`lP6t5=b1T|k-KogKD?tU zn69mM=Grf{Qmg~1l=Y2ip(SZe+LUn8FWWu*&i;k9tAa-gv;sA zI6BtseOx9>%x*lAHkMXMbR$HsRv}Um+vRYlcx+CD4`|p6xHo$aT|eRYyM0X$;Ss)^ z0L)VQ3H40JsCQ7UVKAei9G$zv_e6j{`&%{JS#^A0 z8=D;3Hq`<0aGW};Q~C}?n;EJ3$dadiuQUzWSZH1ny@w13 zC{fEh*;;CAT6n`t>W+UuR>;ZW^aXVZ{@MSlRfas@9VV-LXLyfH_3<}DFN$fB6Pc@^ zD>4%Fx@Wt_$`F#eQb9xh=KJ^p5INRCb zzSOrcUu9}}K+Q|@lgk$9;dULXEx|N;WG2U{r)|ruPvS%WA8&8k+~$?!dwz(Cn3-1- zw^(*b@*=&McebS}5ClcYTwnkcrLxsB2!bRe5}*k{)M9m1+1(RyZ^TS=Pee!eeMd`{ zWS93{-sA`f`d;^!=fOYoP}S32-M3=gZ5IJN%Q<=S#< zTApZMl32kKSt222*)+(xl_fwX`h?ax+HyY>?tqDx1P>Fah5n<+q$vtA8;A$yZ@-W zH9{qeDdYW#W3xZ-cwec!s9}_%yK8x6X^E+b?XJ3@dG5q<5w*0#$?uze$JI={JCQZY zYM?GeDFLh<;sAOCb}61-eM;`CNQZqexhu{wt;KxV<{;2_obNQ*;gBLROiyU0-VYk} z1)o{9yb|j>n}TS%1-BoyB%A~R8t$$K$+vM=iy;V1XUD;^x27u7RW7cf*|VOxH@GPd z;kZuKio*Scc*rGRQRFLr2z8aamL+df3`IocmWab_) zHBHmTu=-{Ek;dEG+r8ra)x_5+Ub}+y(BG!6h0HEmcVrR^oJu?%MG;7uSa=nD(|#H6 zmPU5bWgd9}RgH<*aKG=KX7iYmaUXA_V>jv^KxGZ6Q7d`)=hAb}>1!CpgLS0RLo@Ay z0(s*)`RvNv#dx=+TY#(qliA#?hrXcb(IQFQk zmLMr6W)QB#8*Z5DAo8DU zYG$~BcZOLLDKq=9OElFDmfv4j<1p2Ic>NztKGpLoXM@3~CyFafx8HnObLVhyjQ~x@ zTP>Ok3R}}X+P!|?9Xh5Txm^fepw~ZuDYiV;hX+c;GL#ue^d}xaF10;=N$zlN@f@@U zJ*^lH7E8S={EM20l@lzw)@m1bTCVgk1QCeK;#^{^pv<#a2~2>%63yVtPABu7;DFlO ze#_l*MA|USLMvm3l7&f~fX31SHHmw5K zmmKFmPQK7=Ek`<`{j&3d#_ll_Xk=M0nl%<#y&{3y+Mvi1F+r^|63M5GpPbW5uVJsF z2obt)KSOfwe2OIh)8tDn_IK=a>+A2*Ska|G+XLCMFRTdaOUKUejy^Z<*F1Bp1XR~ zT*SvylDY%45VRYvSg>&;!H7-hcok~m^2M z*2U=>Fx=DGF<*C(ZLW1guzzcfK@UY*;vGqRwJd)(AX8&eKj195C^}y2gc63i{nozw zQ08{LJPga=N6ns}x2TZLxr)M{j6S~SkM*zm-<4S!l5}_@C z7t2EbJYe*D<)^ylTvr}XS46ap~>F2GN61h*Aep;d_Pnz{Y5{)8jrHE z(H}_k?bGouBICaMrqK>PQngeRk=8}a8RCA>vgT8w>hTjNFJIPMP3bd$deEUUq*sT= zcP0A3r9eDql&&NsU`|yH_YD8&Z|4PCn}U(k={3b5>4cu6uE-`5?YIO)Gymdlqt6}UO8 zK`c*unu%l$@>ImepmU4DA^O5vC?uDJ9@$!Vu?_bn^$OINRTk3r;$R@z)SZv!CMtxt zE-;T>rmt`|;BC+gYtvGe&h>@cXPwQieecc`q_4KTv1p<^9XYuZ<{UHuGzxX~$m3Ms6 zs9a0KO~c3EjiJ-lJZ?{MH}@n!TpY6gFvB){tA%7sf2%2hGSt^2s+YyH8_kQ7KIVMs z_^GQQA?SF6#pXiasRe!;z@l$l2IH=LVwTlLc~LLAzCDb#T4Zi%?U6&oXx(93#iuqm ztDC?yHOuj#ywcQku5~g`1A-W1F2Iu4ftu*~h2_=tqZBge7a?VK_Lq{0(5)ir18=4j{faM-Z8~ zfjE7w9+X(@_!*c~N)2Uquj7a1fNh+c0Z{sCB%l#8KzD2Ckw;wJ8_`m*2Hrg71Bt^@ zVG37SdFHFmCq>Flihrpq7iHoM{%H9tOCZ4`VV(f(nd4fc+3NBf83FN%1=0(G4tP}Z zN~LS1x~oC_z3lIYPY-&g-h_?|{S#X42I3`l5Rs@)qWADx>0&%0+J0+rg-~_1lY74( ze=K^}@nMQ3>2{>A$t!o^MCX88w_`F^&UJI-H&L}iFM^g7lXSweg;;ri1dN&F!l$UIbBHCNG_k&^<*61gVHtjr#beqe$CzP<@`Ph*{ReOX7sAhD_hca0 zh`V+%EJPX{&Y$RI`<-j(o0(X`*_Bs-OEuwjBeg5C3D;|7O^e*qq<#6Au?6CIf&8vB zgC_8vC;$tY~#XS^r}ZZ22- z@TmFWHaUFecX7k(zj|HcDBRJ$k7;d(8ls6YNcu^M9_EJ8Gk}hCd{16=!T0#@Cf|#R zW>G~99N|{c_4u>hAL?{P@RLKc)4(PtK=NOvJp1gw^N;o--5oW&ZtqG*^j&e_xTrN}IsL06xtgRKU!gOY+Yr0gEuPx|B^fv!nNtaQNQ?E}r>Sml?O)EnZ zb%vTN9z}V3M$bT;cs#-4j?S$!Ctf_GhZ`sadk1z7+YW`}fxBznuPb7fQqW6=l4QxW zFCwadh=Q_MfG4%mwGwsD8zSF)bg{uq=>gTW<4VNA$lmGH`wmbeeJQiDNmlP>&fA5N zOX+SZtf@B+I=ehZ#WExA0cJJR1fHsn)7|JhbE4ppA*3jsZ$Nnr8+ia z(>jU9mCKaymF#WMUy@*h3=J_Q=jo^8&rRq~z7q{cUR}e=$p?nnk}|Y~a2eDcgKb&p zk+hJaD_$_&EH=@6FUl98^wt-><|NrAN6xR9LIX|>J#(s+=J@~sarQkX%N83sFrx*U zFhZp4J1w5MKk4)6pJ$8B`lZ_`-Oq_d3;f^fQN*g|wtA=2J z2k^Wi`SmNhh(zto(X<#XT);FWM7%D<)^zAUCt#Ly!7l`of@hY90>-ELQguvZpeng5VQKR<||7f0H;-J6j_?bf2})Dz2Yq-);*8AeGp6F9w?1|(A{+(q6OA6 zbRAu(5l-<^;i!kED-^anM^apcu>QZ}Q@IqK+AR*Yo1ulOmWk)|GJ!|K zA|f##i1O$mnHK>p6RUy{4X`PWy>BOv(tqz1{}rjt!M0^C?J;jqYFrcOyWGI<$Kp4`{jp{{c{0H*+L zKj+sXI{n``f9?O0Uqi36Z8|+vv=NPMG1g)((`qN8K+~`kF60(nVM_woi%Zm}D;NIq zvKw*J2D_5EIIRolm!HlJ%<2q9LbNYApM8(061K(&#fE*WiK=7Fw!ig{&Df;t;GWji ztdJJ$*|; zglS=1gRtqT=-EYG6^HkadWOR2rRpFq zcQ~{kPCn7wY6f=GoGZ)LL2xd(B<%t7e(7*~^}Hr*T{d)I%H51Eye41}>$-9dZ&+MO zfIC`rBeWh(zS0D$jvN!sj$rs~^CBjFMV>+)*Jz_tjmj5RmhwS?H`LPzit6U>25z?4 zr%|jBWV$Ok2ndr8NiJ&w)Soq6hscM{v+qIX!3~7guJb#>$Wm}bx{C8TyDthsw7}@n zc{HPWD)EbztsAe5Gy%{S8OtWuAVyeLt|WOod;sV#1`X7l`^lH7z0#mCqDdG{Y;Op3 zuH_Dbt-Y>WuV_bzV>IrV_0k~o9Z}yOS*hVxJS~GVeeUm&GRv1S3d{PkKj1=(; zg}eSnTYPqBL_#rg+J|Xs%(j~aU!Jw#MD*~r@Sr+-jqhS`f=EYq6M24~P-fJ+p z%{4zV-eEcyC0Fwzz4&Ql^P&70b%kQp2vWrDk9r{oxCb0CX+@izP9eH7mK&|}*6g*t zDABOB@32B(^j;3Nx98x#$>Hm-Xz>@Xyd-Dlp~3Y2GyjMb=6T!ScSsqonmU0uYGgP? z(IY*}0qDm^lRL?~a4()vF^7_`t?exRhAcIgr(_QdgA>0_#agH3y)hXlq9ttS=n-D> zi&fft@@_QYw%*8u(DZZ+{vApqh%CQ4simgohh6}ft}}366Wmms4{~DEu}%cK93%6K zi3i#!ELGHj!t&4<@z6yhb&F%hnp; z1Qb-gW7P8?A`NL>{Z9#98YB$N$?n)hupL=oe_BKa1tiE15pe^=XDU{ZF{xJ$u6p32 z1$0keZ{_L37DJ1P&b;6-Gb`QaYEzx=pC+g@(7HjT2A)a=SZccOeD(<~7>vWrmT}_g zO=RsyWX`%z&WUeOe85HpRdFqL$WO?Q(}hyj`vQO!HiKri6V6pM?SZ#ZPxb<;pM_9$ zZLNAiZ?QJyog)R(ilZUuYPMbE|KZp4T+8h)T`IF!?+|>8yJ5_%w$6@WSEVz-3&zCi zl2>A?Db|Ju3JlhC!)$U9E#+Tm_?>ok&|?)?mp>G>7&7~G7_A)&i%t`s$1T}Fxejt2 zbh_()WD=)qWG?bepDgm0LbBSnm~)>d(EgX>k2I`CGYjuh3xZANEMdDNb6*0scC0iH ze#@#yg`9f)o~BLKYal&4R>5VksT1Ug=IEu5ug&6@C@E<(k|6*zKE zr({VEETV{znBn=S{?XzfR9BbFX8MU5$4|_h(avj9dVRFzX9E7C#JD=CFCF)EM(wCt zmx>^++qaTuO;1M8^uLY#i-E-TkUF_;f?s12gGMv8y0lKJlDXR zrLty>W5XF3^*a?6vk+rYpSo)lLD_I!bTsr>RIM^6t^`0IMcL8u*Qwp8-%^uLeSo#I z>Q472-%LIe)i8`fGwDKnPwQ?)y>dAQM8Uyy)Q4tgS$kCHxtR!f-0{O|d7+!GF#7l4yB7EP&h*SGiED2XoBBbG}ciuf-@vgXFZ( z!*;@x_xPU!%2RHf7mdvR8-K6WTSq|-@k6!FKP0Q$ZB=$h#4;B%zm-MbM5rwo(S;JS zu6c2>qM-vk11J84p3^mp|_j{Q02_KFwDl|&|i_z@grL@fCwYn?Okope(ydLoL zE9_B?jg8FFsZW*-5zv2pq<_k^o_)$fM5dW3q0!LRWKU))Pd&ns-#FWK{}G6&R0;~) zTGX>G;Hn6*toO$cVpZ^O;S&wLaMLuTU~Tk9`nCCrf_Zej4+QundPAB?sCimST^`!s zy%s|uQ$1d8Uw;Up6fR60!uTWHFZbe%?)vZldmsE??g3+!#%WGT&h9Y$M1~4vww9vhfL>YrnLOdodlc+ zbGfJKGy0R7f#U6h@lSW%jy0h$O2qaWdjjLB+!r)@vr(w3J7Rb%Bb!Ly=$*Qftzs(rDKdC5N8+I!QWO?)@kDe4$UTTJquKNtBP|3A^z4((*%Aa4U% zYQJ)BM7lU3N~a_#mVkNk`t~y~xjknZfOpkAKJ$_$z-ufftJ#53_;UQUUS-ZpH!sb` z<23PZ0E84Ca;AN#TXC3O59v5_=0x5KaJ6tW>soW|U(JN4MY<`4Av#d!)agy;I*tKR z&_HE`(@iwHR=^algz!O+vQmI9<|#A6%hs()k{(Y{NN3EeQRCq4)4IU=PHLzeq9}Cw zRBCc2F2&n0z}LZY1ibfbg_I#ZXP)4rXj!3D#G-3gDxxyoWV)y|xZ3fknX#pzXAN7R z_b(CUj~=LViyqxIyhqG%@`uSE^h}Zsf_xi1&HjD0`hdD9;=}@q#u4fu9ZqBBdM6daolM^`WEfO$W;y zxtwqq5#D(2yp_Mw5C9{cd`7c6{*33`7tO~s2{bPQ@4Gvr#dZ!^n3lSE!@;&$UD3a}G!w1_b>Qn2bvsMIA1IBnY z7lvj|^wy%a*WKzXEmq^w)DcKSN|Ajkx=N@3`Nk$Fpa%=$^na7H|MFw@zf7NZ`QQ0R z{C3RS)b#uA*qRFvcDLu4lxes$b266u&Xd*&yJg;C(PvJj)WsQ>FVDQ>6exO3SRaW) z5zVNHEY;=R-7P=bVbvXX-dL3oeC2L1mq*!#d;M80taX5hY;?}zEgu?3CCVU5fZhe# z!t1hCz)fzshn^Fu;h3mZ^OA^gOE_)DfTg(zq|L**UeL-n~q(&B;f?s z=^rO|Io^JZZ&Hm_7)-MPCI3s*zOaOzogF9UAxzvYI(mqhNx$t}kB|6myRPhGMnxq) z>>zNHWXZ+btKN18WaFoi!nD^8~ysBufMgpwf|YBFg(Fkm)>NB+y!pfcM(DUgSUP6IxE z+4TUt>H`O!<8$|-Oc(h_uc|-gaX6q;lzt=T`Qi90ktX@@VL0&(YWD_^ACbqzK$}20 zDTmH{=1?(DD}4$@GTYsvJnC=D0p^p#>$|RHSTSo)#k41Hq{J;f1jop{hGp&pD*~b4 z<`-Ai^jqb+Wn}cWG$0fYI0i=;3R-+;Ivn3;e1r|PgQ6W+T7x1I#>fH_%N3~&q83td zuOk zPes@7p@V3BCWp^@^4N{tbt?!f7Ag`0lFh7}Q(yc2%%{23&0K;c#f5(?m5vJXUAp8I zUGO1!$djGck18YoK#cVtVNvWoz0n-4t!M*c&I)dva00#XxlAU7h{4m-bT6H z?`?Ls{0yj7Yi>YUK8g6$v;+$x==0;hd-6wX{G%}u<)epAUoTtgdh;86&aN(_KoE)7 z>LD0*Th4<^tBcL5MrgZK&!QElzAi1+7UGRS0xB2uuoOXgsC#IPt$RR%xqv0{H%}RB zdGvLAM81XYFg;B3B=e|8Mf9s;0Ml_H8EGdjb-_-aXQ_OdgC6v{*F{;A$CAKWqGK^j}R-;i~ z5751k~I^w%t#iKpP z=F;VuHm$ZZJlJ($vAVe^MM=m(n`^b}g(KGH^#t4ryHT&)x&<||wg=0psG&$`(J4(I zZNq>HnX8MEJF&KwjPZe3J87x7pR`0AiNo!9Py*I+(8cACKY#Ma$yd63snT3n(HI5? zUGH;p$$b$Z8j}0mB|Cbf2VzS!JBw#yG<3H-i-B4%`(1AfTfnGrDp0*ccd#NU?ky_L zT*@4pv(U>$TlvBTE$Gbymlf8MXP2NG2fk>&2&QGnj{+cnCr;`o-u>a^1HJ3?>obxs zoOI?!5={)Rl@%y*Lr%}Bu{14*{vbZ1b{_pHywJ=rhpVqHH{$UOP!s@-eZw01Xi6zM zWg;Kfx>nK5#sYGx5hT0mu9j_bczQ;^Q0^RrlwQ>!aiXFRRyzGFF)(a$6j_eecZH+U zgBNo~M`Lr{ZuJ17#EezPd0#KJtcuBZk|XsF$rHU4>(&UHt*d?(up}p+iHEKPR+6kp z%xTTqAVg#$Q6o>@R&Ugsj?Ku@KFjH-r6fm%(teKqy!85|c-3YnQ_R-gis%Nc0^Nkt zNO1?R*Bsl}B0Z-LEJDG4EPSn_D$0tx*jJi7&1&7G!^+6pw|JBTr9p3Hl^!@$;rZuZ z&;UqN`DpT^9y$*YFDOOHl_SLu$`}bzeh0T6MezGKLXK~;9x1#x~-})Wa!l=KA~I)sUP-{IM4_s=}R}wwhLv$x)PW+f}2L z(Gb_FGhm_=I_|W`fluF(4>7dz;_>XzN0a*^;}SBtzflE8CO(DC)eB1%O?Qdvy*r(A zQ}qPU##2$dqrQm0{F4?4&655F7}I(o)gr$df2~hzD8MUg;@#y%=S$?7h-$I582y@c zc+^i8tr7__`BVFrc=K#0wVxJ$lK?t&Wi#nd@AKb#V^=24gJ`;ro-hUQM!2x?7M4IJ zPe@|aMBp?O0gc6WsrjX};_wArf&rZ84mI+?B*@EM6cN3;fnh=WuTXBNYq7FC*N6vN z-6|s7Ij-NiAqLf0EiZ_=m9Q;MzKVtx+tS}8gEaLD@TcvLHERr)=lN=*O8Q2)S*9m+ zu4KW<$$^+zle0IdtPrGWH0#w21pV=Z+Uc5ismYJCt4%*USh8?I6USkbKt}<1Ei`2t z0Ff{i&3ceEwn2o4@@Fs)YYplrNns4?Y+rIQxYb#Y%E`wL(vu6V%7M0P4wu9=yi zss#(`b8>~!xKaF9DrY5JYGe_0+~bSB#(_7yk>@S)YU-f78i;rCVIW%ODz)Z<#(w%0 zEpc`E)p$E;l;{h3JJlHjfoeruV$C;Q_%T6ZVPYRd$@}Av^?-yYjhkv-kgv3eGe}oi z;V)NYEz3FdUM%NcYKg4T0;G!PRa_)d+ZQCNBv@42)Uc@YKgu^=ji9}L+oLx_-*w~C ztQ!hOUA_1G%A&5fP+<5yi3j*E20)G~ZfO)T*z-QTZZGNQbA8XzvHJEfuwHi1%A#DA z^Oa@2+7cc+aV&K@SA%y`XfI0O<8jry={Mrls|M7D7Tu9B)hw(`6+^s+`L0Xaw+BV8 znLXv})ESz%k&MOUCD`qnY!7|Rk8E<*0K6#i_weL zYcc5l%^}a<>69(=MFc$l+n0hcsKgY$^x@C|t+G6);~b;>XAJaD_}}k?E;DbuAzorl zr{!z(M2y5Wn6!To*H`;qq~kevZXrENnjHR3qU;X$KnHy|{*$(y`r&GCzFO1Dt+jT% zX3Ld;Qcy8O#&)o}{iWB@iGI0RS`<0neC}`b?7g>Q)W=R93&tWB$b42yR-{vurBSWc}h zcuSJZ0Esi3!(FG9jP>YLaZf9WbHbUyiqLXSihh$r+CHBUec6=w+N`dn*kh@cDvr5D zyO&`Wi8JAw5OwG^1B$>eY+PJ+(-*geTl$m3i-f3r2RxYEAAgIv`Q_wuG0aj1^P?uO zU%QYp4>&f_EB)H2yS3i;-25#sZFME8%aZIyh*9)mzxEy5uv&dJk`i|hL=CKRb3;OD zQOm5~Yp#eauGE^M6Yi^2>|VUkdh7R6Q4K-zSBkA4eU3(zdg86eNT?^aT3^;I=n2t5 z2?5EdmExeLc82SI1{0$*yyN02bw;TR5sENNe_hLU)>`%9aLMftJaeFAwIG9N^+WxP zhmsT-2?)7s2U&rvr>qK&@b4z~W26*bDP4?-E|kt!Vxn`UCCUuMNP%$ZQj9!YXL?b> z)1a`pj<->i*pcdpR}IZDq4cz8sw5KXZ-5u;@s{SuIiRwa8>}%Up+M!4C zGa{6Q7P~Y6YxtZ*&~(h@+ZlI|GZCc}9D-*EF5l;-zwM$wXwnuCv}7&4KLxn9QStN| zq+RQZ%Rb7Iu<JXYV>CB^Iwe)J=77O zs^AxyC@{&eYLQ_=-p=6Xp?~huD6C8$rs-Q>>+z>wJpH2nK36(l((ngX23m4&T9!>K zW4K5&YhA^K-gzS=JQf)9ezviy9cR9%vL)tTThTkQp7YX^ucHcxIrc&6=Xw_5`Y$Fv z34$hHX%eWzS?fR4UGToSTWlU}!^#2c^{Z!NTF}upuvYr`%rknw9Ww_17ex}BZGKrF z4Uj=fL_7(U4Vf^$B7{aEimw3m9maP;G-E;G-wIiQ%Ba~OTOI#v@l{j?CnZPWG%Yk9 z)u`0ZS1G%yaa#h71pzeB^PT;5Faw$)`b?VDI_88 zS}5r$jp_vr6IaAf@$Mv!yol;x!(Cz(Yp0Nfme56h8GrrwqpU*DN0ZNpr54|Rg6jHt zoJZB=^3?K?aAA9~Oq5T^((|b?7qd>qfJNLQq)n(nqn@u+`V!{b8jg-g3}~yjV`MZk)-BB) zu^izU*49$8#UJ(3oG5M4l;DqDPR;lHIOR0UHa9Q@{!gzoPV#eZ9&aekL%|$rMWNSz z%Mk6lej#t_u+}msh95gfFW25q&twHpIc@a7DLOtg<*Da3`B`F)V}e-6|025sU?YbV zMO972HVO2){6G*O-lGa8U0_{SUSk{?vN@^a8b2#pJsX5V!T)mnvvywXy8haKON4#= z&*Kj?c#EwJu3{x=0ggZ8?N2~_5O$&djQe!ZQ!K))Yu|kHg_z~zcb>eXA;E_0{Vbm+ ztxvH^Pybi9lu4TL{6}z7=0(?Ua9k;aD8b-;2V|1q=7AXcs8QmjkcYZ=gFEwO@S{4oXlKA=pn7nvM?Hh!oZsy(}!^%cb@ zhi_iikFahnvAqVdvTsHF^~tKa<(V&oyxB6lTh~Do{6~^2#$-j*H5h?VQ08>EQw@@8 z>2BSAIi!Z^oTT5_i1k2&!|bQ-0-A$C>-8(Xt4%8v9z1V{M{mOoOI$ip_9O0^!rL4V zC)}+TD>b_jl{usxGNNJQ9M`oa`V-G-wq`Ax(X2KD_gprn$+a* z*T?ieGUKc}mf;}1#LwgZKDnoBS-4Pn@6z+(6TKbRV~VP2XpJSD*)i)v72nB&Mzk1A zp`*JRA}sYME7d}6yifT1)5$|k#ez$dyAr-hHSRl*b<-VHSi?uUYt^m$wgxy~U8H2z zlJ76r#S(P&ih9TRRij_Sy<8W;yS=Qz=>hIoKku%3c?_gNCDr9{eGNd%ism1dT1Mzk z$9K?ODU20NX#V%=Y;}>1r^&VrrrmLW0i{{Cdby&s*t+SU2cYW_#KRQp?jgoCrPNna zPfdaOo@dr9RO!LzDI?u5&LmHnjD#hrlw&6I~7=t z&51ZGgd`*r55RPvM{8!bKXB81k7fb7A8zZ3g-!$}Oyf9x#y3%+#ucYqkcu+~KjeB? z0`n9ijpR3Qtr|v=RIQ1iN$u~(YYQ#Y)$kX8qwAIo48v;8 zJh#QuNp7{$dNFDP>tY~>7=Qf#PQ05LDpMYKMK~D#N<3!8uuB1VU2k`ATcdFV3Y9dCHIKvtiqiv82`Js=5gOAw3V@FD zx&d^ol8|0gbaKsD)WYA<(uX+U29W~COR`=4IN&$hv<1egWZA(Q-oo#LXoQfk(ehf? zji+nlrT(X4&u-5qDxrVT1aq}LcwbKOdwXs-M251Jg_x_#nh-Nyk=@dEcvpu=|@ z0Zdctp;wj2(mLGec>K|mKaM{ZNr<&q>dWFf^ngIjSw&+zPzh{l-n(7bt%)ePBk0U; zyyRHXg`d#a5kimNQ~Ey=bFnumX1_P@0%qO8Z->53Fg6-aJUyG7gDH1TEj6{_maGxTS8UwoP-v9d5>^ z!QGgdcC~H72r)wek7I^Z6(4wIsm<>7)O=Hs+~=Rp6w>Nk_Ygg`>b?qkmN{?Z*=3XC zu?v!IYg%nIG1&nBLbQiaua>HcgCj(C=^E<3p@8*@#~;G0Uui9gkmye;cKJ1y`RSoo z3OynB2bmhMu#!|Fy>W7Qqpu}4C2mrrjyfpRM6o4;{qNJ2OG`o)AItM8e}6aq{H2~Z z&vB)pupT%kG)Agi#ShQke&v)tk%+O;a@7yZ`0J2^=slT^(H&+s!qi{y#{vc(Vm*Au zFys9vf0Qr*nKC?5Y7-Unx+ac85xJL4249Nu%BsT>cF3#Wxe;qw?cw7nve#m@QmQdN zd=C#`Q)upBOT^n09UyK|r2x);$67v%VUUqzz__e?;dOD_k|)iq70oY2H+B>dX3YWM z?TAp%uBnv%+D-qHTF$W%W=C{Z%X~Bz)UYNAdgZY<^;DMEaQ$hywF|F|a4~AwIRDI- zq2;H>$DDpjj*5<-$SGK*-*B!n24_olCMbrC)00~3Z5}El%m+BjJmVS*?3ve@vdA;g zN;egFOoEw7QF(Wha!C7BowcpcwHrm6wMM-d zmaIj^^4*UnVe&=`U3pcMseqb{PQ>P5E__GM2=~VypupXOUfwRq45O8~h8{6Wbys6U zIA~dWFrnv+KSd`k})(u=#bACV_eae64la`0&vc4bg6q&P@j9H+xk!p-&s^Md6Z}CvX*!CQ3 z>U)aTaB8>j*%K^;p|f9G)N1ic#|6iXt<0$PAJLN!vUX#Xi;N3deq6Zi+`v z+|iF7d-mBIVs~0-O$4I`%l8v+NYSWfB^Ax4METW~D1D>IrhM+y3z`@0INZ*zp3~cr zKyWm%Xi@byo(VHZS%&T|=gJgVh}~()rumCs?R3159%!}VK%$tahPFsil-MwMsx>rg z6QGsBf0N83-9#L^+w2w9{+ym>sxg9JL0#Qz1XZYBo#M-JisvG-FnuDldm`atjGbWbH2V*3wrX7 zzsbsuJYZyZ$6l@a#Oc$zxV%cYrzNe_-pC_R*f(>co2Bx2d>TvDVi%$tD4y*e?b5a! zT4(SKVk070%05Oa>K$ipJ*%HmG9p%(-h(qJ$`MXsne4S|4*y+f?PSr-J@2dyOB#e- z!~;#S-ygU^l|YXVG-FHpo7~f-4XmV0;etO&CJwXgY~RJt9A8JR7JFkan)z+C*yyf5 zpnJ92D-F%~#IY0l^QBw2HCeR8mTQ5hZylH1DjR;pf`=L~Z5?QKr2(fF!}W`LU^{AR zqPj(F4RzmI=XTu0hKH?ym6>ke1c&3VrV0|j9ZeJ+Q>f#iz@Ml#;bu8*JIxMevDECi8UIj9&kgNG`kw0t}7p>q!s{K(nJjX>xh!2QH+zlF7n@P*5jI}bXKl?IlENeA8ZKa^+qV)ZwI}qx0 zPaN$!g$(bN`7Y>Nw&Mcx3aZ9YCrrRY}sMx8Z)jA}(s%OIwZX;51R$n7cJT16OvsX!0bQ%A@cs|W;ccOMpEybGj zHXMfKrXKsu@tKoij@KN;{hAk7#t*qrS&5x~?38zQI2UgG$Dk7Qa<&webcWm73(0hj zGHEn$c6U92WkX%$z$HwscP8Fy5aq=EFL+VWaHD!DZ54iqeC#E!)rU8C;F5xMHFOo> zAq~e)TOvF9I9DkzW_g#dT5A^32KT4)h#_y{-Bj!cK_G%!dFV`T&A3C(qFEnWOlw*` z?-vO-cv-Rm8x+if1j_<`R8s5=)}U3n{I=eM10$ESy;c@ZuX9_TH?q2i2Gkj7D1fm$ z>lip!U9Rh)sGWiE8|`N(Q-C0%(tIk4=W5d9f8i|u?-S3ZM_%F?yn&#Prw&@);u2@K zt6nK~C}#&?CQ}jJ!KW#2zNIUYrd~wU6M$L!n-c)-lC}xrx;(d($w?l8XAb@TJ|%qy|_NF4DFCX9twGy=9X zD1H67P+Fc_tkktm2)WWK*%lh$Yp%Tj0gtCQOJ_BfQDi~mTuPfDi@RX^6_tPDUOKgE zvrUs2s>C^BbWrFgokX)<);tEdGJB3VgkHZHF0?D*pPzTH#l?!xpdD4bCx;QvLj$OL z{Fu#{T0W1m`Wap}oOPAZ$1t@z?r+*nXBT2TM|h z(dv8ap*w_y+F7Zhg!RS?>iT3+jHi~lZPLNzX#>?F$4#&9x7&KOc@^1%?`sF38X>4% zX{VT*1!gtSa$<+LmwXRojUKyNZ3biGiiqnhVRYF`@{!5@X<$1nk1duZ^%RY?glbAa z%6OpN-?K*d@t#gA>&KpIlJRrQW*4%#^4g^Ssy36=gFjltgG0#_$Y_ga&IdDfzd_#J z(IhK@K{SiTnXien)*gterAupz8IGw;r7T7!zMwXgXIuic?`39tiWp-p>e6P`&okA# z@jd+dGncf-7~%tlnyhkvf3&jN?79rNHtGhst^NW1V)Uw=jg~`8-~^DSW(jHaYm23e zmAZBePR1;eM^C`MzZmO2u;y5vwK>@J^ANVf53hmp7Oj}|IX|+#Gq-N*c?Pe{l_iuQ z>$D~kpt_9M)Z8Aak4&QLdN#$|EzeogF}T;0cSVb}&Uz!MQ5p$~8-PwP+W>ZOgUHX& zSGN_pHI@$3cQ%Z|BI4504$XJPc!({E834}C>LO$)DNUAhr*60*Jp;&Stl>u6aa>by znRCnIzmH0)xQ#KJHDAt9j8c6%&#|#mmtq6!{G8aw%3gB12N4LgcH9<&CU`M8*0gfF zS6w8MNx0>*8yR+hKBUX&CKI-jg*EUNc2@TtLUa7ssbeqbl&yMRvK^rwW!`cE8{iFp zEQ-3GzutBP#Ikzi8;zLUYm3zWGPYW> z@{$fL2F24-cCR`ol%rplJpkS3A3YyW5BOHLx@b7)WZm|Ff=HsEf^2Fvn!gX}gU2u7 zI&$db^gDb!dTJ@^hL~Zaha!sIUIKR?*m>$ehkN3tkBBPnktS>YFc1_mlSUgzRoe-h zNJm$PAT)X2%v2J<`?9&*MJ9NT`NqhSNVO<<9FZ1cCPP73{2A8QOkgGtxnlSL{&grI zmD4_o=Kyf{FxHAH(fSFEX?xvC{F*yP8krn!<9~4%^@u2@<^~~e zvjL+0Hh3J*Zd(8?r+ulz=1wfu@`bpj6!eYWtQy9rPu4SDXkn#Gl~ z)hzk8RMksq{SuG9b^F-KAnR{m(r{RB)Xq2uk%Dwp)oPkeWm`Oag(SmCegaA{3rhRO zjvO#C30S7@Kmc?8S)ef>N@q^Iq=8W4uA(6(_x*=4EK*=7bFaB4uQ6}VY=B-3;rfE+k zV(9pLD??pbB!f0fwwLvohM`FPus%KW>zOmJ=r@W4|M28pk?7>xmoJO6OSn_AaKHHt zy_Qhrg2AOqi;auU`}G7u5M8XKF=TP;xCFo@h!66A{F5Znc{d7sVa9(vafdodUU)$C z;G|`LH~CmA!oh|IkX&~SI~_W4^-8ab^&LreL>N)`O-(!^8tPPK(7BrGI_&dWd#ota zKur1H)L9Vyto*@_XB+L^;GXujrgqaSJx~w}wsdAjw=;Kw9*FwoN$gmF55vEK1`Gd1 zfqI~`{G+*=60xa~;3a)H`BB>?fd{+S;^W?ko(6g$b01~*;pEdJvEkR9b8&p{=l)`b zomK6oL+1DkJ;kh@C=8koz(47?qcCQ3ZTLWr@lPxkSuSMWX-Aki*s{XJuyV{}tzK<9 z5_TT&jOK(m_tLQ&BWHKObF`O_`w{sqKM`lqk##@k!)ua66;84u8%V#FuC%V76i6V` z*8hEgfTqV0YpK4D46Rt%=vRT*iuCC5?`QC2=Ceh%V^9MJD=tk-7|@`ov*sZB8}3Fy zw+dZj2!-^5zWKSto6oObIQdHtbJpOrXXLHjFFy6Q- znq!FCHF}+)@iOb>95GRm2*??$9bPV+{aAFvk?Ud8RP-3Y?o`x;IH(mcUOf^(K5e_h zi$^1aMl&>6bGO{r$g1>g_H*Vi6;f@BL71l8ri{7(DB#6=}K9xEdW7acR zL|AAIW+_n<T)`5iK+uMcsT4 z)Kjjhwj(0+lZk`z3C|CjUY8z;(pb@j==UT+YX;LgJaRnS7N2~~fA3-{8}{%=ou1{$ z!|Lp~#(J*5?cwGvSJ94^joeO*qPgPT2W$;L>cMm2Y(&`Inf#)C0Q$fUm>bbdVah(f zMtn}?xAeTzw{B~4=By{5GB#TkF=YkNa@V_6P=h;z^qjwD2m2v$dgd9gG`-w8Sj7H_ zC!*gG%cm7r=AcMAA6ST3JF~j2C$(Fblziqf@lKSSWbcSO4-8z$vgXb)M>t(al3VSt#u-kHACxl!~Z3cqHMiAw5AftV$MN26@Z- z^~+l1Ph{n@vBW)F&x%TOgO-~3fZNcl=TQJ0kU2egYiBpc3(_BVhC^BJz&qa(DR}C? zl8pOany7u%p#dDcm6#w}aVp#?DwYTaY-eko92cqAkQi)0K{P@TF^wHJOsrJj$gw_2 zvCT6ZDZ&WTX{ zvTgKP!K^H288~?qB&wg+R5rVtP9+BKFmPaZStpGh6{i#t$)!Oa8VW~KYgXL*e$c%c z8z(|Vk_;?72@7mcZ30;G{8_Ev+}XI7jG7*WUI|8Ol3nU$M6;stgK-Ak#0RF!aKYah zzpv-xz3MwMWNo=p_sc$-d_2A!0PSfu#TBQqX`BgovjAxV;@WlmJT4<;e!+`5Q(L8Q^p$=_+aTWD7$ zTwGB?-S>)WWCS24Ot^_W^hy{yKIiIaok_V`#pZQwkKXkjpRf#er=p!AnMqCkT#?jb z4L$+V3~&k2DSrGwzgyKFr&**SBQuDUgx@~}HveV(g+B_d5WtGXSsZ?7PS67Dt9hY; zj(iy?3Y<`>+RDK+}j7Xrs}6mDgf6SaRPt82+t4nSV=D!P9e7Yi_t0 z%1HSsz({E!tZ`vBMtSL}lN+l>H*>(>F~$~olUrh4udy<*`WtnAYgtCwNeyS)um{R`#3CP z8O%yf(GSrB>CBm{PuBl5(CQ^qo?};G0;9V6Fy<=rWZO8>J%v2;YAF~il%;hS4sBU9 zs#4h!3*6N)OQ*xmeglU_jMLI`j=aqhT(5;gjl}Q+cV!wY4XbWDfOe?+J}6ytd0(;w zDUG4QNl&Oo6Q5sMoC|&TAPY87g9*VYVq@u77PZGNb{%Oq3Nebi)Ul)Z<7rG1ZZ$T+ z_d(FJ06$?m4GCA1p={zK>6+oMjT(Bbl?UI+!7!rhK~~Sr%5ZD=jRNf~25GgNDF?&Rh6f!MUe&t@I&=qD z1iFypjum=y?gK*;8ad}^ZZm_>9%fZJMcc2t|)NdKkVQ|A@ItGSL)EB{a+5`A+ zP`&E^T;=x+LnZ9#B|qfuG(Z^sYdB^tEqAsG8E6|6F#8+0q~=rYe18ke3082pcu zFSR*twta%CTbTY=b4uRR6x!Dt3Ce7W_vgr$a6P!R?EHj->&n%ascRBpLWp%M+p zytyOynYViVUX(OBT5*(58Ury&*UnSR5-&d#RhG2z@Uy-(qSFStUhvAa>50gK6w|>LctTwbynqI|7grxw5TGJPjY1opZ#oWivt3DBpPD4 zbk<%KVY&lwznWDt0({DLuux-IFRS*3NAl<4-~Ih+4|inOZ-JwsyPp^2Kki2>3(kA% z>f+qD@pPxkEi(SJAK&(h2dHMASD~?(r@?wrIsJ;H0!vbIY!ZD5#QNp|9#9JubxKc| z`bRQ;EcDuNf|`>h73~*w34q<$iZum)`e~e5$naq+Yn5Y-njn9qUe2$2oiJoc-wpZd z+=Ydyn)~a&(m#?8DA&GWkDq!&s|+NHaJXiL7GoPlJBP3|+I^OpV2!Z6jP7D}wvN!% z)?aU}>!GGC^&QJZ2(z9anpSo{%9oR1|K9kn-e@pUf|I$B|9z#tqMt#36vmBSdUf3a zvRzu1Jb6b$Fz5YlxSGiYb4V^$$u4|)Gnc-!xvkVi1HBEt@8ptcZBAZ~z-tRSmpwJY01ZiTy(9?K!F^p;+K@v zsI$cjKYX7GS>Kubxby$}nobU5=upo3+iKU4Yo}r3jSK$+Da6~oEX~B43uZ{UL9dI7 z=Jt1Kw?&t=cnL=WT9k_)Qjgymf1&q~4m4Vq=>PyZbu~j*$xYE^cTJu+al&^#-W_kO z+u2KsgP7-Bh}3EJs8|d$IAcx>6;SS>kXXR=!_-mhdyVgU3vsP|h-1Pabo%YY8z){l zB>{kLk`(;Rup;i9`ep?m5vTcfa$n>=@tg-2CWosQ$JWE_T;zzsG|Wz83fkkQgPMB( z?8-{R(?dun>xbG6I2DT^urerb-$k3FHk}FMRYe)3cFWOFgubi^lPjTy{p4AqLZxVN zrH_Sg(S?3vrBoBOdw}Y68UA+5(-tj?w)7Ec*`q~-ZUf=&2W^oc<%TTL0?+*_wNbnS zQu_K!FUI_>NRm|uh;JVM-Q+8<5#H*_utOS*1&iz~)n}Ay1M|C?v*74^ICL@Pm+Mk% zePcW!cAr*q3pXM{CwV!-YfA;C$vtvnew=(MPIznRy9Yc2ndL5OGxbEr^z=(gFL+%ag&M;!_L7Pg`Tr>L-rAKD-fUmF#gKs8dnlF z81_+1^gh!`GfTN{70yHzjC-rRmi$|B{qfg-9b+;1V_*=c8X8}V;`{N!X{UxP!nm^E zH4MehuXS)7{<~c_V++>0*8{6IUutCD7IQWbad4|9MWDXYz%9t)p%kRkji^m>`q(M0 zRjE;~>JAV^^^(|cDRo`ZPqRc9yvxPe?vN8ePiS3jWhX~}-Rije>VjWtZ`U>Nzg!9W z3$KiIu_!KPVDv8Bv^u9+*xZvNF@Um)-4d=Fe7TFnMg8X@@$bKCng~OWIN^7}`V?(u zE*(2@Qet7Y)X+}9>Je7p0(uP0>Fz%k1*X<7$VsoURUJ?#FEiQ9(}k+;l9`ih9SIg( zf~z=Eh)y4K?-qgub4_Fbs6_$GB5W5GJf4;(`RD(lrF&X$eQJT?4OX(qEXrIQRBEDC zqe2lqk(kqE*XnJG<%%NTk`@Lc>F%r!XmNJ59KU5{fk=?}ZvA!U%`$Fm$l%Ore1f{ipO>H4XKg*ybA=+BFuyM7wf8@_R@V&AMo;W(%E zy_vwYDvNn>L<5Y;cAgxw&A|cWDqDLyu88Bh?-zlS`mt&_aFK^`^;Fb!bdh1_f7SAN zO^)1T5Z%#a@RN%)D27fNj9nrFMcL!Hn(Ra`az!RAzT3dA?}R6b$eo33HKsy63hUR* zjL2Nw(_Yqt=_7D#UiFe;znB^r383O6$IV zEd=l994;$4kadF6r)@A?*`J!jA``Q7gMlR(c$KdIFW-g+othTK#E%2fjtSrk8^uwA zZ__er-Is&#u!>M$#r2d8&0NUqCZ%J5rFk8XG!(V4O-H~Ik(QF?`m?g))z3KN6b#Uy zxpxaccnppDg_ct3IwYAfz9R?laLRX-cn%+}W3ARM=*5l7Yq}0rM*U1dV+jnrll?5& zgs9j7ZgM|;H@esGJ-HTWz!n2bia_($qSD8RZtgl8XXP(Z-1?PgB(%@Hs=sPpqZel^ z$U}_?|H-;Pat&8s5d8JadNGwPh=ys3-Q6rh^Tii$-xg~jo_lmf?Wbb2evX5rpejH- zwp`IN5OA>ODxw!#3RR?HRn2q-N0UWqbu(6+gHzc&_`9?n(RFs%O0KoD)fZRF-mXt5 za7_p&@=xO*By+bZ!Ag^Yq02VhUG|a+1hPKX8f~_+?Y!7O(9PgA zEnusgXMKOc{FzKfS6^Lh#+(}4z6J;)-({_iCV4x`fND*8Q|My!USQX`ab79< zENQI3Q+&zIXXz%PMc#FMHC|iv6m@M2_u(Z?JcQ0PGa-}Q6fV|60k*5Jthyn~2J~YL zVNbn^VF$qXw$}Sv;B7ZLB$jDbU_vd3?J~DXT~{2w9z%WQMJ;j(wcpQi1Fmc_e?7il z@`Om7@_jD`Vo6~863cdz)%&uRr+G}heZ@(&SZOq3hE~7Cy)r;d-W~r*qbVEOM!R)6 zS=&MLpKTT!IBd7p%EjY$fxqYaqkjnW8fg7^QG5c(R-kWb?$hm zpU$-$>Nj7VcRxG+%r?=%KrkGC?t~~jOaH*E6I99aMa7g<;7ckZ|D{K-CJM^JtslVe z`zWh<_#0G9=#j&I8yAs7VWC%2o%Hf*;ik~WKrw9XSPMb4!I=J39BDBzm>)&^@%7Qw ztKB%_EH%)B=R74#ewa2K5~*q}_t$dxY-jaq2yj&D2B``vS5y5=4KraSzp;X2llx*K zRQI9>SUZE(P>8Q+A*`1kE(<5t=4yI#Y_%dl?N)as6=HCLU_a=$Hj%6nv|Awl4m>6dzR zuWJR2^~uWmMST~h^=*#P1n?{>;Vey!@3K1?qPy}eGMv;KT~7fWd@Cpj5+$G;Uq7Z{ zQ$4{!17C}WvktrIOg^Mj0 z*O8sgj*DEXD>YZj(eu~30mOyRo%oH&W_e-bdsdt@Uv!pSoV5_bcYs>

B^@Zlh{tT*y&>E#^dITvyFC=kz@l^V?p|*W6K7vPM5n4sYK+6_dY)8o4)= z`esTE|C;03dTV?m#(+`KU^ut15{P*LZGAFHuTCqsV4&AY5Rfx89w-r9@~FE6}g^0 z_JYJvLg%EWiuwjMA5m(J3v~JI%eV9%a@jI?-SE0Mmo{w;o#9Wc>?h;*bteX@#$ib1 z!pE@VHq!zW@hl@4Skz)WY-3Y|E0MTfW;Ee{$PwRGrt^Jm16m|n?E_5)S#DKfD1f0M zwb$K`Te>i-Wqk8({eCmRfyj%{_6%HqEstK)NM|PlIpNdYwG#2ZF`o65-e35Q;VbpJ;+j725!sK0Frt(%kHqWSXL3W zDhgU!PXc$GkIW*@6sMHflc`>8;;gUZInY)`j*?!TIsy9Oj;#U~R>W-6oeDK7^KF0t z_G}C5sS4=`V zR=2Uq0E}YSKwTF)JJ}xG*uSQ!lQ5E?YMMF#=4s-v_RNJ9{q>fkm+-Ci{1Kbef5cLz zSnadYWZOBQ8Nby*R@8{JGKyIwKY`C4S0q}m#z6#Xito_k4O>|Y9h{x!VqxoQ^OTPE z3QB1#;d3T_h!D!6dq`@_D9rrMxC!lMCh9DAc3 z98tj!AYO`QNE$dk*?q5K&q<~cy!6s@FNfM!ASg(Yz>3y-?A+9dkh(~06F0h>&Kj-) zq6(~4^g|b=Ua!WJvFxQbZohCVJGwVYL;vLpbyX#J>6%Plp&wkSAb;*m!dPMz-C_LF zb7F2w`Ux<)CADcp6dM0FCd%&mnTl5rCf|-f&=r7>ug9TLDk@#*M>yRlgv5Fx1xELaU(7eOix zT|6&V!}f~K!1$HTeHKn<0630dz_7x@t(|q|_;0iglcG+494$N%eFvnUo|$<;*KN|Y z(iTx1lOjR6#*a;wnmYKT?*X-UM;9PXl4!I06EZ1BCl#SsKO0P7>QNAuET(g^f8^Nx zpZ;Hw5y89eQE9v$Zn~mN;Uyrxt;LWc7A8L~m2w}ic$&K&2(l+iIpGQAFvw)0DKR(P z$qH4C1H6{n@#Buqthg4rRCUwPw6d<(KqwCLY9@nAwk|DxlGWcmx zRrftts;IIU{lzGjUI(o&#(Un2F3*_{TbmfP685k~a(&M=$_tgHlJ2W|*2|w~rRbV# zBk_N|^4cof+<>e&+JFuBsW8*QhAD?YbkX2HHZ$3Qg*b<=4dX z>!U5dk#{vstJLcaBuo%V+W_5y8eUO&e0rjWLxiu7fWXwq7~gFH1j1-cdQNE z*@=iY8Ls_p+S*_UpT_ftT}-|NrWdPPse{)VFZ#Hk2WL!Zz&*1K8AWF5cS)rjTx z4FK;Gpr_i|#YzloYtPZkjb^15qr%sQFE3_FL8EH-^ECJJJR_%$yftP z{6+t#cSDa9E6QA^;`CKlOFPSYzb_n=(C#u4ExT`!_L{Z#E! zgTPQS<0wnrUan-Zr`m#hzme>?kST!}EirHqmPe@AAs|aB>)9$xYUf;jM$3Hr%@cYn z$446!lDm(956AgF+ufSuJjdS>l&L0wR#KU?5zJyxex1Yv$3E2p0ucBCddwqiulFY( zY82(YkrunH%G4Sba%j`4Uh8p%T6;Os$jj>yiy;b+Jxy_J}JRK2M*7xX>F zqj%j!wYx#ek7$EuSr>u5iM$Y|W|>i0j^5Q^E}IWs4221MX|X>qmE(D`arG20zXkqD@mwLJMGMlxgrcW8@Ps zB&4xvTF1OXH}j4#e%`p3Js+c_4()oS!iXJTimYosk4x_r)sqLY53IdqSBdXZfO_c zk$gV>-s<`o)HU;m@n_nz;1TzS25QqvR_xf)-Md@6SwujJKPN<&5w{^0iS~_;_Wlz=&xlQ2jjp zquF-{nbk!$A^3r41-t8hZ*tF5;dELlT*Lbck@E$*{lC_jqnf zLF0UN)oj>DR_hs$|K-WM8aFC0O22-=!<9|?`nHR?qWB~>Z=4xmrpszCkB|*w%6hzVtOgE6Hfe%#?tP$`+EA^Ynlqqwwn$CNuF{v!Wc5=D+;26 zDd8O))2UBm(2G()-Az$xb*`pAiA0Jj2vB^C3`BJGQ%JisM>lMusrvJS~x!jy0}=@ML2=n>t*b)=VPH-jLU;k zBWruu-`q5`lqS?zC{YDQpHMCyjlG-AvD>#r*4AE29GdWKwv74>pN4)juX+C}+JQz} z1_gaqs})NiiNUdz)M6eNU%}GJy>~=|XHTT$Vt?yy%WF*z+=B+v{tMBDWL-D5N#wC} zS_46cEsAmZH{j5h4f$G`6Dg2fKqIuf&sxZ6|ArobuV7m6F`GH2IzVOJkK^;<M#~HkfiLIQkfPwbtu!j+m5Q*-}Ga{g61Kx@$qE%4+GQ>y&m1MOD~?$ z;MW0YYw%3u?)Y=PWMNj{gD{0Nq!HV*FkR^S1$*ie>#7jNa3+TURe883?- zopzfROruU!?=6A zN5>U+0;wAXE^b#YaF(Ef12WM(&3n?$%F&|hnZHNuVxa2*zAv$6iUI1!0#_P^1tItM z<6krr9HwMac={;omCSD4OgWOD$-c~rbE9uRoH*FDOSRg}Jy`gBL`&P3dXF8*Y##qe zt6YL-8ZcpxJr~w59us3m3Xv{E-bcy|oAXE8q+)fr7B;6wN7TDI0K27)US4kM^@dT% zErV{}OqA?Mo@!Z=kvU{F@$SMYcgOc*c4ysAtSq}YX+(Ej>zAFeMP-U<)1q3ab^L`> zx@hq2A|Qn(z8Zh6nX|xgt}a$z6%!*F%`QoW&ow;^335g&Ar0%DO>758tZ#2@X0mpP z+74YprSYbWG;G0mljVaXh_Y`na(8@xlZ))0jTQRYxyp6?_19x4pzByfPrQUiCNZ?) zz>11OCvM@U%wzNp$%i=)1g@R+5g%k=M#y?+@>M)=eVSOMiwVOnHnoVTdye9nmbUc3 zim#K^^Ymq(IdS5a#!|l+(h1sFbujaO=}q%s3*9f=#gx!n>nn?kx(J2*r!21puKNNf z-X|KrRiasqZ4T6ZOYjH?DqYOCD35M;^XqJ{8K!gu|wZ2G8BR$g6KZ;V~KEsbl z>%XU2EqQbXXEZ`MEZ*}#vviO7W%j&3B2gf=9>U;=IL5q1dC;tnQ2{`E@odcrfYjb` zo7%Rpt|w~e4k*s=Zzi8<2A1GK<{yxm7!5E>|CCtZOYJNh=@x9I`JH?z_DR|nap9{b z{Ia97aBa4F4$b+kCvCSkHiN103SnlsHq_tEipyJ*Q$Iygt0BGq$}AN>1E2@M!lZAE z2A1N)^UsESq$Gl-Y|3+F$gJ#7okiNM1F|>T9S*(DvP*a5LaBbX;xOqYcYiHKAui(N z5A_bq4eGc)*S&eOC6>e3X?a=&rYr?9lb`8RQTd!Z+mFVEDR&&?7{Vd0BxCP*9I$%D z#R?8amlgnrY(t2E1=7R?!h%V_JaS&E31E{aat*rVaw4iB{PJxP!SkO&YP}>8Ve?e6oOaAlvyKilH%mvxw%e6#! z&3GaDRUeO+8nAT05(ipFZZHo@XnJc4xUa;-FZ+2wk0o(!ubW{b zx6#Kf5!9=?Q${6&-&n%I9-Ulaz<6W3yWgf2f}U4ibk5%j_cHR!YnI@O@Tg${?mm)@ zL1a1=QWHJl4ccUDvCen)*ERoXUjYz%`gJJ_LD4S(F7jn68@!Z(`-VGgWmp<5Ikp3X zL0#om4FEw)MJHX6w9=2#f4$r{&e!jsysK5S`XO0PqJfe#MxXbzvZ9-<+svt_ss}6| ze*{Q3E6-hCsf!KJFihGx%#60A?h~oB25xsEaY^J4#!SJJhZ-f2BQs(($U(41071r7^V zpl^C>uvuD^U2j-7m6rcaj&NE$>N-!h&~E%WsB2SP3|U7ReonA2&$F z6s5~64gEk#EFx=~W6IwLUS`LL)_8LG(hJ(I#t?=+%d0xK9>1?S0gFF*GMI@5U!*eW z$Bj|9=S5Y}(opYpDb)t8oSYMj*U%(0L!lp_9%zh6+f+t<^5x`n(aAgwsDk>~TDNGh zdlOK4V4+aTNoex+K^TqyF!@$&JC&UlY7DkDCf*n>u7cjH<*M#oi_tvg8zXXz=OpT}8R<}0 zbY7hEq+Wv?YDp;q?m%@bF^j-N>PE(~wO#X`YtO!|+YA~W19_??1mt&DFa=-eBjwAx zMo#Jx#3IB%jBEa>!a}#55)3uvx1V#^JzWWY5*eAp7T#IWm|ETBKnHU+S&U^YJ3VEg z)c8MzP&xb$RwF#^F(`aPqYUU^sU=yM#uBTo2c-v58`GMsVs0=|so=Ce6L4GWVvlO6 zhkbHOG-BH0YI10Pk0zh$6YO+n@{#CpwkYDNN3w>57y_?ZTU-@!@q1aT)Thi$!uTve z5RQw?ckjcXC#Z&3FD;iB^dhUWO7$GqL2FZlzJ?D1Ow0lgtZ2Aab`Eb{@J?a4ITfu* z)-`P7RwTW$X954GVe8>Yu>1*F)_M4&HOLYc_x5jkoz=pu1IZWlibx}zuP#tL|vE z`|BB_e>DEme<4<_UqI8ZhwYCSkMpD#wgg^GOC2RocoAiO=w0mI@`&kZ-%$(Y6=Zl2 zhUCKs6F0$b=LJa(`L ziOx`67d`*{^WsTMRdu1dd4P55nm#TD*HX?c29s0hpm#k!l0T7ES}v+QSy92SbqN!% zQgTRig!k@Dz81x%IJ%u1`hsC%HDyK+UE``H{mMK>T|BT6G`;4=%!u-KDXyy*TUZg5 z#Yt|p$?yp|$uZ#9kZ66c{EZ6_`>l7Ra>YtXR9guo22Te1;trV7az*q+SsghLr7=pd zK+2r^7%bWKtBL1`W1fDi^}^qBTtq^I=fP;&*{U<^Z<41pPH_Ia$S1;r6BWx zWqG)NhVfGAEd|6-E%l_y;VY-kgrma7ZRL5`)6s_3bh#(*OzwviOH4Ecyov_!14_PV zNA&G{Ff55r9Jo$C9{8v6=aU~@-dl0_@5~~d+}FTv0ATTCE4Gs5%6@J#SvN5T_cz5D zETK0(S=%~SZf$CX`#}RUzgoXX=??9d+Ddg9u#C99wC7%rjh-jbwm3&LO^$VU)uJ85 z50k^cIjxamH2p~6$qcCPbYr_ea3>|4N67$2OmK=O0LYUZ{kV`RandwPb|UvbwV#%58aThyS)AGWIY zQK6qM3#Oop=D^r4c|k*PV*`hlS}S<>x>u&Uh+fT+nWwCzJ<3ThE>3_~L-cEd&P{uZfFTiS9dx-Ed6$g5B8a=lv%2*M6O@+;lA);Rf?XYu!B+Zv~ z8AXxV#<8;99%{OI_aqK4{$9@@J;NOowqYh8`}BvrIO1k_X$wU#RJn4WD2zL$AOAxj zj4V4MmHF_o)>o=?+9@a%fX?_SP8$PlFbUBCp;;-b$B08&Rhz@VANV+wpflde17EqB=Qd?8K@;IihUA@|xm zHC}8H!TAva^q~d}MYnvrk{bwSM^l5(%@~e#$-7*kbrlFftuO=z5ha%5cv(Ol=Oi=5 z(B)rIYWu;MsG;6s9uCG3fZ{4n=q)Q-#A)qiy@H6g6n)E|71wiEoA|!w-uuF*67I(j zspNTA1LMRo$Z4UOJ&M6w`zjx%6@s=J$SD26ZrecLQ>IY(XAojAAvUkynW`~hvHmpi z-WoSXuAgA(mQ$yl)_1a3r`Ck~X3K{>S))n+LRf?^O!e9attK?~c? zGdtOfJR)9TS%I3kAw630d%?=D1_q2K`i^=JVJAk@&dh_DqYOE1)`hs_Y zz9sy8T5{Ha9?2O`W76Mw@`u=rsT`pn8*8&ZCwyg@=xrTzEE`3`HDgo@Vc3Q#a@Vbc zIl^|9D5fEo2Oco4kU5~oSa~Ron=EjYX#IjC(>>J`-&xdysf8Gj`C z_QDB0g?OKrcPTBdoR#I4{P6b+-G~3aKlwy=9JB_Rg$ediKj2mL?K$YTyuW?Zyi5k= z*F5S7p2)iDMK3n!#L~0>#0mA3DnIC$ujnX>c)r6~+<);6=+;s2b{WL`&cqjDsd~p)s3m8waL|XB|DC5Yr1Ws}*q=OGoa>mb_kts|eT#i4#f>2oWQt}s@GI#2|a4X;&VbjNh{ql`)~k9;`7 z0=FIiP}FXWMVlYF+B~gsKil8%tF1oS|6uM-d)z*=w7<^~1VMlxK%TC)TasIr@+vR9 zXqrW`O0;S-$&xHfYMDi{swh>Fbdi))@@O#a&IHJVU^4R}m_eR5YFVNLT<1DF9`!No*tSdIMzz_@!Z6oh?;_Pf1Hqi6 z3X-8-tgPv+ri5ea0~763CXe-Nt!tlG8_wy4s$b2RzQG%A6@NnGK@a`Nx^# zOJSq&{cauVd-N6TQ#Q9e@A^1uV&4qS0%)v|8lN+(PMLzR(PgHO3PWplB zWyu<0NQTjAv=9t=0}C)M zaoDry^en<_IrbaWR~?zG+GfSr(MZMgbHhN>@7)HRKrqLu+KAUCj*^Egq$@V?7KHzGo_|+FA%;KRMQJYy50o4%*#VMai^ys1ES$ zo7rQH2PSRLZB;^f3nw%&{4y8B@fWl}i|G1Rg^(387d06*fZ~Z$$H@KijD8^vBk6r= zBFZuW5#+cx>Roo+=bF3H!On;UUN~-|E&-~(m9I%V7+WD5-M?~yx)*&YGZzUJo7Dss-LK+q~Ik3=*#(G z=qVzsYBin-zMHFChcBdhX#eK08*cX7Pr>l>6gszzb{q!R*r<1HMty$S}q& zl%6;}uA56C8aQ^=0%JnZ%#iil_Ae+d6Hk7`(_(0uXg~wsM}MbC)X=CISPNiAA)I&1|rWQd<$ zeK7pa9s?Oe?F=wCGU7k*$fH3fydKQngT>$|b=Eu6&o%0J05z%>6Zg6hRj`}mLpxox zQlI?u^x>2L5)c5Q`pY%97El2u` z_@67-*Mg|R)B`^wl0NxZ!$?GZxn5fJSzr)IrZi@2FDq7aTFBj=XP8i*O5NoU0I3*= zDVACCsrz2HBEOFN#{|M;F%u%j0E?nUh$jsGJ9qBH(_f!}7|2#MWJUUMZksx8j6BpR zteg;87ULEBk@}3!bF$oZL9rS~^@Y8bn~&+hr=9yf=feE;!fCCBn-Sh-CvZ+kd>5co z(}dMXK$S-nVU*qP93$5sKuZpaRI=c2ypk)yP6D24vtk}v43qhF1k6iMrkkw1Z8Rkd}3y7k;69@1!2`%k|=_6kj??N(vkG=8T%(FvSr(bL3 z&F-S;Wwr+X&4A%TtNQKq$J3{E@y5mG*)XdtrAH<*@`b5pKN-eAyE&ClvLtW~{V4cy z*gp8kB!k+6(2|C`he*vVZioMCbJacFjfC}8i)cQ%aGF7c*F3=>Mw?Q{Fx~6=b)dP+ zD?T_6rXRv4`3}V8ALPC{Mm zW%P>achO8(+A(wE^6|i2Fupyy`;Mbv(RQxsT}eqX@B4SN?=%VsmpK^R$Gw|n(~pL3 zj16q@XbxaN$(Gg2hL}Q%`#f;&wm}rTQkmpmhg#h1aJ{E`%flL+)ke0gacuA6nsRsO zVC2r}+1*=_0guV0)&QIF0j0<0btju9)bsp~%px$f>1KD&wYIN21c9myrenC; z(mkN4Lf0|c=ElE{8V^}+1 zH(GR zKSPwp4r?cC)!qJ9veJ(&9GVYi4*gk#s8tPq@=rhgt;PXL`KR89MkGgI{075E{Dxv3 zRIsHYtRKH3O!CnxN(1`q)1y~MW#&@$%G!)M~r_pah_LH0PnDJ)L z>%vpds;Ae9BIZPd8I)^_4|J6@UKSmVgNedxV)gNV9h|u)ZB2^S=|No z#C*hl&YCnww{YJl<5J{P>1N}xqhzlJebId)XO%;yD@i)AYTO|Jcy_JQ+<#X2~oUv%S?Q*4Y205v&?vtmNa&5{T#j>Tg~W^>JW18n_3yTJFYQ zuKNj?oEv(!g`|4gpM`HKHBOIC<`3a!BLmdHHYhAuZK_+Z-8rc#nX{EeAGY1Dust(# zz6z!tN#x)LX!G_oFV8wV*rliAxl|r#?>?pF9w0*<*MIaEwSho`&lGbLl8h$of^^n6 zSWRa?i~B=&vl_TM%XHZ%pX`XNWiw&)2eI{r>-txpa`*x6@4@wn25cz`nJt6#RZHuW zh#(U8^TFl->bSv8c-gSTuJ26tvcTF>S+5wh-9-;Bdo9Kh^<~Q;Z6Hw+d9q$L+8;o_ zrDwoVtfn=HKhCT#ejD zNPOY;z;u(4M6EwKEFx5cgHj+{5*plxnP#ttckcs2<_;djDHBvzgOOwQaZi{#TgwHR zVQ3UjSYyjt=?9G$qN%hNXEOFTdPTu3q$eboFO=C5a5fxU4MajW#&cB{2W2t|unLJ;r*DUu$Ev#haJ7Hyr$v@>eDFi6p z=mC}C$@(nSqzsT@=Ao%OXWr18DpmtBGfiPL#I1_(@u4j|5RkV{A8QrX0qqV7)({O9 zI@8%i_O3rP;lS>5t{lYJvBy*K67_jBKHLjh{AEiB)v#iS=N4803DA$Ty9<{u>B|wD zWSK3yWogG6xGN`~J)V$LWBON7@FDt-1;V14 z;H7ecG_1XxW16x7nco2=6g5;M1KE4z&Kf3W|~yi($YR<SbV8N za^l|h386F%@926Yyu8h6^l?g2{6s&mt~(j019x3;r;M`unvNx+8v2ak@6Dc!k8E=e z`;_OUN$nMcm>N$QQWHV4mhC)>mhXgiWBFT^rbJhtOSmjUNQd>CL);HIj%$4I` zCFLH?@hKWO=ttZtw*#RAR&oDXER%bdpM#>P6OlHF6~s;MegJt6<`(qd;t7_%)1gC}%mf>mwN{B91P{ymBsmP#(kkzl1s?(DX;g5?o zfqIH&uK7Xf??S|+`Pt(9bOFSh>^}0liRSLlT zHdL5~*y3W0!4Z4~3%1L1f_?gRTfL}SC4Bu+bcemANniBND7G%})D(mHj zbQ4zdUhB~Kg*5W5&JE+uQRAOpaK{p9oSyh;4kf0~=Zm_d7H?B4N<9tGub(acPcNsU zisLcNiIONSf7GvR{LI!{Z1sJHm<^_)m=pC7eyLuz5Md;6fi-OPJhX@v@0t7kYwG!g z(inIxS@U|FF$H93OvykE3|0)#EZ?9&Lo`MN6D6R4jC8Z?T8lJgrB6yh!#TVAo2$=j zm*8Zk>;Ou${$M^iw7G59A?LabGUtDgkkN7Sh+Ag&47idKZ6p|bXw~&0wSE3hMo1z1Mq?8)u|b@=fh5+($Ux; zRqCOMSqQQ6{b7=+8;HQwQXMT<@7x}v>S=|Utz~8Qf(y7onJ`OI*5+V|?VF9L@tQMo zs58$WJE@Pima6LR&cVd9acDl(Ckff=#|@ArQZ-NiiGL*YtoQ~gCy0=r-qigBqc5v9 zco!@XuErJvICjwf2FF!Eb2!370vkr7NCnMK92?icww{&(1c2?ea8?jO-F{z-`;Q!; zGr30p1O8VF9O*-bEpSU8Asi$>y?GQ&gMOcd@;k;Q=pc`z8#ps%yEE|pOWEUbmtreX zAdA&$kV95SyuRD#P!HLQ7e(`bDMs=19qGBvI{4r!%@j)Uh` zPdszXdG1#71i^X9bw6$CQx4$02u@j#Xm=cMRcWk5H!O1pyDJ)H=W2w1ShQATMNb*E zvjbrS)6!mN(eLGyw1oWodRA{_`!;YUoaH!qwR)@Qtg-v>jI_%5<#i}6`abLS@%iQH z#FcnP4H7do?dj(i^s&6?Noh-6gNGcf%-8Cl*k%8&KdY%P{!;JV={Vr|TKFpvPqc!RSYapRudcd#MfOPZoZV!xifFS$h(u<+a?!9(GGG<|FOox~wN zg-LR@<&Z#7VR!>MX?)k1LHmiBwLiV7zs>7%rzoddw?wK9o;!U-BJ2;Y^)v)aUe&`q z%N|=H0py$(L)vcF;?!)|vNBvsEJfa7xGKR3cofz7Lk!|sS&rm z?#1lx)vJEu)LyN6C6oflMd3ZohIttx!cis=W_+@8>>f>%S5IuBwg5D1EYdFC3leB^ z&1A$HYAW#AOez13yV!xDe>L;U&3uCgR%61WIp!#XqV{4{601{7AhSgejs(e zx~09fgD5XNYZ^gzVW5M`OaWyM)EP7lGv{@w9j2|AkRx#rwZamf%ubKxgIZ1A@=^9% z5-N5El|{9R_znJ8(-PIS@xZEU$7mg9`hZD?HTt1evUu>w`8aU$V;}_%%Pc6L;y%ef zF@S8PZvq~3FwT%OsbX6uN?ZG`Z8j*n=#Fn1(|5cK1VxE;R_(sEH@cf zeD_^&#Qx&g35{Htku%#zEBL%urlrm)48$!p6R?%^mf79Yr+=fFr6{_u2eTYq6<8sKF~!q$+u};8d`@H6 zs8#fLbj)6VX?_y@**LlM0111G`LGgAL(xh(XgZMn?`!?yPo5mWFX>9>&xadS_}h^&1zg6N!o zhRDxTr4aEJ=MST{J=jT+J(q#zAhXy82`U;8{Ne@OTpXxCXPakZsbSSnPcsh^k1(^< zY|@5FVb%hE+WBi35to^B_e7LmVC_GgeHO#D-?|o4URz_K1xt?!T$4_^fGj`bDBE+# zUI8uX9+)PhRxFe!La1KfQ2 z>Q(i{JVY=I=u*D2(&>8~MdZDVP$U6l`2-(dxE#qtkhs>}C!U~@o~29jX`i$T+ik8y zo_Y4!JmqSUV!ze8+TKC)2L3}Pv7A6=hRGO9pTA81eOr6!61iz*bTb0wB}46m2l}2pxPa}U^0{U10*1<)>@jvyJ-;68eE{zKqSE7?aZME zA5!X(U%o%i);*|!CF2WMe;F0>&NVkMPgs2oa?I4`PHz|jk~c#>#VXhJMS&f>!0zoU zTr&)4tTs*ulk|FH#n@7_dEv~-iaMfTNe~bX%20PPdC#7C<0&;jA*l$Uvp)@m7HdC& zUvxbx{$vXoH}bPT8NcWlSyeDIKM9{YUa5IQZNHEb=`}Xj198iqDmep5lQe^XJYW-0 zx?T;KyRH@oo=%+bg|QW}%MnZo@UDSaHIfov4WLv&;X1r`SX3Q$y=KCGRC8HJ-v{?9 zI4r9up{2$lY2h|%Ew%jgPIQ!S>vlH!O37X8NcNE>)4O?ew&T2>8xAAC^qSUP4{FC) z1n5_IwlhltJuTjIe$dNc*`r-ErPSdU=Ktt>A{?g~`i_>J>U5}I=~y(BKN3lAXh5i4 zcAe-q{38jRU@YUod|LDjRNRkepW%i2X6CSit%$oP5Q=68oBO~A5Wfv?)&i+kz1kS( z@KMv{6fZ#5A@g#M9 zZJW1YPOzirvw%48gKW{6Dq*Q~q5B|Nf}1{RN)OV1zt*@{EnylLgXSBam5h~* za!J1ANv!9=Oqm4wg^Uu_yb2tf8chS?dsMgJYvIOdDg8wX0Xd8plY-|42%LKne<58l z#6aDoUOZ>6e&@x8kW*`ziE0Vj)`2TVVvN&|6sb9IZzk1^H3%4_uj(3Lz+EpF0@TIX zGFBk?3(hGRLU#i+w6Tj1&9!_^Elid@S8^NYYF_PkIPiz#UVmPrjYWj5kuQE?KWo*@ z^<5^KL;xZ7W*2#gLq?m0%BWx^)e9q<@^iDY7-r!z{Mvcy#jCyi6vLKd`@B87AFrV@ zt+^ThN7=9uKl!6idie~xekY8Fs2=Yrc7UW)&W-Bk^ofiz~IsX&n-b)0^bKPe&*hmO}d7?EkAoyd(} z5n4}K(ArZRPstmursJuix$1DaQrAZyZrV(DejBf4N5-SfiMj5q=jC;G2b+0hrRx0* zK^nZ*Z}>}+KflSP_l>U_!-4oqT)Cr>q+~$=^oAllHMnNd5XtE^QE21 zb~jyAJ*LBWNVS*)ucylqy(pW0yaT`;?*{qy)-cNjYD6YJTvg-P`#AFqQDC-I=r#yI zA{IPa<9fl}{5P(}+Y{5f1|0Q0s;M-(o|}u=)7$d>wAp9K9EDJyKr}vf+X;+-&gOK>E4#61JXzlS=+lqoTR`GdOG^y5?kTp^L;i8~wdpq99=eIf9!-Rp zO?*SOKO&bsv&1siW2F@ddpCUGesfvlgIB$mkyCJ3;P$0QG3pj5G%tgzi{(@hX)j!2 zXjU*P>WRd}BJe}XGO>LvcvU_Qfm47dd>s~EX`kMgLT2x{JYXq1t^Yh8#NpJV(R$5X z-*%82-c3@D;AhhsVGo<1S5IH9Hr@1LUCeFxxEK?E(=(63ni%!!ef~B2)r_QXqZIS9 z0gNSjX*7S?21)?Pd%746@Zs!zEq!?m65czW04WOrAzy~9s841esr^8=U7tYFKvaA; z9<_IUhZ;|qc?18_va)ycqtMDQ z=>0WBt!I8sMtF?$cEGQ<;|T<@TQZg3X2}+r!4F3;>g3Ooc(f}h z-~nzc(@+3jn(tPp-+1f@GSYI;c^oMhfn!iwTU54o%quKB zh#dDsnGy`4oHi8tU6HjMf7nccCpXzQ&Uubf4Z}z40ZYdV_+a2$Qkx5@GAM2>%yO#H zt-FX{y7p&5SWN+fQa6~z8Gw-9whuFskSJg1_R9ve(p{M4pm{YiNTzk>+$tdI&2Y)) z99}Q4I2*Pe@#Nj?Q45KkaNgEM^~jR5MOl zVM72Sl{Ld?K`j?>7K%<~==7KyUGF0f_4j9AxI}>{Xm4-B9FG*+zGdbXCaPL{$zjQ4 zX&%kFY7R23rqgwyL23$5(s*$syP!6=5DdBd6q3=Ny52o3vxPKv%nguteM43MG8m|l z@!z2QW)QgwfiPdw=#Ci-n^V#RlGl^j8h9KLuFY_RSOj|dz6LdIqdfzD=r0IqOZ)(H z9TS?e+gf{)V)KnrykFg3qSBv+{-v%9VN}#$W!*3uGMB+2i3n{oxdr2Ac0ux^tO ztwU!*j2{aPzgGYgP5;$PC;NUD;d)EH&^&4JZ(h_4FeTqT@d2)O`=n_?zRAG%- zsVeW!)*vIU*w}SxZpJ97; zyBv?P#>5;Z)5pne;xMLmr+>{o2c?OFlbi?Y0uk)=J-0*IS!xpw`ApgwVj~(- zRCjav^yHsrpXxSZdhVMmYJ}=GLMjD1UyB2w0PDSOoZbD!Q)*hV1dF69-Htzae}cQo zWANY^jQ}im8DX#dY;BN4mErMHI3^>rGzSdZK*N6BJjefwR+DLn|K`=CesQGZde?)Q z+Z|uEj6oM>Z}qtczqG^x!IMN}tNTzDqT-k-@g_liP0dLP9?ia{Yzh_Gf2VJ20<6X_;hiw(I;ckpF%egk39FLcF0pRQ z(m~p4CXTdMBw-iB*9YErRc*oR^^2?eVmN!pFW_eVe)^H-yj&C!jn^4_Khz_pk?Iwl zksn~KYc7h+=cD{)H6O0Gf<{CW$stS}J@%OLQ{yjnW2x-#`Io4v3e!u? zg(I3mBmqmb+|N|cQUlCRnD`2vSBjSIvYF{88(mMvG;a}@O{YT#YwX9J6<7dFttY(b zcq7xN;+@Z&zN1E_Kx2YTWJhQlWyv>3a>w9W3ISmf4UiVem_8Qagp zpMF2{!pi1pLOv=~u#rdrTYD7_#+*)NUKvD}@x*@s&Qh2Z-)Iqn3Ef|wIK>16>2&Mt?(J}Xny5pr`t+G(u+^xGP1yRu$XvcN`zBhRHb5bcGev(RA(wE% zsMAY5vU?I_O2X~JT1CPyX{g3rXm#yk+EJ*ioDp;hY6%hBV7$Hhf@T;$_m{eallj1n z0)F^z`mWwM8apgza>V<|R9S#b3ly!|^1-7a!FQ_ea1b0o6-dBT58oKv)JIsK)tX_C zGAwE)T*5vZ%+I2yLZ_tyVS~FMkq{P?AeP`{mL}m{f)0DGvYLBT4abvbRhr^!DvPGq zFT8lh*|cyNdqmsv2Yu9S-4OnRJ}s+Qy>FH7{f#$ocG_B_%PWhuHLL8dzMpyRYHR?G zhmZ6Fb;r~Y%+I&AraLeN+94xs2^+x6Jn{Kc$=Q{bl^jguBpTc1U_B^8O#a{>@f`rG zNsEY5T5-AoaBKgDsIrnG;oM-A;&NR{EPmhJ{W^zYpF=2BJ4!fGKqij}sP2%nKhnoL zEl>Fv?`Bp)z2!OANhSYQvu6u{^`!y8zcL5qxSqZdh8Xg&yQT3xcIDJDjjw@Y$LL2M z9y0CdOWt&U_Mz!WKm9JQED~KbVQW!Gig2(dHO1mR+uH2G3|7}4xD2uUX)vT2N_Eb{ zcEl@dWtV>Xo!crRC_i?A-&_; zja)0p37t7pO+(Zm_Sh6!4v5Y(UUA#V8l8(Fosl3CyZwauaBNjM5>Gi_!}Espd~f!V znrTsl6$fpCkED3J8rs=%sdsG)9F*FH6mTZGYi{Kv8{V%mCySo*+;h+Bbt#>}BjpKV zL5DT}(B&J*!`%in&Vq|%%V-z?w6+`)fMRY*BQ?@#983J<4^#&HR<9dT?KqNaR!R;1 zz^(m=X&P5}pNe!&VC>2VS3tBA94G;7izpNA760IX1=EB|F zO@tPrEf5>H9+u*0=oRWQS&y-dXm$pVdFuFr_7sp}oKyD?`W?j~q(Hvna&fEekOY*j zMa?F@cPDlsCy>BYmu;h8XLl#g+krFe{?t*-Fse9$ad!8PXBR_^(mFuD)ubXqzvJJp zBtS|p2@#-RP#q%eEq zC_2yn6oU>2T*kuOu$4rUbmC&+Sf)*~@iZ2#VE{i&+5r<9TNCwrX|>u=uQ{Dl(JnQI z!>(Z1Ix-9>VT&yveWX0DCo8w7iwxkB_-DfFZgpV?o~vE=@G)-d>$o@EJ3H5?=#skJ zNM)}=ec;JvHMoVu^x~A!iZc035Z{o%U)z7D?`gJ-5sI=JTA+~3#Qww>YOZL;?)*X{ z^W^uDuEu7IYFVRpU?Z%m$qz`U52t_7t1h&9pz?h8Ct?8o20X^JH8lejA}Extw#1N= zOI;^aL2)PPdiYq|^XTfHJH3(akLc@LVds+$%;=2@x_|ZQ;n>2X6R2>~2q&&uEQET^x#imKU@M4#30nh$ z4N+?<9WpHKC2g%#&@)N{u%d{ekVU1TX^cF~4yGbG68vzR=W3_}1Ms48W9wQ5JX?V? zJX6jLlt4F?-|_u_LD!aD(7nZ$T1n%O`>&!=sC%l$#a zR!WX^&2{f*>E6#SoK(xr5*Rr0np4Qn@lC3MXaJCKoMyobQYtE<#zV~3biA3lYX5}8 zRx1K6dv6l#f_HxFwe|3Ox+c>)H~^=kx1dk$w)~6+e(@y*c0rC#9l!nyr@Sju%rQPa&5E$ur@tziAP~xrd(oUFIezNFm%uqW(({=>MS8U6kdHBP)n`r zh`v{v{&(Cx;m(IE#VfY!kT=TDln7#d&@v{pXR=dIp)(Kj>VC)Ga56=doWxYEOHr^f zaMW*-1*#xNTXHq7~4ORV8@@d*k?0PcXqA&fbc5EE-C|duEZz)BL~BXn*8l>R=xD z)Jm)t9DTt9!b1II`h%wXxhu|;f58tysM0)R5)T+hK(wStDAb_6n!BRm$x(|C23b(A zh&p8TV{ee?glXVtK@yM6r58a4w1yQbcxXw~tBuW-WjB5s?*y zHSPev7hQC7bupN!*;rr3D?0>4C5xw=T0Ps$hqQDQ9{__{73wy{(0fbi4z(G*m~N*ylFAm#L^kI6Z?dNNiz;vfm*^` ze>;7s=K!EPa2yb#m?*sjpV``m$Z~@RffEgz-MxHOPj6J0_4Gx&55Z2e7xlEPHk_Vp zA>l;csF}h8z>YL?NtfJOn*XB*Q+x#QY;4j*TS^A&o;%7?ovpb;U#sT%zt*R-t7%g3G|0VQoYlAfUJK~|SISn{Hy02L%v2&|&=9h&aI-*QppLID*EO2> zzmWeLn`>UT2foLL+Pa_wZSUwrBH7P1?-fKLoL(-8M^<=<6U2{SONH&Zra*K)k;>@p z4G4JxwciVD8K+*W??wuKz)5CFnH$IVy=e{8Ph%c0U3yJ|#SkSsWCds(`k>dSq8dfY zx%VHTwgu9szEvp(rq5KEb4qR_+tQN5nldh07|Am9z0q^LD;bV1n3AHhk$w7@`fOhB zaJ{}9G|fmS-6C8_x;tyZ)_5SHLT?2wOM0z1dspo^PP@?)En3uBd0%Tv^Ae!KpL z67&7^!&J%WT{RJzi%VGJVBGi`-|`9=WUZF#E^hH$XM2*P0HwC5&!tu!9{9MTarmK< za(VEKXo@Ilb+)^QajT(3_{)77i`-_6qs*|n-{?*>SPpNrWW8~_v#lOrCwbYhNphR2 zKVZfVv#{K;-<;O-+Qj70X`8;(8I+Whr3;)(N-rFCvYMz{lMZ^3e#*FSFC5C{s8S;7 zf0H=ThO^aAj=kPwae@6ImZw@xh&nQ^ny4&3SBr!ZbrlLo-!-NZD2x4}yA0CkkyxNb zBrvnD3LD)b`M^1XvADb2>zQwA6eVD)Ua4JuST;yuFToFTbXE9dEt9n0SLW&Fy z-LnHUCwgy~GpsW$3B;LkADW?~1xr>WdrghUOe58}h%f32LB%ow z_35@Bo))U_ghxUs()-hoHI-$wJ1uGg#h*_fg%X}oEXD9cL8t4%y>qf_PLpW>z+F#% zd9&n;^`@%@s9D*`yVAPtrf7R_FzImMglm^`@`Ks?dcK|0KmG0OvBsxhK_U(oZ9_GP zs|{rQ!fCZNX%Q|ENe(NDbZf^KZW?@UUr#^NEreDc&)(Ic5lf|cal?oDVp9ueZ{p*E zE=W{TKh!qdSWbi&qw89p1)>onGb+cG+HG(x#rdp$l@D4`0SqzaQAxrN-Xn~;VbzLu zXaFkf<;_*Vk?IZRah9S=ti9_t#A1u1M$KIgw=GT(KMPuI7PZ{W6!|JrOO7Jwp$!a7 zZDAj!|7yn29{Q+WImVF$+rf3VrJMW_I!yOqajrj~ekNO<|E`Z( zsI}FShoOm=XUPn2PajPkII*$bs5Lbw$nK0C;oaFcq3qI2cC9-BP>g;@HBxg)ejt(C zn85xO36cpp;mg=K79E$=+V8jq4*%a$@D;=wqy2BII5ewAKp2lxoVO)Y3MwNrE?&p

Dff{wZq(Gy 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 z7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN z7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN z7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN z7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN z7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN z7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN z7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN z7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN z7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN z7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN z7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN z7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN z7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN z7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN z7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN z7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN z7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN z7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN7|0mN 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�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

kQ5kFPChap00-LJy}Ls_ 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�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 z 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

  • i9M4?noMU0AdU7_{u!We@o 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≫ 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

    4c9E|Utg*!@#JNT|W4z1D_SGE{St1!!Lap_UM z0l_QNc@2RTz6SoZ;E;!TirY=GiVh*V2`#wlPCclK?}Bg zq+YXMw&G;$2dn53$*#6O*;s0pMK!=Zc#T~YZnqN`2Lnv%psuWe((?mtBj?WCat_9 z9+&%N1~8~8yanevNdhdg<-KlY162tO^5AQH4pxmL?qM6>3+#42ofYg5af+% z_egZxR&Wpmfo!R}NEW4P^VU^G$sSwdE|Nv6B$CA@S-RM*V7g}}zyLWx&a0e*yixmp zYs+@~eg)|A_sVbWs^?jocK6JrXYwkV(>_(K|9@ZB-h1tJdDdF$C#nD(JbeM`#EWjZ=L`1qluJ+E2B!p$uj0i@VKLxR4ac&+2Uyii8G*8Lf5?Q$nC zIz9U66WRznDOUf7@%ws!DhBF!VJfVP2vO17w{YaN&H?6W3cKntskBAog8r^WJ+d#3eN^!S7& ziX`k=rfbFIUH~bj2iU$EFuc~@@u*qNvgs!r>Z$UCu=1XM`2~4tv<5$b^YhZj{O@c2 z_nC+VruJ{ge-O_=)wj1n4YDS$X)44H3@W)NHUM{th7MX*FSSW@lIs)8Scx2kbmiwX^dINtI+R&osv4DHM5Atpt<)!afir+2B@ zHDyR+fAX?!WMqod1=5!>E9ub=TcgHbVk1w>7KRL#_wsb-{L3rh{nJm1<_kTGTblWsP=x|6Y|KW`a=CS}8&`S%b72wZwEr>U`#+rE+xecT@gotv2rj z;1*`#_ufwEHrIs3EX;G+8M1u@=URF|UaE5LL|P>NpL*X)8I(yJCwS~lYKeWSHH8ev zc3&XqSJseSqu?;QkU?9oL`ErZYDx!a3XPTdrieJX>_qPvcd@l-Y$&sO3q91(7kfobbSaBp?7OD@C^P1I2ak!eH+1B*0lja`Qr zhJ1s$H{#{>XnWn_3qk~NaZNL!B~i6D9+Iul!c+;r`+*hj^|r4b9BO4ttFMx=L@nIHZJ~8R!oh5;Z(RQ$j^7q{i>XebFVzKwuNPG6$%G|OY+dUsPN|aKV2?dM{{R#LuDp_ny4KBJg&P^DQIw!8Q z!c$`=BGa3uP@;FkmsCAb(vAC0MxlP~#HAXhrE;{hg92zF>IuO8uS7WHgWg?K5-%uu z3dT0`cH8UCe6my2`lJe3qO@_jJPI7Pa>pH!hzh+&^sMq=uxY;4Shg^y>JbVXWoMI; zuNoGm2G*B+;Y|xRm>66JVd3)xflzyW4=IeJR*O7ESxB`Sl57fb1QKTGK@U@_W;)m+ z|Ga29IBJF=O-+Wf9H(7PqO!bSNe%&+`dZH-7JL(VEP&qo@%ax4sF>Vf;KNx>1s-rYk94HdhXnGOh%cY{}lyGO$dFr^ZPEKHK zJS;k0uQwSs5IdJbQ&Nj4ix|4K7Mspdc0^v( z`M;}DwHV^+=-%Mm>VCA<`*;7mG4{{cht&wfkfgI@=RAh@$X}>gvn{?Df1=0QR;Cfn z(<9S~tnONfz)O>0T_lMr8R~Gc^^8BRuUPHFpA&jDY=ZOxdhhb7e4Rmj{lZOX!mb9! zS!0D;R1UK1SbwTpaj}JAUGsR(VSPu2zQW(cwJ?p70y}oRn%)?NqNLY%>Kt#DCjx|I z#CVgtbu68Bf*@69OIPTsamWBx?4NN3xGe()L`9 zOJuCN{`2W(0gLjl`X_pDnUWe?->7{$N=Pg=F+0|-P+Ukc7*Xk-Rnmsh>GAX5m%HD7MGE?xHBiLD)`lXk!r zt1#=JS(1(?61B%f4i);q10jxU5s zq@jL^vUmCn_Qm789S0)kuzUN)j$I;1&w6Ei|2G#j{tFd@mgQZu2-nGA2XIBcxVcd+ z+;E7YN8_KU{H&JwCT#9Cb+bG#@-<6(bbW&^ACBMCQ`a8V;EUII--uvv{gZ$vZQ#~^ zfHR6jtI;<0Bg%#W2aau-&Z?YqiBVG z4eR&;d;TGr|NQrC@Ry_hp;hOVo?{fKa&z3XOR#fbq5UAjKP)j&5!`DLVRY|mL&xn; zywSb|>}&T#cU^Be2*iYpFQ!~MgDh|N4M5nMN)JZkQZ;wCM$N`zSlLaap zb{&JXI;qT-#9|9X`fsgIbAPMk=-08Do7dI}&@>DqHwa3k#!AeN8i?yDFgE#I=h)n> zi}~LJgQdSW{!C3=J9{o?M((a{^?P}ut7CL;s051pt>rmJb7@{ToIbJ%nPd)Ra&H)t%_Jb@rY*l(j%G%Hm1n7 znW6R!`^(G(^W8h+k41GPF(X_rzVwp*%qmv;%0zkAZyYDnA8W7vjPd$SeePCpb>Nr| zp_wQGT1%ETQu}L;xbZZ1Z0sqPa_u;OG|pwqKamzxD{;9*maAcWDs@0@V{6OX;JWjR zV~w^+Dpb0PmA+U9IsG;EY>jIzc9h0@d}y&aBBXt<56LZ{7uF*MtEjR(mo+WONbHF( zWZYf&pvDihB^CkD2YO!(fOW1y<^#8*epr)T^Sx4rA(GAqphlx5+i#L*2YXxvy1={R z^UJO1SS6l3AKQ%WluLWeogx(j{DGD{C}PP(_5D-+c~)xDjLl?9C2Ej zMO6CD_&ptlo3z@TD>C5S{L!y!jX3sGjr2$U$u6WdcH9PF23wAu&& zEpsDt?B5?d27-&@jgvoGaW*Pul0IKOU0K!aaW9!sBG(L$fja279%0t{eD+KxI_cf$ zRh6I#--CbZIimb4cYgD9;o3D&Mzv#YsS23{ENl7Y!b>kDmqTH#u^7e5Yy*A7L4+e; z-IEsRbuA6)Dn!3+3IwB%=*UfteNMlb(oDtyzy@ zIjOGCOUqsTu(sN1>hpL1G3%re*j=SXOf#;o-OA&wp&@q{!9o}yB&L%YLGju4W&iP@BWtqvDEYJ<3P2OzOii=(Mxi=((V zG=c&LDNendg9!$j;QbRr)n=~EYDYwyw}2yLD~N~O6B+hB_9hU6bkey>GD#YkgmSlNt)-t|EUudeq#FHEYY zs>|M9&+1GmV&uDPldb5daMt`6GE&@kz<9{4Ri@V;0R+93D!$)8wB@mUO9%&G?DIJ3&h@8m(k0U#G76X&t!U zzmwO-lp&}EEHq!Ae566aNSrXFduVZs;7?Lz>!B5D1n68%0gfL!*`<}VNZ~D_Bt)L|1*oTq z;@mMi?iw5S6uZP2_@~a~CYdB6V*2`1YoA1IsLD8{G-)F5@Q-+JPEscqsZk>UYre9s z5nv@)(C2XWYMPf;v%#>l>16^_64DZO)GEpq#FZWciM8&F9$cH3b5dkMyC=+{6VpMp zN?+68AMyz;xyCcG^=C)h{oDG98a-@N{S*mRe7z60?CM{iw`2hHQ5};v;ov&DwFr=w zg~|G9+w}Ku>J>&`vfboZC;6fC2E^bQ2V_f)-ZnE_#37<#PY}fVR_?pXBUz@QC5ogQ znqR@D>tKWns`zpBBnQKA6PoPTSBECZB!mte#x6lU08yb>PCM z<7Hp(dLOsJHYI?BOsRE63&O`i10*qr`=sSc7Y&xd<77Fcr91g1pN(s&GR(6pD$Mz% zfZ1tHb`B4$DaL}O6OyD?V`Ht>DMIRnDE+;0>u5}1|{GGwx z$j;i5KTi|9HL3=)b(g5YfrBDR2Rlg|t~s&;f2|kW&4naJ<8TMNLWYpdg?Cp^cGjH- zeF{fQizM=m8h>JDW=5akVRlb7CPKV;V*tP?(N?KI0Uk;{q){i6njcyS1X?Bsl-PH5*Ra$d_TO>%vc^75&aQsuv3nib#z0O!Oa55! zTU`zPzz)ajJfdmbO(_yC1CLNAlu8dKs7}ECaT;=azy^w&MbnE78%I8$zk%f}56oQF zO(#03e`nRuuS?Ap4TeGvYA*nM!D%%5Zb!dx>@oLbwx)|0G-NC~m`1z@HhQS}q9145 zK^qa7!j{u(9DzHifa>W<`?kX9RJ*Up81$~%Lo0pTpWhw-K{F-uQkoW!M=9r_$JUps zz)#9mISA+2Rq0mSPivZND#|sahoHq$s-*=mF(NcN6sl{^3jE`r@CmZ~m#jX?UTNrbB5n&YgZD+d&-; zib1qal|t4V!x{i7>Lp4}a+7F&&`Fdfl*Z^hZcatM# z>kCa0te|CZ+Ucjo){@4wNqz6sP|+B_8UG=Nm3Ly`{v9ngb#!Vwgma z4j*X*)CV$~k%ob?6Y9}MESwhVVN&Ma+&;bBj4kd-r^E;DhCnwbNPBSR+zU`L=Gg}#_`A{h$+be}*{VZm~f zWp<#YCOlD9G#tE*)&;oUqe7AyEw0oDx!Yscu)D44wGxc}qEQ^h>GO#i?;xvbu8g3@ zpx&!8*kVH%7~;wW2|6AXUZ)E8@gK%NNbnJ2O(maCYi^6;?C@IZi`}Qm2h=*#@OL(G zS?Z_az4|~yCs5}lwKqL=qV~iDm^pGYU}BFz5$z-@Z)aOaj>ZdPL#?jj?nxIj2IKRh z7e_lUu>h4+_IctAC`gvNV3fTwTffv=QOAo&WSU;li@kW@snk&?a!BZnGZ!wN(X=Cv zJ;Gz|fX=l1s@{x^Xwj!q8%IQZsoMZ>C*WaHX%(Z7e(sl0N>NssztzF7M=X{IIyc(Z z-xnK89bea-eI|3gu1!CW-lItb2#6HW>LJpuqOQ9CQWeIeAdo6;61M%RR}|8LGY}&= zk^5lsUp+vAzPc0{2$PIUj7%a`-eYJRMd9^k@pp=`oS6}ICK{gBhO_mGUg(7k6nW@zwn+N3>^dPENlLDl!$sS*)#<<4HP)?cP$^OzdcD|Ib z;i!m!fv!2OAcuHU$>)|_NhR(a=WyUN5W2<7txV@EbLc?F~RY^6FrZd3!R^Kkw z9zxw4{O=W43@MBE9_Qa4eLM$Wf?RU} z)}mru{)%)@(JhlMr05C%(t_bI+4hAJF0|YE%W}`C)i8UW*um8qZJ^7lmphc5DF5=! zrPjQN()w%txwlb8`A%}$YZIYDem?$#s5dv*(c6zap>=y4Bljxi_xp`jK-4gv);~NQ|CpD4nD8O&OUcdqb@l@ z!>+C0I(^^C?Ec!Y4Y)R#o%RWmtS@A;i)DrG>*m|1E1oS(6M<_(g;)}ZT{XBwf^Cs# zew8GK`QRikxWoLnST!vyev_oNaeI;ITVdB`y?i{N8x3g$+_Er#lT;**>CqZZq}ACbl$mP zBGmvmYFJ1oYCr6Z7BUa+`d~Im7?3Waz?x))Kx?H{E%NPto!DzHYQ||q$oyZ7E%S5v z{W13j4i&t-qBb%z0#Nnh_`M3@`gbQrxS|7po?{>FyTJ2Q_K?g&*RPLXofJvcaE_3F zhH2By^34anOwb=tceOhfn)5bRkTlolhAoxYPyA|TSx}Qq;niuo3~h4G`-pfM(Wx>; z8gdEy@M`g%)&T#1Q>3aC~<1Il$#Vj-5R0+@lX^ zG1q#PG8z`OkNx5+h)OSW74ctfNSIYr)ze@|LnP`it>ykB>7vF`BGP;oua-lhsZHE( zi5vonyO&`N#eN@>Lz=CD7Pz z(Y40BF)~l`FDHCEWnH|1Y41BaWl{*?;T^3nVQIGfFuu%wF@L#{d6#4MqDv_+=0jb= z7xJz`)M&1p%8%DG5`e25_msBJ#EDI$X@!e=y6M$`q9sL3?kplrb}Hi%S{1%$4GOzF zJVFm2-;N+I8z5WuwxR__B2g_W8fi(Snyo}xE`2N3H5=~OsTQRHE>P@7ychEU59gBZLO%wh#xrly@oeWt(9 zt2bvD4}KG)3bUB$T5B~IAmDt5VYD+cW$ltCg>^6LkE*lQVppSJN8ZgyI@rhCrwnxbdDI*yVdmrhQW$7{o@C>dWU>p^PAiF+%$wt2dh5u&s(`z zTx?pGEHGA|pkizj0UJ$GEiA|tQC4faJQtRI*yIweoVQ$Sr(!b!vDwFl<+qm9`Fe&*WjY)&RB!>b{3kg`8hsO6gRb-TAU&|@Krhfh;Wx%8}> z+wBG4*BAjSf2j@K>F>m?qMry3GZ65KdEFKe=2IDmNS|LpL|ff}F{nlKj8m!EUMHW) zhxL!d)oWa(y!VG%qKjvq)W?m{o^~|`h-r2u{kYV!S09*${@QNZ_K6Ts*lZF8D=9Y2 z9K|i5vfkTM6P{?WP2j2;J$v@7K0fj2lNvTt9B%sf;B3lZk4q(7Tut4su9n`BAvK(d zBkL3_=6WTTb93YU&`2?;1&&N(cCKq_zQwO3h=IfBKAl%Yrr)a16U|kP2Ww_LA6pxxX88t)*7?S&bCKd6s-#!>g8& z40ujYUoWF0%Q|Ru)iALKXgURU`#?iOrS&EcFS-8STIgO*@=QyY=?|pUIeiCn@pDMk zL#Z%k7g7XPhfk^EGt-0y>MQcC=m1{3kXrEdDn?hU8}bNtS3SPx;7B|a8Xl(kg8;;s z7DSGip>h-YZszoJqiCn#@6BE!^Of%t4ET}kT`O{(mnVjH4IgX6M3hQ~K;jPgzIaTypN1Pa=PeQuCM!}d46W{785~A%tHz45 z`t|tJY;+JXXd4mQm*#Q_NGH-WBKVhq9{1J=XtZw{b-LcRNVZip1kmq z&EwlR$n%x}zHAs#q>0JFl!z=%B3v*d2U8s#jl8ahcMpy&!QHj@023O3J8jz8$JG!< zyRYjC&fonX>Jg|kTho9vTzyd{srXHDS}}OkSxswiU?uL%?0M~ng{t-&XaCESSM|#P zAxR@a@&xmzU(g)fHCNv!CvS$xm{AN*J*2t(%9_m4Zogk)p9?5Vvk4{Y_`3N~Sy}Z= z4L|Z6>DzkI5Y+nFpXl$QuGJ923C|A>I(zvK!Vdhn8NP@%6izIY==Ghq+O&4?G*SbEqmFA})VLKf7OG{|q<K+vIx5oF=VNzJn5Twzn?Y2=1P2KvN?eG z`T}}yw@P}%NRjI;y<8d@-pobXGZWd`uuZzZ@3cb*5Sf978^WNfkZY>2R5n^90@V~a z>g{$q;0bJYd|g6xaxM0XG-d@^ohD6W?F2Py6c2Z5s& z{juHqydx8<$pX9F82Vz|+_LOJDXwosTL7hfdoA#n_B`lG`A*+Xef$(UV=v4mU5fEf zdz?c-P+qn@^Z4T$4`$3rnE9$6WfOgPQo(cBg@`oTNJMO?74k~-4aja&eU8*-n)_0# zxuEB|VXxGi^Qp47Sf&B-3N_*f|Era$kfg zp`tc2o|Z(X(Q#ECo}bbYtkWh=+Q~_qhvB+aX$G{ z8?CXAakg9*>WHQPD!os|N@n}RPi92D5 ze6Sn+76^0W3&~Xap*GY_UzS@{POw2q;-sN>j_-0p@{G+9<%tbM!zj0Vx@?rAmR(bI>V45u%1=LS)x*g*Np-qNT{rubdPZ(CbKssiMxu90od_i0H0sg7oNL(x0L&FRM$Gr7 zhi$xj@@jVPykGr0mKhN6ea<7pzn-Qbi+ZH!v1bV_ecdgD*+b{zypyKUu$bl|A zRph;Q?=g)Tfz!ozLix@zoe2CdkKa)@%`43;ni`YqIXWZkGae>(WQ$gji^`iH$I+`N zFKcPg<-QqzF3Eaag@5P3W?gZNd;jZ`%sPRS?&SA+u8wv8?*AUYrye3peX82s%De)D zv#a2lXSG6c562aiCz)*Y2sc&y`y@ch`shUebZ(KDL-l_e-#(X!`am;2gqec^%+is2aJlyd1XsYRljquqg{;IG%$|+rMeA3a;D&S4VDI8yojbfJe`2a2;&P z@Lh9>PB;p%m*kFK=x>ZHLdJcs{dD$`7esb44qs`u^#fjWZ6G`}Y2jLixPiEoljBq7oZZ*zw$vUm3u;QG;n>3bl$rmTa zRXqv;kcLH|Vm82hkV|sZFYr|JC*S}UapF`|cL^K*^OH~16jES>P+QL{zkZ}{IYXyd z0|J0edc@>qPGMl<6id|tgV5 zTinSEM_j)P>ix_$hc-NRg^1&izbJeD~nwTWwv8T$s@--aA4XIykP*$N1gve=Bm3D>sEX zw3oNMuU{qg_?PMckgI(vzzhpgQcrePBj7|U*4x<3k!&8~3(_z1%QmejNILo!Uyw_aaY5vUC{W0-_5Iy9_`6S2#K3c!-NYA4pQ=nqH~%W z%<dmqi_c9` zPy8cSVHJL|bQ-vXUBBP2fEze+wYEsbJzrwT@%tJcXYl_FiBib8;>B`*rH z4i9R@H!h#bqkMFXHtH_1tJpl)yY0P2inIZq98sINHOtr~ccV8&iRDVjcvdIWtJq^* z0;F5v$|x9$nbAC+IxG{=|Nm%fMw-n3C7-lQgL89Cv}BF>d2iDH2#EMU=5xp%IV(ha zO0$Z{$B_tBO$?4IFMb$os(t@D#^%qp)9JeKUUeAzx;hmgUh9&9r4NnfGDh6xo~7cj zT%LTY9|7M6dO_p4T<0T?BnL-F5(v@ZPW{tJ7E2-qeM8p!{KP`*Bq2r40jmwxB0WnS zBsE>MnB8{6P76%aUyeW17{gXrWkKY2P>TdopSq(DcdAfoB8qEhsqBmDorUCJiH~1< zN$XRbyU7>>>QV_0VW)9p z6X=p2u5RW%p>oDKH3!dy=%OBor=o+H@xWOJ6`-Lp-vz)XYChpY8BOY@X}nV?H<_gH~jC9`mt03&`j2_zGTK>1ll(eQrG~X#S6hL;vs;Wj>dshg_o8M5uZqeNdNIH}RZ!0l4lhRr_?yNEqOjTq0fy2q z-@SG6a$P>JZ{YH&MGcOF+%6WcK-E(QOKj^YKkWAH<0LFtV}{>m1oS9N)6~bm z9tz-HTZ5o|B|VTj8=(gRSBGm-Z%zZ9i1yX)Ue1sug}r!5IGMwtE&3}B_N&OT$Q7zN zol35QPhNlD=~Y4(Ad|g*EhNLDh{)5pz=Q{4N3R}d?&Ef;gsok&0f(uS*x|12;Jp>K z#TMbh_AHRU{`mdx)Ijm0zprUvw0*}qf27R+q}&D{>36(j5BW_1yP2W{p_B19GUf;lLgj59~^&3an zq8oNYt27%P-nzp%_8g5i995OiaW%r52tQM;2{DP(k>|NC?GQTt4&Gl?@ z<}xlwR^2z$jV#>6lWB9}G`I==S>Ir!?_{c1Y$^lC|Mt#}*)?RO4Z;@L*KaxT-~@vKqLh z^QAQcL-cLpNz|HNUR`c#mpuA}o(Y9Dt&re?FbQkzB2$zlR>-_!Eyq;I|LSy zX92x11ZGW$>b~hg4b=vatlC_i`vuj9bJ<9Y8ctPFY~TK4vcsqDRaOP3sxL$W)pe1E zl>)`=#j+c<3M;ECO?^Hyd+(k)EOz@97`mp5f~8#*G{#uZcF>!bF_P-RtEr3Jn{l`x zx{qefCK(>jO|_nL=PV5Vg&)*xL9i@Inff=39ML2Zg!A;jN;uIUw5}|3aZHN@3w^r~ zTYudYNg*3(UU*?`NQ-uk?H-1Ck zM#m8@s&UQEzN8;ufbXXA1;GtdYwd6DaslZSfICdDAE{wBDcV+#W8Q2T7h|9<@MHI8F&C1`FUB(7u1^J#wVW>>v&<-Mo@VpUIP zFv&FRmY8Q5ipgD1j_*JI=;P`tQXmnNr+nA#&eyXOCEB24DZE9Rm6v7n2x@D0SOqMsrE=AuGn?Jt)uuUA1 zuEAG5nZFXI&LycaVqAOuzY>rCQ3XJey0>L!&}g?s7{XkTx%F*>DE`dH(pXq%dv%r7 zO5Ae6L5>U4*d~#H3NIz)nuZ4)rIG_F00E2Etr?J1VEI7V^cPYAz!}1FsX?KdfWH+% zF+OEJ-Q$f4hJj@|xS?lB_IwS2B18_P80}gW4e?dvp~AT~c5CHIW2p|hn?g)91f;`V z`-p^D@?yd$zZkzSx{dGOAT8SgSzGG{EB=;r-uQebJE1Hof*1c_B zeiT()Mfj`!kNlD75=>e(Dkmlt+v2gk&v?3prOR=>x zy(rCx7gyWkutL?AQau`EpaY|vnFzFnc8IAua)nzf?3sHf<|4##ol|86{a)5d4 z3EQ&Tzepi4`^%<9>9jtiBOF>(Ks-M>3UOaMCvZn4b%{C*34pz729LGJ;4E?h*g}gK zTjTQMk~UYzYxaAKnTyYe));ti4f?nBb+~^w_ORFmCEPURP+pyWm&2n+5Sg?+(0GqW zNArYl{I9T8DC*qlHNRdSv~FzUlgT^*E0~xdgm%> zNwf1`JyJ=xwOFeAF4roi<u` zx|cOFu9x(&a2@U+8;}UE8m6Uo>2!VP*ANgZrw@6b>*EFHX#B3`vCvJ70Z~W=W*|zH z@=?f6-b36N#&Tg*3|ovQfl3uwhcxoRoy=GPelSB>k8Yx2>kI)VszMbIqHq)Ad zr3U*JC^)`Vy7KFQ-zlMLL&K^G%HeR5>>W zM!%fw2&=RiD_B*eP3$sy5sT(W`E1FCq`|P@@m=W12J$xSq-qAMvZ2f2lId;T z^}SGVoB;v*{%`a3M!6p1~#532P)Bx^c7|W;j zdUrR>q+12FrCo%tMOKTros==mvJ`4SxW4(X=!tDEW7BWh%KY3z&#A)#JWe!F*rNLm z>?=3o=kebYXQ|u()2EjSbl~2usD~PsNJ`>8l4x*sq`=$;7)th!B2AcRy*fH}X$c+j zm6j#~Qh(uTaWfbmVd3~4Dht*QVo+-G9jnn`qeW-3qxXMq1IxL8)jtg-S3zUGen-Ed za>Py{P+TJbk?W;J?*JXq^B?gd?u2H*$_#@?JbAp(`=MYe!0=s zd*SHQt}F`SEBXapHRB9Z?sbbX0an&O3vUH6ZnXhP^x3 zu%upKV-qzC1revUW{|!(3-8ZS9A-K~K`^;HD^Z(ZNP|AGQ6#a!msr zJQQ$o53+9YFRO&9um=x*eE*seAmJ3Ze9=D`W`zwlMkO3j+C}{mjrpTW-fxYaa+$QS zngeOs_jmHOQZ<47m8=G{EWrIi3X1H_Z^ti-Kx6?qMvK#C#inoy1I3lV1uPmZJDlQ$ z=d|c(8tfJ=8dtQP^i#1`E4{F~tWH@Krtau3Xv_#F=rc8hZ0Y-hz!X0Vwqk-|#3+!1 zURbRwV-%x-6|cBP+*BKzzwYyp_Y0;)Q(Q!~wln#M(-bJ#+6dk%k4!_kZIMO?+o*BnwNZ zEz<0)^xEgxFvoNZvk-qj{-f43 zR35U8yU&8QrDwo=>hr3h+S7Ur-nZax4)T<*5ii>1RG29d0Du8unES+p(}V87ep%p<}?~!zTEOP zKED6L3orQfH^#4NiWsZ+aX{#60IqkE_AlLYt^-(fC1yoIHTA^2-#vL($7Ozq&4}13 zNT*Rfe$jiWh}M6|H^2Y840wraI`=v0oU)?x1WKIjKMYx?(fl9=Uzrh$Ic1?fEh$aD z<&lZ1&7g-w%@8fk>LPnf9sG(Jga8SVied+`IrJvl)kc*KIW)FObeyO@N40r2g=^tu&wMig**NrheftAIV5`+IO0B{XwiSf`+F$R{}QF z*d_&iwCN{ku)OovU`--H0IyhQzqUK7vQ#X!rnynXj~9JXR!b^pwK6TUBzlA?%+Ra( zFttU-C2tHQZM-AeT8*@>;L#qs638f%iDFXTuk7&TFRqNGA#a&G%};_JG_JKtE?JE$ z>{UJ|TFZof-8zY~N zrcXG2E-zr%C{3sK8tZB6xr_#urzZfObsqUm;;=UK+R>@PxIiqm5g-32NRRF z4-%tP;S-Ik9c@&WkefyPVPWv2Z19K*z;Z;9TXsxeUDlvxE#wUYjp5wYUyT5M))fZE|HYrfe@ecFyNZv01{aNf9N9)HGS-+8DlBIOWbaHptao8 zxJXxSA5LZ<(4{;$Fe3{hm}1l+W}Qqo#xuS@5UUcwHaGywD`H=G z#Hp__GlqA`lL=qhf$b3sz$VmByI(m%U_g-uoKO?(ij{>$U3sUa>QlynKXn2A>Az{L zgG1wUFifUQQ9zI%`l*9T_b2XOs~S8zyqg;3nV)KFEUh+tmBB79YMSiyOu@j?zCE_v zlXcIH7AB%p{>S%8FqiDFApf#rJwBT#Nm%b6d{o+Lo3vB6)a~tvKbDfuv;})XiE3>J$y(J?kOrzgeGGs!O!>CNW-H6 zqu-I3QI8^?pRq+GG;dqIBWSaBJA*zVm7Q9FWRMPZlNa3sH~r71%qG z$TkBXI--k`9lTB$^DAn#9o1p=WqhBSc?#Evi?R-tQ|l`Po#V2Djc70>uEaro7mej# zq&#DKq~YRW#@%;xPVn9Ss!R7h#6PXoxkp~o&T*Ps{dR4piq*blm2Q!vI6O=)LfFM5 zxvbuM=&V!bKs~4WZPt(->U3ie*1Q5{GybCnGO@y+5>Ac|DhTQ%OQKHI1-qqIRu`IT zkzL72^O&e z<`331gWm%HFmZRdN;r>OSs5N4Sea*{79Vg6YLYbRGv1FJ#QDSRJ2~q814EH;loJ2k z_m6nnvkA2SO09nF|0vfzQmS^7ta zNsQ0Mr+%h=G4sTXR`!SJFInI&h|l~o{#LEwPk%aFi7van zy^XD&=tCSsi60xo4&m$P3lLv55l1^#&qVGic zT)iJwt~#;8?K{aDxO7R|QbuEA9u^1Gcs0gR2xD_Ke3Yg_7cJ72w&uMKx5{2AB8!tx z3?{`&J&nch744x;L8`08)p;$|+Q_Jua2QRle>M4I#QFICIe@5IAjE~8N*q3w+O)(z zt9PV#N>SvStapM}Vo-peQNXd){Eho^k^`|)d{0h4-G zpBp6O($M3EFdrjvX?8(C&TD##w+9YLTg4EQQ{WaN##jV>{3m&3PD6F`5A!9`-pfxt zw&g}Q*E_Dql9XQbAfmViu#WF%adxC7fG>J5Y);(W8Z9QSOq4m{Wtuw2_;>pJ5JhD5 zxdQ++=R^n)X+hN-lkc`g-t}(te->l=iFFJn?X1RxeXJ)*O zA;&BZ-hSQWzeY z)6Ef1obLKQRqwydofNJ&wHoTFo(!P(CYDywVN|>4aI3sM{z4}Z_Z$dOlJY+*N};LY z>ZVw@TK?{x@dxTN+{@K1`Wl|h&p9S!$`Mx&11|plqJFA{sB)ms_#sSLL=6~|Iu6aE z@G+5kwY|`6i&FC|+LS1>t4pg!wKi88RZaWi39P{5>s^=a44r{;nnu{b7fE?-Bg1oN zMXu(RC5;ww+J|`a*ambYt2L2?=z2s8jX5fDb|meCb}EpcC5}}1_4H6FI-vK1V11LP zwbWe5iI$Y58VkN{%b&!qzC5-+4?2b!&pPr?FJ$9^5z)ksHw}lSEV{?MADCQ?4M`>w zMn&oEG(&JOk= zrWbW&)iN%A$40=E!ar1l<4X1q4e4t5%k-tc4}w&yG>yaZ7y~!i^L;meNn1F)%|koH zAGTYCfB~*}jcJv9P-+=D8{KHfJCb^x?lqDohmMrb!Vjs_uGNJp0J%YqHrnW@>dQH&KYeYp{q9w9IeUcgxS*os71avD3{px`*HpadX-NyHydFC1I zggbji4DAg_Bcs2cJ>$f3QDoM1<+}O($;V=&cPbD)>lP^@-`BcNQl^`vY~WUoD5UY^ zKk(p2M!a<{H+15$07ZI=O6XScFtK^msfli;A>DKloePhg)s%N{-`Fvy#v2>UCN6Y{q3=%L@f}*wd02{ z)xV`5Sf{k(b4Fpr!#&Mo_7QzL=NPj)8&+N>woJ40_S(G8LnuzLs|@BtFMeep|1zFIDwy7ATXUBY&w+xFcDdw5?;8 z9@$0~R$vdNo6-;`==1M?r+xzAVO0L#*!+lkd^(suu9zd+eFOfR0wcbSxBs0^#g8JM zPWyd-{7t+eGNfYU(i$x~cJsOCa)OabTHiLY=nO1k91?vJP+&DTI4Y8=Xa%dpeweq> zV7u?wfNjhQYLuCs%5sMewNcqdL$Y07*2d)E}IDq(*UJeLj9$y|puUH7o5{gy7bL6xgO=dzN1~@evwn=`kcRAF7#a z&&_Bjgskl=39j+(_;Zb;SiUU073(RNuztlb0(8UQBK^_>twJc5q^eOLj5WO-1q*81 zMHplb!hh#>mzpd1yhJ_cOUo4nhea+)brl9=jAHs4X>E}7bp#`pQ9sQWI7wyGB=1L5 z*3jzRSrCsa9C=d2!VvtDvl?;SoT7K+orEXhu2z@1jyAYj3BOavlj4t_ASdy?vC+Tq z(oZy5`kfdIG<-aGhGuN^(cU!HnU^$H#O61~55jnV@}4?u%{L-bkk*Dn(C9X_pU#{) zqmQ$XKB^^Zg+8G#$W&?a>{1$a*G8%cfQoS9>SDrU=;IimFEmHnpI68fz(~~L#Tgsf zak;(Vw4pbL$C&Lk-d2?JG@XZARg$X0A4P;U3pdaS5j7a8C^z3+>xvw6WXIu}6P5pj zk#G`Yq6dmSE%u}ugSy5(Z;rN{wz9wPF=GkDNv0m*7lD4zw1E$cw2}DgwmK?VZ31PZ znUiDUtM7lCTfG-n_{2BfN8aL63R{F|aJ8ykv5iCaD?2oZlUB1_iOt4>dhN`&TWhf@ znqDv@{TN%nNW~gEux)*8wpTU54i*|fJ{ra7hT0-U*}Ix6XZyOZ|42|Q(%k-fb;6+Rtj_aoOCZdasTu1)O@fdYzJ|H9MYlCW@uT zvuX$RJV6Ao6w4GO=CnLBb56oN0k@^qj3FZ>$Q}D(w@c1B%_5|6>LaMDh|@{lL^{or zFSOuiXAG}AK<{D2)!_mOdBX&;=}5Qh#|}eUXkpjvs{Q9@9(&$GW!J0ljJ3jP=&27p zTCjGb%+R)bu1$EWHg>mUxlLNmXX2AciTA!HvQ?uWw||&nzuos1AEnwhI2^I#{2ulTRO)K!O2r)@cP90Dfu4~`6Q?$Pq=IGZW_^Ngm zDt1YOqK?^Cuw79+Bo5E$O4By8*o>mcLUT=ObXaBLG|x?{Bjg|hT?Z%DJkR|^pBA3Y zy|i@b^5B7Le49Bo;HF=ke5=78QcJVi-M@NDb2>t(PBVMwX^|e6iNmKK ze?k?it#YdOp(U#nO6+UpuJE4At1k}GyE z63zRD9^b7*(vl0l@8sJDjyxY6+a`nnSV;l6r2+yZN^r%0J$_TY<5fzt6p=)~J8|&H z+1Y!VU#;FREY^|;9;aFItw5!R)Y>wyl6U0>rRpZ2=#;Dp?f zrzB@qEM|IgG4fQZ8*K2l&~pn`0otdbb4Bw2Ng={w1k)@6es@yYT@QLzMwc3Mn)UWb z&vO}#GILmX0dxW<=~NTY_}n#Ll)svF@vPp+CJ*H5Z@&Mn<}$wjt8?n4n1mmQfXEk< z(n%W4=16^peJ@Rc<$h#J)_+B-p$c{OFRV`pp-%vNb7hlxJ7hZTm&&O~Ej=Sf|9#}f3iXqyc zMYNJTBB>NXgs^}0bh$!Ov{o*4)IRL|os$RZ7=VI4R-tjdTVx*19e6~=ClfC`_IWyh z*sXUhW`;eITnC~fSM0QDFClkI|D&vb;GnU6Gft~jHy2Rj~NYtMPw9(!JUU~zq= z=q&n<(#@XOs$~1y4_w-y@+)*+NvCu zy|Q*WYJh*i?X<{fmTGTpwW>x?SW>TwC`l1j>jfXJ)yQ>>`T7aVS-`Xnnqg#F7g^e?u453svj{O$7gX!b?Tl6D!T2l91|@xx-$M(73li<# z9%!^9^U9^>GI<}=D7dms8>2eI?PD%q_t?M!>YHvvTGiu`c=7BR`Q@h0h=u-kud2R_ zu{!s9F;`XCoD$}wmTubMN->nWitb-MtVh<24a8iAh@T34bAmAyCE>Zgi*ZW5DXJ0x zpQJ)aiY&%jM{uGfHB8}1MOf_4+^DN^5l0ffk0Zgii0u4y{Na!PD{cW+74Ico$w@SbDgdyoa7Z+ zV}5Pj8{(buhx*LAr=RK#5??>aL57t>jTh;7V51@Trb{Yo3(G)&@+t^Yqs~py%)0O#xcs@1`y0_OX8jSBJ&8YGwrk}C+tuS z7V)i$n%)T9e&3}JCeorI8IM!Cvc(6(IFWK6((B^4Q~GfI}#-^6Zi+NFY8`{57PJxigJp2(x@nd-n(n@g*qRD zk%f!hglIsTH#3zLx?auX(e@E+)M5cEyrXYn3^=sadg{Z}%(qCUu9aA8uXa~+B_~Pq z5Y6-~_uafm6X~BYDe3DZQ;hGtz_k0?Si=q_&avrC8dGQ*DqxOtxxYUW|1034Fq&#z zhWo>n|4&$rrgxQOm+E~fk{}XbTb++seGL`MIlt>guu`_44jgDhzFAWTCmO&25n+Fn zp%m*-@otj>MHv?pxGc~5xoeN9n;x2)b~Xwm#hz25=cYPzFq>k~aw&6`ErDkn znv=i_!$Plp5RF&NFPwuZAI7s$1v48*Z#NBeHxbKlh5?}(~)Y; zLmu36`iiG6=@GY|2}r42!6eUxHTN(c<;<(n)yDs z*5Jt6g5hN;ATvDx$gCLYv>#ZBiXN;2PS|vNA?T5ORnseSr~Nr#k2bKyiN@!zsSCCR zMI&nMGT2eBYnzZ*dokE@)%AJQ+qNXKlxYJf#E>krc%vYgC|a)fso0Q1D4L8pONr6S z^L62`w8Z85))(%8rB-&dH4*YE^1$0lFnM+}Ids|>y<0mXeA&-Oq_oUuky1&wB|5AO z_XC8S-IaJKt~52)=`5+S(DveO8_BTM7W|V|2DW{DV5}XI?4fI$2G~68b|k#}GYKZ* zCYjPNJ?H-tp{agGBSB^*q$p>FE4-vI)l^_VKSY%T9_H3yi_A8;q*o#^sTtteWD$g< z1T-|=Ot-9G&H*A#%7Gixu53EZ8#RsskDMb@GEyxFHJAW~*t0pl|7<4a15<`C&^C?j z;T;VNFm*U7Y1xJqyt|q$r)yFGPsgnZSI!^N!%1!By9;LW>B&d>Ie2T>z^!Nnge=ST zaUpYdlHZarGJWab3#{ivI6!3R(Ga>6Mc1apnEVC*vrA&ovu^;|FAe|Xh(3kxXcRR< z7tlO%-A$oZwGqOZFsjTerCycBa1~;U?j_G_2JUgC_Y57n?aPuQFxoR7b!l~_f=Y&4 z0<>9d4ciNl;a<}$e>(lA??~ZADbl&8`c++}96TP9r&ndEOhnTnLlczIw{GxSFZ|%< zK#MmuJLipuTJ$EA_EkYxOt)=S0c897d{?cu_TzMm50F(~Kfr*$8h@&3;9!51=(unE zYh-wNJI~P3sMLPi9$9q7`t-&4Lp_g(Q0cIdd9}*oBr}CZaq-M!O0HE5m(ysd^7+f0 z_0%?2{~->Z59;dTVyEee5(erIj)w+OlvukA-rT#nHOQc` zlAVl0`(e6C5Q=VB18ZDS&)n08J;$;SoJf&v?~NF@?Z{TN~Ar#f++S(DFh<=hxHcIfKBaaz4>gg^D2=f zwsc!&o~;50q5nskeYBP)q_bx*@2IPA{6`)WomC=JR$S>g@_yI(>wb6gsrdW)e!vm} zzL+B`#m2ffgCSJqD(!^&U`Tb^n5BSf1zbW14X!5TNiaExsDJEEQj&40Wkot zHHt_*+{*ZCknz5x%hCA~7WCQ4+nPmq@k`zaot4Y|JNer*p|gnivsv{LK#*k{go~<~ zJS$=^-}Fg;Go|70{_gv~v!fzP+E_QbWvKz73P`~Gb<%mLGj=-RZX!!N>^ItM5mFw3 zV(N|TL#`+M=tW0-kO?X$1&fF%1+|A&xZ%|3#Y&GW!R{lJ-{ul91a&|`BC~@b8KHD1 zmV9enC(HT8(Qtol;_b96j9SN8sEWO`J3{^QRdjad=OXjIE0QPVdk{r7H3)(YeUdxL za<_)Zhd4wc~)KBrMZvqqu^9t z)*{!DS6IKJIS{a;mm|kA;-lyv);_BPQH7ArozO9ah0(SijnrQ@=piBN?{iD5^G}OX zoe63+W&OzZth0$GBBDS9Oq$2$C4&e-(PTL=zLnyl=LX9PyTqI6xf{a`FX|jdE(=BY z&TI5|IE#$bERk5Di{`OvBfYa=ZVP>&9zY;@(8M+0099K2j-L9JX@Khq96`qAvlZXg zoKb^{u&$$00=R?W=hnbB0v$vz7Fts!49GIUT+0we?6W=t#Ug4cg>_6N=595@Fuh~R zwLFa93f`WRt77iZN^Ef=ouY=dpDTKH=5dXXE$Q?)QHxUBj|HTeY=5EE(Ow*2*ygAw zeI|ik`F-NplcI|;j6lS~ebwps{*#7091p#K7oU3Q@y9g)6a-Ap{zlyT_>Y=OKa)tE zoq0;*3fl(T!4K_uVv(~trvgYM2h#L`*u$Gz5wx59&L*zd0!6aVfc3WzSuRPt+5slb|k}^?E0?xeT=dKzA7778p zz?U@0ktfvJ&s?t@E@kh}dH!j7T@-TB6OUdnEDgZcpd9N&_Sbi`)F^8Gh1x>9x86Os zJKWH~alm9gim*lu^JZ)91G1VVJlOv~adh3VgmiSf zcOdmGZlUDC^#s$sJbpRzIS^yLf|jGlx>Z`1 z%ct%~T$Dj0jhtB3nmhyR1zpsulBWiAOw5X+|?jteRj(0rxJoVKb zj&hJI>&tT)jCyOhTe!05^WFb7uB~sj+}lM}7j4iuA=evPvbACA zW3P|FsH(^IH2=9a|Fc)Kh4mx+OJdGQN0T%{#*8f$xEPz+XT`RU7TO`|!@Mx*DjIHreZVYL7w#8LWp`kQ6Z z^)OVgO2|iYpU>3uC5MFGxf8RH93bJ6*6h;B^suZD-SZ!;k1|t+N<8hp##_Tj@t~$!7W`u zTHL-XsF<@;gtg%xbMrTUoG|NZYoU8t5b#CS{y&D(+P=1eUX#^)z(2O~hoJ zyf3XOgfgF8U&H-T7XNJ zavG7wA@pVKD%QblpuZK~Pb~wKdv*Lk&&`~FX-1!UXH(tW?3tq2knUh7((%S4@y__= z2pkw2eub~%{qKJ(vSC1t!jWoiME#D$@z zLQNfZdTxF2f2S)u!eUakSV_yw(hy6ogDjRCwwWLVexRPd`}?sYj-;MX?;^Wr55ic!3_7*yQvr zHd|5@r+@<|+Ob_Vo3IRqZ8!PSYG8?KlSub^jYpn2uie!-_60Yo)upcSj;*ATADua3 z)4tGayBpTNyX53wZ(D*v-8`H76)~&$at()n(?if0aYkq*@w z5(W=y_n=qx>Ku+}Jltd8Pc^aLd_KB4bcbzF%u(#Jv_XdMbjXC6C^1_6yKaj6j% z+58jYf!f|?SbUwm- z-32zJQ_(1OQ3O0*W^kbT;ErmegG(lBwUl5|2xfT&5k*gym9#t*&cd+TA&zTPEHxKx zOY5#K7!w1-rff>iZ=xpG{`_K6JhT^sM4f5O=f)r-iqGFL5^0MvaL}y!PBdK)D@tN| z;HY1WKeiNKa}S|OQGgIBt>J*BG+JJLoUQY7Z+NFs?H((H_#%hCY*vlAgZ_|J zfVtrYhZa_@&7RlL_P532u-6T@(n-?952hK9fS4Gp_+yi3NaQ-6MNKLy()b@Wlt64J zcfvN3xMqw|c`nEIfBy3vO{3n(&63hmy9Xd~ZxX$r*>fY5Y-XC)UC(uYXyZT&gObL? z{=eK@(d&@sl@%LHpL{&lhsiJuauSq=5xu1)8k)76*>_rkqje!~z z$Ol^G&0VW#R1Vj1f}J>76t@MH&tbayapvB&$MpK#YFD%?n5h)~Ii3h_nrcY*HH5x% z*NE5xuP-saY6<2{Jzo>zwv}>9usd@Bq?{Io(`%Pt9+iE*wX(KuGu6yRBb^qOMTyn* zZuQ883uiRLOYlcM#O3(O$p_j4AqWGfBzQA#0bsRpmhunafiVesf`K8Lq&Cswv?EJ} zJ0K0>_)8HABnTMYT^mcTJ+J9?IlyojeI-0LggUi?%Jd(`FXtF=U`2>){=9{Lss7m< z={|pqf9gG$+8qKWwY<+=GyfqGWyAZpIKZuSPof>wcNpsqkrNGZAo~1|IgY^N>)T}@ zJN4n%?$?*{__LFbbh3V0!P6*Io!8+~v!hw{L#Wco=etXq6dS(3x3OzYFoZsoXKwO( zRl^UI`t=&68C&xjXUVLcn7qhx^cEccy)14?aWFkRz8@*c^$pfr#WNh;BuBG$8QCZ+ zt%w>Cfe_G-E34h6CJ+O@L0pX{3e!FCmC*|CwcY~7Q8~Fc4@TN8-(?sdl0`jb;Z4EF1tn5Q$MQ5pMOZ3p_qs3qNqCP+LDjo*g)00C^iYY`$XR zDuTcJZX;m6&&wuH(XhExJP+1k)i+R>3?^n6*GE1Z_qPTgS=h8W0flS01PfG_>hJ!y zRR0h!`?V7q1ccTFKpI=!5_Rt=a#w|acGas-lwBT%?Zj0~(c)@}PKLV~IgAi#k9NC> zzGc4}C#Zk;SAR-L{_srcmHtm zK=dQr2=`nbCkDpI9|~aUvotd-vJaX(6kXgGE{3o;dhW< zns;^eshwjp3rDE@U-sAOny;caemj0mM~H}gQHA)eztTO?um!we zc&d@No4-`E9JmY%+S>NUEcH5ky3fo$c2;jRb`P#s5!I6fdO7nW@Q4gfT?M~!Tp)Q8xJO>_d-a@5B|NAZ9YpyOt)A!r)^$cOvYfz`S$S?s~Tro%CDXoutP&ICYP0-N1h}%%8)c%IiLcZ;Zb_`AB<# zo3%i1z2Bk;n}!W~?uK6@weQKt`lSPl)Xsmz+c0@`OL+3Ww-U)Q_e$>j`E?nK1cgxZZN{l1KUoH~0@(dbzk-av{R{c2Jd52I&e8 z@@@@i9qdJnBwCQjgTXds!>i=X(Abu}i*Y2OgQ|ZPvdTs{*E2`DO3hd+6A|%~=)eH) zkKYlQV}@ZF(ph{yxnY>O#@1Z1tJHV;5|Wlifp(QSLjX06ol3l4Wmnn)yO6{m>|?bW zR3h^5po$yY0UTQ01v5`MGz7Aq3QvUs;AwSqsL&UOT3;iN7?b&lE-DgYW-Vzuc}A2m~vKg#>FJ+j&mE zby|b@(c#ahoBZK_xb0Luu0mz9$jnfqqiJlIN+UgD;DVj;gdc@K*uX=p?iREWDa z)2s~-Mh6;gcwRBI?H`9J*P<`w9%e?wZLOwpu@+8biDF5IHl5erZHI86X_RS3I2 z_hbk9OryMzuw*Fq2dxFdP?g)7Aat-Rxg1mMoX+9T9@D3rUcSo%tJtJ*Fc_Y+(K=zI z0BCB~0e-0TsD<>5G|`8AJrSf|*`-*nkekc`=QF8x7!6Jw0M<4T1{DHcBI1Uj%uI$= z23n{2Z}&FHfFL4KCRjhPT3?*J>TmC&Qhcfzp}|-^VQG*i4b|I0kUD62oA8_3=62Eh zgu%KPJNRw#KvlxT^%5OrZGmipvJJrG0s|Zt($Fzn&?iy>kH6L?fK^2nK`XPIntdwj zlrySlXd&E!RUXN;cF9Mp5pH4Y(pn$c{ZCy|?=?0KcGFMHVb{szs;RCXxcBeky7^@C zUp0Oii$L4}0)(rtctDM}w7tll3^c7mBd*$nktWwr(0aEQ(-_j;j_w+TDzv$5BoTljk7Qc#d9fM=w-PgelsA05V!)g`c%%7{d~ z^j;-02~ew@8h%%kxUih+w4k2oxiG`{76ob(6~5GANtE-Jh&_kRLo3-{7NIyFkwZzZ zkerH8a=pTBVl4!#@b!Kbc`{856NW)uUWk-1s?gqTt0~_zm_& z#SHZv8j!|>Uj0c8vn2&P8icj4rPfN8H71(OCmNla&8z*jIo#Q&E`tvw#&OXAWd#=7 zZ%bPJG3Mu=m0Kmh{^|c;W8mi57?Lzd(~jHv6yAEBY4-q&jX~o}uY*+%$CdSt*pF@8Rf-v}#&n zjQNCZa#p@LdEE>5`uM@g%ld|DNrG7ImuZOWAsLf3lNQ--y!9gJNL-|`yj0<_ezZE8 z$=ZrOy*N;taI*{rfJ6JXI>@|6QPUS+p?aGeIZ*XVOGM`|M`~fsWfH5TZ#`IjMyc{> zQLdAg+kg@xx4(vW-KoC_*#p zMq$Ulw>mt@praiZf^DegRzKi%M|K$o*o*C{N#h1SynB%6@J+7R_q735K_~`DL8E~& zo;5qWmED&93c@OmzSJ~R!8inOm^BAQ*l1b8P=WF=BAnMu~IfY%*n zb-=$nd0B0-|102rk)OTWxjCBJvJsc#0N#mLtV-%eniHyQV=&cby5@MOFm?2f1MsN@ zgt>eDKcc1%#x5ylVmwQ9{)ivtb<6b7M1i*K0m!Z^V!Mv*1=v&JX@|7 zHU5?w-KI$K+_mSf>3OW1@CELzES)ggJ*p_PWz`&;GG>5sJBwIslB_I6ya4imw>C0t z#$>K;R?O{qh;NwH9>+&yrmTBpaJNODXQQ8VJ(jmfvhl45Mg^)P>B?L`CB^UrT&w3H z>8*h|&?7IX=XO7nk#UQiSTUhLQjO|$)XulR|DDJhd^N;%F&*y2@N;V&!XiD{85-Yh zFacTvZk?lBBFgNwZlYSYXGL>d0R$gb3K`lI8_25(Q1S&0 zdXg__DTjsUR$mA=Z?-j@VCcm$X!eQzM8LHshp_vxUYrkmvxXXW=Zw1``6gx@OJ|6Y z7{RkJEG8g~NXLC=hOG=FwWOxg9C=l?MpYgcHgS3dyMqIxpUL{OkIDl~EaTHjjhd!A zL`QrvT9Qla|AYAHk9<)nD{I2=gBn9vhwsEx^@5xcPm$2zNz# z6;WYgwi)#66sd)Sg>yb{BiPtPLeh#sTM~%CnthLQ&-4-TM7;HV7y-6Ua{xS(HUl7c zL=56ZQQ)9@3NYZ*f|G19W!N>>UdH(6ockaHZB?^_{bds@tq#9AjRAcyZ{6#Vv7MlTaWRRCy4W>sz?vjdzPLqTyS-pYv(koF!1l2 znO*iQi|$dIc)2U!koMVKIvi|Wfjeli!<68jc1Io$<(Z*}=tDse66IX?<$31(87=Z9 z>!4c>)-5Yx^Vs0fmX^*Wai5xvoe430RwAzhu#qGkRUtB|1||_CQrL;Qo_#^P407%f-H#y{Ygbo`L3Z5VbJsYb+9J1e&ciWd-L5a{o8^r>T%(*o2D8dd@r-pygX; zfKOet^BwVE--iOmeVpc=07M*L*Q&B)CFP@*>9TDsKP_b!^RBL<@IjG6;k6wPVe933D_^}fJy z0Jzcj1UJq>T`22v;+q5F{)%Y3*zRcVH=N_`p&50H%^LunVh$;w6p(f-I8g>5QQZMK~ z`_Ct*A!UL8e}2+FBi)f0U>FC1`bNH|6x8Eff0An)Zt6obFjVh+@(pq~zNVEZ5?dZR zL~fX_Q+yN&6w`oTjx4c5+Xac**6_d-YHu9&!^Oj3C_tZR{ljWL@}Y|Uy20La>j4ps7#AXuwE_P`SUO6)rED@c?qYg*PI*jIwOug2k5l*C0_X;*12DFRG>FaOTXe4cY5RrhrF^q4cM&P4wI zcRlyqvpnY<4E*6l$>Y%2?x3=(N!ZVnRxJl2{6ZX^m)`kt97rcAwcvcB*Nb~$xL`u_^LG}2J`-z40#cTQWjqWW}8*7%t`T3a%Y&8b=fPf_$XsTG7;-&n z$Q#6I>EZBJL+iVh*ocH-8jH~W!LBN5ID_&mL47T*WwnS)^SC>=Md@jz+`t=K5uvCr2Y1g5HNw|f58Qg{3^ZZiX>@0-X8iIA%_=Y>dU$|T-j7pnT`GI0r@8jKI})N9ZZOI)=cMK~ zLWd^K8;;ev?JU|^|_?G}QESd&8}et&o`TY!^| zJ@y*PZ_jCj1Jcg0lGawh>*qHd6jj7Mo*f^e;T;k%tApkd!go#)nF}zS zeq^})?fh}7IQP{>l=w`H92dUJvV8vU!@EmTvoa*L@B?{MbBDVJ*DomzQ;(>rl_}~?^6+gN=%0qI^+>JlNRSv1_%_L zyK40A@u!;G)Vk|I2PkiZ7}Qw9RHWV*D>7i7d;HBTs2hEM_@^qh{(HlZhxgUW@XpVj zFR!z|>T*si0PWURNiJm>8ReAwOKn2gRY*2m#WckII&j(DmEJ*RCPIb4#p5_iR4GGe zF9iauPLc;}FJZ5~DdI{4GUHj5#9Ou^;HkoY6i7cU-q}-UG|8#?%-C>+tYJxtWW9`c zv@NqX)m&=LnJOOs$K#Ln3cB8?K7?Mmc-6#JYFgkEe{*R3Nw_-dz$#dp_Dr6dib6WQ zJx?f%bt4dvmb?&(4;4S+V%Cuei@#S2_H-ig84`3!H(kl)rObs!LR4N4$+6;$Biy7q z4trpoz<|X3TG{FTk&U8HPrT?iq5|~;4G!;I@46NcGxRp8mNJJ9YGkDck@8;~2trov zjid=R5h=L_I6pj}s5ix8Xd}u^8Gu-1Z>?_U5Kq#!$v03!8NC(8`wV8DqPX{o;!WXA za$g+ehkus{tFaW29Z?&ketVrbQySBHkwV&7tO!ci1kug$>1(hdq7pf)^_vaJEk!vX z%v>ZDrB5{$^e6#X^K;@^;Zs24A|hJdBf*(~x~qX&)r*TDlw7uT>f$AJhiW!PC7WM! zf7}fLTd!i(Y)|X?So`q?YrFVU1O;x{j2ZZKtePUf=GY&n*^fhBLM8U&8}eWf zk>#-13iRykP21cKJ6kvOUO5n2YBswH;F`{?2aL0JtYYs?CrH>vyW5%(n?8!YQk!rx zm~+w}Q4tX#fU8=d{k?J->M@@r)_~GSX~i$7stR*-;0Kv-I3%=Z(^Wk}958S%QQY#ZRpX-4Iy-no zVvS{Oty=ibLf6s?|0;b8=t|}=5KkOAO%WOXKM!60xzfkr*h^@v8p%rEoCObrp$}Yx z4*uQlU+-nJn>ZYE51Qi=BO2V`H7!~I$t&4{@>bm}(tF{8Eeog4yeJ}zBX54e;RtcW z6ga%|s|z-gwtG$`uo@oxM6;vrf0ONzXevkEKvK_dSIK#zML1fwZ6cDbkCNqR7s))? z)@L%s`UGL`Gs1_f62PCDyZ!o0+0Sex@KEk#D_I^M;$mB}=zQ^6^+TpYXOOshS$}OU z%@|?|>yMxm5ee$Utq7~u5N5Jw9Wob%HS|OGrVYw*f~-Y>uI#S+q5UfShyoWG1Au84 zsXKdJD&mC(c(t|U!JeKtdrk}nD+F#rEWD zBdB|RzgiHBNuA30r-qk{$5PL88-2-te^Eyek_U+L@zwA>wS*v4#ORFjB8P;#$hztlu(lE06j>js&IrLL>z1$Au^zYMuhIOtE26$bd$sd zNZA$cA-g{tt=a60a7=h~&SuvN;#Av*eg;sW#=byea|3m-pnOG4)H}y-4!@o<`sC^V z)_)of$cD;G8M!7zk2s+SuL{$O<{bvoDjUS?54EiE?Y+6k2@7HLAt zLL$-QIMRLS2Rp&>HDSg~uKj9C^o)&HR73b!ic-5FK}g@a!XBhmKoVTtc4P?o zU;lV~PvZz+wwlHVUK#K2X0-Du{C~N`;pg153xA3uhI*l&iLi|Hz}4{Sog~icZ@mJ6 z1$7{d=v9PrqJUDPq^V?*Bm;Cx54gj;!@Up9{6a!rQ&M?SwAKIAJ+-lBb7M;SZ8jy! zeQL47x>QF&%#nZQ-;WO@cf_B`CHl|)Uo9+g_*dt2A+Gf7ECEBS6Xd-Y&F|DbtL+FhEihsiX9)cQeM4L zXZWiTa6|LxY#~^9%At<(pOY+Nc4<2yd~?xO9r8weq!x%^$9Rx1IBd#?jw^fpNp;Tq?;dA<+_#TEKX%k4 z85w-7ML1_R9t_P_F*ozRZ$^NG8rn9*s-gAQEZFXEt?LQY_e=UbiLqMSxroS)tXJV8 zw+RVTTer3yI5Cae3%i1E9nwze|EaAK@f?1BEhXOc1Qr*<@lTUYY;SqG+T%nt`iqig zCH5&+Z}`2aA7$xH{xge(%~>1H$N`NbLUnC7!dF6yd1&N~;df%|PrLHRrG=Jj!H=u| z)kc_8XR3^?+g4AoKYus0V0salmj(*=DTXn9kNdF>xZ-w8I_FONUcd?|Nay?haaU0pnO%vwGc#VkYws9s$Mlnh*T{Vl>h|m<{-pMl1vzi&@{4_``6t5ZvhG~Z)TAJ0`fsMw!U5nHR z(Hsmt)0*-@T>y4pSuLiP7qxCpi|^PW2KIuq0c~y!*sqr{!VKjAwJX1tcLvnRO$yJKP+=;)4Y59J*sJ78NU(%jM6MGS*(eY=K2j% z!Bm`H+!bF%RLJB)*KoKOv0-V8gSYwyXBFNaKEO`?!SPpmprk_8_%^Ck5J2BWpieG%_rT4GT!Ed2%>}are84ov2x?9@pzY7!r~q_F#3> z(3Yka^x*DI5fPg3@AVnk$4(xs3VlcOO}8%U&0o1}2%w#neigeqGe6mw$(cc%q9T}8 zgnCtGr8ty$K=d?`dAX`k{9lHjL;dd!Khy)DT3>QXvtp_xDUg1=6nW{BzzI1c7p^AV z*g24lBtU9O2B?>5tcvoBNb1kCDbOysv-N0i4* zR4zHdK4>!-M=TBuMrl}+R$z}{uGSs<-r6Ap7#7Z&g?~|(gDETvbBpGUesR$E6?zf# zsD2rFgS5yu2-3`7A{<}e_NgM2NZ_DQv5q=3ZF?Gt zM>sIZuYIs>-Weilgjie2i~tx7C$LOgzWO;I-_;rXTO{Nr`*S`F2VD})UTV(OIhB|2 zBa5!cgADa%E&1V{$b^#3aE008h((dxEPo@!*lsRPkWA*)YCGfyBMFyWdamZ+pt|y0_T7eLz zsnVc6Z`{;|5$Ba&r;3cBhb0YQi-MqeqqQ*y8*_?!5$5^y2SA6BT<)zrU%|JqGFe6| zsa4edAq=82s)b_0+ketHPd}wks}-shv)w4?rdr`pY`eNf#E@AUBaLRDtF^*UpR(i+ za<*4_BG`9A5i1@!yz^W;_>ATEUcb7ROR$302cfchuD@xg-0;rx+s3W`68yg2ARv%6 z%QeDjRIDdCp}90$Q!v2NI$N5iOz6Z2Y&gJGkJo!e2Z1C@HRS1vbsLUQ z6m%ACb5q81rXkKO>_+1bcU6LkPhGIFa;am#YG6;*8WIa@m`XwW1=|6!*K4+ofIN$$ zAHIM5iGIL6)p3l?)32Y>WWxFiU)L*?2QV|{9{*zawtgXq%=i=NFsz)_BFQP@po>-* zP>YAuo&oS~hoFts^I&%kinY}WD_Yit?*`6PE5+U{HGG1?nB3bIEnl}UWqexRtk-J| z=}v>>?)_+ZuT%keTSMTwiF)SQ5mx$2h5h-9dhiFiwJ<|`pQ#)J*P$jzMF;RtYxXpb zUwyvHJ)qBkjBGJP)vG)MlLG@5!@U5C33j2$E?6}#p1efrttFgbs$uxoQp;Y3-#n3= zZ9gu-EDadl6c?JFnB?Avj5^LG^0Oy2fGG#_L=p5_dWz&Hdg`_dG`(tD9pW;vg>Usm zj;wpy7{UbNM4ls`XIk5U{iB`S3S^^RZVX73py7@&TA8YZV%|&14j|PNbr>3k3nNuw zkB*oXv9!~9uMEgp+_9ngas~RB;ZhS>6u|syZ8ZGo_!}+5n%N!6bG7q;=qyA${rc&Q zF}?rj4_OuL8EnqkN11{M3}!iaOdTadq>YD%M^S><1h5g(-W3HFkGO7tDkT`Mu`_~&h~y5d|t`xBaHQfEwAc!r$X5+wo#2ezxkY!4pa)$|;9!QT-o|5{an2Fd04i9hcNcnfi?SKa^~kU)Li2 z=Df}=?txUTMh*o1#EqGp0ra-$VR^@U&iQeAjoW9=YJvr6Wi{zj3LD#PLBGtkM=F#2fAc#f;vk^O5rU@2il7W3YqP@V)3-NpwsX|m9yrn! zRPUFXD&~w`OZ|*@UGTa|$ms6gPE;rRHgXAR!hk(&2PV$bwz9=(tuvWv^e~Aqujuoy z`~B@?sR04lJGhA1rBb#F3@cg1WcT1H9jyO`3`XJ#Ve1{;7rsq{6_2CjwKI`U7lXRK zwwsGlXkBy(k${>8?z5SUgpK=*|DrhQ$J)TFhBRPjs5F>~Qxle=x9q7w1RdD^5VdiV z)Fam7M7op)iA}V5L6lqS@`=+Lb9YosTu-frLr%XnM%fq@MogR`yd-WnV2{W~zQ|Y7 zMX(fLi^{`reGn$WBj25)Bw!|ln;zb+UU$o~VO$ub>lJ}=w|#T`jYwv8c}B;L=Qu|j z9UTDg3oB~O8EQ5R@x{sGTcRnG;1LPXmp8q}N< z=c?U!^Lra8{v#A(t|}UQh@ojTi{XU@Se>r)I&M1%HoZMfE6V%3Mp%=T)0BdiayP>u zSln*bfS?cc&>rWLiL`juCdJN;HDbd(L46?altKNISGW?!U@{dl>}4 zOjF7A{;?!Zxh4d_j-u5>v61#TaaU86Zq+a0D&DIYG1qD2^UAhLroqg^i!rt}l`e%R~)Vq-7>l-Mj+?@{o~TJ{8K@}g4@T;`+C$O0v7yNawU#?1 zm#VmSeV??OQyL`p#1D@@6~8a1E5ZQ)pNaN&NzXP)Mw%2D3AAE%zL_zh2e{F#0!2zU zYQsx{stKFcQ&>x>u_PKQ+$XtIXY1B$)<+JVUj=rf*TeYQsf^6yRK`B{tlz5E=S1Y; z)ckbQq}*98DI|Pj-gdZWpu3U>Zube8)Ydc>FSYeKsvPMvw_FwcxQ`1=vx`h8sGyP$ zF3)IhcKan;N(F-{xwxu>haJd%laP^e8%k-k$Y`%#W=TSakwwEAR!5) z*A#1mRsv5}3BS|#xWxF+>Jt(4spFEyusf++`A7NSf27|1SDwhR-NbYtq6u|x`^rDR zlYfO+tRov<3hKsXbPEOszzS=`S42I9zn}v?G=#Z4G;;ayPJn#l=0S&apobBpXpPMlV@1>Vt`h^y*k-?>iY4!#L_Xk)|xitd07q~1P zUT$L2(9|wDOktQwHTuC;Wj%Rr5HN}?JBDE%p+PGY*(BSE%p<8_#*@QUBB!CTBSp(4 z32TqzsrN@t660w|%-y&@9BkY9 z$esFOVjV)j%32qQx<1w|F2%9+L+jnUVLVMqtI_=*M7CksbT~qM()38Y9g(X#1;abf zP|H<60)@kIzA?4e&-gvA7FJK=JbmVj-BD9B zO>JP9n;bwqyWvh@Pq+48HDnZjMY`SAZ)j*7?#*tJ9g@fi$P!DwVJQm#pP}+xCShLC zlyGg4LRh@xVucQ*AhaHe#6lS&@zO8i2x=D1*@dMSL?4)vw3H~Z`zKwCBdlGb8 zq^q_7>b4v~cC>GbB^4f+RLOR}6ObOY#Duw;!934Djhvb+M69ZPcv8pO8OMFQ;{4c1 z(jSFxnTHM==#pqK*fv7MK}BK2gVbQo5gtwpa_*GlI!xZp=$v>yvqIRxtl#t@wTtP&CC~7>kOEAuH z#M@hVnC-3ZnIM9z{?H$A!M7BdEV4KFey6H*g;O8|ncRyxcyoqhc2+ws9Cp)327oj$ zpWK6SenP7}k&B7+g4*jd6OJRl=?E3<+x=DRjZFLF^yHBjr_>@&n%lpDwzy|?8!}b~ z#p-4mVNm19sptKUKVG}$Bu$)}UQz;i^gl%Sdyw&ZkQCklwb7cfUKrxU9yLI7TQ>|DXu)LD#fh@?)RRd;~Ezs#8cFQg)rPj#V!4E&&m3;#sS3@Gw5sv&5|u9JuV z@aXqB5YpA55op%kE$;@UXY@9X$7eOv_EH4ysvGo=C}^ya&pH%nDs0K>Wqj>_sRfBW zU<3D(T`rbHc2Id0{u>tkHR~Q&;o>az zry4;M*PnsAIyixo^#{ zw|dqVKf>~cH~3+w%A2o9SIS;3avbeAO$fwKW~2{glErO@K%H=v63)>gyC27 z2>VEH%RdKf2GQ8MZkXndzZVMyiPMIu>=y0$tGjc|!R>Bcb>IP{CAPL85Z*E<$gueX=g#rcI{L|;ptBvVOKt27k zGkgbxQ1s5>*sZ>>qiW||Vsaqu6HYY{%36Zy<*B9Qx~?3*W%TBY&MOwU7IwO_AqV_j z19^Jlsb4*mxWtf9?MKBFJQa(#%b*zt9E0>g$-oluS=gRqJf%mj$3 zt8;UuQ|n0`q(Gf5HV!dL6DINCm-_q)|1@Ok@2uI{xX=hzMeb>}(JqRH-djM&)qA8; z%xIpmbvX-*T_p2F*Xfi?j?I~plt5d2$?%8fTw4e1BB>2XhyzwzMB`1EuOjaNDipGCypfnI~<-At)r-ki*2luVr9?fhXo*$ zS}MqWv+vM7MtX^Qis>>W3I_L!j!{V%_cc58-SOMmz-5kvXoZCBIqMF(SZdu|WgNkr z7Dx7^=yB5*@iT1z<*bmFy*H`-gLpD_le-&g%-n51Jw5T09M&WN4}ELRQOVb_C3(la z229%m1p6?z*7UtLO7dwDbzGPW)lK`3)dTslQhKn*e5)RjE{PP=uxAdhZ`k99yFtr^ z3@9o^EbyUP>sx_G1Wbz+0txBq^zvM@isG9}2RjLHtgX&3G#9lYfSBMb-7O0cp>K`+ zc`!7w-Pld;&P`u06rsO?cBOG%1xlt#BBf%O6m^WOVz5q*m?n-xaNgW&roUmPJxfA+ zz)ETfE%sg}^4;oMtZHMv7a2TtL4!Cmk;~9nxU3oO^bbi!uwk2A#9LJiu#1xF4nt0= z!WO}>=_h8N#x#PbIv#gb}6l3fK6iHWIjUspsmO9=3z=RMZ0})RQ3}l-%i>8(~4C zT%pyaN*RH>zrOcxj>SL&sTT&VmJu*wblaRx~-{UXj*95{2I1nl>RPvv6lW9zo;tIve3OEk?HkP zH_(bDJ||~KhTnCuZmF3k5^NAK4(!p+n$+2e!T_2K8})7c7XUy1?ZNQRkABawBL%n` zT+grygloqS-A;D$@b9v;U2nhm#RXY}Pu2Yh8ybK6!B5&sxW_Fb^gv~XGeg@zcI7lI z6U-I(e(mP^?syM$@Mq(h@Yi$wwhKB$|e74Ib$>5!(i1|$sFvK-8<9t4uk zn}x`umc!ok0cWc39={`25iYTiLi8kVO+!UV`Z7Sh5M_ti700f&va%cms89_cQ5cL) zC9dm^Pr~?t8NznFf}Z~KDE3Mdow(o_G-`XJ^!dJtoXZ81n34ezG+}4VKw$=i@lU(6 z9Ug5PRL=fff2ZFshxde>V%NSLzWd|<6(y`XVQW|=0VHXt2>aSSPI4%r+`w9c&>z*` zWXXu7Jqru2FUiZShh8D!uuBDDwU68*#L=pY;6W>;61EzG`5sy4#{#y7Nn2e8Jg`bn z63O~MQ9p!?MF}y1BBxvN3%Z{*tWG^AR+|$6xNsbp&!va575&Txg&GAz`Yohwc z;Eey`ziSkcGjq>kK4~<_qpvNQOgP;YCh9t48@+=tMfc2Z=ND%)XaIK}m!IV~RwTHS z=ZUW_i8vBAQLaE8wi7>(%IW8N;gW)#Su9-`<=+>%hy@t~oT-ItOhHNGO#U){^d4<1#H_jn*n|bB&3G#_7u1=gJ?cB_q~1m#jT%MsGfRFN)@A z7so8(drz?nZau)4XK8c4NO$JG5rJVt2^NlXr_>?}YZP=gF9uN&smj&C`KR^Z*c4{* zVt#MByB_(V{{8rz{Yx`btBV(3k~o>7{mIj)b?R&w-`JYFXwCiTH8pklwOq&8FhnnH zFPD#vqVf)F0mzcU9^H^f{2j31j8M-EWS*&8mV6M z#8GxA-`wiFb}QdpfnV=L=|k;4YB5o(8=e+QyFYWa-PH0NzXQSk37vrdt?OBB+Spc7 zgsR`-PB&_@F`evkrZwBDtP?L}GOkEOU+9G&KDc;_+aNm!ox^?!HvFJ^=<`ecTL zf{f}WrYM46bJ<_a4ELueo_tbEv2;0tm$Xx4>o%w7!sp)YS83=mCucO3%t&e|IDIBN zxCKH1RY>&y*o4iNIDN0#NG3n$e-JiJFOV@wA5Z_(KH{)~tG~f+SeZ5Oz3#5P^-s#5`r818I}@{vf0|L%(UyzsnJSf|91 zpNgWVP9_`E8crz&@n&{$!z_IapVB1A*R|(Z1%Pf|IV!88xli2iEycpMG3Kip7}J-Zg&_!)i%1P3ap69(zmfR=7IQF>K9Tuq=TABJ$g6 z{+kCxd)W>$!lddqq?G=eWfp2WW}>$?d7mm_i(^3Wwm1auh4iY4-b_0$SUdn?%o$;8=i-oityMSrk>#-CiWK1~k5AD7}4TNQjj!VKWEyYa7R)jzsR4y|- ziUy96^=@pz(wK=09Y?mRSxSMYTDCH<>oahvXd^n)jqyLdhJK#RGLRr7&=XmOBOpWq zxUa^$*fC|ku(0&I|L%9pNkQlz`=&+Tf(L5PF*|>dMP|bCu#2(1x;Y;V-_@+h%c8A^ z$ANsWEEd3=3&c*(UTvB|O_NB7i%73xHx7+M1K1}#p!QD$Tw!A;oH^nNNEDR&?i~71 zUig)kev+t{t+iWWP1jCQ=rV&?4v>!==e4myk~LCro)$OSuIh^bAV#l^t+s70objB$kcQ2Q(boIt}s zGpMTX3>>Y={Sn2CJ`sDq{;HY|0Ir!O(6>QG-=GrBF#2r!z)8c$t}t!j`SZWkz83&k zWJ2rP_}sMt3{E|zAsiYA#s&AjTI#QQiAe&CLw?IAml|!FH0K%#KvSUAt%R4pAL^F4 z%t$%fUP*W(ON=!O+JwnmX0g+hlfxZPEqe5pq z7#h2TVAR*xD3jZ5-(qJgFu*#pUNu(2oKt%r>=K}`Wqey`@d*1zs`!93Q>;`VzRD;B%NaWvEN zWH-E>>T$YtMLdKaqWW9bdc{hyV>BGn?D+qAHi6IoSUO*UL(4s{Q4a6CbV@ye9@1vx zGMk>)K2AHg;luyu_-#GC+`g=*xm0T(K16!oLwK8%`}Z`2Ht7~eWu#bAHQ#tH2Xp8f zXQNYDC@5T;5xilguCRm6@EobF6{iVZtpo_T8u$2BFpAmJGv1t%FX_YlC5!Ne=On_A zGDHy(vXRH^H|L*B+4ETvfZ~>ApxVpU21uK3lr+=uE>~#0V!E`ha)SQEpn`ISQ3sQ){ zCv2f%(j-ky9+mz|$XTqq#uRvglUa!)PG3uL#Y!?R^+9z97p}-U=7wCc1-L{7<#3Bt z&y*H53f>V(mb|3uYr~$G$@%B=_3ayLJwxnbJ{3mz(!#Rdo_I<#8sWVY@g3F?a0MFa zFP{8`Q(_%;9e2W^`BWzu14~KcQK^k>G)m2(AVt2@3HxPL9ijFao}QR^LPJ7dE{WOl z`%3tFeO=>9b%MBvg|{;%T%sUvOn@NWHHrx1?p8Z8%0r%LqMJRhXXl2mfwhh= zclwLguuAEMz`L!Z$wEiE=1QZzW#5J@8d?ruUni=i&vqlDnmSve)QX;rQ&@RZ?*nUl zR|E+F;0+5-EA}uE^~kZ!Vc|@OlWduXbP9VnMLpc!C05hU%95Spb27RAF6)a&g3b!O z8rZszuoZ(G)=;?V6O~*{>uIL$4AR{6ACEuR894ux7+n}6CDCb-$+fHpTaH>-i9B4E z3ArM$EE_8`QqqsV%9%}}GFK&~17KT~vTGE(Z8Do6WdaTMZplE;oW^0Sg-dB!O?^=tjEY5qCs9hIM{9D`@@H( zg%8iFPv+@Ye)_tI2o`7?5Y|xpf%Xr3>wbGVglM^_+GseO-uS~`R6e+P2aKm*2 zWw>Stqw!3d*lpBcz|tnpYH_Frbnd5W{bJ92d*mjsZHrf_5Qob{&CHjqp88gJ!zcQ- zUjF3`$OYCmH%30J%bc?zabOZAGqraMRYl`_Ch9tiLYC)Rz6DWqJr+RCK=kwqT4=3% zPlnxHbX&58MMe-wLE%GoM5oW!%HAM(aYMIyuCPTMet|3{_R^`^R6Xpk}^L;a(fRmM&Wd z?v(Q3l9#!%etgworu;tJnPw5H4UNb<{YbFz3D3ob`3hME(?47M=vovM*^9lsEbYQX zM@okpo#VQyqf(>1QRY{{#P{a#Jjyr!=t%S>s#~~BT%nrB+e&Iay))A^)S|Oi<>ygojcGCTDo3$r zTaf`;6vmvtJpKw+`R(vyO_P*&;Vw{j=gvK@WkwK&4Wx3tN*-Tp+F*5?ZM}5u?2G!? zYG2mO=O|XJKc9YaLUV=8li3C)BkS6>mlpy8q9;Rfw2*PIiFT@qz%bWB1)02+wrwns zdJ*lb@0tZmeWZ1b32U15u*R?TS2TYE;v=;Xff^e4nQL|O*7l74zOm<=`1tr>?zzZ{ zak_W>o)$UO4AA9bBxvQ4cQ7vmMD9}cK--3m;?qpk!&Q}rWP$-$SB;!-Eq`7Cp{C)z zc@nP#&*ccNVCQP&p7l2|9p z10e8#bK?d38pLf zC{p^u19A}n%8ZPiNhGAu&K(KpGZ$hmM+wM;wdV6g4{6=e^(!fD8^QSrgoH#ZU5>RX_11Dk=DJxBj&7S zE`9;Yzt^7Br?uBaFuzJYj@N6y_lhYy9GRF<*|o%CAp$)9_*2?Nj6YnDl?GF^jjB-U z73(3$PIr#)YI2-QZr*f|1VZr9AJr@zk;7s_UxHgo#>DD!Vvd^6QL2KZC(B(WZNmW2 zi?L(`{*m@BCG`E;`jh=P@WNFw4?+#%h{zdm8CO8{<>`i2d7(N-QBYV!gbrv|I|_Iu zno^QW4QMxV3+tlbNy(vAVx!fCj488ybZpYADI6 z-JESss|jM>oDXE7zjbRPL)*rCm!@_2+?&VW=m1Y#IGt$+H)`?WGHXW~9QAg&;gD0Z zUH)D@Q`dM&>kUf{HM+Ke?%yy-9)>+ff!e0toVb?Aqmi{X`3_~vL+TK%Trmr8U2=#| zREEG#Wg`g&lYy0o$OyG-w{C<$lsE`AxKo*<+qbYtn6n~F8j$sq@=q&8Kuy9TDa=JK z-rX!;Iq5Vfo!;92BI{ih2TJ*s~oVl0t@+z+S1Sw|Zdyu(4`|Bz9zL-KwpHYa9jc=icgerF;R~DV>HDn9jHSXhQMw3w zYqctz5O*0BDy$#?d=S3EHTMtv&W$M|K zkjN1q5GU;i45!%qs*^*Mt=t zoHm*j3ecW?k*iUqP$R?!82mwB!@bJ^OHwaoWr_EX0eTt_j_F8k7mY|iMNnks#hl*j z9EQD9tzR#9qi>Gp92qDyTB6g%cb>ehwuwEPTF|p@}uEu zT}C*?%sv7JOic!PYC+-Ofqq=;RGpwK=+OvI)8~M@a6~A$0uZ_|2rm zu^6bIiIisd^=(viE?HY)h^)HxqSj<r1#<++Tam!tMH=1&0Dx ztq&e4QEV$c>=*^bc|bxDaZXopgLrRT3L*T#>7Xci@ho$M`D?dwyg&BXZ7s!QA}pUF z&6u`-6L1Xq=8*ABjh+3~o>}1V&MQx9c_LGF*je=*I}S=rX7a`dz8i{=HikU2rj$hr zeW5bsK5a&6BP}8-$C?i>B5|bj(Mekzl|<}L_SdR;PB)WhM@YGem-5n)?MP$bPQI`4 zwxEDeghj4Xcy1G55~4@&@02oj_q`05UQD8q3tGzu#Rp%7FZ;}5eb~*Dh`NKM$6@g1dtie97dR5;=fz`}X+5(f?{=IrYVzrZ&cz$@CR@o1&$@0FJsV zITp|lHgFE_y!`TMN5Y5e81XT=_DW>O#7nM`Fj5DMYYVy7Y@L~3@NO14@a^GedKFdd z!H@!|$Dcj=gO-(uHw_DP5R#FGztq_XyNdWizv2s#T1#C&eB;sYG}vc4H#^uVdkJaf z>_WmmZ=v963r2}H*kHHx&Z9qQC=o)kYN*A+6)kyCJ>0W8k(kDe%n6SksQI+co;myS z%bLJz4m!sPXomjOQ;rblRqJdo_Iguudb%y&my% znktbHD|6%8-m!s=!&Xw}ZYs0YVE_10YgcgH2^Lw#@fDT&l6 zB6fUN+j+1_qHe#i(;aZF)$zb1td_{3AU~o>lXeIgU2pIeS247+`Hn^nogMXRuo5Z1 zz{BXAoIf|WFLfGjXo}zmMe@cj4}pZx-{43N3Lw073B`1G&Rg)lwaP(vlBQiaoM9)-vw`Xu$i4Xtq8 zZG-(O(ue3*q&cs4IIedb7Q5duhOxJ6BP6$SIL0-)*<0=BtY*VYc5lhb72ek!++$@w zMI&VKoRJ2tU5F^EQcp)iia0y94<0L>T!E*lMbTTB*VRgIzZn5?OBKe5B+k8k*9M85 z3X7LTy3=G05NU^ef{x*7!K)JKCJ~tKY0fBa{Yo1rD-W?B!4PtzM$lVvr%7`|q_1}~#CQ_yP`*>r7uk@F zBe`;Ov!Qo~Z{=FHur&rxP!Bh3z(TOuxhXmbRB_j7^8VIF=kBe_zIc)R!6*0`osk4j zZH#Q7IvY&jF9C}fzBjZXE0B0(Q`^*FmX~v&62bE?p*{gTZM((j?Osgq_(N^Q)V{?e zDzNR`$UOrT5T@Mx!#Mx6_KCw&-EI33M3~t7g^}w$2@v~3;^L@p_fK!FVHP`SgQK2RD6zBc9)GaPjH5i$kaLj8hUo>t2R<(z3 zOHBa?{5_79u=yHW38KuGJf;@g^26P=WO>GGWZ6RNq9tC&%7J@D8QCjPV3i1pViGAxc%d;~g zAm;J|kjnB5Rg1M=XMQdk`px|h_K}mbgH1>dD<;kjvXxd92M5=vE-_9o`eut zhHoZ^#<59+KFL)ypms@FV;%&p!(7v8Fm~ytr>r0uKGXD&N)EU}Dr+iSfXwO~Cn`TpR+NXi3nL9Ji-iPoj$(r~K0u=*zn78z!*SCzLqbM1`g zz7AG?=fK&}a5}z!d{6Yp+4UuJ`pGBt=Z6nY?8qFZWb}`^>2{RdQkwrWrhYDbP;RmS93y0QV#LJ7lju z!u$d-CBH@~8AD>G=clw{DCrr}2lLv<63BD&bAK%ug2*8a{oIA8v@yU|w!QVEECt_T ze)uGRUvMqsa!bAoF@AUazQ(bP@xqohh@-4J+|?$?5;2?>k^l-J;m+C(MDLy z2!v*7cJogNTBCw!TIE0`g-)tLvWJ#Pn$IsFvE>3{`s*7V(zc_)bN&-ml)oD}Vf?qa z!AlL#M}O3zo;amXFU)7-6kI&8?;i8l=0TWSHLSY$Ww_0}%a}cob!-Je2KjL4iwPz}MN-ivGI2zm~?}sFqQ?cnKXV9veb~v`15osms2-;`HSNs9)H((T3O(y>c_K z1o;>m%7)_-u>q2SJNNI>pl8Hxs1?5Du4m>sVj*tW&O;`GY#RSc##;S~Xeq7ptS!ce zl?xN*cTh=7WO5-5$9JK4mr|hL}QKF z(?Upk`_UhDn6EwYVs_pMCqgzlDivbgVdA!Z7=TRGz>TaY7NEG$Q#JfZ3K!qCgdFhw zO&!b*3;KZnKF>QFdw%d!y$-vMI+{KZ3*=^0uaoU*F=wuJ1c-xMqfjf;5>3BjS2N-P z^*pt)*brGOeJc?!Z>iyh>5F+?V9@Eq0c;BkOleqvwM5)BQ^hK&CEUl3^bIti zQ~^R&#}y}+6TuUsBw@$Hlx78 z*bn{E?yp<3zdp16RmdTW6=@Vi zYotmfG%N#=@hpb8n3Jb2H0n|9q>5Pl+M9d13I1|PbEi5uI9c_*2_w<)y4x!nHr9+x zPR-@r+pB8!u9JO6@9gw#2c3*S*or125-jYZxex5`C|!$sCnNDsbvqRfL-2QaTQ!X5 zmYa(&NCkQLhev;?{}V%5II`#ShT1RHmhJdEkEUC}syOQ*6t>^W_B=@wY&vD8>V*r3tE! zJ303g#s>Zz6Gt|-zBS0G)8gT&6jXAd|C#h{_py)Lgs_qo6rOzY_HE4(1%`T^YL`>l z-^%PSoVJ63<#PyU-wIr#WGWJATzWyn59%UM%83$z$OXjR{JR>`G*0L+{44)gtQ8Gl zl>SviEuOn7kv>VX9AIq4(PrnZ>-k>9a%taAPZ-utFac2%qMza@x4-N!B)L_78u+&=fZc8|Mu zH8KK=Rwizr(O_BDMjeY67-22eub0HOA{V*|k;oB)P|F8_5-Y!#Hr zL8XkqPAas)(u_SNuV!Sx#Dx&Gw=?^|e#v>*RKI5rE#|NTOXi4ydYUcfRiZ=2I=j);OaVdylapt6uk)BJ+3 zxC4_^`&4Dbouu(@_dzV#eRv{Qg&u)FeVp=53B$lnT3t&2khf(IytzUBi07*}@H-?) zQe-Sea!~BS;Au(gxH@o_Txvtw;7Ot)s|<}f$C2!FnIoWSnE1Fb=V|wqAW8gVBwI!S zAPbG`A-#jvDyHjPH*#f?m^>LyO z`+pw(iT@s$=-x?WOW+{;hdKdgf2MVchFm;NDlOkG!T1a#Aw2?8Z5 zSnXo{9XLZEJ`1=$9xrX{pa6vvQyc|+&7gn#+uzFaUJAH@bvk|@gvp8OArJpy_^pPC zpt}b|F1x;YVAYj#V;>FlHwtGm8UE(U^BR66*v-fqtm%D+ud(->y%Bq>^3whX@3MBg z{9o<#jjpAl;Dw|D=ibtg+asda*XV)BTv1mE(g+P-`_(r7h{Vyo%6W~M1J=~DO1Q8% zzmSdY26xM^McEP0u7Q#wnA5M{c1q(-L=R16x;1ZmxAPQ4kX*LC3%bqYkHjVgV6FY$ zDUl(WEdUmXmT!6Zd0^anw6V0b*g|Pn)8k^#`igQGIqD=~AWr}%4Tr#qzmStKePEHC zqomrXREB`dOHq_B|=82I2!5Tk7Ri7V!C&n;)MW31`v5lYw4XwMDIUE4+RHMY8 z-LYpJ?sv(#XfagI&$pA>k+!_9_?vsSSK&Thv9)ioZ4Q3=)X&sE2}7#KG3w@=Tho4b zrso?U!VN&7#mvr{*FBK_08K=d=*7WF_JVv`>_HSgyKt4Tnp?h{HCoO(eJB z*vO})j3wXoN#b0tR$i*OX3$Qxk#P@UiPY9yF;D7{^;}(`N(1H(Jc5`h%N*rR`u2U3 z4#K&GhD09J9z{|+eXOw|8Mjhyo$lkKO;vkpECr`r9&U}YALe1CBD0fXumb~gpmnh6 z2)uULhB_cg+d<5Xxtd*MlU)1FSa#$9daLUEN-W>>wT3Zq_V*q!YJppu0<$s#yWO+J@>`!1nM z&sA0sXd-~M=!a@_8uYN%;@WB31$+A?EKLImMw137E`>_|d1>N_moASj!RP*s{%Lds zD^yuSHVqBqJnr=))}T@;fLkNMYMqNYS5a$ZfG7&L5Ej^HU~$v>Bq`K8((fU8Yh(TBwF|Ak;9{#V2tKJQUXtY-N1 z#Ot}XqmU>YHb~To#nu)-|OEzG$BH?}{kf?yn>)g#&GU2{Ka9WfAi#Z%@d6W-a2agRy z3egm%^Y*?tE0cFP*~&E#W7G}uQ!8J9k1Cu7d1h=QJQL3*_U@6^ZBuTO{!Ii}-H7wvJo zk8&)km+RMa1E_iy@+8kxmV=qrq*|W1;27Gd>AQPSVXGISmU4TOD>BOk8vL3UU!??ou-02qQjd!&&)~6OU=L zZ*8E#4t8&`^xC*&&}yLlYc(C}J#hU>;g7Q$E&x3-HZ7UI9CD$+Uqk~qfJRb~`i?`f zWt;C-&k0nPV`ZCBhrl8pOZvuM&t4zK92*=-*0MFus`=>>n4ti2nU@nySFG1sgQE~q;W{LGQis>O2culi`a_7P=+u2n)JOw^ZA|>mTZEoRTAJ9Xd}j%zgYIpk z{jtRO_ZmxcadCMe@0O_oIiRq*_N5IpQERlC)*pC!+qD$f0SpA#^hD&5+oNAB^X(gOHZlEovcqvMUjlMgg5s(`)ldH|M3+5jsKG5wbDDl4X*{jZspW+)2(&`pM2_{#O4)5Ikr$n*=B^({t(^RG%u0d_@RSZOe%~292zAGdH7^Tg{4QsODh? z(Xfclswz5hmHk7atZ}ShaYTY}jgBrsbs<7Mg9* z`3MH>2_vfXD=*kosvdoF9YS;o>e|=ULLivk8)g-SoQ^8FEmGhhy?s)_y?1>qM>Rk# zXgv8+Ql+4cTEolpSG8z!rO>b*o#tF$EYa=0Nbqq#`dvVcvdnUUZ%W?&0w&TL+zmf$K434J~$v0!U#VNw`ibbL7h}pRt(8#!`qax3$3u0|=o5 z2RmJCX0s(iQO&B1fd;U=%IsJS{*CWqU!e2{DQQZ?Q&XTI$;p={zioMC|#2w57gBmqvB5HR1Hn4yRL@D z!8x;?-Q7yyf_uJ4Jv1jr3ri;!4+NLIZ5Nx*EfaI8(Z$u6pJ$vxYLwJ*6fvZ|6`;op zI`a5vt7iu0E^Q*N5|wxt#0Zhg>fw+_wrWS-RnDID+Gn( z&vU`y_DwF6%JTz)KUZYe9@C{X&=H<30xX95577hBz5EtsVm+7<-$sfP!f3i+9Ra(a z+!jQ~FZ0eFX`Wg=SXs5rHxi&0B_GZ`rN^e{mn*RiGwPk;-|IKbA&|01eSi1`3jG7D zwa%^expJ;$_S9!US16`S^m=&q7DShlH_&%r&=NCJww_O30lH`5KjjlbKQN~xL9NHen_iofA5!Ay_sAZ@kDz2~;~HY(%G z%={(Fi0U^iGr!kzhux#z2{J3^Ps@AOZ;J{UNYonBOe#nM04hWzJ7mA<0?GUum(0bv z5nat=BmDQ`iQp~tkv!MxyfIBaO?`O{Wz0;5yX&pDwJwS z7vXlZK`dOc$R>!D>I&a=X5x*X@ypS>mTnp>m_8%Bej*wMt&Jf}zpPSAMsu1R*x0bj zhIe2W`e}b)$1G0es+c6Yd)HB`U>cf>qVpDr$)owq?|sUy#tY}KSqTJ1tD&%k7BLq~ zreTcVnk@JJVpCrzo0!Rau`dh`076t{78;A1Y+xQXoUNj>VMF>xKLzKAXy*ozG~h7U z2!;K>b+0@&{--g7)ycpsZd_s_^b;<_WV4a%QKLcf0o zh>4$Rh0dKi`%`s-dFQ6Bv|P#=JIw95VS`w6Y3i~REGQ1A-w4BIzX5^le<01${o#kl zAE@mm{06pPg39{(_&qH{hzQ&jU*@T&uJ}R7Y})tGV^Cqm*~2?i>2;cX;p}ht+kFtB zE?EhuaL&5{2O%N4D4B~^!3#Riy569&Dn^A4HGPpAGi7g+ zWPPpJB5u0QN0csSYt+)YC$$UFfLSZDznR?B<$2AQvv6?WIQTsSL6PF2=RKbxkj=e| z+O&TY(^GCJabG=C-9l#hE-6nb0->WnjpbaQF~^%2*#ZG~tabN`Vewb%9H&vzu+; zx6VV*JmRVYV4$B#96Ire#tUK_7h}rB@PdPW;A6EFsEh`7Ekx>}?w(_V{0tmdpIO|B zPhI3rQ&$llkj5Jhf-xl*Blb#nxL+f1`kUa#`93BaV@Kvlg}NG>nN0Pd)ae4_ho@<^BOr_*qVP!y7uz2pddDKQGPC z(7s3GL;hm>`rp|%Qhu2!C{LIfZ|Hm?;@3~i!tkyB9)?~HVyqF>-sIQrPv>@i~ z8sK^;YERzS_qnm1^%)z_x|8|xg^Uq3LUQL|(_N|fe3wWYVh5$i?_NAijeLMVGn=^eSiAY&>_1oO@BF2*ZUu%QGp9&-T3DK`U zx%(;QT*Wf$GmT@UW2azv<~N+e@v5bFR&mp3uQ``Qu+yKO6b+*BIqDKz@$~Z4lFm`d zKKa?m@~g)$oI3MMtun1^5+H3cG3y%~m4qVNZb*g50yrHQsYCs-IP<|Q0D(wzL6KJ@ ztA~0EL0r8Zb!^syF&XPH1-GuqsD;LAhy?s5>?TQ7H~Xt-sur(c$ixOErI27S?Y=$y zQPHycpKi`o2ZwND?SsNOGS1M%?j0h=5$P$%ed_+_IDF7|Uf7Wrk=-N4$K3Nvc zC45&|q@#1gci#+hfQ2}&ppHdDZ22G#bwshq?K!w?8Z~yWr&%mT*nGH#_3Y#xx0mKS zyz}&LbIGP+9NNqM&A~w=iF#&CMdQR`{|5g@o#T|W<@Vx_4Z>5Hb2Mm#f>j6mPU6EK z#p7sUuN;b~HZu7v<+pr2B0+A}wf>+{HH~z%XWJn>fYW$Szb&KX&gu(nyKOCIcM~hQ zMYge9u7a3f0;oT5nNIi(Hc(<_&gf1WwRCTeyuWH~;=&V8ozt0ly8Kgn z!#gjX&d)zPtIw;X1`%ltGE@B2EuuTr?CR!TKY`GZSkQ)7EPw>Sb9gelG724K`Lsbh zuj%vvPnfG}N>DI4kK9aD8d7&xh>C7&d|N==H6w1d_lGuFt^uC&f`eAvB&ndzv_o0- z2lfMpJwBHt2B45EsGX& zQ#uZc9piH~Kw{$Kce-}&2Y7B2iB*ZUvlfDADsfGiSw1-aTJytP`lsOsYId@Fa9CF! z{JY^_R&6%pKKZGSY6+hyIZ-N!08c<#E3S-^3yLC$FZ)Cb-R2HhA3XYFmSsUP4Sgu5&B9NvJ%|T~3yNjHLVa3%;Q}Z*+ zvvVhqEk7`n=t<}g=~?rdZ%ymtQ74_pcN(N-%Pax-(w+0I#A;6!;GPzW`~~(X&z4*+ z<}~oCbuFBYhu8@;nmyE!^}MO?55GG8Gt^Jk0}X3FV=r*t>gZA$E;TOb}bZb@*m6!6?SXx3IblLeYVA5Pl12n^T$~sKM<;D@ z(dtQZ6;$4&IL~jeBOeSaeEm#V@N0tyIVLRYqkUdiTfu@I=L{xy%&GP#O@!#N5zV6I z#dPBIe45hwRe*nA&WUYSky8YmE_LB*VCX*y(XDobaMX5<&f`vEW?#BI4Ogsau6V zq{k%$8}vBt58oYriC6N?;RBrl48T00Zv$3vy_!V?M*D3>Km4BSm|#ggk9zp$V>5r) zKzL-5@Cs_ia2>qVpt5u`&q9R0J%A+M8h(>+ z9HP_g=0V>}GcUI4xyrS~N|O@Gt})Del+9pmZRBMm^B^sD91s4CZNCw!oy-;0d_Q&W zDK0LJ3j1RK3hK(u!dzPQM~VLI*u1>6T3rm?YC*X15D(ta>6xB%*7%suC^@%9hd|8& z8AM()Mj@Ws-c`u>C_PERKZU+ckg{exgLid7RK>I$);DpXidG;XXpyor8qGq+KC#%- zO}!t{?mBWK&(v_i9cC369E5YKVc5txP;oM9^3suKBf5DfKLed+rIb$d_$8 zMKaX_qN@fP+zzeTV%kaazIXiQ@Sav4R_w$|=zP;+L~zCr9{pZhOVoXMRn-He+eg;5 zAK^yYv)@Aj`r1tP{_*EnF+$Y&!VQz=>Daj*`XDRyOZaKhQ4#v1?QexM`$!(GI0N1l zuu2w6kzaco+nro%?E5RoxB*TVRfdt`VvmqE^@`;7>F|C1OcP-T9#mp0<&#T2SFIRn zhK*349N45%tco@*M>nQ3Jc@_rKp{w%5`Wsm4YRXXtprfM$SIRX_^g~%i0t7+MbSwD z+FCIXA?)rC|1NPBu)LItAHGu;j%{ROGis%3vqv>XtYtN}A`!KNSlYWrsNxIm9&Q<` z71=+wS9cBWHRPWB^jbU$cpG!kS#y%LxH^u%Px2x&;%?9OGFcNW&$CN}2*OX(L>CrR zvNu>6#Gj4|%wNP22?f?5Ajo(08Sa=`Qj{qAoXD>4kKfeNB2*>dV0)uF0wYOP&&7S{ z$Ph~XbZ-ILTdQb$r~hil=R#ReKxyTqL8cJ(p4>S=16|}K&xxdikuD~|aOYooDG4_+ z(4ezxzLZ8WiAU;Lt4~L3Mk2;NnHMy^2+anwa%bh=jX5J(CjZHQqMPmhYd{Gt<=`nd zB8O`yB1ZHidJEUERj6Jt9dwBKf`HH^*=5 z!Lh$57j=1Inu=j+6&6G7!Th#CXkK1uqx`Y+1{fmWSzZiRWu(ds*+HFw2Lf2_V~+T} zZHpT`$2S_#jhj9=`+%V8Cam3(kV?$yp4B=ik{@DGq-O~Xd+9Qg|2ZB z+Ms^GN36cX4qojvlF=xewi)nZ^Ag@by?L}|-X3IOC~?UCBqKLPAiM+=HOU{xdmRk{ z1gzR;kiVa3KnI)fAbmk2=$q4(n5$G+I$4G2_Ro__`a4rW&0Za{epNbpD8-I`8d(|n zUu}1=EDUWvq)VArvq!k9wq=fgS`hM9=wmB0?~@utgo5n=!;HScG~kN*HVHf?kw;4| z`UZHv)OpC|1MC+nnMQE?+)rQEl&8Zg8`&I8HW%1m4eIo%^SYY=`Det3h5&x1QoG>X zxKayx+bJin+qD@+jQ#!U)(8D!fXTo~qvDd@8W+w$1RP#FdpW*qI(@A9nht^e zk?ps;W!GEcvLC%Pk z1U_baP}%asaz>gyJ={UjH}&uDbZqVGuGxT4EOw52k4(vfh@umld+{;N_Gs1W1sC`U z?FjF<<_**ZU$Nd<+qIwsmfdme&_w2A;|JV*qVJ8ZTj5@-1M7gukQK}UAQAlmAVLQf zmJMp{_-)5al^7q`Nnp^Tj`E3lwQDQ`xTMiEVy_3Vir#%chUTwzF;iX zti61svmh2kowJ*f;!JNWG+xkDi{U6zO^dcrjqOp1K%AR8u5l7^^%ZZk$pk>)J^uSh z(`t`^tJV=f%v6iCimH)?Ac#U<6p@s8QVoH%w#>1Q6=BoY_??_n=QY4zdI@pT zjG;YRdXYo1G}zYxvNdIGk}hQy3w*e?#^FD@r>40box>FVWWG!6gM((TGR!F;ONbrr z_8##gUun&Ed$xr}LM-SrY~Uu@Thz76ij;!`CrZVEp>dqLcIFA~M(9-A*yB&oSeU(V zU1|V}QCrQnqA5~)H4TlOZeDE7Raf3m_@~W4IKEhAFuHx_Os+X%>Vc)M2!rd{LQ#Ae z-)p|D`F3&_41$p`>kG9r(+JRYQyuo>DC-LXPEz9xCStYNOMw$LcVR)(T%KEQH>X8` zg*$@-$j%ALMO5y1oGjfSh1zzh>ZZ2Bp)>qeLm5P_fBn=c_#4gOxsgv;Kkjz>z{oU) za^qM0Yx7k-N8cpLP$L}r(DjlBlz{Wia7t;?t;Of^XQbefL#a|7!Y4ylK9OM^K%I93 zhle*sKZBJT7Sy~+iBOFMe_lj~Xwhgeat2g_0&?@m!>{!CSW?k^gBXGGIk}ewnWvxD z#5)0vcLMzrdGQc%e1{XFhE}GRIJoy7{Xw_DStB@h`i95Fwe7naou-_@Jkm4$eamZs zh9TdN8mE$cckfVqFbu1R>nYA{bnJ&*sjE~(5fZ=<`5snFlK)mryFI!}wSz~izS!VV zaam?`T&Gi6cFCGMuqh z$$md{Df<=~AiI$rL$d>LV3tS?6!qER%8VF6ecz3=dF+N30&h?1zpI;7xGi4tfP7n9 zM!xC>a@q1lu`j9J7)sQLa=Qcchuj)y091x~PFwgtpVNZL2yc;zsxj&4`oZ;T6ojHh z0GkdyOqJlPFs}{2P0HOr*fu}~RdX=f!yFGL(e7a)`*0=t?tkSKOF%~iAsU<$#bngM z$S|XCy)azAQw``l0xSbYSoy0-|5D8XIVHlgv{-l#>KOH3U6{C_!_mKK`%mF8UzbEV zj?5h#*bNn9FsB@6OeKrl@#h+5FpJ@*;!vwSUij2kHTsG{(!)ECpZTSpizH>39@GdJ z5<;CdS6BoF!;wW$lz^yrkD5|%Ct>dU62}05cP6iBUGuP0aaIB*2irSgc~OJhi=Xq~ zr($#MTaqGSsuB2Dt5R1RttAb;*sKzjR=$GMs?Og}o^%PFXXac+?!pE8@QzlkK4Sz< zrJtm|zBO=Sy0+SxYroV=u@0nC);FewmZUXlQ^HBVZ1?ax`xn-(3LYuY9(b;nBEpFd z@C0hH5Vl5r7?h+sDn!0ICK7c1LY zoOKFM_bdwI=vcG&ahWVJyYWccSXv>`jS#(Bg-Atgm&2Xnu{jYwpkXiI-t0Ma{e0@(llga zp?OL49x@!DL@n=RYpJbi;SDdTJO2GxAt#5^7t|&AXaBEO8S;F0n5^!d;XN|d$KMRS zD5gnHWUhj)$V|96MrT!Z-bWBl51lNe4NYSMo1nT!9;7x=P73V87sp@b_Ze``=}mb0 z)KB!{Y-fl2Qs2USm8sn|nH;B{wk@+hi4XmMyuE32n^%(W z`5`7^W?oI)V%a6hi}YgN*_Nt65ELPEfdNpI%2vxD2$GOUfF=M@i`7wOcTdE<5i`*} z5gpz49W7asUEX(jlOrJLd);522mj1NRZn+y-->a!T?Ftf=j6$gCzpR_rquTx%SUuw zoU|ZK02RP%d7^zuVg*ZNiG-A8(;(+omH?UP6I$zN%l%Ne19q-urm`Jx0bsQ({5&eR zwd0z>?PFQL=5p#Tt!br9v<~G~TwK5&-%jp&s8Au-qz;J_uMb=wAgUY+Xj}v)a@lO`Hx3ki#aZYznu*1bl;(OUt@E)t9hiLr=X}(_hbe zXW_Gp6@57x1>2xfP*_3h1(qyB8dR|!yuPv}5)%FjB$UOW5o<>MSkGG3N0k(R>#Y^P zQj|(>!VI}CvY2|cXMRw3XwAa-aT^T|bXz@p+kCa&@EU|~-`4DAU)9BD5#surXt(bH zn@Zj}#EMCZB8W$mOqt4F*wWc7ZeMb@SrZM?AIo9*(UW(?wd>stoMz&c(=*TO2TTn* zn@ez+Ns3ccB4e5#Z&hqQ)eY+-THUxOuvV|0Ck&wncUxZ5j$AgE^euXFo2j8^5UhJI za5wf+JWNS_&=uE{lOcu$?eZ*EYfvB>*>>3l)}a+@0{V2V+Q7+WaV94dP1ad6Ep>yc z82B0pM`&SK3_nPbQ_;h8Zofr|InDEW%hMCBu0-Mc(rb3wwA`}R^m-_08z0?n>&Ci& zz-6%S{-f^J2$d|RjQ1yw&HljSeWmiEhEa;{uH}`bC8i>_yXu1Gxf91l)Y1+ozi;*( zS2OYMMAj&)fw~Z-1h9691LzUhrFeSvDY>g69rnTGt~kfE7V~ABgFxSLzSCrfLyE*O zJ)xO;KWNk!d}h`1O04f}3Zm&2+*K7-{3j38R&J`r$3kbIG`+sbSvvqLBd=6YGn2ft;dMw zU(TwNnR~$0G))`B>X-3H8gFlJ_lomZ6JMuz?F!OEf1A1%GP`Kqkx49YD)D#}MIdEj z;Z^WW`(?aa8remcdE^CDH6~)i{l0se&0|W&eY}y5-Kcv2l{KJ7t>odKOV2&0uVEAq z){#mN&9n;&b0*rTpmf~2GoF*OGrlRycEmDPH=BEo6aTmYfNbbO((8r<{S9v$h?a{AVrLAVlc zxM8Y;$bYV>nc)WB8D>qS%0|EcLGNFKQlEPO#`&t6kh_xzfWBL?AAUbBVEnGS6ZqFaZKfG=ncY zoy>QF18Q&kEqBWiX~QrJt&AN?7AAEH{xEqYzN}lHkq{pAfcQgn9LEa0pwVt@WPsV4 zC3m^lvvfqiUewFgCa}B1hvXYB%d;V za!xC~hP{p=MCii(49UIoDU$q8lP|T5v-<$N+aQcZH&pdj^dX?IL^hSw$OAj?D_xA+ z=-bHy4YXzz;`I|p5#map?BIz(m+MupTE&sV1M$b)ncNkVWRBg_r?s>G6~4jTCIiZf z32JY2y87$wTe{K2i-m-`gWYEoN&O452er7%CC~I+?-G^JY^n1U3FwoJH38&~CV5!N!dQBQ~MqRj7%R`%rPFBjnxFSFbE<0PyCvE9R6B zDp_W;mI7rO{a!o{VBTP^Vy6)vd9fP)G?LK!9${sUzxMDu$CEW^WW$M*Mw^^Suv>-| zGUo@GQ&H-XuoW?qtT~LO68;Da0GZMF;Lnf4MlTIq=q^wvn57m!0-v{x>&kMLdW18z z7Q-jYDNDpz7pH5$a8GB)eBD8|xz-KA{;f3zJrrq)cO>!Evi#kEOpQhTfV1GD=yTw6Cqu zEA_cZgth=)EDQbfkU1Lr@ngT!pO-J6(zBOP2*eP$06)nQ+*VwLRw24;=Jw0_6ON46 zz-cHIdLYn8e<0DfPshKAjQj4JMmzLK)lyMJS{E&6i2Fgynoo(U$4{KRd|7WbrOyEB zL5IeWUL6|WmFNSP0`Z(tx{{E9IaM{>GyJ2!S*mceVR}tI6rb2(3YY@}Oryb)s8xf( zt+*}*lCHP#!a}OLDcP7@$L3GG*3nsLl-i=$p>6J!hhbg@XRyuAfnen=<aOM82n;cll_MrAxSeXlu1byPio-!tamf0^4BPOn7LqOft)>LZP+yOzUKY=8 zG%rf}nDeFMr>=&CpyLe|n+tuX7Wi!di@tFgjJxuQSymh6MZM_y_AuINk-4R{M-CCA zb%$*gpW584ZUWQPEXRlPN>kIh*2z2#2x5%6083s6YNF?t6NJXkWWuBl<}H`zDq3bd z{4$J0CNxYp23D;o#izH-Kd;UQ?nv zfcV}VL1f|v;`Ft8P-3y;XJAq(HI&`Gjvtl-wsCF-K=U&j%$r(tIKm_1jH*A zNG}LF;8Dpdm9CZQt_Jb4-otC9i}8qP`>nwh zLe%X#*UgdNMAZ(x2wGB1(j7-9-_(Oi zSrKU(6)U@-PuM3Echuk!8ox|_Ou_X}b!&IS-}Lftey!nQ5`U>H_O=~FQre<`hQSK- z+y1~$nrnXK(!flV#QR>^?O$raOy@rQIIN9%RI zS+}}i;d?BfuW0Px6-#=5p~rQG&&jg<*Acq^%C}mNjj0dI#Ve_nhQ@Z&fYp2B4Jo2m zJhglQ=avOgVkBkLA>G>NwCQfmA(nvB#QLU|r&_#(W%xxFk7<(}V}>2d6OO6%AHW4% z2tSYAlYw9(?%Kt$5NU8Yf1;P|cdnstW?~6vS6%@w)r8lL)UL=TT(6ZiEpktj_T^*7 z7Kq~o^1IFqn!tOa5Tv+2d8mUE8ya7X(-rnMbvh$hA$=_e(6m>WjV06Nm~J$cmy z-{ZfVd@m-NMHMk{gj+?|e!4;>m(XiE>pr+vbRBhNrDYBG{lsgr=N~LH=#TEPBa{Obqy;g9~fp!%Fq_V zWl(nvwq>D5(n5-^c)@hD*hKTaC|`uqTVM2=lVq11Ilp2G4LCLQ%&AtI=K}!5+4q<% zTWsXOj239Z2$8byw0P$Jq|c*&o-Hlc)@@5i6&Dj3JYSMaU4;$|3a%*h@4B~xlWI&Ah?5s8Z}-0EeHwcaR3?rAR? zDH+~a-@a>57-MbjO@4mzjzJm5KWIcRK66WpF#wjXp%->PRi#~W%vS&|N9Y8XKq@n= zo69J!8iD~H!1Ida*RSXz616i&(_*x60n?BW@wyOO)1m*IfLYE3zYs_Yo>?La7@y`# z)kS^UyJ5aH&2w(KAsYrm%<9LQuPlWCoK~$-WN9A%weCFiinowh_dM?QK`eoLpfvhH zch`N07Ff&Bb#$dhIK?+b$yUP%iFj+onaB#(ENrkXm&=pGGp}eDU@UN?e%o^dKgK#0 zBIp-dsp}f7Jy1lb1R5G@&b@dv{%!XOQuB}9sNeAF-XDMLl9MV$gq1At_DJ&{63?&` zo*;!Nb^JH3%~99XO;JKdBab>VBP}uGqNpTgz`u~nka2th8C(? zCZ5yF1Rf2Gh{Sv#%A<#5UIegAtO`Ojz@|9%zMVWu|GiWESEM!v+m^YI1LI$sMlL1e z*cKHpOyB9a`UizW5MrZWz8nv=5R1*(9be|5F!eD?Tb&!ZwF4(v*#uEzhbpvDKi^90 zyNGSPCHAv{x2V$P@{icH=z(58qp{3Y8WzR0z?#0|gy;N*!yGV+1Ml`m?Sc|z#tDT4fO~X>SkXv+xEeT*R zE>WMZT=>h&Zp2L+>`Lb1v@W1uemXZWt1}b{(Z1w-_C2CX*cu}g8}_Xxs*W++{?

    zW0S6fds&iL2VR0n^?r71C(0VlaN)xC$a!fQkg5k5xi8|7;AWS|axvU9Lf7WmvA|E=>z6Y5HHxOF8&hH2#OTiK8D$eKZ zz9T@!6db3B|~1AEv1>+in(+Z~CHV>g={|YIf+;yz9ohFRd67jy9w z8OFwYufgCp*ZjzMhv{6DT+NI0;-`_#hw@|86^d0OND;R`>V+KO9&o^<6>WAph3Lvy zZnVx@v)A^bM8np;!wP}XdpXqJo`d@)hp)e)#b3PglAM``2Gje`{3BAB=WT!AA!WE~ z>IB}Xk>M0YkMt}DpdTMi?j-NRy?8>!97?{nwzKpbveaCjl07gCPW(C*Yn_(&#$=p` zmav_pM|jCER%!3ayU~Q(dLt7;)6+5dcPNb@vi$0#mYSL$dI4a%&cJz1a8q$U$ca(M zIuYn{jLa`49%!SmR8a>C%R^(tLl=$IEt=s)#Pm>3%%W9{NYb+o^)cv{!H>izfWWM* zluOCuCtlQ87LR~6nXH8r<1v*k{;-f#J&O`qWnX7&Ob-!cBd-Pj;)`cqIhEDKv36&v z@eh;#Ve*ZpQ4$JHuRLq#O|I`+tyI0?dOOoZ+o_=k*NOtTy0Z$g)}6*dGN<1R?&wkB zmiA{ZTWf$5P*C-bQO|>jG^BO)KP7Z&kT5VOyJHiVb*jsq?cq$oSsp-D+*(bDM zFb*?Y#)+plk+mO@IqN<-C%!@P0UH%m#kJTWKOs9#7fM<03jkKw44T;ithhNikEw{ULsmx-%L+~x`hB33+Iy;74 zmCgh&7!#{YUWuuuSQ{QFFj&(Kv&luYlz*Y&ciP!Ok5yn@{!r9n$n4W$w00;gI!$;U zw`2q5I>>d<>8|^cNt~{cxyUztvdCKs$!gnT&V8Cd`(KVf(y$uMEWArC2sW9sgzb*Z zeF@mwvC=&FEvp_Ca_aGWnl@Rlf%NQH1((65PLLyx!@_|1>;E@snvPz#aF&)eYr=cF z2o)Pw;K(_hk|jB?h$2E_hUcI9M~j0{U0p7l=_hI&KQVJgJFiLU_0g7}3HXl^{qz7;^c87?_a|gtYMP{>YZ!*e13jR3phe#a z{DArW*HJ~>dP;H)+_D7#b>MYedHgdc4On_GIaxP4_ITeFqedTWwX1E0H{xR+5T9*r zSkMjgTmx^G%9=5b4QF7~?^IOGLX1Iu>aI})Wy5vR(a>X2waT2h5&(S^Wk<(fr*@-$ zOHDrY0oKl{JKdXnGxfP z7NZyqlG8#D+X+wJ<9`k)Pq}ekG&1{d{JmCh9R)eW57j#VkgRUERoNX8%UsO-Ru+8| zp|)T|7fQ&w=EcQ|h7MfWl1%gtJkMP+)L84>?_tg-d^ozO&?xyYMzepH(lV3R>aIjX z>O1(4lTS4noCogw>7uX1inCV9$E#79_W^@hAJ-71ne1L_(X&C5JKq}ZcyPn?W7{kl zF~1&rCx%z+z8A0P(Fvjv33Eh!$`zlJWgFaMo<9e)WYBUg4q5Rz1(8WK9)BCR@QJ*K zNmdE)dce=GutzmEHZn)2K3O(IK>zWP{wdRX_9+VynP#ShMnhYZJ(;OI^$16P<80Uc zMarYw>IIuvw2cqINsFX zaIJ&>S?wduKhI@>qt<%n5eFnmCZ=}srAsGcuxf;(Std7}>$1Y3CF!NjVJf8UD&4XJ z%sjR%j)-BWtW*E+x&PUJ{4IUb#@*(qH_M8?6V)6J_t0u_sRm^qzcc>M{?+XqGM$^5 z((*fZ5^y5S<({U`=uc_}inkBOKizdZ%34sErzM!FVXo!S1u;O10H4TBQHNP4M=qxS zGk^addeTvK>gcCKi7f>6qZsH0Xd)zxeuN`3Cad+Gw*7!hTV5Jejg`j)&x-b4pZ=q% z)<)T3KOl#a`s!MM)W_7d5O(iMqoMmYMsB*3|Ac~!m~d0s)P}yhZrMyEE9#+*N~vC6 z&=k{3n1fS4gXJsLFG^s->YJP4xGFW~CHrh^?@fa?@!edfsAC*$G0AuST;zNF|3q6m zw3C5@ybWZj{mQu!>EeVaosy(j0_Mr<+t0k@_MB+|-c|GX%uAX8ud$e{W(P*$%kkHG zl{qinyfhn+)5N<05K?%^nf9S>#bI_mq~pw)6L~AZ)xy!NYt6NPH4~l|>82Eh=s=xQ zr#G4FI0i&P1CjLXL zsiAU+qR{D6smYnR6mP=-UkA$(@ZPf(Qik-Ld4i9kWrb1^i>_U%h{|-6>7v%)YR98y z#+HVjHEe<2zeJQjdZ5lNdUV(D9x=noA0~g$Gf6fG25pDy!QwS;4lkC^=@pNy^2Q^5 zLL&mib5bHgP9u%~-~3;Z2_Bs$eCwO@7=j3a)#{w~847h#6i55FwC|A?tPRj`9-O&` zth6*m-HOkDNX3cBf@<~~nmnq*`yOW?-sg3r>~-#-JahcS3)&C_emWG0lx{TZy^eU) zhmN*49V~O?a>8Lmc;mVAR{lyu0E~3<8O`eWGoEu_G#}F>(7X)D8}TH#n#!5FZ>{A? zpdcGgjYY4iuH)6KFNi|ksFwF*({4Y`a!V-FRcAS`pFmbo&=pkYz{kC&GKH|6S zy0VWM6_xm~gTPIaB^PhEN-yRa*4r83CliNqm;x3x0CDV*>cz&;%s>Lj6mS@7ZU9@j z(sc;JM)r0;9{U3~Er~8is+}1L?%QsbW;L-&uYClpN&B@)R_}kEAGfli32mA*!et(y zc>Lb@`muO}@~cT3OZBsg;`L1<6k$A}Nk6QlgP)G{e3Z z2+?ThM8Bs8w$?O?O$rzvY2JXr6#nq6IGt{w#x21TN``2t$)xqbfY}fp`7c|8%549n zKpq}C4fyzF*8}jX4;*-o&)thMUF09Vs{WM6;ebw2`i+?9hvTnAn&iWW;lwwn-5WrD zL>?0ZZ35+_96IxvL&ZF;^eGg{Yz)^m@I=h? z{B*>lb{#Zi6rLfo!tstyes7MS*HnVO{eeL%%pXO3Ga|x0Z7yhwS zIx5I_>5^A;!H47_Pj*^As*L;tG1h;CMX~qvMsu{bq78^SE8GVF!}~GGs*>}gZMR%q zj0w(o8|8Apx7pqDGoV(jxdCPQB;r%k5-frZ{FO4Zs!+g67(f zVG=Vk%u?S>W2M81o?fk>a)W6?ZPKrA=j|7+_5Do5WHIGvXf4x*#6!%yl6rt{Jc=h1pJMi)6{QI58 zka|!e*F^huHoJZ^E;mw?rib{czn14Qc`!cEV%0o=t7Sm_xIwirB(58&L=)U92Nm_` z$sZ*~mR-)9OZq1GxtKA0;qhiMDu?{XlZTQ56-qF<4=u%89_c5_;*~CnE|bGoJ#Tr* zFnZZojYfGrU<++omW&=m%5b!$qU)ueNxRg{p2HyBb>$Git93f#!4mLzWzfJ`DUr>J zZXv}{>h%rI9%Pr5@6=5;h5B;Vj_daA+ivS)_%Tl36qG9>LM^Jk_>Aa9{1W-5Cz?O$ zi0^t8kMgJ*pB_RiGuGOv=j#!)56L2T&M!jtZR-niYIX$Pw(zG1GZF}z_7_t zWI0;j6^=>|Ud$OCjm>qt)dPqUGgckveZADODkk4aj?_COPxMl(TO(|?uKHQPlAL@d z9=Z}(NwOj_r!{MX5Rr*QjXZf>ET^NEk{lIE`#Jja((9MvRhykmF#*x#Ka}_p(KbvCI8@xU*ro8n4ZMRIEYHN47e`DpiVbU`@tYtN&(n_~ z88$ssAw9rgMNwF2G5Rkx9SryQpQ0WZ+lV7m52v)5>+gG4Lvj-F$6nB=3U_weYFb4m zM^VCUSB+LiLtLxQfQeG*xYHg7K7C6*#L&u%$FoBpP40_~OUUH@Mim^H_!Kf%FDz9w z-6g8`?sU#g)e}G)PetvH`Xc`FPg)=}OZpdJOzVYIi~MT*wLYz(0I#fxcb6BPFOg>= zs>Rk~^lR4PQ9oIuZ0_f0{&7?oQ&wuZYU70iwqUkz%!W6(8 z;ljpSSOS?mA&F5Ffzwa~G#1;X=9kin!xwM~25_D`)W`#qATM`OMD*$gh6U}vLb;)? z#me$rBOYjVtB7#txPIq`7*u1myddgU!nQQ|DjHgBOMjCL($p)!pSC;JtT9}k=c|n> z=^No@nV!(Ok_9Ix2V!PT&fcK1LXf7>tXDG-^v4rwr)%D&CO^)uHvQ~i$-)Iq9EVK; z9R=XE(3EWeM8Z@w>p|Ao1`!_0pTRt=HK?B?g)ykJeaXe(R%bmbCo`L@^C8Q+;sGZU z*{M{yW@dh>7A&aG$rVcDM)6;%oRx5?kww&Tk1zTf2j1{Tp0~)Wse|rnAl}7?foPel z)S3$#`{`G-#MR|jf6J> zdf7oMi*i-YSC;i^OL*+WvDE2Y4c<+my(oc?$5rp9--uVQ8c-WrbVtHev#>H%4DlM~ zyDn+p9u&D|_LQ$vXK3O^G8U7UV7F_sJ@hd@vdLKk@S?=u(=(11E&k9Wkduf~pB#w_ znQM+snxonheHFj%JQ6!bBywzG0;EZf4>j9 z%)If2c!@QgmaowhF%s8c(*8kQU+sI5j_2IDh4d(Ca`-oivOC-Z9rWS&Puh0shpWB$ zYE3J**4pu!Ems0cLB$Xm+rjGgmtIFF`sHS6QRH~@xxdk~_uh(8A3J$07>isaKksWr zqP?y}gjeQ7541BpTju%Kz2@6r@ghE^c8qp5JdQrC2(6LvGtEdmu8d3nXgzY<{nrEU z0jeUE-;3K{vx4PX3Y-e0GLzh`>HW@a3xJNj@ZautJdRbgnAF^?aE!~#1}#7{EZ*Vx zi*Si!IkmFjElDy1B+hIOcb!%;)}vF!J*_0p31XGbAmpwcWCgOGvMM;jznk2Tky3c2bTKBnP&!|UiO!XlC^HZv1;U|A zG4gPo=|u@ogTmrE-bPVkN2()UH8jJ7($k))l1Qk(0bZ=fTbd*1fXedflHN#j8Dx7< zeb3V9kDy{&SF_4d7~g2bDa7Y{24|k1n{<6x);m$swzKV@f_uqb74vJORwCoI47<6j zyvXc^aW!4ECUp=D)tIIM15jutT=kS@+lONa+qm6}KWp+2;m7hS#JDO6K4#vj6sJVJ^6m6~)BGtBNC$Zb-5Vtf}q(VM-` ze>FPvP)B^Kf?s5!z$C+}MTQA^JAsf^BznJ(W2%3DQNuUmAt^ZJW!TaWJv3ax&D+jFCubz!*K}XxbTIu66&*=Sj%ozM% z6iINl`DJ}HKn5uh@gz_-WWxB05E_Ljz5>*D7~cuej0J^%D`W*Kqh^C_b^NczS5X<9 zlpKZAw9t4|qf$R#rR=K4Z3#3M1kgawclOu83}}YvGa+%|yJ@SZOc0&7R+F9R?q;4~&I9Nrt;Rp_e0?E4#D5tmKx@HuP(QYh?3J+xklS{at^jjOS~S_`T!746UU zg{P0`{>kC*<1D1^wHRyW6iLe&k*3Zejo;E!hlGelBm{(&zY>usTM_rxrv*&(jWLFa z+d$T(kc7Bvp`@oYsuwg&ToFITyOTKbBC3N8cZpT3okA8`LKpdE{Pp9HvI;#PO+F)* zT73Trs_W-*9#xmiQ_Dxfh3&;MQ9dC{&!@&*%sLeV7IBM^HlYTMdcIz9-KNRu?x)iw zuVqh`v%@stJUhaIPQ7WV-WZPY2~7Tb9fNu8SyP=! z*W-ZeI-KNJ4gj&JxqJW3DTAWoht7y_C+O5D2-g7kA_}3WPzA>8OPFtKI65LRpsn7H zkf13`dzk1CjSfpuAVjd5hi=A@2m{H$d4Y!C_s|I6{u+Ih9> z`fL9!5%%#vk3Z1hEw(baij|}VIR1>cKLPPU*oFEt?$bd}u?VxSee=y1VwR8JdGd~i z1RJjRvwWVkKE*0M{a@WuCTYg=AHhkP7hS)>ait8R1cUb-kV%4@2V&@>Mv0d~9_ro= z3ekDt8C+S(oQP33YI7c#J?ow>z7_G;C#&X`XTA*bX3OkuT?b9@A4#qllNC|dU<5)z znbX})HAt$ZyLJ2JkQ%0Ql73?&)&mU=v!A*PXbuLg*RS}lHmy{6@Vp%!y$v@kap^?a zkGN|JZ*x4HaJO2l)a*u7=8$&Ch=z@GT-TQ9PdumDnzd|Br=U({uG*A;-;(GW)c3=H zo~C4LQj^19AJhBDjI-`ohJ*AHKacuTOV5W-^mbg2DXONSHI{H@$E*ug zd?ybY(PA)#j_zuRu+*QdR13B7KH=|ACl56h3ocFWO86$#xbHyLO?Omb4Ik;QRk!Zj z8sL0&k&;OVHIT>K)@(jeZUHa$N-P_Ob@22e@PXyu0e!yPqfUZXn4^ynW zhZxtCQeR0uH3jB-o>{Y$XC0ddMjI8mx?0X__fws)zZ>VaDLg5}?{6{pqEFHiv8~L{ z50jsD!OA{;!S%t6YFE?Rv;q>J(LTma9emIa`PUupoDn3eYjJk_9u=}i?8o(Ja%2{o znuZDNRA4zaC*rISl8{V10MmUQt(n>Wz)kl(ng!^7xUDA^IuV#KjpOtg-$aEPSDbD^ zD$W@Ekn3Ry%u|RolHb6!Y8XXQwI+flwZ9v$EwoHm!(aT3u3IuZfS8>c2nnDqdQyqH zqQ6n6v)+*N+!jwKxz$SR#i$Lei-8mj$#QIkl(1~=_h6tO$62~A1&K6iM$oKlm%;Jiy9}wPsoumlB9d5C zljFhn?sMMec+kt>BKR9M0SIL!;^JLYbqG=wjyj)hjm8luRMIroJQ5EmP7g#Spmdi< zXiV=Y06Na=2GFreLV8Wn$u(n93x7vTAL4);L<$@)$#(VQfZu4-78s|JWe00`3%?Jd z5kkU7%WGXXp016T`k#tDyFHtzgf@b2rB^l|p9-Xl;O1;H?7!wh{T0GryhvMSILye& zVc7+d6|xXkESyeJo^su*)nPY15LFkc14i4&QMEFiow8UR5GX>u{sv@kdYoIR029A=X~0FN^EY0|GH;6^-pcC9tJ=?{;0c zCZgnypfkVmrr$LR%9393YR5%8KHt@fURRXj)cpE4^w(RSq>N@%)(YVU|H)EnaE4C{ zbj8}!rzjPG($MCrXEh7!cdf5M2J79ELrSH0;|T}bI8|8JplYi3qK%%x3fz@IX=;j> zM%VBWCQ#Q(H=s*TB<4zju6?UYpDB%0@f=Ye+aLBrL`nNqCctF z<=0r|r-xoC^n~0WWNN^|N>YjR#>wH0zLwaOxJi*Z>Yz{)#g+*6zfV^#EeTnCEYGL> z{oVBQmwMhj$CZY{df=SU7^!jo#K6u)pN8RJ0tc3kWc>C6p)~ySa210*0w&^ zZWL+O8uemWvKAG~cR!kh$r~+np@+|iOg4P z&1_xcp$t44jNUtI^-!tSrT4@4D^C5s-`gdy}v8A_GJQGNsK{C<`QzvJ1iWN?Zj+XN}A? znDP@J;phB${Ha(Q*UmLR*J~srV4Ua~6?o-F&APjW2ZI&)g?}IM@7JPcYJij(grH$v zuR>3|Gx=C+kLB#q1GKVx{QIG=Z_(ZFh~H-RVzbhaRNMse0KscdCzTWt=A_t_- z`T9~V=*c_&CM!GgfRWuDd$sBlr%&tR@+#e)mb6lPBac8~-^___mdfMtX)INXU5IX= zc(!}AOWSg2oxwARjfh|=`xvRHcbvKPtbR(#h*)8I56++{M>vILve<{CAZMof8YjH0zE#^j4kPJa!;2wu#z%`3;raTILxxMeHTA-d>yq~?2Wx> z=C{#eqr3iq?$v6qG&JKA$4=K3sz)O~B6+i?>c9<~BjX1aY79FD)5Dm)a|M8(r1kDqv6W5Ix@LLQo# zRvUL>QSHOWWALiXotYBV%tsz~G*NU+p^k?Ff1=uio8`FeG&`8ZQnTY`{6i@{H?$Y& zd#)dpTY&ZA0X+juiFVldSA(Z--<~-m-s5Oqw1PYFDvS@R_@2F;OI9odX zcH-qzr*xB5+jHXZVX366_D9|D92XrSJ|G%#H)vpOCM~Bj*2=K{?8~sRtkvwam4cp& z()W|@K&aC_akT3cGQ3yjyP$8`jtk5ys2WG147lFhv%>T%<4cd zE~bVF{yYHCo((^^jY!E^eT_8nwBRnyUL{%4W&Ho*`82!T ziP|-_6l>Dka2S@Gdh9dDXHJSaUUL-pYhGL#KjcDXC3gC;Q{LI(T)6QcgG$iL*-})} z8E$JYB-1&{q|w0H-Sq^P4Rw(NmoT~BnRu%~loR*A;6+8ljq0VeRrn$Dv6sA7AKu)7 zOA6N2&{c$oG#oo^iR|d(T&292Pdt|%d5LH627*4G zI%s)|OPt-VdZpN*oE?CfOht4DpQgO|maa&edJ$1i0A}rPP5`t^+9rtW_K@ZFugHog z_WSXD{kp>NOsHsO$?N~#ue8F39@@rF>%KCIL%=HWN~_DqDIMpQ;7VqC=yAy|cD#fg z(8ek*Eik<{ypE0OC_~S9!JSiY{!xcc~VgzF?d;de+WLEX&!cKRa)^!}wa)&Ck;_uf*yjal|{A zFcx0X2-wn~^!4LHX?bq3Qr9{mC~#tHceuv66c7~L7|^?63u#9^BCaD>^b5Pdi`d&(5{4ke%`$n7b`x4c2x16 z97Z?~4WRDvV>V-I`8>+%XL#9g)>T3u!_4YJ-b%;^{s%kOm8 z-QRfT*6;K+&`F1b)snwH<6Q(GzT=OG$a`?BWPGyt$>o?7O%Ne7pw4OEL9H@&*wZtKzJRb&so zuN{DDgrIh%onmelnAJebi5=oz@;#6>dhBYo8H|l9BCfN9(Pb~mM<)BHf$gw7wpfo4kc3{qb;5} zAI#MK26=Z!ldJ>=(JUHgz9!CEdmyToF0CzQIHod{vKX28g4$4?aS7DEmznJ;VvMz@ zOPg6g&s6Wm_weh_T+$w6hz}TQvdaDa(aLJG>oVZls2k+A`Umuj(W`bgS`ICN6F{1p zC8X7_EtW1;>e?|l8M8zlJpudvVyyeXnqzs^=3v*)L)Z>Kyavi!v|`rh{K)#w+`6sj z8N4!AmQaGM)0#+t>M~+eb9y4yFX(T9a06M*F z1K7b0B0oc4-B#q*SUODK*)R%=h)YX5G~X5DA+{)H0606Vi;$tDG+EA_y5WZO3?QSi zh8u0iaZSNx&MlAsJ}Rl=HpXn$d^tlgO7-bH$Hq!siVdvub7CJWd&%h@L?F=Gaa#1OC&GBQWj=i8$w(5Dwc7%GA zdCLiGfH(ZHDC&CtdfO2Y%kBjjhK-99u4&@t_?UbzGB;sxtHr0!5Gj?o)?jY^PWN#b zQVA+Pt*z8w)%y>&-Jxl+0!lvAsb0emKvD^g5w|i?D{$PUoUu@10?ZEowt>mIpRdT^ z_XQqxt~r^TeLQV@Zav_cAU2hKW* z{ywA+9>0X^$f1+d@9^>HsimkJVup<#iYRt_3EX{P=cxl7?unZ|BC5DYnymT5Kv2X? z8f_p|Z6|CZ9bFxQ(ByeDQ%L~t%jR+yncz9*8zW01)uP~WL|TZM3nAj(?R6*dYwj3nWOBHT|HWO@Bchm^8+62??Yjov z-uI@r8=l=Z2`2LR*E!dJ#<=Q&6`ZW@*9oS@++d%2|P6P*}{MBCP0le zqJ<&Y5k zJKa4oXkjk1DRd_>X+|9SyBR^#ZqII1Gc8svCiT)K_tydj(BM%PTW4|hS%$PmnUKSo zw-UXXrah5}q2uqZ40UCZ4B9N&Ue;q8h9dRD`t;1NXU@E$-zXCN!;^PKqLXi5zAVlz z;ZDiI{pL6HT0)fz2A3)=HZD5v*Aoaqbg`1gkj1Uz5&)MVKFI&^Pm)CE-6-sZ8UOLb z9qJ@`;Q`Tula~G6F{@&`MfZM1iTd)nKY+D)(YKtU|n(wQ0E&fE!lAnKPVv10)~ z4F3iiEc_P*>VeMkkLGGh#HL1qm-OM}M{Sn`9_(I=k9#9}8t8@0eU#mYlTVMthF^Ei z#qqtL`->TNR<)ZBnd2|?6ti}sFlage|D@lJ!kEpq;R89wKe1S3xsZ9M9bw{N%L)_2 z$}x|%dbR0D*m=M+niJyOOUG`EoZSJ>(Oy38N94EsM4UxO*8Q9huSpVBILV4^ApKgp z(z9(dkwalP5>x+3QHdMz_~)^m z%}p=Bc;l*Qjv;E-=yit1%dD4k#6(3RAZM(0c)4))W6=#qu7^!i(PIF+Q&AVID08Bf!{GmK*9Dz zw9sr6b@M$?Pr0Vrj)>4tCJx3YJU?i9U3w%+V?`ID-;)Hb8BFW&$nk7jeDX2>y^E=A z*ux)ndX^&(tFz-8>$(26hnu%tMLSwHayv1K=8AV8ur>Us2hWAG5n*>{@{9HX=mR%k zZbUPMDf{>u@i~>>((_K=x~<8Xvz~m)*lbnAlodeBUGG*w4ekumbN-qg?1#kZnPo- zVyK1wYHl&DD$sD$5q)A0??sdXr@+S4d8#)?HxKb-p|rO=0uS+1Dx&V-k%YH~^aRnc zDp`CP%|# zS#j_CLHA~CoCp<3GO+L@EU-bf31G?dXSIHFXX9QnYI+oUB^aqmcBz*U&5Fhk#u;=I zADAw~1%GG!zMhZws_)2W>>%y<}%Aam!2BuSQ*IZ^#Sn1q~j>muR>kw!x& zf2Zwkp&L%Z`Ap%Wofm4 z)k0Ew!_4hVw?%XdYjU#LdFH0}nHjHbO4@`+eN&)|Ryra!Kw7IjA_7qOwBttCN>Nl* zm!dK5HzJ)s&+e12tdF7(}lEZ9H|CIqL5jip~%)E>Lob)?-W#3=4k$ByEU zr!h&m)z}2z2SLvQ{DkQ=BwS5~vWbtRYlgp;Ur}zoDxRrDh?8(ho{3yA3ux?zs(AaE zTk*{HP9rcKQ~?eWbjdylpFH}1IfaFElJtCF(@iF>wgTZIV^Jbfw^Xm_n$=RhsWBWp zox#x!>r3beBrq}6h!91KSr9&}iE zRqrC`&>dWrx5bnWJfFQ`p83w;K78_yh6Db@eUk|Cuk}4X2j5T$6N$u+y$Vl~-E&p; z3R-Cj!JS7?G8?)j>MhBCV*SOFeu#jhgf)T%87PBigNnNY#O& znGSJJlwM8p=FRXlnAN;Dkv=8oKF-s<&xQPSjS#Zf+K48$Z|J5Mc3y!=p9S<=SC&-&JgP8;ZY!7J0I zM_Okt(0GuIA4Xx?&VY5H(6ug{t)A7Njg`8{&?uLp$9fAD9n4@%7jtl!S&NG#Wvo)j zP)D#wCn*an{v^)%Lv&@F)~GVM&?G<$O!u%cv}ec z%|2w8A}K6G<3e41Phu9pwGJK^T0d}wA| z_c{k=&EV+u2av=2u?s1&)U9eqNCO zxF4-7IPa~ii*w(`)14}}$oSKKeA_D?pqhDJg~no@2J1!T^ed7IEJ?|+N%SQU>zfC7 zKrK+zDLrB8AIbQ!&}+j9YEG6^v|rRE0Cr<5))f5dr*UQ>!-uV`RgN`kg8Y$sIlt<4 z!jL6>H{`2x7Z#>!?yvt!|42HZT>FMSe(DXaGLR_3;hGg%jBOO{9KzCQ_gQ9wHNx^T zx{KA>Izm@lf4#M?hnlw3cPtYj%zA!kTG{<5UrvJkd*i!$qrpT8PUb@X_m%pJeg^$f z7&m(9)pZBRc4=Ai8@Hwo(@rI2$a+F75z}P2{HM zN7Ur-4eugJuAJ3&Ax1lL>i+i3Oz;}DgsoOk_&Jc$=+xSA2(Y#*s=qq+f>x`RC0_t4 z)pR#oURR33Ia#HO`f65om5qmt$y==s!HEHV)37YmGzEHUAg}z2Y;x_lg>$+RPA(Gl zIvcZ7#yoZE&rYEK;1{BEhju`q6Ryax(^>mhHSqqmz=unU`?#aNC~78X?l-)#0#)f< zc}^Y6+=fPpqd#qSqL4(j>HI=pgG7F<<>YYYO+9_X)ox(=4uJyZNI&bWEMhvHi$b(w zXuuesga?OuuI{JE~n1J3T`iYVonHr5Tj*nH1BToeVBnuPkb(B_A7d(X}=M z1#+m0Us6(|&K58H@O>&|eP{CH&j0UgIysD?Lpkejt6f8`oraA!F8mLq5O4RgG!tts zm?7l`y)G)6+ux<#7G2ijB^(K8Q7(Q+J$`5Wh2BFt&}dzz0|4aI)eK!FH$|7-HF@I1 z3E%m6cf7G~XD=xZVxDs$Qm5IYVlm9%j5#q>K)HuPVgc6=Q%9}uHNNXD#I^PzjtPU% z>9-SaoOtDw1OU28Qt&gwinw#?n-zRSoaWofeUbaba~@on9Ijd%TMx5yks}7vFguMY zXpfr?YU=&7D=Q684L!J{G=37y6BrQccwE0jkqw_}eW{TeK+J(nq9aj}{TS4TQTNv_*oH8?rFY1O81uIxNmd~szIpt2ldr%=c&jJF4rwqJEV8pypHZp}%atI%}6LV7l>baPnBOCQ)!g9pDvB!_M9PnEdkJ4egAUg z+aLJGz_dTW3?{?jcEm-Sb53JgJsgZeG%-KN1!L6DUf%-}Vw;+p$QjktJ zqBhCtW2dxMrAE1`J3tiGOJcvJ)OAHa%@SSkE*EFJLrwrap>?&DogDpjtK;sg3x27+ zUDv$-awX_5yfW6sqPUoW(YtWd>YQp}b5D-M0Lm(MOSo?E}0Q?!}6bnL`QiG|rxLp%MdM_7Ri=rJ&-yZ=}em|DLeC%wj2bwHiG%w#i97pl5T zW=^hkBv^0>uHr}`I(^K&TL>1+HIV_J76mMeuw7K}cv_z1pZ|-N?rFXCsRfERSji%@ zD06X8sfkvN3PtopVosM`tG6kZD~fzeS{R6=yR$l=#o5tv{FapkB0=K2_2=a=h%0|P z`Br1%1pjXGgSD#|e=cILj|Nd6&vFPYlkoirHqxY|>!%hL?ht6AKQDUj`e{&a_{On{ zeX|aQV%c8LrWWsl=(vJ<_?6`8R3ZUei%6P_d@cNVhM zma~cYFZQ%KMq7Y zCV($&6h{fZP0OftUk<{sOwU&_4I7 z{;GM6UYxNY4>cnEC+q&mHC%l`@YgTv#ZfUh+b?dRFR5RHPaOwO%|oq%~){`PG$4p@6vWe*V$n!xz^5B zUtB4ByFQ`7H6fhHKaGEo%-yC0D@_W9E)($@^kD~BBn~v%op?NhSR2;4NXXt9+>8&k zNTDS(fN<1n;D-amd&mp`&iov6ohQiS@33^;0O_nY=5*b(SBMsN*-I)A$og1owAsqG z^J4!%H-p!-fURzx_5B6&XEGUGeRZ)Jb82k+8X$;#m$k0C46Q5ib`ux=KoJ)QCTTDPcVZztxvuWs5i+2H=V_;E(2p^MJ@qPv9RT0kTJLLtx83NFSf*Kl3AG@$%iJb)U2*t&4E2>4wa6vZem}lAe%`uwCD}SCm!asc{l3`5j1z0In zrP8|${imhjNMvir%5?`sQo5Nd^Ps(3Ty;Ln{kGsK?~$E` z1c6_sU+U4lt`#uWCoAh0^<9|Ow>d@=z_X}?votln%kE@|?#i>sa8hq{Jq2{|t)L)C zlz?u0{g{SL^#lhEnAMb*qN4?D=2xy#x|JH7aq8kAq->;9%3_CcB-j=)77|ybQxh&l zrf6UmF1B1;M|L(lE^?`^)Lbb?&tK~X5Enjo;x{6j<%Ny!X+3G~wA(SB@%4ZF&e#F} zox!g5)kXlfr${dmg!8c}afa$?$uCo+x#-7P6#n0hy)Iw~_niZ;4%|~?XA~a$L#rMa zyP4K(T&Y=5En#K(tawnh#WdKt(xNUTTKai(Vy9W*wa$$zQg!}A={`@ZJO7c-lE$Ed zt-4yQF$;{w2jgpvQynz3HZ(U5ppTfshaxxNu8;NGdePy~Po&A=rAwj#&0lp(4$MFp zp@nC4LNSdrI)2L=%F&HIuh0pO%=P+dq(}Pe?z|q+B+S>KoL2M5#3{(B-!;-_m=?Wy|1o!|UE$+O#!vhCi{gpN!wv zofxPZhar^TEM zxmAUs0EULtUUxrk>B6j*@y)mO`^^9cA}>PQGjRR2JbFzdot+Higim+ZO2qrdc-B*r z+xu?fo97o#LVmW)uhf?kL^j5}IX&scwzORBW{iL9)N@*CoLyN>lvMpV6BhisTwC>c zh@l4n``@RRzrh2i7v%Ze!KwA|#N_utb1n7r5whCBS5wlHq zD%7aVw*dm+^YLd)?9Sw#7QG!s*UnI6;bl$Ilqf@#>uFd?R63!cf*;z}dqm?%sqLRgC z+~{sPYq$!CDzH}34_%acy&6x(vX|Pp{lcy6=-wy|{g*4$Rh8hSYchF-esHCN{JAp; zV~JIChw)3#iMcK5C&1{I)TR+pX#CrlD7))tDqcO9d^`R?R{%b~9*0J$sC1zp;dGx6 zG9yGeRu`FgS%o7kDT9sYT*H$)S)*KXNGSyt?#P|ZgIGDCsNBpXdDaqLL1Bi`gj4}G z5bI)P77b`A`jL6ir?ai7vfd(=>05xb;ZMh(>o@x}@eXMzGTJh`iX1ULpJMT&4O+77 zyRTucT2DolJd{s?P;U@wUK-mqHsWk+(xW+h=fk{U%WF8P^)mJ~(%%?Rlduv>fn>U2h`pjU4S%6qRsA4$fO*dRD@#vY%qbTM?qM! zn9j-mkz@CN`hP`61n;^>rSW>W>549emw@=T7DI|ynEbd@%6+`zY3_O;$et+WgeR24 zAd`uv#N2QvD^xWO@LFoek2^lI;#%ZV)lEaw%DP?yp*YN|nG7zGx3NnSxW;1O1>ed` zh6syD@zXbT-H zG^sb1UlY%-kGA|q-qkd%Qm;3VFhL}319S^&ctzpy>4_Q+5!N1CCJx4D$nw46N3SS$(yqGBw71Tyw?zyUu%^Y`q7bEHI zNayDyV+|zn7yX~!4LwqAgQ?*YG0z=7+qbzlMxst`6Y76fDMzZ5VrUYWN#K1vV9-(4~fGnk~XR9o!opbpa zE%WU+Pw1^2A8k-b?mhxO9OwINcWaLG9DhqtrkVg+NoCSTFpEL?brKI8`&0`EK;Q@H zF^{ml-k*G^QIz*aTI{weQ)^hrp-roLt;ZFXvu{T9HZ(2kjHZ2S`MA0m`drP55n<{6 zBKBi?Vdj@tR_Y#H?vVw-+#D_r*a$EYP7S#>M8=YP@~l&Wvj@#NB0B?zpCPC8R$}r| z^`_EX(DxLN-gOt%?glA8q79y9T?FI*?NW6v%m|bRqBMoB zBhF2Zkx#&okjAEI9rFs^%sayTjogQeO_BGzw@Bok)zHv3X(U}XwTR0tJ)}gL7)#ZI z(sm+Spi$!~4zA)FeMger2UO9$_vGCuG?Y@*=c5y3p_N%~al6*1&O+Lrs?p-7;Zwhh zN@t$ArCo$a^7;6CtLtM>*UTTrpJ~s6N8BG8s7)(bv13bj?{4j8F*EF23v26*FU1>y z_<3!!&N{&yS7sK05Sg1^H`O-0Y6yq)yxz)==y+QLn!QIJg>^vwO^9f#`b(~eXFu~0 zFSthnFK^P!OeQ9Ld%UAm_r^QuE!tNpampnC4~(*7~d{IPo_cOS|9h>*;f^X(~9|ZaM@cdCJiU zW5}GZD2NWGgm-XEr#_8AFG>M*H$|n@xtjhY5-F-6Ky)HuBy*^6!biZNgNYP1^eqYb}}ZzKm$sJ8r)s5mes>BBo#BOZ+JkAD;$$ti9w=qG~#4P29=onQ`e+rz5%mBhuHj#=>p2qfar8C>BW zQ0EUA?KhLV*{hb%hd@E~Fz=pk%Uic1H*)uU3<+P_=X#B~E!S{c>Q{61KY2&bMAZYN zVp_lG-Y6}KjV6cZvPQh1%_zBI3a`Jvf$JfL+HYr}{K|?;>*O5M>kU&K8D1pDo2x-D zv{Izv+u!^BEK}4_w6l^MW?eBTZ41-vpYU^RZ^4t$<;rtlr;$m4B;RJH8m$Ad1 zkA-S6E)PnLtnFccbJNgLnowh*L=_l)Lb-S}_HH)EZr>JJTYD{WXu`AEGU_*c8v4z= z=KZT^2O4b|6!clGRxE)e2FF%Xi+Nmp1xqLQ-VqI+J&}@&{jIw#uQfSv4;o1OFGL%X zb=}w|k;l$y4FnywD8}XAfJ0w40ygY`m29a6y?4zHSpFxMX^0E)8zh6 ztY9*O@esJ9E43bj?L2ygXpe7ba3DJPMv0J zp+B1qbu9ar25q;3?rxLvuxS%L-*$VBrr?@2o=M~kj!{vNT5fvyMmzQmd-2B;qk zTxk>*gxuecf6+{En3751>7%SyGP`v%aTv)$&OpF;RM7j`pA1O0z&L3@)iq+v-*qj<2QSa&i?3Olq zdAX_A8%80w47zzUQL-a>s%1$==8)CIy9=k>9p8`Hopn30vh3od5#4pIUv|b8l_{o8 zi)x|P@fS|%qQSR|fE1eeYW%fk&H~4|x>$WxOpIhSyCfAp*Yq$X$QiAKG^}?vu^k+- zzP+)T$=W4qJ9G(^#+x$Ium$5ymJgC3%D%%wb|-9H0QUTwB6p=45r2_gqh{qP=7ZoE^kdv{S-;9hV=R?vsC;H zfF1w~lfE$;Sc((RKO6Fqk_eizDbJB1v$8*R7HPK*$lhpoIP^NpF5Qs}rTW>5!=#to z{k0T@xQLTK)H^IUsN?!v_vX!(SPo;SxWkS^ylf4Iu&+ND~(b3tn}0;kB3n-alur$>DD<>$Cu9NPcDFSaIC3 zOD9gojTY03C1!!GkfN`~;nCCzNbu#@3;rXotp1h8X{A(#El0PM%n;5(SrmBqar~Kd zFEB{-9NJjzU9~Qm@xHC(0~L7}UyX;GQSVN1Y7%ObZESdMHZBbp$CVYYZd53|E|-Rc zT{H}sO_GqmwDS@~3g2|w8;@EUd(I1ykp4&+@SI>Q=XJDBM)!CxQYOe!bg8w9NHV;o z2wtZ$BzMM8&l`z7i9^?B@YJ zmc+HaZibEAMjy9CP_ODv8I=rvV+jX)baI6OX@KOfu8}6`` zVQIAF*bWQ^b(LE+00b=+opeRgNW`hU%!9yu2#+Jhh#a421?Etecsc`if*=U zGpC-a97eE;c~JFlpy7Guo26Po&ZsxZR1wC6PZEGX+l`YLq~Z%!t(_ zOLKF$e)Z$jk)bs`yS%DD-qakwHnw-X!LkV<0=l05L!Ko(ml>M1>V=AX z&1iSzTE)zn-)VI7m1fz!hAEDc>GS&?!*fMd=e+~(B6nd~#DMme&jhYFYOY(xZ8jeR z4n!dY+xl*xqV5%jfCj|jxZ`ix_B_!-0o3}eBc!tKc(s+ayeBOR3*JR7zZn8yCEyTR zBzGi!+#nTGlrFC{^aCZah^%RjDSsb$nH?iqLzB!5g?@l~pfMtCQyKNimy^#$C-XF* z3hHBP-J-$nO+e{^g+eJOp~>3^VKn~3jLq(fcNd2!B@dJS%ECLg$8yUyecFlXPJ^Qw9GiZ1W%5j)pJ}2txXa78a@axF$+AfqTyQEIlOhj zJB8uqRJ0~p*RYLSk@U)*1^l0et%oDQ@+V+f=i!gmAWK->+rQ~`RtvKZBwy4kB8_mq zx>(Vy%zJ|n28XnrCPHq&G=S70on!6J(vyM6iyPbxM@CLVB{6J+ z=mnq(mFL5WXW5a&nKr3j2g8Ak;@|ff%p;Al6_vHIbhFfaY8b}KFF9$8A@n!nsR^!Z zcx^DOx}(+ZuV;+@(fCXMg;=$I0ZqRiwm)7x&XZo)5_mB!b(B2eMU?rWcd>iRBc`K$ zM=g|Bkl{fXk`EtD+z@}|xcDqJ=QH`QF%UoN@3`v|JS;oMRFNhdNH?KjgZD&EjjNXQEAtq2@xVsV^qLzpBg)&Q zxUODoVMSCHC%M%o!zbh<$ADi$qV>Ju*l#wfu8DRb^)uw>V-CY~dXdHSu^3xCUT5ee-MUw|GuM`JLVrw=dF1Jtd5YP$N# zb?Nn&g3Je&<>CGr#!IEQ6c9tT)RQKMubes)jtU#MmFHnkM;ltx<(|AVxgSz2G0_z8 zDjL8KDEXot(YN!#up~Zl;5zwu;Gf2yPkwZHZ^hxiGmCU`Ujw@VfW?!o*h-cw`?<+v z-NYE&-xOo8gx>gMZR=dQwW$^E2Mx^pYW*IiJG5JBE7fJdGUE2qo_jqudY(kv;vCU5 zIo91(i*^t{Ob-9%v_^{2^do^MGoZfHjqU!xos@7MB@djr>#R~JGrQNkDO~E>t_O6n zTw)q2VOM+RCm^qw+TLPOw&PAw{7uimi~HmFXA!Hgbdpu*v?(jx7gr#t+7%fW=kQr) z@e{nDVa1+!`L=keg9YT|C>df8HO|ToYoXC_^{&5tJL-);{=dfW=^0jk#a)LOn?;pw zQG+6X*s9t`g?_p$n1U{v17o}71r5QC4IEl(t>E43UYY75dNoI8p0bkmC?~zRI00S_ z(XW*Pma(%w+7+${eU9Kc(5b0H8QU1X0IOx~A;Qa49O%($^xUc_V@2>a6*fDDh<+Kg z!_EbgG+)+b6h&qm$I5nlsOje2lQ_Kidp(2n40ll2hM9cq(;xEUh@0W1Efm2}<;s1c zFz%Fo{11UJvh0Xd=EKKYU#ZS%r=U~-I@|ZyOOXWQW@;BU^j*od#QsELmSi4jry*L# zcD6H)J%8+lnDl_K3ne`wLy+=!0TV!ri#{&^NFDJ2gJv3!De(PFy6$+l++oM_g*Y*Q z%bJgd+-vjHc(FwU=SK+8hZ-;x-SX{9ZXlQ)O$|ObV>s3&?{bCKRUibl!Vnlllvs-6 zWdU`Zlgt!Dmw!d6?FVC`hI)&6I2c0!imN!Gx2$Xtr?r>$3L@H4^eul@T+d-`;`^F= z?+c$wxF0{HlIL9wj1$Kor-f$rC8L5RVG*t~vc zs>XoD`qRXFYup&Qe%9UcC>SjnL)9dt10zTzW5t>fxDjQZI8ZtU<|`(UhBxgL0Nq^_bA7V46a)f?ttj+qI@Renvw{_65Y!nUGj8QFw zVH>8%UAGSA2-{hrn1);)c)++q=71h!<)JigvcOTI^$U(n_f%7SXHgHT)~@N#TerPz z1+#o-{E_6_3n%mx;(cD;rL?$mR+d}x!{0A-AO8FPCbGCfG;)fLGDC=b+#6 z{`O7tG8vR#^Qa?uBI~Lbz1W}=OV9ojC)87_{GemLsv`$UyB&EJ#PTYQax5qC(kL%j zrZ}8t{c1@|$0679qr0_9)8$xhtFAl#TAWs-CYh?PryP4$6RuX4oBsE5)4h+6|B2FS z{}cmCXnswe*fl)~#hrK|gtpN2(-eW=ozUC!#YuoKU_8YVX~hSlj3d_)ILWP$BIXG& zP;=wuPgM#)zuNZmn)A%6_h^Q#gJ{RMj(oBfhx!er&#gqd!dMmRKoL|nyjF?P9n;m1 zGAg}1^5F;z+;;p!QM)k~ZGPlx^R&kOY=6VAw)$lMgSj{Dar?~D{yswx1Ob8odAize zNp4xntGw`{X%@*U(W=cPOR_AfWfsY*qEtoFMN(49qrtR06Ce+Q$;^vj26^77Wy$g) zukyYI6#c#OJNKX0Id{3IpUh160P&37Wbwb;>$%Tzo$Ks))W@)6+b)G0)n+pb!(4;C zi&O^<1ap!qNQQc`vZlA15|TZ%yjgLpvsP(HAY0mY8|S%6P9HJqYI|-T@HnF?bEd>( zHi&BHA7_p)g^kAdyLG7V(O0lf+1&EH>*J`2eKY7sA=wD_c9Ktb2MPSBzK-1R)q-Af z5bi1tdjki!0!luV#=*$c{AjjC7d1}Bo4Mupl{YuE-pvgbXB0cUNQ~Fdv%42dtM0*A zG$3S{o+CI1`n`#xJ5bwnA42-8*<-E01{9C_Y=A~xl@N>m%em@Bj}flc8b$)Bo3L#> zQN6u8=?AKpC2NEs8Ahkk9^h-%E6m=`!;r6e4w3C`J>SZ3>htXG%kBuaz&-xFhf@m1 zXrys$Ze5c+;?#e@TKP;H{KWH@HE+8&Br@2x`v?{3Af|a+y^PG7?i{+9=0Ja4ud0+w zD}K~G`9Eg&^uv0+*1V`C13;Ln%_hb529xHA%thCCuTvsj9Xy-quFL?(tD7sht*a}t zM}VylEWotHVb7w|vk0%{*l$o@bp);YT2x1O*lEuBrYSLGSx_b$1yGbISzT|sL$0*% z{>?5jE7AeTZ{eWTkY@x8t&xRxH8)tac$CJD^)Nj6o~f{EYaxLB5JYW{))Xz6V*4FC5pr zmMSg{u%ZUIhNHzq7Ozh{at7uZ-;~Ss0amWoI<0h#3|CST zy_;xw+iLrT?p7XfT*cqzk2K{zvI31Q#ppKG5ahb2vosQRSTDz``|a$Zq{hAj?@=w? zR4ABQi^ExM;RL-&?KdeRh^h~#6v_s(@udc;$TEtp+v_s$enYCMjrsBM%(o1xexjn1 zf|m@SFXxA$r--ns)p#!8bkta}Z+h-`;;;=9wS>W}q2LXEY*}iI+oUi2)r(qkAdSEl zL2MMOG8tI}oYa2P3gmK*=76+w;gd|-NBo!MAq|O{_BKztqcpjNXC&T&iJpu}{f?XY z!|8`=I+EPe#3<&crP}LmYyLK_>(eW~gbdv3xrfX6>{zXu#Ty1w?vJwpFRbwgvrlsj z_(n}5!x*sbTU}$0Lf>@^TY)%_q8`>94yaU3Ky5Y|zi+meI%IJOeP-UBBOX_svAM@j zwTw!IiV~p~_J#n2w3hAQU3bRt<5y2;E1}>}akG#es&0&ouNDPhM~jEe){gllwP?-h zuocjdA%1%G!SFkK3}g(oGr-))i2uMNj|Q3WdN6wr7K5YIS?^3g*QnzG)Tmla-0MPA z!ETNZ?R3#fee%!Khfn@XKmds9FW1~!Kn0lWYr@&gTE-e7h?hT^WsV*TEBbGo`oXWt z9!ll2^=rf8f39F(3!(~B5B!Ws`s8B`BN6rGdTG^Xfk7ad(wMEitXR!yA$NP8VM2W> zb(cc`q+%eZSZ2wm?t9&e{5tL*69|*VOo$i*EQ%H(o-p|D+_@7^e|-XCAY0Lp73s&h zZR)r&@=&9&azbQTj92VO>N7si$#T~P#cCYY7xr3iKBfbocJB9_3-i|tr?nbxMtGZ@ zz&RoDU4Twa6ILSuRUT1iw1YsIKa>=hkRxcT6m?JGLAd2!%9Kg>cw6qVVk9=9Y3(5RF_QrQJ z&kkXoeyx=^yNjZi*&6sa1BMH&>bKJ$PoLJs8yA~r!>qED9+}9<7p9v1WEcbO=2Sk( zlE5|equ|S7``{y!3~CQTOB(JTA~mzP9saM)Rrho^64qBOqWR>)X$BEq^8|w!ZAu-( zbg%2zf#xo+_~1O4eh8c7I}n$Ds4LJY!Nlm>3b?H(0Y&bxanAWxS~%%sGh`a*sX0Pc zLy-hH33aiT(JQ9kMKfV($IOk(#{+Z0`1a`TJC1@y+qtH9B_+kY@88Y7(bEX$uK4i@?yPo83Lv+P>}( z1gbKaj^S!c_kf}bUB_sf8~-|LJXDQ4PTxVyL9Mq`f;h0)hd0&C<0q~>ud@ZSIn-1T zzb9ihlLi!40i8Z{UILU@{8!bw9tp)k#^+I#zYaxY!RRV|_TQO4B;)Uh%zx=6&Bpq~ z{od3eN?MWMXwhLxt#e+5q=-Uc->Kt}0B7Vs%N8+KZ_iqGw1%67Qeh$JtEE06M)edD z?s1Ok8!~*oQjI{N+`z?Ytg8<9?MPgoLkUlx&da?0*`IwFOizX@clK!dj{0T0Cu=LZ zi%V8xhmJjJm4O+L*wW?o)zy%W$L^eXUgI$a*@9Z78RpP&z0nefaLlb_YA(q1r7CU_ zPbE3$8)r3S>Ds{6;5wP&(flhf_)%9`YRIcR*LQ_p;D2?;!kK4YI4wbBTZz&$+3A#! zIi|(x5{$O@rv$pR%oD!V#_gf zMQWjeWww0Jn`sQ>Lo3r{_(o?a)4sQ1mir1}Z9%gtQebIzt4`#{f3 zLpvDGDH?PQXMT1(R{2L$QH0RywGF*~*_jZ@Jl7vj{Zh|QZktpCiCy}=c5UJ1nq<*I z?0$6vW#D$Gf)jXOpqXJIIchms7L0(V6fJAurw6#@J;ZFZ*Y+~brvJ`??? z$Yk^s4^;k?oT}y98+v*0WHcR_C9_=2_Ew`%uxf;{l8-Y>AfErLzj;a2$ART& z;2zv+xf_4E?k8Y!Zs^$-lIm%H7QU&}I6XRtB7!;Rm?C2iGSWu%#$u zwhYo&Ev-)?f=JxY2b%+^;|4e3Wy2D?zBAd&0&7cUy<*UI7d^P_wHQa#mo101fka8< z$$Hgje*pcKo&iU(n${o!r9XE9(}?sq9KF8hcsY2sGOEuaylVs;pK1^C*#Ovnf?e3u zt6M|1XIE>W>Un{^VOwG|w;Fw>PQP(Sk0{!ru5v`9RcG7jB|oD|=Sww@xgs40c-8d~ zGB%(q)wgRYdaF_B;Rw=a;-Xb)j%ZK!rv{XLfN#wH`&eVupSYwgNUjM;d$^gMSMYsk z2~s&W3Qr&Z#ZzhpK66%?#%ArB+Hir8zCK%RGJR%^cz=kKV0FbWLAp!WB}+?xX`=;Y zg5GFyHF6sv@rBz1(@jDWwf^9+h)@jG$%5DDEF&sANF zv(NCPK4rKTaT{5KBn;8UEZy>L9EqQ5j#oo$+^RYjoJ5pS_8>bV%%Ii)n@6kdN89>_ zQ2`Q<*WyK0

    tVihgIg=XBfs6EKoR30Pn#JH~vamR&iyprIn=rR#3IQIA7EMLWG; z1yPRC@O&R@<%Wk{;RAij^G`T;iySCjxtj$-7EWGz>WcIfD`cCLoH(P6FUZ!G8g>?S zIfJ5NBe&pRi|{py-CMICG%h5LQGe0Bo6wwVK%cyirT(pE@_eaYv)mK4u#%PUgq0yC z|CHyX5TJCU2ULb9>$6moGC+ozhoyZ+FG1G~?;au8$39#6$f)aTLoa4%@_mn|Vw!-^rETUZ4oKtImz zE?mB(FGp;WWwz{=r5$VFuAF%GjIP9E6ySE|<` zcb*WVuAn{Q(pFau?UvSOMj^mX1`WxkP;-(IsZlnV3W$Ql5v;#KmHRtt4w0EVeWdq* zFY1Kb1$}^7)vOebq%`hoCxmoB@{oLbDW0u~d)2IT)|~z@o_`2itrkb$W;Dx7wxEn7 z-Vy&Q_~NGuYE@nD##Tz~n0d>` zhv+{R2#aQdm&ys!u=a9}Y03s=eTfsb6I5434ZZ zL}gY>g{%8xi#Un4m=pD_bgsTN`zU?>!Tvk*N{JU**^*#J)kRk5yG*|od-B3528MV& zOS48{@ud#QiF?~8gwiy;qwA6I@;0Z@$0Jtgo7K> zmf{wrLh#CxR$~DlwVPF&xp^qp+;vUa@;qFb<&el664-c&BttsPStn>mhlT%13Jpmen zU&l|Zf`Koc4hKn4VOcBkqrd>@Fd4X_3P&Hr^LinW2W@-o_lGl2I3TMYl{2i>rHof^ zynB=)Zf^6bc`WWBcWS(;u-*2yrXAtrg3Y;4NETYW-G8-EgU0L0 z|2ey-ePGtUjioyM^wUr4jcol-W?!XT^{*v%SX&A6;=w|G{*d&G2Q$!zT9+4Vdb*j# z2>(nKEd#(Bx!;20#=4ZpJg$50k71ass+G$VoEkn@hN}rEA-YsS8LxJxB7+t}R=-xN zPES6BKQ7h;>M5GJ<_D#}3lWp%XN&XG1xyE~3HLj4gyGQy{G{E2hGPW?3LJ*+udX%L z>k=_mDFE}^P+=Nki;FP^NAMLa*e=fr5`|<8eaC+>k78h{64Bmu{m4)p%wtNd^)AT6mijanpht&+;)XD+7!e&uvBe5*O%-BzDzO3(va zkX6sCtd|?oO<2u)twZA%(#W?uH;gw&jemN<9ZRHfdg7-!l$buBFY1n3yiKhr^)x`g zezy2Oy_||Fj>j-3N}{y~j6 zXYTi}spk_)W8k%9&FgW-6p*1YB?C1uSTR7ee1ifF(HId-lz;*<(#^7KEz*>gJ}Cta z=j`rpu0F3_f|HrD11QbWM#sq`-tjpGgO~JBTdu*@pKp2F z6@jc~<2qWTweOiMImW$T>;$fytyL$sCgbJ4avS z*+~q*JQF}~-x+(D$b36!ociU|mE&480~VtG3`$7TX|2l$h;UvScGfo!zz3dJr)JQe z4?BfQM`MFjsfQ+JA;ik}he@VxAOcrQb+lZ)b9;=crxj+lmX+BHF5m`b!YoNyn}a2` zZ#JUFYtG1_&OCqYq(0tSs;av?2NTc6q4`vwBxI`}H$aw1)ja(t{*lnL;v1x#AVPk6 zQ}+{$zO2^ZU9dp78e0tD*g^Xn99IF&;Rp{2Y#5Cq6*N0>Y+MK1dRht)0Jhh{SwRGK z`+Y6$KXQQ1qz@Ukz%6}*aFG1;=20*W`h6D4?--Y$gFKRM;LMcm&cOFC zWsk>QimgO}ELNvM4p|-X`fi^?J!CIl6wUvY7rmx3r;8=xx+RJ?*@ys#jxm(E-1m`8!{j{Y|Ie_;fIAuMe-Eq8CrLhv-u*@Cou4t5aC))#_q#2(kkPZ*P*oN z`>fl?=a;7wSK=8pNX*o$YjR}wDn4=7e+KW|5tWGU~%oaU3 z5+q;pAWV1bmiE>TqP*~|X$0AYfetD&1(Z2ZXV5gvoY$pxn6_dJLK3QKr0J3W>U zYBhPwN7-*lsMr})7S$@^H~3>sOH|j!1FNnbqji|+1125T=!aU#;=v>5P!;FlP)ISj&Yt-z)grC zBs`!lNdxh5cudfu0>xs8^GGk)Tsx-)fj^{La(K&=kEw_Ih1TV63m=6p#L@6s00oR9 z)DM|)_h)q2L{K$q*W_M4Y{*7jqqUgRJ%yM*9V1*RM6i?S} ziz}t_IgMSTR?*+lF?;=``API=Nxagcb|S^MY`u-P{Y)WwRSxiNf>t+l~sXe-NC0;WKlv# z#QPV~%`}asqL0CFg(IAh?sIW%JuCXTJ~RY`T2yWg^H@g_=87}r#Z!97OXPEPU0x<$ zBqn?5b|Vvvz?{yL!m7gxvOM01`4T$Vri^x==|J|sul0*Rd2#^1 zq${02FV4`|s8%bQ%C%Bc-MrWeN^BldTh($mDpFK3gD`2RncAdEX>!*O*tk)ZA)%M` zTtH@S(A~r+)_B12OflS850jCDFpgh!0@+$BH)Cd{nhX|Ik3clNGjohr9s3l;%{?U} zvi8*oqI3QkB0o=+Ld08~KaAS;U?)ZPTn3th%wiiPsAxd&ix+frai9X7ZJv##hE+p7 z%{)jv!pv5)NgF1GSqu1S=dWQzTxQPQ6H$JFwf}JTSq#^H>sm~CZH_OS*G^o?JAzBeLRY)5?0ed+|M5@nU{E?cR1SKlmm zNKdkjrO&g+kzquhROYh=;n;C7|M6o%&yu>Px8P#s)YTxcD#AE?DZs^dPWzC;X6PO( zcF7;yABU<=?!4C2Yo}h*QZ{RJuQiOh91ajHyfxN7j0zmcx*_GyPMq`btg8}iA_utD ze`e+))O?*9Yo8j@k5vM=iR?(JN<;@ZQY@=zbF=1QlEw21K+X!9Lif~1`*9Yhke(L9 zq~J*naP#S_SJfBu5Wz5@OZm!5r|)qTk@qq}kpz(C6MTH(awHEy;#zl~c!EZHmM+Ps zebOpyx49B|=GkZSl&eLG{Z{L0dk4)M_z#)HasrtdCSxpp{xbddZSAF#ztl>@+n7Nz znQYklUFpI2al{0X2ToEFskFwdq|$+3N)+gdeqkgS3w^WfvPdXECfsxm%rhrma5m(X zCC%+1qzut7ESFBEPZI56H|WyRnlpJ+!lg@qYIo>@$xPl4kbtmSYiSDara?e!aDhSt zkpPFcGlw30NU2AD`TjUt_n-!rj4xdMWmL#J*WAE7Vf8i0F;km6yCV@u8Eg)=8B>WG3RK|nMpL*2#XJ$vSjr_=z2q#}UM z{xlR?to;Oj(e_7~I&s1m##Y2GM=&M8y9Q#_NJ@M)fKma4>+s%TQFYk$nhE<+ z&1D^ZAKa_pu&knlmKukoh1;mL)bi6i(NVsw+u7(VC3meO*+-U4@8;3jj`MnMIE?(# zYg%_bs2yVwpkLwH&MXP^w0O_?K`(=4k9N(JQiord|D*4TaGYl7J6d+C)1iK)W6@Cl zNF=?X0ikx;b)w(!k0fw{v5W`vY0)!KaX+4Yh8OCanZpjYBJQ3*D4HE??gJk{{5HH< z3#3~0YGa(kU%`F(&h+isTY8H@LJU8B3#^9z#+!+c;`V+s>L=Ob19g*n@tnE(ofjKIPOV`kswHS!2d)^2F-|{Hq~^fAnN&B{AYhQbs%wA& zcfDK)P#0&*Sb^X#IHzC;-3`#t#x6cI*YY{FFj@9o$!(mgd9~l+z#oo#{dtWx77?~a zzW9m#tW`7DcbRAs0fg9_UF0DS8EqCSqk@%GFN|o)&&|qWn1##mYv-vKulDj&3|o%v z^Y-k1yoSoO=4SjKWy41N9_Ep8ILk2=DM?ba&?=oMl*V9Gad;;$sVHPXB2CRisOi^C++8^dpHkBdY|~^ zDIN>Wmv$!G-E>j)m=5D1)nX33o-Rl9qHOx{4ghz&8|2$t!z>r55t;aKRgGisjii7-?$cUPfYI`aMbsxrqbwoZZ2j|Z_D@7W}hK*6heIh(fHVH zCol?rc$D^FyvxQB)0g%*o6{|??8c(;WO?(WPd}D#0f|p7Eiv4>r`S>t`N!4QrrUIT z=q4I_G!bGp@eS4fh+Ou}63bYRl~yF|-SC0?&1H=bUiDr^PQhV;+m{~2s9T`WybP`` zmQz8by>N-4S;45NClV8jzz-?Q#P+q|RrxpsP63|qby#?%eR^LCnZ4ukfTirT{_}Vc zhf|M6>os$I+d*!4H%U2ypG|9oJ#2nnJ$<#>bkm1*F}LC4Vodx^&pZZeV$`em`Pb-I zGm^fIQq0Q+FqY`0(fnl_C;=ev>0&g%hqL#!^yM)~c<*=uq$~u4d>OK$KAC-__5YJjYovU(6!ovLwykQ9-mtO0?k8b&URKt1CzC@XC*~=tM!M-;v_|8~ z%HGY7LMy|d_ty}$p7}Ky;W5(N0l(gkClJJPv1d{+UqY;!v+KI;B6JTLZ_|&^jyc8j zI{vcjvKq!<-PMD=NE2VWMNk^{-oDM$Yx4v6$vr@w_x|Jlt0q^fOSQF{C0k?$KODiR zlRr!1(XOC?2e_?FLjibczFVDsisVKW7u++^Q4=Q&C>3?HorEFCZ4gMn{JZ7!tB zpt!X#%c(}U?jnBa+MfksH3bMt-C!1H0781(KFml$qI{v-FB{NGcVU);=GDj`nbw(e ztAMCC!zG(@c)h&hY}k6llXs{0Wgm$YmBw6pE7 zn0@R~%{XO+4FQN$)(oQswOqhiC_0s)(_?OQy^lE5-=BTq5(T25y}b={JW_1?mYG|a zsA}ychb5Dxc{Jy$Imon{PS=G7sVO{3n-_0^Q6VUc~LXKl$cjpUrpEN$?^4| zOH^G_g*9fSs=Pm2gN(RhW7pk5CLL^(#oF8$WTL~=X;(`DnZW<8;k7~GbR0UDKb|uV zbKkx7u4(as;5l~U&Yguby4!-fDI~68vf$_rZ!ld~%W8I)xZkO0T4(Gdj5&2JE`!_7 z?IM~n*;+Z86lDa5dNYGk#X~lBU;<}xv@)p&*#InV)>bOd$>h9?Hu3KYooc-h0e7%T zy?S1MhV9wyay-Tw6LXkMA1Ako!jSfzS6{KjaYLc|H#jyK+R!G#m;zN%Jl?&KSavrD)M6lEM+zw@DsZBWK zGihgtjc7^?n70Giesk4n*{YWH76-}H2Zq`NKflz zX-RlShAthDN5u5PkW9xEc~NQl^*+>;fG4xCDO6+~Ks#kPIet@;ExhOK9kMf(0Ytks4(SCFR z;*LC13j*pdMkGe8zqIH3{q~dpb@njEX0@gT!H(v9+INw`ak#VVM_Q$_q6^VQz}U^a z@Dh~|SEPLvj%W&z1T4{VKT|zR4KO=l;wyAsDO$SAW~QHPbUhiD2=(A(CBCpi;8^YyJ&P*dTU-r#pb8d|{8o!aV1q5-Ys6cJkjLD%BOv`EIa4k_kt= z!EJoJLaP;BnM@+zzxDNo_K|_ZMkBL%|7dcIB;$JxD-%81wXxMIX&7XlZLLu%=L$I{ z{q1bXXeTgC7Mbg6v%6HK)2*|+x5N2qq7J$0(`S;wR--O9Ve1DYbNSBfn`n930EIZt z6#b2aT*3*XPA~Py?n#g-3AYPt6$!tjp&E0c)wPRhN1?KEM$jdwB}8n4@%HKqnqmCh zU+NN0<^wkh_~E05$`8cWdSlRP_$~x2akpX->JI8L2v+7AOTZ7d}DA^ zA7On~Ylc0_u&9}E3Hxj?KZ~9Uot6rO4eo+OLRe6OSb~#TnuK==I_$a1YVJ`r98aEA zX^O9@ESg@w@ZuR~)52lw5pByK^ij8UL--H+w5($FzE!&SH{QJ2X={xxuPoNqtg^fM ze&)5Su>m+9KGF}=9aBRvKi}4x?!Xjihm5c#YydCw#OF^XXIENQaxjsTXl$E<^`Hnb z`GbGNcL1y=Eh0*3#pwpXt^FIK%1VlabAwfi%XKBO_l})G4xv=-DB(x}nLHw( zx5wEP3UHa*FdgF5oC$z4R2yOgVZQrozMEpoUTd&$wzVf9$x5?GY6#$@7 z?b#TG^p0yca;+dIbmmMo4N-&GV^e53AUe-@#cd;NbS{Q;MuJG}_7mpAu~p?rJmq{1 z&l}S7z1c@3Lc z<4CSqDK+#1xAr5ZXeSE$EiJ;pMk*%>_MspAXUQ$UJwPTfD~cNB+^0{M!| z#jUnO5>UDpHJkX}o!Et(Kmt=;wvB$B-JLjZ2hOnjQ%5nwsNx95+1)#yT?{cw>j3>$ zlZpuaj(@+B6xqPLZ?OmFU1MxzXK|CRwOX_kXmAwk}fhU{Q;1&|oi&I7`%H%Uad_w|%ZU3FVr`a+_D9UPRfkHA9`x9fR zxuO}n^9zm4lix?W8k;SuWsTZ_jj*aFKOmhxoc=+ty3p!@%JbcyhynB)@EFt9)C^RJ zpis8j5<^Zdb)8TJ#hs+<;bU#jqpN%F^hUZrqOWg-oliP2qcv-H-eQ6@4#FJshR(6o6T?X;VI8qtQ_h#R-SiYTRMjTXA zLthdgr*oHk(yeXzM-$D1n$1sgx4Ou+xN#&N|1F6(@KOLcRUnRAM(b(ytW^F0j%U&^%i(WK$0lSi4C2uzl_(sX;9}agW z{;G0TpZlkv24%yNo=c-A)y4$MB2P%^=XV+)T?pu$NboVaSS5b8DOmTS9% ztsnv>Yz+)HM6IcG$gs4Rw6#(}&nOMRiXw(W7L|skG4e1wn2O{`@WXAMtDz1Iz>CI> zt!o+ZYz5BnOgS@90x9*@mc7`7)dGS=IN~5;>-h3m(K(b0X~#LK>EZB5bOAAcB(s^f zQ>_AG^l0i~t0vU?t`65*w}bEm#F#`_>o6ipXDDB!zoS3ii_cLA?*w#Z662|8W&;I1 zpSJNW_XiDIDLK+L*S(*mdq2ByQY|-2VBpAWP9Zn1q0YJiWnguUNsi=q=4>4QQ z@n+_#{Syvbtq8R2y-BbO-ubQ9*2C}VnoR590Gy8AfvGfMZmT zNh-imE;lZjpIu_!329adn?|tXeb5mnMEc~^Z!1h z{gI2QgL&XnE3sN|^aT$H3-y!f51Q`ht~gWv1wRC#O7o0KJYXCF(UKyeP=oer?uv#d zM=e4aWI??m>X6lsy+NWArh%gcNjx@}UIZD?8dj*_p(RnTHa1t94Sltk2rEQik$UDN z*Ys`U3XQJ3IsI5a5StAL1rDs$)-B&RMXjfY(@&;O^i*>M#?A2A5k%H&F$gh6+8P?e zMOyBfB;-7`fsW}0tX#rLnGU$bj>yPRI1msLV9iki^%S&;!pzDLdS%0l>9vy~K^|zd z)Dx1>jg=_Tk;g-@kq&YSi|uZixC8uNbkWV##bBmpV|^K~><|!@EV9-mKe82%(v&5~Rn%tQT&!x`3D=OF z5J=B07`r3A+zh)!_@<4raZ_DGEbKW}c?J2j?&$7HwF%R-W{o3*tOoN#9O$h46AHk8 z-1!zmg@4^WVu-(uCq`ro~_rOJ~?l>=Osde zI=;GG*J$GZLjG%Pu6f-a_#Pi>>w*%ry`vL}WIxxuR}h78dbuPXS>Yj05I=q`6}IP^ z0@3+IDxZXDnDrZr4Ijd{Fu=`{%!LzL{06`*nG zgI=SGY7{Bw-hYJJ7D%7^R;3u2K2u@NDY=boOG^%G%D8A@B+JnEM$hrCWH`EDN{Y%x z_UU8lvw6M4_4;zqG$WmSZ*mQmq~@!%TG0kUSb_twLq2*5>>O`{E^bE2k8M&ej8#T0 zPf@S=?fM%^%=gm|QzfH!)kI`2E@6#>apP-z%PU}zwOX#bxW#jw?MaRTl-i;`ms)jr z;NyzM;fG4f<-s$eDWas++3p_3t%efeFZXFIa+@)ZGQ;YAqdU=HIlR%5^~UYawt9e_ zy>QscYNBpUI_O3EDdWDq za446fN{OWZP2xlw&Q?D;_Ii`W1@?zno@zBA>d3fiqO$m0EfPl5RVW~R*O*G6EcS=) zGDxFGVu2Qsz|6iXY;=p{1Lp|F;_hy*XTGUXlz^#vrFQjU*&v0z40DF8$7~3l#aJb; z>ivWXDKa>8&koR>=)Gaiu+Fq35NF1HXoij!ELoB4H8mbHja1_zzNjk@A>`lc8ysqD zT^|g?PEsT!T(c<`3&-ERY34HLK-mVv?dqZlB}*yL93QkiGF{6ZAAnJH$=Rwqi!XcD zYw|XGq6Sp&Nbu-t0sxtpNF!zTtHCif&a=ClYZ-v)a_}&=x}JK}Y3<|H)OMgUfH!Hp z<1sgUreP}{!2Y=Bh9m(L)34M9EIA{mcGJMpv$X1{c2ix`+%XUJ#9FCeiLV6euGGg} z*m9h2igMUykKPx=@L99qp!s0>iG*Rwj;NGND=Qk|Uo1Q?>GZsp-h$2F5#0;VU0TrX z2`9&4RrBME!5q?pphRQS9~y(09(pS)NK;@Ge2m6LC1G{l0;c$Dx^9^vpl%x0$*J&2 z4hN&BC%;_Pr`vvbTByDg9tojH?@vG0RF={1w5SObe?EN_N_a-G6vGb%ovsJ>&dIJh zO{M_=cRl&#&5|$Ho30k1W@RVuO6#_pqV2uGq{D#|u3gT_4`%P{`F2kK^tZFe8lQp% zi8xra4b>p7HjwcPr`6V^MYupDIjktstsP&uY4EvyJ^f6#5L$UWdsl}>ES2WP4Ik=@ zO)Z?giH{4qAW=#EP}^{0IT2oru4{P~h(?Ues2o>nx52d(=d=1%K4?V+FvOHcB?&)x zk1*zjRV&(|0jR8(H&+2isyCR&S&AyL_O9Cyi!F{CHFr7Owm3ojENHb^)N(UZca%h9+K~B{RG|eKd98#KwA~*3_IJyEAr#cW2*(vP&=7weAE!G5Q_V zNX;erfkbX&0{d4aNG9ZjFJt3abX-zv+jk4*@`qE`5Dl(K@YD1-J(WYB&9kfgIL5C_ zqQH@v(qNWS>QP`ZaKIsGJW6^kTgr@x2jkEhh<-@=ReG%*;3EV#wV=(^PSKG(1I@^$ z+(*i|QByms>4SP!pouga$4;DhLu;|otj2&}tTwb4&8Z*ZX04ru17Xp35|FO#1^`k1 zcf8^AW**#d5CNLX1LT+Mc(|u7)I72UldpDB%4~JN63XA82vex_v%7!etb)Wxf1G{> za_WQW{Sd0ur<=2K`rg_#B$S@eBRr%T<-|04Lw#lNK$N*~$2CYTg=pFM^^UuX=ps=o z-H6N5$|mX35~`y@l&(fwGPY_hg%ej!X`at7X;A=Q=m$m}Vhpkn%|-2K9m^q!%&6Dh zafcK&D3Zp!aoEq8FxJwp3Q5YoTCb2kp_W~n3=cVlbu&y6ZWp(AeUNL*YwPu@nt%F@ zH`M5Qm+}m{nTV?c^ODwSZc9IuOn?3d$UZ=WXq=YV;th%ixx7A-rDGi2&VNNjv+J&| z(wM+tOxyv;hxqm?O20%y0lbLrvBrH9HUQ;BUt69b3Js61JQHTuU6PbD4s2psAJ4K< z#Fv8A94E=BF2{&bRsBVsBhgX(gr2EisFsOQTz#+E8OdoByOnBBL%@!0{-~*3sk&g; zSl^K7s|;@8#_de|-zwO=G_p^7fi9U_mz#Apco4CE}#Mp)jg){?@wqCzN9=3+R z-F3E-g)>jy)UKk8ZdA}nHI_A~2FFhPy1pnEp4G!PdTw&TW1(lYj_wu0-I-q#ZgbxP z$4(sA{9EqWtzu`Y)p)VDBs2EA`+ckcEi?|WLo0}-kw*;djoe0f&hfZLgPenf-Z*_) zO+S9=w>s(3j4cEEi#!8cy{8dow_|VV#?{SN)IxUT+iD?AxHUfTDr6QfbResB4nQe? zax1O0S*fk-IlBQkHH?!BW#yX)NNE7th7cGq4!@jvbqcW_Fkn z5oL!AmL$-HvHR8x+GeMuQLDyilbZ4H$v z$InY$!DY~*@Uf*;p7MV+l6LbEmXw>qKaO592#k$~)@nAiA)w5b1c>epB(EOO@x$2{ z(|6P$k`tQ%ei~XyodY-ite{ad%OFd+q!v6=1BnNtg?a_3|pak2aBYQ8^v zLsD74u(q;Za;dV`bA^Z?0x9qsN4z>-Mb@&4tlMt-tqrm|qdVY-B6H@@QN^4cSbib1 zIs{2AI1_7T{a}YwvV!$rlU<`AVMMCSKpvLY>ld{ZUU=>~HE;tHPoi#fNw>FC6;l1Z z>VbvcV5l8F_hw0g&uM|nsYJLQz6eE)*6J#te0OEAz&*djL^vYAK{70AS5YYM*=>2W zat_^W?_%p{CRpX~p=W-kSMJ`-Oa!YK_Sn2UKmA@^zt-zZE~XdbVa{A)=;XJ9765)t z4M;k3zf|96cab{*Y(78U@+`8+f$J;4jUBd=_Vo|(X5a>tVa%crXERXa+s1#UabpEl zy*vksR~;s4wWA544{R;!J4LLX(&yIJmaj89+Sv-x&xSN^0(A`&>b(d|*%>}^&$d}* zN@Udt*2)+4ta(mNlp$zrE@h}tj#G>8sYyoh9P60l?It_L-J$2I7mfc$T|>&=fb32$ zt@QmsUh$$K*_b|oYG4>p+&U10@ z2hn)h6|7O)4Wm+XGnm%49Oq%dvgse9>jImpxm4oSh=L(0s?EmLKd;IOfl$Hwq7^c> z%v~)l5-ZK~4j|P74VAna%=VspU@c5!1$9DB5H_%C(XN4!`+#w0(0{cLELGtFky3>5 zR!|+y<+S=V+VwLY1s{BA+f~L!DROAe);zL|O!#Q}2X$(hdWWufw>v(T+hkG3dLsnk z2|c5>dpI$L*ByHfv03E3KKVN=qu>AZdtWy=iee3#51s@X$-PU@sN1YYctBO2^s`vlh@!srUYnZLU9g7yUm(!J?7+66aTu5#GMCG4x~2r^cy zRke}bV=?~E^}X;2$7rP;8$N~#ncJG`<(K@C|GR038a=G27#(kT)x&^rONAa2x ztWjaSSBzXQ)veZhtzv{FJE+698S(04JhWXGX`C(9tDfCqFu#^VKOosmX1=xtK=-Vi zpGhPq-d=VJ&TH-w#Ukx_rRY0%yclMh6+;NQnqUQ*x^5YxwWM4iBj3=gNqF}h15VmZ z(lt{$bI76=x_c%_T6;rkdvvogFp~D418|LE%^l;WrDjE-D=Eb5kne@7TErU{bXeiq z0l>#oL+k<8hSV6PFRnrRfl9^=UAB)=;C&t!j3xvp14NDn`_WIo=f6~S(b7RyeLwp& zdJ8%@B6#G7bAG7!|GTr8;ynu^1`BHP2U!1}|D1C9@~2Li1;A(f6mHN<1wt z*Rxj|obrABRFBLL4nRtnYM?BV25dp5ld)}^YT7q9s;2W*SACBkdq(5UNsn(r(>g?p zpZlZY0uXcAF;!5k>Q|1;&%zt~^b77>+&Oe@mKufXPp^-Dj{8#shVilKQpCJJ=s)g} z!e?mp12mo}b7p$+@6^-fhtz7p)>03jeo>$5&X>W`U8?;zbK@UXwv-qrq|mBi2>!JO z|1Ftj2}nh%0-i5@w#>N+h-UgcQnL(d3|-Y){F}bQVAL`k5vHlaGF8yEbX!2q#6vW z7Ih(W0TK})#74q`dT{*Gl@sxr(jHaw!0Ef92@^FkNnM1K>FP-h`C!l4r`ufz<>AWn zrD(D6>)P5&$Y)UZ-L7wKtf7_gI-Ze#`BJcbzg5|mk6ZB5~N{K%`6?AdKc?!a1%(N=7+sk zxN5XWD8!@ZvGK^&)~kRq?(D?E!#57;9~(g8wrS^JeQ-0Cb<@)}BD#5jAh({3xj@7) zo?P1Y<+yO>*z@`UJ9_K`&-<;EsD^fHVzKxP)deB|4@_o-3(cZCaPAw)tR@3v_LhF) zWE{hKt>z(-A?DLQFc3fyM2X)K9S_vUGpAmN(Ok8V_#|V8?ck5XP?ro@ckQ_DiqUd+ zTncJ2mSK*+N}@OGCgip`tp;iqs=Efvlo}r}T@7gvQZNM&rDNvZ330#DLXeqIMt7zVY4{0D;fZ)f{a8 z^5%L|Bk{VUK=5VK`!CcZjN)-o-$5N%Y?k$716*}ylH)l6@!({RHei%~q}FY$Y&JBL z$B&&pcETI??(ALg@u@(8zarO(I!y6m(v;OpH?Sj9||9Xpzg7+V&v+xho z&-CJzD)4IcoGNEupq+g_b0DL^^t9h7@M2}c)$zvez=a=50*h$-LvSs2f#q#9MF_sTv7W52Lbbj zb0px9SXu}j^(s+qgjmBp)^^cfCUhLHUz!}`)U)8rj?!)cQT}!9XDUQHt6Y1u$239BJ$48p(I+C+y;!@ zczNs$(v)p@@2@{`68-f>TLbw0>~VI&f@A!%Vl) z$O3nM&eZ2rnZ1@8ap9Iez3Qj^cEn+fMp$p7Dvtv~%pgY3=(Cx9IC>Osj5W&9Vr&AO zVZP*&auqnJ)l#H-?cDSL27XH~Faf&3t5{kMs5E|R51@9JP3zkisHUj3o$_6>&2^W$ zXr7S(Oc#C0c^*mF`EK?;YWcm{ec2KQm$&+c^LSe9;Uj54H;L0jM&s@)K%frug?6rW zn6SBia3aF*|Ma`iNrnjKKTs0Oeb0)&4VtAmOSK~|GH?2HsgtHJMeHYcR$Kf&66{HfFk8YA zLPb#KNa#Gq;;`kL?77pYJ%PzA1j>R28$fwDG^0h$U8#{4Uh=aB_uF&lU8w)Lf%Sjs zesvw^T(=D}D)!Ha#E5o&5}|T@4eA<~XK>Y(N@We>x+{ddXI`H})55uEe#IcsO_oxM z6KKdb>*Z=gM_Te1GTcE-cK{nDwF4vnJS7};Z{i`<*r6;y%$u#p_QX9dt&YoWOE9q- zWwgfCBr-aJNDN4NRh!HLIRSbyFrqmlwESUAaXE)w$~-nwV!FBwMA2%)1?LOJyPx@m z#|nt6^*!ikZ%Sa@m;q9Px(U;!)-d+(&Ay2(Z;bKAx0Q*q3#E$<&B)~|n%xvp1mGG& zMQ9~J&=%rejHIcn3%}N^7=p=ToV9hAl16eeeHi_m8(?}qJI=~;d4$(Iif`fb{%ZPZ z`mY}rijMJ}wed2lTRXeq2Zp&LHOEj@a=+mM){u@t4 z1V)JtZUuC;Cx3lHpH>`!v`<`6JJrB74ZX9|I-q2mb`1eWH)hDY%6yo;K?ViDeBT{( zETrQr-*PY>fg1g8_O{eEwpyWzraT6{Vigh@bpwtewSz$<3alTFFZ@a$aenHWItfxO zKi5z@eyJJ8;RTC*Hpa`Q->btGQ*mip+V}Iew&NPz^>E=>l{<|)J4Gn3~nH3m*E0sXtET27SOE zOuwFff!Fz~*%zAbL)TSX`yN}vdyNvIAxykq590Jrf!70aBy|D7Q3{~y0&{1YFOY0c zwRhBV1H~{Q$W{$ACDeM^rUI{>g-Ea`aK;99mm(#3SW*?LJ*kKFU|~4MEV9s8Uhhr4 zx6dC_zZd;*XhdMQ(ej4vKvfh5>UiLjm;4>sfQh5BMzm;bW0$5!@L01?aV zbL7U4KmATumsi%y=kz6Upy&&0b#+5MJa*;ENv%)w9-{%~DoGux4sy19h%cy-m!5fM zA!K?&N&IP9tT(TgURtkfiP5$D5vgDiWjvKjcsFvpoWL;sGf28~2UgbCs+yYB9^uoZ zB&%B(u_GyJ=6|;z@dRLg0V4m~Ph$UB#Wg2ov@?yjDb9Qd9YZyL-B2Df+QV3OG?KR5aY2S$+~@khXQ zn~I%kJK?pKt9(SlkMJW@>kh=V(Fu>5(Tsnhww--trM6bpoYzJkG+Xo18ck>=JZ!`Y zGAXMK!iWO&i44^eRs@9<)VJ+H0N6OZVna6Zvi98wngeAl{Ui&mx~osq2lfDtN-EVn zntr7gZ+G1lFuVK4C3TBSKltg*@bJhRXUC_vj=n5MM;KfDKw5BQ&C{A1`hospg|!F$ z4f4zUB?b<-uf1iAv0%F*S2i6@-Ge5{BAPIitStH6Wcs^mK)-u4MZ?sw#;ybEEvq_} z7$%CP%M-4gEufXbA#Mts?tbmXW154(R@5+Fs#PnxquTGl?31Axckxviv#oAC@%#&? z^_g;;*VIw;zt%S44<85eh={jI@^R7>Sd>-?aH8}AQcNz{~DT;3#& z-n*EHdL;Q@yBe#(h!KeohL+EWWP?!d9pDs=Jyb2}GpG??vcAk>cUVf$w?Ju#z-iT5 z?mzLm0IzfCaTXwNS^ergPHHupPW<1~cXhXIQ8Pz;8Neq<$vDkPt$B8HQFl_agZ1q@ zm9`LjeK33U)0=wDYHd+cWM1P~4`TI~Hgqd1IEge)3_orSQ|Cq~U9du-nZZF3u|qP8 zSUP%QX{Aca{3k7KO%Afqgk7vxqH=|=QCBcu@KO67hNax&H>U4Uky+z6hZ-auOn1*S zmo*5Z0$1c6x6Hm^D0}L(Q#Owi3_hl<9R)=954Si&{fNFc*mVVmV~~R-J3}6lf(OYO zpx1Xay67Vpn^mp)1gpS=cYBdD-V(iaH45r?c{LNx1+QdE1jWc`HS^7h2VXBA*X+T7 z=RyMK3zgY46nKD+mNbPzEsN+=0f|Iz;FUSoZmr|(Br5^pD0e)7A%G7!c*}+ZM@quK z>Aks2F^Z4XHe$%$7sFlv$ktD-VbA?>`%rMDYIodxF$u6i|a zLlPWhdf%#HuyqSXaen24Y>K`!i=SW9HOEi9_@b_v-L*3+1O&3*^ryh68FSWRseDeI zMhqB5gq{V^!94*e%N7RC+}&j~Mfk7d;+j83uCpg|=vGm_=KFn`vA*@e7n_=vKDKIT3w*7Y1Y+d_4_@WVIVRw4nj3 zS2xz{&3Lrouke0^l6JPax-y6G>;8q)XHMy{oybn!9{Ra`J2dxao;jg+VV{&54L#+> zW5>?u7vL)&OuyD3Ee=q<^rgaH^wq`_x*pR3<5}ctYJn3QhwCz2LbzSNj7mWS3%;DX zod~r{x9{GiA}?OAv`ym13fs8I!2DwRp_)!`)$v!XFZb&=>yE!zKPW6NJ+pBW20C^3 zM$4i~S~@5J1x`Je0py_=Y$c|+K{X?4F=yHsVLZ-NU2$M3bkOq;ZiYfRFDaMKI9eb_JAy#j-{5)WNuawH}5ZE7h>1Cw! zSF`s*W<&Dks8KsFUw!Aq9kq1H zqBRuJ?K^Ian0EwZU|ru0L1?6U(XK=~;Wih#o#oV{&uBqgdbYv)G3UDf^W5)=^3Rh0 z*Z)_&HgA2f{+B8a>EN6pEq2#;0riEt2K?2HY~9t&6Z1wb*s zP0#p1i@tGNlVw_GvOjz^*!7{IQt$n;t_7Jr+3)Ar6WqmyU)9JU7Vpj8))s0|SWGKs zQ~+6X08>g`JkrSTQzJjucrXur^Ss~hyYHm2>%QIB-NTPZFjkPQj>sO^w%VyC(X@6Jwd{pr8arwh(0Xrbs}4?vi4;JeT@Z`YPvcrQaAahQnF!@EUG5^b*regf)GBeL4M zjxY^i!q&ir!ZmY~y8eWoJpNA#CHx7-IfWMVA|$D6N8}ai&&Q7)JE6}+Is7;)AE{(W z>B2#1WXzitdN*u?#(Q@6ycHtV+_1PFP4E5p^CprkZ5}=piX+U5x)^aq6j_Z}W+m#W zNV>&A$B#dbjg~^qKaWr3ts{PDF@$zDtE(?JUB@h)r%XX%a{&#&Jl=}Yn<}Smd9s>*|XTw(z zFZyuy5T)RQ>7&?cqyeYF_xXguMolwNS16#C(-9sl!{$UVhF-$Tqx&qb6ZH$I>B^y` zDPbB`H57cV8LzR9owEb4Aj?k%?}wdUKVCU;C0cD1%J_^z?I1iH@r&wtc2z?nhEq>Y zW|t=$7bhirg_h6s=#g2e%YvpAYZa;Ik8d>RqlTT^Pr0f z75j?_wQLMHLN%`|_=dWjnh#B%J^8(k4m)PR1H)>m!J_VjW`x?|MUI-!tyL9x9PXP| zhhPWtglK72C6f4&M|fX&L&H{f%x?vLCMcQ0GBRBvkuuN!74PT?!TMTrmb8V8_g$?6qbsY;wL8>zy5}N!NgeY^R$8~nw!}yua z%!!l92{Hpbi<)UQLItnyi*jDjWd*&r6gHh34O(h6VJzk8x*JU1&Ud$>sp67(E%EX0+*HKP{B0oMQqV^;0-)!Y8Xctnl9hCc z->P{D$(F12XUF3qX`17}NEDu*xN+h{&rE^-Y$ljK6Hf_o`_A<9nS<<6Sk^8yvNkQ6 z?xTKL(9dn_dUbWZS=ErVu1_RmET!+fm1G3Xqn}4RuEBy#Y54|Q?Qsm*!B`ozU39tXOa zcb@l_#}ER~_^TL-%L@y-rgZ)lH4G|>4NJz=b;e-o>L3mX^f5F6b#Kjsf7?-U(u^(7 zpum5+T3YtU@paK_x9#Od#M$mGy|dH-kt&H+Cb2oIeTmh(PRL7hWlGf4ioM^T{-_O< zlvX?avjgEJ6cb#(>hN;eooKt0>?}tuCqp66=&bsz*4G^doGh!qWm|qcb6zL|T@^J7 zH8>}|;4qRVPOy8FBzhZP8UNM!2Yt=gvrly2nj?}ML#KHf?|6KX^p)O@r`{XqaEY!R z;-t_3l0yI29zi4r;aq@*PCau{Q*B^YPKGQ_OI0{SuxlWn{BHzAEOX~AjoZd`FB4LC z(wNs{mqc8H!O2QFKuPwEItzkf5?b5E_076|A%)}X+1t^H){_i)TN`C-Dgj_54L0^B z?wB*InTv)E!lG5r!hiOXZom!eXV1=H;5Xx334X(2xb=;b$p%L491mVw$u0kN#+2DBG+2`!HBM$DjvRP_F!BKmBVxzUdya8^|GbjZ=w&7J3`*M;|C4axTlz zn_#L?JMirsaL{L2ljdD7*azQH-))QHsW)rq9sBR}ef<(i&>O5h6APQBr>sd=GA^)wG<|K;t@VWr*xYh1Q}KS}tNYAzFJvlI z%;Z-Z@Z{sSP$9W;dLqT#CN4tOYM%ahdsRI%yr8bGSVE9C+m!_mH1|eO&t%FEJTbb3 z?4Onk=$Z*{D>|s8x7QM=-WN?b)gJaam!Q+ZZ z{5Y!XR0`q}wW3^E(#KlO37VVh4#+Ujdj`-fY?5}S2<{$YZAvbg;)ZcJ3U6Nzt2Yu0 z5Ny7u$-n3yk#JyV+L=LPKHv;ca={$S?gnB!lAP95t>WnZpWIKr2~q2ur)eF>XbRr^ z5#<4{Xjh3^2caYE4O}T*U|~5bjw;Lvk|%+J;nC`|p0vi$0)LoV>e~;~k9`9gAPE0Z zTNmN@a377Pe;=DK1LEQR*E}b1w-->{GRm-6=Ox3ubW!TbUeO%>>V#_-px^ZZRNs8Y zM)1_R!EFRE2jg0VQQ?)HeJrO~QFssovGDe)7sO5or5IsN#D|xwYt?#0z~DJiqe>Om zwed)TYC*YI4;i%YLq8Y~7P|$LlLpWhRASmuU(l4UE=b&1mLA^W7?UO`W__@lJHWfW z4>%jfhf9XKwjBD9MmW&G4r9isq013B;Yu}eNa^d=p1&i~6f*A1+1)EAPHHWZ>fl6K zRxam87x;+UZxB7la$zeGRab9pL9vhZb(t!QXfA3mU(bS4H>Dz0U^>)X43e{~n<2hl zE!8io53Q|sr@Jk=o=U|%e3Dr9?7som#iGE)?RObMH^(Rq4A!V$4Vx9*L8h{7O$?S0 zt;68Me$?o0hYx8T{A@k*GK>LIhJ6Bok-Ja}AA_q;i#Vn#`Pwj)WJ_;YjuK?;0lP&L z^5VjRZ;Q*9PszZtN*D#!4#io|IJt0H9XJa#$U+F}FfM&C{(9&lpc$RmXFS6<<)lj* z0+%pC7oM(ZF{C4>j-F9nsWkNB>S|pbo6D@+*|~_Z97*tJt8Nt_=~I*@w&pe8ntEPk zi=}R$Ev==Fx%VyCr?n@~XAS8}g^SX`4*1*t*rlbK*J?TRs5SDvVf6ixZrgnLKMKR&nxtu1xO3%Bo|a`nT3|iC!OZy+ z@3gcLXP2Qt$qkAtc#=7gp1e8zQd3!W@9mR+`sqzgRF{9WEKbhP0PqUTEF{%WbrjEYqCKog!v3iX64%ZM5*Ub0#vZ10ZsRLdMM2W8yjTLlwZr+)% zH$k-YuH&xAO0w@Xj;664fl!-c!eS0_P@lNtN6b=dU;Vl{`K9XtFaCf1 z6XUf%agrBvKb&_DD0=so(|0sL$)0`8e;-UAt54-}RWGkhwD-}3=RR6>5#zViD03KU zHCRRr!(*^~UDLC4&?Y-oi_J2~aj&=#p53hgvWXi&B@VX+c+jIK$B#dysUSX(1x%I_ z#!Sl=&r)m8CDG+yKlhv-VRA1E*0Gwc4j9Ln6QNLuJqdbz64V?@8^0#vyLIDb-vO%gk1|Ltyw%S zq6{HD{Zb=B-iIHT<(i|`mg?1)HJ#@odWLhB3=xeOx(a5n_*Tu!TSybsKz!WcMlegt z;zsvpA8Ofvw}69;!vVcqYo+NTizrgpI|#J|1(?*{CK{2pM1k`3`(M4NMS}a2b1dt! zp>v$nF=;+qDREQHSs_Inud+o}+=qLCY13PYbAPBI25mTTQPJ6Q-L%0ZN7x+y-TJxe zS}bjgqbKD`-Cet&=CZYoLBhw?yh0NnJ{+P*vw}cOBfmWuY{fBCYPeoQ+~#^zAXxPT z+?~KG%uHcR|7sjlXeMF;1@$=!qt+3jx>47~n%Yo=8@0WYLCMk&qO`@(;oH0WVM7pd z7&t=JTv3Tp)0g?BV^=jR$vZaRPZ9_XYCj($09+wLWi(8yelOI2q;))G*{WG2lSeE1 z%5%?Y7G8Tnf4nhpWf9$N0u)fQzs8ZS&rKpYu@dlu>cw_QBa$O}O(B}=K31s~vBoOZ z>M?hHCRBovLE0FSA&SxKL93-^z2>aLSB{-HrS~IWn=LrkT&GEJ_erW{r&X9y$?1X6 z#td$_`{rz=9*cr8i$IlW-iew_H?nAUC%!>|9QE`TOghFp8DknL(sjeNaO{jT>#^l- z9ZG;uW*KB|fh>Xqo4LFTbsA++{P|YT%}f7~s=!{# zW7C8m`?hxcz##OWPhAV)Mvy+Gn#(p+2gU48@m9d^&18K znm(R;1M#89|BuvfJGord4}TcdhL&!)Y2%iNW3(_S`#-kCkr-^~=$ zMq__-+T*xqp6l`XClnqvb&{TkOz&C&!q&ef;=>?z8g4T5p7(EIqu~ zZ?ShNTF;JfuOJ2hIB&N^p+JoHZnd*R5`^+kZ^mO*n5-j-p;wPD=vPy>Yklb8)WT9H zJE(xUrL?ZxhTouUfSZGiSZn(TDI`VWP_A9gTv#}%C-3%LZX%k^5#|Riiv5M?%VI5K zSGcwUQ@IOj4!xEuOC<2&ph)$i+~%@)1;ZH20+JHet-8xPA`mm~z7mTbd7h{YwQ|fM zX``ZBZfzI;xYhx7)vECH9pri}94rJ%G{2}mo6<|>roNf{Z|Qd|2VaK_BQ!Z#)YYs@ zk9XPP2Yj}_=SMg7qcvR30m_Spcx!uGAL0EE!Ih3P-GQ~7WntKs|137Z;@*U`bi6xy z&T6Bq9hOK8oG1XGl`jLVIGB9{bYniqVBm*J?7)reWWwA_|NS5)!NjdaxikqdaN&0h zWHT6o`_m8Ap^ef-3nu6*QL0XBKU=osh*$|MRzY0SSS2A*yZYs_e%OL8ax!u+*B}uQ zM!RrXq@cFO4n1wXp`jU!JTOk*TN7QhR$8rjs>6J1CrFqsu+k6?xWEw2=y;Qf{c$p} zv#MFsdq4dxzI8I`)$UUk0hmSouRtvr?)A{YB*xT{*YGC)gO#@I>2oPD62(eQLw$~b z1&MoZf0?rjl}*##L1Q#!ZC?y#`E4q;@8B{PNajqrBkM%P!^ z0}b&LFHMAvnNOV#F#dWYnC;8Q;!F8_Rd<@!S6$j%Q5(<}DP@9Z!Ph9{NPYKtZFA}e zhKnOM5E%zi>4GKiorMAQ%pI5RDQ=v69!~U$R|BF?ca6R54#n=kg^J~@MI$!ZgI_H(-(am&)N&Jo9XmI{B&Xhmn|I};>bZ0Lp4?J_f z!#^4n^RXpT+~}0CM5jM#oGiiuCQq~4!+SJx%>@r5KE>WR)B4H1{Q-KI&!%3N3ttXV zB=vS;8kN4VhA%YLWPDsJu~6|-F=v5%!!mMpqfD3zWRxy8T?%&@N|@xz@yo6RKM(W1 z{`}&?DZPyFl?MZC7|bW;`q$XF!GSY|lk@HrJ`arn>tp5o>QhH&>!z;au)D9%v%8m0X|zB;#o@v2?q228b3khEx`#v1UX7c}gpD3S?%OCk z46V4Ff&F5W7iA}tdrM8gy5Dv|WIoy-P!!<9P|NFUnGjEEm)qZCW@hZ}iB00yGLa-f zEXs{ao9(^fO;=n@NeO60qdPV%x7I2F+rp#?l>y7Dlfi^3poGzA^_C{?4q@0zbrR!P zK59RF4C*TK%ashmI(rjG<`EY^^Mdw-MN>f=Yt-n}Jc|#3qmDuN$EwehwVBrM<6v(O zx(P9bG!0Ymtlof;!Kv?FrL_S?6n53~d0>N3zwd}fQ9?;8w9>L%C!e&GWCxDu!ypZY z>54Z?TRrrH3Q)`+A`iA&2>>H-?LRmYkB2>+W(XPcqk6_zaeVG^ zBiAApc&-@>XP9zD^*#AvNVL@gAvY(i&F$XSagCsn@Bb@CQ9WyoJvu{4DAHQ>0xXwK zMrDOP2c9nt+zFd64INu5RVMt&C9R^yxbq zEsLL+G#of4n$>E!$#ph`?MJc^!tdbFN0QouI{KYb~>Zp8F!)9 z$a3AlBbsIlq+$kIJyi}Z$$&+-eK?zLXn5dNi%z4F;I5RhxxZ)5 zD!q^5)mST*6slQR+%)8`?xdQ^cC^GPpfw%mCz^uVT1g*U6Gy(nT6aw20nJQ;b!Z4I zY0l^Mq*LoRyJ1Rq93gZQAeGugSrnfo(@-*Fiv*BZz$_kfE$IC>Q`zs#se!9?CmTZe zax8YCt}Ptbjb}Tc5TBHYO-FTHJsSFE>@K%*WBBDD2O%F9+RJ{H1tO zv}QSBcD?8+y7(&IT2_NDXYz151~1^oS&zn?S~%ez`>mFHoZFKv^>?p$mS&P!ek*!_ z+UpTY%I^AOfoOO(bwMUpb7g`!puv0`iMl%2(!*P*A$s_ecTs*lU4s+gpJqR3I!+(^ zwML4wZ35p)BrLr4te(Jz*dDl6j(Iyofzz1Sp=|C*T}-QX4>KP;$|73d*dSbU^PnKi=(KI=z!oYw4MH-kZl@nI8xO> zQ|S%2r3S)8c#u^vwBkReL2D4|MF~K?YY|>PtNXJ!a9gh0BWYDHS}8ji=rRsQ{TXqg zk9*@xCmW8sla5P74)X4{#>%GGcp*(O3e`d?@K>{Yn$2r2GaD1~hg8_ATC%yeETQMMXgRox5p0z2q=v)%npwr;-5vR%H(7a*1TUi*vl z6`25ht=NC!j2Yz3eCH2bQ%RJK?Y1epZB|nA<)+ zSG}F*<>)O=e=NWs;`xQgWqVA0O|6u%6=K;d^O0*#T9dvduif0oZq%CixlnQ0c?Svk z6FL|h3(}-d4uetGoeC;w%Oyhl(i?4di)!t4byDEZ&MBq8lNcrkkER^TH{y z(v=;K9L>-mG?c50U7p?wt+qLMf=4vVHzK7UT z(Oa?6?tA!>AUsC^+4%mH4}jZwZta^34#Ov0mU*d8{Dnr@DMA?fJ#50ME*>yfn>hgW zt@Wa=x+RXr{b1&Wp{=gtG39FIS{_DG}}Jf{;<*;`BBuuAQ1^HoI2=c(HTnQBD10td?JGh zkIX9p>zS`E?g5&$TGex({|m3Mx!uHN;Gw`atLN&soNtGT>&PG9f6o7pcwoY5jb|2A(2wS>coI1 z(^{Truy#)L9(Hc%8N|q%8UR#9ydR4Yp?Al(bC8AK{nqsUlV3|_(!-P(*NuX4#bwVw zLO%l;XzRd#?$ZMv!Q2+wEBL$fzHPQ&>YhF2y!#1Wo49MPYu@e z_t-U-f7Sn4-93({t09?gVYPo4ce9g_Qe~PT;<2b?{bRTk5iobefA~|HltlBh;{diz z*1N_#H!yzE4@?mnj-6PB;_$?{%CPPq(EQcWT|ZWB=2Eyd~P1LEXnBp^xfHeddN9o65_Q@?0us{A${8|3rbGf1ceJdDzeoJ*syD#ZSb?V})+!mO4tjccH*GXgD-x z(n=+3b-xWTcAgtk6wlG4sl8!kGW-c#X_}_+0~|>|&-T$TPb}WNNj%|{s8_ovl1(VD zrPsJ$eks|3tzdOD3Id8}IU%X7&>l9jDkzw7QB!WPn-xC>iT53w0^ZPuV@Kj_3t!tB zxim|iJ#=%#g2wiSXJ}IKCl%Pz_-IgdL9bVK-#bL^DcmR zn)hnXS8r%o$yG~~*O?Ft8b?KO5V>H4lLub7&>S^UOU2%qQl*j2ZY@6RM>!k!``PVS z<0WDjz4p-<*M+vzL3dAMfqsC9Bb177sAg?HV`RV47@AaSBilY$jb!%OZ2kWRiRiw-Yzu`f?N(lC2yw!~#CF_Th*D&G5wK zn<9>7q65m-vim#`!m!#MN4n!c~?#$N4U!?3?}*CmRIh@`7?16<_Uh&10pR9Zz=_4I2b zqvtZ9V^DBVBuqMqp}RChd|i`JG-kJ6_~na!ZLe3wMjCn)v*hmV!-nGxXq*+PQt(q2 zr@;ki-uiett8G>MtFG9vk-HwIsBhK97FJr&Q{XioQ(rhpqH70!xQ9^*6oBFP(;sy) zaRIg$FiBDE{H`bPfK8xm*l}xtX|QEtK@{WCA|T4?=o#+uRK4VGNG81ZGZ{E?r=TRx&bTVHcg*&QfxgmUb>9F^R(MFdlitIl0q) zOrQrH4a(Viwd-ra!Tzqpxa{aGkk8-3X|w3Rg%Zd4;7dB5k; zZX|~CB(!A34hcK+<^3MPGkzA+MQk}<(aId<2o=2d{a~UjTi8v`%C`F(IRp@gCfX$) zmo_UUR}mO(CZoy47wfxZh@p1_`A3vqSatJK6B}0eCu`#5!__ z6es9P^Sqvo{BZNK-JH0lk}9C(7Hz3F*mH0z(U7qj$eKRRvM-2ow1|4CMQX2y9Zs5&{H7AXslD99Yr9cM{LSSTc*$M{a=QVKv;I z)GknvBNcp#DEs90^a<&2X!Jl>7$~__~ z-)$XHmONqe5OtbZg{XnWN+ldPfr#IuZ$@>BOAYsq;lzz(O#rLT?Az5qnOifFuQ)Bg zdGcGyLsZ=4>+|cYC6C87hCMF`h^BU|e)ImQeUwFvamy4=WKpZyb!-@caNk|#&Ts|U z;AF$B-rI7+tss!8OCkhOkbzaN7h9e+`(8q3)5FY#I;fRv9Nch-uq82N()z0Vi)iRv z-mGq9Ia9;Fo41pLtGUW|wd-d}I(FEoT5YpQ_B|4W_KbDo8Wt5ez+Ehble+rqac=%_ z`f&Q0=7v34@z!x15%*@_Yo=?iH(4_l5r>G+0~GQP;|A>=XCXrwme_(KiX~Hr=|n?} zB7k8BtnO!AcnJ$Fn;RiV-F8ytrh5}4&GsZ}KOQGt3CgtJb0;L;{8pze z0PoxZe`hWzAK}7qo2hUi8QM<*o!y&wl*>&fe1ytLsP)eZiLZ`V;0_8yZ4C z;;l3V_7vCJ$_)>D6IL+wRl~<8Kp|m0pnXJ{f02uV$b?rTUPefW(mDsb(z@6-_$Xj7^huZpCy(^4PO>vpCN3S=wTI)K8Xk%nW%tLxu zLC+z^b1qPD9;M*1hJZ$Qv7|d7+w6uCplPh>0*S8q1@VP8e|>nUxo)ldtA<{^=AJ*; zgfZ%8RPND02J|J*w(MEgIZrGui1u*Gd;Im~(nwRSLt0>ae zPFC|Jyq%X_LgNTdAtITHtu{5DL~|74%+4W-t7YmZLr`;j@$J|C(_BBJQ~H0?pAgyD zKn9@E+HTUwl8s@=RXuKb+wDChHA>W@dX764>9^ zy^kqAk&^L5P<*E&$^*Hur%+hmbCt0k&{%9Qi=noLjlx6hx2#RZwVllz6LZ1imdUgf zZB0UD?F$Sn`iZ7^rQ?R0A^oR!G`xCkWsBaC6-^DhH!$WCD&=cQ(I%X>Xn=V6(I+CG zesf;r!GZ~z%ZhbZVM!WUGDuOT3VTc=+a0*Ghlo>{8I*d6QU=v>Nef-wC>7?O+YCkZ z(9hudhniI~=jo-O&Gk}E)1Z=rJ1p8eI})Ls7|BuwEcfBmp~H|D=!)oz7Ic61y>3)r zt!?R>k`;jRO=eyqJWcVQFbW2X$2Y86d##yu_`)aK@a1XY0U3HUr)p^)miVppL9s4v ziN|4<1HzJqj1@UwyS(6pDNrn_g{7zmR@v6=Fw~!W)Ay(EGVPzHKk0{Hq`gms?hA4+ zhVb;_GpA)&{maP9KXOIfu3T~*(Plqz@A+1rwbrQ2LhWqzIlTrhb*#v3%>DGjue2g) zQCR$9L_^&aNgnY~I_|~AoU>o)bh6Tr7Q#Db0HM(D`Y|+^5HA#~nKRX(!y2YRa|oSS z+JT$A_=qANG8rNbY@UAho3`I|iCf#jp?cunqr!9LX*^=TUDOk;%`oZ%);oot$w3d3 zUGFAlC_IR`KM*sZlo8b?1^3PQVn#0bf1g)6R4!CrA)k6#ivdTMRyw;7TX}QK#L*~9S34nz35Al+_z?buluvlA5FiD)hi&V8X1~@A5$d0wv6=Ij~Xcs zhNuN}a^a0P;){*8TcLnmGXv;ybd1OIG4kaAR6cxb(mnL<@3?L_i|sJb0@b%Rx651G zn-z^`;S4pn@+0b2!xj1-!qcTS$kS{8{ts`_`F7MTk$fM`?o7Ybd%#Q7E{KTOQp58P zP@3B-`1$J8EYsz9hf*&UkrzM$bpZA5^y>?+FFdbpXv9U`+L?GU*H_)F>XF+a-X^58 ztl!{gE@0-qnan%uM*b4bD#Cr71XtXp?svy`okeEC0nSi*78%v@&&@s!e>qhb)*4$O zX&34%4GP1sUZO*}2L=+sEzz8gNTf5zpSJ1gH~(5!uOeK=B!22WE7uuPlv`sb*yup} zxyNa~Y#JJe(Zfioq1hBote52h2CtU%YrL=>eAlFJY7DK8m+{9mrb14PmvpfG#snqro9oG#J;-0)=+s?hLEx;v;NFo=-%O)4e!wp9%EnhWVt2itw1Fo%j zdv8v=#BY$tE2kI|J38nR+fMqE=mIu*k{QeK)7f1J_rvr{wYdHxjkwG> zcFla*wL`QpmoTr^HDW_1IA5f7r&Nph7Zu`aHz6v07)7P?hq;!%S>IYa8^Pea({HE1 zPiNS`(qL+rvKii*eyMll67+W+dA7Kioq*OvH!j=9NuqZq`1d_tFb|#7NU}O8gM14J z08V=CjHP6|W`&x^_;EiF2~rVf-Q9xwq3v*<1CaHBU>|=l{a6csa$#XX_b|tYgH$-N zDRmc|SD9Fy6+OX{d&5H7UU#TAtN+Oi=-EI0VbS;B(Fgp8{K9|yGi?gc%v1qJ9TS-= z2W{K5ns_Ry4}w5nTM&}sXrhA!a{}Q-q6Rxqmtrhh0X$twWpW~~q2rV*s|I;4gJ9EQ zU_RZ5#W)Bv;N-$nUI@NB*l|6Gkkrka{s7DI^M&1{c8$In!4R3>;60*Kw>7~+hQuum zx9qAgv+W0%7%zoY#F488f0L!og9{=-yXA5hlN4RA-ML=d5s^KOM<1AXl-gZA7glBS z$Xc&7kphqGM?s2V*87C$>DV2)8|OAmG4s>NBxGctE>p+TM(ojmYsjk24j3Ch63Y9I z?axa5RS$?Ez!V~&#einsg$NU~N13;Fx*2#5j?2-Q0ES&FbfL>zrM`&L9j=Z&7Lm0DfTt~nNi!~UutJI%fyZ72Do)wi5= z(|5$P^)Wq?I$3S0WZ;-TBoI`q8>QuCxb`?J&p*^LR~xur5Z&9Iq#PY<_3XqmPoNdr z(yUf`lf2RjBMZ$MwFbyN)`nIE*YowR%QYm=Kg@m<$&iOcvY|H}AT?RjRIGEi-ebs& z`_voMdsJQYuE?|8a%lVGcV}MTo$j;yy?-|sZ+19R)NsY1(QYB=esh>>U&QUUyQGr2 z(NK@dYoy2OxFRhaR~;&rA7Ezb8@eZO)bxK7oliXTrf7#{vE#l%bX$vJ>e20fs$>|H zH+UTiP=qM!M6w2SSn|hO-yHN77G4h^CuHBfkEz6yTgjFqLowEhd0|MH0Xx zDM+yN1Db9m=m-YE_cJdbf1$&9<-WsLu@W`c!-2o)kUDbtPN*#jDKatCf!d|sIFg(RXo55 zbSv6)j?9;1LDb>c>ZxdeR;jw}rfMCVN%TXUysy`@FJ_;|FKFtyr_c@q`um?NhWb@` zuj`S!B%Css35D0p->MA^Yg)gghy1lnpwEL((31>O6|A%~H&r$HlM5&GK#Heq>Em|W zD}wE}eY(V@@JDJY2`V!5~nHNvgue4U2MQFzv6cP*RLwuKHIcvJ-X^&O}@bsg4@~-(dWoucjNDaJ@ z7}^qZ*mpPF!lqJpQ|?vIIgPyQZ%7YJ|B8C65f8jFp@y;Uk9!bglO}fJnG-MSHHBcK z48sTb3OW z>c=7J{3OR9GOW*m=h9%$WpUtkBlDJ3tl%KUm9+$=)h&&~)RmkZKSULqbI{GPUE zJ`I8dj+o(OutXD02#9E9IR?c>pemvWO`nS2gt!43eD}%Uh$z55bQ!KWbTZ8nLFZv! z95dP8yW&r^J?Wf`p>TWpZER^4YCsx96rChk)FSSyCj%|iGLuXRl9n|QTXA$A?M__C zFytSmpKGoO4WvOQ1f5fbx?G#J>axDH1|8Fn^}Cm??VTPuhdKr(&|*1Bjg2uRV>9Tn zye0y(KkzH%<=ZwpyUAZ>3aLNcVnsjsJIb;=`K=~@^379{NG1V_IG7$qQj>4K;cDOG zU+j;-ve7W&SWLU(A zpupDSCFs}OrEqF4!-3rwHT3mda~)4Jg=i5L!MfLB{hH^fkdK7Az}ChQBnnZ^O{z>f z!>D(ON6h1reD)20zl_zgNUmetF|AU@%UV%WUX&$}S<+omS&EL8oSOQKv*N4i1He9y zqMO@BZM9m?vZ*YU(DOn1JrBf_udl%@lhIDqNYQ~H6`sMUx4ep+ znd)EPv%Yz{5#F3OVQZI$CXMNO8TQC8pI$_hw%N10v;a zBjr94?eXx7Vq_<|XO;Cvmiw&?`t=@8(+{T~YvQJ11J(7>Qvzb)8LjtAYr6kV%XMEo z@1=7gG)jYkxfsJ0i9ZEQfZvevkWcON-d-yY^v7+j(A^hjtAT4-QM~X&q|G z?ff!s-fA?Z!J!Bi{>b@%MdNvHh-gVMnD}|Q?(PFLbfSn8hi#d5JseE@1R})+M4SCP z`yhyBHF(YI5}%X`{G4n4DJwfO7}ldV8zS^*-@v><(=fRdhHDtOvp^iUA7!&8^g_C{~ipU4&uU8Zo_{u2Tjj#mgC1&6A-gnq7C+9h_Xv3^w$45kE#YVi5NW1}16TeI(Lo(Y3X#V^jr0^Y3(a-* zUAP#xCQLU#2~oy;9CPM(;+h?tvUECa-#53c&3bp|$aE}x47%2|UJ7)Wy#1ZzEswz^ zLXj%1eSt?Y%}O&cgoj4JPGG)%CwB_zsO2~n{w}nztK)k1)m};)+XV{ zcj@+eWlK+cdHzT8Nvg5ctx1TZ7ot+2enm->e8Jr`QTzl!r%{^!P@$*q^SiR0nfxme!NTN}aKF6Levg zs!A8w8kZGiI{BQfcvsDKcSkd9;}$;fcmN6@(XTFN4v0G~JZamNAQu(qu_xnwQE*Z3 z*ANEXK@>-?_uS=Ck0!pfbA>521PUJw^U6ns!lH#cTdRpdE>uGrV0G!4OxWD#o^zXM zSL{kj6!5Z?N-GY^(C*lnnrmE$QAkY|4sgeyC;5CYFXB&+rtM1IZDHWe?WTr?{ENLs zK~2}eImYHE=hl>YA`cT|>x|Sq&rHbK*A{V_ zeVWY4AJZqU9wUD(Fc*1VFPw~ak(a>xXwk2MN!8F$<;L!(w8U-)Hzy}1xD1YP{SX_* z;VfouU}B{1dj363t(9lMcaf8!;+dUacim{K<}Rg8Fk z1aUG>nnXW(e(Y#FQJG$w8OS@1x8xKH*@7m$?XI9r7{SdHTuyP>p@jir5_Y2L%S|j3 z6h6(#G)C=rt3FTIG*0ldSZI_W(6!d8L$9gr;`NkXJn<{7M3wV6Yg8|>7z*9Y!YyDPzXM~XEh1pIR~k@tsalo_9(g$tf0bnFEPS zwI!Jq4kT#_=a8%`eCJI}W;Zh%Alnp!O!#qN2qf-{`DIuHo)J2YdOGEuW0u?b_>{ z?AU{!({`?;*DcnD)}WE2Ca+~tnB~s(nEx+4F)yXHbz5!=n1Yl2 z)om~BWqxA$yCp(E0TkX@S4v3mwYs5qrxff~9!GLhw8oY#^m84$prUT4e5u-|27Cdd zSTx=vlMP^>1Ozq?77cu=4=jZ&fd#Z+=nHiH)vc&m}o9WbdCl$P|Rec`Bae0^ylv%Cp$>|u-k7( z`#$#QTuAF{oD31TXo9x!Jwh!b3*x#@7kgrFxUWEc9U~k-LQ!ic9j78J+6D*#XQYcA zCpjC^V$Zq|`w_>ZC($G)Wb9vb=z3*S*P1oOp)WR~x`$rYCi8Ye4&(fMi((B9 zQgd8H0UaonT6o~PjwQSY77`Q4OejrpI35TV$*z)j>i3QZjk&?(Dct6HK36+OlZ>g% z8bMJH->Vf$NYE0>p8AY#;WYns_U^N(yA}pJEjL98Y@>v0mCChEE0QW9Xs!mVgoHTJ z;LPXIzc$`;&C}9je@DpfXaDN7xcQgj)X7!+1wJAILr=Vu&Qek1UeCqh@E}R}Pp6;i zJ|~_PHD7z%0SD}+J=Z`_E?!>LL=cm-X>g~ADaO zxPXUb3{)O_a#;ObMRRMD!RLle`b_|84A1$6E<{AuJ=@q~awI6&BV*v}Xxe)cJ}6xr z09Ii`7l54F9q(l$1ig^*;Qfk?&d~ZMIHf;AS;>k5KK>2wZ`r>hZP^j9CdT15R=iT@&dI!}MZ>bMpOrz3XQ zn2ZmV463B0u+&l3tlu)gCXp8VF$#5A`4tybK(X0>%+`14#JY^j*(Q;Mn_C5(Lk-i)5>nY=*KH6Q#qV5}E;)P}c`d z7!kuDmeC>)?`sddwC&LtsQW%twV2K~VjKLHs4AA}u602m{q%(XRa5HT>gkB*YH8KI z`YWk)k(lD#wU|9#y3AUuujrd+PMlbL=A_;ceB~(8J3M{EiFdR$mwxI6V@^;%4O!@2 ze9}@3DuoxKe=v^;9_g$y@r*TTHtr9$iE}q3xFnPJqV^$rqF#enf1tU-RmMqTXfPi< zZRjC~MjMPO?$9R4xmb;Z{-I<)iZ1FNav;8K_OdST)_BC%it0LBwKd^VruP{0T}sND z5c;Zkt#y26(Stk#_bb39c~AB~e@YV~{bf@Nih_*$6uboBToIgmX5?7J7LGJ;fIhy2s)zz%)^eMDEH;<`*3GJtxs%+!xudxw{IT$)rR`eUQK3 z&pvU=7~<$&!X0HZU#WQ*-|)aRqszh<1>D>s&VG}-s9b-8pnVjz_7L#ZWt}Yv5s8~M zsTd-F6-HyL=`x4a zD)PZzMA&ZONdR?kB?WZFMOs1BHg(^Z&x_gz0dOWnq~UVR+U>QzDL!C69QU6s-t^8L zR~k*-?8?A%fZlRVGMSs^D*f62wAVO8S}tPg_&W)2W|L~;x_70%p_ip7Lq>L0(^tyy zIwq4WTBVI(=6qh&7uoTf>3z{*-Q8Y%{@W+N)%>a1MHaDV37uT@kQCk{SF({A)wPPw z0}Oy-hM57N)gv&!B;ke$&`;agRdRIgbI(1u@Ql8)%=k#)o!vTp`n0|(EI?=F z!nJF~E#A`tExz-bUhcIckZKkZe|4X&J>24s5v0x+K1yPspzdR5?RBnG__;;#Ew@(b zY-zkH3cUHc=!h$kmO;Md%xgg=xF|^oyIk}{(xSZa#-bY*co3Fq^@=Vwm-7GvGnC5& zYRk%?fqAFWL&`dFN&p?evt*^eKh*S>1FU30N*C|D4aaLfCVyU2z@Ja=M_*G8ViAkt zC!F-+q1mnTlL0lx9Nh~F1AD=WN^3O{312xBr@Wb!>a~yok|Ca1v+}%pP`PIDG*Nfc zJxm?S7y4OXND&W_7+TvsrOi&qwTZ%pNODp1XzVy1yPn)Hc;`@^kJBB8PqvDd*x;GM z8z3LFwbAcuo7JsX^kdkYawRr7%_W_TUI&Ij1NXMN;{Ls%NWak7)=HatNlI^!x;{ah z4ea(lk8qHtRlni?#t4ykfsT|l<>mOW%n97u?~AJEovIcQ_Pi_bfX!5GL~A&^b@GhE zUr#PBJR?1AzLWFnh%A5CeUF4y&GRiz$KmY?)#Vqz%^&pkS6O92`3pJdQF$xeeWEAD82nt<^ zzG&7-_ez?BvxkK)$er{BHGA#8-l27@ufC$&$@TC4rc=~x&|sEB8>(Po>JAqty{l2? zvOBW)68eUwX8|u)YcS{yxKs5H_?9jgq}u6jgk`>+-52|g4pMehh)2_EKc9UkCRy_M z*tUCi>6mp|4>$KiW{9B*S+Vt`gy@0GwQ{{$*Sp6bT6HD;oZS$K>hKdAF#!afw6%le zKGblTjUl_;c;0E?iE)>Ey&MGz;Pnq?4>gSwevZF-rUt2rQ`e(1rr$NxC>qE@q8Pc6JHni?9A-Xmy7 znbV1k(Sm~{Q$c-MavR60o{eAPu6cek(eMrapSx4~XzQBw`5#Ss0z@bZ4J8s3hj?6o z`0`y`$LkiZ-R8(WbHf8)w@%yh^3C*)GBXt5b*NVA+l7qNY*=?IQ^IUSaq6l*bw<2! z(D4Iquud35pHI4;!9h7E$&&;evfdK9?Bt0^`Xw5rxlt0h6-9x|Yc=mIWFw=7Q*&wu;$bK=%#&%Av? zGbWyfV?YAnohbVJ5lMvJb2S z$t(MQx}p^YZf$UsH_st_2>By&Q4en($Scb*%(jK~{!Pu&^^_Dm(sVg&@s#Q-j?k+a zD4a@hId~3@((@fDEPu7$Yx@jFPVsS4j!{d@L`<;ekNiGdKFX?IYMt}MjZ@eMSvrMh(K};O? zJk7wum9lu+wFPr@x*Ea0IIDZ42Y%(!yqMmx_&93cd$Z3pRt_S)#8auea8wSfjuXL( zcgGq^4snhkIDSn_710Og?WZG80L_<acRUG@|4r}N~p*c{>;F$JKs5Ml1d^=-5o>76KQt<>G-%?!i)63<#

    =K) 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 z05)ScE_1u{!~gu_U&hxJoI%4Rw%ob(M4V-JdfUT7sGG^rPHh;^4heBAcaWmUg~Us( zoQ3zIZoRzZAt21S+pfE`+QcFC`1S3wejJQ$>*47KN{4V)+l?q4s<3DR$$)WZ#KN7I zwc$7h=Y25Z8H1a#u;evJ)Q#UJ-DSuTA;TPRY}|<>=&S5RUA3U#GrP_>1qH_MF`iE- zbQSLg6BT=vgI!O8o3#svO4owMNC?`DCy7AZP`BWS6vtNl);9I0JxO=9aZ!_Wd3!~R zioZ9MP|;hkU-aXo?{y}Qyav{tYj@)HajT@Vj6!oQPgX!=8_hr)4Id%N;LtFblX!v6 z?yar5)`Qw@ez+kNha_jX&x5ZYG`XaPjZ!{9lDa@S<~(S5d=)_Ty-10r+*#2r%^r3X z4K=oD8Lk;;Wc(&Xw)E^<+b&c|;G6_UxIWHKp|lhcj`T?^j#!T9IQew;t*-UwfBxrs zgVGsvl+Xji*GW(RcV?f$z4A#ksY31gf6Ug6>n?X(IDkEsV!! z_xJm~v*G0{7LTzV8RX}`EyTNx>yP#KKjK>XZ=QpUfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES zfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBESfsBES 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⪚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 z zy#^eW(5Z>HEqk&=NP+p_k86-}HuO_d(`9-&)}P*XB!L#j)0yf#jU21#iJlcIrFE2- z?kNbU(x|OK=yVl$9cMshqi2bN(0>vs3Aj(GQ0^WweGD+&6AjhhRPwOHNZM=*q6Lz( zIcje6(EKn+lMRlX*D%K`JjQcIfuOMO$+&-hYOc+*#cr*bCU-{a>`uh~K+{ds@aX%! zG1u@Xp3U*ySHa{dT<8gcQ?T6fyV*j4eg|(532@UOL&^#oe=Qsi_+@!VnJ4rpXJpFC?UXbm8w;jlD87y5~ndS}TN^}G^5NzP@( zR;ULM1S8VzGj_Z+1XUEfq%w-TU8$5+Ufzy-g|u|tEBsHUwaI}jt;FjnG8K;oxv*Xt z+Pozw_<*a4fwVfALJ0zsx;ZMpze2~XDT)89_Q941@j=W8On&6R6MpINQUnF9&yfWN8N`47Fk@w z-cIXbzxXc|3|E<%{9-oTSp!nZfB_=}gql=wLg2QUFHljkvHWU~DQ{*h`*L}~lT*0| zaiRJ12yo;s=AL&ij+(gDssaBKf1_jPe@nCTE|N2fbhzGVqmc%1b_R-4lzZ-%48HXH zGp&0e3|}r6pMJt87$@mTdgMqof6K4th`#0tM9-!tLv9fN?i#@T=lrtq-5-~S8XbMG z0X)YWm*guvET6eqMV37$TwB#`;mvlbT=rKJ$56~Ofr9?>i*95Ec%Yx;`UMD?whl(o zRrgYtTE@#rwnl<%xnoE`W+_yLxxpF|EI#62gr21ddPn=l(EIU%vY#s)pGl|oXxm=~5dU)({I(SH!Ky8MQ)IEI6 zZia-(yvi^zL(`EA2uR%JTIyV`PA|)D`H7pDLV1s{Hn&z=y_4D72@`RA_gcAXa}rrg zDc_FV%Pm!+36BCgMx3iTd}5MkfGby3_Zh#fe|&nEQcC$adM4~~o&@d*?y@j0C&4G5 zd?C^~`>C^vq9&033bC=F?!-j|f|-!6P>bLET{h7n=OZxnV0qvP_eO^N0F%bOSzRjA z;DG(LmR20t-Z#`?d&;A_BX?syxC_i+E!4+ZnfH6)hgIOr5gT2MEG;~M+ybHYjsKH? z64*K8|LAGP^@-H+vffORotMf3FZsnCL_fi43K1ZEV@7l*|5i6M871yHYE*()MCO1y zu$fb|%?3D3Mt3;brLgRba4Y6k!L@|WFFr=Ua`E^mt1G$p&@_2ivL&XUvzU~P1_8zO zgUkaE*cDwZT^;b1dI6MB;9p@ulqoxfgg`&&#ZJa@JH zp1XmFY|DFZ3M20CWX*>sx856(xzm*c^n<7PNxt-st=?HNhIv<_rK_NgBxV}*k3x`sU4>DE3lV4hD2q;E%(e>4g)`O2 zuS5BT@F!^Hm+0mVGJn#6LovZ=f@0#nOWtZgX>?h?oi)>BL{6t>pWb$$ zNw-E8>Tz6Gca->IX(rfC2h+uIk|W>^tCzA&6s{GeO?zdOn3Q;|Wjq3*?#htqP*mQL z;Ci*={oCC^c`dUCmY9C4B@@F7)6?A+`_r`B5qn|TjzI5I<>eGwos@3aHl|rvY?P2N zbb>g^Z#-$LNU{Y4z-^;m0g3y_>421c{lYgeTNqc^3jAS8 zLG+mCHwnD7P#=~sgqS%*y~E}f%O(GtROuNHw1X0oZ0`OEPBT621yjau7+~@gp?Y|y zbu&1r0_{HvM26;yGM_1#9yU#0^F~Y#

    iZ>fF*(>=vN-Tb{8&z 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�j8R8Q7C;N;~-8*sj zcu#e9TEk7{0=eCWtir%`Dl)l{~QiS(>ST|3pt7Lm{p*UFhGQCl;`k%KPbT`) z0a8Ou&y-86S5jl(M0P1j(il7;q>7M4)&zw#t|q9bx+Y#&q*|znT;Yv-O8(R3nd}Jg znDAsMb0Ll?j788Czv*QbIs-e_>n9v3-|K%o?Zmq|9;3(%kh_Z)Hvn~IR6&80A%Rk^YkO)7OK0)Q#-!VdKd!UGPT82dbIR%);o6L@cos|AdAKuW@v^@d-vwA|v7|sk@aI2g4ec+qWOchtl)QGs z?vdlOj@L2YEq4)hRVDr1yYtUHTORU<@!hA(v;NS-10C+Xz1E{rrK*>Ki9y=ajA z8XJ}C35!$sPydpeFtK{$yRVmr+zct0Xb67pl+42q{FS^*gSZ@Y!V&bNT@UMGdC32K zBGW~0m$fj?CT`=nGoT;q`3zwpVj8pwyEq8Q3jVD(mT)KT7CS!6c@X}HMG#MFBzLLW zfcwsU&CTTlRXMcT!Txr&#*_S}(e1?BPLod+fu<|u4CA0a2%}GX8a^;L!;({J*Ub=f z3~h~w{$1|!ax4XOhczOu(Wyk9l9W;GLkQ|Vc0X4j(Ncj_ze@hk z3{iEk=kW2!jkRCvGsl%Yhdp#9>uDt;WiB}<^$0d#zp;Ap@iF={EJrJ4>dK6F0cLdO zK=eAWQiH7)XVGE9Q**maTX>>_I0<|+l36H-FqB=9dg=f`k6$*vd#Bv-@-ue4blmME z*SdGNHicltT%ZL7Le!4>+UzY|9gT()*O1j zm|Ch+qD=ELOMRK@PkG~=C*J0NUo4M2;`N)Yc9K8InU+{Ks&#DRvGZ^VWrV`-@hCbR z$GO51v6>?gut0ri^~o=$icds86jc3Da6?l);s`1vcYb!4ZsZD#AXoM{Wicz1?|A_Q zWyOoxlX~6OqwLL;rM`c93C;f&x2)&?yBx6sppFh=|A<|U9QY<+LXLN)25@<73_LoN z{}_N!`h-CJW@(E8(fCmT>OJSkK;Rbc)4~+{yDVXadM+Tq`3gi~o(~Q_UdP1jLT-p} z`hXmvy>JvZp&e>ryVae37(p8gU;!h=Ub;Q96^5vrX@ORq7^aF(EC&t8tzR-2oTi<4&Y)aFaZ9Le=}B$f3qw45l2C*V94 zF@ndxI|gpx@n5dQo>k-VD-mZaD;^`!HNPEi%K+Dg=R(qb81`_Vv)_hHYk|gQo;kNJ zIpkgDB$~LG4=JC4?DqGna8_xZ+yQEIz;@7d0Dig{;PYiBoRRByAl30`aT+bzvmlRF zWo5r4m|%)wxuO6$An`r!C(6VA=X7~7w;hRWfcgDZuQa`(;%W>92QWymAP3@}{2c_~ zo;t8CU^qPAV-k^{_82J$30OT;+LiL0A0zBl27d8l<#A7wlFZODvverH>hgH@c&cn6 zt34YlcuW0DT4bv?BKy(uu)mYrN#6CZ{d&pFdmaG#K02{G^Lz=wm)PUp^G|k$$h+)_ z3YBa|j{bgfTi_WD--4Dzo^6KKtd*A%5oJ0Z_oIh`P*lg9b z{E-a-l&fenCBnm3UIajRL`bk^)#D5c?jdGH7c04nL`wqg1 ztb4fynO-W3ekTVWj*zc&4#8qKzP@M9JqWVVV_YJ|KYm!FQEnj{>HO60%kwK# zk8&HLr1RJ*K;wS`>ha@R;SaK{4)5pnAROE99}v#K73q0Et&tvG6@BkApy-5pklbz% zLW)WQ6XTG?JNdo)al1_Un?26ZXgiGB&dB+B^b+sR7Z$px*lbw366=K8toPJNjQf6t z$k}SxzU0&r$RD|1)fJ9}@WTWa8ct2ZB_&h@BuUHqa3AcmGqFJDc*bAA!{{+F2#5w7 z_cw@^u*|t(FL@r2_5KYvA@^+v6ZtbER6Mm_y?}|;eTlqDzxc-_L;Bx9yqi-5SKv2) z@0pZzdcrU3G9*6s#G?O93KhCzXro?R^g3CK2LVwP<^*1`YHeafke2ne=v0T$`20P?NOYpsId{Bagr6qdBKSyBh|exuDJy;r z*9WKWWA|X#+~xQT1Chb~csOd%Qis=JAc#qY%s`k%w<(s0WvTasEN!<6OLS9Rr;~JpCcCRqwmrWR)vcR(l~WTcDk*J*651?_=g~!~i^408 zL*~kYr$DAA&{B78yX=Qh5VLc&kn&lG2irVA#JU?D-@TnS4f!Hmw*DFV6+Vrhd&IAC zzm7sUFn4=?x%RbZZ94co+>8Vm`j#Icl%*AE;&*}}E4Q7U@81yAhr{_}zj_6=;2_MD zI=+lt@5$`_z$!yWsB)DHuOZEZBV;pjJ-LFGyt8V!RGFiG)A5$FIHDWx;(r-`<*v(@ z(a{unNmY9TN62o@=2k-L=ioo5u$r5`!}_j=lYC`_$_U|Hym^YbPtXts3x0%SpW}<= zyd$y%lxnu(^yb!pGCgjcy^8#B$4R(F&Ndh^ncoRSCiBm~Q@OCshk_xk0$HagbyuyMlT6UAC(Zv2R3vP@66P&1Y; zhvJL5NCOc^mM(#aJ`5R7WUNNZvhMD}=%}-0qnv_Y#j|HP%jBMDp+LQ*vg$)3P|s)n zpbe36$oEuO;p6OYbqx6(or*sUC#_s`QA-)`ZDR?G^-NU)?k49G1FtT)P!vi&J`X5|uV)+AI>zjAQIC7(zF?%2%|$x$pZ zcGK6^$(jsdi#G)0AK3={&zs|q+$HsU*)ISFp*i&KN5ewYHrP5eIpvJ`cnWslcB-l4 zF9>x8A@!uPPh6a}ny`CGKHB{*IhD#zl}QNItcES1nnxoHP3(FPVCvuiexp#Sb~lL* zABU#H^&L`<=|b%M-upu)ZhMJ{>JfFz?F#mSkn%@4O90sU$BtxsE;h>4(Uc{|5_d*_ zF;{v*V2b|e$EA(++*T#a!#n5Chu6i1mDg-d3kh9%Np3w0pY`Pbp|F$aa1|@gKEv*} zckKI!IxG{fwHJ*5&uH=gH-QyPBZ1_RUXy*{9?XfWw)7A~*~Pj!{85ZeJmMekOQZ5w zhb7Y9#5o?bB@iB{5PUpGKSZGb0YFDDVq zztf#~uI-@Q;C_MoSFrxV8RXsJbqHySP z*H&H3>vgr$tUX23)w=Xs@WZE%t8B(4PN63#0KRk^&+!=b4*e@QT7zWg>GF)vK8N>1 zNwRk#$c~)a0c_J4JUJJv5jkKU^XdQ9Bx%jSi$|3T zD#R66{D>ft)dlLe=-O=Nh$SK_-^BV>*f-FSd$^sN{E_>NngtC;I_{nd)lAP<&7G>6`;SlhOq?eD8O)tHPrDc2R+j|y^$G`ebLq>Ch3=x zl2wsgK6cNPzw$0PB;j~3EMVO>bF(S^H#$YMoifQwI4Wks3(BU3h@esGFr&At5I2bB78=N1rb3oK>6l^8uohnv)^PPBN=Ey}cIcmM#iMHC}N4ZUhy4CVSTprX>g z5274;P1I0YE}Wy^O@DJ{P7`LKKmW`BE#Lmi-9f#6$*UhBBzOuUgoBQXbo8SHzt6&k@QtrilEe315B2j#F;v@o zrG|Zu8y^&oQi?;mt6b1oa2SSf-j~$NC>5AfUR`Lb+^8U2$GhP;1lqoE#U`f$fwky* zb;5)ecna6%yB^B-_)pRQ@gFcGI#bV5WS@lF_3K^`L?64CjJ#N}Ie~_bV|^g6lSc3U z_0NJehTw~`DO(19HzwcvT7tNeNKfm-jo`*sATeL<_5BfVlca+siE6(1D}?)3WWl;& z!7*UQAO9h~uZ5F8%+q&x-1&pIjx$bhPXUI{{1d4wjp05Za@$heh4;qYd6w(Uw1gGG zT{$*`1UqNJ?#1>mq}}3K@v9dvUoI<6)#rD=`FldRF}SSNC!qU z^{=>FUnuxI+e9d#j*l|_0nq+(K3*}q+_Ja03)Sn}xBs91i#sfZYiZT9Re9f-8g3x3nH~u6m2wl@mr74R z8=9LEOG?hDP8?~rY_XFMJsyerj>pC)47la({1*3Itp(tD{eHRVmo3jsP2=$NM|qck z-1=h|)q3AumcQ_A5AgIK*yG{J#6f^~^b2m5&|*;e1T5)Y2UZZxzBg9ts#~J$8k(wQ z6!#*mZ3LtIR(iiP^uQh|&tCAqx%mS=LdV$z$^de!$`zT4k{n&!gw);$0b=~mlsOV9M;Ab1gT`D_gZN8Nz0K0)gM)3j9!g9a7;31&JWwt&PQ*7vyUR*pNDU37D?w63g6Cy+rQgI1-w|f-XZ~(L&_4|1b5ut1 z;8;8bI6OEVjYJgt*UGJEto!}4mXn2`JBtc?vP6s-0oCZ_%Id@%$bxTcWxFZS2HVh} zGV6P|qz#aJ@9oH4GD$tb40k$+WCFtfFyfOQ7W58&F& z%nczhw! z+BxnQ_K;HO+(6~zN8|PMkiD>EbXXxKX;x@s^*i%!%P8m6GpoE-`(*=RAEY z6Qp+93$;#wMF3dKuuhm4_A~A_w?t@<{&~SLzxU%FtU-FN&BM5iiGEG{(N{qh#Ij$) zTUbJA6R<)^UcW=mm82f1xsyd^cpk~+2`_Xs$cEo-dm`{y!7Je=D_%GZiTc9L#$TdK zQ57`emJmGZ!#sOOo#kN()0-z7fh!+ynOBZL*@nmwJc-&09(o02a6?e%|DUpg2G6%_M0%fpoi7m6B~aoq;C>080cpIIeP1 z=R~17H{+f1Tv_osmz61hO709e1aW)%(Q64&td@=#jof>|kskMh-!I?KzoR_(!;?>z zC!h3(K5n0&{ZznKlF(fNH9hgAWydEbjsJkH{+mj!=mvY*dj4<;WXYQ6hX7i`xFfes z8Rf-_jjB?Cbz6CZR9?$mcp`&==w;B8R3vYozbUJs!tTLkP+ko?>5ywmj#92zE;$pXflcSOJC znIfTTuEE%E;bt3#cFWGn%uaWcyP%~9Ra(B+7Kyky2%M|b4HCoj8Mcx?K?%>~4**01xIFz;VmaNoKE<>e4#eZ{$XlTYoGj*va>V1z~7 z2;ifi&xT~SdUMudhp9s?chcOiiFybA@l<8o^{xT<@(%UK!g{UIXGKsB4aTldU^FQ+ zD(Jkq|Z>e-}M@H$L8z_58V8)9f_+7cWCrJ`j`2F!Trk0Wlkgo;g`@P%vk8 zB&CVmZrW1Vry0In;4zQP#21g-g+^2glw%r}FuN&?7L6k8*io;M!lyQ*#jqg%E+I`ur zu5W)*1UR|fN&De+?M9N@-!@?Ks)~N$H*~POU%DA&Bb@r4-de~TE5Q@9mS=ve){yiX z>7H&ZP6cq>25~OLbjoHbxDy}uLNAs~ad;KQGE6m6DO<{ejm|x!w0}2zNp5T=&m&nU zGwqDF&l!n)u1OIs?u9UcG-Js25bNtwW)cedJPSqD)d(on3S^TSWaEFzGc)rYM1$AL z>~#OCJGO(-ORUn9xLqPyez$DJUJ9&U8UIrr^(|t&oYgJ=Mb4wS(e`$lNLR}0tiSDz z_OZN_=Ig((5hk>iUMh-Qtl#kT!wT7eO-_ID&EKK*dx9}@htf>FH$+2~Kb_~c@sQpq zuee1xwI6i@%rG)yYs(YSWx>V;uw1Lt`Aa8#tUl?t{ZRo7fH{5(k<73)-^e7C zL;M#3;sD(g4s_WItt6++`N`MWHtzK-wXO&-0fn4F)iOPXY$}I^u-hF)0vvH${Pv&N zOw_xemlEAiSV2f4G~uKF(aK;fwp2g;mqqtv5)Ab)AA77kWl}}j5-mY}~wWy6Q-0hJ1PjJeu{)} z?{{e4?#LB_-CmX}jjhGu&U1 zXdG&W;u#w0uG&> zz}qb`$@1HJm&t}4v~0USXH#`hYmakKdigZy(ncHYu$`fes!WGc#m{cS@rUmA^98fd zZBc=};n=V0=X$ON`&^#)bm>dOPDnJKxZokidZ8*PS>my9_oVcG+@V%Hu@xLv>qWaa znzu%oo2r#k<4dV3{_WDYk~;D9KR*+5Tw&HHUwCAklj~WYM%Q@~<#sC4XP(=eSsw*T zz1KW~N|9W{UtAIH1yghf=i6?sJobIZW8&jb<0Tp9AVVS3?7L|6JASl!luzFCi98UB z_W;ai!xxDDn!Fwx6uGjj#deQKlW>nqGs|vP`w17KKh~KUH=%YU0l6@ln>GhyN3-e- zhnfc|1o<}<^j;K5o61k!H0jNw8^d@Lsn0u*jriLx4e_dfDfXTaoWi6cdHv`L!8P2s zIn9b+aM(hNS|6qS>6SWlH9XlkcSI|ibYkp{%VFfgdo>*xEUsH5_Ahe06PG~?0^wz3 zL1js$C0r+&$4p&Kx;l#E%N;GO}C8Fe=`f(NVvgB>@RU#Z)TVUi5$i4=E*saQ-Xd-UcwpN8oiNEY@jkqOt&l6cmYZ^X_ceKH+&;2{!_MZ8CEsUnAI0905;Z&s zHHy3PN%s=py0s&`p(xN9<|0V48MY016@&GF-hPK4x|$X~-y(qxK2>+BvPq@D!^~{} z{|s&~5BB)(56Ta+UpQi$t&c&8rXT(`C6N!hydcj9S5QX~=~2RK;W;Hr7M>Hz#Cm%%+81B){~{0 zN~kREHI{qWq^Nke{Ax+3VAbP#Vrqmh_1EVxJRfx%?A5;K6fhs*$h2lS;DlG>qLZ~! zD>V7HE9FkW=iwIZJicvK^K`ieud?U+RtY}^IEnROO+hlba;tlCMH*=nLjl*ev>Gly zY`6g5fkg7`EJFOXHoO>_uhVBjgAhmD8sw-N_pAC?F(g$$ns}&zhi-<-4vEC z>eyS^nSm0tk&*cT`p#}p3u_N0;NsCo%cGGe!8Hwrm~MCxNuvpwCgzr@xYatiMED^l zNzLwre4!N1VD3E0r2C!xDtm-4b{MFztHO-6$7&1jZ+wg8`z4@KZjo)(G&sTrM_@Dey@|`7eZx8X}?*v*vRKkr3NaS>M+|F=|HnfQT*eAiHX;T0J&X1>sKn+Am!(b<&uxZsr za{AeVTqSX_a?IB^iEK4dBw(#@(3BXJR%kKqJ(t{VT$0TRf{HVuY|gUq zB=Ig}S5gZQQJ4wb!!j9KtIG=>TE~!fKAZ;sDqO5*8;GP3bh!iMq$88pGk`9V#b`Lg zWqZwE%_=*?6UQc!S?ljk{}Gk}e|N}4fip@;@U7^R3g7NG*MV3BIT7LYg?1dLIlhBj zW5~#MMt5rBg#Q@)WE9DbElk34V=5qyRVTvJj1)h-ag=2=JJO#9nFTu)q;Y-$#@_Ew z$a#P7o1cx}_6%yF&O~aVNnMJ1BM7}zjb$L9zIa~hwb6!7CDGsWw^JM;GCcheI6ol3 zfGwb1QJ9Gge9MR>ZUmS!oNjzl3+3>9 zY_If5eTQ$#fAZec!R&{`#xDr5*t_nYm_EE=1RnS+Ur19W!V+A~s3y%QmdniFxOGly zldZS0mAjY_n^Iuh`uU5GW@S)()$4 z(QWPA!6qj?KU|5o*Gjk|YVFSO6X~_L5j=hiTJVa8wO$afIZ+~(ZFD?J-4B5OH98DwBjBQuL>@?Im;cc!nW}^A>;8-fHp;66 zCP(=|57DPKqJ{TJ%{}?GHw+g$!h=Y=Cv~dUMfDJXT$fklr}touIr)vh11>!i1&klc z%3PH*K&FFdOi@ov=SKVCLaoj$zmyW5+^|ibgoQi98N;a!J|XcOgdqnSu{oQB5Cd*8 zI5QFzWBrLoBCHKiYM*xU1^iE(8Xn(;i&W2W4@G=cA`uS*J=3)Z!r=S4S(M&|@VUr0 z2cFRbo8DXlSWHmTf2g6o#l2Q-CAdnwmP`73mUnmmRoAKHo_nqoj9=y!kRd{g4dqM> zw_(Xr;0z_orvg1pXbSPzM6>@07}JZ&v+{ihuMhfy+~2+o5cb1EFuv5+Y|z}mHAMP= zJoS8`-(ghw4cElxS3YJI$3-24Kzg`n6OaFYz9>iEU-jOTr- zyyk(isA)0?WE_qvZvRiX{NJfj13$jR@M10HoC=yfY^YDmH-F~`aeAd?gaTM1C#zln z4w4d#qilC|MBRw$cD<^5 z--%IRYy-vv7#ku|hws(DXaCQ$)=uoU>vmN&u7W)0{D(cPy@qE^c*%1o2fGwrxRv-O zjz?U*qXX%2!`V|IGvib3C^~id<6Kux!t_61`tx3tns-f|?gY6>q$Q9fz#$G{EqHUw zFJzCuKtO>0emMMt7fR~aNq}36h`8f@4_xkd;7gbj734NTb64AYypL)P_6Nza32gJeu!rO$Z);3C* zV5bR?@_3{qAI2y*GUauUR~pqI5SK}0 zg4cv3{nbQjRSBel_uzBe8#GJ~R|*P1*y_Sln*7bBjJcBM6}IG8ob5XRB`7M?Yr=}G zlKt+r!vu{$Kz5UI!EgIYd{I9Ja_|fp+kTi|3jI}vy=T0IqPtJvnIEfP{Wpkz(C7ma zdG9C=JwiD9M(pbvjf5Jcleim7dsCj09S00cl~1U2lSlE_&%v%48VKiA5#skGZ% z_@0yxPgu_3y-36Dm?F?sWa(5p&!YopAgQK_G*<%m65e^PwPD<<}s_^JdzAj))xY$U^p z&SkLhao`+3?OK`fen>&3>S-LUQA(j_$`jhOb*}D!2D3teFi@!a&-mdtN)%13;gDOA z!i&@7GZNzX54xzQ!vvaWTtZr~lz-*dSGeo+4Ko%}AI5zj&dE2jgOZ!y(o5z3#fR(LcckEAIwz$W{mowp0Wg zYg$M1*V{d==S%d6Qe@)PQWIM-VtyuY!gw|!xm{-9qmO#5wVd-b<%MGlK|2l_|96{B zH7;#4bBsIXFLxFm5rm9dS@%5$PpQ|2EJ>mFPaS&n2M<;zUxW}(PnT)03;g`9FREnd zO;G%H1owD2vt#45Uh!gGEzepspmREi+uI`}bNl2lT`Gs1^Mepe)YkNSC6*%Z3FM4z zPH+KjD_IeTl(f7sLSWRGwt*rk?u*9Zkt{%czy*($7Fd2=55zJw$O!??S=o{>fWXIP z24-pmu7TJGg@kYlQ$c@UMc%&j3n({J4viZi^7c?VC`NK->$KLl2O&AWSzhvv;0uU| zIZ01!H*czfeQW^;tkP@T}9sA0hg^}r-IP&l{oe0wm0BBl;2%YL;H z-0i1Yl_HdGxd71YOnEBmM3lQ}lo-jq9rIu)=xrDPi>LS9Lw`5jb=@BTHxmuh z07a($acr3~H~zqn3EOWRpwMT2Y4yp3S@i@hSpD7?vm1^aP6Pq?m#aDN&Zuhfb>-lq zs08?Y<$&PqYxo#__$W~iAMj@3(hQHnTDM4EH5y*^RbM|u_xZ=ld5_^r2@`xhizamY z6i_3cmB6KXqspm%dL?C+xshv#2ZE8j57@d2Rckg~U1n4f&tte)UNW)5L2A6(88L?$ z^cKC*{6=}meFRd`Z znHpa;TQ)pvJ65YKNwBH*)z^uq`YV-0?n;lYe{aN4E>kw+-{v0^0%Q|z6pUe_K%>5A z4dK5X+AOWWqh&klJ${KirahQ%s5kV~-omf%rBK9nt;_5EyIKNy)iG#PRAA5zo1Po; zzmbP^2*|M3L{`jH^#W7b1VgBSlFeg#LCC|Guds%DZNn=ysPeGkHFU#@^c(VyGHY&W z^iWSi2M)NpB^;bPiqQ>mgmeSb4g!(2nF0T*zkm9c7k!#4o?Z=-mHp>K<(wxqK2ipf z7F50VO!bHfBKp>jqYxjyfU{~AfqUu8 z+54w>400_-(ZOad!qKK8G=>9Q7J@_TH=(0`yix`p_BfCw+s8WrJPFWVTl1AlVhiC; zI6>BYB#&k%ViTpv$@a;?jA0IY9R=31t+)Qef9OuoUlzFk{=fbeiU03E0Fxm8gf;In z!kJ2*kT)7e+831>G&Q1YsKPxs}{*I^k=MuT01kjF12!mkHiDi zWQRgW9-Rt2`0r_APfajrWAbQtuW^<#>QsslmzYRIo;I#vTG|l3WTHBE@nX5;L$#2# zCH%yFDsN>do03#p+aJ^BY#|CDtnY^p2*+#K^yArQY4uo!3!0|Kpg@`6P*SkTwDpj% z+^}J54va6?iHTyJi=6RXRgjeRek7axE&mk#%NGa~R!XiHNJxfjb$CS)cX+%TpW4Vv zlmk*=C#gZLYY86Q#m$;?&6Q{Tz{-WP(!_g?b-^f2=d%*u%#biwdI z$f8=R!03Deh(;vsvh@fL<;wd(^7g0yRRq@X2)Ql2Oo|c)BaLN(XLLEZz^}?p9+C* zUcD#EOMaYS>PEHd9i3nld27%oB{Td8$TBP!IRMviQuxx@4kq?TIj3%A2yf}qtG!Xepr3y+Z@9H_B3ms?X#6MrJUoKV^4eO|g8G#n z=oRdqtH-O&1%RlC&Ukx8dV%>uvf!xO3DlHvlAu77m#9%ybA^)8jZ2w4-v5syeN3hG zg=OxSIg)c{Pzbyc5B{lXXN!rjmFSYRj%XtL_){e+*=!PS?#&?*INF~hem_zAF*QcN z`jIan+B|fK$ujQ+Kv9t&*c7F@;4s9tqHkA4B`+us{@dyO2mgKet|v9sHA^UTStFfT zW@lau#;XkDwi7ekTmA5sCh9&gB(wR0;m?P^^=JwGi7i}&(+4^u_k0bK_QLfFu`GF9 z2nrIMWKzFUB0qCIy6t(l@mi5fK22kJlNN-!x)CZ8K{NuzlA|v&c4CZP&|JU6?14zI|1)_C(f(Oc-XhJmN{>KqvtzVG2;{z>~n1f(Q>; zWV3C=voiU}z)1T|-U&afmYej4S(?GjCZk%0ShGjP(kM;C(_!&{Qy0IXo;?W9_oEmp zgD?=Q2Opf$qwCk+R2W^@n^o4Rg@u>l!T&)(TO_XoRmfX%#!kD^ZLM!$njCGb|7OAh zy)r6n6z-h45Ac-|hhMz(>5VjJ-Vt#7p0}!6)71B-R*9!8$#y2GVFG)57b)T`o6XKT zmmki$kQ?RI95oUtf=A{uREK!AW46_6rNr4B2|Q5B{6@r#j7)ujZ_T*}Yb7#AX$7Zm zdxIHa8mj~YBE8@7(aToQJjHYPVTl;sE&;~7-}MYY`S5mA01%nbR@uFLxjf_E~(=De$UihV3*)F(sZ#8v!M@Sj*9oWA`@NUhhGd#^|R78nETn0G@y4o~8d;mMZ->%z|x8`=aW11N3)*y1r>bcrH~DqIlU54pL(!FzQSD6A%uVg_RWDbIUtmokJY(< z`fGdv{s?8Nm55&l7DkZ`KjW3$O)TH>cJ{W$C7UM^$L2A?_ zWrf!UUVv3>!T$Q%!SPN+X2AZ=no9VxvVa4_I5-o*bsV)FR?*-Zcy3;mL>lc{?v)4- zzfyw{m3d%F8Oh2fMH^{KP9Oy3S#`AuBd`vCqax=OnCd0HRL)=Yq{$S^N-@_|Wiej` zCppo5rt!H1wyqFD6SVW-|H7Z<+g7XVRb`!g+jO}ebVy?+3MK=@y_peBwSiBY@hDd5 zEe-ElLr8r9*q9&4Cnjx`qFw>W2?#W}E59na$|q^L;E4&jE{p3-)kwNQb=?UXGXt+B z$@CtQl4=L*2;=->6#eS~RE)K)lcE+eUU6)VyMa9u@%wz-bzf1d_dQOWu7h&Z%ZewU z>>Q)6hG$-ObYt<2mDx0&;Gll$NXPMWsNTGFe5TaKJ_>`@$9q&owZguM&ItRd4@7-P z#Gs#AgVHj+QcjhUwGJjI5u``vo>gC9v!eUu!QW?uA8JW8Zu5Q9WTvS^i=VKm>JEJN zBGPf7L^vRN+CiZG^5Kz~>l*>8;Y=y>31L9dOw|*`jgp-0=^%t|(R-lu$c1^c0fFAK zFe#egaX?yWJn=zc*}i#6fpL32bQ9C%ieD>h)QOTNqAr&LYr(e*JMK;T7VU~Dz5t&(JfvV?EB zglFsZ45CMin~K0H)o{#Cco)m-k9h5?tWs@de{sz{ z$r8FCMO`y^PQlBqJB5B5&_;Uudu4IP?DG5NdOm4RAdj++Ju)D92BH48S8JZ^ozwcN_wxWxnUCf+PRU_$Qwa<%9G&iIL$CKf|*jjI&gv- zSah_J$A<`Z9Dl8`RXw6aafhIKDid@kFbmU74w2RK>H%Yxpk01w`qq+ryt2`j$p!Fl zMEwSzg0_z$Vn#yvyPnk!NtRJ*s^WEf5iAe2)ec&$u}S2(yz2KcO!hl99y&%+i!q!< zPd=IO%lV7td2fi0VZTvGNsdHOitx7Ky{Dc`gt~`eok(m_r^yQgnj9#Ox_VR)c0c?mGZWxHULMZ;ahyKksu55|V;wkdWNWFE)xl|kdccv?ekq?d@?7~{ifo}aj~}fUhw8Cjw0(K2@0(nJ6s%p&t zxex*Bu(Wt#LaGk$eJgX3Uo7Wx&m2GHMN#Rd(5UWIg*2n4dl`**37@*}QLtM?OlTbG z*4zjGI1Dz1^skt%XCR@w7xaOA=(5uc>`2|QV%rzrl@}N<>R4SNoT0~$T zr@K4bCB0pvCR&nz!Of_=HJ7g>?V8xUfL)PeS!8gc^n!cL4$7@i$`*m|k0K@v=;<>8 z)iICX9R7YXqMC?T`B(nq1xIisyr|k6l)EwI;$I{@4XR4Ca5WFH2DUEZv5EeVUcQK zWv}F97Gm)Ov~U6E(VA<%^bF_W^5Dc#U*pxP4)_j6uohecHY~Z~7czb|8*e5^B~G$l zLaoI*A;!k11%}Su<`6R_++{2x$80||AH^`N?Zl~}v^U}Y?|4KtTfxudbxk!9!Y#5K z!g)D;bL|PNL}v_;dqO7@)5#a`ner98S;S8+6*WZO@_TX9WWDR^P(n%a?Uji2JP&LF z4^;AAMATr@Kfz%ZN>qrrlPMlm&tG>V6Utr2KSX>#>T#gGkIm(-b=@1#V-IQWZOTH= z{Pmf{qFP7mzl@GDvgo(NH~;kCzYui(!fqhPO_U)B)W6sr3lqgk*%Z z<4E?gLlB|HfKD~XAix`6#K9W1n(;{Rf$tp!G>oDBSyOUtLYD7#Yy~f;(1+=c>J^>< zPTE*8v@mr2(8JEZm<5RU;On{1c&acq;^BCs!LDN6s}%lObWp!H!$Y?i{@B4*#ZRUj zZR&|2dEssO_^D?lReSNkpQ~s0Z@dt!mZWf_oxhTSL>I~rJTqb!d;XicSv{Xv6-4|V zZ9DxLm$$;?B4Znd@-vw!H2}zCVEAY`u>?-7je@so^VeJS>j29l&`U*YKJsHoOP28T zM;w;wcW1rKZbTzTS2&kDDIjHwtgZ1V=rxf0Hi z*UF=BzDTgf6@M6q4M+9iB@7VBkqr4&Q^HrnlsWOj>;GsEkX<2E z6@eFUna4iM(=)EV(pc(c3}687rz{xGJ)<^gOU!OrWZOW=qaW$@F} zkNr&4T$C%{jt6}`)RC2P&7`$d#(bb;6B0rlW(k@xR$N4MuA`ZInJEqbu-_xo=*qkw zqBT;Gh(9lKoE3HBaggJeA*e(vkhzh(izt>OYG$XKY#E6&qY{&`G}M|iO!_N7b9nD^ zx#SmCUmJQ-?&7FsiD$f6rag3$VjeEf=apja(=%86sELI+wOW|;=UPCX0A}C5ssw;Q zqJU_aT4<~{G#7QJHnmir;4tF62ua6lk?)3jVE#c{__--~9iaxSDo4u$8TlF_pnG`l zHKGY0@wh;AF~@Ut5Q_du?(@_|M_A$Aq#^(^wXDtr7yu5x6{UF-wQ|=)FpIwKzh~$V z=6A>tPY1%GjiEMkoUzKkL!Dq@-W$>%fqj9ov5Ix>n^CVh*o0qU_yaWR0z-mRbn&e0Y z9NgYkoyjeS`X%^GpVU~3Aj{kIl=K|bv@HzBQQSpFM~zKRmZhm)1imALR*%CsLyuCT zhbHNx=wZ-#OzFA)SV4u;xBRY2$~Z@V4bVmqJumFOq+ujRROmgjWaDW>-4To7TabWQ zwWca5B>kIhIVL4#2!=;HjzyR(vnGo{x#O>)mlz1~V@*c_F_G-~j%pRXyT;J&O^_gE zHMl%@f33u{M@c`Ab(ds>uYTfJZSdGtyA9y^=Wn$6S!g0KO58ef!^arIN zgxgNZZhH}jH91qJefv|{6pOGi62+PX_SuE;GB)cWsn)l%ABbfKd5P=xwl$3mFhC7!IF# zEYK3F(srj?`q14WZGJ#p!JzL=A}Y8&^<5jM5b+qE1b&Bu40+G$crs8P2v=N-geT;y zN$#%zH%nofL9dD=F6v5b$G$lDR9cf)vugJsK3ypQKLQpJF7!3vpeE1>&4!tHY&6aT zhiW{qz)k#&j+>=?3A3y9wNtf#^P&R-5qiC5Nc`igru7?qo`mmT=RF-81gMHv6AVI9 zs~31$mZ^WMg;3M{xCLkuArOMBn!XVXZj;KlCT+riHQUgqdg__68x@2&->*<9G^=oR zsKDtbMSu9H^-8#zmF063DsPW&4#AnFWY@wBVQJSKw44J=v>mz#(g&NZ=_$jS)gH!q z{Sr)d*(82tYW_^Uef&WOAsH!-&ygmCF>mH^n~e;?$C5EK!f%nIc`=7+I~5FWZJ(O(< zVSpU@t{xk`9pTm(P}R?w&Kt<~qZ$<5oHW_U@+J5gU3DmbLW@6xTJi+q4gYEQ3ojTo zcKqjBY2vzZk0K>VU<}2D(^Pi${oswF%A2MVN*^j{?3r2Tnee_t=jNxFUNpm`a?!3i1zj zyfHURxW#hr!9QFf*d zA*julC9CX$cICdS;OA;G9U>1eUG}QtqHhwOpy5DhW$8Bl9F`@bapf7RMZ6QvUQED1 z)mbEQd>WZ}aB~$?_4ms&=^^?-c_fcBp$}&|`s#I^!_?P|pMac=$qVe&|5nyL#qKuc z0V=^(yk_WmC=R(}uV<&jS6css)b`W2B72)t)ntEE@F+?#kDT8LX_8n|OJ6H=*P|Gt z!Ox&k1&AdSqmG~o0RQ>rWG&G4+2%oG8BDMA8lujWMCN6@(1^2Rm6GX)4}j8~NxP&d z9yUv{%yC+4aa!7We(u%8iQ&hqc)E#2p`fAPaE>oz#`(Kn{kZAH`91jqnq}v-9)%v+ zWyFThQ4(#@ZzJ$EV5u=pW@}dmI2R{!PJIX27RO#_1)pYJ>!-_joJ0qtwkTzRBK{dA4HKPbq~>5rpiAG|H&=3)X~w(v8KV`7Zwy z{maXJsl4XtT%humms@h9Idi*mM7Pm0U9IBA+9&2SghBXB{bag-gr<6UgXG*$MIW$r zzw>2qhtQ6cCjdm@amx*@YMen2JBQ@U`9?%u2rY%)>>Y2%ax?!XV05MQ#=SP!pX~Ch z;S!*jV02~mduyhm!Uki}M|E_iioEUjQw=ookWjYWpT%qZY6;3EDuN@OKG8zMWBXF+tR(~y3K(=hc69tXnq`=bR3RaJzzXR^4(0MQ^!2?Ec-pw_y)+o% zpNg_Q6J(FD1JB@ooRAe?zU{L~eHJ&rr03P`?4_}f>1C;9kM z){>kD&;%=3*z~&npgiU^2YaTcqZbVoQ7D*yl-QmN9y38}OcTutV1w65M=y#2y zoi8hMUJ{P2BA8;k?w`I#f(^U&`(fmRNJw?jLr*)t>MzyO`X8$h;Wx{$)=Nmx%N|{e z0>+iI7o6(Ja_RBQIe4v9)TtLmlYEPEmM3B{N^YekY|FUd_v~ohn^@)y*3~O%(Sz4ph%4- zdYCYjt&JEnGMC?E-Z#ZYua-$q9xW(?iNrulINZ1P_CO3dMT0n0Cnx135<0=bV8xlt zgT_r|buUTL{UKU%K8ona;Z#u15|m-H>iN| zHGlZNikl^?hT`M{neOAg&VBD1YbUoE2PApI$MG-LXv0nNmyV=)iUPVuA}NG;YmJ$9 zR5eKM4u9_9%egi)F=YZ4rI1{(0dkw1h;79o{?pUX5%eE>Yp<6Gk0Gw8HP6nS#~td+ zw$tS%t@$`08cxa}3X(H?lAB;Ez`Jkh*?*zyUA;01&`%{p;AM zO0G)}sN@yF5;eNGhL(gLf!-A01SNe4;%Qt$H;*godN%}im(-Jla=Qf3eL`5`c4)DZ zNlYxT07U8MX!xe8Ig;soKcAm_cjsF}cr55*S@gKDjIeRD?pm$8-Il$RZ{YPXz@THS%pfEMhLqEf z%m=`M_I6Kps0U$c#dAm$Q4STD+dn}ytiOL!&|3UdGsA-;_X+I|pY1{$S(}SZCh(POuI>y9s zvL{}0{*k6AE7^V^;JYa9F>$Q^%O#R_dU$U4eHvu0%k$r0=vRpzDYH|qX8QHIc2Vjs zmx<)~QSPY;Tov*0lzJW%XI)tGZ#9JApyBdJ@}gD~`9Q_AEHBNBuY~M)o#?5U!Gn*= z@XM4Ps2tKBa16C|;OzSI7*sMe2DC=iwr5Q;OM7TgaSmX&YD(R1IEZ=1v0%?3D)$;t zS5d00IZVh?#7a@Zsy`C!OI6L!Jrd%>}`B9zXxC4x588WGR&%rW&@=LRolvX3A`aZ!uazGCtf- z<<&5;?qty@_Ps&N*ol4v_hXV1*~|FaRbBI%N!!arcL-aAM!i zbCh^`rpd4FsR^y$PW0L+F2JNQrr1}1P)ttXi)vr1Oceikj_lJ%Ohgxne(?_q0GRa~ zc2%cI*jXU+(jt#GO#{e%&@rMtax)I`fM&fFIvEO-qK3ukeY3N!>cuO^dl{bsQI_?n zoUCB`pZkejUyQeM{lJkr^C`H11X6#~V_uTu5kZ*YGd(`<1b7We;{!epX2>$JXVK)6o0hK=PnW6CC8U2f!WgT?Peb$)Uz77o z&BE4jXR5mi8g{$)4bMinvZXt3M9Ac-nzSGLx^tJZfv-%eQ4s+D{1CF%%Z(aL=EEnZ z$J45$ENK=QrLwSJ(oNrR@u{UV{Kism>L^;A-u*HnfGd}bx7sEgwZZg;7i`>qFf zSjHQe2`Z7GCp3m+Uum3@ub6h z#4|M`+NNB16OmMne5z~XddWfrwWeMZ@2bWQGuOhlRk<>?o%hOMvmQ2NrVRL;9f$Rg z0$`%^Gcuxt*HD`6FpDymgE7k+MPzJk~U!BeuW&)d4cus$3r*DolmVFfCfC@D-ADBcy-Kg=B9=Dp& z#QA-_yc}|7^*H;ifWGgcfHx*h2lK;ELYj2#+C$qH=R!rw=C0M;B9_WCnZ^Wag4Yl` zxM-tD5OucpGA~zxj5YO`FW{UCmm-Z@rhKx%>IfsX6%JbDk81VFQYy;xY9*&Nz@q(V-dA2}N5)_X7!2$64wJ-Ythg z;xI>i`H@9_2GR54t3pxmt7o4r&pzvM5AUH)9E7YCo6GtS;u<@Rh}k3jB7KU2F!Rg` zY+g3WN;F8VISO=KrODA5LYIY;b+MbC(q&=>JX{JyoDXaYXY6VUGW8W*Il_DP}%E`{Ov&gn-K*@WbOfBIoG z{JZyOwCH>o{-~zt24S@cNMJRnHkm27e_ImmD2%|>a??M7Oac+*L0V8>K)<6_whCiO znF5r8G40+t(<}~9kEw?`GsjUn2&xg+{u6J_lO?1h!yO#OTP0%pP4`G#HdV*UU744q zm5JEI0r#Ul=k4sRrqlrf%W`{MH8wC~vV37l2T@k%A|Y^|AK3#YV>}J02w^O<5Fdjz zdOVZ>18{*FlRghARZe~E03IOxC~+H^7chzrdeM0`p`r@M-!IbPz(gy+c#zaWM;9!` z`=|Fa6&Kbb_l+MkL(4diP&y77NNu%cEJj{_9E^iYq!DICZY-4``<;Fv<-kuyvk2ZZ zQLayUh;mhjr|w#L+7d|7OhEG(R_Xg8#Hb&r|GGLfbjEXz7{o=;zqddg*75#$b1sxi zeyz&#e40z&BX^dzioqI0DeCg(2Tk)&nVvTNvuf2>>8C+#CH!5O!(aUmi>e_0peiW0yXLajYVZ zrL7VG!&da7kFY%C*@=UrRqLU59&wLxc<<&O@PCVrs?v7nkM)W#mho>`Ik~6O1%L6M zd=`G#aNT=QJ#dqWsiY67odV61fmMI@QNV_ZyUbG1_z+<)ei+FYm&-ZtAK5auLJZ7N z6sdNU@NRc5<%|gBwc%)z=E-XP*3X?@C@b@mey&7UgCpTbR$5Q~dcHiL^O3UG<+$Y% z%e4`vmb~CWW#9m9tQgF15MiI|luuHUmuU_Xi8Js>dCc$E8Th?F2yG6}5JgxxSsUx& zVjM;Bj&Ko=50>^TGUojVgzIJ~^ipWjE3LSdM%SU(kH@yUT_Wa*wkTtBfs9q_XDet@ zDB4Cy(au>=E_;t;lCTe-cq~(>|52Y6_ccY>$|h=}_em{kl2skhp8PQ4rljiV{8wPk z4}3u3>v!{5MIxOCfc{J-X9@)tBP=Yq;-=SZWGs35cUQ}1J{7*wwY%|C*MKb)?cz~T z+q`R;xc3S^`@pvsVc>I>N?$_>70o}~KvRd)}`AZYs!)ey;sf=WSaQmVfe zBuxM?sD5~up~j8oOfV00KEF?ZQ6U8(Gz-*lbvlg;2+Cry+f>a*g`DPFCcAcVxty5K>oq0T4`Nv)m791SVXUh`V{nvLTb~C>R@lmeBq^NA5o)UeMWSq_8SFj zyeur3*e*ALU()2y_)MqafnF6ldrT}RV;}60Wj27f07ZK=&zGprSOcbrG-nC?fSNbr zAw6-9ehE+b6TXIqCYG?+M+GT7%7yXry(EXpJqjtvkn+zfz0yQj67LA;;6ahJ<>P~m zAiteg8tf34?rOia2~j2w!mG@2qaMk}p1=dF{ZIYj<(JFLFMIrSrz6YV6tzh6Y1khv z4E$m+Oqo%>cMg{KwT{)68vt(X)~Q}=ASb8{PWJ*$-L)g^Dc4##+Fh{sJjM8W6 zs;ZA{%j4&H-;|4$$`5`l*&tczy*dWgf`~e-5q@zdvKCM0La@YH+$X`N=MbHWmh&QF z%p>|f@kH^N#?*T9vUp$V#^>Q+f9A@JEtadE@h(1O%AjloZp!h3p(Jlbt{w*@*lBZ3 zda~+LdRVv!Xf)Aii;e4iNlBI_n-Op%>ogB`W5~zEd$o906M2OaQcm9pEc4zH-V8F- zOBBlTSf=4ma7nKObMS;=gP?s)ggx1PRTK775j|0Ec%zBi@0z@anWqyCaP7qxkM+e> zW2r4WJX2EjMg^c7!A{Q`(j4x~q3?I9L;a^7y8x=O<;IUttF1TIy&_WPsmnF9Fzln-LaE#}<~0H*=d;d8)g<6ko~TC1CQ=~J z3%psPZ9x?>ibM0;R5Tsg(}rXlx86Q-iLATkiLk{m#X zTG)7MNG~c8j3QIxOA^z*`jG%QI!u^qNPQ1e2Q#5WN*}@U!I>WXebaiDOqv=w;mBLc zZP!=%b&hq*S~qAVM8ZW?O8lP*h#pQss?Q%xA269bfD!_Pap(3flyN@>Cc;?=Ci39T#_z#$ABCx` zSQVL5+g@n!^5H)YNAUwbfQQH64~XA}94n+7`W?no>;$|s%Y$r@+Oi$0JX(DhwGz56 zCjdc_bHI4@9GE-4()T^#>hV;(p)Xcic7#H!nC>x_QxYHqi=O0-uDD7EtJEUFeh4~F z=4{Y6hT_-xh-(B|Z3LWClL_b;QBx#Mg6E#hW0&;oBFO_fm7vBFV#rGV!nWL}OcTb`Rm}$ErYva#hK!_gAXaF<2dJ^QJsB z#JC3-0-lJUbu%n@$rPlUN78kY`IX;I65AlSqfm;}RXZFhrb~U1CBG2>w}}kwJcJ+q zuZf(Q^xIGsFB=^zW1kR!=vLt!A63%vP&=bB^7Ve32qC62F-@?_IDBi;bL?T+;~58LyyH5Bl4gQawa=hj;hEJw62E zrF~sfMb#sjTPWAUghI%nYV|Q}!*yHB#BMhc^HH*0dx#osjx6*Q-bHt46*w~0!tRe( zL2Y4bW<{zW3in-2R#i2scRcB7X_|+TRe`0IDT)F&!VObhDF?GbeUR|K(LWvvNz?3p zm@FJ2HFoiaa<&7*y{4nqH0Bd8OF7Q z9gTJT;vUWeUn*NWE`=U&GQuB2lO~aSO`%mjAZ!{hW>&x(p5+V<*M+6<&MtKooK2l< z6%i7?76GKk`y=LqpbZb~4mfab^Bp!FqsiCSQ+*QrOpcSzJJG0glOn&tc3>Dd3ToJ1 zDoe>iDN6@P>y?^<49y#-c3me~CYg+W9j%NJ5t{q)kZV<=d zg(Sz|DgmlqbQK5iyvaBrtI`WZt)a|Q;I3QESyfAL_0fPfUi1n2t8tGlTmN%^|JiuN z?n2AeS4yK&-_5`psq<4IXRa&RFw`6Yd^=&4<7?c@y%{;BSz^E8kreuHACT&xrimLH z7|7#$cfFFMZW%tdm{qiJ7j%%sutdEb0IIyiXV;6&QO|}R50}^dJq6WDMCrJ2jJK8u zcPu>Gpw*5C8LxLl1(19dSXGtxCMMJ{#-Db9uru$xnBhSaO108e!U*LN<7$)>;HSX^ zIIdf}At3HiMVSQM-=R8wJp9zlxm04gkoVN+j_}^QfJi37mmeuFd*)l^)j<={h@o_N z91MsqJ4aA6jU-Z2QIawt-$|WolHgTgPRAp)F|#F!P;D$=ZOV}f#ZVE zO$T~$x4i1-T`jMAl*n?n5^)uV?2Pcg=4t)-`=s=}!&1|bmkQ%RpUj8xJsybdqa;aS zhA!^~3Dub2qUOj0nngbhHF_D{EH)aGg4#~ul~N(j-{#veP!5hzB~7;&Z#VKZZhLAkcz1KR=qxx#YvM6m^+t zAe-mPAf7@^5NO%AJ^1fb8TN+ZFX z37dUYh@N`%Q7_E$RYf<1lUxlSLX?o}p)xXiTYhf`;%ACuU~YaICO^j{u-X&CSow}S5TZUy@J#VlSU!k zr)00a>3i2Pn6qW<%@Vru=I3m3}6rfKTq|6Cot8%AaJhy19Dw4UfW z9WYG*soY6JwIZBT{Oq{_t(o! z_^m$*IHC}zKN4<6XmLbWX`nKrqWpr)Sfp)_H8qiPc9*BFB>TXi2_WfUqpokL-#9BN z@M&@;`h0nID(DMuOZXsF(E_8$S9bLby*iLZU@G#&Z$uO>sz013A{l2$H%Bj!Hk2!Z zC%#K)_rs}p#8L6XNht~2tOj0VUYRY7@lVmed@BG&!-%mWYoTTnpnNk3HhenS1Yn8i z3%}~Qvbg-Ce=~XZ=d7sqyT4#j=`wEvoMSJJ3o!pLo5pH_U}&gL>B-k1j{&ALY98yC$lbFz}te@^7u=^xCmMwZ{sYDVU2^@(-#?S$$Kb|X=V z_YQ)jh|!6cq8$CI41eiKJeTzx*_Pcn@zv{ndf!_{Q)he~8Q8;V|1uYsHfA2@w48~( z6Ue9u7J;sI2F<`Je}L=M`++*CwlBe5Vax}J?8eiImwhTuA;Hlgb}_JbPTwqF{hjv@ zvqmNLt8MQ6=-(`%j}i%k?$}651tqQ@Cy2+1yBTXGd~t9PJdOeutDzbO7xT=yST&$j zRLgIkoGI7L5cDE-V9n<5Xt9`oaXXD8r6}^hnA<%T{q$p-xQegHpp9Jp7s`3RP?3qI zhwBLB$p!B-9SVHMga1}e-}4;=f?f3;2zB%Xza0vIs^9fTfSfn+c6l&83f>a*s*()s zl;1K|p7C3>b|K*i5skA+aTrO%U|8ad_wY=&l^1cj%JgkXAht~SKF9T$|zvIhbcy^>zd8!T4WcrK_xsJ{FhWk#WhFlz{JWDw&MJ<`S_s5NCQ3i z*i3c0(ZT-~n!}&i8Lim&Z7>qz@G~8*%S8@NPa1sPQeR);Wy);j3ENw(svw);u_>J7 zYh~$|P)=iMfJKtV(ES=^K;TYY+uW&ZB|!HsHP1s4_Ns=0L6SNjS?&TRhZOgAY?W}6 zaVnn8XYAY}LN`)1YI0f=8&6#EiXU;VJnk8evLG@KLMW1APdx1JJX*dJwE^$qV)G9= zZJ(G4aDW;AL9_faC^4ozrOI}PU-)!VV)_xUoQmnBOBh(;+#?>HYW1Lw?L`y;cJ?uD z{>0FfV-dmTwU$OW&*c9W;|gL`)pU;sm3ZyeMzdd|juvT~F{)VTJ_(v0`g%Wg1H}ua zIfV~Lr5{4yx(>Xu=vfjve>YWw?*m6fS2KYJ;Jhm55XLB+zJyz4L9GU$O>rbIziL=t z_6G%W{V@iJvg04*_u28;W)DWq5#BZ>P&vzM9oUbThyXV_}R;9Ears&31{ZPOX5M3q` zkDZw(yFqHGv{0`;!l~zLXEOa~70{aAe107g3G?|dg0PIMf0h%S06*A*dh-@+-=@Fp zSO=IV`>NDWvd+PYT_;S@N$iz&JVs3F$b5tMKv}!ZXI$FkpqngkBX>HlzgSXGvOp?7 z4c|rp8pJ!#?a$dMhvIho}HJy;Q z6wJh+_ux3 z#MQBYR`Df;2HWd;j`;Dy=VbGIihczFi!d0#8Ycu%I3rwyYeF55=|(amwn zB*G~{UVdy1mOOVU@4S4ueA6!>&pPD8D0rd;aj)Y8Q3XCfYk}l~W2xhd(&JT(P@NUObysk6MOcfnJ?pka?(Rd9YDa0sRqXLJ9+bXK$P--a;&?Z^Ilf zt>bK5{_#j7Sgy@cRRhI(S_S8#d`KKlIMi|S;dLsc0`}c$a&c;rro@r3+E>j9<n6RDgpkCz8pUwk_m7DrQ|yp6pY?tuC6*;3?2MEZ>;KYsh$>kYQ(>(bP4cXNri6er z9`9eRzu>7;)wOZbcOe#DC)xDVgM(~l)`5Josr=}9%nHy#-=Q}%(kurBg!<<20|l-A zqOF4rwuy&N)`iE6aaSX%++Tk}hB-Ydl0Lk3NvtYT6GRMzo*PjFG+_(3#EjDyd} z^-e!%@oHI^f6i}Fy#^|v`o7tz5~362wkbRoDQ!Ww)r^c%82La#I}cMIP!mxquaW&W z{Mge5L)n*S$8UutJnY3pofk7nynz4;Qb#>{BGa+bedCLl%Jcqv1`E?`F~8B|KVB%$ zpY!d&VGT2v?FbcnSiP0SvPd|QFRpfTXg(n3*yuiDFyr-_urq#=4u=VJLfWQO zJyP8lQJW zKuDuf?kM*C{aExQk>Lli-!-B2Gk+Z3BL*TfHR0+XHcoS8M};m`t5MD^dKqz$fP0<7n^*)Lc(onq%;y z>ccyaJ_A{our%0+>5uS%JaRxri zag52?+6dbk>Z+heTt_*Z8fl+wdS$YVc@Y-d0|;kK<|gAeLNbI(G-@@^5A9d_SS0hR z?nFp#v1LY=CjzecC$*4B4D6nb0LTnGlsSTI22 z=>MgI*0yJdSR^|AqA`fcYq&f!H&qt0s;wd)zMW(@k>=6bVL6D1A60UE!{ZUss%p-h z&I}6Yv6Frde=kSPqQyNbhHhm>s`obiAFxl1jnB<`&OJ$2w96hm8F3B6zsibY??p7i zRbqVoR)USP(dX2&=)K+wIChPGYQbk}sx){I$}k=5r~IgMFOppCy;;{p*P21>sMZPV zYofZA;LyyKOtMo8Bb3A40G5O@9fvliQn^(0GJ8}?QI}Zc$HGjLra_%hDuZ*Q1ZR}s zH~6P~Bb-(Pd|a8ewWz>cvM;kY^>~^0;!@pU{XZEXz1L*Y3~_a~|MOa0DYQQwn>8iC zDBdELN&m_ArJ!7!w?ZFK!72%bxaFs(pJK$33-?dM##@g+wG9HTxaU@*$IX)OReko} z(`xxIDLJJT=qqJqCdg3x7J3M1tCg1jF2jHDL@M0c z1t6zwJiK?YyzU{&QaL2JPPCHTZ{IluUenc1i81Yodj+diKtxm}eg!kq&%wUjElX81 z_qh?C(aJNWRJ~_ndO8b%ACw!B;d29hs%EsZQb}x5qcEtvJZOQnSC}ur=AkJjt~L(_ z0LBYp%7W)U=ll0Z(V+f}bga+wwPTpSUJQ8M$7T3CUrKMnV=RbpepQtMZ%6>t6a)l< z_1)BGkvrDof+JHd3>MvH@O+QYo{6I0Ioj#y=n}sJ&+DRI`yq^3bdRZHsh75QA_x4pdk6DD=@S`c!$!V#ZX= z2=fM$wg$0wU6A}FuHNf~Wa|rq7vF4YCnEERqLrN2X7IeVvTd?c<%;9_8@i)Xz+0N-z@v z7`YKhM4Z4M`Dwy)0*K~K73*#mO1_+Ub?vWYt!-Yd!6Kd5&y%PRw>XvbD?;mCr;lr6 zS`%1BncC2(rWod#sAZW|GxOdv#to$Rrk8J#6F-mQBfhBbxv91fGtEOKEjQe`elTSr==}C; z-$4q@EBTTR%G%%Cw!DCMd`wj&QkuRLZML%AjuxPHB#TkLz3g>^x z-=+uBJUAs;L>HL5%#6)?N{Bfo=2nhn1_AVgBVl3 ze@e>7FZ>439nP44Bp6X~KOWoUK_5J;DZqPEY#&?KccYw-%}sgaDr(^kd9=Lli&X4j zV$o{_t+qwr@peR^7KKxoX3*hCZW^Toc|400Rk;Qr6IuF~^?(Y)Hb4vdBkq@^TWhSo9n?f9vp-f(Wovp?xPWa;!*6E1 z%*@U#Kj&FOX6pZ%rVDZ+qy`j>pqQES^Htn-FXNVORNb69J^M=yhqcZSN?kp z{L$M&cixP8l@1A)kENSa--kd41>E>Hm7@BFDUd}+S;`Rk$H*Ya{X})uiIutMnNAR2 zR_V)Mi~_iG>gTBT>vz>^CMK#SxfUWUxBAFpUOgI|dybn_dGux}IvWI^#rGpA?6DN^ zG^8G3d7LBZO{V6_tl!+pte@rj*9-lzD?A!%5Ktlo7Mm!IhaM`gduZe6Egs1CRF}~b z^#+kxs^Uqqd~8AgkaqIHUWfOnIqpRx4!Z-m{Y8x>Lj(tpAx>hyntFa6ZuzWmute8P z8A7>@2v{cXrB>|9dO)7&^pyQhJbsA=#_a3{xrFP@ydjvB4Yd|U*mQ$~om%0|gCRP6 z_^!u3BMV1pfLC;aWFx%fd9X)dU+O*kkd>cBNJ9oN)P4b8R1S(5H&0I?Dw}2B)WOL@ zMbkxobtfI(^SX2i)fw?gXkUpar{xW1MSZPQDhz^>h5l*sWE9;k4nbEi%P;EY7{wqe+?{Rkh_8ytHE`1$6zAy%P~516to;!plNIuI ztkn*X@REE(dGOzd_x%)k5LKQnxtWabqp}jqx{rgK2m_La%?b#~`~yX(y8rk^(&($R z)MIxsM}Nj@Kx0@AVFQS{nu8*(WYCoTd+8ExaG!BKdVgjV$Xg~FiBUiMn{ zQtJ+S3=iHQM$`lUUjKH#^wtgr8Ox3Fi7zXUYBg!SIh{LCM>`((erbKDlTc4Y?JSmS z-VDxwaN7)gWyZja5e$ywTWQM-Pu&$0lrKh7?n=8JUCkJhQA3=6CDT?&J$sMQUBlf$7!_^ESui7 z%jI$Z`Am7n!$4r-*UJ&^w%9CKAi^QI4?M8!WDFdnc^K67YT0z+Eo(#!OZRUX1@Xb} z#EW*jG%=c37RMYP9|NWEjCxRdDj;qTe)82%ye*I`1%E!xE`hb=kE-_vG0?&cY{nD5 zTCST#Q{NA7jZQ#Sn|;OYa@$X@F84DGO@__89oG8p|1z=+u}jZ5U&=L}8Nrpvik*lg zK(WcvW31s`Smo6$QvCIXOT~X*p0+=Ht)Nsc95Ffj9w(+89{tAgJy-fv_x6mAve+yc zNSd*Kc``HiRf{To`K!ly4kuBr{n~EZ{n`irr$X`GIQ`sYemp|0{P@Sp^S%}V#?8Ds zt|e{b3~cbu@Dugvc>DD8)3?3bIL;3U3G+P!@E#*j+hPHu7(!D_7f+<;##yLJ&qffy zwd^-cAbX8LD8qYx0|ZHb+%{%zjp!MYh=KHps@YDa-}jc4 z$TDG>zQ}4+!OX5@kYDhmS^*)f(XT@fIa=z6O)g*ca-rD3C_~LX58UpZliVv23Nf=w zjz?gNPc^O{I*5+>ajLz;wgl{JT`o*anO;G_pOf zBjIHclZ(n4Xs@&b1!{TRb0?+uOh6B+yt#j3#IX9{cR77^zb#@Yygb`g)x(Ah6!))^%lJLn+7uvnETWxFmnF>cJ}XmGgcw`m*E>T%8cZ4|e^ zbSW1SP!;?kCJE3)$!iY=#Su-|n^5J?4?iAB(tLZG_5ti5CvDFRTk?Qvf{4=j#VQxKEi6FTyrT-Cl!HY}{4Gm5hq!JfJ-&^xW)jJozl%3FOk- ze)KpeAvA3n@@i5So&_bOH&GDmI6a5n$|arw(S^X0q2EeC5VZ^3-^8LQ`?3*bNdGn+ z08|xkaNKEX$aj0=0t;4571^H)l+ydAPW@T%ul((=w%Z7^9=3)#c+6qpU-F$nBRe%mVO=)tv@k+KXmZ!(&y@nUdw|yTuRF9b{PdZH2chQmNc6JGvKq~ncC84zy@2;w8dgHnkghr)s zuiFH^4z(cix^b9(uDYb}5ndOm9&B^tC4(Cu?YVBi0uQeuF1=$(u1KB?HjePqI-fvVK4E`3c+5nb%M8o?A$LFTf-G17hP$M;Ub<%&5Hy^r@$(OgTNY zjO-Q)kGMe*XqLf)6c<({Tk*w6Ri_g96~9buC4%RbK!pej!HpE5eVgZ_lzvWl_*BL* zKm$@59slY6b|yquj?%b@#;7Wq#d4SB4fG*H>{FNl5G^4%MLN9ebwzwMfj!_HtDJ!| zYAzjDcSpVz4_J*_acu-IM(A-x#FRz92wxAdzlOFM(IrIjMlR`WSu%;Dw8E#FMpmj5 zk%{$J@U?9;<-lsyR}`?SQ~Fg94-)vW(NYl_$LoNxu zKUcER*K>`O)91yzOg>odH@T)k9izO9FO+YdS1gvfL4U@1X>9N z)!jhj%n}A&b%Bhpsu5~fEOU!K_uQr~M9EER;HKcs{rnDH5FZmIa|4eCcda=`f#k5k zsU;yn7tt(pmBAFyx=dxg^b5rVe=+bP_*y1)8~xdQNr|9q}2{^WF6u-ki)y3YtBZk!f5;Kg|*G3C2kk$eou z3NvitCa=&0B?8tF?fBbFkT-FqcreN|x)lhSN}uE#E5nI3F$ z)uRwM*oY+UD8IrFRnW5zxyg_)C?Px^4G78G*`SQZ+kOcE;M$rWLWnS&qDhh`WFaKY zb@DfT*VH5di{={@kr5;CW5`@W7uyNc1%0T41bsVL^!dm9VR-MU@<^&S0253l@mcYO zU~NVZVwz}i@6jmU8}Q;I<@p>1kTNVQA3f@T6%fU_@_Kll7I4n{DWHs@q|_Kr+3KFH zN^Mr--AgM;b9lpNyDu>6KL7ul%!-%OMf}>2Kqz2h)2qQt06vg~2F6Qo(h>kY1D%E@ zmtAILkR8u|zl4h#eT9MAk8RUJ4AU>0_>-!U*-a-*zp7a#Sc-ZXcp(PE}v$&U2}9lYW6`n)ymop)tcl z){JXanPL2URAwf>@aA$>VJ9l!>=$=F+NOt#3JOLYf(R&07ZA^Y7~cDKIqwe--sRMoAZsS&n18wn zl|+)krV?*G+%8J(Ew2R*ceHCI8pH)vC`N0(O~?zrem7&BB-LS5-X&s3y-QPwOu6NO zI6V+3^7Qv!8=lj+-Kmh0rMc0A-)s_hhWB17VO2{oDUB_cjmQSHz92x%=i&YQb$&r! zk}#O*_rrF3K$OU9qfucUUCw-*%I$I^R_=is7I|UzQCnBD3E~XiSVCI^pTllZp}nIU zJAoZ45*iKUj7*5AG^1!MyR_6nVMm}$Elm4mlU*qcFY@EiRiq%XAK*OdZs}p+*?IkPdChx^um=X?aG0Xd zQ!jepTJ5ncl>j)3Tnrrh`{fzmMB+qKJalt_ao;#n)(H+X2hM*W8U%muaj4MVaT5-RuZpKDm(Vd$5XDbng` z@nnMh&TA~V@FU+N+(JO$YioY!4jH z-|$1L&+|K86>PY)gs4Cm>04M=^cc@9JGn2xOHB|_EY7^B(};`u;)SBSwq1QAE{K}E+~4V z)QYA;oQaXP-LqaHH;A|p4* zT=&!E9y^YDt!j3Pd?8xf+YSIDv^Asb=_ikUS?tMfDXaDOd!M#FhQ@Yfsl8r~-8yypW)@wkdBCD^;i1!Da^7YVyt`&js98XJNRnik-9DuegSqP^n4uk zFyszY?HY5k>O$)rH)p=uCn_u5n?m2ZiV}?>B*Qf#Xq?}e_bBKQC58Xo&x93RC1ghV zET}lxQ6!M;mph@z0Xh;A;KjSn+i|K1B~}=qZ?9@{D8?N^c+hN~K&p&>Wq}P9Ui8{xl-7)*-+7_rQ2JWa`V}GWUVDZsWuft!jU=+)L31G5 z+^U(Ar$m_P*u<2n=}^h(emyL$Rwe%2hmn{YqDp`3ThUp7p?o!F0n#7AX{n9TP|~z% zEE}QL)KJbFm9{!q3lSjjBVZALm9%T7c|-cozz%1p#(H7rpni#w`?*()y?Ij^ujW@f zXwoIvbC$N;)HdlHyeVN|Y+wDIpE+U$8;4FXC+`?u$+mqhe6vPx=0YKPv(X+BgjNA( z3SA*D2LXamy@?dmFU(x#$~FHvl}+6_qfIyyrehY7L8`|hNP-e^+>g)+G1M#3Z~;7c zVWIT$d`KS*EldTj20 z*y&ncMVf3K)O-j0FneLmsN%&^@-mjin1$apjjy1F@Oju{hlfyJ_c||UO^|NhO|KIV zohQOL0WXTCt?PL4?nSg1~j^iRfnnzFoR>*%!WCE?)BURlftPC3gS_aHH)! zbVZz=;il_&GVxPCrD~x2jX*$IYCMlp)MT9dEh>E`>&+x^ExXl1;(Lvrut{1B)9AA6Y6>}OKrp4W^+ZH3;6t6&(T&1pMY5)a^DdBJE+NhzSZL z`WIDv8ic=>q{rDQ(;rm+xdc5OxQCHhw?PmJR+<-Ujw&`Y{;(=_)I=e$+w5D=aAPZ+ zRTsUOb;!d88z#9R+nQ1CQtiBFy~XqCzJEaRq0f9iusL|p+v(*{+o!iJm>0Wnil=j- zzyoA7c?uY?8EXwB5g90Oco^FmDkGH4Z(YX8i*RbyuXXg@iU9i2ljQlow`3Q2gb8wB0ETVXzVk&p1 zv5}OBfa2|C5N1R?Y*t9tEdh@Sj97@cYs?c)k9u6>>!?wfi!cVv*kCl@>!D+I$wPjf zJkq;tQsBVYV71?S`xrus1_3%qPM_?o?rn$g?J4Sb*;Msdx#WYPjNz7n)6YH(Z=eoj z(5^SLkD=p31H(}2X|21^=w7(fNWw`nlg~Tn{c`!6{P0?N$YTId+~1DEbU^4JCj0Ra zQEtSSEp8vHCtI@=v>O!K7uj^eeoyIdtyBG}-$28qCQq57QU7Burf3MX8wDSF z!sIi(<|7qe@<0+dF>@8h<*h`~dcO=m@vg0JY!8&h8|&dX7G3zV(cPKFB2=vO8VE8 zQHKdn5T2~8JFgB!bfc`xbeS`rRYNW$Yapw1aDB6cjY;5JHXNw%NIyggWThwofp@v^ zL?j+l)*xOsU&cLPY1pc@`JnFuINes}Ia7SoGg|@VO41R|RnPkD8=| z#l1V|HN6{1=X_{iWz|*x0mD8QS?XD67=#wTb;jDm?Hoa8J2;e}ye1NC9aXRK?a`zl zV@jnK<#x!Ok?*WALEasp5PpQ9OceO!%f49{35g_p%E15Q@OPd(RV2Rabt4kcUsL!k z(#BBQ)EqOlCH!TAP5f5&WS=n6)YKO;&}@@%^+2Z3=8iq`i*9s`F-Hizd7SKYSu4K=dlQ@ilq z&_=N`-asmb=guUs*VHh<6~i#%EHA6sv0^bpWRMoy`4Rk9A`7EFA2uRLs&wdt+n*uL zNn`Pr3I~mJZ@sR%vqGgF>?*6wiz3*Ba&c*7RdC=ai-6oM{l1r@vlRDzAjc>hkPa!(N zAo0jaozKkqwWfzCNK=K1axLd@u7-OX;R(R?BhR*1+YLcE9uRdodsofTR?5>R8cpjU z%nW4I+6JN|_`1+>I$`?iWm^AD^}J|k!|JLROQ3L^z3{P$rqY}ukUDQ$W;wPGEyYOM z%u-&V6^ou8H*OLb>jxMD1Ui z8w*#)q7|1H#%NoHmz?q(Qi)AKozw_Q_u?B5%<8GI@-oZ6#R;2rx@wmdJW~ zsnugxW?sLx7p{~g)xJYVXmWvSe%f{u0wJJ)$)$h+t>OO!+IZ2^Bh={E5wI5{2a!_l zS$5UE17~gZbrypRSfkNhH?GLmPap`XAU$wUmWZ%c{*t{z0)ZtlfwL$P>V5WpZ!FL@wQQmnD(L7;p?ExO)0q9??Xu>jL9dl-cI}3xK!vN6)SrS-#2JZ|Rc|@{P40!H$`qoj@!To< zC0A*`gr9tw^ewL#j^791-FDAVbU!8a z(~F1^q_gIaBWI~cfomc>A#?mUAqQ`rBS$}fY5|9NzMtlFRe#7N)`I|N+xW3y4kstKOeT!n$Ox-$im!XG|^kjOMJ z`S$xs-m?o=Xa&3E0kFzn{m4v1m{2*hJ5<`wAF1gXW_@QbE5y2u>8CO;c{2*`^Yd|d z97Uq(B9&9i*p-kHO9cByTPk8*iR~~QDo)3LgIV-FiZM#M%*^}Kt3sfIS#hqBT_s#R z)eIbje!-B5SncnJ!7K=~DI*bW1Oij6E_k#hlwiM6aST~|y>igpuOn ze`RVXdqGg5FC=VkHRKx|sY2pnYE#P#j^p_Q8HG>&@aO~wS_}sa16A9DQw+@1l22P# zZed~5k9obE4|npDkChk0-UZkQ|JKSu<1JX~ip}GO@EfFlEKT_nn@gABq*CGr)nK{p z12nee=_^hKMa`o@%!F;XMe0ZZ+^UEnVP(Cf%Yv7C>>oMu|7c2nh<}j24}~j$S{9_q z8UV4R_2A7jFjG|kkk<@}{@ zdRYW5-wtG4f!bM7K%#pqPC1nrC$8Fzgg);oJb=NGMU;#bvypV*cZVOI{?cz)CfaH@ z5Mm+&X;}AxS4QfJ^p;O^V{WJ{h%`&nMm5ne;VnB92hbX^UX4z6yb&MYrRe2p#2}&> zo`&BOL`hY7JVZtNEd?CW1(AknOE`ibsn87kOa3_BMXKjGRU|Z-5NW?CIo?Nf@pPvS z%0kZysU$R^${?*?l&(E1nued;tJr)xFcADy&h{|S+?BWGk2ecV0}f8U^H;@)q*7(@ z{dIuymxbi9{Zj1_*K1wT>;auTPb$b)jCo}LhJ6~S& zpD&h|{q9O&m|knOLR;(t;cS8fLp(@9jtIRqQTfbQb3G{yuM^CZ+gDc+9GkfN}`beHC4FKH)2!Cd6DdLXnaB0ZB< zMJ8gLVVO{hUYbENY>z5uZr=4O^x-521Mk&c>UHNE$7FBoG7c&vxO!q`gOn-AF3xqfsV=(4m8%LBj z|JV0>*1Mm~Rp6L*A7*ejs8oBu?>gklmHFh8nR52kWV%w4{VebW9NgwvpOPD8WiZge zth}+*FsQ*!^W?sfN7jVuPMmwT{NSlLrUXH@cALQ6(ZeR2R`HhD@Nuc{nzilqTADBO zvoSil7nMw`qm5g6+@qMUy+X2|@#*roSL6pJYq_5(ucrXw2S9;q1Q6qMI_+R3q|fH3 zyVR0~6|q)5x(uSrvU?}H0&u+!*Vnypu)#qD_ir^6UkXE9i?o>$_SkWGkxWnw++$H1d;`UiQmb9&rg6{stIjr!Xcmwnj4+dL?YR}<)DcnfO zBZ~wgrNkUmCFm6Ez1)h}+UVY2mlIyA z14W^*R)?8OT22Hbl)Sd)>2uf6@^3* zdc%is{w-Xj0+aCKpXwDIb}WTxM3K#3DtX1voRSy6x8XUFhzqAe%m9CUf`-xip`Awe z&X&K+g`7mL5=bJA=kP$a;GZ80+Oe$Af5#6^TB&zH>6C$#PyZPd9^S(2tOpMnk7H(? zIB|zaUYGsm#lBo_c{#Ch0(MXv%eYQ3c9~|_ci?o$v)>@QZ7%>>1pzq25B%Fp^6)SE zCpmG0@XZi~JYr-uB6D{m3Cb|=4kPWa^RGf1`1_!=HCZ}<<=WY|;S)}B-7k4dxU4q=qhUtL=%y@B zwB0}^J9IjZnP?D^JvfhQV*|nfrC)Q_kDy96$}>8s^FdM<{rX4$2WFRlxK2N$ymV`o z!>_&kDn6N^>~Z+tzr-AP^4T*!6=(UUoQ*!WqkFHEQ+~zh9$k6;14n6R*AfJiFb?G8 zv5KGI{Chi@2q27P6d<=sXAtS*%w?&4eAhowKFngeUGDnOiN`WWVKfgMpu0J(vz*5) zW^!5O5(XYC{Diw9)Lf%9R1HKJJ9L<}w4vFer#3@}a^a10*R3bCTa-^FOqMc(1Pc`L z8tT$#WS+v`WIyWBy=OAojb%iF?XSItgUi{&iGoL=?4E7{7mS_imGAgP%z0~hwE<-@ zA8`Nz*O0RsKL}9^u~r{e#a}(Ei?e+kMhTl&TN%SFX>bmgLD)T`x6*`$ASL07z)lDB zeD0@g*F=!DV1QJ5Ck#%qazfx0?+N>?wy6)p3Pg(HN?&`v#7Ho2KlZ~XaMEwJ&4GV0 z`Xh;^-t`epVjc_hPq8h?cT{d_O%nxa63e+fuI1_{z$6)c>iwCSE0dvn#&H#O*Z#GY zEO4EAUTjmGHU~^PMZ?d12+cG5kKvb#R2WM>AzTn*PJUagr;ww5BK#QzWv5(h8(!TYGGjyPbU9Lx#<(}YFl4Q zifXX5*qfP)n?n6oBFp-xIX2;`{Rxm`x7CswXht!=4FSnhI!aI(jmp`*h5XBPYS8*ZP!*m zJ|wlce=gkxn9s+$iGaL$P|v(l&b)HQlKpBq`K14ReLwADId@cyvJ`efUd`|?6B%(LY6`T!frBLT*+9nltDv4)+H+@xu-id zQ6}@rpdXvd!c4-35hwfr3k@44%pTomK$fm6QE#+y7ZpVt`J-20R#Ei@3!Ww!>9|

    XLT#AKEp&3Ulr-!k7SnD7QxBC>L_@nh)rA;%YXB{__8hV>EyM3#~px>>=-{ zNwjBLY2OVHwuI76o){(uH(l+|I1E$!OnK7k_O(Q(InvQiS}wY>A|fJru>-&Y5JY+2 zZ>s4?yN4Ag_jW4u>I1CpZ~wttsvgD)qFZYs<2%#~&Wx%XO<8@oeeaCEPQ`!px!@g2 z&5XW?$3Gl_az3=w!U$_C#}Zb{NRoVtjesyaeIG~pHjPibqLNAnz_{bC_xNfF<@iRDDb&vIw3l(r4$L{S-CZLayf?p9F6eSF zRvsw^^5_>y&_RVZru-uS`nU6&J(89^G4({ZJdC?!g%8==MDGl<-1~qON`Dp}z}hY1 z?I}BOOv}n{u-LJYyD}?ked0A`P}{-QA+~tkbH=cF8@@n3jbCo;ZZvr%CIF`5-Y2t{ z)WWTVI{~TJRU9U~UOcuv;-ZwU@O)JUz@t&2$M^k%G;X?o>eoj@=l5yZbKeVxT|gyq zKZyGF&B38IwMr29qXM`x(~3@a^r3-Qx*A7TG>Y=ZFpg8yVuD4Qi@=6Z)uriQDN@Or zOt+Zf;jSo~fDr*FJX2nIB?Y}!%mTXbu+`@)7QL1c4=Vs}XHaLko>6Y`D?&P<;{@gp zmtDb>I={#MQNyQW|5#wQcHm%bZidkXQoa&=uN7vc94vpB1}`%9!#PB+u4&e#57)rM zXNW>L{2jG(pQEpluV{|xH=|$UPkwZSH}PQf`=j^#QOD?Vr7uzTqqo%eqrp{(&@?}y zC^wn}c4~mDqW^qwVP$@XOpk4h83^#+n;;W zUVgQl^H?X{u+$ob>gyi%0IRp@s6J5P+B6)^=V_8xo;yjTB9908A_ zMk5+oz+$6To8A!$ez8x_mH9b;8&QrMM0awk2>cgjahL@!z_p=StVGNe+mTXa0*ySI z-eh^c5e2c_KlRY4j*dq2Pxv)t0(xz`?8mHfLvDKnEZ-_WN^6XZauP+GOE&tV0l{=x zfd@naq5xd|Q_fl>qyuqOx8snLbrjbaRP*E<&H=E-B26{P2s02Fym$cM5nNY^UH~j_ z68eW%g%%T@wU;!vrEIXO>MNIKX+M;j2rpqnPN$cZBB_tP=|z~r-0tedgn*rs2zX4G zkk9x+ocpr`GzAeGzmio`@VsU+MBU%($%7HRL(RO#1X2Ch;3^$vojk4o-XRf92uIC* zRFC22Fi0pDYRuJ>gTUDK_CCI-9@JRh+N z7*!2EEAVsOvr>J0GzW*<+Vkb|15cllvvGkF>?SoVrw+E9Dc~ZJLlyA%R?BV!NxzwO zFJLYm%UgUC)%UcA0-fN_E{(+!vteU6ThvL6tSZ%57TG!1@X?1PY#qI4BS?f?R=Ijx zv39!RS-bqw78;F;DK<8`qk-Y9>%haI;9*S*$)W*^wU$uSpz>_b;=_9JE@o})9pbPg zSa}faHpe|9`1GNF$*&TjYnypyI*YJ@2!WCJ#!>QNucx?ngyv}>OfXkL!Tx#li6=Q= zscLGa1sij*y->k_1a|qivomF4(UQDduM+=?L!OzA`+xuk*W#9b^#5Qm<`jqJE;_+q z6oV#6G6UeH76hyIZN{WvZKDr7fGw)hWv;CP_<@Tk0{FmhfI~8hg45D>aWktHU?j<3 zVaP!BwaKF;82g8^{$F_$NgoQlSw#WGN;_7}>JAVs=&C=Dw-$s1{v0~`?gCAJ@`PrnA(zTZ9B6^^UwCh4K|@JF2>v>0Jg5V|ScYc`?<|rP zhBB5@j;ZLG6r{fuGFA=$7H9Ir5n)F&g06~ZZty%1<$ zzWte%=F>?7qJF@-pI7aP$TF1MR*!J%g;_YyVOxr0Mc^^a7pd>Pa?2_f5Ss~6?IbQK zAi3}mmkA!_CpWflN_j^%B9B(CJM^CX4C<_2=iXqh%D7WILKX!kLR$=nEu5}u=!apw zCbF7OUxtk+vob}Yc8$I?@b*7XTc055a)+0#;K@*EP}P+=`X1Z4=8{EyLwb`U_SUo2 zwbZZQH6{sVsYa>sn!D|ngA$A$_~Y2gs>zhPfR8u)U`4Xp=*SWM0~Fi%!zc>f;bB34 zxbNA|s6$J+OivKM4~9xATQ&6ZyN60vP?oR%f*J(KS<^BN5BORF0o-{_roFPeAeQYn zJFinOi^w8~r3gmnr)x|i76#-rLk()SG0fZ3o5;c( zhfK!{p^bq%jZI?Bfy#c5a5~HP@#qgeg|aNmR`8y1wXw_V4(EdeKd;?N5~`xb+kXG+ zucv`VO)&CwyzsSMn%^@Kg<7Cf z8lrm6;{xFh>`dxv^tIrp_ea0+2e@}5mRLy_8HIcB?a$Q+@Ld9@pL@hr>x@3L+*8+* zFMSpkgS@dw7Z}}pg6w>Mv=(tBsl`tML8I_zYzwMJm~02RT37^GJfQpHdtOZTDGg?@ z5yjNfP^cEixZ;b|Hd)YzTieIV33DaWgaA^obth=0OKwejvJE*I@z06vAL~H6MH*22zy;ds9Mb|Y!sMkw~O{nrbDrn); zfSFxks9Yp62sfKh3Q24i!_J|7`dbM#DHp!B1Ig!eS=4O{;-*M~4IEi}udbt(!kkxN zYBi$Fcm?~1yZTh(QZv>3>>}@87U8M4A~b|&tRNfFqWquNbAfvg#N4}ub_j@3&EQ}4 z=fwB8kTl}1IU@e3zsL!1@LaAylx?_?V2RidzwyGu`v7U1>&=Ef0KQf@MCCF+w6H#2 z{?-r2Ta6su0br-Fhih$F_>);xB(((?LTJ)jGyr{qzDfaS<*)(#l8L6~BMDgQg6v;i zF8wM0d7)p<`w@^T=9Lb|-O6FLXk_#G|AA|4#k_Iiz5OmCO{Fig0tz+AlH@&bE@xl5ED_@Q4%$O__1 zeUOjgM26W2%+D-YGb$E~v(L?z%U}8X&^^+Yg>xMkW^Jx_tb71PqWqf2%PSuG`7+!0 zUmupkTpKJhP>;AjZefSFybE;gMikfQz!Q!XRF%U6v>b0tZukQJvZqx27?QxVRu_VY zNLzkX*7UZQs=`gXf}H~^rsCXYEV=-`*)YKuH4?vddZsK6qSEV6%Uho9M0wutA^?_T z0kI(B=+r#t&Bk@9<$S$L(!1#M*89LaDENzw9fe*GAaV(RAn7{L#y-T^vf$!3u7X2) zXQ;ONWB&>RmKsD&upW;Q2D;UcA}}HistVV~{?78Dn!1G~E-cPmCOx<$TgGsU1&D$ofGnD;Co8e7v!4UE$Eg>sg z&5?zmKbe9;wi8sgEKo4$t3&4865%7yK>HNe_)wQo=!>bnA^nWQ<+@F1!(x?Hz{7vs zTv4ye;X!sV5S=RqiobPdIer36fw1j0*nn(=<(O+gpsm3OAUQ|af-udjH=@VX{hi7A zix)LB%jk{NTv)xQ{3bL9Ze0|B-7H}pv+6`$EuU|(S6J2oFF9%lzmJeXO zN4U+KOa4M`2NeF6dUPE$z$-~cTXb@qR1a5+mtflAO@C~6zudJ1U^mdC1?kK1oMH}* zupR7NAm~^o8fy0eC;>N&r@~fX3{&MZC6+W*toO|DC*ftd6#+Gp67v0AjbK&{=!g&b zCkh{U?AyCr<$8daONy>}U9PLNxPPd&WvbtCyQxMIiUgI=ri@#djvn$QD0X{g5~$Go z_EL%Um)$&*`*fb9(}4YjRO2YN#pL!-fXrwwpy&Yr<(yalRhp`K%*azxRVc_IsrFHT z<;4}09p5Gha=(;=s5wdgYy~!uIsdv7GV8Ni`Kt7Rg7J3oAZT^zs#8T$>c=_+^ndf=`3_ON*0zFQ?$J3iX6e6NO+cwh^Nw@%I&qOth`X&c0b*&yDP1 z%5B~eD&d`Zt}J*XijH7=txQ^f6whRBtVinASY28bg&0fxzrOP?5`$u>=Z5S^TmQ z7)_{4KoM%tyTGS$lbXD0aJ*e$=`b6Jrh?dJx|aZmqjyK|JbL%rzaM>LDPDw>1hSgy z_@i(Co)TBN>`UcEj~sijVTUh>84)ovp8drU{XkWv>NlQ!595)mK!GX0Pf-~Wf%4}r z-OQ^XA9S&AEeFZzrVe`;U>FVA$CC(#?n%E5je)U7z$r`lS7?m#(qdtM>T@!I>pWat zfno2plo2>w4g?ObY9nqNcc21r`plmPc*8({=rJ#_F^Oh#|4Ehmv&ueh3g%2gK#2-| z++jRbFxLIi+ZH54>m3H~Gx_I)3kg(m;u^@d4;1uz|M92gO@CRc3RD*pYk%u;N7Mh3 zL}2gy9Dy3o7K@Q6l7CW(yDVKXx<|8?6aF2N1s}|!q)6S{e&AF?q39}H1YNKLrTh%e zJ!O>q49;%}_x`3>G!1gi!Bf~Nwh;w6mye;)PdFOXM#Cz_MfN7)7a+^Qlp@1~@>ax0##o0Vu7XXi7HbgZH8^S3l%^(QE%u;l#X?~{E zVET(zf|f^$D3iMvxJ3^@*+=OD+C;Ko(S>Q=r!E7gU6TkX2z$ZDs}`nhli-%)X!x)w zYPhzk@Ix-;6!xfdX4J$9K0#FM$WJMt;!#6RXS#vu)qt}16gwwvMG%NL%3fejQ)M$) zM(j^Ugm(#M@5ITUtgKwDp@Z~J1d4ws{_WeNhdvVha@hjNelL6B!M z)MaNY%q~Kfsw#CgJVvb9>k;xgq`1j?6akpoFPD+YxXy4yr#$H;=^MXaL8MG0Ayf|(x;LpvKDA6Vue0a057*Cyky1e$9 zU*93p{5scWfL)svCo#pNAP~<|gykU2Ibt^z&-S1|t@0*-LjkTxg;to`DG_WN!mQFhaNH2aEO%y%R=%HPYQU8 zv*p*}zJ#58p3q5fFXV1`gDEU?^uV{Oke>prwQG#&O+x|l*4j)s|7w2?20iN)XJE)b z^duO@4za>i!0~#1CoS|wxv>%GUMGRO%5k+w*O9$5)WM*biDBx*`NzL9W?z6F_fv^6B&FL$RI5^qd5kS#sQSo5Q2A= zIDOxDJMh>C>YT0glD9qE3L=EmA_!TM!7wMB`(BT0UJEuhgE*8evnE6zjN){w(g)M(9vH5>VTNM#_-M zE^ry%Jzg+dQ_MlktwYaMh(T!Ts z+-uI=!VwLGo)`~owZXs-J|2Yt&B()x@5&-`z2>9Nb5g_4lbiUwg}uuq9A}-mu_d+t zz~l~=MD4yv-b9w)P_X{oDX+`K%-obRZ1P1H3OPHuGQyzR8q-%uIt)8aKg`8A?kOX% z8eeIpqb;CT(o0^tDvvMmMGUTQEOJ+%cjjYoX|C?j3h3HaY`Ah%QMzF<^Zl==+U$Mc z+RXml;BldyRg@ysofyb(zLis>IQMQ@KaBH(pf@}p6gwq+ZIeA+UiV?SM5Lz;vL?wJVM?d4u~MEZjt+q3>oAifL9|5@(3S76m>U}$eLsukO6JNKR> zZ^^rLJ-b_UO{R_s-(It!9?edu3+oDMylinfT|dB;6mU4MUEexI?fuJsPO z+BIP|&&aqFc;U&bUCF`)ulDHPsq%N$Qvf(zw>ww2RdvVfyrgnT+?XB{7iPr3ep*iW zK?rolermuulrI(Qo;v4u0I!eR4RaPfCTyUGC7|+z)onrbI)awnK_4VHF2*YHDq-D@ z8NrtLh2CQCVi|b&(?D9bMTDV|L4g07en;1gesL#wln^kkHJAg%F1X7*aAh1E#x1}x zkoE32@2_pqD0a;Sjk{=-f>i`_XmK1X%tfM}6tQ013_BsmGDaaH_?aq%2iYX23*x!L zzK4Y%Xqg+;+j3r&&MoOLBs{4*@X3>2NUjxOaq=X+PE$C17J&isi6<5)2voKZCz`Uc zk$xS_i1|e;A02)`uZ=(+DDG3^Mj=a+&Ky9@M>H6SC)MM1Ia>~~&4=5a zP_(fJOgh$75O2`IRxh$zgxR+Mf)!N#sRr`Rx(8Prb9@OzJEvhT?iJ}Db zV)V)$mRo)dGu&x%Ql{ri)~^?svKUDUwUotn?woR$M}PEStAFa<*u7Cg1hCl`XR{hG zl*!|qHV;I`A%bmT$7fLA?7C>)Sdx`t$46@IUKJvco4$&KQDDwGSx&wo{My`_ED>0UEvAys%g@wyshMpz9i_k~$1Ii_AOopj9FQFd|Ny4BRw< zAB_I^?azwXFh^fos-Gfr(_`BgHOKQ9qajPzhM|L|X~(ui!yT`gvNvm)c|TxM7PrSz zSu-%&y%)F3b$?E!*BYp9w&_y_&75d*qt0|@B8`Tt7g37is^5{SW~o(tm56Wt$VD?V z>mO;E3SQX&_HzS!XgHlxu7c9KKus**@Q`?lXK7 zJnwzPE^tEPrYJ@)H*%pI*F9$FzZ%#7SIt+i=@oo>6%O#6G;nNVKOa4G?%6!mH@MS( zSGFS+2K+*GYUl>uU-YLIgk~}CG-YLgJ;)bS5|@9Z#wzw#s6jw=kjsxOzubF&RFF`S z)o;8G2WsLfvNKU7uimL2WueO6c^vW72K2CsI5WflL!v+cbb&I2oTQIsKYs)V*lNgXGqt5dEFy}ucJiax!F%3VtfLmkgH$I=fm4#aY9Lc0z2E3R zqx;>zy#<0SWnAbU_Sx+@UY$!%q;uNKwFaLte?yn|P_V)*UVAMc4XA&h6==&!ML5Ba zdyZYT4C7jH$Ww@jA*_Na`faqs1Pk<$80*Eyp zKcc;&o>Ckjuh8rcKt0}^j|^898U26qJmiXiYwH_6AQwb;wOnk#0`s3mFZG`}0Zm#v zg{U|~w0QHccfkEDg*A{FAdJk?=#C!hrJ;Km% zF!)B$B2}0t3Pqvc;#$FKA! zcVo!azPc8!j#AE_imW+ab=R})oT7z;a0Gw^SuZWN2Sc65p!EvMdh<Ui58N*7T52fvso&LCn#a_hZbn`>iz=y?IX9WLwb zs3{K(&?L8#tZF}1sVKkB5A6mqb#(9L@~ltBY`Oju!^ZdityS`)M7~8qpeGU@DS(2v z7T5N%%aYtOR2>-~BG^P95?mJca`Ygdg4}|}#m+0MDikPM8rW#1Nt~q|<`fNUC*zRe z!&2k?L$8G7GbQ{T)RfAZl9Bnf-$)5Sv{8#qQ&$#Fk5}mjepe;jpOFSM2-)%D|28d-}BLKm=7950A>j6}fcV_*_?*Stdv=yyz!$TZ0s-E1DN+ zTWD5z6ez$-ezPP&O;okL#2Qb59C}c*>=GK+i-GD#1-%jE8I=Rx09y2*l`uqQTA~AB znO+w3?N$Go^nlQ3BZLa?ypufw-otVsWwM#*nrF>8{Oe+@=)WFsi=qQCj^u3}q-am&3)X|`3Ct?`*J&^RNPL_}=7Ag?0FA@FQb4EA?Z6uC_a z-R-wb@`ai5qPO-ILC&?~l_rJDaRueuswQ60SkX+ z;~<^K?&={yu*-2v`VYNm7^rknhH|PsdPe|-7qUxn^2~`bHTH(WKI*%RIq3ml z*5(OT=-u<52KgOV7V#Tyt!>a++dm1)95gYD^_+W^shwDBXrLdRJw`r zQ;$ZB+mM=irW%x3IS5e^lgGb-4rywtK@k6?$Ayq00T!V(6{5n>@lEw-1Du_U_Mh|b z8tczR?ymgs+%A?mFTgs1TYnA*LHO!noQg|KqNTE_UYaH4$K!vB|KKe{Ra1#(QtV(K zdzAHwbC$s+wevW<8n=#miB#q8^ZV+lOjY&*E^ORpZ^A>t#a87iKVLTSia!ci0;Mvp zD9F*D9gzzB?uZO)&stS1JRX%z#7l{1;{e=mcqR(SEGym@zG0^%X`rO|u5Va4biN0^ zk7jWLiS>mmZShc8cqi@!82ut{`2ixh@gwIf^~40Gy8@{|;GV=1keOFNhbAPQ%d;!Q zs5o+N3*{?SwP`i1E$Tf)JaGY+&VyU1>yhizTSlA42}ivgyQ4^h2{q2)`W&mxTOr&R zPKKW=%x*bg%V*1LIX0Dgt=2}Go=U*QxZb#1J!(ILe0pxLkk}fhr)xnjo$As`HY`mE zp|$`m9_;jzMOntlm>kocKCduj$Z%wiA)5Uc%fezV(DX*j44Nq~Qb^6jf+spGhlVOcIoq*QPv%UzFA^w zyGM_p=gVTAmv=vMtO5AjlmJEsA=UJbWA44Am!1$(jM zPU8oKFeNi15FR~#BuZVc^O{efYK3E_0)ECr*F z4bYpK_q@9T-}nZ z_32zbv~$-1&if}wlagFE!GaxG6=F^Rv{mQP-`ZqA&5;*Gf3P-X%LADFiT~g~@gm^R ztLZ^4(m*`CzIzuA4tC`_16=1~Kl<6x7e)W_Be>6?k_Lh?qETVsB|^xiT6FH$>OC%x z>vy>m1g--;s(q5AYg6C`wFrCKtMaG1z^%7{l&77^Se*Zu@x>kTKlxF|EWGc8;Yar@ zD!Ku_$>FZ9F&u7w|C-BUxe-DVLBn6&Sx>aErjN4DDH469MrFCP+x%1XFVA{`3ngE> zuheLob$D002IXN8aq6jMIPiB@53}gkpn6%DZ!K2>UfE7q1Uh^q9{bS)VzrBt7yRyS ze*_)-1F%i`#7ow|Iuq;biS+?%Ot_L-tXGzK#Y#4gz$+M_0j*{ z^peF?B2&%3suW=hm+q#lFF^=8*HgLED+kBgsGKOzgue;^jN$C{I>oO%9bQ+X@Sg3X zk4X7E`mJACLE-T1suzo0*amtiBKgmw_x<&|gdT6Fx~2KY>9#8`=6i+r{qY)Txe>X# zIB$#d#4zH;Hm0rTq4v!>PTnUvVIAK z+pK0u3?>R9{Io>RKrXTr3GQx~N&#BI%jO=wm~Yi?FGI6SCOffPQuh49=^oyQml!mg z;Conp_qr1w2h<-Mf?BLa#e^=HKm@R@SaT8j2cPjaPnFqOFLY%K<%~z%*?;dRD@`Zm z8PqQB=Nev%yLfi8Jm=>u^u2JQxza$y8o2wU20zD3(_^&SG>vERL zrI{(8P<(-L%*Ye%5uHkTh9M2oXw7pI^^3WZ#lg1dl&sE4nUT1(QwClO?3Z^+4{G2xYM{EKbk`EkgQK_^oST)y=8T?~bJMX?W_&cp=lkD#uZLG? z;_hqT`3KIy@qg?^oGfQ74m(h*{AcoUgWAsl3|iCbI40gewlu5?*}X{Vo?!*zy;`uW z)t3X)&VoZa+KFepJ;vLsW9v2S_zyb~VcFQCK$kaX03BvC9BWnBQam}Z0ytF7L4CPA z?mg$uTp|AD$6yIy6nd0g(W0|sjChof?lsLg`#2waS0hfs^~d$@CtV_VJwNC5yjbqW z8cw9spipPSU?wAmCwjiP8x_y;7YXdWYE=iZ?w{qK{?pO#^RFn(!8iDqCr1(qrBpxm zk2QmCb2Ap1_&ce$9R4yMypcMr)2jwW%r!pRZN! zanOG_-(bkG#)F!DDM#4zL?t(I1(T{2`ne zhbMsr;5JxTZk1?*(354WW^yUY3wKHw!skwvXT6=EE}xIyRgu%LN1u9HVpD0D{&~FG z5mR|H97eIMo8;nO1yYbo z3l>fTm%y-La*&~eGTOe{P-O)*RV-WuX6I+dPvg@>XX8$(elYnWX451>b}wF~9S#r)zF zLToA0V2>+8`ou+RY~rFQD~x7;9N_7;N)2QIVAPPPKimeE>&0@(8!W}I2D|+RDy z&Y`KGfgiBC*IhIISyX|Im4sK7x0=u*7Ctv;t|}L86rN(9>7sH>DK_AJ=Jx$W4()sV zA@a$Vu8BXCh6z_ZYwC$W!pe|1`_5GuwF~CT%&b4B2=d=~@RK{+>m=|6#7cy9A>2cC zu?@RN1`8%dMw=h~263}N^qTQQ_n~m7@(8Ga3qGG6Y8zOu0(rj6p z@o4Kgx9;KgANm)VzzY}h)nbbDU-XISB3)nld#B5(Q~sWah~b`)^v`V{SJo1tB5xJ& z3TaFJR<#!MR1(A7CGur4k!eo+2ot?c9jTG38m3OoQY&^y|N1qRJ=?4dg@pTa9{0)9 zg8mE(nn`=sK1s3`l(R+M&AbMQT_rE(cN_Avk`R zGev$?rqzETc#LvS`!W8_VvXRkl$RR9 z$jd|bbj00pFEVdX_zY+FYGnRUl8Tj#D1OJ;Q#_FBL7s_rtI{8=?oPbg;>8mfLNlQ% zDO2;J7yfR!6$+=;ZQ9zXG$QZDETzowpgdh&h^L?SFB!x8W%QokdA7WK!iq{4ESO*8 zl|vG23a_Qh>W3`|iWvru2|m`8Ayo&ZD2xS{DRim|jLZ#kcp9u11!Z{$7k6{rGwec( zx>tyEc$aGt=TfQD9!lpIzU^Hd-8)-O_;>i_Dn{)$VpR1q|FU-9_{_VGG~q+HNfyc- zxQ;O%!KJA{Z2Z7lP9zIr)yiJ)_~kVxY4nA4(xQ4gZ+Daj50-oRMzcB;0(>kVJZ;NOQyY5DPw%aa}o$zOP}zxRBm@iyMD7=ePSmWm(*e|(Z#nD|-y z3G_FN%9!c8HY;{SC!g$me_f6gKuLaGi^L{vMJyMeob(Y@0tk*j0}=OKV*{40I(G*8}eLAahtz zIPRW&7AG7U?7Lput~6|!AyLv|&Fas*NYaAmf`z`iy1DkeG2xmJ#r^Rg|DVT6)`WWJ z04eyLbW!|_z@C4+LJghya>ZgkN7;M-S^Ci{yAB%P;Nw?RNjc6SI8@SZ3GLCRoGhUn z00|k=kpKHOWaXV-yisFUgD`2)7VSWmTZ)H^FNg&e={!%=Y1Kv0mVtQke ziAMjfmTv#Y7%r`_<{THCkKt;4y_7f)L z^dlUWcaA>tQ#wX;O4CA#;->iWAZY$zErA#oIF$~>!_VF6Vf;dEh`SjBy@4S6CA8ac z4~#0q2QGeGvaO){%Fy&BkHv!M9R86D8W z=XbDk6$H6VDx=Kj;8gjmXL7A%&{Kmr#?@O`0G*kNo8zC3{s>e-@2P(}`pVlXZ{n3# zdZ+ME=%XTnuSm($`^7-iG@~mGwGeroV91ef|_435u`W3t7jhq7< zfs@`q;nrm(?2d(TX%2t*@=T!}tJeq^0S$Yg$c(>VBQNvoo}0{|LvoxVl<2kq9wZ+C zVB8CC0pS*oVO!;f1y_;6U<^UV;edhU<|EKMbh+?0;T5Zz0c+~n{&hM`yiJXkye3>1 zLC6#_o0)j31GUEtbv&S_cgqvKr<}2-$mRe|Yw6pDw4p?wo1imZ~o7h30CjRTu*gMh7Oxme;bXQ7@ThYH&@` z{l~YR3-@2KwSYfH_g8O}bjv{gLaKT%J0+qT^W-Nmlsj(XckWVqD#4}t)ebA^^@Ti{>y>ELrQ$4TU> z-)zTjZK-mMXf-T1nhJRWA+YFc2shp>fHZDwwIGU41hg^1m-OzS6RXEk@xGky3YM_0 z5pU2IIqT^wpvhG10SV8)!%M_N*OsJZzs2njBeI6m{iLO`6631W@q9!U|Mz0l?j`9v zbaeqX0~~{Di2E(il?gA#C7gOs881QvrN(R-QjZJ8?GK|DgT|walf}uSrP@NPA#1A3 zvgAdo6v9vyvNEa5kaeXA`F0tT9!M9gyhbM(Z@QG{@OtRdD}?jFV>~WuOx^V-C5LRb z9|e$yt|83a&^5Z4^!CAq51Vo>e(N6wv*w* z>7dMrAizZ*X95QStFZxmSR_I4G2&_v#tNK$s+@hwZ+s37+4DvMI_(^UG^=){625b- z=^+c$oyje11X0rby&xS~w0<5Mh2Q(EHbn+4saMLpKPwcWt@-g z?fn{40_!~b%v0i}J55#HYgjJODqC!ES{Q|Dy?Y#&%K4lHOI&q;cMy8%V;+cZHTfrT zFu++r6Q}3$piEFCa<2iI*hbQobGHxzm8guFsB+BFeJ_%T@Id}lj|r{A=?+E-jz^m} z4oM3$Fjkmbm;iLm^v>rEXvcDShITBT1K_Q0isav2Mh=(Zmw3W5vQncXq2#o6VT63d zWpcxaI(q?^v$S2kMg2h`_D};7@B;CJSwfJl*H7wHkwjhq>Zq8IaNLAwQxt+aGceW6q5~ zxld(43sb-L^JyZ4SV&}u{r1s^O?fd;{a+J8=QsS~S6JMic=GsA) z?8>j_z^X8*+H26cu?d;p7s)@RqBL>ZNFwfWQ)DPcL1)f#%6fgEj5=%@i^T%N+6Z>i z4@xkJ1k3I;G?)cmbR)Z?9V&nh=Q^ur!WV9d7#E3r4mWc)@;eWYX&!*%@I~Y|4H`-B zO>wFlXBkgf>R1&TEE(9sQ{FK&;A$htTWUQ2%ec;Ui8lJ78s4M-)hp0ND7+KXAkSzt zkuH47Si`*`!028O=cwX^k7NnC@|_lkJRt4NvnSf3)H4lROb=8BNds+A_>!uw7I%S+ zM5X>ayHXn_=>-81N+k@`yT%Rb=Z^gf&tDrob3PB?qYspV z^hfKyg>u_}+$(SR`Q)h`z2^l|ysYfszzg)=oO&$Vch!zCYOjA9#Alun7Uwy@nXaiD22hI%`Cl?%Qm2%-gPvrH59hk zN8eKU^u41$9z}8AqhI4b`a1}azQ6(Yct`hMFR%I6l63HLj*8z&#ztFbS~V|^<(Dz` zraYDC8vdr13FyrS18L;$`;LpcPq?QEg>aYFmG-{ANeir0KMD(O4rwXI=>1f&tN@iY zL{F$@p!oNof9u4ZSDI6zd#Y@&hC@vi8Z?P(4&@iky$rr)(96A%G;?eAT6RM4k30hf zEBx`^4DQC14@$)h1lZ+z^=XT-?+{?}O2w z$fbQKSXXsXzVx&dAOx)QVe0Jqo#1J&XXjS|0;o-YQlQBYFWy6)o*`F!u6HrcrS#jd z37lY2NVdJ)SA^~_dLz)%(G{g)f0TZ-Ub<1D7LPPbznX|)RKk-g^A?N7D{VI5V+wqb zZT`X07b&d^^8>~8W@b6Do>E0fNT2X=qZb`cL~Fy%mf_tX$`EEj)IERsoEy7DI6T2# zt()Ozi?o4$4{PaSX{!!YxXQ2X;+WXH4Oxb~$*sI>xh}yKMFNSJRR(m-S)In2^E+fV z{Lvqo-@``?!=Qo-VG`j{Br6oeIQ=*=brlJS2nd!fHpNwM996qE{RY)!J$=eQDHZKP zaIJM8lv+_gPqy@9r+Zn)5Xc9kPhcu}S%qoBquz_)igKN1~m5&NV(E~brE)SoK zO|j9dPRiw@sH4jAE~i_Au@1Z)=n?s)!RbO9sm6k5B|C2~EOem~xCE$V3+q$mNB$`K z70QSwvRsLtO}}N*DHi)y0;-BW<0X*uz*lpQ*gv&4X-)yq0Kd7tC?5TvteRgfaIg)! zOUGP76XM|qzxt9UiRu3&cH8nvIsP&DOiZXEr->!$Tl*)z@4oAO~oc;c&Nzzws zwRR*+i$0$^B!mFPDfP_na;3x~frcM&31y$QC(0|{SgP#CF37046LAw3kJV^9(=+y_ z&o}0aj&{s`fvZ5~nfL5UGBv0N6(7SkQR%{lbFeCk9bkBiXo*XS=y6lDnTI&TOf*etTH=?zX>s#r4eMXO@5v$f%J z7WkB7_|O75OV=b(s{J;Rj+bi{CQp5@1dKMihvjklC;l!*gpOzcH^Bb{IJ|(ju#OL+ zmQ$NB6|3^-Lx`eBA9;~_OK@1roCQ?4S5i7vwZ2~GUmktng#geF5Dfj0@W45mIeEVp z_Gl)wcc(nR78eL;d%4v2YsWB!=etwx_>XU7#R6Gvliogp5`P#efo&8e3jH>)*h}1R zb6g@GCDzM%&xxBkH75EimO=r0a=P;|x2_3(V&ikQ)mCjkjM|#tJ}w>?*zqpSswgd; zBm~Ats&N#G!p}YW=qPyKitil`|A+8|dV5#9Uhgs-qg$ToW86mH5TIrkx9V>>7ePIn!RzaJI!)+zm@8uI%N9*k-;XipL^oXFs?quwis7LQh zu0OK?u#bUC<8}pY6BCebBN1{xBwba+r3R+H0GF+gwdU!J?%gRnzAeNw8;vu=~c(VC%bY3T)u&#%182Ipkc21C{Q47xVc|u zsM)o*resTtEt(goC}THImX|G-7c)ie3Zvnc3xUx&oEa>6Lh#Ee2dirkQzKqq*5l7T zs`uw{n>eIDsctr3b&796P06l9C(G-8Hd{|34Bn~)!Uvej)tehb&q08yfSz3J3uVf` z6buddAuIxDXc!LuE$R>2!)Ayu$6BnH=4^EK_?E?}k0DBLKfg*SdSfcDP|_jiNqkV` z;I-yTmwm;V_0wvF&a7RpSg-1Med=e3Gf4qK(fhothZMZ`x(TSo9&MwQaM$pi+8Di9 zO<#NAM)#frIrg&-%GKZw)uv2dmigKvcp^gAVm<^)Lz$1rV3|ttiU(DL>fnLb{1>EE zcf}X{TAE_U0meZQ+c{4TW(~S44ZD7M-mBFI-6M(Bivzw-5rG;j2w{2m=)EKC%m?58 zefGw~@tdEAChEsfc~2Xh$B0Q(b1i9hLPJ+-e-$qrL_-Q8c?P6Kyy|1}SLLKXgw=#p z$A?aq6P6Qfn9;*PukJ-znLkH%@Ft+!1dTQVwGM4w=6nbIMS>LEZ=o^idveh`)|)Hm z1EO$ZvbR>vSYy+%k&r%B@8PGAi)<+*%F#f$b* zC;zBK%GrJ)Q+Q{yiO8Y*t9Kjcy5^L(BY2*~hbTk}f3own_pfclg*~fY_IbuYBttn7 znc0eJH(*_z@0ZilUdPpr7A0}=mtH>5tX~W0did?nMos?D%@Vy06g@#{HpqDGS^t@z ze?S9~rq1*P7pnmH(Bd>0`+GXiSs<>6j~|H?Kgv)F#kgT=`>DWdEv;JwX@s%qe$E2i zMV(lbR<)^JT{Vj#z0(6lk|nee&a&>AFtP=uKN$Ts!$ll0j&^ei*6nM8JSv*SR`}J~ z?5TlU1y6sBX+{&Jqqvw^nub)kfG{g!y#%FIo670v2B~p z-_!6X^~ktv3c0SalN3HH-~KFKh?#u!uvS1i`n9*}bi=!zq$T>&{6+tYP<+e>( zkZSr|5EbO0Lum@P1)kV7su^tVTn*l*!s<%1@mi=5fyiA!cs=)KdECG35{mIO{W>)= z%NnnhTZ|oym3ni>D}4bQt%+mP0@+Jg^FJ_G@@H`Oo&E3^JG$<}ShCu)<$*svzyst6 zhe3!iga0&*na?Ax{_d1QTv<$tHw$15&fe-!J=Pk`XN&T$^Woi|E+EcU%>YK9=;GFmI;SQnnO$?1}1i&JV<}3rjyoc zQTe6HM3YD04 zEnB*OfN1>0I)M8s_Yn0E;U8*-5PS7%;e6rCNI3lIj^pfSK6=>nB(0dHcGkZ={gZO$ zjK8Q%(v4U#{dBSC5ANZm1d_syRvQw%N5tsuToyHe2ItG|Ms0KWng41!lC_gOy?fNU z#}Air`Ug))HwPVz54XatsX0{*taDW!Q(W}dIbC>t-mZF+fMNy^#@<|-fJQg7MEZu` zxCenJk{<{jHpL|Pe9aRCmTqiK>T2thamf54g3aAQ_wp@kjc)i2l9}*|x$FXW6Q~l! z0XEigB(1lxvg-e2od0k6nhPAE&8#@Q06k~Azv#CLN}7z7q&DD*r!7G*WKzQmSxX<3 z_d=hJx1lX42p2tto@28-15rGF?O|Ze63xAOaLpQ1q%%%>M7O5MDOmCz!kw#(ot7Lffh4K^>!x4>c}+Rr89K;Y=-7A!jMfebD2y2zacxcYC#4+w ze!%nGS+`=6O0)`5Qlt>Q<3Vuai)rF7%8|d?>cSHNZxWg$Yh4k_qdy2`I{K4UrljA` z!;=@s#W(o{aTQ;VtT`=`WJ9zKf9n80Ik%n_OE~ zk(5%ek5)m{0AK)Yz%R@B7LG!MH>UyM+2b(d9{r1~ivK!_QXJ@F@K#*F$N8OzHfY2a& z=!(eiX)|OM=VI@d)u_T%O{arMP~8CA>@MK6h`6dh=l{Q!b@`5$t07x+illU?kdQCc z{kw``)BMel9fF?~bN>kFFn#8ga^0UDNI+{DPyY?Odj~nB{D9?~do{G&T6rTvE?ihq z77^;vvpMMnSZY=x3hQuv2e^e&Alw-Oc%e5(@!I~PHxbp@!*uOWdGar0kMzZ|(}*z{ zQ|CQI7{^f?fn0^|;54x^6&mAgk&Bjtgwu7==hSIHGu!JCYZXw&on z*a_Y#*(E>+jARZKB;jV^dsxjd&oD>*g8iE%ZvD}{zbj{+ZX{1t=$40jK6W|DV~=>8 zdiWOYO6=GO1*FuIbm`~j5yadr`p=?nqW-y7dD73JoQIqPkMhl@$`Ac3ZLDs{mzuYg|}tp#i(P+cI))W@u`ylvEFa(qJoofn-rf_#N*? z#b3|_{u$V^2IW2G$xdSO`|}+f9sriRaDYlQbkA2$pkX4>}S5ao#b zIj-WFE(x#^la(F1OtZB4I*#YEcX!6AFhMgyp@|Bg5C9cR^7kDo3meV9?_& zHUeilfB$pT=zY(*PvUY8f@?42bm`CZW5(TT*mIMR9QPTckH(-}$ZYC?bV~zdh&UiC zAZMUpn75`@>q@2e@?+&yA5TWh?K_4kJZv(n!b<`j4NY>h9B!n%LH#>eqw$#sh{G@p zrV`SEe^uQ*j{-XvRkWB(Ha;93lIy1k^=PbNN?&pTM^-jXBI7O={zG`ggVv5(Hc2`m z#i|tmI#a&o-BaclcW*Wnz(OPIW#^_B1(WJfdO_(B&Bclz6aK!4mi4&ftop+J}rQPhi;Ov(@agoe){Uj^lDi7N_1ORU8`c5het2 z4`!B5QSC`FCh2+Z+;hbCp{e;fqCw{l(=Rm$g{C`(Og;Jq`Fh?>X+d(C@<&Jq!?^x0 zi_b8>Xp;*8`=f+RHpbihf1^}xp@P=J?_`x!l#(d4S7qx)+IrkxdspLnKr522lXY$( zv|Y%_D+UFXc&%L83o^;6lV_-{=WBi@OBE>Da4q--S4%9sBH{wVK~X)R<&_f5nYj}F z4y={%^rhw(yfPIc8hzyrSi%&kW`X|#>xXm(JkoO+8#4=8xpuEI#j%+`<9$ zQ>1ltj=!{h0Z&$Ha|0A9JZvl-0PR{UCySeLp@v>V-cjnq^^jWC0^t;g2oMjw85=-G z9r)#LC}O}HuIFL%v+l<27^58bdS`ji0yu{2@GU$+c{%0iL!Y9Kjk$NY8;H5;B7K_2 zwEDE2{;)hN3vV*Q9oWA~@SaOT0yWBa;wXZVk@h2d)+>uFH?(26RTzGuxBY2)i(V$)qK%dz$^lt7V)5TvT-z-+BWz<|Lf z^^E1^l3?=QW`L^|pSsnodZ2T2BX(TGugFQgAX2Blz5s$^QFdX1 zSxQ!r>_IGmb@(xxXsUcw`8L zXuQcqLdQ}$cF7wqpt-7wL}VFJ9CFA`+=ESD6fQdK!jALklSq~*SG{NwyvGBiJIga3 zkt&AvJ=(60>-#ytJrSwXVOa$v^JjI73#-<<-E;so55Z#5Klves5z{1r$68@#Z;axnk=WS3>dvG1Bd;%NJiYub>JV9v)PM z;738g!sHIf{p^V!0t!Ft-#+>!e)zXP_o_YpQ~E9VG|)et*5heT)WojLXMYi}V2+YI zgO}pOfaWlSEw6K}WzRx|Mbi_3DtATs_(y-R{9Z2M4{w)%UgV!fw1Z4c)Mn_G>M@Yg z|B*LKw<;(rl`=es?xypAXt=RmW`HCzM^>B`%AqS}b4>ie=&TdbSsf zt0a4a4^+{`t6D3pY)0J@d;`9>a?LZnTcWs(3Irm=A^b8%#l`SD1m#WpvADh@e+CwW z2`*91)+eGdPft&K?lNu4dVHCFcogW%?Svo#GM7ISKBLK+U(8~Z!{)mJQTZl$^;!V|Yf zkXE5hTbB-#v${eFu*A#B>N*SrTkzMibq6XS&ImM5^2R>PhhQ{gWq4^&R+(L+>*xia z(>|9dT>h3N-lM4H?K38p{M)K`c&@_yDmC14-d8gLij5?J1;6B-(vbAKOo}#oFf}s} zfILIWjVHqWpA7=;Bzy`AM7<(^iXsJ>4nzMN?t2UJkIO6GstTAU#!Pwablf|Qc^Gu7 zHMe*6y7A>hg-Dwi-THb7`}9t^;k}S6u8;Y(U2y=5k62j*#l3DTG7gpR>2*^~W`KG; z42#iaEOI1U0M>N}{UyYi^_O<{b4g`Es2Ys4Hw%fcF~EVSIHw-t%rr%}qx%gDI zWl@y`@3M=FIS3#vG5V-u0(`>{Z;yWORilZ|uKx@fX3J8GAY2O`!qv1U)dQ8w+%LY? ziIeAEn`_qwPk!bUL2!QeX44Z&j|27Y+R%qAb@mt?!C6dOgXVkm2he z(E?;NL|h5PWVMVzYrnbaK;^~8+EgH87-S7LrOPh%mw2vwS$Tl{mUTexx%%(=cUMSz z@t@l^3mk#fRc{(jnIPX4FTLVgfhlOak25u=;P3dESCP^jJY|BwyVioWeSbtl-$(V| zrTb6!Z>!wBa>Eb8ybMB#uKs>bSY|yL_1XKPCkEuTMi>BilxrjH=s6Kj0l~=fB8qy2 z+ofWt01n=(iaw3njAhlpGT)m@GPZz;%<#M9aEs)V1(#0Wq$}(mjG%5P1?<%R>-t>jNwV zXuzr$?6oD44Lw_sr~t7^a9;AXS%bTI;)E8ABY%FPWP|)4&bN;a0(`lg_x?_m^Z9+U z*|t$?`&5naq&Fzv!{y+a5Xn4hNXY^f{Yj{5_d(PB8YM671n1}q{plOLj7j~@7$ zkA7K3_x&}T8#G`J2?z+yP|G`bN&wY=-FrDhN~%p02%2uIV+aF2QUlu&8;a?Wu_H+B z!O=TM54{()Bv~$GRwzLGD9n{quP&b>0^Ff3QgP zIG}HCxZiQ&t@7$y-U!S*Rc%tO(q!eL5~C{hP#jUur3+u)%w}>c*LJuiGc0hW;@1{S zN`1@c4yqdFE$GBy)C*^Kh11uNmCw7teQtdJNGc!IK7ugStJZ%WMKAyi?u=bb^{0Vz z`coc(Gz2WQCK?9z!#Pb{hI14KcW<&x&R?1fFld7A!{fR#I zsR8>a{aL@_rLqy+P&Opgvoa-v9t~WB$J*eOkA6-&zFg?@%%Q!H0qQEF%cHICLIafx z$ix4MQlqliI@iU+0uYO&P0SY@^_vm=d8<73WXWaT;lGFf!o%OFlxc5~|%ELop zQqd!Phdw!QI^o`^%?$!s!IP4`G4MB4#`MJLpQPN$H|&ZL`ZNk+;*K5N_jgcDz!?wx zqd2k9b3Km*AczL#C&P)cWE599)U{`W=fYpq1ORUsMD!41PVM1pgorL=`i`;?Hui5A zoRS#?&I}UTR?lFZ@0V|X=7EXa6bSI6e`zY*36P1?s0=XdL@vQNu!yj->~7c>!Y?3c(42p4Asbiu0x{>m1;>mLV`P!{@gDfyGide~gMon@!?hs3AQT0jQ` z6Y9QrOE!5jvU(ULGk%<%d5A5pKsWMo;_EdHkvIY9!VL}}+REY~gnO{y>rv#6aZ@I5 zQCIyeEonmDGT1%myLTD5hXxq51CF@<9U^%iB@`8RZQTFV7Fm4BPZ9tU>P2n1*1~_C zPr$GOgcyZhOL8XYx$~*d)ZMZY0itnb)NziKrzo^qp?Z#p->jT~buS363K{lZL9%zA z_p8>ihFh{RAQ7otUME<pwjsN&R9*hFf;buI+Kjn$2 zvep!r^PvUWe&Z0QUPfsO6s}Bd1?XwK0j1Rg!&Z48B8B%12%Sx%Zks2BKK> z!XUN1*+5)|sQHcc!@zh|Lj^i}_z8-+^ybcAqJXUJ0L7%ue2D1mqhE|j$^7}ZKlgYz zZ(v{Sk3-qu0dmW_SVx-xg*~ydd8jC&hp0i^il#*v#$O$g!y%S)bIq_5`?ol|-Z;7B z&;nv37nPCCL%m+(s(~>J!7m?IEM^qW#XixA22^478<1feBtl^Uwj>@xR{ys@mu*U6 zCeM7I>rt}|%F5_oLKgneGyGHZFAx7JEgkXygD`rPPzpV=uW}PXy~mc#x;9tJ^Ij<= z22!J^2<|}YS*$?4#5T4M{mvOy=vWyJWSuzk%rUXfnsM^NFx1;x6b-uQ?ITJ9KY|i(M4!kMoY?ia?j$$@i*c4BLVQ z;)69^F3ox`&`6k8{>{u(d2wcJo&WGZ_)qcotz5(dj)Q&*&Z#9}70{EESWmFR%Iuak zidYJ)Nt5K$n_a*+^XF%0CI~nt7oCm~%YL-XG?I(F;smT0kKNR@$IE(HlM6FmV*k;rGj$#nZFCI7W-z|E6<)1vh>!I(!Qmb z$lW{%Bfz`coK1|A(ZLc!=wYgobTRX33M@OE_a$QbUP0e#1KT()}Sc?kExp6->L-6wcO(y(ZAw zYbi;@hFKm4e_6po^OrrOXMdmy6uxmUl;?6f&bM7#og9nsnKR$J>5kuf|N2i}d|LQ! z?86$oVc#`MpWFTX&;DE?rUFAETx0S-=0g9 z_w?yiXpZQ^=;d`&ZX0z{w(e91~P?7(~hysh(xWR{;hN#^sJ|%Q!+5J!%^KQFN;`Z&Zah zPUXrlxOW6CLCJyOy$qGW%me*1F__u_(m#(8+Bp7$`O;hPE^q<2nX1zYH$|@87MBd^ z78wZJr36)EuyMs@D7xR3^$3Suahu4=?5$8~iKbm%f*Pvwe`Y$6KvLEM+9g%6aRx>i_3#-cij)e zf#E)YahT-u!NDEOl9=MfrpJWENu}$XzDeL)oBovu9pRIoewxZhRyiHeg1)DfNmjLg z^a~vDAiNS6`@`t-P91!m2Xb6h9_declDWluH}BZdYyHE|H1qr{!5eJk<-;(Gs?8iM zA}Kf3e)KW{YSi+SmB--YKDu}6P_qo%H)hE-hZ(yE%vO(E+Rve}hXF+F;KgmC~p z4g+%Fb@+?Tu`wd^uUl)mS-7!l)H7|m2CsvUC5!MFwq*?>CV$NV%@libfd3pFdDi@9dyAT0P}{~S|L zKk$}*Cpz@KjmwvC`@x>WQ*Jd09WlLn1OD8L48UoXC{e{@4|)~sgTS&?4U8itYhBu> zHR!PpFK9XtOcH8+DF8Stu7Fz`n@TWj^gFBt500w+Uyz1O9r7=aKJf-DLpRE@qRRNK ziNEh;!1y8wVH;HE<##a`@0YLBJXtYw6%u zHz_mHw{(45@F(e)C?1Aa9N##82jEo6JpL@U0XEg$kg?G{N?|4-Mc96k4jD;~WPi7t z{p!K-wDeXgY22s+^bF1W!lv0Nr*3|4?DJd96kHBxNB7Hq6eu({YS1t{&!91vV`1Mg~$XouB1bR1vzt=9d-VZ>YAtGVQzgyqe!4Fu_3bf~(<$ z|4jLTS*vJn(}=-%0(}1}W^z;9le>p=!Nz!fRKYOL@_r;L`>74!9l7;a%8MQVO63KA z6v40UL!@QBZGv`pnv^Z|&$>nUCQPSQc$(mHVWEl%Rk^%gvuS+eCXH4;MVOKT9Gk`l z&z8r0Av{-}_a7Is)VhM9kYPPIAxX=z5cHPZYoc^7m)AT5uzR*O&>a}lLC7Pa_^I;N zTb4mI|29p{Iqelj_5+lpLNO69IdWeD#wXyzy_D%B97dT$eU*9iHYyggLj>LrP$|Kn zRdeVFHpBvAdDSZ9fg}q3o1LGGuDFr<;L!ok{{aq<_4zfG$=-v-9GbQkY*W;#y+1)P zGG#&GQR4YtSe?23yZO^X$t?MGfHHKh--gi80aoO84`)$G=XRr0rp1_zUvvFv7#2WE z-cEU$+{(&34++LArhwx|{tnq~jYgQI>7t*23rRoBWNb}jn;+Hte+*>9c z1KXRH8VA=b4iwQ1$z5Gjil-L|3NuC?abW+&64`vUPM1aO+47V{phx%4Y(R-agjvwP z9rq;Yd^Cnu9Asz9U#yv!d)E8lMdMn{y%ys2HeAvd7H2fn4f8kcW=;!;KtZ=>#h%$Nko+6vaf5tKh zPL-6v;XbXB{qPxFXXrCWm-D4}xl_O8>q`M*u0LgE(6Rcc}g8 z-^+<652@kvzxr}{HYe6Kn)=cMr(92DWlYbM=?HEtplVkz19Bfu(ec1bKLNx0KsL%b5eOHhVpx17F1sxy=z&+1F09Iayk8XvaOLQV&$1S z$Mw;K{JAL8wi(e$C+O%DT>=E%kCT8I1nDg9%>iu|%izL%w6DHU<~+S~XUenQJ$bM% zc|5h{c9~Txq>up+hQ*ArGGdBYh^7#eedp+pR7NKta6j|PP^QwQmURU#avGI~>U|PH z26G|zl|b@kMS=5gZtak*!Rn>XjQkxx<TY-Y!OF0PdxMt9vt>oj}zHYEG1z__r0!Du)3O35H%pq>+FxBijb+= z)s4UPG`2TtWqSWutD|PwDJF>*df$u6R&a%TnZ&iN9cAM>?%bj%+N0P%nctXQ{)*Z< zfIVTW#FufS-I(hP|1+NC4?n8<=+s9$Efp!Yv(dm)$*@L_o%#i#=pjWWF;vnVH>jp zCTe|>+Ue@9$QQNqEh~;=&t~ zGjldacUT_%;^+?zEOLcI+w{Psx$#V7&eW?h*YmvC3u^jh%$gGV2Zes%PY zzb(()1Cn6}uTJ30W>~Eklx7(@d`rhlbWqwEZhAtra7SC0ka1`35%~?ZSn@kQJ#+n~ za)rt%o*EZutyZXX{DK&MTYf=WR@rim zH6$(+Ef~CDnfmj&qgbp3W?K=`3pkI^4xWvBMBYM~$aAfLdTW|sFy54;Re^}_-> zr#dY^@maEr>2OHZ3DEIKd#+2o=vS9(jt_6IGErnQ0C{;e&=xslqBfk?z zK-sz3@8E#Y$Az`c=KQW=B=}{EYh!w(*Fx0%adiNnv=_^~|M=f{d($6Ft1I2}Z|K(T z{?ck`JIfTAfXOc{wFHK83@0K3Vj@l?2?mT$Oqr1x5hsWtCyG+puG>;ety|>}r7rdT zk_M951~b|Qj5^}*fA#O#?|IhRfy=jR(zOM|ncjE5d#}Cr8lLs6SF-w@FePT3ud~Jf z2$p2HM3I^UwhOFAB|HY9$Zs{=Y*ck}=n+6>PsMa7)Qi3D0pVGdgF7|q;-!U{zUc`^ zNExGtlv2Wl2riy!hSybrWuA<*FpUV>`d+yJD)~KQ3R9$T+#KE$Wzvt!emN|%+dN8O zA&xzIlyf+4Uh(fB926=&-XVmSW|9z7>i)MDCge7>6$b-fjR1Pt8}|R_ zC-3+Ns)4#~TLFn1N8H3>H&E!gJt02is zwX;=j<-&4@4zCx!wF=@@woXT;#8#u9geS?%E+Nzv4Qx%Unw;TrGGVU~rA3i?+D`AC z{HC0Ibmryg3wx%d!3jhS5Ob9V`!4hup})@-?DpY4PS35tVk*LDPZ&6c?B=bA7N>tZr|9P_e{BAqI%XbC39|TlA4u z+OKh8l*Vga7@$_r-XJD^Y@lvboJ6P)91vNumYessz;9;|a9#2}*)9QrW`!*C%`JAG zwr}@mV(b4>=PfX+qkEoMG&;7HXG0O8@Yp%WJFco&qiQEIJ|@L7rl8Z*kjzA#2VWJa z7>ARWnpm@(-$uU98i7UNl%4PPcU&C2bMB?cwU!7Y3`tAut zp*ML4bwqEc|B85fuZ5M1-6I+-@wmj^n<~#(DAta_bb6kbDcxC>3G8tQ_KrGjY|B0y z8*kOxn6q3*IVZ2L!L7PnqQ@>Dc{c(xmFa?WGVd_O?%xi_T$%dmhVg}fIvm#ICVfZ9 z4L}ZyZ!(4DlJrL|_95Mr;Wx?tDmdx$6SIBKpL!X25f(C{y9_qg!$R;YFx7X(pj0(6 zdMt0F#F_YyBPDT`=0$e1XIaK)_+A6Nhhekrc$O};VS`YX77BUqnA0In11ucb10MGS z<M#c8<4^U>Yuka9QPPRZ--PaM z;O!wkF-`rs#o037%Q0Oo`+?H$lVw`Y0V--aY`Y(;&V`7IcLKVK(U5no$hJT&Iq45mNC^bOZ;Y z@3r8*octKCm7iYl-8rf#zoKZsD+fZJQ^SuriOn*-xz2WLSpViaY+$wJymwIaS?lWE zEG)8s0{#*J4jNC%y?k@@uBUAZLGdnFudN8wj=NzPq3rNykM1=aN6ULtR6O@ZK)F{V?*^OW2hD-ocP< z7*oNc)>7N1W_EN>m8cPw1Em_=o}6A$qB@2<`m!2W3TTbjVAwX?P{KW7Sw<4GFQ#ZV zrPuU(-z(qq~wcE?a0^H>-4s|j9etJT)6Rrqg;oY-8P_-ID9 z7uLQ9Ha;x7Z~0BCdfpKMy6Q!O8*RELDBeu=W0o?j9V##ymxud0=hJ$jeQ@2;@hRHRYdf(t{efaeh&$NPnm?;a%r2q`$Ea4`V+* zbIkrlGCaw$C#gYV*Lw3%gx0~4eRpKoty{05E!#>f8nQKg5|{c zGh&48G~6!NLV3=p=vD0q&gYO0r@f$_yIl%IH1AkNl@et)_=+I^;J zS&7WjCwqI#Q+Ii~Ec@>T(i$EfQ7~#r;)HmOcy`{1u2z&M<IY42w#_#kXU3;4Qie77-+L}P-Zs>#;IR=}Z5t{p`Q2<@;Voz;7M z{J-Kq{DfpN=xXw%XSe1uFZn~^&B*5Z!&&(pk)lxeo~Dtp(uCHl(ukM>wK^aY@H#`K z-v{bXkJkI6&qiRb#_fhzvjsGav`qOc0hGSP4Q4iC4sDp=1G-G^!bUMj!D3R`y_y23!px=hvG(D_?5uk(n(wg*I0|G( z*=AC;K$OjgvCBCXjJ}5@;*qECQRC}5A)wSk*JZO_l`Jz)cyRveegv;J*oLS#fq<)2EyhJDHQ`;g{v zNCW(b9zxf?22i90e!eXD&tbXii9Wqg*^ZwA_{izsWuY}E40(WD;4U0M&_1GuU9(Q0 zke*eM+hQY2U~H{p4C7mgOrnO9J%;tf_2EgzDaAB#(8Q^r@EGuH4^RRHg}MjNG5muk z{bG&NDt^b5V7+|gn_ViCz6985ws)g{xFYUZS4!$H;g_~_U6n2#_aQu4(P1=&W%G$w z2nDPbimZtsr|)@)s*?|^1_@yMSRf{)@Wb@j7F9n2>rdHmaDaJ|c|~o(wc+vAu>Ck8 zkO-)2{ENK->8dClpd(Vp)x|P|#Y1FCp*E^j{Ma?twBE3X3yGspnT1Lv2t@fZ%8akW zxc%`MFrCb-ECWpozp*4w$Xi1jCzaWt_Yn?mBm$$L%0?x11pkc><8}_ayI|KVamV$$Uj-SM@}4xMx5R_ zc`F}wwuFPs(H@$q4=&vUhkEWz9=K<~r59a!b~LZ2l)Lh1zf47dtlW7C0pkK&AZIA?o7&c0&HE&WqmWk?n$(%?_rOd|gZ?#}trW<$olf3Mj%N_lFGP?6+)r(9R@LC|oIvU|7vlWY2*_1;v&Ov$c zss($cJf89S{8ex8Ppy z`xzHXC?OI9((&p0KZ}Zp-&JVK{*DERY@V{vUF#%o0WG!GHC)OE%Y_R8nWDi~%m@cV z*@++nN}$~Ix{dB(!^UXu;T4WP^z+o(T`YPqS^kCq6I96fWhW&c=ZNsCIWU6i@X->y zXHweQP5IrY*#IyDS~u1BhC&g8y?}uIRkAs(v-@%z5M!Zi_9%=s;+T=zWL~zJ*f_Jg zu6ovL*E#o(pn&r0ePUn&_T{*cJsq|2h8k3gWyKGTiK$ulV3rOXZS!g!QWv$p$!WV; z7UK|6XlG(&wigux3kiXy_$2L1*gJpcTM4HF&!iV?`);{Auz1R$8$_)V4*e%5)svz% zq{Z#2%!A1PXn+E|ypc0>BtZ&8Urt?QeIY#!B}F7Ri5-Pj(?;?qm|_m|~m3xI&KluuWO%ukHzbm7tbF*-9R9y=IgLdoD*s(arlSYlQ_#+UUN z(SaO~>yZrLTqa&L2=EjwW(XiNPrf6RgaFPy^r;8_ZJm^5xx9Bn&8+jbI4Um8pbU7{c)LGiu3Lc(-rIxU{o$% z^fQW`CM@EW-o$iyJ{|x-&dJ9eEa#0}tbNo4j%4~}asl^ROwj_w`64aEmQp!6G@RD=G^DZ*$9w%x{3M$*`~n zxHu=0Vm<*!)u!Kh0BEd2qh9m@Uf$E)j!L$cLYMAOytdI+4`)vZn#3>p#)@ zfynpo2_bv$R4${Y##q+xL9;Wci}qJ9cRlMPd{EofXR7-2{cr!4MmSz&0YR2lEGc>= z6&e`GFGiM-XDW6#x%)7`q{F0 z*+TVVId{(A6CXq2pBy1bGgR&;Im40QNZIXZ;yi9(I*XV6z_j$BceGC>(YUcVLmAyE zkcaY(Hg^YkQ{lZ(!X6>nur*&01+!Cb_^VqGdyw5Pft<^_EdOA6?m1ZbJU9@V`(fyu zd$RnQsbgyG&T)pd4%pV#t2=nD%dFW7g-&qUVQYsU?Q2PWI+d)qQCmui{OT zY^5rYaM3YO#c@alvWJE}P1%gk!)qn#!pA177jF%%*EXPCUIGEz2pgspXLiI(Wb)!y z`Pbq-nWsd{5=6vORq1|S67qe21TUbHr+(&22O{*N4lPgg=pN0kyx(;ys3{FGYd@62 z8>esj6=dublXz7tsogfcApP+MiSxbSe!`xV!{Tp4-wJ?>(!i7`AfR-U&k}x0s2cuZ z_u3eJJo?B_5799}&kP+7I2FWd=$ovd%S0j*hQIhsqDP)Qcu03F=3}*7){le$Hrak(1^mZ!>4f->$BNIPz(e>}mq^GA_PiR5v^K3dP)|uu z;4~@riRd0YM~BrM*LP!$WF{$w#QXC7>Xz#*1+?#}5+(lC5cZO*Gei`1ka)m%Ap#|< z!Na&%8NDsZ50t<5Pj^&4kwX%gtL;W4+a}`i@Klj%NI>2dHAg>#yk&k^%Q(ajgtnnWAP`Ry%Civ%n78EOS#T1*8xtxX2}hTyALwl|Kh`6eVzDRB1C z$#%|J%CJ)Z2$i#6B6P2p(fgj3*)i3&FRWA+>7X>508U=E43golJoJ~ZIsZJ;75L|;F8SAD!Nzdjix`3^fNOP&pM^stY!`8vEqUmbvy&)j%2#JC z=iE|vL;4cH6Zr*iVtg>5(;&hdOPri^Q(Uj|iX+@(4;Yn(X_)heH+(mUusc6i5Y(h( zqbRt{%+2@wjEbu$4EV9%z(7zv${?T<1RpNbZ18deF@)jkH!Pb6u~R)HKY9(8?p+P% zLgK&y!;JX*qkG?P+P)G)qV=<9lq}daFDb(sGc{5mWixD5y>DxK#5zs6u(N6avZnBZsoOw+wW40;I(}{B67pETv;`a{y07piou^vVTY|{Km?DK@X2s5-6O)q zWA1oZUiYpZMPt}k%9fvms+VK059cn2gy(`sfB%G_MnolkSk7ClYpS!FRvwJN0JK#1 zvq6i(zEs6bSp~T3-vMM&H3W93?|=SW7Ow2#%#!TM0f@eaSd-U!K_^A&saDBr{nPSS zo*PlD9^`Ll=W#qTq+XNL6O;2j-}uq;;N$-3>HiIrNtWgi)hi$a9kmdVOEKmseIeca$4%GQ%l{UuGs9K32C6ix#g@>9>_ z823r0#P2X-`qIg2h{5*2(@ywvki5s+(8X+NO|# ziK8wp5N2a#4~sk{y8-Q2iyA$uxkExP9u;M^aNC8dRYRQ`nDOTmgqWJsOK{vdp>H$Y zdaXp%>Xp*?`qh2pr=BW2a>}Q+v+9ZX!Z+pHpLs$iS)Y|@zoLZd$sa~Ugg8td-w^9O z=8MuSK!sFU7fnzJ>F@HK*uuWt=-v-6mM1fgGfv1=1)d$|WpWa2AH8MeQ5~{GaeGoE zGB_-rP?ELf*%WUTB=X!br(E?tC=o_qS~}&01Ldv%dCMad5pvc-vID>7pO2*P-}Ud1 zdtAh^o0ww}F=;Pf);_R4&(S*=&0S>1BUFqMZ3vf;_c%V&+#--HZ;uIT)crSeJMe>& zDay`IgpxD4CBw0U&~BH>1XU6zW$3Lt*vgQ+RQ^ogof1Tq2zv&r7pGe8 zk}8SV7$$*+7N2&34dmN1-bwtzY}c!uCnWl=Z10mpW=@>~_(;;&6Ffh}JM z3R!^~4+B3fF7lnohV*P8c?g`>X9~rnrbtr_8rzjYuB$4>a*ypw?~CJIBigV$;e$lR zYDFiTB=rEIBk-Ucw9Lwn?TTy<{#3c_xe~g)(XzZs)ECrP>E^32cV@~nAR>G;L9YDv z9_~gBn)+~{oW?g1m0N^ww9&92V?K^Ff=q}K8XudjX>?BEQ&I`y%i+%_xQ#P(%svzj z2A2EWv^N;m1m#3zpgo(w1yz0(9y;L)NWA@EGCsf``pa6a8FZ*eTj?E|4fWu|R3GIm z9754Z+K}=o|9~@}1!`U)ZGMgs1l<9bfmL|BvBvO4XynuAZY0364x}gQ_c)yZiA!xk z)1ZH!1lcV*nNTXOf$v_A$k^|s12+Iw_(`=horV^?HD?OTe|OEY$5~b` z;a6~e%8>PDWqh>_!`mk$h<&db0^;mRT>Tu0fU8J(Z73I{hk1J~5ou$NeQ#db3pyfh zMkr()dI}l`Ou)~}=nW5$^9@`zlLDIsXpVdgf@AA9V!X5h&}sGt|Gb$}c@2^2s`fIJ zg-%3RY;nkuGOPG+DC6U&|v}{7g%ElomR`~MZ*~G&;NpQ#6wONEv z_6p6BXPx)j5|Q8l^*w2h@`yj-3~Oq*wT-z@-bXynm7BuzMD4hq3Z+EoH<6V@?KYa9 z;riCv!kBFZNY)4Or1L}^a``}VjKwRbeS)_lsfqT-~1AsGny?pz(xs5CJYo1S6 z%49s@HjtV|tJCm$Q{`Wts8b3Ef8#Y$o)SEqq7&)tOpBLCWu2bDsd5;|fnK2k$Jb&% z=W#(~Ow42cOtIof7vLMtN9D}ia=GbCzxrAU<{V@a)WrK%nU9ocJ$ni?ImoHNpDfMV zO|8k1w>qm##@U;rUwZ&>{v9@+H4_|XA_3bHd;5?$)4n&-s={-%WX5Z=g2lv<=K-V9 zqLnGLhexgAcZ{Pb@*i_- zT}g~TRAI%RUW5kF8|jGo{*{XiPGLd*Ai ztMFcB_Ut-sQm}*?9PuhGoiQoW+?g+nzB`hRkmjYQ%H`>Bw?Py4t@10&1MDc31}3KQ z7S&P#Ob5hSc^!kJR-O?5$Rn!ZxIj-6!6;#4@^~@|yfOmcHEYjB%Z;PqzUThdVF|`) z++)mV%K*KAuMzH%aq71Y)ARQRm`T_Nqa5U5ayb-}G`oB>H`$?oKp)fghq zvKGH(=9WE==vqyyH3~{%%&*}ujP5;OCKl$sUFhvWTq}KUv#!uRq))hOkw@nF_nl-LUCD?EvT~)NshK5 z;eHPZw;cOy*B2YXry6B_+M2Pk=$D-IO*FbbU?Fo5n7Dd@}+;!CaBt(qB*_;AH07N^L2+0&xPV<-mEGK1-X zg!+P{O)*1!LmVHFh%4xEKRf<;?UHH5dxkjE%T+Ot2~{KxvRJae)&kC41UZRJM<|(q zlae#O%6xa&dofTkA$bf^IDIc1K0Pil`zgnLjZm+mEgtt31Xt|0Ue3jGH@}RrOA0N; zt@D`P_CR>~2N0{CB6;=Ok%I49XM553%(_0`!fvfFjPL|jYWOg6ww$YP5%5Yd=U_oGxgylH0q2T{9fzqKK%Fp*Ugl;oUM@3ni+fS>;$Ad-B z^UXLvkjlH9-Clm;Mery3Nv?1}wYlX51~`Zd%Uway1?&81+`-+r)2x8wU7i^o2)LtNwV<*!$aJE^jL6 zPTnNDf^YTFD0Ujoi%$BZrkOYjlbB_95=SK#35o#x$<_GfsOerv3@8G3Y73tZI@%y7 zheP`;m&hO-@*n>EX;P{3CpD&zt)?(3Gw|;jRz`?N@pr0A54`Qoldr!0 zxhF|1D|HS1qlx3&igf3GQN*Hp(f$S~JZQRpW3kg|an;gH5NY7QneHvG?sB=|Kc7o7 zy$a)wy5d>!%OKqrJv>-Y6njT@3^dO*IKeW1+!jeJmpM-shr&QyW_eWIsNt3zEVuBB z%DZB*XVG9m@GF^&$02SCQ45ciBk7ZT*t-gRS%pxZOF*t1>i{G@8r)Zm3l+@ynQGTr z=-)j@>*aRPc3)F6E3^_e4*?KVYq*VSOTK6=C^g)5CPEj|f5^`y(AB;(CQ2Cj|AM)W zU--K{*pDV-tZH_rGbRi;6eaGTmuWnxPUbUgX;!0sIXy*ns z0rCgU9!bZYn^~WzkoIOkEGu+L#r_uLs=+xEiT0+FPGW5aDi&O)?G^k>L8>( zG{!rCk4H^}tS4tPK9%{AT-iGGsLvXPHPNq0-tZHy6UWMJim4K(kxXFh7|*T%7qcr9 z3$Z>-i%O=|{U921&Xu6)1+5s#0%8*3mMIWLK}YhDB9L9CBh&?*w||j^GkAIO$mAL2 ztZc~a*g{4l3<7oZYo6mu7ef_Gc)_~q>XJXMU22Htg$Mok+ z(VZUbg-0?ecT+R%3NqpxOv^MCh23f#CLmTN2LUi68eIxs#@~BvAoW4^= zzqb(MNihA53q>dyUFr#e9s5g!^WsH+fBE^cdMVwM8XA|?mW8+zv&@cg{4#%uG zejMtx4uE)Whgw_`7=3m==Ij2+Z^ZEX&dIM*ZHSEv$d&IhKL^`ZHcEt3fVerp13%rl zN0K;81v|d>87#O@FP#yb;QZW|mzh&ezRD4=VISk^=PyWXDP|RWieo5%IEXlX$bHLd zIn|uVSEH{i_UI|sNqEReP{YjuJSDa!j{^k9)YZA6fU5xwy7OBx&~$L)nFIG zrU+~uW(XDIF-Voe-SSMHzffL!+)75#gEX&S6#Z$gc4wTWo5L*JX`3j`Ljy)`+ZTpR zrR5tMbO@LKm4WifaYoEm^njoKQl(JvI>?2^P6|_l^Pxfrd?^ul5Zm@k&WWWm-OGe_pt>>pZiw*GBfQ-;20mo&Ses2#JlJ(;`qld#?`D1EWYrJan?cg zyMDv3>)K%NSWegp;E6u5x6*>53oks6RjrAfCo(eXEnVW2Bx(%1((4{CVctQ6&VdYm z`?sDMdX~UPmZRz7tNAHLM1;y@zLA;^8)*U?at9M5e~n7QPVzjXTES@2lqRI}U7C%t z+uuC-efBK4SS~zbbLP1G*b|}jKl7A_hA0&aT#w*3WnbPX7yM zng=>2TaFV|#e|TLSv}8nbS-K=7~7;HpqkIou|={-p+d3NLT4y8K!i5vBD$2lNclX1 z@u8dfY7tCAZct$Zz6pVzuPDj#&KxrdJ=6JL} zRDDJyBNgoo-WKYQ_;T=WsCosN4-frFow6{qas@~ap2?J9hE?`6&#Ekgns4FY%6I_h zLsx&T2lD72D(5`FRpjZ0cNVRGUhoX6JDRM#n5_G_kfUGw%5};~C66g#{4H4?&8gh$ zm6m>?CPr80mOYNyp?lEq~$L5TSKrK>qmJlCMr>%-(U60v5)=52f9EH;q;x ztYbKJGAMMeQnSA?0tvDE=|S#ewOnoD@dWL7vYVU#b2v8?Cd2d8`Ot(vD+7lI$RR+E zl0cw`L>1G17_KO#V~8fOSYmJESypZxPb3!V*X1O@i2c>)O9GT%g~-ldWSIa^h2ZOW zRW~3@a*fW%5zmpKKwsO@%tem*vd71)AmR-GI6*$n;`+)HU)lB?P)*EfP^ zgUb5G(!w-t*$K4&h@)ECiJuIu{;E%Sb_uIPrWk~8tT5j{dR{Tg<`#NZydx0`@K4dd z{AM;i|0DrHeL_R@%nK`bmb2Q|>|#HDg?1UVFr=#RF7xCLd_4grlUL2K#h=cOA8sl=ToF?(bM8pj`EzFO&!JC+dE)e(eG8 zkU+=UWT+MGe$oBcV_|95V-?9VVOQsM*?QppJu!6PYXTyBWj|utwbG!eDdRw^-6Oop zv zqG1_Gzvmcp)z7Xnp()=AsD1=OME11UOar@jE%27$n>s3eulylaDBOg;ka+5ShrSRY z{s50JK)EuH?i{|d6PQjm|8_&qjLua!UyMK>TetBy1qtOO4$dp(vd1vMrElo%dnM|7 z*=_4q$!9#}u}qo@I4d*_5xx+!LesVJsD&2C`was2o~mWyYV7rhBCBgg zeD!_B_P_K(KRdBP%@b8#ezIw%JvjB@fFac5ZTM)3`Y+Cb3^EDa6U-kfgOY7h*4XKu z@Yl+dulkPD9BDeWBXb6kte8YlW-;aC@C=OHC!bhiR|Xr~Ljs$kH1hPxth=-+G`HVb zrC$Q)4Xk=rMd)(WS?$N=IXFDJLw$JcRE{n}1{Mg0PLkfE6%v5ZVv=rC{qSOW!CyY> zaLsDVuZfGmv-#2m2oe2d#oDqCgf)Y)CkiQv=nzB($L2{`kS$!RT=8{%y@9s2pOv*4 z*P!{qMDR~?!H+IHW+#dbF$t=G`?QVXJNMc5Mcp3^u_lQ>WtBFp=s!~rKC1IiKJeW@ zwLxMXI~b!pfNT4Mfqs5*SV8R*q36 z34fbYh!R#)qIN#edC1i<>yb7b?rp6_@O4OB3H{`kBf9BgIa_|%B!jGag)r)c?^{g! zf=URm=BHG(-0+MjN&`1d!tmMfl$AF$c|E838}&?o14@?q;*a|GD0&%R!Ef+b5Pa6# z4~#6oEAdcQ#OMcBK{T&4Gz>DLVrLK--Hr4I@tR~*q76m#+C$*JIH9_XqT|tTy(|k< z-CD#2Rwqk=pvS?$mvPD8^g>~zCZL16ChZ+4firqSHbj>@&HpvPfqA{(MsJ&enUA?0D;V|0&F zm?pyw;|XdwmQ2Ip^PJ~OBYzpD<=DuSwbSCnk07%SlgPy39Jg@xCEaK9d+EOh zNW}=1?!V(cLSBi}zb6#z=c)k^O|a+Sfd|S1zAx(Iw_pavaWVS6H5ejzjle#^!2BA3 z4Jw-Mj{wbDgr6^SzDErWaKbdU^OQhMlpVKGM z7U!J@h@HpztSS<}vpAsfFA6@hb@Oyx^Gfd%2RKNn!J=j>HUfBylP&XIMDvffL){W{ zfbYil(VI+c=dZwa4)S`S=DAW1R{h{^pq--UYM0L&>UoY6Kqa< z{L9_@iqimM+Q92^pzRNdL4?_cWx6@GelsmG4~E!lPE2^mcLowif_@B`x5!MwV-z%N z^a1tzeega}ZMi^fFAsdq9OC*Cig!=Gv`}0tTb=`9lLn~}m0I^zr-=#mbJs#Jat8+| z8)*zSfV4Ht3lET>^lvHD&g$;Y-sK4Lo}s5W+jb|wSQBO2Li+Fz9{xemzkDS%3){|7 zD6F7)`Np4%5~J~JCmB*KA1lQwNg1(Ve&TDyiMHc3)Sl*;^VNXcZAWUBkVXj-5CVoC z1(9Jg1(+h~gH-O33;u#K4WwM8S^dboC3s-$Z+dhGnxF4B>YSFRO>sRbLkgWdb{Q$X ze!luqdHHcmJz;)w0Wh@0eyd^5!)wHoJusVCWVrtq>#I1rJ|H{!83$OjrSi_au0}Df z+91YH&LAoYl)DVr5j!IYH^O4DgaetM^?17~ZuuhKfg*DnGxx{(DCE?33gYTPu3YP#Scs$avnyIK0mN@_$DStyQ_%PY*Ho=6RGhO1 zskk}o=?&D!%h=y%b^HdRxcgm#R_?eSz}CkphV)b3E;Hfkatt3w68+QKpzdDl#w_u>cIKRaC7PCd{ z=-Z!v2cV_RAKh*0$}5rYN9m+67=qVf5{PYo8k^UC5N4c;8ZcqVGtU?rbsRw zg_u0ubP#&N^T_sQ~LP*u<4=6Hab zl*2&vVX27Lo@Jq#rd1^Z8U9)c~)v++V>dg6zXMj#jvbx`%m4)b%$f z&LMnq6sJsvSaCGta#8;5XTk>o9!C%>*J4sZb&GiqcwxiKPS9uoWM*U2$1!J?Hvua^ z0JUWmm}VV)Au5`)@7@D&t9ZmylUX`Cv&kl6f)~a@?Vb4V{cqjU9`Y0AFMRK-fe+Od)UkcRS=&K4#c;D)ewY;5q6deue zDR5A}aq^XQEAbVMSOqIv*y^$BMybP2^mX;&;S$D`|MutJe+snVCUm)Mugwf4ZHj*S zHQHo%Sgvn-PG+(bl}zp7x|dCO?58a(-9EjZr!>U~9NYporO0xt3g$E5gzLENdv?$Pl*{a7D*&eS45yDrt?k%26hF!|N7v2fYfBI>Df<4{L+1umJRH!@ z%U?iQ5VHx?A;jePGfj`0r!rqgaR0V7%~c%|U0l-hs_lCt^urYAlDh2p(PZx^GURVp zO5s7S)!9UqXGj%?mFh8t41WL$1EQztBcb*P#}CW&q=%P8N7w||RZktZj59d> z`Sq$_T3o)$U2uJ3VlX?1D3NaR160p2B!Cbi-9%zm*?^SO1>g!AH5?LPk90y_1iXMf_m&RZ@I^kF&xTn8L;5 zsj`as*=$I!j$KK2L%3xwyr#?9b!7Bk%L`tMF04f1m`o{avxjIu=fCN4Ipd)!qShGp zIJr$DNp(8&7@61FRUiWW6XiI{o+=~Qaiz5L_kmz2B%R!j0F#eId?L)Mzf|YuBhndO zJ=L{jc&`>=WJS*9#qzZG2caS$%7KW>TtPA(=OpQx zsi(azG|_63XsRKd9iMyu2K45cpNyfLK2NZ|qKBAu?4wEaBo2+Yt(sP)F>4)@cV&lH zt+>3rVAqYR-Kp1zkYLmt<~|@MBu`T*vbKxS08$=L21U8;om5L(%3Jfdk>UX7i=Tn`}bMFXDnc^;(%f?-&|1M{p_25 z`i{cYZ}?NB|1HpWR>ghcGT;x-xgbpYp5;m*ojJcyEmGMmsEdIPdv9MgSgZk>ySsEN7pkc0wW6;NzELhBT zygHTcXNI3d4k=(IwmsO>UqH!XQ73v27#wEbFpvMFKTv-eJm0jJdJ&((S9+c}!cHz7 zdwIdTLp;&gi$z#DKdPea)yDJcFA>dGMU5}fVfB4=0Ug6zy+wsjBi}dBIKeulc0DCf zJJi4h_xIeM9=v+b9zSsRu=7!I6wL&_aD^IcEXyoFz#!X;5h%+VFQ7#&QLBhaSfL;3 z#IFypc3IjGPvJ^x+KH+!&k?8Xn4~k0@&!7!u3oa*QI4th!ftT^htS1Eyh(%suozg* z9!SD1_0R}4>|jk&K2RP=VE$82eYH}qr&K^8fJ`RMSk>cFb^gj+HL%%*5g+Y}y*U45 zTUnafkYAV4M_yAAxW*5j-98jPpnr5s>N|yGy(8-L6{bp`Bv@FOwN}rUt9#NfMxQiA zeVBwIFU-f=DH~Dna{fU=CjO{){LL9f8rxf$AZ#KSG*-(qSA0-yYc-@IYbmK8c<1T2uHq$pvV6>gOPX0N9nh;^u*4Wu3>_Ih@t+9DPyW zddrLQNcjtoZku>t11DBV*;P&*e=NT)IFxyQo)}){*gQBB{2;!qq}@w?R1}*g$1iKi z=V3%RQ7yMhFcCjlF8uJKM>k()JpVK#inybSFL22=8sk^FIrfmhJ%Q@?-ja9e%a;}^uGo2?==$&7kRcmlv) zh?>Id2F1-yEghww9y4dneyU!L;D}z1$u872k^_Xg9Z^$-u)s|+3=1(kgn%?^A>tO( zSZ_edJdW;=Yq~DCZI%J2;6!;qIB~JIKX|gd`h5>RvWW?$&^awEWNsHiO?Y|!39bs7 z0@ZmKc1U&oW%e`;HLKIjHVn|yYPso=U+IW9JUYVK;UTj*%S6y2t*SI9fiV=T;3vk~ zIqWw%3@QO(7l#MAkBLu6&(%^8tKkJXqLD@#k|E#RB-Uevwhz2h!Jx2Wn7k|jM%uv5 zf9lB*_KyxnVH|QmD{oq6c7}s6B04tUxBT?z3LKNjZor5-UU|>QrLqydZI_d5`GxXR zizwPH+s5nYCjNb9pPUB}n)jnm;C6HrVEs^kIE#MZAM(GVfB6lDgDr(9`VAe~wVRZ; zUOkctu~$pb_vx=wrr62p(+WcYjD!3fbL2VW4`* z^LXX(m@$8Rzikm-BsQkqEMprSeq^#0RjZrQg-K;s@tbv*8Mkn0UbRR)3OSIN4?UXy;9 zQWTWjPM!eVho?`lIdqe%eep9@YQ0eG)A;5Q_?w+4G}6{D{g^Y!;@J7F+IDY^-psoV z*EuGb`2W=od?dNr!iw>m9>eI~6Hg?o74^y;Fv=6Mz%ab9OIv4qzSA0xboF z%hR)`gzoj2W(rDM>?o0}I6L*Agqcv;o^1{vrS8=qEm8&K2u@ySyT2#YJtVp(ALb)) zwM-A)DWQHS3wY&t7}Ev=uP}6#48fZbb=u`5JnnsQHz#@hRGAJ-9yZKS?5~xdy$sYO8%ex0#?4YC|a zR`z6o95P@SGDwoV1C+<+Q7RB(qZMu%J|DO{zOIIm80Q z**)=n>~XIug_a<(13m&*7!w(B{}q59SLhRD^#UbDV%8>h$k5zrrWfzOIwu|*tOWky zDV}mrYt*d9$w!X6a0=tocA0DW6i*p9Vy36iuN7#Ma0ulEp!N48Unx&{lCi8)eM|VGcg#4ON1kP48{zQ` z+i3{QB{_A~#zH%2NkR?O;JWXz(1RA&8vxUpP>Y_(6xS+XQpUga zg;X>&kxRCWr_>zJl{b}H^%pwG?(6YVw$12$Z=)jtOVmwLg>d=`Sz-j{Iam-1J_xy?|B4K)uLU8W8c^Ty*V?j}^ z+9N4u3si<)TJley7n6*a0Y^ZE?8G7C33!VxcUEYqw@5W_laC8MI&oXb1Zdg!w1|W8 z`G5L4kmT3@<^L}K@~?K^^uVWkGsMQ`RHW2|KE^=F?-a>-CdfXs%!x?tx+yAD?x#J1 zyUr6%Q66WA_cQyeb|Cw`mBZ7S`ho>)hlrlPTB~&XK+pU}hqR>Uk1s8#W3vHaVk{>g z`N^>6om=(=W)%Bh!=m&Bu!`U`&Glzbm*Z5Oh%|*gI9pARyrXN!yKCe~w*$RB;K)H~ zMfeWO9b;p&=|75o6i-ld4qfgth7q<{e!4_O;9S9-vy@2(MTR&Dp_Xz{_Dz;!iX9W25Ggl8g!9;|zV*b&q>+#0KVicGKUTK1p zq`C(F@M_r#kQKEB+Yv!QxeA;rV31`%d9*=j%Zf&zb8;q_G3jE8iTk`yHa64}OlO#1 z%hFt%2k~eg`3s4@2LZT#aHimK6{9+bz~`ZNDD%P>h;`(EXgypG#NpnZU7DhKJKjJl zrr3O*QPxe|GJc7x@db4~-UI0SKX6`TE0GE=20QKV%gCkQw!hE0tR^YjJD%G$5SJeK zkhZ89Bf__VRPX&W8*rzBhWr+=ZPiYx(jXVSt2rI)_^2FE3!#QH!+njzvP6(~d*5St z3PaRmz@kRKc=XFErAa=g?mm{jsn?~D_WgC6$pW>t>W#_oHw|}~VM%~_5<%&m3Y!w=vI2%XzD8~0FtE>`R zuN95H1QGbMdrXina2b7YL1IA6-AekB<0xPEdHkIQCt7o7ErYOvR3gf;L=s^qT>rmY zWr?_^kt=jDSEy_~3`V z3+eyp?VPTKEJc$k#96o-YG($gj52jUp(qi09MZhL4Qb=?cI2=wx9xV9(F=L&t!?rOc~)<5bjSHxdv_Czv`zLz0@|vn zmp6atVtLI2u1RDC$B|X9yu^J2!cgD03s@0~^WqXjVR^?A=x;3uXzj9YFe?26jD%3tKN{~%~oSB&-tUk_CCZkas} z?i$)o;0v$#skh+`xf=ALQUQly4%nadf=PqOcS;AL!ig0z^|P^8KBwV|Z$5ym6(Cc? z?%8Zn4*}i~qRTmlqyy{3v!K2+%9}(l>5A~J2OAs2S$$i*A}E(a{B#NRt02VO;t&2U z>erW-m9e=OG`pmyHpv1-m_xC%g=v3T!7u`u-XqXK_r3cj+ee}v&ACo45aE0`4neB7v4l7VW=D)M5sImGuxXx8y!Z^Q*;H1v^K5Qv?yTNNP{S| z1T9;$bqq3HcPb*WIJ~W2Em}-OoO|NQqz_bh{w(Qv zEJzhEG&+oudoe}S6v`TlJKwrhHr6fC7@m`Ji_`EPc{ZN>X?Zy}&FS9}^z=vS(di+{ z-+s$-y0MLAr31~#BsNVpI^@O2mc8iU0V|Rx2}HwEauQWlCg7l#6iTH5Nx-ul;u5`b z)5L()q#5pyi4oDs^%uUrxTJR@^U|ffMTi`lLVS61XIYK}x2|!+M%iudvzvD^0Ku8Q z?x`VD6Igwb3JjuvUw#FgI9}>1A_$@tS4S`6Ng&S zS+v;zuDt?h;@&{o-=*b`@AgAN28@cXRY2ItfFNAgYfGHG3#N9@tzHNq++_rhYVTpeo} zN9j=^j@F3;qY|*8#|3Rzp7)?D8F=K}m3t+n846M{xbxWB4|beC z2YH<=K|~YbPYCcn*~aZa+>Y+OmV5$`GZBizH212bo?+>Q)Y&R&`C!;3g%Ay^Ep<-A zn;xWT0e=mC$j#c;H;()1WG+?SP=@PX1n?Av8c=yv>$tqZS63#$s?MCjjjk5n%+-MY zsAbykO8%NNALlK@AD$fIBMBL*N)!~@k@S+kF#%g+-;;oefCmWex5vd9J7yF-Gc6K@ z$w90Nhl%2vq6qTW1eC%gCR~vjkoBR6B4d_Tvg0LL0|F7lK?K5W@-@Hica0#^nz1P! z4j_wvAN$^NrxSqSy-uFm67>GbdtOIHCcx9iK4J7Qzk8p^(_5XljJ{UB=eeS4VH80z zZPV-_Nxg4^Xw-TOh6(-WSH9(y0rAe6M0268ah&`qQS=(7$|2B3K9C&hYP2uA&C;N{ zC|G7}my%0@Z24e=*&+v$i%E2ZL-&mgdQkVzcMeM*%i>1RQanEV(=Fsv0*(MMt<+c`f_`T8BNYs}n zjkn599`1+K9P?Cd?n8KCdb6@&a;!B*-K<;dP*dbanJFIC$l+qyY%H${Of4}F zc^=WZ%-i3MzVw-lIY{Zi+}@EhT|Sd1K;>G9g_j6HqGjim#_C<2D>FHEHW(WJFsL{j zaSw+D<5R&V-=$AN-FLY|rZR2`aCc?eQw`M|=?lL?GDxF%;dNdC^7qS{u^D}u$L#i= z;)1l&%IXM}{vO8=Xa{i4L(oYXhC2RGlDb1?C1iIlw~S96`E?I^Pu2hi`za@6jqX{h zVax|U48(=-H#N8t2dZnH{4_(A9^{V+yfyI0c{XHeOh{o?Al;~g+Q|*v6I_JL9CCUk z$^zNf4rn2SiZ^mVTU2yNRd$hl7!{c+nC#&JfTJ=h@{X$*9fL6DG3D-b;D;Kx6)q(=R2ye|e!m zh4Z{8iO?Rc9K4xP9pCpS#KkTzPJ70d-2vAo!C|@XZ&o6ZFs3l6Gj}?RmJzVa>Z?M} ziGjX-0+FMy4dP6oq!P76+ic~i?~p^y z(sh)L>L+-vti~rwfn;JuJWW)?uGKnY8yGUXyF_P;R8x*ts@PZR%K1LYsd=!x8l1G4 zTwPxRe_L(=xo1y=ifMX)jbb-eSm5wx#27Crb4z!s02)45Ci7OzV4Rd#?pWlT8?AxC zv~hC#X1LcRj>;$~?(Vj9^!P!UM$)5SZqi8NUF=zR1@MxS($9r^39_zfw>v4bAUTO@ z!ujH(k6yHf!a+z~ci^nH#kMzQG)=-Gaia2veLiKS0yra5*5!1A9BFt z2kPVOzMnzPD?~dh9P7d-pKbDv&1~&&?cZ$4_a5)DpJr0q8P!2Vwa5ZL> zu~13uY2%dng6_5P@*_DHpZI0JM=rBWTjUq+^ubB7^@$wj&9@X@-Puk;aQVIDqY|Ap z0OH=V8(onv;bpwaf*;22#0y7F(wW^Nez;b`ea5T$hC(ZJP1DqUj~iur0G?+w{bV*F zIK4;A-OnR~fRwjYn+A$aEyO7Q@p201q7aZraCx%yydXW`a+L98K6DLz10}Y1tbA9L z8DT1KujO*fPpZ4`1R}q3hb={6!!)Q28VYz?470xk^?!8!E_D%Y|GVA+K zDh`vJS)3$M2wwZC`UVvQPzf8ofCNEww#x_fmmtR*|Ie3KJ1mU)+}#~*G*#(45n!yn zCJ}_1TCr3;UjEvDUMdS7Ii+;rT%maTC0sHY63v1wm53Q)E0o)RZxQbSfInL=XRBtIR}fUi9omo_Vn-JTJdfda8wp8LAR+4ZS7@I1TO8)b%PX>(DuKci>@dwI-e$tw0$e8vskWhLM1lH34 zAs>OU5-BC(lhYo*H19UmT%5c4)D&B={GlFJdEpPYRGuW3D?f(Pm2nBbi9Pi-?c3F# zZ}hH5ixS5Hj_o3D*1!l(%?n#^p}J8*e=FDCY-LUv+2FNBWr*h;G?bqkaKUz*dR>7W zp(2Ymow4b>utOZcGt9XXA?e%~TFyXL_{W&rij*`&2U}%h%Qrs#6+QF(s2GQBE?vxI zcbd%VgFh-4eO2LPR6f2MyMuY^sv!N9WXH3(??dkA6(M*BdJsF!9|DpJPKPVyj$^mc z(yF?(RU>(`)*S=0zHg}P45>TH*Ss%4CV(FBt5v2UNmKAS_Tr0}L3<@kxC!B!clRS^ zf*JCW_R4QP_yFvON&CxbBW2*91)qEh_ zn_3cS*-?+S-lCUQ?#)W21NP_2eI@*p+|5;Sz4-fG=1CeO=VRP5q!}ROSoHP&t)-7D zqDvGcO-;~eylC#*3GKO=Hl^4$W8iH%8h_B4Wp~)og!%;D48&UJLq5=?X3`=0=-%#h_ z>pxR2PlRyaN+SgmFuNG2Zf9^eJn!|LA^8VRxQw22NW&oazHcLI;oHB(lk*Ji9E-)R zP)MG`oWdK)A5;MS4=;M$Dt5#=@$V_jM0+Z2m3v;XEcFig{mG~P6&@NaNbmZ9ssdHz zsjNP~97{m6cgq)Ua!eH_tEf!;5x~`cZk-vX<1jjdjA6G>@oa{jGC@;nA$Y5e;HPBy z2H6i2M|CeU%}7-uU2#|UOHcixJR{Rf1X>q>@%q_tYB>Yr0D%<=w4LuWIoO~y!b68t zAd6%Ol*NxI$YL8frjJ$~SCpJBD1mUb!G~A3ZybE~a$wAW=N#f9df&;Hy@^t846vmV zVGP13J3DKDO#F1BCZfJ<^I&Rh`d@sgmE|)`hX2wR7U?%7Inz4c0(z zWY}lGqCFd9>lheuDMi|31toFS=!YEbt~xUo#^WOGRb?1 z%b~C$0e-zSVvkjoEpG=Rdq@DvG`sNX9#N_7b&pO#hAwB-mVoj!xFtDSArH2;+TRcv ztq?V@(}P&HuUcgLSYw_ibsX#Uy@>@EYv2Xeqm_JkYMk(vz%z*ZICm*7YxKrw$ zAU;tYgHWOjcwm*jN*tgFph$1rgG-^EBeLYX8N#| z;Q8g3Q@LPe)|x>707DMnbSF%n3+1IpEeFq*8OzO@l3Y-z%d_$>qQ16CV!6p zrb{b5OFkVyU-c8L5dJ@oE09w!ffMcQWN{0|2{@kDFA?M4dGclyJM7Z|FAf7hcahj2 z1Ss@wW9P1v%?J?Ug^=UTb;Uj$G|_?|%YX6XkI^~#xbod%2lr8QNBQswpJxT#vKdk; z@FA&Zuf|kqS{*0>`O)Yd&y0F4WNQneTjj9ts8J>1`wtBro~a;MYEa9_ny>%8k##%~YZLV^FX731{qwgN!-wuw@v^g0Y5HKOCF$C*xjcqUJl zN)U|3O_{!p;j5A;bV{?Phgj_qiBbw90)6b4FV&`r|D1f_-Cq$*70_Bve#MJ7Pu|p9 zC-3JBQGS}pLtIB+z9=J^i`m4cdgJT@x`m zAUwXP$`88CXo&8)@&n&~8P~*rixtOL_i>Ol<^&dy^AFXvb|OB4DkZ4x|)^DmU2*xEpg zi+ADkQvWliU+{b|8bvQeKH}ff5bZe+_7pGqEe{r*b{i_~=*Ow@iOs-b>sf_`CU_K3 zr-{p`*(F~L;9DM4cVTOf0-jE{HTrp6_2^MX$IVPdKVP2CT`P2=_Ut}@N<>c+{q( zwI%SIYiF0R{1r9P;mpr(Hmguh{|R!nfAacc;Y=(}dxFlNFR$iZqV2kc9Fu1ZfG50c z{YXs0a4QTv0+n@NboKq7UmBon5K@n^3C5vid*|fCll#7UeFYO;ZOoQpL&IGFQOABm z+HUF^AZkAW!D2$Tz7y68AieE~7}u{i#r8EtpQyNso>G?)%XK^7KE046F^f=$5krM= zVZ+ zyV0M+5-^3MJ7XY(uhIpS8;Qe1l>_Esq25(QoJ5c~%bzL71;OFTec$}_m!z>C{MVhO zc@{~sz8QUvD1H6y-&#=QNoPgRw1UCc@-t`$_dP^V%~T%{&GQ?I9E{#-n2fA%Nk-^pruZl;&0FPmSQ2$i&m{cF+Ec?1)N zWrUDdiB|6us@B^jiX4vZBF%BK*Y{O0XlNj7Er?n2s@1Q})!RVDpf`sN{B`L7-ow3d zD+~W{4y&EU>>m0QIG9x z)~;F)hmldh6j#Yf*nEOeIMqGl+f%un~8 zFH=j?JwGXk2jFn)k-42Nd$FbFOY}fcVN5&{=Q(rf;lBD>dDK%w-0vvtL2P3D)DW?1 zUb1J>W}wTRxTtDq)oC%z{xhX*Z)Tr~sS#5hTJ;!dO*2$Z9T ze(sU-f@fN}n658;{-FQehS;mYJ!Lt<7^5QJLO1}&q1*>3>PY@fqf-2Bfk<{Dz%8>+ z_;SdAybsy@2emT5gLvgwL6cg1<&g@n*Tscwrj3FnZtR}=0kKV^##lbep_%tGm;z2&(&WGLpl9hFoH!wB@MDJQx~^hSUr^@HAa1>$NE+ePm!jqZCP(zPpZN4Y zpU?&87vKIOmQ69W6j-G}aLuBWN(|!fa7#6)l+}jyNK6-z;70o@7y-(2 zBdh}!VoKx{Hb$i+*f|OnWh*$WljhjOFwX}JvKR$6FI1kfHuzX8s7A|IFZDYr!h0iV-9@O^0s=ZtSnvemeK;^E>y6UC;tjXxLztEL;_Rzj@Qd>t{NjH;z3naPKv6K zP(r>JeE@hGKdypb==S67=+Aa(?C1FVY*|b&-$8&x6&OOZ;Nf6azD;GmAM}(wz(;v^ zlFejFW8v#*fYBODG}egsNAHh5%v+v=q1>;8O&A0rWlitH=}*`^OxHUq`-@lD$O~mA zM{si+_wzW+lcy6RrRuv#S;(~B3wfsa9*l-(se(u6R0!&K2vU+bBXb;Crziiayzs-A zleZ~SJNbiGkEm?eLA9X*seXS|O#pknp2y3!tH6)X{6>wx!?F`os2#6k#uJVKd3epj zFk7CA3;&wHgQ!qBn3 z6{{;hn8%@2)98NwtOvu3ieREN23wG#6)?2$|8Hh(@fImHDxczN6tgJq{MP7?CsDXh zYGKt=g+H`j6CoZ>MNQ;UgAsP`1f%FZKeve5H-@oF>@iA zb+!c0@%0vuI*Fy~$0Gk54XEpaRj!k;S!(;i%?Jx%O?5SP;`Z?vSp35%zQL`_;DdtG z&klBu!`fnhD#O;OBwp`dqcc@AD{9+;9UwHMtuj&<3UM|8b>PuECH%)}@i1U*ThPyy zm;L8*xsuzm2WU?hPi1;^O#~SN=j68(_k%7oJbZRtr3n2jzj8>Ag>@jvA$YX}93k0Q^o8Lh=;LYw)F&6Pjq#00u@PmL^jz?D7bbm9c%C|tt z#*Oct{El@-`Fn4k;iKa_@}ZKl#}5HVIaTyABUu}QX>iZ6=67=gK^Aq?a#5wKV>)`=>t&L z`0uNL=lnNu(g@_SS@ARoFMAe6oq9R+kz!@FrAx|(64y;f#Icu&t9cSM8v8?Pwb^2R z;s?qT{&OX{>XpKpnfo8du@G6|6E&1#TRc|)uH8OF+r}oaTelGx?LP`jhe0J(vkzY> z69L<;2fRG?l{|oFN(7%(rxeGf@*PW4o+1|J`@Vt_O1H3`JRVXy#P0D}y;LMr-GU{& z*o~X5so9O`vsfoFK8-%GRI03Eua**8_93C$4w8|oFRywu1ojk7PKT`GLkWV?g#3?w zNK*PaIF|T2KWXG>YH0z+veoY9Ru+P^Bw0i~wfMj*DD75Rw z+(td=x-fdT=E^?z6zGr%`Vo1pS7M7T%Cl;7x7GWRxgwGR-OE8B-K!i=p6mR*C9Qv^GrjU}M;6b%%tjt$+{;qI~+WpiI zz1-xl(cd@X`h*mZNe1WjCkQcG97rcV__#k(JmIJ*@#zH0qPli0a7JnHgn&gRvaNke9{B3{8p?rk!H>ZjY(=BfvCdSz=F95y9K)-D7 z9yi3@8;a z)@d?#CRK9_HN|@54IpsAPaN7_;OxAwuFTcS@NgG0FvUWHn-9P=t!LdH$+J{JIX7ZQ zj_&<+t5wKUE_;fJ;xc&gk~GVT2T^X)EXT7<E-hB-WpUkw^Za2f9p5z3-Ji|KLTMWyd(*9lfjK zk=p7eZ)!xCTmKTyEPzdrT7=V^t| zi?WfEua$g#fArZX5Vvg045F#~*ns$!C!vqs7Wx!(1$#Mc5<(m*W6t)8l=fuvSmIZl zW1jsk&5jM+fQRLhB@}eEM?$)vTm10OE{M*(J646GdzUcO>Cm}J%|!S!&zE@*mGYph zbP&N&f_HHz6+O2ya(h@$5jBPDCC(Q@bi+oU&yc=pX~FmYgkMlFb@h}W>1R<=2$dr{ zpPmFP!b#HOKRFF|ufIB75)j^?t7>!983jOwYkFv?v>4 zLwRx@EaxtS@~2T7>fCaRCXK&I6UPxQNbKCab=R|8yLJflGhr+MPt{=+l|ggYIqQ5! ze!LiBw|_7s6r*0DO|dC;9q3oE6N+H3^tnKC>~l}nz7tL0YY z{BX{*4X@H<(L|a8;NuR9k@Io0gq~a4A_BY_k;|@>!3oC+B|riC-u%E*2S7zWGXUqX9I$)2>$_NE`ef)lM^10iaL)t3n#>z zPz9!uw2#jJmAdUk0s&(^C||3Ehl=-uPu^)VdzS&c^3tDCfzf8bP@164nuAAiu{gFU zcuGs5<5*fhip=S7od!uq4LuGKBUC_(MIEfp7c=LuNXE_sb^hoJ43!Fo^1e-SW;?+qht0yW zC5MUJ)Z>Usp#kDhn5#BIhpY+9jczLqZKA3(dX|owlSzD?Ftas6{22P15_MV;t zjUHnX|L4iu`P_CeeH(Tu5^=N{$$jFqswL$=Cm+{;$9Xilv{dGM6N~XxaT-DoB^0pY za1fpNsxuQ)q*qs-_k%8Hlz{_Fd5De7@5!=l6!^R}2YS%g>Uam&B8oaiu*VNR0DLuw zl<+d88szRg4{BiQX%`XA?>s5$Q`n#$h^5y8kgsEp)xNw^S0sZx3=EsqRSLnpU^uht zER!@4T^T^nkNjBqYmZV6_pkx9i@Stp^f;d^4?X0+djzulH?ZIct14$6$(LniXhA)c8-Tve|Of@DJlaEiBu6v%dVd{`XJR zZ|(~B$@b%lQVBB1ldt?0_WusW$_S>PmJ=`1CRhrW_lZ%5Dxm47lANAqe!U+7UIFTI z9wAmj(Mh?++M=AcRR42$>~rV8Ki|sep5^{#Mdc+JM8%Dw_iqph3$?c3=zs8Vv94>% zZm_`bA}1Q^IdFO4s_(gh3}?YNHdnYfmRA1)Uj_r-NM zmQjQ;Ao(wi>pZTt^*WyaQHhda@bmZ$weh{TG1v8<^NDiX9pGeodkd>o`o8%FrrNFT za8r~v4$n-ET@x23<`aQ^ByJO8rj5FzVuz@3iCt7X`r4W#JU6zNYq^hQ44nP^svk;} zXdaN}mb|||I)ASGrT@lnj}QYhth36Oli~9hmH~oy9rh>&ajI7m zp4w?+VJt5CQAA=Xdk>b^{9=;sbgLE&jY?ETupE>l;mtY~ z0TvGWA9kUX7M(-x4pWaE;%8YYPka3P;4?h_n~He`;;!1D@fr1oKtDWpB7_>zbK$Mg zH{bruKc50&J@vF-bqq{?rQGPkvY(j70xvz{Art-;;nf)nX=Rfp+ML`T@MO8-0Rz2z z=r62?vHbt!%sYE{dH@Tcz?N1lj6CO?O%6%I7PN+_FjdO4$>M1N1n6m1p7FY$VVdN8 z&#MM38q$R`0V`#q4sA$c>ehrM2}sow3$GYMc}J{ppZH#sYfxAT2vjV$9{eK5X?9PO z$w5}!7vRbIcyxXVf5A31X`Z<|nP4QIznNsb)oJP)=rV==b(cvA_)N8@=9`KG;C#o8 z_jL$~mQuR`gc~00P_-# zetGG+GC#N2vrNpD!$^HDmYcrBs@Q5G*QYdt)VQ}*CB`I1ABDpca*628;}u2$C7O~` zv)RrRMFTbq_s*~@)p9ji^o*K%bpfY*faIP2n*aRHqsJ23@jXZPUM(;9Df#xV%eOzz zKo|x7oseB4<{#tKgU#ks3C}>p%%VA^V@#N>t)bsq>aae`RC~s)fQxshPJZL@tD?+*Lkr!&aWgIN z1yOa=&Q7TOSB^z>7>i0IqSGe{TtHt5tIJyZSp>s4IMWRSKQtUm*xXTCo+P3sL?@I* zXbuh$+Ys(xnY=_@#Wkm>e@6&JmHGlA=397!9AKPyei&ht)&>U|HvoDIN)JVd*3aLG zAFifJ^NWIJ0T!cdDI0sU6SdDglT1ulJjx3{XYo{^KFP@O^r4;jqleU0*~Dx-Ra8pn zOTwZUcAO}$VtZntB=^1;1-HYTq%0)qh6KJD66}v3F0GXLpyBKhz1+; z2`dknwalGfxLD46v7g{n$Wlh35JRR<7xuztVhjHOMXxyV@jwOA1EetP?U*VaWjfTZ{*t{Y2{kE_n1w&dVHY?|A`6ODcai;xd3sMCYEz z37D!Io^6ihumdLDym%F6VVmX5nXR) zy57-RDOuKLTb68DjsR2NtAEe^=X1`5Tz0#Q!NbIE1{-C^Z=7L|+FZaEw!I{v5Mn_#hux8q*3T*zhukEasC@gWU zEc)r^&X;GN@ny>A;aE&b!x*5>Pdm~NjmC7_ZcYxO6%{+6QGfMgmGHJDcL*~P@s|p-IK14?dRS< zJmOZ~ic`2ra$**%u9vG&+d^3Yu_HRGxtkV0Qm3i=z%kt)_|+@@vb?minr*An78g+} zlUG*D!u%xD#m_i%@ltuh4+q;2O4DZ95A6XS!%*Du>z(&IWqI`m13&ATv*qk1{{|2W zzQ-@!eF#w@7V{?(gtoS0W$H1b2*nAf++|>U@_|W^AjaB^XTJwcMAp0`jDrgyjAKC| zM!Vr)P?jFZd%s$nD-AIu!6d2r^OKL(=*%i<~Op6V*ewmn|X`C+KMWiacXe)z+3F05ksW`=R_ zXh+QVro&4@z~^SHpm$`fe~{+_1ViFxhG6n@Pw*y;j|jW%K!8#?JxQ@tA?aIGJZlip zf}e|bd?;No%C?eKSD6hOVZsU4s4qjngE=|y3lfaV&!7i+quVAosd$7#+d5>4AoNlf zc@sro9HMu(g!55s(6LHulFCNtBxvJ7{lMY0*ST9#rd*bV4X(@Q!b|1(oE6&tp=V`l z6W;A?{2aREZs>H1B$t!7+!y(GfgohkT6Gc17LSpH9t@~_E>2ZG6>7TCj5z56OZH2V0A2kbt6Z;Lf`Z8tMfeR>wz+EI`9fyiPQIn(G zXauadNVACw$nU5BM4ISP=R)xo5OD(+NxwZB{T~wtGv>?};}8D$pXHCg>b~(9D2UP& zkLk@M6o^xelNG?QTStXg&>J{ad^5=;_nXL{j{5ta4C;!*vYG7JBn9lk7kxJzR8_tF zR!;o*!P)Y+7B&@3Lg}Ga&lIO)#LTvCmR(QSa+#a<-|J;N0RQ6Mh#AIhJMCdqtXr-K z{*j~!gL2>VSXJd}SjBqLEsbXV#1l`HSA99T3CBCTrvOZdX52^X%@!6w@m=q{K@a4s zSJh#M%f@i?_z6v@N@RjQLbK#RCpU8%-%kL~g+Fo|yN*$c0nEfg{GXZHLMd}8bYVI1$pN}53g z;`2)-mSb@(##w1Py%(q4iHqg${O1cL*jZ&_LB#9#Nj{=^giOb42pe12w9i9SbB|yJ zX$IAWXNDa|)lZrQ(w7wAmv3vAa4)#3wGgiBTKE6vb zIwT(%Jwehz65QGIzDg0PI7FvU*9ku6*xO6Jky+h2hLBk!kppuL(B*c!3UQLX`R^u; z71<95#c20iq_v)A2|q9eZp>`yE%g0p8QN2O8*%K)l{z%^;E&=+Z8H@n7VpP;Gv^D> zm(|dUd)KIYQ+iYLeNP9<70C^B%v*+&6*mpgpF6$;&4nN#DR6GQltxgzUelDud@r%% zirU=DRQTI~up?j~ZtYQQ9oSRjmsO6Cqo7v<->lrHSZ2KNBi?~}@{5xXbCZ((-%U!) zw&=FpN*o;8{r*_9qtXe;aVZ7JztU^biTNYD@Hgy2e>^0!l0(q5r3qT_=;*_o2bQj(ps0sRzw)%4OWRe~ryp29{Qwwc+Lu$wadCj9XL1 ztIqa(1!;q_9ZK)W>hf#nkSP35f`$M2URL<6s?oWrI2@wSFsCKMxugJfG?7DIv-nRj z{1YC;jQtwymIsiqI>yk4esEiATCvxygB?|z^AgnQtl&U~;-s7ZwFiM`|GwgX$q)_j z8qBY^2pY$N0u4a0&r7sR5b*0oE$m;eixI5}XRNVoD&v7K;J^U+>sy~FXP@vgz@vI_ z%Odo}5}|UPwoisij=?+%z69%S%is=z6GwAa(NOMSM@7X4TW?@~GKX}?;4s@NT( zP3<`6Pf^YbF5~M#3?v7S0%Xg3oZp`Kd3xyw42iEDV#bWZXg2zC1BRRdC?0}yu{jJ^M6}{D7MM~S-H(w!j?CAS zUwg44D&K>|kWKkPFT+XbWMHWpE_h-BZlVeiA8$1Tyl;(v*Qt&bG&%mYbi?Gr z>`I6{e>ILu9Pr}1jDtfiB<*|8_eNW{gH4CUIy%TSDWmwXf8OK&ziyp}usY%+_b|w9 zOyYe^FsdFn2af@j@R(1cUWa>|;Xsp~k0n=Kx*^)?fl%wsdF9YUjKPn+G&mGVOoP@W zoXLwSlA6Qc+bB1WTSIuDN;e0whVh+H1&bNW69D9q#53Q;xZEh~`*{JfK<8T{ZBzs_ zI2D-lYFvJicdS>oVkOLZDp@5>x)xrE^H1d92~5{ASyu2QCtawWya0FXXKtS?&RDrs zz9BFpuz>RvxA;@}ctBVHJuI9!b3-j7=ci>&k*BTEZ9Aw{%!KNCeDe=(Lw^wpJooPT zij?!GO_toP81X30={sM7uQ6t9z@8J{r|}q*(zi9*^uy2(u*Rbi>?0Tu{c*cGyF%3W zh=$`Bs{F{YK*$`J>H7wPRJUPi@mMH`=B0J`V`yJ$K}oM$TvWeS&{)2z&wbfEzTjh- zq)njD3{>u+eDYuVgKUtYd&38Y-#;x%8T5lE%W!osR5W?A`h$TFnj0fjO|mf2E&Mnl zp9F9G1jNNWxX=5e21rLDoclh+b4oxpuVznwfNLdotxk{ii0&wkkk@iRRj%6<^x#En z_QSz73K`{MQ-aM=lRApb!EfI24&==Q&1>oa1g}ZjGbP2^l6t9xs{`Q<-phj~dWi_~ z;a;Xv!=mT&LU}AAWolnwo!Io-!)D8<0wcoSFIz|}=xS*cD`xI6WIYlK2l!s32ckpe zk)}MdqnH=+A+hN^OBBgDb$UVYM<#ZNhWT=Hm<5Kbih8(y9Q#Md_SW@AgrTtFcI0%l z)Kk&o(H}AA{(<6Zp1(!8hY)c|5wL>#)A!HIxY)M04jXd-2o@zz-u1YChq_;0hHKIo zupKx@VxtIp0Bv1OrgyL9Cf^>#CD}X2?JcAx(CE@~@fSU~9n45HXJ(X_&Pw+H)R2Q~5`gAClnZ5NmAfEni`5SMHUi!rQ z_=SmUx{-3bK}@>a=m4Dglsa^yugi1}C)hqzlWwIPLCQa_7%hK^jQu_Thmsnp>!!a^ z-gwG?1KEg?1>{qH;1|jIIdjIB^{$l{-A0ISmI<$}_I)WF(@iJ|_l)#L4j*@SF}a$^ z_YT2`U5P6`W!xME+-KvV;=`L-@cYpuVrL6tHM;AU_cnyN_EYewToo|YpE3TI3USOB z4_t2AF#6XYy!TiriUP8fn$zc5qKpUN?c9RdG96CI8_Yr8Om8tquD8kB{Zw)(Hy;T2 zYDE6MpaP#H51!C}c>Prl*aLQ#%ScyE(B~bJD45Y<;S?uLIq%G^XBwddc46-@HpHbT%hQdj z*Ua-5o`@QTsd;2%xcaex0CtaK=}`?ca+>d#1$VTfU44gWhm(=&wQ?q~2ROE&%xWY! z$&KM2PzK&G5CwDfkWhU+@A+rT%yWJPNY#Ubh-ki;4S9q^`(2MPTm3^a&ioM|5fRCT z{t6$`sS)dmI6rB)5w~3b3(w!ogi*=unJzPz{r4Q^jQ?Kc#Be)nmPq5No0whejrw}y z9w&Bl3D);9$!_UR#h0PVa2{#|X40W3y=nK9=)`n@($;Mz)GtST163k4f{Q=I2SdbZ z(6~Jo6nrQVzPP$OLHFTnTf!Y(BXEDjrlPn&sBL80rP_j$9S1LjTTeb6p4)}t-3~>X zD^^^%tUNDAG}o`YY}Kz%KCw7q|BLzUaBJO{&9%NQ4?Hcxq3=&ZJtrBFG9U1{`^Pmt zY-NtggPvejqp~tmon24rUz5n_zcFUxX6f(kY@!cAs^l(BsyxqylFE|$xQsusmr)ge zWxUwm?k*AaQWUHUQF$(B`-=oEGqfoJCO4^9X2Nd3`Ae$+@8w%75;gRdqdl_PDs^3B zc0yyyD5Q@WWsY2SzZ+lwmcs8TKvqc$h3FV`7Er6`5B?Yu^e!tGLHrvj+t84h0-<}| z& z1bE@D$(|=X8Rh*5cY+;)AwLPCes9M5Z)3)}=qp!N<_hYBJr^j2Q-`-W>UzmGP3 zcBt^`n79y7E28wZ2BEJ66Ge>b7ygJ(gQGL@2bB#|1kd&F1CDy)rdE@rNv$1MG)uNq zRxYNq2c0B=*!oMr#mh?LhB*SE&Eq|&;${oCwR|vw5PC?-|GT<4<4q~^xB|9@ei21p zR(&n{;@Ux23D2CNWUw!L_0{r(?Vegbv4e)9{ridwXUePY&K1yTHQ3`3Am{=tAv}ar zqN1|aa49qW=PHwh$4MopML)$$at+AWpYF^4e3==z1^tDx;*LrLa!8>9xlI6$QPh^qSis6$lZB={?-Gqj?UoP2Hu^JGc(&eD^4X zu-gfCZ9V=zOnM{ERgQqzcPy$X=hdq$!Yj3IbdCl57zi;pS>~TL!lrij0?AO7-Op{_ z84VBdhg1qx&(E1RUVGzI*5s-pgP_Q~H00sf4dx}RS1GzdiABSzT~lVE6KfoBkA4cz zrssLOgy$S?o^O8YrRocUpnLw85UgF!lZOT4`Aqq)MIau3piEtI2_x)| zzg)t&M7)JAix}8~=l~}&ukd;xqSTBZahmObc27V`v79`9=mA?{&vNRr@TD61iJOf@ zeUoLry$jwWZYWB0AO-9XB*ADd7p&@bu;$Ahr8c-y*P)-8xs!J?1$ghEp0z zbXh+7tZq#Bj)@M%@zw8BgvrmTqO_S1v;`b_$ei1wpmTaKE63E-@H)~-VNe!919OHX zkdi(3Xuew`yg?igidxLg_;osDlh7KOS>2T}_h4-z9S(HFPOQ}mNgMy#j{(Yy@$7vu zKfEWZP0mHxa-l#dUjX^wR*_hhUV-T{7nsV+Wu^bTXZtxi@6E45Quv|$5j9kP0CQxM zu4l1?zDmp?-77K`$qy1N>m#o%AUp6g(nwhrUQeqfB%so9M$upSrYJ(_wy*A$sZdk^ zE_3u`e)-GgC9fp;nmIX}F;K2}hSRD-hCZqMY&UFP6i8F>*T9M%ZVTj8DgcjAMn3Y; z3#)$|0%rrk?eQ6)P46YD0=MW=d9J@`*{RLX(S?BB3q&)1RX3fViA(@<^y9Rfkos=s zI&v8KcvuY&UxOmFM{cGkkH~&#Tc~ENrZ5c`G6^4tO8AdOza?bWe;of)3Moa_GHx>| zn1Ocd^+qff^*#ip8#9S5TR>DJS_VckN`gTSQv|JfXRq1Lvm|W$R=M&@r8thA0g~>A z9tuW=!I?ekY2;JG z0b_j;33IRqg8|1aee-NAP}OQ>F6iZ7!$^9HM&w}8W*t!aui3UYzLGym>Yd_MW-EyUX9)mqCl8E#e_AbQ`HI0@2(D$&8BibmJU4SA;s(F%DlVO+MGw9-`HJrv zZR9wM?*2e3DQCDlRbx>nUwFkln}I!+7!Ga=?4HvTLWZBw0XBGqH#6>66wSZd)Ff}C<_BiRV!O5~q8 zWaeh${g8%`i{{6iyIB4<@8q}>is8@`Qg;<=VPgRWLDA@I9%SA^+I5bovebDgWT!3s zOy|}IZbt7eve@q$uuPAc=!|nxAYyPOt_77CIjfvkz_>ql4^XN(HyW7E4w_vNJC=TaWPk3jm2dpTHT^TjY@dA8US#gRSDHECXnTOJWP zIxDwN%`495t9(dSd7`P+>#(In0#AwD5V?A*0kMlb$gh+TTS=7s)s4|M+2X{^k4e@w}(kI`Haag%73+_K5ze_LtK_I=dp8~}skS^4Ks2S_Ge2VIP+<^pM(qv{UFzzobtvp8^=@kn` zc8uW0Y?1X)o352vw+oo(!Hz#X`uC)7$A|Y}$@hwsb~TI;r*_8peMQ9aD|-E)PoMF< zVr1U+niOg-cd2(G+W{L@I8U!q%oyc8h3zex*?j+6S#M5e0rbE5X+CS7ZYWPIuO~C= zjDMH0z+moYf?tn%f_aJyf+@`kY3{~wDB?vw48xaU9HRfWS(VEWuVETQU;uy21rG+> zIgp8DZ9oQhkjkO(WG`e(rx25#W$}^B57)9IoU(K+o2q<*u83mDG~!7U0GF4J_>)-X z?mo*6Bsx4WFXld}l*M|O-@JpLw`ibz*WJzfACe0E4ajU&n%m6;h_j6g3e7nj2!i%q zb))U{koV&)uMoI_a?LWhVrOiE?J}m@QsfjiQz3@!&>R+tws{CwQLU0(Wew6HPXo$w zEH7TdQLz&qXM6=nQV*Hr2GFbAHB%JP0@b&76!2dX@1}jZ3{$4Ty&>qfA0vse3X%o` z&==#|WhsY62hSqz#uyz!W|Cw2*DrE@B*xjb8?lNYCX_!n(fxo;$Vvam3w9aiRYiIH znK&b0h@EDY_eq>lk;qf4e6Uc+F1GgZd={i#!+st@UFS}qF^fPiTPQ24ZW&L5EY+of zhaQ_bz!GvJ508D_B1t-Pku%gu2MIS;tS?!ro-@Dt5N};WvM#$&*_iS&G_@s9-bDK) zE&vsW$KZ(?q913;Ow>U?6z_f+-HRF>A`L1pBTc;@$gP5buFTH+i)m$gGbu5T{Mv+* z__P})rb2M2rxBndFjbDi-;CTOoc0^Hgk`B9L#!oL9P&%C@Ud&)WAYaRiF-XdCt?O= zp*PhV^xf^MU^2^|3RcdVaj%3YILEteZ`Y>sePG(xnejMEbUJDs`#GFp5eiU{_;}5& z;uAA`J3BE0m%;TsscLe0>9g_~!Tg$q@%hm7m++} zx3UN@7DD(}09s>gVaIOX3XtOVMgd2VGOZ)vor_){PzONm@mgFP-X|#H;U*7=#1jn6 zQS3~DZ6wH`t$It#TRn~LP<1djm>5AXhpW41JH-uLAf$E`@R5G+nM)93M4^ISx%#5p zjJzZAE}O*J@M<~hc1Ul%)_2pT zno{ZP>bx7n&nm!$vnAH^KBwPqxC}WpLFdI*&siaZpxi{WVAgK!Sq!ZsltR=gcdNhXpTKv2FBsIOu2RgyuhP&eWq`p97#^-T zfea_vFCKAX7huX(0Znq@Jj&1^Yv8~#?wd# zJmTldt7rV|rwZj<`~&v=6aGQL{fNxSbz7Z@p&A~kXhbbH;tqkz`J|kD;*YGL`EqUH zyUkqwH!?airxSxVvpiT66`$@#q8i+BBOkpBeULwlAG}hY@CfcPWqCSjU4{EvN9>}X zMgTm5Re&8TO`+tKpF@HwHopgxWOrrA$mx~h!4X`YA#Mu+y|Nj?3_rM#pp}QmF9xdL z91op37_NsS*)KWBcQ~XrqEH=Tw5t|KvB9n5@DVYTq#5+6H`HHoU&Qs|o=Xmfro#cZxqTdvQQ=%K zJ?(u2MEeMLTTr&pLp+M)C04=ZZmOsZ`=ljt(5(MHm5TMfkyuA-@S(AIulPL#%v5qO z6v4&4LfM`h9tnvs4o5*hViOHm+A1CB!JHX#rtKv_oRnA<6?k~^QL@3K9O{6ugu7Sb zKoqpsUwvW(M7ns>Q55Ze$}&O#iNh9no5FD z2_8nBR}e;I1(pTorb&qC%#UQ5miyOj#E>et1LncHz)UW&AOKx~!aXW7FjEG0d=HtB zi#V8p3C|Z)GG=*yLu-LztLmce2{LszEMELqh$Dr5Jv2(f(Av$NNi`cR%;t#hVJ3@t zVI!By3L3ri{>nwl{$@4o9i9~9kXpKaQaesIRDo7vVhDrrOf4zP3+wn*4I|~Q+hF}Ig@%ZJi34I`6 zY@lU^_ea1%@m6`RR{EFGWl4}~PVd!RSNQ0Z0`4zr5(Ab~L~1}BLVVzcf}&kJ?-Bh^ z|IHJjQ*?YYJ2~ukEO4S@jplHpY&7(JtR<1!k|N@p2QQVzSx*wxRV*N7f_}*DV~Q$z`w?CcK?hSkw#OO z%Rj}0;&xM^tar!1$&w`2yxb_X0t6?UhD~L$H46qFu#wk*qU4ykxI8IMmf_H;^j{0^ zciRKDeeZO!X1rs2y9TUPR&o;ij*j)h3`-2~D(~%WN7FIgNe->1`#T=1E`;sj6_9#) zX>Ku=6dDVs9cNEGvDsCio)$(z}vWd66DzgCVtH`J8w`ESy=0{cFO>hr9J2r8@&0OTQ3G3lK53nj|5 ztg930}uhBhdN7KSf& zNRrl{Dd&9im9nwFCDsIw!;iCq9ypEgqd-WO4kaGnoEAb+9D{uI`)XuEs$4j5#KL=H zZ!dDkd*Z@z3%VF8W8sN^fr^Anq&RuZrpn5a2N};aHLm>23X;OVpyQ+Rq~f^2DO$@o zahCgf!Z2|pg1wnuCB*3Eh4-ZF`@(IwHe!QJs)*J)KiS6Ba%Jgi_y@tlkRQDp)afs^ zW*0*It_Nr0+hO>;P$6{q1YI&)PP57Ig(q(>X{FFGegR=`7HPwMnV8AyjOC{0ij*BOupJ-8PJr^%4H76nNSK)7AOGzVlWThN^?x z#jy8g$~FJog;Mv$nUF&=y)<72%e}=Ia%lMpI{}&bq9NRT2(cR+mkXfy<`V;XRyM7eTV5(^~1vtE41#z@tWxx;;1 zhJMm>_5>DZgiR=S6&`-p%bEv(+v^j36IR8^TW+5`xj2~o8_LOQJRLAkk|}q@ie)Zz z8$!AjI2HgH=sef_oFR2Eqsq*q_fLLCXfIzW>G!q!bMb8XzQ>PK^_ath?t6ZJR3e6{ zu*~LO*cFPZ?W1FQprjd8_inxiU)sG$;KHZBj()9^!w;trxBq-DEAdd_dK~no5&n7E z!@1DoyqHa=0Plr@RDtn`G=WzAg#Uk~gvBr1KCHab!`<9#roJ4kTM!5q0%ftBjWEJ_ z9HHHKB1#akk|z=P#$xX8;`#(-DyM{d-WAjOAkV*D>KYIVH#E+K|0FFg%?JfHqi zUcXu-#!VH&>p@dC7-ML2B<9akHa&itewGgAEfbvTPU!E%i9FXgON`Wj1#vs;=*(hw zx(l!ih<&J9`W{$SVgMzU?-UCs&g4T-5uqvK0VXS=$t?sP#7b=Ls<%`ohpZX)x38DS zJ({x>Pc#fKysU1r-kK1fLbxZt&vtZ9sdDuQo?{P~7N3~ygWeRc5=oXpD+&FD+$@Qv zL72?}nhUY~Haa3T{76V1hcHxFBO({Pp)!#N8z#6n;T%A0Vm$f`0NfAWdhYUEzlp0O z*6<{@SdxplGcJ0;-K3PnC{~v=N0EG{nCRjTY4P&nwVOnkeOeix4l5dPxe(W!Ca_*N z>4ZWlOT}oA3k!3DGMHPO^%~s75#;U2rpVHiD9KgPJ>0^D<*CEi!{FP9#ek#oGw2Mx z^qwjKZ|fydG#M5I^WAp_kU{h(?Zr`egz%p3MQ9p82AdA@oN&hw)_e>2hMWGQawf7< z6z^=@duPiJ+++|AHMA6qToKkbIctRm;O_G8i%PYfOXpb4CW@i}xb?oJ{#`CFE<_*@ zPf2x2HOFzU%zDr1r0yz$wAElF8oLFa3jkjPj^Q+wYYgE_n6f<5izN(tBCFwEBYF@m zX94!N59913Lu9W>rDb*QZ#7XgxXvX6lL}Lg+-lggz8Y4kWO3u+0hC?l<~$`&l^+Dr z@m0XEyGIe)CE~oX7g`iX?_=JHQuxF&fGL-y<(4r>Uu?{$TU!_kjh9DgEyyYx`Kg2e z5TB!Ads%Yj zvWmo3iU7~(R+sWmq}ne*FKhQVu=3$qW7UMY~bs z?)z1$3clu+FxcWN#JrsjW$vY`&@O64>AK}M;J0E#O zUc*Mz(V2tmSYTcp8g9DHra$-|sc1;u*d-u;Sf(BXa8|MNNtaO`LAi*8*^NBPc~EQ=&_XBbKt)g3DBxSzVrv^2B;9q*UhK$(C_%o8sn z@4d*_VLae8EK!`%$!wMR=;a1k~Ub-(AsOUkC$PKIvq>Eem!xCxM z6=WiQK{uPs&86r3VSa9^g!^Z`L7;)V-SW&#(((e*$s@5sKn#17aJ6(rmzz6e7p26g z%GA-HsaTTSUD(uo?|oqHHp;dl)oK+?w4+nBQioR zdJt}v`)(j|f-O91#y-XGE~^gkAU*RffNYq*D8GMFDgi=0yOB~cTGE9zK0wZPVLFC)J>-*f=qCX3#0 zuDqIS9-}KIM*k(k*Yn=UE2A=h)gOe?55IG_3^C)}Hbvb4RYwp<>1w~yx%GRfU)~#k ze)7=!l#M=;g~q=0qba0z5bI^$z6g)lGV9HMqeE`{F0t!3A9|VlqkNJ0$4sC|Hj(P9V{xkM_q>X5OS1i+lUXR zXb;eRuvGnaxuB88uQ?Em0`x!f-}2{fZl{^L$U=zcR~3*d9D&8eOe&C<%R)#>Fsev= z998Z;XT-#>nf}RcLopei$`^?N5)cIrnH@(0CaAVDwgsOp&>DpG(O#~ymKq@BL!Tqv zJ>Zm)eAU6>4L611*9$#`hNt4Mb8>jyO9fQllU4!5%D7F;H9ucLQ%oNJ&TEG2%pK`d zy?n458W0xQn%jiaTBTo2pEJOrPRl>_Q(X4_ru{J| zMXQ-|Zp7);9dYb*F9?Ud7<>D z{B$T6!Tx>a6}pf*U9BYM5fe7#V>~Gz}kwyIqQ6}$P4zi!^caMg?Q42(dmkb z;M1YZjtHDplI)+yVG&L|Z$hN{*g!&5s8?r1hjQ}h|HYr;#v*y(#B%H8C=F_xiiQ-k z8V&RXYc%+VKP+7?_X7!`T4z$a-IYfl;RcE%nu49sgapSKHY;%+V(wWtY+`7;6Eir@qkGG%Wqr{{ z-xMeiH7O+#?8=Byq9l#mwuj5D1AKZ&pS}JH#T)lra+6`sB|kTLGEYFV+Pc6@g4v{9$F?jj(fI;hhGU2;pC9J z0QNfnCa7m)#7(n;Jc$(VklpLPKJ$8c<^P`Okl*`n{HOe>-}6+Ec_)09XMRPMrrAwG zWBZjeV{l|L7U2u7-#8aQaLu z%;r(Xp?oN6vp7>kleiZo1=vF9Q5Bx{d8QSvhT)a&%e+ z6IjzWrB=)vBj>uiahVgbszJjht7<~VhtcUaUN8IM8&lLU4W~hMO8L4usEE82<|y<@ z8A+D3TY%UVoij;@#HQWHeR(!W8I7a(`Lg5{pmM$8%i-|Zv~ytXraD6dVpuo#8^$BQMJmnhZKl@oz&Z@n!S7S@Z@Jgwf^Dc z55AWSfv!xEsulU+#B5^0j~`Hx^}_nQneu&4lvF$*mtL?H(nYpZLn2JhDd%urFPPKkJ_|A3 zx_p#V<{gH~^-M|K2gB3mtdkchl)PJ9kzeb3*LT4|hpjL8REDjN55zvDeuw^1?Ut>` zj9=O$S)Nnd{s8*ddLjX1mL;b@QLS)*{ zQB+c)ZHtO&xuI|p2L^C1IjD3b)I-6qK|a9z|6AV+Xbe{(pz3`1J}=u_&kKr(D#l;C z)pE8Zec8D)lsm|umdi#IpHQW!#;|*>yb^6tk{MZ=oR8v&Qo_ zSY5d~y^43D@0OjpB*wwdo3ro%WQ%SKstVpOFCS@dcmC&pbz{dS_H#i_{G6cZ$*=qc zFgYmpny4l?fJoP=34E7vm=5mk#-PcMR!e`m$ADHupz4oLLL~U=nWwV5`&A3vJl?hr z_HqfEk)9+6rq~{4d>^iT(Pk>a!rhh!D0v8`R4pmp^-7V-fTQq&@e&0Mni$$B(fKrL zyV84lh1kAzXJ! z*lr7mw>3YdW|$8*vgwti2)ucUNri@LoZii)e+rXs1QQV1cfg6l9}1p8r))#|`vM%j z(onqgC1`g*o1_Bsb%=`W{**1{}9s8k&1+XX7|MdK3nf}Sa%z^*XcA*)_41HXz5 z-z36!>jKg!uXeN;hNU8R-9fabulfI{rwoi0;s6V?i2!)#=vH(s#acjWWXMYPg zz+d?z?7bXeUEyd<5N4` z{a?QUFP<RGH6DxbxrZ{p(_zvT|! zrIZzNDj%#sQAWk+K4f>{Xj9lcx4j5)D7k!J!yP$Y6!Wk*Ds-@|ESPEjHmF5;qPbC^iFcvf7@3 znLCnrDrw*fJ*E*{vNl8W_2AIq@w z06_wtAE28A3GDGwLjoE_9DdCmC+D4%_ZpZC z-xb0>FPlwHC~&WA)@I4;9aDnf^hTg z$ArL#fn|QYyzU=Z)adYepVah*Gi^%8*&Y9k0!icpOVZ;C2!sUcH@ydl<7!U?Qjt`k zsm8j$B$^`-e zWi9*V{h!8Amu>f1b152$uvQ+r3P0`aat{VN=UKm3!JJk901PV_5O=`rx+4lC;@R~_ zl?q$ii?s+;=(c~t?eKWH7}(dvkzlIuzvR+bp17I&KXwzo`FpCtWd~R$%W|3fXAo4! zvDWdomG65ZdWYe4$j{`Y#VD2))=qHz^K%J@iXW47fRW^X!GQYFWYX;@-y-ZO8LUmvpAFb}8vBUQb!sNW(T`(j)eS;}Iz2$Y zFUhjixl%)!tbD#eHmTD){@NpikZMP0rc7VyPe;KtLDhPZL|=)psL1Dg2^A;VxtWgF;UUKP=G)nwD#J}02o)DctO4xGm1lj7(cu7~;FK$_nKMe3cZ6p_%_jk%S zfA2+%Lf2rj*Mw+v!zG3zqK|gC*Y4Y!@p>J4X=00&kAe;<6qrT%1!=F_zXm>Q$*vfz=|uEG!3l3C)jxXv-#q3@yyEyV0YRe4@;@jG&<|eSSj1#M>vo%hIRI zkU`8%H+hUC{+7(BLIhm*SQC^8YY~@J<>U3h5L)cQ@NUk$*atm}!j)r8d8})hg6g%7 z3*N2uXZ1KAkH^Y>5Q%)%1#Cu-;a z>e0{LFN~}34`{@q?tpmB@f5}LCTzzK33h*&)3dI+2H|dh^#9?oK6AnA;rX)Q*HE@N z6nDixdRJ2T^!E2z);q*HJR-QAFvsJhX6`;j8v0iS6sS<(j~(H_ySW{yJf#q3tKctC zuU^CnzDH+23nV{^dncmBiq>SY1RWgH-m&^H7Z4*tU7G2}Zf1w>ggzwXxD!Pqh_C#R zohIzBEcXvjK0EnUz5?Xknl;TXsHm{wBt-79cXE|SSVUF%i0Lwjv}X<*Apwp9Cn);> zf}`WGEOE+z0XSFx8o!?dS&7r-p31L!6EJ7EbGOLrAh9n{YhIQ0cW z=tGK+jX&}uS^k_Vp~eY!8o)sExtkohda@s{H$B`^VYr=;Qd-%B@0B@~Xrh+aGlm?Q zI!S*UZNy%Ca1+nL*5jd#m`FP5W7pe4&` z7>668xHRGelrJSoJqr`(w1`zbjzp2JEyNOifVR?TgYT0scJh%goh>W90EpsS##wM3 z)ww~iK6gqLc^{<-8bFwdPQJ{++9xQ4^5O2!ik`XFceC`ENzxAJjt=&l;|o98L8FX| z%`W4b8;GIY;lvmFtA6W?{HN$29zM9&LObovaMU#gF7|~1&eX}?D#!Tr6%P??vi-6c z;4&f&9O<>l$>INL=jdO`6WKawJRU0P-c^2fY>Gm}i0{t>vzZpG;)Me``|M3vhi;QQ4@K_V!SScgD+f&sMiDCPjK_O3u^>UmzlNx2nyH}cZum1t0G46psl&YF(H z6*0P_l1A^P)>>eo{wO@o2>5BUlvltZ6iB&>0cTianhm6-xZQGCl11TNmY8=EoO4kEC6BqEaw zpB@6*?I3e4T(byE?b?t5_(RHVe8yfr^38`UrbBil;}i1mcM^)qulmYu2lLDc6~o%& zyu{zA?vIH{G4_ig=uGPHi=OutJ{gc8lYLNU%D z1`QInBCtvd-Q&1sRa@+63oKM1iAPMD%eBma6PwnKA3lEYd={>sC#=jV54hFMktNS@ zDSumzD>0!aoW5KxFXo#lF|o6s2OFj?D@oWkuN}Y@sJ#baa>+VI_s+-yHr<;_+^rU# zUwR!!MwY;x%QL_ipp4LXe_BJ;NVZ-vu@SoOhx;7s2!nFR*bSH@F@-0DU>#q+Tg#*i zI})qy8poV}!&a(@34g{tPS18DBTatYW_Ql-C21qD^=sbY_r8ubuZ} z5x#7WQTU6b)StZB!2mz@;G_K$5kiUe%ki%#M@Y^AekJ^pO4D&Grpr+zW)8}g$eCl< z(CR!35^LL89GUZ2&K3`gaCw6uD_xP>kF+1HvFyYmi}~n=<(PCrgtrKMdxh9y z3kTw&EyYE?W*JpV6?xpOM?aVD)X=Fu`l-HnpnrM9rxVLfwiT5mq5$D@Wy#}5?$T+z z1L^9*bdKz}!=PDHZi&jFc!}W1L6|mC$_T*=o!9!u3lP@iW6jDe%3aw0zf?&=>0jj|w zcW3;7BQ-iebQs@x@?|O<1fbmO_4%tAHDk;lGSoHx_Jx-gdWP9A+yNxpA3%%%k@@1} z3wHp~KSwM-;wz-0h;hx!=1RGf!?8!T@<3h40>13uFfh)Zzi`eU1rp-i^GBSf<={AK z(JQ!8bMWv|G)J%&!gV46R!{nOkK~%+^jI0yDDOR=jGZN44f^r#B?wyAE(K#M_|B6+ zy@mB?w30SHcGuMdtv4?|L4|nfK}3OuLL|May2ED++PPFxBuP%=+IG2> z@7UNvxsI(mwX|ARmlh0cI(e7ozjN|cm1fk}s2@DX7f7@8JnSdhqN?|e2Km?JG51x; zWRcQ=W)CD2aE_|K_zDtDkHP{I9meu%t{Aj+mG5aw`gAHi-Sb@bXXaMX0zGD(g?xJy zR297qPFfz3!j^MZVi5Js&!EVe(zZQfBxf*=|j95$rIB?N-#&?zk30x~LkdgjUU%Ijx5+qA^E>{Vn#|UrlV@zx&pI%C|oM zo%=Gldiiph3!m^`m1oYniO-c-=%~+R*n$J`yTPx9!xAO+y5-^|&-7a^LQeErc!3=1 zZ~nnE!{Mj$vuzDXIjR~W3f3bl!=pNW@JtJ(64dOe`mH5?Kc-BO}G!LWuR z_bXG7cigl91*`qYAH~c7g6HYKCW(G3EC#-~ps;x;D74vlS`XRkewWf1$~E@;sPXjS zDzBwq^JsbWGt7kXFGA=F)Ap`3D*oj@DVuvKU>z0lK7+2Gv868YqGAo=LGPS=B&oGXCYA-aA{ z>cnw+i`R~uoS6QgEcWfHZ19OKc+7M*UtM++5%4(-*l_a|D?R) zzhS-2n7PCKe%LC~2wo3A3|2$X=|rcGH@5b2SKh!YHY8>X$zYi20L^Nt3y;Z<%Bvn; z)!m~8UTj#|6-;q>KZIhK?n?f7!XT16AEpvcl`^$7=;wq$@rX>_N_Dv6D_b5&GC@Qa zQ`5NI8-Yqxse$?r;}1L>GbJH$+VgpcKq#>0_B;ZC_Z#;|;dV+b$DE_#AA11ByM)f+ zi5@?A7GoK1#lWuv+mZdF>H(f?M9b$1@0wm|N!FD#hr1zMkdpp1EI<&`OEom=QC~^N z9BcUYUYt4=W)$J9ny?V=Ximsc=r~Nn1%sdR+(hnydEN?VrTnUH}O9JDRL&P813yWp`B|lSG8x9Bp z5AN^9mhxq$QP%o0t^F8k;BDVZK4E+|N;<&R>)v7$&GVym<*hjSHiw1s)uHxM)uT5b zuX|?!XS_Hneg{t)TPi%-jK|wB z!nCzd`T`fGS%#U7{k!irEK`8QE33*Twzz+rnlI1!H$ggqT&%cP%R@k9sd3{_o+KLh z0(>USb`ycxCggv#x9`3zE1M!L)<^$=Bxm1>4+a&$9;-c8wX)q3y+Pbn-0yZ+B;;wfFsI8MX-M;aI$I6-4J=Wx(V&9T| z+@yF5Uo`=mq*CMo_LVyv~>P;Xh z_eV<+p8htm(ZBWcDW;@s!|P9GW%$Q0y`Bj`3Xu|evlRJBNm_qg5g%toLV?L5B>^-e zp>D!7enSt)R91jhf>?!sc}&m(NqY)vn9CD{knbij3}BT%32U85O3-I*6}VAn9b|}U z(0ECO`%@jm#{bQm1X*Zw4Tb+o5ae;(@8MzdyFo!htm@N8%Lpc!2G@xeocB_NERmby68h&Qd zd(U>k*dn?@OPVcYq-tYC*jUl3E};tEEPG$)4wXk$mJa?n(N-3I9E~&haReFl3-LqX zEyW8z46qg6@bvrOB4GbVAW@Ut;Z)o_O|)|1!ZUF8QaNMA34{5c&|EZ1N1@bcFU|Tv-HShuwNq1ZzJ-|p&hsXjd~Uan zJ^!uvvLD4EeSq)C3t5hhNCG398J|Z$F*{(aa<9CtYAj|AS8-%sOx+W*-VYx?cv&Zs zKVtvChbZ#hsJBYG!;RpfzB~u8YR2P9P=KFV$)3e|>__;-zHRYPpB%ZkzJHL^Mi>L9N=H>=fA7}Tw>(bqo?{k{`_@z612*(>ne`9j2j|d) z-5fzq;JNn4NAHp_auRjK9{u}o{-FUqu{H(E@Wt}O!1?9D2Gk)QuF*!b?LI7E>pw?9 z|MmFm<~HoRz@!qqH4jQ-A`%y#AoD-=D!i{%<6eLe#G&G!(7VgJM_Zf@{^1N-{{;&f zE9g!6i={=-&huV-OL#h@s3g-3u|RsI8bl%YP{7_66yRMEc)2+&I*?KBA%ITK#~?Z5 zlz}PdbaKfadKSk$5NKqhN&O6}a5^LCBvpMMbcg;F9r03RG6%ayzsO z@-3--RG%| zu7|hq5a!3x=za=vj@YCREFP6p}*j0d#`A z6M{20nUHxI9Pg`sP2+IDV~FF=hpL?ZcX1sF(codAJPY5%9zS4{Z{78e;|Fr&UU1V@ z6HZJ4e%>;D?7+;(`Ce zhk&r~&{s7s3+`7H)V_p;cmR)E4YzF_wKAT^?#D^0Ck>1Va6=&pyX(GQ zW+cRake1!Tj2_4YfZ5WR989^MWnG$xw~*Pg%|B` zZZi7B}XkItVYX!e61`Npf*uxSv2?!>uU8AUtk8 zCann&VzlBl%Op+MtcM&f_ZzKd^kYRELBsgjPyM9)wf}w+M3(=)MtIhL6PpS(f+D6d zP3K`Ia4+%cbH00}U?wFs8E9gv(Rg80@|r#z>6TVTvgTwhv$3+uP%R4c6{Q(+=k2ZI zq-%124)0-s;gxV>ULf=}A6{9I++q4vA7P6XK|5=r7N{1(9d~t?N7+#TJ}Ah# z?#(rId~}2q(XPw()f#?{fbX0+*r>4^rmz`<(zc#pHO&mWs($#`ZNU1DAPEQ;I2ye; zYw+&mGrzRsB2JF^nnvGZqDUf+x&_1+In2U|JA>k5DLh|}J&7c+pZks*0-OAve;`Ph zjEUG)QHfY-kC1glR^$wv+B0@7Ju@j1fDXd{6gT33UKPMwP)J~Da62xS04o!n)hhSf z<%B)w#Z%dL?}>-hbI&p;!#FOsL~Dd^(C?|_;bkxiQO#Dvl-o(;6o(YrN9P|1cZN=# zwXF@1ZZZ5-Z~el<^9IHKd?bl>ggQc`!2Imwq2&usGbpUO=$q#ZwNj|9aBTNc`rOMt zeA6=?jGgkVJAieeV=F1ELB@U8eOEe4?-VoKjzWH{J1#4cr8Z>;_ENBhk$!)z9OD!V@S~sa8s)@Nei|;YTMj zK}b8?6&jx;#1t)Db%BM$knTVVke(e(x~p*6_ks@N7Q;2Vj=tiTA@@U;&Ou4L;FUC~ zx6NYlH>9J}9ei{VnXiB+f-RL5(=)=-?UB8mNg1efm;fQYS-p{$uB7UQK2anCUt|Rz zf)c7$=p}Y_S5yk|a`hE+Qy$S2mG`mK)}zL*pxAPP#rP0|mlrCa2Pjsf^&7MZ+t9Q0 ze2I-M_vw$lRAwl!#ZG8_co;YkhmmWs=P?5IQz=2RcsAJ4gCi^ISeO+h)wl$5@k8j| zM2O&YBp`tQ+1+hFPnq{PHH-WyIU>Ktb8d^GYcp3gw zWubrT_byT7eu-x2rP-xLZ)A?!8!^B-ZSHvNNGI7ju6xhhr_%5Q{A_(#BAkt<8e<>h z&hi9>hSFu^z~4xKke%^v3In2}H;kC%h4UOMgLGkTFrbv1HwbeQV^%$jEoaq)mfwBb zx=Ut`KMZgS#F29GQih&hr>1xSt(5SI0&6LvQ*11jl9SKJAGqDqTa<)9P9uAsAW19> zwF$N=uM#`yI<>EAT{gR0Bl5g%g%I<;QOK-rCLd5>h5@)q)Y&_DFdaSU(VH z`0gD-vN%UPiEN3xTF2Xa|NF#$r2~BYQT=B%QQsbaSkLrH9=Tu3pj-@!kLQVL#yJlb z8s#e|8nGvu5+svH4Giaq1G$6Kxa&gsNt}G>)l|>TQ2BLI9#F$EObI~QbJK||&@+j? z__eIA;ccXmjs`D{`K1!{S+zo7BP`jT6EMD?!0ICf8?XrL!nq!7@?&ZWA;5~#xighh zVR_P~sb6xi6}}k=hCN!3eum4~9fK7Fx$J48rM1L_JSd6cs`kw=g=tUveG51tm>CG~ z98bSuZg2$^KHg3tjNf>iNpU9th{oYzL6r&tkKH+bFV->jUvSHZGzQ2qnC{K=ed7)> z8$T882fc$L@%|B6A9|G5{EL1ny`K8^J?g6bzUOLh#wIX%}UiE%c#g5w} z@c?){7Nj_$A9{l-^|*|G?!MfkbSVemAVD_iM_Rm66AHzWk4-h5yU>_ZdqKI)OXn-q&%rD(1)(v3@xRLy{>C|ND%{39U9$BewJ*-kdYyEhzfEC;ohs@kAAcG9tk*UUpN_pSMb4E=WH((a~ z-wnV(+lzAn-_}QsC%p%Rb1STC?2;^AT1~#SQCN#;kWC%W3WVAUoJyy4)u^xuH}_x-o(Ir(o$v%+KYV@^_kkJ%GuQVm;x>v9w20G_^qV+}c2s(vLg< z`%1gN(<%)Q$L}ex;hi+F6qBoIkq8h!7yztD>R0oWTVr;BD>#MK@sCq3EPd%WE5d_C zm>-cfhg%+|ZmsN+ESrdkT8UKkWGtT-N;nSI8|2jeawX*UBdW_Zb->u)jkDtjCAh>W zPvl>n9CtG)^D-Ik)}TKw9h5!=3wMuWAj7y<^n5@2%W!Lm(;1){g9UuPDI5yLid`A z^6N?&l!30H@M1$+Lu^a)y!mEJ9Aj{Mthu|yGrwh0TwR%Wd*zG|Bp-v%?(UDRR^ zi?k$8R<~T%S51dVB*`ijI}^x@GkH6-6#UpD6yXp=H6A;0s9P%O-(I)`Xac@~|LrJN zDgn>6gP0ozWOU%pPnDbQa4iNIaTn;o%ip8&)|#r)q1?bu(%T%!I-oJ9Qy!`wN9_~To42N4X zuvs|lD3#H)jq-7^+t+s*rdAH1w<(I5lTe*U#EwUY^AmIVC#S%x|5oJd>FYgOpb)?n zdo4iHB^_)o#BQJH$|2g0`*{g8kpG@5S3|jzul4w#!HRPxq~^S)%n9XBG$!^w6erx^ zS(n33s$=Ft*HrMm@LtHFSjJy^(cn`hS1^qUr8Hbu)=qpi(O;xvd9^5Z&r-!P8v91- z+qJFH9gl~$`24(gl{~lPi@mK*{*#}Sb9wUu;f`VIV(;R>`3z0t zC)xPWzdhP!c*l(UVf__>!A>l**>40FOU9Z{Lr&Dw<{a1@i5f!K7{ZneB^Kk z?}y~W^?V$bwrX3Va|eJNE9cWzaIdJMTXtz!Hum=8px`VFU$uY^+#DohI-G`XBFeE) zLJgSZ9n{v7&%Bmqnrf2c2d|WiUKeN(9M7_fd?|S-Z&>QeDhFIN zXS3{v8OA|yJ?O{es+eE$WN+b)j`#s&wKH=o?HF{2w;OVKuJq?;2EIV(O(qc_ke9Kv z*K|_guIi#Rei?3oeAxgIaA!Ay)#AmPcaUU4Dab z?MzKS0QG|!suGV`WE~e)7;R^sDrd9WCe;?p$vYnLAr*`e3~kIFIIGI7xW!8p$peTf z?mNrRsWKgai|XIG?{*_iCs_r#ypRnM<&*hJ2yK}DpbB^jTL>atSX=|dD}wmZ?zhy= zpSu}zD`na|M0J-5fT2W?(LqfY@NyLpi!{EtZ7vZ%{kupt5={P=$uc?`UcWNh#%V&L z-DsT&*rVz#8~AQi!ko=2l*b^+hN1uer2LIvh)E_-UoL>B%U_)uj~!2)bYC5wq+!JI zDWbik*LV(kvbj(I1I z!D34$g(xi_o_sz2rERIDa>vug(Y+f2M^c|u# z%1XFR(xZnPjnfNR(j44Zu$6pv z*dq53^zi1bhU}A;v^^TR`+(K;91r|7Ap@|{D31PSlei1mZLYCw2SZPgA4rDB?D^6_ zvxHCmWc+D*i;)Q5{FGv(?~XrC-eAOe2l>oKmqkqE@unwx)VlG9EJlWIZ0K?rIw9!y622m!O~ZQTqtg0bisGam z%1buT$9H2Rktjy>F^);akE&K^In16{V7Q#km>pS>+NqR^V9zqBERF{&}N`n4BSV*6WzV526jXfpe2Z{<(itFsaowgyN0C#s=HRL+x7` zS!O+0i1l%Ju!ciAFIeH!ZGsbk4Mg70j`#b>oqMcA=B5-Pj6UzND?)5H7cVTqf4z`0 z4xt*rz(dbKMUQ-0VIw4{3Q+Q?{`t*M>)*er|9sbrdt<^_x{j=IlYkbmjQt6+HWFyu zBi&t2zR1laixNzQpNB(9Cq6ufIf#9$9QZ4E*5+>AVsAuLVap_TnH_WX5O9o$_Np9A%7Y4al)9 z1eL67r|>!L!kl@$83Qf7KbV#Asg z^4sJe6|{2_&;!cF{;i)Z01}b0c=AImEiz7&LDw9TonskXpEO z>U<4?%8BR|Qejka6t6*ud7l9aPZ!gt%*u3iQk9!ejDk1n6KBgA4Vr~bZ1kV~rj3-}IUx|pWr_uOB&y3HInswvZ-XxgjyKAkRqcn%k zcF67tz&i!qqYorP{?OIG^I!nHc@Om@KE8_?c=DB_VvpV&e-1ft{by-Ec<{bc&bmoM z)`=f;RutqI{ z;ZTSJS?r8~B(9rftChxzh#o~c?xjoRDYsOzmQ)6hC4pPiLbqmx@=dD{@a1X}M0Sz1 zl(a$M`65~QvY&^R^I_SItQPhQ6$k;+HY)dWdDd4e&kE>EE+Evd>iLa@0#XV^#UsFu zk1@u%gJBZ|YF0X5_$sVzqfjlN-u%|-x6+3*K8^>O?S4#-0Yb7GWnv5nivVxZ2h0r@V zAopWw(-So_1=vay?dvf$Z~Umdk!=_Ovc!voPPg4uI_l%ZU46-ee;{k(>e1G=`$Skj zi*%sGH+uUJu#GRH>Ufgike&6$8~%mxY$h{|npiF6HgTYY6j$v+nHrw;PBOd|A0Hqn zPCoMBUzR_NAaUX-5AW@uu&ym(LhEIg{i2Jeaf`4MTS=MqNlbMD5P~Ae$2Deul zn&4)b$etWhQhkaeyO9MG zR8bbB5=J@HT7hbAY;DFFQauN8P~v@0K6-(nXcSpj>yfsJEdIR!O2j`;KJ@sWO(lAf zp={JMomWSp&dOcXf8Ig~Wh}BgSkaC4AQ7cR6OTj}_gEk8Hy$~V3>c+SEP)p+^@O2L_W;K@Uav3`7&GDma__B$k|?c|2)0-7 zIs~DVL2n4~u-#?6bUq|EjHMeQgTX4db6KM;F`klq?l86nwax#*9Tv<>Sqr)KD~RGP z|Bm$sBhv9fQw1_gu~!GWJAUbJ$}8V@!!P~KE8j1#z4CN6WE~Bc695CoYhJTh{pP!o zr^m-rm~b-JKyte&K(DId8Y{j!M_7}-K&CaDI12)ADT#cv-Do_&pghP&1uXR+PQLOK zpHIg-A_O>$$Mw~Q!0&q552-Z%m>g4gL%i=NjKkX{Ae^gL zR{8+jm*!_YbXKrEuK1g#uXw-o@u_U>YdZZii*j`M1G@?Sdn!C;@X8Hlh2ezqCz+9Z z0jJkuk5C-2qfSOe&sFf`n)H@bfQDDRRZs4-5uCJiK6HB-+%NU0And_!21REN`~PmT{isy}$Vcqa^}Z<-s(PD834Ic38mw?H z(~Yu!E8H#GXR9mozE~Oqr^nKBIbh2j<7y^WK=ujpaKDjn|Ape({~`*te;L1*H(uW+ ze*lb0IMuph9E@aWAQMYmuz0slX}v%66wJ-0^w=t$v$Y-JkBAG54XNU zqI)c%l3!Z1HE?zJ7CP~6hsqB1@?818<-%fl*)M;&%!O_N{(3uPr#41F{KSA0cHrt> zdA2F>2y$aSge(eDS6kY{h@`>Cv!5m|esrm)p`tB=?IzqxU6qh7B7z$y-zl35xBxT% z_V_C=7eO_**bX|X(&Z*Mbi;7u!I3T*2-gV~jw*Ab8{lhlfa;TKkks*22vBvZ;w8A(#qVpZfuCYhUZ;igujyQSSAT zxVy|2C4<|&1W(W))o@@$40{a+ajw$czLry_Q{bDfmHY3TXJl18~6~d2G;P8c46=X@0I)GyyWW<0?r5ZszMmITJo+MOl+7-8Sv5H_4}Mz)U;86A7Yb=$!1r$L zVZ=q&E=kUmwD?T>TFEwDE=%kj5P@-kYxqTjiOa~#fRj*6 z3pfScLdI%)OI+mpArCK5J&TvDQ@=k+(iIBzEA>uGd>X9i-T!m zs*Epsnf6flu*agw-Ktvxsosli2#celpD9vFc=(3nhDrI|;EolFnpORYC#t4YdC%bS z2?L^H7~SHbBI!>`SZd3}3N?-uR zZnq)|Qw#p2yn^L8tLLb1 z*E|^Q5-0tE`?v?H0Sd(Zu!qLCRg@hrC@__=re)3Duhv{WO79LnN^zs|oTAtJko6Xv zL0T>_i&)etArCOTUnfDChie>CnKbbN1INx<5a&Qg0?J0n`FGt3OcOVDJ! zu4Jt@`qv^0G~c|)(BU}s>PRSO-c41j?C*;pwX;eSR&tHox_hizz(hlSy)YvmyiM2q zMhrqu0rX3c4msJkJ$E%ZdRXVcKkvhF?nMnam>SD|5=sUe59`}M^Xp3M7g{3&*z?HI zF$cUj?pHQE1dNCOf{{HB* z2mkQn-?@`G^H?IDL1}mwVYPQ-IX}wP9A9D_@Mc^QG> z*9n4LX%gK?gbbSJA3Ua%uzWc?Uy-Uhk=#!m=n9I~fS|vW_RQu65VgD#aa<%Mz#-%n z2%uO{&y^S4v#QB>Mg*%#o(I_l=>@9^)|~(@EHz6Z*2- zS_`InJ{9pMq^B+9%Tc1V`tu_;%HTtP9N#`bl!UBf)9VD?@>=B%cNN<(+AI6scXo5<11vJ^KeqGykQP`D`|ks1Zu{RE6Z;lyGGGftA`>C)K| zz-(k}I%i}^Jgm$`d?k8fqcEM)(K|B_)^?k=x41@~kM77GCOkXL1 z0IMEVf}QfTSTq4Eo1&^^MC4w5x%}Ldj+h$aMb=3O&srtK;pY81c8yE`KTXy-XpId6XfYC!p#!FRNfGyTq~wYnJ_6Spt0tHR@QFv*9ZrFE9DQ!~E625oqhTuvML+ zLpokR3oQZf#X&l)P%OfpQs%>R9xZ*yOuM>gV=Hu~%f-&6o?9`4N{B@BM~rr;7C!a* zC1I~Q6y5;0>R&j;W6O)V5JfgzyA|WGy1(ZjC%@I=g+tHAEF%`HwAP@K6P_x)IgFSB z!}Jhe$KIjrB=Kp^&zPBMKHw|x)PXx1hGD~=0p8c_H!#tUxtmo9*k!duUsk zQ^NqryX6NHu2FJJSeZC#Sc=OrG^$n(Q@y+K*oks7hf;yIGFMd%4>?2uqgsiv0jq0f zZ9SWKMNW>pjdOnKX{GNxONvhJHPTJ7jwA zudavJnHzF9g?kgGJpB#PanV^ekZT=*eQ$OMuLzV+X58nP*w;TY9 ztmmY2UL8eEH5^F`<V z)<%=*27lD$^`A=T5%)&6?JNg*ILlVZ4RY_Ll2&VX$D0*K9SN}e{O``Tzhno0FWLb` zY9hFaEZ&P`MyYcRP)c*PsO^=Dn!wme_i0Zsd@r0Cyf3X#S&=!f!#3VN3O85$i3b&$ z;^@)el&79_XZ2?CM10vRuau|!_bgU?JX3lfs3m-GSq+D^aHYoOQa@w1KF3i)>H@A4 zH~#?$tS@p#m&-6b63!3o{4~O<8s+gu`r`s@lk-XDS9MUgv9nhq`)#6z{9uZ}lJc%W zO3R+U9A%Jb+&$V>ooe5BNCBvz==S4aqaN<#7DE(p_n&j+s^3dON4U^18Fm{55!(p&5x>pKe*{$d<+aEq9Ij0AClz4-9p9~**LM0F8MVK!)9h+L2F zxaK;VgJC|Ptk8Q$Zx6olyAU3gP4_d82G+)mf5aKI2DemZ*pe92OzZ{)n|#{}lb*s9 zKcxyV;k9?Smo}(BiL}_iVvji(=Nj{c2@3(b9X?H`SJ$`$h%CU5ot*v7Zb|~ z8aANWGbM@+lYn>(qp-fz4i+b~7m>=pV(CVV77JUkfGj7;P6U6z+D?GZ81-U$ZY002 zTqRMZaT`ULoeuc5&&@)ev~}GhM@%a44eL-E{P=fn5Z+x_YWmS2#0%ETa?;%#U=V2N z8f9{ajTpW%MS;N}V_aku00KxQQa6F&Y7u3`4CnMyUO&~P=nvaOXPY;z0Emi3Nsd!# z+_6F8=6hAi^%owe+135(g2hGZv!^rqr}z(xm^0;R57bQAyXGAXH97o@{Yo*EW zzLZqt*W_*Sbv2+EKp9E;hDeO?VN|lHUvhBrF z2_IWh0AZr>ebb zGg+Eif@yy@FjdmRso}L5T>^O+P-_|^GDeFJl_ER4x__aM$jC9T5qWemzwD`UG8R-9 za0P%nVM78HS2@HUaxZ%Uia83&aTy)K(rCzZPnw!A+f0mKa~?iz|9x?`#Cf!b+6(wI zI*1%40AB`gdqRa)LCM}-wZU?INF@DGObhP>ia%wNNp)(Dm6NcvG^XT&*hgh~t~U7| z_z*r);Qyn+*MkqdU%Dlr1yzS?;S)Hp5nc)4Rxm&YaIBF{iiqSE?<}6jdYtvNi}oTg zKE19AR(pfsFqQMtUDtE5KsJNlfrb;>2}NBI7h=a7#CUv5t?QeY`g+^@$vVVNI${S^Vt z8aN^dQ(i9()-yB?{Q>UMK%hq)^isw{w95UG>M)S#^=jz8SjGcdkCa3MTuE5mC>y?w z&sJyeyCX((3kTVcp0BA2^z<)aRU;t{D<>qh&amw!lLPfZO1E!YBK(xophThDkspQa zD=UDEnb7?33~{c<8tT3{Pd*B4Resz#c9;L2LbbQRc)rAu^E@7Pe?6ZNOe%dG<5>b) z6b> zM?=FNE_UJTwnKPefpegI=XT7ga874&Zowxo;y_0Z^Y~%wP?9^8g^iw?&J?ki^_vrx zovCqzb$e01bPu*yeYy2~oBuo=hly`yia zyzL^)NAC_k!jk?bsp!Tqnmws7ONW`ol9P|y55=2Q!V6f#i1UyPdU18}yFfkDaHJ`7 zNnrJ1+KaCv!Vcj>qH>@~fT(b_!67bVT~@eo>_GxEZXb&=YE#PFaUsNJjWP>dQUCD3 z2x3H{kmpSE!g5l>QlUc?XMMSWY+E)(3mCh;-pU(bp70SWizjqTi?0${E- zWhaRIutzL-nXVvdt$%v_rW95{AlJ$Qej(0?8d4Y6kuR*8<{zYR-WvpF``qFpP}t^@ zJCH-^%E9{e;n!gjnk7d)FypWqlNj+&Q+p&Xg+F{$vQ9daS0RLs zc(5D(#9`W3PpG3*PQ_RC78ra>9MZuFSgkLIy1P`C*WCJ@a@((Gg`mLuU4kJKGw?$y z%Zrwv7Zp~CV9Q~b$op`R$7yBY()!N_^mo=3V>3G?dc^j=xX#ElV~)h8@{qcVF*@Pq zu$~q7aa$!2ZZ`@!M-^DLR`gNZE1+eP{Aj$io(6fK#5Rz)?C z17}n1J@$bI0`9hkj~h*R{QSby;w3+M9f~%jj{D3RAak3OCBGr)fg>sN1jozee0Yx# zbq)^{Ne4+r(ub?e%jiV;OJCMw>7m(&mT{3;v}kzn78%`sHQ_4-kYEDI_lZI)KY?Qo zjh|CNp|x~`=usyIy;AO+UpF{p@fB?S*gwPTI7qY#{WJon_--b; z3+@jB7z-jZawv^X9u&%qkvHdHhv)&qmdgfPVu!&D{SE*%jN47d%i!>ZQ5jwLg@V7c zi(WX-vktQV<7K`Hol77Dg&!&}sKQjD&?)?kDTpOK|El0~JH!1PV?u-b4JRq={_5kt zb_hLwFFxKs0vUG4AMrI|)`owo>fR8p`BAJaVrRZss}e?I|F}r&re=M92(XSo7G^iE zCx~?Pj)$Z-SJHhtIK&B*jK3dYFbsb1y@6^Jc_TLv_y7T&k;>2IG>_Tzt z!QqG(&{v($q&CtjnhXbQ=g@6?_`$HYyx7nl=nPeeBwpGMk@^$qJX{1pNQeih!9$`b zOTbMdsV@>Zt6Aj%#P5su#KR-u7kFmO6x7<#Ozb@uDDpdxl6-+`vu9vth*uyQJ?*0k z5s8R>m|=Vy7o+m*;shcnC3)g@EwWc;nus;kYw@nqOB@8((hk?j1Jk*y;U}ON@ z!0xrzNOM%TN-O8XoxYI60%x}rBmVcf*A4FCFUU7{b1?llK;0$zM-`*f@#3D3A+WCz zBf{C@(Zn~B)I>`|x2p%Pr`?M$#GhI9h>QIQ6lv9CW%&K%a+LX5OOh>=i(0J8Ki6}4 z&F_Vl@_giCkdrs^!TDkeE;V&5`xKOJT$)S5jQ}x^Q1c8OQZh<9OgOL?r%S}}&N2UM zUS|LtX8rf|#&1M>5n`-kHv&`)F+z{FG_c+E09{K6htN3%h~9UNmFIhByZ*$w+FptC zOKP6-_pDNF!klp+(-G%X1XvX^ks+ZrrGYs))6I_7tU6~IRqa=k_>zJhAliw*OVWPSlT zGkKlWqV2-^@q_TTvU{)@!rmVo-Y!?%l8%TD$<@8G8566eN_PENvNSBh9Pc$WO{iwx z{SxK19D#lsNV=hJRpM#12<3ZyBa>Gb%TkCX^uiE7H#xOJek+@Db<-~e!uePPyCmsx z%m=CP1cp%vDr&JNNONs{7k5srKIRs0id~*yL=F#}V^oC7ajtY-%BJ^ned>`C@KFqQ zL@%m_?}yr?T6`I1ugBDWGukAAdVH#OUa5r|m(HV+U6gj2a0Qi7TtQ(kTm`Qkq>q3m zN3>E56U;zdNx)gJs~gZ)A(p&~@iDOeLFd-WroL#OKni6%EJjG@;?PEhxtFe>kS^L6 zL==$eopS$@^mp{-gAY7s5HO`FDgfscGS)8~9KOUc7-$IMGdj!2ZS@-&#RGXwlT589 zc-@iX@Q0)Ckiu^be()xoEKvr&#v|PXvIMgb7^d=Gpy1d$2%)_=WVB1Rvq%U5==InA z6gK>3IjHY)lFIgFI%NTWkb-Sr*~2x3#iI();IqM(a#`WZ_PC6dYyNX0 z0gv)^0r1VIp=eaRduC3LLRb`=iG5^FvCvp{*6RsDL8GPp37q#qKge zbZ|!8(w^BJv3bS#pwgG?L=e4fNa+x&KR49IPPwqZwBc66iX57~7h>=AvKvYq#^#1Q zeiRXs=zOZ6 z`AG8$1DfFM)^h0h129<%h}g zq6g_lg>J`@g+wQU1{qUGY7Rzaz$fD(HNc5=cwA1MfMDnGT%hFALK=v_#V_FG!4CYR zudk^OtB-k*ev&HmlWaK;l}DPr*WHq@Eusm6YNN4#=PMLMmLGLF+)C2^*HG~k>kYsi z}SQ+$7+_WRYGV*ogj9!(v`#aspv+w<8n&lg?t9j@hn!6+#t$twI_{UkrZl zkzFGU>dlG!?Ete!QqA*y{1nRf{_N%Q>M6fh*)@M~!!^gBKvnUvzd*6tSiRmrMx+#G zs88N$ka59lfH&;69}J)(RZvud66~q+123-M1*b781#$mN$d>U0OJ&-q0Qj2p7aD`jOqr!!(D4}h6GLrNa1;T`vYr!F_j zH)hizE#DLptf_y=+ps*^#mi;vh`@C~}-xSNI~!Xa_aUMdT7@sztvG`52>^uGIv4Jh4hY|5IMM6lM$ah(aDLVx2H&X-2-L%b}z@jVb1&EIn#N~I44)t!~$ zhoXwWDNASs{mmuTq6Z%xA7EC6;QQ&fZhm6HA8NrIwJ0s2JVgJ5LD4=FSx!SycBv2bbaI zfYkxmIQ8~1KVyg}h1@8IcsdeN0*oecX*IsR5jiSI^>yL7JQqq-E)kM=^2sMD+v9;f zheFio+H3fW6yx*H&%RPly^>8HLM5OHy$m0Rueo%wtZd{piUq+@qW>Iy>QNK11ILhC zwA@GgZIXoWJtE#z70$apoLT}IYDj*Ga2HX%t_*-CU{7xNGK)5`SlK1N* zad}q6+9!IwS~4ZRgdtp+Pk1o~pTw7Ft;&(8J_|PxH3A423_F7YO5*IMm{8xzkCj5xTR@7b;vb)R=wVuDQZZ*$@aFtelTQvN)#|a(pat=O zbNIc^NwC4>ZbnrT5ipfrrzU-;o_X})5vYoqv9Et01xH3r5BLEH9ma`Y&OKGbgaTpO|95r zxn;p{ngLc#p9H^6O!Ycr)7>)RH8j}<*ii?SquLYr?a^CBoFGck$tH)CaEFuQ5NITrygJ;5W{enCqq6*5l&X{4gbD-6vXa0 zv)J-i+RTSZX;nHSe3~JZ6bDd_NA#D{S`ZfcjSyy47he-Mr5bDIk%{on{Q}H1?I(-b zo~LpGU5)?}k!u11JF)tu=4~kS(;NYl6J;R+qg^!kbtGXN!=hK zGx*iUH=|j@w}*F-dD zvK|hB8$7~sh$_%^&I6-EqHO)IDKq~h;QJvKVOui8|K=c#;|SYftGW{%{6&PZeZk1S z#!>7GaGa2>`B{vI4oLsT%7Q8M{rLC+c>qUuBajXm$^-sa^e_F-OCHx&U?ag0O?Zjm zy{r*3zl#jSS5EjQ>H|d01KNasSq4#!?A2Gw(>@C7hUVrwBNl| zP>%jL;CloRdo505@iKYAqA-(5LZO~Oi@R*WGCdWc`e(|i z(-BKo+&Sqt(1!4hAB2n}y37gW{>mGHE}d)P9aYDE-><5Ant>)aq5XBhOuw97AZ z5~g8Z(D)p?P`RVn?Rd&Oh!rpph&tpTzHmI=p&~*_fUC*t1;Ud#-}w~(WF%J_OHHwe zb$gEzFGp{?L9D_3YEFc9!TIv-;B%>S?;m~T7Z43U>%Y%}I`GTLqF`A3Ngjmpkj?re z-Fn+MGG$91QC1K`no7Bn1jI4z-|?!}K${;;jSRSF-Ri|ks3_6nXOEYKkn59-jAiI^ zZ&P?uU{95Q$V;cw?=hqhAYCc*ROTw4s~>6CsN+9K0l$0n$D_C0v0s#M{o%z} zUbRe;l&qCMEg##iVT2H?twnsZsVB;*6K)!o)k8?jGb@U$R9% zH~cHo>K^%=>u3T>rDYFd$C|Dr`J-Hg5Rpf~< z8#sylO&X`}+9XndGz^b1Ai|_^R~A3|+H$Be0RC6-qSHB_Y4zz!XO~IrGYz-cDmBFM z2x!+^@S-}fC>2YIffNu2PSA}oETUT#CZG7Y5|UlaqynUM%9jY%2*tN zEPfOUcM}sHV)6IA{*cH*oDfTE3r5ZhCznbD-2kQ)OAOVQ`~$p`?t4|!f3M@b9KGkY zAs0R_nZXxc8-jIgM-oCs+dyNN4dEOdg0jO2As0v^rf1+BaW^1`P;@R{<}?kjVY2n( zM~*2d4*of7JhL;ENwpI`nLbVjcZOK>Y(eq8Fg4Mg@R!y1Lox>C9|w1BGbs|UDjijA zse}+I!z5+KS#a12ZNYB^IU`Ix1LCjOjV_S)i5;=K?iG0ARl;)a??VZk69i_uD(L9` z&X?(~7l2rM6ms#vqZQz)@vp26iNjE2MeP#l$xCSRTNb!xZL9f@8C@S7KKf|+bu{d4 z47;OGytXS2xpL0MQMJ5M0*=b*8YB^+mn?~2Bk@dBnuJJF+sN%F|^nJ%s)Jh62%-1vHU3o{?t=mXd^~IH+4j4LSBj|{mjYo7oNANag?I2KMf9_ zq8MuqFU3%YN26uJ&~;B*3v_$?l%fleVI@LkMMzb5=P?tqR;s8T{KFOoZQs#kSt*>x zXxT$MBt;2mSUK-geEs;_0l7?+vLD=aXED(TxqjuF;2pvG?<}5+n`EAWv(|s^yPKqN zH*AdOm?IAjYb2JMvIgIElLv=Sms2U`*>QWTo5=1si_f88T?c2p9OWLSq$dqWBwITT z#wYZ)3lyWpGm!fKJ75lRhry!&KKQ@DMR*Q&B;yYW)Hi^vJi77A_-lGWHVRf;XJNY_gfW-N73H_dO4<6??$|JrR zwT`-Hg7La-QaPsFWd!wdQaQ2P&@ubrDVK;O^yP+ANMHyW_Yj?avpnl%58_g02FR4G zvkRi>F<%QvFyMEx)jBIHN#;fyz6(LvZ*WdWvT#f+(hf)9PW8Npdy3V(HZkzimGWD zIpN8a3;y)!reZn8cVC?Mx&9xQNpE~)7$KfnPjnvO^z^11I9^tuOdC~pFl`IhJ*ebiNS-7IR3wJA6 z8iKZQ``I$H=-HkomoX5vy@c^0y*Ogs08N<8Ik)z8tj68g7o`2{N3=`XjPn?g-d6PH9#V&FX!Fy8Dl?J9G z9L3gM++3#itheDspaNyG27ui;_A#PAQz%$E?T9S-r&<=)sydk{LKra)A?T^ zXZTltE)QSf9^l48=Hl1#{{LBd)uX^hY4XIYXP=@?9$v9_gg0zub?E>m0+xn*wb{R| zmEvdNtqy%v0&W#JiuaUgcG-lz-n4HYI=*y2w34 zJ5lT*Cl&s$@FoiUJ3ZG~^iuC`k)ytP5ElD1%15I3;5{$+30fIXBJ@XYzfwB36{-(S z8RB8;2fFW1;l}jvPLzl(3I`KMseJFJPCnyD%6T;O*5}G1meJ7SgY_O48HRhH1d1L9 zikHzan7=v%|N2W|ZM3!&8FAGY7I>^;F9JllQW^YYWVHkU|E^u%{22(3@g z+i5ig5Cu)Z#Esbjoy9T>Qomps%q=Lg;put3T#xl*tcz!W2}VoJ#|`_}<`Uy}6VOAj z0^f8+UVz4unG+}gIzmr0iYO(?!0qq23D2k3Wsw~ejycYP{WyFznp25R;e@H2P9C=D zZt2eZ!w!;kBXwtTB>VFC$$Ooxco7Gojsq{JEj(^A-F$_ZCU4bmJU(zYR?N@7s}bQQ zxHG6eVAY@$KL4HimHtghIIk`FCC8PH(+T&_Sk{-Z(eF8jWh%h7vaJ8;*9+*wZ1$Uy zo9K1gUEnGdw3_-jq)}`zXYjRq1tA3mw{T~B2TLOvop0OgBPa6?MTy{Eax=BI z{WoGKNE~&7uN++SPp_UXZ{#B%dDtuP}jhddG!9hG*~y5LhEN6QJPx_8AwdBK+IFe>>$19Qc3~zG!rd?(^df8m+;sc@^GE{$_xEQZ zE&u5G9Z}|n%u+^D7<0HVaQUGN=6C@6hi;5;U=m~WH}F#T!>&NzRz4kmljDXj#x?M< z&*D+{kKUFy?%kvJ2cLMiv5+E0KuPLYqQp`eVy|T|2+-sBL5w2V9@mCIa<8J5Rf_EF z#97S*0#QnZt)|0ZwBUby-xEKHhpzExEw7XLeh>r~1UkPtdMm4FU2pi8Zk7Xg;0;2u zZi8ZgWNzeaqcJV-H#K=U5tA!q0<}C&9r9jLU?$+4X%@q!(p&6?wKQIC#c_&*mjtCy zcBY3e26v1+tbPaud=$%pnU+pT*nXU&n&;Ka&G{0Lqc`oKZx#^d2*xA+sL*wl1*dwC^HF=T_e;bb!-2U^;ZTfM+<4LO)XYYiVw zO|AUG*UCQ^qgk`rZ>+B*rvxs~e&f5xw@JV;bEG?43Yh7eXbX!|JJQ0hsUzc&|5o_E##{=6R9-m-Y(LmKaA#CkEHBP`aDeTm|7B!(4?V5fTbw#>T4g~i zs}xj>C>rLwdLx-1D@9{fEH z1dlk-oX|#aK3xNiyB|&n@@3$;azE_5r7ILt%USJj3dr3Yqwf)K0-2!Xlz`JPHCr%y z0>4j5CjB`C2G@6WdwJv zNYzeJEvi)=~kR9 zZ~ns4?74K)RG$bC#pUpg4}nQM*)1@cXWLac$6yxxTVv~kzgS2yBW${r)yj>@(>OPK(dyyRY)Sv zsb=}2ePVhyKByNe6PFjKAl8EEWZOWJKxeob+zqT6sI&ih@Igqo%8fF#bU$|Ih2AZb z>A0$Ad^#g6O=cJ}4B?C}bBfQR^mG@!zp(uUVsZPVzN?3xU=SipUS@N%XUm)yG!_@U zU)s1C+ZiMI5Y59=@KTx2<}yFAeJ)Gy@f)`Z#sJC;h!<-I8=2?Iv*P=y(!{dPK~uWG zb1*x*pBLyS*XNOevJZ^+JNJ@9>|6XXey0y||19$jW7cnDFTewmI|H4#e;p|E3V5&A1w~Gw+!#IFsttU2WYUP+4>BNb0;)FY1)r(qb(YGT^D*)nm zUhe)vwU@=G)F1)z0m07kp7)N#F1Q2QLUhohrAhdYgF89fz&m2U6X`nG3l{g&FhHJu z+*h8|r^eD=lOuUVFZ!%Nai;P z+1v!{NpwLnML#U^#~v%MM);NR?cDQIabTjGVxJE^W4ST<8yt;nG-X1h>Hf~qmqAgU z*AmLOFXtb|`O#gskWjMF7!)C4)3{T(n*zy+SWzK(3jt0K%!~EV)vKdIBn^4QbRm^o z2;kKWHE>r0OjW^yqhvBa65&s!mG$cu9hwa$0|qQ%U%W87c_xdwINOh&1B>2)7#I9R zKxEV+NV!%WO$oSElKa^RIWDpqLkX8(1zwh9E*6S-JzN75*jtQrh~073PpZ{PcCLi+ zyo2H>Sg~6^nM_-=<%-96m$I{75mm-mtjSKP0KDZ!%}~gJz&ErciQ;%T*ldwxR7Ii7o#6GpJkF_}g=$vynitEJ+e-5`Zz zJj7>`akiet+o2fqK-ig^GY4-A48ph+y;xX&9M`*P7Y&I^KNYb4_wLjI6Ti`DFrs*e zU1uWFiTRc5UGPuBPk z?aw6=IpiOR)Gasa!Eb;3?J`)WAAjr7rb46F;B!SejFnN|Z$M|DvEF}T^$gtD;INWe z`N{ANvtVwJNaA}1ZYtrE1P<}`(S3QOv8Fv<^JhzxD_-0_5W<^{==PvDkK{-**wYb`X|`nx#BdFb?%R>AYAu>A;&$9EXeq!lUy-dg28+wkE3ZV*z~(jj@~Bhc>k0McR~lEd{>11eGU+n&9# z`95^v|5iHu za6iL5IFwq<|0)5uoYa5xs=9*NtoU7Q`?`nx3GKXW1}0R<6NFofc9C(s&@6YZp>7Ssg#IruB-Y8YJo%Uh!J4!w?(YDbQHDbS(GO7+X^7=m@*W5e;E4+i03KMU@r zLz0=roeC+%#={Du>EY(VeSF(H8gLwRc#%RS9Ry|d$c+Xtw^U6!?7V;YjFK>@`$7q z!_6-~b@~_Om(O}CtCC9fApeRx6MfghnymXcwxC)rXn!6lq6^)Hl$3k>aKr6zP`RCi zl|BWd@8^QLArxvE_C$HgKfp=CJi0k31-rW(m;QB0pTh{)xK-A|ufY?yc7z}gQ4IR7 zhUJbvO@5Ja48^_h8p#*XM_Xx>9%_+u0MPL4OJ!q~$H2od35eG%0;7zp$GwzF#Tk}U zK8x~#dhO|vm4o655wY*5G8KJte?>&IK`6zaHT;4v`}tIT0L`=$T^!XcBAM&xUcQuy zWVpQ}JNXoV*z8Ssw{7ie1#v9*H{||%K;52(J`mLo_Q1+|IHW%eoZIu|+~Ul%ClEBL z7s3tBmoVV4d^Z~>82FIrifq=a{qP501N6D39TWQt2SPuEkAMm|X#}1_F{gfu2av|U zRU!%sgF>75!RCelsiy7R@fgxyPTzYTVi-Gs@uwFacQDp-m6_ufkwT8a)+I1nT6)P!k5IAeBzbS#bbe!J2Cp@vxfgJ$&O)yGP#e z)s4)ZA>@EQItu1B;%buozsM*<0bWHHB1jgy3$HJ6k0hkn?Jq5{t2bYF3n%2r!q1a# zr)bLz76=YcQKh?;*eo@?>%M~334hTR zClx@Nd>qt(oEdRYC>t7-p*uK^W4Q@Fk-7Eb-!^;sUWuJOdr)vy`MI22&{p)5X&vK# zJ>2ucVk-XTwZSP4t+A1% z^~k?DZSP@ppm#zSfscXWAy6>kAf|#(IA{bNY2@Zr+>K$iBimq_{U%%gQrVr}zI+~= z!Mk{vgCgV1(}^a-IhZIp#cJCK)|sD|*L=owU=mamvC@?L0a#_nEE?R+UzYX=n!i*Q z&t;M`$DYc-W+#=Ck#n_K);t{50hI&+I*#Ku)je5_bQ^%KLjpbO-TJ|6!U4pCXF8M_ z@=v?e!%3~^%~#6lXP$B&@o(QzK#el|P5j&XqehV4} z!3FsTk|rDyOrDFeylnxxuUw-%WQA%<{(`5n4wg5YO~!gup*c?o&i8&<*uLRC z%+o7rUE?aK%+sfvru8}X=EHOF@cR6>em=e->`TQ1s9cJTQ9&|KIpKp$0+Vs;A0GU_ zq+t64QY}M;sM|{B$`Lz>SIhEf9gwyMi`5U~H7uI$Dnat^VC3~s4OP>0Y4jBP_XOK; zxE^!3!$RNb2k=z>5fxa&t#h#1M2w`IaI`iDH~f7pDKJ)9QE#HG`5<|tJmqf6t_Z)W zgf9i*!hNq2FF5#E>TW+CF}7235sow?a_-~!Qi@ZH4i=lsg=Di}xsx0jrKSY$XTilH z2UJpXA-0=F;8ZL)YMVxk1GKmvumS>R!Y1{4o)OSA;nsbjJnye@hsM#Tu8uVVot))< z#GI9**zuHBb}i|_9)qgkHftM*Co<8$qC?;mZR^?YtzV{42;b+l0t!4>3HKftfTgfe z38ga$>upWFJ)sD1p~`PsZSD<;ud}$Hr&Co*!~xSf-{_PSMb8mBaLt?uo=>Vp7$?8 zI*)mdF+F1Q={FATYsgJxtri+RXE$;u*^9!KOvKbQ4lJT_Mh6$1zW= zyvb%8Cw%CkrsQn}{Y=GT7^{j%W0FYw>W8;?SCz6uD8OSq8@eO5l60CJI^hi6CxVeR zRVaUjPI%m(1h%=}IGMpnL2`m9aytni$@9Y|^=Nh!)o>rH&AHKNX{4uCs6tdSdkzb= z43qBsOvT!HDCWPPdHWW6vX>Hy+^I7WWGeYsSUcUDl0xq)?tj^%-3M`zvO=Ecf38~n~!aqxa~ z1UIx)y5D&U(2A7zh^x}w+d;_5Cby%ZbNRAPaUz#xY75UmbH+%S>qp*9T{7z&iJUa~ z_=?rqUA^MRSLsu>L$i~6P5yDwxp5O$|k*GP4mwJ@E`U(|CfILlP>#g_yZ`(?z@9eo-9xKL}%&$QOGD2 zW0d2o$(F=bI~U1S=SrZ!eqDkyl04mT7`#y$VpCSlro|{H7=8hrNFfANS}_zIdBLtL zt;zdGFz74^f>WZYTwG0ArEYq)EhE8ND`BrDN}%2P0x$)Y_|%(Z0k=Iay6OHc@V0Iv z78sEBgMF$D#3+?lAGgo~zqNhCqlu$gh+el=t0Gg76;Qsu8WL1IqcgsetUPdI*{%iP zNNJN-mIs0WekWeN#hyPLY+XwhyLnM&n8vDxzE{X)5tOe=TK5S{4uCE~q*V&p_b_HC zZ`+S17THz>2FV5`y8B9cClvtWq>@G`fTMqY;Q&lmI%UYU+$|l*2Vz|7u}Y3HWbPhU zk&fopSGmzP$F9$WcL#qAwt`)9bN-8~U(j7Myr8Y9N72X)}_2l!S7`LZ*aL92z=I&LppbCaf zkqt(Z1+r&HCUqIB|IZm*el-~03?sZH{MF}PI5h#~P6?kt@8Gg(N>vQ06-w+x&o6mF z-5K9YeOfGnmGGBR84P4=prqu=2PD;aujj$~_(?dSOM+5Jb6WQ-aD3E4$wii;-^ErH zIwq4c8GfpV?ykD;SopX)YO*Ige&d$U=Kbw+XewiHkdMm>TmiwbAE(Qb;O)4s{AyxZ zcS)?1y*mhK;@P=5IG5WK`UBx$gOag3B71Sq7Ev!lp~Mp04oOAWuJnBw;jOai7sCi8 zwrxBzs5jmaC^TpSpL;pXh$J<#YN%quctiqS)g^0W3LYA7XY}a5SA;GY6~n&80H$Go zH9Aqi#l1cF>ZkuMKmBU>jThF+CKwF{MkW3gVg{V08M@z! z<|y?!KZDKdUrzwO@;OBe5u`Hf>m|aJDy{f)6{q9Nx*$5)WqGa`G!4-?Xqor9_p--A! zd{sNc5VpS>GS^g=e(Uk_yI~J7&=B_V;oB^zvH)G6NYQ*Ufk;@GqpEWHu6}`Q!KcTI z$qoNK1FNy{U1s}&je;2El@;C0lSq{{ZKgkn1Ctd_@ z@+BNN2uua;KG=Ct&WIoJm^i7leJqRnAcW)%2kia9hLRP)PeE& zLmXmvJrc5^mRY>s$7F;CAYrF0#r`J6zA0ZL%P*?CxpC@nqAP_cU$Y>@bt1hSSMPqH zv&HxK%u{)V5{=~*xZWJwVE0*~`v(GmZ-lP9bCbh8Z#+va7G|8G&+m448#D{Z5HEN( z#Wv&&Exs3q@@SaDueI9G6!GyHdHOhqrc^NDQwGzpCyNdyc1x*Op0GQa}*EqTOPj_|*{liSJ)Z+;_Yr*R@p-t!cOWl?V} z$HqV{RT=vRkFmRYopcrij_>K=5ddqGjp#3}CdDvX8?x;JP)-XgvHhs*dR>BEQ-Tn1 z@HB=C3nSvSeMP-Ja1hv`>_&VFSpvIRz#!HzhT2mAkUI_pVqL6vk6Et^O~HH?^F>1( z)@L~@LM*wpy|fP?^YvXb-Py&K98d|Ym;1<_$gPY*u=YYhr)GqJeyH+ zLQySDlQa`Bkk;^#kA`V4)_60sgY6S&~Mh!Gap;KI1uM%w$ec<1Ri%G3S< zC-2m}SL0d9%1RsSnI?z{5I5K+XT-;A;aX`lD=t=rjjbs)-&Wpp@8n5BwoC%4uDu(_ zbUyIMda0l+K45-Po^%6nj$LDAdbpHn=c^XWioYgy7W6Z)Kt!kkaEi1A_iu=XlCI}g zRWf=|5hMSIhn{UJ-}+uCiAn>9{w2v>W^hO-`(k(BsyS>Ps5^p&(9N1$;?@xe2sf1E0H^!Qm8*V=W$2IxOTT@EmR^;rh$(g*p zYt19msA8l&zoW2#uSAp#eV$O-euMP<;V3wuAb>!~2Y{FXs&d9Mji2vxfwY^!7ari# z(Es}H%b1XEt$LFRw=}co{1Z8vl5QJu^yX3A}i2q1%}#Jx>Zo%G?@N&@pLaKA9-YJS{Qbg_xiWWflRL zD;J`w{rRkJ!6rirw?HQ{v4K73V?buI-rNz0i=|s7SZ1tOSJ@CQFoAmb#aIX6#W4LQH#e2@+L$MBKt|19*zu zbyF@56n)_kviVM#o`W4|$dPhwt^nRtn-)xj7Z)ttCj*jk1ApAj^({YjlJn5(?kY4^{bf%m zb#8poJn091n2O)Uk@)~!EbK^hARvvNEI|r5KEDc;YH_;&Yyqq6*I{>UUpvU_<;!gN z5{CGJ@4fCVxn;g_{p`hksJh`M@|X(q`j_%bwE*KrMmTaKu0JC>RWn2K;V~PuDlNc z(%>C0OpFI)K|iMT!T*VBr{!=ky~7}-ch@B=%c>Q6w}$hb5;Sgg5-eg)={z+Vy_jn%XQ`;U0( z66Q_Mq2aH!s7i#eXVfQJKs#4_7~y;Q-QY7Foze*IkslqHgBOz$3_>|vdEQcDEC1Rb zh>9eZ3*~WhDHj=K###&?9;8W61yYLem!%J?$ZxQdXvQalcfAZat7Hd-vO`^aL3S{g zJfH`g2dEji7(6_9Em(5UyJ3xbZ#)LilK(zae)TKMi|0#hMO=d$E6XszXVVeuZ6R$O zo45TCwoVvD6$j@A%Wf44!M&2wuY%j)auRpM1q@gdB2kIViMbi~Nmf4=Y9=pmBEc4; zfyhfH0J_1X@ITtuJH)Ppof^I=H~IL;qf|C{UBLJV7GH@%8XQHBoxsp{=Wq_5#yj{6 z3xJBglj6Q-8;-TSr|Nrbxlr|ecjv}lxk{AIpKFNXUTIukU`r4dV1T_s(9c-X?lbTQ z@Jrb0UUxe6!p#O5+R5+*sAU`gzO#PRBC%|%#|>cxLU}pg@I>|kk446L__S06b8jck z=82IKl`Br%pc@3JQfm<3DJjlwK(+W$6vFyCkK@_{LFvPTzA)3 zl4q;J->+{&Q{ibENAq3kH?c=d|0EGm&Cblk;W#D-@(-SL2}D#whXJxb!>Q0b!ZJuPmdmV|M@bmK)q#>WYAx;%ileeki{Fo#dq zGfoRghy}_VbYH@=`@Mt1zbsFC=oOHk>R!y@tRR$4Hjy7DvxWdUYtO?YQx2R4|M}+V z8;>t`G(GU(T+Ohp&h@#_?eG;Kl>PQ0w5Y*OoH|t=^%Li7y$lZ!nh|;zi2?40biQx0 z-GZxNd!%2BtJfQs*A)JixEkh$5f!DMCN;4k55NE?Ax*ycfMfNPpy9S%K}Ag@z$B_@ z8ZM(U7TyokTBuGcPZSDT2s_YwEy$MwO~GeZ3)4LAfl_%5jKln>XmX?Eb096#VMQd} zMDq0c@Xw;@A^N*Ml$`(Z41{51ntUrlE&RLGiUXrbH7`d1LPpM^W9G zuf!a3^qsGUqOvpZ58W5a`6&;^GgQgUSDbi)Gu`7hMof-FHMBq_Y!Q#^$1KT%HAGQ; zn%P2P##xQ^MX+h{-1#xTdRfdL{(wTUwB#jSGXYVK>rA;pzzF#&cAN~ba(g{QdS4?F zGK}n_>ACUebGf2;BgF!1J&Zl}ukA&luuVeWkynC>cAva>j|&X45xPgvBf9oBJ(c)Z z^DQiU(G7UB%GOY9r9}#oZ#v~J;Uan;hpzAEPP8=+XMaJIfSG3>`G)J9f*3=wa}KAZ z4eQkN&>;rCQ^fcl0IaaVmgPlSc5k}nLg0zcCcqI)z(zO^s^f;{#QK%*W~mAJ5s!dX z$g?-5+y_5@0@sQgjH*b|U`*OL(YUtMCkT;^KA}QW!fLtx_}jW%arbD|zOR1|-qjCB zcl^2uhB-nftQ+z&Wp%y(pj2R#{0RYm%m=7&@78uWS8$yugTb$paUAx` z2}(zMQ&cE8hPyxGTSP2PF8VXHKrEJazHm(p9py1!_mAFERnL1z9}m9snwm+~w}-2! z5j1c)rJrDBscf;o{3yX~YMA&TCp=nNQQEFoB`uJrzD$MS<9sT&qqmf{Yuux6JY9bI zX6p7ka6aecK8GR{xcpl*25Ww-olMoit-_~H;P30-_v^pEaA!}JpL@b)N^3j=DBBG6 zNB5xdxRLdMc00sTcIia@?(Lt`rDSOR`yg2WQ0kZbZceGa2&T`03}tD0xoynICMJjs0-# zVx>`HGH`$+)=_I!v&T>pmKW2)j!GJMWE6Ddq4{w^7LLWoPzVZ)6_Aaan;T^-LSVJf z_Ygbcdk7$C?Ho_#)NCxy+1D@X(0clpNd<+iWy``scaAJ_H+oWBdTN$iN#25ZuKdRC zbZ4wkCa0~EBeH9i#M7qnZHUhO^}RKZE;duM-Pg)~xXBbs4OF=1Zm8k=Ml`*LR$Y^= zqRMf3pbbsW#=II<4W%#c91|cI@qU0_@WD{#g_s~Zofisd`MEOXr2wuR2N;HNKsv`W zMd!IPcCf#nYizOHXrQzTB<4d2y~S4L@N69*gTv>^Z@3XkD1NAe2=Xkil@(i?fYG6y zV%A1Aa74-D0hc4_p(x-mmZD7%A|HqlcG_lu`SA3Pd#I;5mAs=Ek>zW)rv#qi*)=tw z3zBpr#P6w}l~Z0B$ZQm0G_iyD`IjY;HA2jU_nF6shX{Z^JZMDDQyef!C{dmQOb{gE zb=;Dk$MZZ4J9#w*>CCg`=l+pc5FS$KtvoU~IoQl0ULjH*e3?=@$jSzX?!4AW9P&tl z{ne~&DPQ^dPEP9>kR1;ohtZjQDJo++@0UTB`km~kua7?0zZ>?_Up`)b`M6D8If`JG zx?2t|uUjy`RHocM94wom`f1CIE0w~(?f`@hfaanUm|+r}f1lUwmRxmguVZc=i|>p> zfwYL5cG^9=bt^q;#4I<-)`GucIdX!S`^rG&-p>Px#b@QE(b?PE2DowDYlR**B!!Q4 zFI@ROzY-&(aoF@w0n+7$H)ALK7}!;n>rNRk(tDA*+G zymBUNExQc>;1~UOtC`~fo%L`k`>K&0C(5H?q{(jDj%A3fA@4o>tG&fC?PY|RCwIqh zf^}!yO$0Ec7)~RwFmsiWjK1Lgp)7FHZ}`$3q3|+#9=;;a2YwIymtk|vqvb`rV8njDA9R!3cDcLl^9 z_;bxkqqf`|{6YFg)kN=t$Cn0!-&9}y#v_QsVI#pnOlx#cE1Wt3zHmo|Qv=p}uFO?6 zL5N=upAHf{s_81bg2=_)@$Xwu+?QbClpFB99FN}<&HIS|-S-%P_*{>0%!B(-X696| z{}TA3Y@Kx==@Ehfra8=R&l^aaN*Cea@Mq;`KXZ4cNE+$({OK$rJQ-LgkPLW#l8khc zMM0IKCYe(ivP#PJ_*W|2V+V%#XRud737G;XuK7mo@J(YX(om!Wc~Kx@*jUwGw9u22 zMn%J=u7qu_Ig|^$niCdulV!;}VGf5DA*w&*62pEY5hOpUc8LoN@_DB({#<^PrI)%x`})!YB6!-wnVV0IM6khlNX~ zsb8>PkDKrnvLi@48rJ6f&b#ZJh;D>+a_iY{;Ze*$0uQdZP13fGK1t#J;KQS@po=B! z_UYhl4?U@pVf-S_l14(@xd(Al>WEDcuLaxFp>m{NVi`366LvUTZo`6i&4g%%Ec|VNR=U$z`AlmC+ zjgw^)nXwmOZ*iRuBjTZO$cSzLc{pv#ZJ#27-D<=wo#dSf!w5=?GST>E2uWP0eO}~a ztl5kvUPd*&+?+<6Nb71{G>hfL8(8|yjD2wQq00BNA+j{kgZn^T`0_s0Lhl_L%dhJo z-XD(TCmPtyn*WRPs@Lv92|i$2uyxJNRaA97P*JDIXwF|Inh-h3yDz`$@gT~*6|S>k zG!uiIX%4Oy4$u!sX7qwvCgs6vo(aZ4`hzE!1$tkr{sR%m`UTVY=E8vZW%;=$Mw}6X zfcaTc=9X_XXBU|gv)$|gneY?-gq3%Gv1@$ZPrycQ>P)9x%E{Oi{V!GvvA>oC8Y@Q029`v^k?D+R%W&X(5uqeH zp{KN$k$+MO#qaH|3ZHur5gL)`L>}eHb+{ZdX9$m`une)YFncPTc4_-&OcGd|qY9gP zfADQ;-PAS2k-)r%_P@+OWjWtQCKm3y^xk!Vt;9$-RNj~nICi99GP|MtAo#9lpU{hz z^V5lj{#jvxsU|uqoC4_S6quZ)fHVdLV@NOz^?8ERrP3LH;5 zr9K>d@7ZQcl7t^e9`re&io@~DIk0z)jCe0>sq8`Jh6@=Vh1-J)b=42u9YR$7k#~Fr zQLI~wo{W;a)hv5LOs!+4L24}; zvYVidC%BgTH8^}EEnDd>xboVwq1MS1L@T4nSjZ_8#B_A@UTn@osZGKxjuL6y!p@|S zuD)z^Qhv{WYq|4=W}P52YO!LOxu@84{c9|Mm`n%RXEU zgm2p4McLVSxJ)>FQ}}G-0LDOAW!;lI>1B3-gVOE5RBypeY(gfkks_?ma2Ze(H<;i- zc7iMy^N~lF4W@`uqYVtxCt2W0Tt|uzv70H6zn&6kRj;#`-#Ag;IPtiz;jo~liMHJP zM_+k7b+{a>to`gGiZjJiJ4QS!=b<(1$A#*C`jWeuG4(khOX(B+|ITi?YltuUQDa5x7)m9_T4(dUET z`(3OrT-9qh&;1Q$mPU1RJg=0cjg#Sj&%{mKHLEu~--iX2i9-2u`^p_c$&y>Rt1U2QLarYHM&;<%?l+syS+6_7OqM0SS!wEh(z`a_d>m`PjH&OQ1Frvo+wN{tuFRi^FdcQ_&2Hwwz}dqfq}@5Lr=dzqRCdM1uv8f9u1C9-tLLS(A$nT2;lzu ze$3e1QU!hE%kb4iW-?l>c=T3qGhjnMl=S2chFGgCe_^nT&9Z@JpW`q`HeHUlFb&tk z5ze6^vtueK0I2vpMRIAGUR?|8z~9xJDUYD?KBwT`SnPW8&L&IeJRN}^ENAZ&%FmPD z%`}-%L~=h=&AqqiVHh0#s=Vg$#0nyUnGZtH-@KZWgs@QR{I0z5UZW#q$SaV^u z!|Mr^vpJfB8EpO4-Ta!g=&yxxt^e^-ezyGjad-9kOahs!(Mn%LUCdAjmA9GofI%kz zDhB{3-C8mcuxfEv-q`X}o;{T%3-DklCK7;1#eFf1uemARtWvm8l8ynsKgEdE$dHka(Y#6y49XIC4KSe~mi^+(%4%7T{?io?#p{Uxc<@#keCqqz zg(z7$_!OD^hoetC*b@LXy{ONk4o#3UnFaq;v!=$)(%@Bey3`nvn|J0)` z;%Rxa0e52)DFyw@V<|HeT`_S)j0&4%OApF~fRRnim^XsLuQD>d~PYGz2>hE|)iuKmg4 zO7|rP1df6d!%BIOXP@zs;9}YP0fYec45&I(S+W}<&5BD|@V*fntO&Q-e(vC!a!(|E zyVIUZiqdB}4Ne^y-#C>#@H;5bDJQRSa16r}XbgVB@(!Wt7*m~q=|I@oq`=9wNYcFm znsq-KivMDL8;q(KVOw&_&l`gT1x%}V{8S01@$==9TcA3T5xFLpZ|z1(F`Ya&GH@g_ zy?V`>Y0>$<)X%^eCQA6b1)HQyNTN-ELU6?U?h$mDGd)IN{Jh8_7CeA${b%91Z@^9J z0lms_vLe7LRMd&P1DjM**J^!NOUDnyDZXtj6F;sh`wkse?z8r?Ttxw-*n|S2pI)?c zT#(Y0@-om(f8m?Y;<_eunh8Y8GWM$}TN>b5oefPw$AVl_?ttoX#<~@WU3a1D-+)`C zXs&@$`1?KEoeg64dvPl%D4)UDV2h1d$_KEGsZIfwQH`&7UCftA{q3cLkFZ=V+m|c< zB3s&0`=t+8D{~iTO-E~BQau|gjAB3PD=1F^0T23M#;9WgNdc$rN}&laHNW!O;!&X9;Ds(TTCG z#gT%clvAo&CGvu24=F^vOy*(vtv(Dd4UU)qXkILrd>!Mzd<#fn&`vH? z1Ja8DAK5dJS%rehk>}nG4u4%P5Z9h0fIMq9;SHTEbg# z@AX^}O3`GBV-0kMRv}tT4*O(>)Oza7d2Kye{>G1j6n@QLpD%&i0$v#?y9WT7-*f*^ zw01(eYbTGnjY7!uuZ4~dTp?LMhc=hIrf$^etx~h>GBh=MT13)N%!1$o$)HE5%3y$a#q$GJ7Vuj30#J9E#@28%Q@+o z;f|GSo}Eio7r%P7(ggUpk>x1<8B(!Uxz9c6YOq%t3von&=7(HB`|dBrQmkY^9Nf`$ z9vO&qR{!7|FA$tPnV!5TWd`w-2CqtEW*w29imbPQ8f?7XrI_FR)5fFuy6Z2?(PUl;@(LiSdR=obj#E3X*D$~C84hceuNatSkO^aQ4*UKG?;T;qeC&^i2!v%ask{pp*5Hrc z5FGu|Lp)|kGbvCO+bWuYN|cx!GoS5d`t>b1TbH51Th0tELE&WCqXdhFPrqiykB30;r~dT-+%nHKJkOlhd0ATRGL4whBnp5i%QLS@iz|2fs(+`IcQRGq<&>RvNKLeg>N{+>oq0ARn8dboUR+nwN*r zrPzGr6S=eF>$_-sL|xoj@E0fv?|YmdFHgVfzjw-7D9{{|J8=?-Qzne;aTF4a;r(!R zRP_Gb?j$n9FCo!mVQxA=i05Hu_vo^=h2M@kjNr3>2Tg`g`|6y;>ro2~#+UCL-BDy- z*}oroxlo&CCE^S(me~5J1!07cl!t8caznQujua0a(Kv_}?QOSiPT7!1KFe*9k-J_FYxVT^7J$+t_O=esEqJlE1MzF&}fzR=N3uB!%3HG1SPV`#?@I! z@=(eGz8DsBiI6>>mfb?pC2I;qAUV94;#7+{Vps(p6vQMz*TqJeMVxU2>cq=y(9`yI z0$?VwD@1~SM~IQtk+mv%RkugmmWt+!IOWlGuQak`3Ik$pVbLRtEJ1;9=ts|SKW|Z{ z>2@Ne{t3Fn5f;p#FySVnjP)Y83OTqk zN~w4zQT%J@eL+QbxvMCZ=B88n+z8cHd6%|Z#RJ&z)m zqjqs_;rTKa;HF{Ow7c9Duu*xmK2JHmN4f-Ej2^V&@AKreaZboJ}hO<%!3cHt_ENDM?mS_HhS^1444i>DNI!J&gw_+hs%hihVyV5 zYK4tB9>qCN0_6LI|37wnI_#`6kH3_&I2{9_z<xiD_SE?S|W#eU5N(ZP28Y3Fj;dp#f;!_;kJ zDUB;%ib}Gsb+$y1CY3$c$fn}F&4~j?;xWXdawPC-<_$XQ@f=2z1awF`&B5U>%4v@g z*fim>eJ?!hu%K{r10-AH;Ef}oC)+qy<~xJ02zAsrPDA%Byb9Gx?bb(Tplkf}-`anF z@&}LIBC2n~mN*cBhv6uQsu6PF)s)0$Y?w5d7)xl~+Bk509)0MC!hggmAT+=ai}-Qs>sISH^07KU+KmH)d3mm zC&||v%Z&K8a6ldt5wokv)gD;PQ|33#%Q0Pl&oxY{t5em^fy zxCw+W_HTN4hyLJn9+Nr#T*Tn zRcR`oRd+3Pf4*lz?kpwfv9@!4E{f+_%M;k8=itG6KmLYjV~XT+o!N;p-StqiBM5XC z_(|N8MRc3c&cXfn5nGfLrP@k?{L?KCQqW<5XIaqb(|%T+hjy-=%bsM%U+H+^V~}uy|dkMj@}8+#+Z#q|g>)Lb!+M>h|1X2g2rVLdO*2CfW_ zUoZxtvtr$*Ct;#r5WFj1upf?o@I>ho34C6t*H&*; z#%Pg&`a7J~rW_89W1FqK9ud#i%F8D#NN$&_xr`W-{Tx6A4a3f@$mf(R6qXvBRRh@T}x+TCK<2@(1eC7B6- zdXD5kmea()g0I@x4(~(1md6UctbZ`1r*dxv;J_%dD3*pbG&jbXYR`#c>l=c&`xUYy zXJeG5oex74mYmyo7{gnkjAgch4qLAcnf5y3WaNIvhmYJGj*t6zliW3SfU1{7x#q_n z`lmef`LS#<+7WK$A3T^8o!IdDel7v&EUrc&y(Pr$!BT9BO=i^#MfwpDcTTQotAPAJ z{?@OYG&yKk^)fJ(@pY$i{M=DqoUoc7xlI!kMRS|x$~ph}dU7M<30mHNBE;&S6QMwA z9{#_aDN0la5`n28C%Nwj{^YKQpYosnT>jHP4-P$2Bj{eX39}5a1!Nu8UJ;GJ;z0TOp!Cb+6GLgma~0_NvAMv&$j}UNwPJ-sAjqMmW!uN8a$) zQ{{&Le6e&qS9s@RdxMbKimia1zMT=x2k*d#5%=J<^YYQgI!nh=lxh!+dGS;ft4tez zF@mU0gdefiJ~Xu{zBlbM?;cnO(E~Hi4e`_0M{;tLSof)qDH04m z8hk546_u{}+Ws6ewC2_pRDL1_xQFGX(vZ~Q`$wT~cuZ<5E$q;DU<{$?0nPzWe~;+O zcBpy%Eh2;2?>*UJm?j|t;4i=uNY1b!n#4E=PRoNMR-72*-;@qm# z$7zV-zgs}XBJ}Ht+rzl^-_Ih3{me!3mimntiM0Gz%bTa&Wu%16*qY(&nZSWtF$lf} zwIG;L?T=z2a06N@su1g!UJR9X2>!^>w27+rnkDp9ZH!; zY^GZl7cTh|jiW4)Kgmg5mfd{=Tm+PUTX5;4_uV%E#&(HwK>Q7(N<qSjTs4m>qwCs5JYB1G8Yg4i)JmU`k~9LZA$Y} zJ#XLwf}6OA6h%o~%o4%xHNSKJaojIhs!~^V+fXJlBQqlYck%1jm*dAVYFGm(N3uwI z>ZGF<59M(ilNc)pCa(W^qV#5OP^~Y|l42o*lIGxx$Y%`yx55-ecW(|50(k%dNqhI5 zEl-^F{AGP`&R$OQeL&Ot&JE{OBA1ulYx5e|TPkT?5gD33hmDe>+g$HS~7y)8Xxd%Kml6af) zYC|k2NF|6He%}&SJ+Uo66hXvrN0DYxkr_@bjOP;D_>TU{$y`$zO06qpmbPx3gpn6KYYdXCQ&l};Dd{!QaeY-WrjIO zA)9Kg!?NO@{b&r&)5kVv){|M0)36zcyIKzyw-u>2V6VQrAme}`)2k+=*DiogzXsi` z?n7}4%fuxIl=Knw4N$%eRTl2JD5A4sQqfh3EYxzRANvsZb_JW|Lr9CaTcp4>JEh30 zXY@dM!wX7I?=bY}I(cZ%K;$xQA4`SjQzKT#8OtkXBxoI)BF-Qjwp{Z*O#8xMtz!r8 zJ9Pt32ouIF1((&YnPW@z=JjmMx=GeLimtR*U9nK!D8Kr?HZm@1TAZ8Q75;{M{qB zE?gh=E0(0YGGd$`!ZngYzn0n7izPx}+`By4PeSB7>{hFrmdl)FYkd3f%EO+FvP!bk zkEHp%8g#CB$pc_}M}W{hEndox3Y|TpJ2!iVQ(vfjM!+^IOooEV`yxrJ(%?v?4@hNU z#URx5Et*vjIXCSBu2Cmi1NgbSEltgrs%*aVggMgz z4;OnO+<0CsS<0(9QuOg?x3<0UXSwqunLQ(Lzk+5Sq1y`udmAZAGI;g+_6i^IiYNLb zNZW@ra32Q)&n5&FATj)Qk_a@F`P{pWl}!yD%K2n3M|n&emWt*J=~@O%$$@6ol>v?K zdLJF;uL7klsvg+m1|V%(mKC2)rnB}9@zex#R5vkI>cNA9V|{TDc`lF~}CywRZz zdm&9UEX7=vS>3NY>*YxaOr~=Jy5%T7h^<8{(hpLrJ9EqttLy7e zFJdi|js0Ph@Kw|azV0C6r`jV-hx>}B5!7n1{m%O%JU=$zfl64?@q(1${Q1XyT3$h3 z{4??r*3%w)Gw>fE29L@j1u+i?J5f~O;S>G$Xq%3jTI{aqT!p9b`dGslu(yygd#(rijwdBkqTcH32+R4a4| zgVEsv*PmBTDFX&Mxgop^fAcrxk#tazH9FXL!Pm$d5TWfjNZ7C($rhD6+z1vUPRJK{ z#};FO^=9|Me8&>;ct%UfT=WL4h4EE+Pjt5hhAsb6=LUP8 z&H}(#|BM|rZMFPTdCKlT!;NyovLN}Yy`D=@?Q}KvTR-TfeW8bU<8Qc7F3$L88jm(@KZ_c}jlV^j ze%ls3;F}Qh2t}pxglrirVWmNr=#KrRwCIbZm5fKoGx6TM!?W~WSx72nk%KLS8LNU% zx*%OUetP1N`~~Fkzv)+rWAy*-UCNuKa*jbA8;} z-c^sqoV+TtuEc?qk}b2;NqD;sh@dr)oi)(6%e0C1N}%#|g^)$0mxh=4;{H&@eG6M2 z+`_0t5z}%x@UMygg?nbFNxofG>8=^_{#RbeXIr~K$O|)DMLFJHK{aI@&`P zC@Sn`@E@p#fVbCJU~Q-E57&H1w&{eb1^wtt2sz>)V8daw99^|}umF}#A#2vD5{uys z{dl6?lz%iMW&L?VNU6kR*MsEF>4!eZL<_2T#lE~yB4|XJ{zkZ;1YJ)yLz1w2vC}+T z-Kw!$XCFFS9>_x=Muua8!?-!=aR^cb6CrIy{T1}bnQ78}d&+=q+6= zHQoY)`t0+i-*l}fV1)St(i*fvwS$N;rOJH`zV#%vlmI^WT#mU`9wDuOb z9{;s4|6lw2zmNv_;m2~cov(U-*K%rFId25_k_@VI7xF&MvO}msH*$+xL zxDF<~ki+XOA_RX=ak0=gn}Y)|fi()?ZwE#t{ObAw1is!(ct(FEy4bs?@1K6@Q@+$v z^URj1)qHoyY+IW*dErk85#03M#2jfqR&Sk3hi@6h1AwFObHD7OkDpjP=$6EX2Ei0I zRTfq(Dwqw_R9eo6EQQ&7u}lYE;N|j^$3wa6PMkJ^9BC6`upZ9B+<$6LfXKpNrB_>lygnvIy6(wv57TSD!Zc;=rfZwW5pi)AM}qU z`k2rnD#(Mx)H;rk)*4&Gs^vau-JXM_*kXc_qikVv$RdfPYmTqtwr8~lWeN*k zNt!eKIjhH3*@?&~?2v~@b8L@b;n2eX>wcny0IJMiMEgI`MpjJEmIeR#LOJow1mEK9 z#8s>+hSu_!haSG^1`4=hg1xoWZw)e;wF5nJ;~R1d3q}(Vd6g(EdtH{;^h?4q+ZL%w zA)HYnU?c-Qt+j2kmW+`mYo6Bn$|^p4$cyypUB$q^{Qj5TKG~)Sh(9sD{W`&UzXGO? zDehNz*=1`dU#-!!B+n1IORtn78H!luTc0m07yXLeve9EX*-zR@qg%7DZ#SIpYjyAYA{fwtb z);Od0WV&E|%t;K@V+upmzv&Z~!PaWpLqM}x)o_z|k|9{x%4w|-n-tbz8UH@#a730R z2wZ=9w!{|gVTK{r zY_y{wxL~~gBZN|IUWb5OpxZI_Cb`l3BCP`G)+$q53mC0jyd(q=LQB9am@nQRHn(Zv zfa`SJ$m7${Gy6je(`Cl1Pb2YNYBKRm{hMb`wt=6tB@?7yJ9eNj{d#3}){mX7nRS0R zWo7N6Wd~xyNsF_77u5w3U=VUuY-h(&8eLNaryqGsuftnJg4Qp|J`(N=ZyYSqH)UU7 zBA;%29d?>b=W)|DgYeA|t3_#;2sk%U<8+KK46k7T7A0}KcT*H~U-pZ6bXBx_SS3sB zIk9F9utvAkXQ!WdkyLz}IS}yr(5M0z@tjy;6<_&aD!tJnO&+0fuKy-X9tthCwi1Pf z3_#Su-{OSaIsHr+y1S?7GwaA2q(B&>s`yd~CQ^PK1*9^k$me_B3gN{fz-aemFl>`C z<0Q3;aRmZ$&%FAQA+Ot9JpPMnb~ESBt`RWb34Cre_DI+RJO3TGSa*wC!{7T)l$;FI zoK5xD9xZI@rEz|tkjI~C3fbjs{bmdv)PM^J{_NEhmH)RNQu=WZE?*~3HNMQ7J^s=Yo`7T@i=0i@zEdGV&nHy>cl}z~Tz60{oJ#rXlR-UXZ1g zb+8R9ivfH+Uw(SVhR1Anr@aVq!1QdZr|*nEr`L^Ie!OGZ;I7#ZeweN@Im$Bd2P1q0 z+bZB`e`>IU~+@HWcIHs`OOSY;Maa_wsz`IL`4C;@T zA>?Mfii4x8+$7i@;kVQvh?f)#yrKS)9o%G-2rq66DMK2ic>pe)aJe4b&Q94o*p7U= zZu65kvRqYx)E>Y&loS?XRe1Jd1CtsGSD`#C0YuMqVF%Xf`LSUK$(< zj2Am|q+A|zYAy!F%0rpnBCS9E+#63RRKrFzLs6m63ttIW3HcREFLjF7f}V`qM#Y_o z#O_Uhg6dC*b-{+_A_2DMt{XK3EUPyQC)yt&`V3G8a7BKEtBF?1gMeId52xoqNSk6h zFB7i_kKY}C!tM0U>BpYa0w3|uB*U-1VHfr<6lDEyi~svx|0@xuoM45{0GRcFQ&l?3q>i&`9hDe7$N%mI0#$fmVm~4NYwW^vY zt<}`9Tnq7;el=-R{fGMV-TLo1BV5K|t&!o6K#(G+gS`VEVs!JBE7Zezr1E{11~-O# zCrvn$`u%^D`SQ*9_c{Mb@S;jUn)*{X zu>w7$j#?@=scpBcfr$bXYr&K!w{kcOrML&k4wFDl?3p~$WI8(lX|%5*_Z+{zqGIKI zDWG9dMsc|7{3_*!AF(bM1KY=-!`Obpn8r+J3F2TDA>^njYhn- zYTlEP0WL?R!9#`3Tu59CDnS?sJSbtcLRcP^i*acY-=#KmdOf!l=L%y{$IMFZq4Ho@ zACHwYkL82r%ihKXzio6f-e)tg-G^u@?nA7~! z{_M0kB~$;^NI(VKH*|2btNqOQal$irMarzfprt zRQ>6fUJLL8zk)B2Uw%FQEOh}WPCCO3w=(e2QF(-?&T$xkRz8VaX-J-rGkq1jn3q)1 z&-shJ`3OTSm#KA&AbworX$VM$(?cql-e*nn4)dUYQY*bZf2tb@^!kgoH_MKHhF33W zF0f~5--I(AQoy;VPnH*!gbA9r#`ip6DRNqs4q{SjkfK7BhNA;y7B+%R(uDX`Opx$XBYL}so${)eVus{|e^w2df5rg_omR{G_-6kN6ET)@6~aY7W=P-1tnsC&DT46g z;#lj#41V+3^XEyMGKA<1nOf`GufzXdP$AItZ@@`x)IBXVF1&<0oHg8aB5^=PGh{{da0 z^UKaY4EdGcU3;nECq-gzeQjaB%qJJxGh8EVr`P;d!XSC>z@ck?O&9bE!;NoObMyM~ zd^*MJ*Bj5pou{fK=DY9&XCsBsV6e(htw*jaw0PgAR$w%vtE#th_Bq{6>k(Y7;fdfg z2E_3C8~MEXGL!KeT6qT<-Roo~@;r1aTY*Vl-Tp;5qSyRTj0bpnGQtXgRBpak??&nM z{J}b&sQ)JxiG%0EuJ|`8DH%83DAnTBE@gfcaAd6F!$1ag{R(tNd0NtvARzLAy{)!M z70RYoqgM7xizv;$4?=RDe5}0uVsNLdUMTdV^!lSL6eequZqGkop7-FUuR@cFGV;=i z16EGEz@VS`LcYvhIaiyRP-&D68lEhF7j<;R60Un_;`WHz+`aOO=LN-d(`NCF`#{;) zS9zfkC(5EM-HE;F3ypXX$q5&&X1=)jJs%|u_8MQSuWOEa&#f(tp)l-;-eFvlxLcA zyGaH}RK%7*WGIa`i^sx#g$?7p*}z;WnSrC?F1~$0#Jb6QE)-lfKUvmzg zFl_@~ih&TXi%{VXg?=DR0`)thG6)^nRV8?#Ix{a?4NxgQ3;9dLQ6sW__WXSeFT@CT2ce5Gq49HRa^hj2y|F+eB#qgG(VxS3x(}OwHJLnp z0Sc9t2${ycrKj)WV)g`COX~KYm$N_hqloz)Zzq%i$34;|6v&jr2yhY|LpOORo&`a8 z%bTk^825nd#mgdIEK3`bj#W>1)f1>;Sgbh_v3mjpwr>g_;16M=d`k9c{Dq$ZX(3Lt z7~ef|;8?$;{Kns)N@MB+lG_r39Ca{74URwX*Pd*W^WkiS!oxjVTKA-?-23YlALD%a zZ&ao|@_^4G2#~8MO%cP4QZIOM{%qy`+TJ=F>W%3~3B{keC_m;GVr;0St^Bu^t@;4f zFxl7oH}GChuhWX<@A47%-~#=#{|sY>0)=^3(^#*J-!{~YC^~%IfJq4FUnT70^-Y)+!luKmEESwr?*sA{4Hqoo4GFEnE|dtTD;^SwIYO_Qn8E8I&g!YIRtRg_zoc!h`Oww^*rS_3b|c>b z|BlK9qZVkh_EY%Wi@L)2)| z@r?+%H#gpDnF(y8tdVRqzebd0G5V)STMqXKf#-CDT^I)NomPF2lM5H_UEkbEt{vt= z9cWHMCXt1w1;F%$kYFk~Zh0d_J`VAKH;X_UM`H7bBnZ4|Gp=~Wz;F8G!g>BBY4(5i zZ?*P|Kln6W0526Awp{x@dl6Ttqw~!8dH|ZEt+);$AC0He!MtT7J5$b|@lr#)N@&hA zlNmjGBi2)h#)tErRDQ$_B;tu!Rzerr!R@#|a51~e7w^=`;VxBf$5-z=Y+XLox^JID zEbh$~VABOAv}=}n;;AL#7~6rByTC=VINL=xye}yB-|6O)NA!-LQrQuNlWPKM{mZa@ zdt}7svA-6@tn8UDfk%HfFyo5Tj1;QLr>kCKA4dRaOyfOliY=csi@zCwpc;3o+|E1r zi*hbFZ*TGOYq0xdH1gg*!RYKkXrmr{#8ROiD^0g*u5;S}nPqUgU8c3gWNjNZ7NTo$ z5alNMOL1=ZqV9ho=3@*Hf80C7$|(sU6m_-Q8<}?*Z0#?rSMy_)Ygil3v@s% z(p}*{*1=khMO*DPtRhq7QgaDZ^xqW}ByyL`nE;Ro z3+-n4a!2Lj&z~?z5LDZ@8gv3K&HKl4Y~J@uLBGo*+A-#ftS@uiD3N8Q+Ge;BWnG>fh6t zwTGK)cMUBN4tPIf#~{A~5{(%++KOYW`?&RLNfNCu&iZle+w^+snGH}ONNN7!2Eio? z^L+{?QHT6HpI=;9j<2J?Z&LC;_-J;|7I>VTzvopHijHdt7uKS(NaKlL^iSOEHR)*-Us};LeL~+dVKq-a^|5Ns*>0+5TZK$34sN){vJA}dIW^v z`Cxbv2WF-n)1Ufsd)09HDPQ^AUx$-IfnZD9O35_dKx=~^)157Ha3oRHw%E6$cDin~ z%)SgiNKIYI`%Y{gC(XuDbC`tn0@X_D>J5z2c7$7F9~1kt@$ z9xjK720?0ss`3n~>9Kj#gs?ici;=&&-fEGXJM#v`MxIoX-{skaXNDV+O;20qY0aFI z!ubi&*iZ})Fp$40!rw8FBa!3)p=uIT#7)yQ!!69dv>3?36ShS(MB*sYOIgR!Tw1v_ z>v{KI#WW{)>=mN=E`0kXJqKsdAHK}pv_*9E2QCug>rZ2{gpIFgTW`rStgL#k|4gn1 zaZu5M*CdW-k1k&V< zYFj8L7Ee5twOP*)E9B&;b(b*WNGfk5C@BXsWnn(2B}Ry_oL?hf0_EU_{TZh~#Y zONu*)9MYxUqIcjBWTVJT{aR$&Tb$mU=*ra7V!#ixbUY765g3w7o~1CbyxlB$qEZ++a@L zgfh}!(Ss>vHnK*7nOw6pUZ!M&SWU-H5@-RQ$%R|1xxAZ9u*O@D=xFVgCVif4>J)$; z9TB(Az$MLnseKQlTs@j{)Juh)H~u08eMVj>0fDiWXv%B(effNeY}JHOd?EZn^%klL zcfWgp^XunOdIY2-gmec*jfV&L$!|ah|9weXn`s(N%v0075(MYqor%WC9q`_BEs}(4 zNKB{bNC~VZ(jMmvscw&EioBbDo-YY)S}kF{T`HG-K?$$>&gpljA6JT;0H6}eA9}MgKV9DVUhL$TC!(g0tIGKdAJsp4&6oV?nA1ZHdCFX+}}f}mWwO7_?x&`j|T z$Y5$h9X`j+#-kV<*OHs2(T)K4sCcj3_6@kF2pdK$3AL3F5Ls$lL10akZ`1-ruuNuV zqjF*5KYC4iTqTH&4*^!gXKIpjXZ-Q_E6?DKhk=Uu9oTJ4z*%ZX`%vM_h_jF5N}2Vp zt(41)eo((di~3L3%Wll&-rc4YF;5dkv()_+ylmqgT+AnC(1 z{8~4Vzim~fTxNA9w|SZK=rFizS`OK=GwlWK zY3w8=>7{-;KJ2CXQF+Ke-YVCv#v~7&Z!chk7kU;24}P_Y(TJ^cXLlIxM-LNiG43N- z^Yq{i?Lie0*5k+iIx;MHpPQ6TSd2KOACGHi_PeKdy^=st7YL}W2jbzv0;#E$wRjEI zhfKs)Tr9)`qPSfK4s}1A67SNz|3rerFK{sTqO287u%RXQ4j~ML0U}mXoS3<)#MDYtH9y{1;ZBH0g>qfm zJ|v3XjBkrtia=K?XUh$0VL`f8CR;Geq@}#cbLD9t4Nb?tzEqy|kGC@W%o#j=JI@Bq zjl$S@j8gM6maxomHC(!$8nRUJBvebL>!Z@|ZA8*znIk0Rb+08H+f4;nSNM^a%pAV@ z^>jC2fk3R9a<7F-zK5}o@LGznA#3x@X7x}S!(Fend|NWfv3y))T@I24l)o8&l&5kX zZA088QRrxZ5y>Yko3Lgvyto+oO(q$`Ug7lYMlIVsD%wjxMkMZYbhp6WUJ;g%z*_SX zW!_@lpsLEZLIAWMT2#rsH9uiM{3Iu$%0;0}BQwr9!st9A6cH}Nl>t`lQNv2N#-y36=u72oSPbrcM3jE~uBDp`Q^ivecnNdVs%d>lu~oS9)tk?ip{?ZS zpdvjLq(9OU!dZrotqXMtfQvtgLS5RXGhxIeb#IU2&tS~BPl#&gD6iCV2+L3h1Uuk% z4;6^lU$!=)dT3pR35pZ?BX#Yz4>$3&yfM@emYcrV0=HX@aj&>;cF}m;uaZ>_fS#`P zUa_usR0tcb`l?}%?Ll_PlRn&*LD7g?MNreC=iTpreR{|1t#Q(ruUdv&{la_1BR-Uw z@v+Yrib!Sq;MP8ZHRnr<`ExZX>(AgQ4X&JoD?|+xp#i^DA(rWxJQ3hp@V9Wcf=m%@ z%)yr()v8P#;K~8se9=mo_EL)hLMfO=6;`iXA+$Ezuu6r^$$=j~t>Xy7r+tvD^gF6A ziY)``AKv!Qe_kHX5fDg?8&BCj>WwUy(~G6=Q#A$J^;%I{%fG>%;x0v%H5WSWa}xx` z-j-_Lj!W^u@`Obb-xf}yL<3Uiv=RLdCDwDk3x9~wtMEGuhf;&JD#D|x4#X@C1p<7< zmjQ&pf@@dk$}W(7I%i~BEa!VbMdarM_8q~H+L(S{N@qFeOvB<$0rQF$c_kyPry zeIEWnZ&JPQ-9_v`8NpJJ+71kOd^N7NlzYB=O*kKfF6c^RLh_~)ZWC`1#^H3XL?zbU zj7yEFd|R@@XCBig@RAT>v`xUo9+15TST2G&9aoCa14jmgP?FQ#;rt}CG)RS6TRSh5 zXnFfWiGcP0RbI5n;VS}uvZj!V>#D)9E&LYNvK+)Lcd!XPV=&Dx`N%UtDwwoo(Urw8 zO0rY;_fLiwfI`9X+g4j@qN{>K&KA~v%<|na%ILQ~HLzGDj~PYt*TToesU>RE#8`E~ z>_#+>ur<@d3-&CxZ*;+zN;%&sq9$qomY@3U#ijzjw^NaYxykoFgcj^H2%gB`CQsrT z$*gSVOipq)&OGVPTYdl=Fxd0RwEp44_z;m$B?zOKf=_~~k@iNfglSJct8&of-**M_ zZj=MjsUuZ$_#H&k`FnOK>-GCk<<7>^S6Al!wC{FyQ4upFAM3gGaCJUuy~!Q&*7%F~ z>|GTdy=yxNJ5wDPIv^lF1b^CGiOdu6)5Fccwy&18MN1e(e-V?0vmrjfmYzeNPX-$Ki5nYqpNES~gt{6#1cUjAwP zJMUC&S-Pkm+OZg1i{mO&p$EZ4d?kFlpf+;&FnT1=y0C;3x|1*E=YI*OEx4?tL%Yq}Tc= zid$&}fCfQ<)Qizm!#UgVvlJX19z~Os%1-w$l$hsa`pUnDQtE>BiylN>9wGNVNX_m( zlwx(Jy#JG11IDq&akzL;Bsf+Gv=K{W4hIhUHd!2gK!@ggFJ7t|;`9?sAXEg{Vsvv2 z8&Zj~Bd+~`L*sU14rQcfT77nA*E~cV{O{!FQy-W8>1LW7Vqc&auP&_EG4OkIxcNAj z8u(G;dl74ZP-uA4M4yQ1u0=7S?Dt#wVMX^mBCRno?qj-eB@B6d`=t{2r6UZX4&~=% z;b{IN7+Sw%QlCNX?U%1mQvyKT*AF=JIck+IuJwfQ%S)dGW8wDjKzVPTEqKb8gp*~7GQ8+M5dY`h-orvH{mJqresL*Rba{v6}UZ>}?stWu8nP`s^X9$o%&Jaa2{&pNEQ^|B9PB{(* zc-Hg7Q>5|o)g@v+6=h{onf8 z`hE|bWZF&a5%T%Dx>u?*hnk7|dL*YiqEe_gB`qp6g*MOL0z`VMiAF&DvEkW|Z$G9H z=fZO*Zw|5_!4|kJFRZA}b{pf7Bp%v1!J*SA!G#!brbRPG7L6Fq;@tjEngM-xJ5 z!Td+9K*N!G2^#XvaQMh5fJ2Dn`en-O9C#V^WZR)#b|!pP72 zcwVjWa`jR6g3!qCZuR}D=ypAUD{z2f8icyIOT7LrfuqwufB$Pwm_{dYTj7Rfkeg&j z#G6%7dc4<`n~)1r1-aJ-;AE74=MMdCc_Wt{k3$s$J|`$r$=E?2`8DLd3nX}K8&^ss zc zlC?$zZa~}NNO)VZ!GIFv%#^GIXyvCULe?6MoNeki{+#1f^6&nr)A|MRA9~v`N*Bw@ zdMb1RNALjQhd69Q(qUz1O6eaGxUORK@MaO`<8Z&AEDCLn)kd=21HpR1I-p)Pph2>R zH=~3|-YXS=wN%n`BXDvZ%B484m1-pnatsN0T>Sm(3h`FLtDFhOaaZo>H)U6coIN#Z zgBTNGqBl!(4-$y!sE9G5y&(;W3H9NpFP8P5C&0Pg-VGJ8p%_Z~t$2#xcu)$~6K9S)Si1aGZ<`p% z7U{U4hx(By`mA^bb~3#(Lth=wNwKEw{p%hQwWN{N2^sOBy{?IVO4!KFfS$d6uHXi5zPMBtFq3TOO*zjb<=WIoI1F=2{h zQs1<&JX{|1k8@?yKR%PxBZ~xDLd|1cHIZ>b0a5a)z$6*IsFlOFmvmAAd=kpZ_p;Y` zMbJS{u zWH(;$4|-P-Jd?yUScWaqu&hkgjiHUjm_n2%O^It)kZYFK@*yJWco}K-(Bu@rPBR zcYPAq8x6%3K(*vB97(K~4X)KFX~Qq+Qt%;aVy9SJolbpBBo3}@-PG0%eJNM32@#OS zG}z$sJ!+8qpvrWq^IfTnu8deaMcO5;V)&ok6^E{R@K#yXs2T%3kh}ASh?hL z5*i!kzQ2!2y$O|?Cd3~rT-ZcKs!vGQ8wrN;n;$A0?go?pe zB5r^&f=Gqt->0%;-_*&?GJe%D;U{UCpSQOzz~Ok>N@V$Fr-L zq=|{0=T`~s8rudtv>PD-+!nn2J-#Mo72eLr|)(%4z zxL66NpNchlV>@ng)Op~};IoTc9T)*Y884*n_=VnLz9brX7%)6kG1ZYdrsv^;U56_$ zSC#@=VhV_?4;>PH%sr2i9B%m(lhF7*|A(9sW*EPbF09)MQ26uA!u5488Adn_KJ6mnDp1tCFdtWu7Uo zP|MlWcM+0_2#&x($!7#^rVACvqy9nZV*WM0?MD&s?uucYPttwY=^f~_sBw+!cz0fd9t6ZTggV#&g|t2OM~H}k`z z!z*mk@TeZ5eB;y##8R`pW!IrjbL`;PZn!%=Ve;JMxVb#(=oI$#0t_iW?Cecsf~QIO zH23!bwow@WY6yU{K8%RRnMa>2kNoUWFCvEZ7I*i>iwkL7sZ&7Q8JHmOgFu-QUr9Rf zBJrJ-<(RK<0IaP3SH}O@V!$a>d?BpO>6N8bwNm#Krg7waTIQ0qa{=Y&w*W|Pe-3|; zK5zrSMWY~j z-cv-M#i#Oj{@x+?W5nB0cuk_IM%RaKjVEEC@|z;LdMu|qSgq9o)e$Ghk?X*Ln!C`^|v*&UBX-*5ohF`vU~i$o2}x$UYlwYHBo8Z zf8$f&dhSbAK^!9v$N2kgr7+*I+*E4(7$v2-YSEol*fpxeoDa8S{ofz+KVi+O0|HagULS&i->@qT~xu7+EiUYYwA z;{Ij%Z+Z2DmHbN|@kDpfRXTPai8434!w5S<0u8Ahx2ylII7m7D#xKXWp%@wlG*rfY zR4JkistD9Ph0lkmE^31Ze*;Gh2l-nI{>DjVmsO>Kca&Tta9OV)m(YaKfYKV^>Z*@1OxMP>L5_VT;qNY)e)fa{Qhb)9Y&q?NmgoKRQn_%;hNZ6a`%Z<&rl9_y!IDa~s+o{S z+a)5yJHy|IYP{J=q$N+LJmPA=gr(5ILCQ}p6}Zq)hbFpy^_eo=_r+1c75KU7Wu6>! zweEy{2^xd?KdQ$)#TkqcZ^>*K`p3l*-btT#%&z+VoX@xz(3iB!fiWbPg1aJgifSn+ zY4$o`DygYO&J~NC`=>m!ebcfszI~(Ycq<9{0|KC4#o{$l@XB;;ABNFh>rj+^_#>6e z@1MSv^@O4+h>HYnjI$4UD45V6mFx~sp`NG|9L;>k=_lp;UwYB^#RmwOnLd7S9=kvaQ`f5g%?UKm}1p2 zNh#Iv$cg2k(3(xaUbqtX3l?sZbmr3VjBu9t7O(wfP&l*N2>mQtQV+OE8~YXfBanrZ9oX);8C^ZbMvF}Q~yYh4?mD{#r=q@!IhU?2_F1sJ&3&_`V!7j3V3sT;79R_H(ZSFTVe^caL6$pjfU)ANCr)oe&@X zFTQIh`t}ERroRt+G8wXP9Lp8Tqp$e5%=OB%{&{_&tXk+qLXGj1)Emnuss$c7cqdCv zf3L~l2-XSf$mqSMk^&$CF;E(%u|k(PiDD(jPbLO&6cw$+Z6;h7+gmEC_r9r^aTpe& z`bY$;Ji+ln26j{iLtDuApdxO8ycEO(*ZlLv zG9TUCX@TL%RVc!7&^?OAp~LJ(Oj!#b3I`+>e-D5@R3(>ZXM@^wWv5J$$c!+&k_+Uo zIBJc@tdPzmvhxq|>)TumT_$&Rko}>>oTF){H9&ZoisBHzCm$|9vxLCKcm8F+ct$R! z=eXW|v&HwN^12u0;U~)j-XIx=*(Z^^E&8izQEsLzU#U)}50t2_aJ>oHS?G@N#g0eE znJ?0ri;^QXM`W@d!TRO0l3&$ly@V!d^w6KWEGMP&{-t*QkT)rF9S#*a-wJ3}P(RF@ z$IDND>O~+ginkPHEjy)c)C6pR;CzmQzzRz2C>n386o6WTAs9NKVV)?a93(Ah4v(yN zFiebCe%s+TMhpcvej6$C8c)Nt`#d78y;TVGXT8cBxWv@qMHB%$>Dqm15Og3+XtpnE z)(oy*DHi`uK5)gA11t9)S5!z-48_^!oAVQt)B+(_B+UbXXkZtf^w`{c|5dbZ|MfJ$ z4{IyLgdn7|bWODohiK@ys>;r|6)tAo&1J}u^GJ)%5|1arR`f2LJ}LPlUl*i8CQ(paw859#etmF;J^5 zay~CAVRvz`*SfUm3N_ui=+q~n9(}kM%He_K;@NC81dm&2*L&}k(|7zJ#F){B8H>9$ z3eTdVJhCr}0xH?#PB(msD1FyxLwMjga*X$j!oNP%z&*TWvV~stxrN2D)Qc(pX8Zx~ ztaP`ZS=a;vhRR)yNWK2#(N`8hPR-dupQlz>>A^09TT%6X8X?VydTy7?elQ_iV#aU!{j|Ts^f^11PzdQqfQXq*g*?M!E*<0iDIHQk{K7I5!V( z9-#D<%Ea38=eQm_`nWLmC1KZx@ROI_=1y3Ebn0X;O}&3kwCI6dhPicqcHJ*m))qkI zHlzm%#?yW~ybnUjq-#BA(cGWO7iY^8-ktGnbcbU184_beL{TFQ*XLfE7+rq)-Vw&+ zarlQz{ql@gdIPd^Kd7(hy*zd+^1*s2}`IKgA#3Q;5>N_Qw+qbPIxdI=j@AZ1$q#&iJ^y9F?pKbbXm>j+GdWI2%=+arRPeJtyfmOaYS^Q zLJK99z9fI8E~frQ>MN+5e%rfo=E)Z+FZahEdaOM3mV#OOLpkM;I2ar$dHHHKII3WP^B2%A_~ z?S_(E?Du|6{5CJKcfbGTDYPx`jz2v8wjC(3ZqW!d_QJ(|;tvx$JPmem-oH}17`S(` zcPNIAo3BVZjL7=WyFSd1mnZz=)9EZzReKoLJk4+-p(QjeK&8WcU{@^uHI5O4P)+Rm z2Qk`)XsJzko&&b;MFklhjOYFxYJDH%9yW9Wegx3PohAU4g&s4)n+rvlALQ0X>8cje z;@G2&m0>T_C_{|QD4p=fqE2z$GRQI!`=NY?wYJ!GAvMu`b_tzn~oboFO z5YaSV$FBF#pHg0B1#xP~y)Y~<2$7VpyADI2B_S_@{#Mh3=-u(BqCo=|HU3?E?n9ci z!ZcXRFTF53C#WM1Y7jimmjDP8g$j5IZFm8()v;>SW(Rb|O=(t?D+;>R zJZQwS_-?*Bv5bEYh9gWfs^%mLvuZ|`pW51n(L*%;ty6%+H)e-=whv$Rbg0C+(}aI^ zw{Hph5l60^d)h#4tc)7+rV_t_C67RrKi>FLqS?a!o-_kFww+96->7qG8> zHkG==ATGhZiEIK0ct|T_B1EFYity@VRR*2gn!q;qWx}8#2=yn-`w2lAKXrWj`Lg7% zIod4&opHGw&vU*u*9E;Kv*_maNdU;&QH4qLG7IXh6y2B zfIK8%S4j_CZ$d$PEYjBi61O93L}$sDAM)P+ZTYdkd6$7kEeZxygY(21Kf20ZSh8z4 zE|!Z|ibX_NgUjQoC#|Sh1Yl2;HPb)U#}WuY^^o2r&G%(Z_I=@RCIe1P#IHc5;T>Dg z62R?<3%Y>3joQJMu)c&MDs_sVJIUEq(5^S0N4-UVK+YX0?flkS(MT=xhxGjpvuOrB zf@$G>Jppd$QFZi@UN$07<+}eQPoMjB843@Ok($W__i3nf^K(I)u#NT{id zxe_dgicu(y08&+8q4{V%BJ(D=g>hqfjVyg=EsQnnst7;A$ zaHxC4O%d&v&sjBK6~Pn?09I8-m|ABK$8%n8N+p^`YTXyz0m1*sGu`oIg0#X`&60ZSDA zm)+ju(UMX{rN2Ko5FXuwn=6-RJe+6C#o2xYf7s2iq42C4KaM1>yeK8cES|(b*tS?u zZsY^EjTCej&h>=8jIW&$jTRlE^y$DmRq`nw4C*M3w(Y%&i_2-iw~ZV^6DraAXZ zk0<$ajC^_%CSjA+;~D%tWc#w0RmX zJ;?R^&6l?~g!s*AxldI3v3=}tpJPz$_x%qnyG3M)Sk~H#r;CU22PKm9pHICWy}c5^ zxxwV0;vc-5FC^S-D+9i_;IQ)f#0MyW7wt|k9fNWTTIjV3+V|L43d-*+oQO8r^TT7; z7<4)73N&6HVP>|(TFRGUY6oO=wKNDC)Xgve5AwgkN7?5>t_r|fZfYrY76O0Imi3v-{VbUTS{3R;x7n z+sD?sN@_`h%4O=T_^^jaehg8=$}V%egDa8Rq>CE}!bt8C1_59ZqR&M~;TxBLhgW4i zF)hUD2H6LI7$|;`H;03ThwKmXY?NSFv)6&$#MWM>=OQP#-XoqkX92&)B_ci{_=c+T zk#A^;6y#uqdDb=c0hIX92<{NkIpXqA`ZP@9(XMcD7bN(s0wltMD8l@dzRV z0z`PyF{LL<-BLe_<9Cze=a);fij_`#{9I@hUwOEY(u8|VJ~LrE$n9|?a)h-#in~Vu z7Zs*jT}Z_@Z=Gq16trQ0B&|B;ky@R9h4KBni~CC8?Q-R9Z$&Oa(V*I`QI^14yim6M zYv1VB$xKw%+kSdjh&}p0{M$_mG!GkGWCw*rCMr7e^ln8*er{Q1mYDPcUHLbvT?QgR zmcr|GfvB@(XR*W)d#z?Py~G09jSl<~?wjy47qC@Bp{>orz_JpT;aMWN5BbScV6fPB zq~8+Lujs4F5aj196YtAg9QMMSO+E5ZwM9vBa*1^c(~nGlWXuu!E881~13y`I$==`= z`pE*+W!@T*e}!9rKf5(6IkTX&TJ8%q`ogs2cUB}81=IdcwCf*1^2KpgwyNXQJ^jFv zf%lA^$q_-VCR#SxUuF=~G(=D_x zVFW2$OwEHZ0c)v?F4Z3#lCP?zd|zu*s!%y7fACriHb@1dsv~SpYq($;gXE$sM%s?2 zD`UXmQ1DswMHp>wcW~7QoK0V}o#cv`^hW}1+|0^N& zXd!Mnc4fE>Rjr=ILN^5n!Ry=f zS8!ZU_V(-fwh$?l?zef8IMd*izV??A?734y)j#scOEe-26xjLl#FO5p`7+n=$eiIk zoPXRa0e~rudK4(QyNnwzK(aHtwsvvV3xgdtFj)C;CSrvW^GO zldLfl?mKdGVM<6eqH{y8`hw&KQTF61M1QIL$m)15NmYMQ&b;yRL!LS}a>Ok*%T9#Q z56WKL6kz$j|7EPlPT7f&!c0vwXIr2?*wh`U)P24XIqv3zVPt@IX=YlUCM@BvyQJ=N zULukU%;CCck1;sF%Dpe{4qL>baNwLnucW%F-GuH9edy<^&PYaV97OnC;y$W{;ct2X zB8z$6FJvh;afL-((hLmB!>Vv@54Y|@CJ?!@W)}KBg%Rvb}`&?OF zu!XZhu!U2#&)v{j?YXs}!T__i0gio4`1`^^;Rsb?d~QuS#pF~m;MYgn%48fx@_^niC9qgmai-(4Q^= zD1WXTMCtkMnqH;|gpM#Yz^=XV{6Jl6D31?3C6O2Qd}08`Em}?Y>q3H;uyS0hAPutvsklNDD>asrO-iW# z$D6*e4=fi;k5+b-)FdQ?th&H2atuEAP7Zd+yzK@y2Wc*=z4hq}{ySm?7yF+*v4&OB zD|MkJHDEeig@2?T{5-QTGCFt>$CLB0d)@B1~ zt{$(;3*JyJ`U(+hu)#AkX++OVgS~xb)|x=QBp~qs@$M(%mSWjO%z*zaMP>lh z;71S`516z!4j7mxFFGTt^}EMm2)=^4kFp!}RaWB_X6=Jb3V}L=l1Wke-YDSU(zquVMm3SR5cKt%V}_Oi%PsL8^8^e_aX2X6e>icq_P)MO?7fg9hrR z79s=sQy(=cSe%HgE~9FL%s2pm)V6G!5(LDkygE1v6gvwk^8mEt_ohgzmKTxi29OL*r2T51Utbk{c*y|xH^CklrX*tqCmUD6&w!ggM{-v zBz(63#-MJ0;ce$$7&NK=b=9Rbat#JsF_&CFSm;B440$@CIfvxh#B?KNOG{;G$@d^; zub};t&9yO%5WFobB>dMbUcE5en?cw0y_|Jh>jp%QlFR06%EY80PXFW+N?^IaR^~j- z6*ZHyI$TT20#x3$5Me@BdmA~`UYVZG$7*FO3O2RwJf$pno$|b5CXwpr(nNJJFuxxQ z51SV%7!H2;8e|DRA_3)5cb#Ax`{3NUCTUA0;8K)jUZP<2c}q|Y2M&f2=BTSAiiNZV z0m0r>Z`~$(Tl3^3ZMWMm+7Nx>Re$m5HK^nNe*C@%NVY`;_kMW~;NutLfWae3K897ZPhNUrb^n1hPJ_6I;W6aQ{=O_Fy^9q+2ltp!UsOZ8$tyoO3( zkMedRcDUdEV6EWFCv$+2J~Cx7ulGb=_Ex-ncl_sa`X_%^?NStAb~zdq5?jL*9?kjk za1=sMb7m}im&+~x_*}W*@!X?p*#}S9{CqZbGxZ5rf2`?sn{O_7&2^@4*vqqT}u{TyZmP^Hos+IhiE!? zUAiihw7o#7pZas$VyFtjgfTrX#I}Cnz0)s&hoa&^gJ)?jlKGvalmC;`1?$NF-}jSQ z)!!<;@<-3)GPG?i=>{U-l9?)X3Ui8uj`KKdG<%;6z86To-1R1OdASU)g_R`GOPGnE z6ctRcgrIl?6RwP`o_fdiA?6LQFxl$pzp+6afCWwX$HceCw6qj5PX!k8yb2zQPmvkQ ziaM=)3;qn3!rPR1=Y-ClDQEphSucl~kq4jkjjq=!!kKQHa30QITv#03#HaTh$vuMT z=IPv=9#e09eQiN(TC@GU>Qpc&jdcjCM;wG%Yv>i z`Ll8Mnw}@<1VV&j2ld1!A@@RUI?TtG0&HsqTBdTN`6RV0iy(b0zuZODqOgQ+WAlbV z*Y)A*jG#|_-y#~nQSp&Z2JC_S|4;cqa_IQLZP-j)Dl)t+h)ti#%lu3 zbRQB!ZY)jASP7q3Upycb^LjaDiH^d_9N%6p&-roF5E*&T$ceTW!ye$?BXhj zg(i9Xt>2>5E|IJ-+Ikl$fLvMg+Kg}0eD)yVifsG-b>fg@5B&wO3V?XrYO)kG%$86M z8bf>r2F|h)chqXRyynj<6iI42POt!|gV;74+^t!!(0`9*VY|Z{I|PU0y(5`Q@XiC8 z{Xq|1=A2=;4MgWCGN*Lsn6}u=Ef8?JA9<*RHBNBsV?eH6!&0wNS(jU^Ni{jbm^{t(ay;?Zqg+}7cs15@S04^*5? zaG;H9_ekkd`)?s+Z9by}#JXo~cAoA(_z%{7Pv?)%r9}-mDvSkuqm0FmZ=Wkqd6C5K za&#+)qeLHS7REQfL;2dwC@IJiz8e7XK>>`pB_4IZA14J{-K$cI5-TaAH)59NRtI7Pbw}}?P~u*kOH77dFx{1fkaV>Q4UD{UARzKWr^Tl6Pj5PnU^$Y7Z{Un8!spg zWWuw-rHmR5VtNW0`E4&hQi5H139A&8nqnUQGv_;U_D7(0!g|Jn9PDm#C{;R@r(T`c zi4h(~)ifal>{q7hiLnw8Sq6jLky<>pcR!64>wV+>R^b+xO4HGl61Crz(>oS3jOE;u zA=?lE8*x8SL-T8^mKqJ?%P=^O8u3t37Ihe?`g|t!bKI8eqx{Xvs(Njfh^jz%@nHGe zmwYtmvnGoSbR>nZDIO74C7=r;(p?pKq*LYcN(~`dUdM~Imr8ZBY^~J{81*T&0zCjt zS4X6Fd>;2m@{XD&6IAW}7OXibW@59R$n0KCLvJUum>$jD#5Ts=cxA9VxRGQb9Jm`^ zZLZKPF<0(rX&6WZ`3`g>KDz3?maJWAxg_NIedR+YXiWv3l3Px5etvhf!P4uyNQX2e z#vjVZ{l0ImN0nKCvB^d45t9bTNvd&lC0$sS z>;qj@AC7pm^{7sqlrsx)~Pbq;+bDqXOJ>9Tv$ zsK5z(`2FC^4h-YP+)=9VRr^8J_<4^I=m%ogz8}Q*4j~0#VDbWjfJ@kbO^} z&sM0*8U3w=(LqoPy@!SiP_c1NJaZ=d;IU{v=qq*z&J{ z`{brP5R@idf~epy#&qHq0Zwd^pWrs9jWQ$L*!#y;%1()9k zSVsOP1-m(kVd%dG0Q?9@ZKDrr z-x0(;rGN&En47U*92C$a`Hh4vv6p@J$T8Ap4sm0$aGun}91*0N zrmHXhoZJ24Pa4iwLg!)PUk4MPU%f!muVUamV2H{n?7?NuuTm^A?p&F#SHgQ&#|oKb z)u704g|BM1r{-vM2qAS?3q|5x03+62f zl8kJ^JR{0fO_Qt#@OwEaoT^Cl&1_Wf&3m_mTB|(KR&+9ciHrd-CtZ{>houH$)UUzU zyh*Sn>>RPy5-qq@hv08QFmZUVR$nhdWVIOn&kZQ#z0>zqH-7i@i_{4qS2s2Sn+8BB zX=@M4B_COQ8GvUV5;$#w38}6~Hur+}g8Ln;+y~z8r=BWL-4qi1M%D^BDE_ZDJzWuj z0`5>uSSYAA**&>|_Vx4T%KEB*#@RTIICj9bD9qCT;u}C4)J6ziSJeOv8$>*|*lQpo z{O92<4L|qtX%hIYhw}`R4;{*|L23MEeAk~QQ-;3uGS*r^zrYbWiA!W3t+S7wv0+0< ze-fPbxD~UY{rV`ZQZc5<%5CE)NdK4RRyJRPHEP{MQ33Qx*jeI=5)|TN4+lKyX868x zxd2po$JbRqcO?{UO^cOhPqx#j<0z|$F}8TZ45GD&C-j%tt9S>{9GSQJPndIia6sT- zVoG|}a~vh1V}d^HFW{`-S2x#p{Rv%=3_b%`;FX1xUI@mYhs$|yXRQGzcHq}?S=g^8 zCPd#t(5Zu#FML)pRzD8Iwrf1)Wv(1mFXdIS17*m4PBAHF7(wC&TkMyq+;#VE@UA>r z9{bs&z8797JwF8+crY%0rC8A@Y-CyAD;XJ;ojE=28G?r=ZGRMD%%#;5wgs46;tvTO zC8S1qeWm z;-t$w-x_-0)Z!6i_DsjO|E@gdH53cKVqunL6nw{`#PuBM6y5Ik84?v`27Y{W5(@Va zz*|#aw;82oQQt~X1y@t7GjSNf?fnWwjBnWXR{RY8BUYYwY=OxSRt{NKO}g@4)K94Z0Sak2bImX8?`i~VXe)uE)87`PG)OSmEq!YcJU>N>Rr9R?P0Umu2 zI!;OjrESt3-_b!hdX)!{*|&E(b` z{r_o|r?u{JXqBs3S!<@`xiqN5UZFX1vC|B}tC^viI6R zG4+6VudE9D?X7ySoV9!tG#N;hTey(!K}6F8`{mgCZ|Wzx>lavKCt+SqLY7%JstziB zKZB&7Sfaz7LoMUD)qP@TeB%y-jd8dOwlBK!#pT7U)@i10ZL9Se$ z@ofk!bIwHYt|f~mMBo9sLrNIjv!5|#ER3Ib}M5zp)Ru%Kwq)CHUiL_3azW8a^H?W%;#6LJZh_Tr;D!*`ywtZ#5lr;mkIH% zd)p|9yH9VmDDtzA|Fz57fuVfPRUroHZ7%8*R&lvNTMJFR1Q2Q4j_?NPE4FM{0hj6@VkR%s=IlwkTfc<2Da$g ziz~#rtwx?Mm%SR82eBGAFy=CVqEtYb^)&=XLmrP^@Bys+kO*?nD7KRZQK%*YT&swY z=R#Gsz!W(b#x7iHETNLKWhWPOW0Yl$CmYo0gjsWy3^w6ezm*UEszFZOg-uwsPxMAj zZ17$B0*&AC3IJd53UFD)1%yWzelW~faXgqs78}AG7iFe6MmM}B{EX+GT!1wR4=~Sv zSD+3(97?)QcQb5W#{2OYkPOlZvG~VtSpoCx-la0tTk|ij z))Fv0GtcGmawhV5FH>gabv%%s_nWY`!X!`#FO0NvXUk8$*g&-zQ7Ad?8SFs+Q2~xJ z{?fx3=oV-V4Xog$ST*c6mN=ggT``ypt0O(6a}dz$>PdoN0()Q4(|Q^_rI(*@D}}aeJbZT z0$xL$NH5&;7;Jq0$BnP^R|`y1Du_B&@4)ktjo4%kynqtODBf3COAUA;GRStw`Xqbl zSqP)v1<9q8!B&NyIO1yCiuPj_{ny*yr~gz%79e+(biodlnbyuDlpf%(LZh{Gs#ZjW^DCLobyZ-e)3C5!2_J8srJ?Q&Vpx-yDtS z$0`psXkIOrLDK;Qy9?!$9&~>pArQn(FuK{YQNy5G{jxM4Spn=S8os9)qI6+3628i& zgK&6vAy;cnh&w+zeRD#=X0fYvbqscM+oeK4Edj!IR4_sXVeSFwaiFqh?tt=PcJ2YR zZL+Sj6fAYi;N4#CUZxv+Sy4)_t;lY3!8S{_+LPhRHRa7wp1ZLy=gV=!l8s^ax4#Vz{Q%4jPm>HNSA=Eq^1v>pi0;p~C+9`UF*DESo}3&i#O zd?OD1HP>EaQa;T{`mQJBN)FH;Jh#3IfCJpi zxo^0L7l?0omIU_7(vh*oxRq9T7N=9#B+cpVY05Ud`_h+6-> zFzQxe>^ugJ>c5JxHhtJ_LSA$)^71y8GUwBRNu~guF&so|0rIuq$%1>A%k*ta1WG<8 zIbRlMV=Z1T4+c9EEo0(g_~^CM-RMa84NHZxNPDAKM*dn74-t(76cjnP9<)@IVmWsl zXu{?$`{a+VUMN9|Ll>f26zg|`Sy09opiRz_M^h{xAAc11Kq|RVYy@r^Y=e?fZ)NP9 zxL^%`K~@nvP#sCMZpz#eI=5;-Pg*&Q`(s3$xI&z?zRRMcykI202_vxraXDdRv8~=@ zR08eeL&``OD{TMX>D|+}{mWkMU`4=&a_umdj?prEfd_&-nJ-OagYf^ikQ4bEkpH{N zb-zbO@JnABt1Ds@>ZjiVx*64nG2dx7?~RfyIa(SyG?xV_*_}p%VHv;Tg{ny_dTjV> zII7XUM1Uso%r!A7JvL0|{0;?KbJ8*=7uGEppgZ;e{?i5A&wwr=$^snUsu2wD3jy%+ zk9z@NEh5nLkQb>#5<$v7`2CENqvWmDvY zm0-;Ww?Dgxys`qlh8ZMp~~m z<`9b(WRVNYoonYE!vt>Ir_PtCVFTlJvL6{|p4yf4_=5{aWg$)ux`b#ct*AZzBQA^t z;MU0l>mtPNy}*zbzM3n1Sm9sZ!5)!2sBFUGm|j~TJ!maDmxbkv9MvXl#L9xf@#9s- z^YFvDVk-0?G1J(^R9B0c#2*mrRX$V}P`1j`E1~<^@vt#XRZ-0 z29BrSKHx$PHVd^Q<}7nP`U^O6UjgJd0fi?fFf+HsUQm71OzoVUs{3xvey=P=h=3x-F2L*uB6?r& zK))m($smKdk7VK$dp?Jo=pnsO`coc~tZ&MeB0Vo;(2lnoTV~j-9@kDNVpP(i+FM7C zLoD&CWlNpgN2x7OFDzQctEU!Zatx$tGr`A1imWoVoWKl5Q;Y~+wq$IPbVgS@@8ksv zL9y^_)q}+hn;OSPdld^qTo&?)_q_O5c1NT>aTbg!P@L&tX41QuNP--PK)58H9Im%X}6+T*Vz8(ua z@bo?U+^4%w*znS<|43x%pUU`~6!X_#N0I$3FMyu%b?O+0@0*>`UdV(Yva!Q8m%~%O z;*--q<`dTcKi=M~Nv`Y4()<_w(AEz}kWwHh4%V-f$dt!`KoBu8JOIu~d5mx%B0Lxa zCW_t4R8^Z*nN?NhLw8kMzd$5G5)ws<^DLPKod2u8b*`_y4=7b-R%TjKCNg}w_uMn= zaqYG71_N4L4<$4!`7xNy@#o(Bip$Dr*CqbwA!EI=w>`$e(JeuVL-F$nl_uo99730V zieGTH%ffK~n&(IbIYg_GPC1IlAOAu5nQz#8K`bQx`jq&?Zm2t`KR++eEsQ3a0qU)p z7X$U(R>LCtq(T3;umd|>hOimm|HtQ2tIT6wIUMcV$d({RDo{&w(#0VxeqgLC5wk_f zXTAZTl8_@gF_V_%?8p&p6|JOY+uMX`@%#1G34ED+9>A4IdupOq)P3dExi zcYz%C;bVChd zC34W@bUkI0BN*`F28=m$NNWF7C+ylVQHQkMUd=H z@>4M~nXKwr|nqJbqoK&C-)bS&iij#G6xW&d(*)JhcO4!zo=hPF3X z<~$0J++dh%cmvw8Ez9}JmrNiH#0JKo+2Gb{0f)^V&o6wx4oZ!ULLZXpXLmPz7m-I-?xpq5ZqY7 zv8!a*i>AXr#>X5s9^`y^#%qQ$1&h*g9_L0Ui=h%*kGA$bUR1LIPl{r;R6P0@HRhzK zQ2wIUit~=8N>^Hy0p6AByHE&+BsxSCiNSy7CnwCGx=|R<{!yONV*B@4quTSOlFqB2b?n)bZ zIaqIYKy}P3PHorPMWa-#Q-8&(?<7|L%; z)Oz9oG29+DxHF7#`bK5*6#9WivBZF!%rG!59fA9N1GtAOsm2r5n}MKP3-0vw>06$K9%9`4X{JQw z_9-zHY zNKlG1kzy4si7@nOpj|C2xk?g%x$}yLL63 z%BvnD(f8wc|Ml{u9}U|MQIxO9aE7rDHaP8DDv$L)$&vbphY1y>Kog#vfF}9#S5KrE zV)AC7Jt1&EpVis!AO(J(_Gq10DpAiGEU zEBxH)1Y%5=r6q5NnG(w|t6og94*W3pDGG{09x)O8Hiix(n`rp|Q_dvj0C1UL^zsQ* z^;GR>KLIh4HQKuPWp9dhhO_5$^)9F}47<_uH@9@DOndDYk=}bDR`371j6d-A6iWM3 zOf80|{LDA}DM{9Y&`LFE*|=$90>2RltqT%wBq#~3v6V@2$=PZS_z6%cP(VhU2LrEE zz<@u8K~qZ4i_Eyl=$9A$F=mTUsD45U7sy@tIiB585`xp3QZ{LXXkg(Dc)kSp$~-`v z$mSz5XFUbfU>wE=R3HSJRN`aZ?ksRkkihP{&vq@25$s7jjK6HG8IMoo~XMMIH zXfd1cZ!BN*MOHCz9)Qu9af=P^$6H@7;cwylDjov6dpslCcnkvueEH))BFld}{>UTV zfGHN=Awm}S|34M(QVQXDJcRifi_V8JacyxwprS)y3{#_qV{sNyth{t|{CTLn^pdwH zPkKE;XT&Piq|6`Es|p+3&qdlaLJ&gybzRCWYH_15Z+5BU%LZ-WpAJUV0SlJ^+!`k1 zQImr}{opbyXljiO%f3JfT{zCWeTRT!NJanyXUmVgH*5uEjA8aBjtET@TNL0HSchBX z2BGD+5s|m+gWcN2G#y4T=6LPvaFE4TlEgj25YAal$@tsG@V_ueu{R^k7D-xd%cq=yVJ)CfVxi>{X zXwCa~wvzF1djC)Bh$!Drx8`5>um2&*g&$q~LYQNIi6DRhDT0b<^_rCU(hqf;jA_E3 zkp#8JdsqR$5DBZl=X0{Ge(#6X*Y!Ne#exj$sHwRFBTQilyWd6cwA+Lc%{Hs(1p+rCVs>po zKNaeR^znn)vVHVG1ge)YLQv8>xBO_T6Glk-C83LNN@6xS)nfTfPL{uUtvux23yfRX zGyvb8z@}pW00we4K0Sy{aLAMz`i=YlS)EezB zBTgihM~8bv38NbNLWvsj=Sz6faGl2Kq7t6uempE%P3?KS?XX?=Fz5eziH``XV-S(WY9Vv<+p%Zk@$uuYz3 z7!OosZdQb0WRt@K{0N{wKu_a4FO>Ne4^1+4*x@f@vIY395xcLFB7dJGX!WV`p|?4R zhxq@p2|xDLqqm)6NcGM&6B=MFHz9JrGgFUK8CS z0Rn_7Ym6!^>SU+!=Vs{;hCz``2GxQVzCELAA_v$T1mGX2LIkI0aJ?a-;VaNE2s0B|qoUookpfkm35$U37E#p`&y|m0^Pt#BM1D$@`|6e zlADCG;`D}xQPChi^8iJ^`?Zgnf@|=72L`k1Z`IT77sSQRJmpQQO}@r4_WYw4g2z!diyuzPd$jK1 zGc6;8t}lWutYmTM!meKnlEYtE!BN3JiUh?9U+?;nz=AYn?c&!Ot?b2h8+fk^tXN{5cef&#imgW83d*(gZ(q5 zK5c=rd~R>IFNEWuW~%dy?;Y=!$O6sb1?Aw8e-VjaoXv!wN7J7z&#m}{8i4e! z`J{u9{+IlZbNWyHpLJu+Pfy6vJm$)yR{Auu3d3&t$`;{cwY2mzAKgOWMf8#g5K|BV z;HL=-2%{P>S{#@Ef*<3##Bml>%^P8=97i}`0qr+^6WN-3O+@EWL7saI_eJ z+d&XOz*YP*kk&^+h3zsNTB3IW*{lY`SEzd2Q8 z_)Ws+Uew!?Vqwmc3l#sjf|!vK>{X#Kilo`oSz?7{fhph_pzZ2Oaz9W*g&fGC=*Hqa z^2$}=C__4_bT8v*9|PI)qgTxiYoL8ZL=UW`RRmRf$alRnPOjD@@P;zMz9V9d(mLc& zbY7Sl-Mlp|upRi;2oj-axe*IjK_hY_Ra2GY znegeY0gb(JH2k+dxv{Hiaedbi?+;#{&eS-6INI|fqKmGge5?OzJ#Yz(AnCn?+))uy zEkp03>sKfNqf!FJ;>SMO#r|Q&C*5E@in&p>nM)N9UW;=WXg~AO!HS;u+*6FBP`N*P zt{jF700u790xEjjyF>QCZoppWwG}#8svnT3B>H-=xxBv{`J;OJLpX4ra4-<>-aF(A za6t!=ea6z)v?Z6}K)tZ#N|0CtBU!bCn zGK8hZ^>7(cqEOjdHdnp zklaZzE;xOECU3ha6z%?Tgs}QdyDBIAjT;r7t>}?2etw}`>POk#LuVg@k>8(@+xby) z@PlxCtDOGE3w`FV%2VD4<2x5Q#=s0lx$WK^GcyY9(U8%+)3_`qVh}e;c-ws6uE8X0^D}(Bw;yc+rEaUHw*`9mZn_9$HUWh0qBA% z#aeld2;AlrDzcc4IwW_y-u)L!;{Ohi9oTj^**Je)uWJz9R^o4a{l0-ILqMm;vlTK+ob4z8{6iioc`Y<)I( z)gxu_o zq&(e-<()A1?7;r!3#^iz*Xhw_lL1RH#_8p96xTw;*hkh<(kp0+?4YBUIapwWFr z`fjNj7o}HbUow0DcD2ulFKB5jhj~^Yo zm2PU$^F-kkh*$jJb)R;J&8y)cm{%TP(%03t9lw7X>2d57y2?l6IaK>Q9qaeEr+@VF z>~0+4VI1?|&vH2Oj@OPQgi70rZRLviY$z?rZwW}hDP)gl`=>NPx7wd82Y!3dSZY_< z{lkV2l`aNU#bMZmJ`*Ar3&YRK%c_h$S;{@4hJEdq&y|P$5wcu8vHTL7>&tTbj)jEg z5liJz)j{!<3IqE(AL-}>>?-oMY3w)Xn&mPf@9_UO1IdlR6rP7&-}ce!!jYMk`ALFg zz>%|uJ@A9FANkvx4T<_4?tVf!mA4L}rd;mj2yxPgtP&#d7ift`B*~ny$ z`RFPxN6_);zW)Wl6P||goxgg$y!KbVBKGcUZ8!7Uy}`Pw^$LK>Q05%YgM%1*C4z|riY%E-im2lxdLYM072;vA<{liCkYt3RO0#)| zxTxaB=MkKqLgWP1{e)|^CN3wHpa?o(YbR3sP(m&)6lF9gPE}6js!+;`hvhE%{g@Vy zk=k1Y6Nk%_F2FnE&*cJ;06cA4I8tnYL}OKenpx@%);C19vJxM;?Qd+?*Epk=N|*A z&pE-3u5~uUjob@0zJoHCippwfiUE`eE`2Wr(@7&BUuy5xIzIq?LmNPUgF=2RDL)oz zr_J3=I=4CENg~Gs7nY5J;L34|JKnaMUyS(fO?@MwnCQD zWO&)nJh+O1?cJ<$*v=2~1RWg=2^M=_u!`8HH~{&Bt(#pE#m~+e{(`MtRWCf;9Aw<#&M82%H#}^Wq%1Gh zeHd?H%Hl&#b8>Sg@6$=OoW5n@ih_|Kp=ckG>o@Pe{oUW40uHWuI%~ftO4~Fr?eAKy znAb1&KY+sY+kB%Z%c0-*BkMSl-}J1B_;L{5G{hos$NRUHdsyzAzr0KACZh!e(Eb2= z-Rrv6o6A0c;Jx1g^b`+7{Q~;~d3E>nU2jjYHqtDqT>l-&z5N}#J=lYj)=p~P`(<8= z>Nq0Rz^qR1d4Iuc9??S(x-gWG3h}@ss5UH+@YV1zzRymiC_K6}42EicWoB%C8!5O2 zg3c>Ta89~UbdR3b=@D#_YoTNJIWU8WjNrj`Hjx7Fq4r3?p2F<^E?nK8RvmcP6HSpe zt-HJ}sYZZQP}#?>XIYRGPMz#tD~lq7i(x1`#-w@)f6hNe|ME4SnoQ3>)7`Rsyl+ER&uTHmL^DE3uB-75+F%DXz=knVnWt z71n#I{^-y~*~>V1Wtl3p;yYdi;ade{fXLLFCfzpvD!;V6>Q#lK@Q0U+4a(;IY-J*! zfB3KTPnlfDPfXoG61FTtPV5!FCQl&tFPm@ZpGe7G_9G&X;9#x=`2HN++gb$ZPYwmj z44ee50LZF_nLt>bFum~VTf2dj#Fuo@l}{p*xJQyGGKEvs{`1QA0nf{Rjxga=Z~9`n zwBpbAh);0Wlf9_ntP-e`Llbe-z3|TGXivJeXj=<%{E07io+>6J)b1_k-Y>&=jyu0d zF$$&zb5UC|h6?U)h!Hy!%_?2cyu?>JhH38sAxZ$;a%BD3@}S7PL?i?Gp6{*M}0=dhGaq*Q^pU6R$AdG)046$l3!0-9sl3-+m1no1U%lD0IXUXGo4$ zU^4Vm#0{#9s6?e-o&K&-O}Ci+D_bOQeF{)2H^IUhrsxS7?cwc?PJDl~J`>XB($18J zAM--U^i#oN7zsXFNtdpQq)Q76-k5?4MVu1$qBpu6DkPX507Cmic!lx_uMzsC@*wU3 zf_G=DC>`eS5MepSKWlIV{R=$;{GkruSQ|4ZZM-=d_+e;R+v$PqAIeTOL88Cmp9D*Z5$ojW%EfHB(>kNN^yOEFookwzhmNb)X z+r^IUogY*`yUX8LGXgYM-yt!MwvGrkNMo*$6Tho&G?fk|*@>o?o+YW%9#o%G&;Cm9 zc__hqGil7@v>lFsG!wwXoVOmjSi;+QK`Pd>CM!pEL|=H0@M(iE7$Xa5`c|lKg{!gD zyf%`kNkJ<)5VEUh>(lc^8-wW!zQ0d5Sm8Y8s%gQaf zRPL8&f}t2JO&42Ly-|pb-ZlY*4M=D$NIywK{FEimTjPEoo->r3o+9rQzg-nNNB16>C&7O;|`A)~1C3;s@I|AF^Bi^V*E#hEltelG4 z&OV-%+;0U1=Cz=VV|CWkP+>@rku~X;DH0A_cpjA}xH&mgy*81XnXPrIGKd`eN)~~{ zggrcg)w*Qd=ck`oCg1-mMJ`v2kZajyqVh|)@G>0J$HY{X z$?CmKi{gW8k;5KOig9ZRw!fla@nPeX?h*lMb`JdO05cA$-t_WxfD3pm{6+^Sf*92g z#3HMASB=Bw=vf-}asqN`FhP`Ydd(AxjfIEwRZP{r@x2II#G8{gyz1Z9=(Mcn_POY7 zY6N5_%d_GPux-3HI>FXwY0EN9$HcI_sb46ei78;fA@JTfP~EF{9u+zfG=~`=e1_YK z6ZP!8|4U)xUS6UQ?h5TW!t-DVp$p__Vpo%e@o=SPmObZHcU+>2V8{>lOUGI131#bW z0j!*395>&11}Y^&)2fN^_i9=l9a)i=@ur|flS;5Z_{TUy6Z1I&0zD%nJ=;%|zxJOO zv!L&R@EVb($WkKB!I}FJHQKU9LbRi>EB)R+h|7l!JD-Js(*5Zyt*Y7a2hC`aKYevBDZT;Bsl z4gVe!Bs=5v%KWOoIaij~mVI0i3T$g{NCvd-zlBQmw^X$;2r!k5GXkTLc7rqYFwB(N z#;#$SLK}8Tsle>2bc${ZBq%S2zxN`^KV6kAi?qtG5%WRnY~T7{Cx?^s zGEeMUF>?*9Yn*|{l9<4qPhz5kcpLcIS_Z5~edkl;YLG5D- zRIABSgs=iQh~TD>QBec>p8ajiqi@QU>=0VfDwH~V5*~(`+!teauJqO}c(YRS*~+I4 z<&8$y13v`XDW`$ROYLp%`{F-g$o#|j56&GfjlN&Z;@d#RaS~=Nw#@R%^D1`mL@Z;P za$=!7_K6tqi}k=N&&)5viQ9)W&%YoUx1)@5;wz2>jZi^7Lk)7BE(v=0K zl_Bk_ACDFLI3X*2T!Pl2_dBkd9E~zA+DKow=d1?9aJO0)|nehg| zNg98evyO@wM;V1rh>*5$Zpyg#6@?>(eWb~R!dUu1;UtL|Jnc~V2&+a)Ul1YuDDtN3 zn#r`b5R{PXdv8n*by9MGZzZ4X2RQS@neuoJtA`zTxR>75C=0a18k^r&3cAzRp>yu^ zClznOg%?YC@ARHJmE6TMc-Oams+@i7N8XAv&_wwIIzP@{^mbArY!DWaG8HEgBm~!l z^u%_`!B=wfpXIdAEdZBpn=2#Vnba`DIIwC(Jt2xiuf~wy9=}B@x-&C8ky2lk)y^VE zDy!FD^I$b``8xVc^bNuJZe4q<@nNmwRV_>Jli!&j>pU)O(s=_OgB3e11^sV?`EAlFgB z5e_9%7r|pft4yxHDBesGdY%sCT4`2FE4LB2Eb`upIBp#w!8{Mu$thhsPY;9&^GIZj zu9YifCH)c5s>V-yp5*$j7qbhuDtm_q>nVlzgRECeLP1(gku~P8_OkOy9afY!og$}J4Ov}C7krl(&S*d z7llE1;$1r?%b~dvBI#m@gf`6}qSozFMy_GW4XHj|J1sUzx+LqUyk>= zz{ig7{H*-a&tFaBCh~(OCjQ=J0z`{@#=D4}4yX6Ko>3%vZShD=<5ol@wMuGcY885b z6@}DjkMjib{5C9IU#-Stf1i{3pZywM0RDO0d+`F@%ZB)O#F(Xm~tU_n}koxvIoh`B(=sYKwo|2!Rg$EbR7V& z&Mq>wUMIRlbdAYWaP6O7BtjSQC{gcBi;LdtgzgLn#Ura7Yi!n_9W+l6uTJ?&jFEIz}Hc$282bw z$r7$UgdDK|fToFKS)>T1BgA8eu<*2OZV7PJ5j_M()L=!@=&CmlG!~?t< z_;aF0c#enRE)iS*bo>z_^1EM+|LAMWcpZOn`U$-t$3eUG%krb#?^y3)1j_qS9Mzu+ zymlo*hdd9UQFY@+9{73Y(Bu<1i{}97>a_PZZFI|JuLB|B1KO!^73GvYgXHvn1NPnb zT!F`@^!@vp1$+R%*b^kdcj?2Z6_>bk`bjzclOLKX_%(qiWzX9@``#9TB6&_(H_QWr zJRu%tvvYXV#r!7VLXVulz{yRNA1*Eb_7Esg4!3=_%%AroEMtEjU-21vDQ8=4qw~;G zkqbB@tQj1o*XprCMIFizPReE_HpL)6c z>~U`(#i#*52#@3C#8kah7JHt+N6J(F^XU@(zBX!oeqztmInuMkw%zv4aJf$+e!D5P z0rZG)k)Hty8_uF%=>%lpK)NI1Qs9bZ_4vAguXF9>gUsdd0k$R+2I1Vq7DYIzsr&Ry zKqn_w9-R%#n@weZs~MYilr{sQE(?nB9hA-b*6p;bgk&JIqME`cQM9~Gz-S-p#Lz6n zR%B)l4-l*&x4WqIr#2mRKq}EDnfp8p^D5}7Ip1ul!ZH3W)DM1`3aAiFs4MD}ASxJqa+bP76n(!Wn4@y(d6d%}Tz=A(XzDW$0?shKz$(8E;4G)H%j1X8XOYr{{K_PZ&~pvy?Sr_M*ufKY;us& zLv-o#rLdKM;)TRlC_zOc$i_*8wS)`EHWuSMKQ8AyHbq5|L4HZ9ikwL7fbQkBa4qW* zp(&LY;OJUGI_5+lfyPX98qMJzE)V(AR8}cq=;2<)JBlI^szK|zg`m}%@pUwxPr%X+ z-B&izO5VdiFOT}q<>XaGacw}wkh6`3S+}Hw9E*(a{to}9b*v}x_3~0UWrAS9jN~x` zX=J;_m^H;s&%_E|_EpY2Qhw}b(|iZ?06=cq28a%};_=26$6sX&i-t~CSlzW@Mu7Pt zYXq~0XMlZML41j-peGM~=?LX~cKWXOEvC_~EbFaJ2jpeG&w-Rw<1se$&10;G4#DJk zVVSq~F?t_NpUe@}5BU00V#Aio`A8HmmuHte1Jq6gWFLEBB}aq-1bg;Tph{GFuC;B8 z(N#BiCDLwH91tDOWMGemc3u{Ii{aL8KoRPeMO%klSc4T~wx5z?u&o)HCDQ4Q3j%@a zSdV-LVxk=FriufoR`9ka)Kf?6*W@Eutdqv|p(sXK3JVGjsnVhyaa67z4D&hwIq6&b z*uUzM$wZ_O8}45pU1O7W33gu-VepN-iFe0ejz9F9to6YG;ZcUO8zJ9|N$PM~-H*Q= zN06LK;}AoP=ET!M>I{?B4=8-*2~BJ~-ID6)qSTZmun?(0*!*w=ED2ZQ9(hKGgA!E5 zthTDo!r82F-dMa^f2=&Hm#ZUn>Z~k}58t@g`o_=D_?-cUW?CVleAFyR-99IgUYiiJ zW)f+!pMCAthR4K|!&hf#;E4OtiPghm@rhp|mQDs`p|Pqf?~K$)XI&E$$dy!0!eHGI zn|!~XcmQJ3Fj*S93S+7T+Vds+D&$x2B$6W7^-yTUv&BL8njvIrol|b(d9^A9E8#Wb z5Oxeoz5@6nDW-fm$0mp~#4OCr2NM?|)^Kb|)w1DhL0#gWItm}`_(;@&>~0t&){(uj z!Gue=w7Asw;4xH$O?%9P$Fn6HEbq?yY43W8lt8s?PaBf%P12zxA^o7z9r%#@O*z9V ztuS!9_IE6H**nv_LdBG2sO+VEa(B-!;e_>;rf0nxWE{N_kID^NBls2m<4IEXVxe)o z{aM9vM~s-sKM0#%I+tv9JKkDQ?#D+RkS|dl#AkwHutI&i0=SW?sMUcwbvQvk4CDL1 zXIqC+?n{o=ua=byD>6cxY%8VPNbzBqwiJN^Zs2ew{s({I6Ll|o8?Ez4UrphkTExl> z__F*+43n>Pc!*6L#|I5qM#XQmh!3=r{tDw*JXW<)l!;_M$<6nQ=kF2N<@`35uisuN z=R*hg%Y|is<%JBv-b7xf09Gw^M)#!r#iS=Kluv^dI0EUJ{v^IP!1K@^eGq(Jp96_^ z&)-!P%0{fH<`X7sAh z6l`|N^;N~{%9h&R2I^=M-f>1e;@dxGG~iu$<{S?Q%R7l@z@;z!vz zv{o#A-8yQ@g59gY!*6_RCB{z@z%LoP9}6(QUseGghOSlkefnblbf!?a+EVFBQ#3BTczsy>q`ooXes~uaH38&O;k^`!AKk}LU zP2pS`FWgEEQ!%|Nh z5+`g-&OT)q{K8W#dy#ltYOhYKDAebDeWVn;X4+qx+5+}Yy@RMI@)6uE^??Zb?^Svi z4O)%}{uNP3d4`Zx6jBKf|2qiHzVZx_iGrI3c%&j(kBc9_LG{shzw(1V zRDStO|NUrr?KS_s*x=h>jywG*uRvx|PrYI1e$3A4f6Z1G-n>0S+ktX^d){5{B*#{(qMjANy7t zf?1qI?Ivn=wggg`4&YbHe%o`rYwpejYCo=nD%iW{r8mJDH>3rZdhm`&}yqe_#a62sAzOs|q z2M3H}*oRjs?D2ubI}3Eq_w`FC9`B>-$Yy6Zu=3d%Ml5qFOISpJn0{)3O~8J2{l&sV zgCqznjh_#5h7CR46)@zR8^C&zL$cF6M5FiKD4M!MxpOjq6A(Y(ptu(v^bjB8oM`W5+T>|}- zg^hx#ij(>h6ZqQguy0glm;JnZi+)a@BNw8;IlLX-)I7v-m{6#L!9iY4>?7-xb!`QOiC_nNs_JE>b60dM z{Pd#m*2UB=M`4M}ud1kDe>_vUhJCUnN09dZ5EG?=c^y$JhF@suVq5z!gFN?_)iLs4eDi2&;yfbe{Lt}nqNI37!e`&zb-%a zboRg-dOByI9t{f-;fx<~Sj&vPJ&4XS9h7^?diBteaRUZfUv60 zlplKHr_krV>SbOS@FI4 zmV2BX&m6R}#6gmxiB^l!BBgf_T@AKDL=9u%p2h8%Yj%-*Q-J$b2ld31nd73ToR0TMP&MNNbFK5#meh67-V z1Q;YQ*%j~1Q!kZ=UVABLb3-KfB$gWUy*kj*CGLmiao>vCE)KtU9PEmde|&R2WF%xT zol3v&j~+Tpqdq^NEix=_LrJbSkM+(R7SdFf2~ zk*_?dcj%{3Ao&feh$uPkdNeb$6h$mQAK&SmL8Js}7fVWK< z5CC}l^bc-4lyw!|ru?%#>J28nINC*xjzV{sk`t2abkbSt@>)BogC zp4*B5A>&}kQW%J#|?8a zJFAJ-S2Pqbc0cL;|9AY`!oS}28>Fw$E6WE>Fh=>b+T)4hIA0jA8u9n3MHQypHo>?P zK<)5%`(11`4xgA6p;e7Gy;CIum8%uP5vuvQ63V7_S@MD_>UYCiT2Vc<%k`81n2Gj@ z0;oYQ9m^&Q7BAID@TG zdNkU15T}N`J{!Lcg5ft^>DK3`U-(0u9%w+SU@gnr6I7g!+@s}5|M_gTF2GueQ-)C7 z4^+r6%U|Ubkl4uDAdwCnH6cHlNge%y7ie!#qS}i#;j{fU?=>~0yDZJ?1vv9^dHE6l z?x7dUk8|EuXG?!=b$)s+&(;A^e~(IFSQw!Fed@Y^7+%qtjc?$EKVW5UP{aodOMc<* zcYlX=_U$)uW&AhMi`Y|2^MJDUWhw} z6Mq+g~4FkZn3t2m^wKo+vmxd$HhJ% zaLU&lz++%rT}df$II1DMLcPn+VR{hD@%6O12^S0%Ve&>}7fu?(y(8_?DVGO79DmHa zenTK3 z+J$b0=^{lwAE~O7Jz{+xG+`qg11}O@FGs18zxoU6cTrlr-QO#!)bVA#mA~s!2cVHW zH8Wty*Zku4?Q;8e6EdGv!7KdxCr=nDLrR_EV6erh`iKL7hEO-Lyy3cxe=Nr^yw?x* zN@OkxxV|HkqjpF39e9(LZf|&#h~TT^_bN}1)+d&>*XvyQ+0Q(B+H%dzdOn^hOTEQN z=!ieumzNzzASPcDc^@|3=h<@h2}|1!WI17O^qWNE@L2mNwfCPFa~h;mt-trkp2fKI zajn(ifj#wgwh1tizb2$cfWQy2D&h;jSStj9d_m5C#ORQ+6u0?V6=>NA?}RNpJPD*7 z9`_*6XZ7PBFsC`6(22e2JBp2N!{5ilsNxLE{{bY5I6NdELQO%fh1iGcWy`Zl;lZ2b zyTA1sRvYU-b~cwRt?C;1yF<}#WnDi(q$zY$1CqfL88*J1no2!zu2g$WsMm5&MgV+Z zgY~B1NM~6`&5zc_A~q`}L{1}thgUo*@GDvh|9}XXsJF0o5+6GUcIS|=g50gV$k`v3 zvpEz>LZQcO`w6H_Jy0eX`@7hWLIH;B!0BdsiMSn^|BFSMz@7LnF~|;QKp1DviO<5j3T>`SO1`(*gLcvp`Hq}YpdqH#df?o(<*~qqa`W6n_Cc-R< ziU@pFcmOy2_mgMKE1rW4w^+K3RSo_a{`Dwg+ zjLUE#DfxTK1E;;@=D>4sKH2_XRL}UZCjgyBpi)&Rfk|eg$ggXJucoCYWz);Vxn~7a zaB@74*cm8Cn4B#H6r7|eVXLdnd^Ek}e>!^K&r8q@OEG5~@YKAYcLqBx;wSVv+YS4) zi^_x`o|!GZNbEzIScnu5DDXU+4PQ7xuLLI8xpP1DTC#U(AOHd@ylsfA!CZNiBJf{> z3deTD8q6ZhUC2Q%I35tCZ`_cu$=pIO@M2E>A@U77~u2b387u zdf-~c&21lT5~*~%4>8AwMAB-Lpx8mE_5h<|)gw)^;jg|=aM}~DuCI-fuXPG12Y;38 zTZxIxo|6A9`R9_qeCK~Q0r&myw+T7VyGr(f8#!DQ9?uk+4oYXe3^OQpO71oS07&6! zIJIz1hf{SEGF8w0>*a~pe1VRw0O6k6{|Z&YLonpAgA}hHYu`}9|2ATTeY9Gs2DpK!E*0>ompBfvb_f@lVyJVU-2LCX^;DHFJK5q z+2JDeZ$mE=IPn9^z)K}Ow@VpOeU_MKWMoMnBvOW5LYO+&Xa%FBeKpgPO^F@NM7s+Q&^eyA^mz9Vw;r_*ozWUswm&OByyhap{?d8&Au zYy!30x#0wPhYR&EvVM5#wUyX>W3et!of!nbn0Q^P$J+wgL;AJR#*>~d;qd+RO!;w+ z^awkF=uke4JO*tMuRbJeinGM=`9XQ|Nk3POadl91+L6BxN8k&F3 z%SBB;OfPTwC3F(-A4JT7M$gBCn-3!FdeENJWx5(lsk1SvU=`^wFQ0ogm1!nzw401f zw2J-PQ?ROP9Q$sNy$as;fzT-w09KHSpenrOLH9Qhdz7FwKj`2rq+IF`PQR%?_#zGp zbzguV$!Rdm+}T3x7j(#^#+o>7 z&L5#Iz4+3H;==qC2CC&4ZOx);L}78NSg`~BDXF~hYe6$-=tw6zTxrAyguJ;Q(T#v5 z1&M2rt2iiCKYJM11FVH#NsDErJw+xo(#+2;a_f9WX=+H0#~v(@FW`_2Jr56 zFbBD(Z{5Papn4=8?+7S;Yb26BJce*1>sBys%hIyvX^~SBJ7f_!>D;mhy-_k~bfxTu z1$G~x(Z}N;QXr;7SFA=+RTAmZXtm?t-&i39;k{X{+| z9hM-oqjbwFvqET*>~fPoy#*8Y;lY(8sh^)v*#=_LenK{VRP{b|uDtwMey@rr zkC?%sl>BNPWsp@r&yY0OY#a!E7xVv~(&qcnD>09WA&8qVI3NncOOJSb=SM#(krzDxSX{9`!|?IXmM5OD zf%$M2Juf78zytv6nG@{7H&aAz*yd44r5-jTCnJ2g)!3Z#u=shoh9ITF%$vsq!F(P76(HaLKoWWMCrLOJ}RYd$Y z7jCe5736EJHT0XE-JtZ%Z%=>c=clIz?rA&)X{vZUG|M3B&jbs@sQ04CnVxUJpi0pA zk_y*gedlDb<<{5J_mPo8!o$Oo`>!(9?{NV?4W7B@ndZ=4>ihbY&?hS%`UC(`^0HFB zz+`A*!+@PIM54v@j=^-292kEgyu|oR4;E?#BrQwj(Ged0gKRE+_e;OY6N-%G*)7$u z=Eko9OlgdK3(ps|!hZ8+m#!sR9yJW`KgePaML~^{6i0*{X{B136~hdnh9rtera7Bl z5s_siIpeCvij`*(4DcMcR!c5|<9yp!|a&8n3s$C7=|B%@4 z;Ltmqs0tEb5*SpX(n~V~ti}sjQ$pFks5;3tN*n{DL)QHdqBN5+{kb1vy3F*}dKM-ZN=RnvRp*XK#S@k@#W7scAr44SP1k)w%O9Z~jm;=-l zg`L+D6*<5QrV)zoEtGrGfWwNSLfYdiUM1`BGL2M~2=*XIrOcM|^GkkR`$K^yw>3y@ zl~_^L&KXJXZ_y>Rzc#xVppHsZQK4^upS)(+S|m$W{PO<2n%s<45e`fwB{bmq#&@e| z_UIj)yMgTTNAx`M)5z7}|6lX}iYfiP`R3ac&S#O<6xFWTWIz%7gaV%ja^fFiR@JT- z0l9ghEP8VsCim9;H%QNpKk+muqNl8r7Xcg*ThG_jS){6IzUMt7C0iTOGXMS(mKbV? zL+ELu;1XcUtS_mT7y9{XuA!d*ZbyAiSeirpwvghWBR(q`+7M`V;9GQ5j3Egth*u7u z9}7uTrkhGRMB+zd=m_qPe>eWX11Ea&hwuIt>F$8Z%7h*IyoiKl5=Mx&Pb(l|9WhNC z(vgv%RNznny7>C2)*#=CFNov4@UP!^_mA&PI1LhD{4SlVe^)!%v<;b*Q>OOAL%u>A z3RY|<7Wuhy(Tn_CLc{RX0x9y#(j*AZz@ltDMZtaR>=F8Ed^059v?o(>BnaAKs5Pz& zC87{#A&Dy?t>l61ufq^O>u6%%u!nCLwDB9m!wr&Q8$&Z3ILY7q;$(Ys2KdV^dghYa$>FU8Y*TyFc)y#;uSSLfF*EczW^xp6|4a1Gt;p(^-v8Jj9Z)O8LNo1u! zJBQF>27e~mo;+LXCAkABcQ_|q238DQUN)Ij%B}cyUB;c0fP>-_)~cZNQ&mf_>gUv1 zyzUnZ`YmYrDq!?sT?8jgB+bw^H5cJTIBv5-wZET1j?X_q}N!k@rd`{^3{1~^$7ZP!{gz1;~^VxFMGjtV?%?~3L9_AB24rmcax9pE@c!c9S zS77HEQRzoPzwb7}mBJMBfU$rG!uWL2eedvAa=iODH3EM6g&zz2T-{!29bmw}!3_Sw zOMHRHMy9B>g0I2SeM=3Zzi}RafGsMvEf3`YdvUXEI`$=cLq^%@hy3`f(+~Vx42I<; zl8j52X1#y}Cl%AonAy<~sfHgHIW&^bp{buP8=mch5>@Qf#P2tbF0S?7iK19p=OQ7& zaSk{G&U*AgsI9fhtAv3lJWXRhk)$IOZv$oyA*6_f0)5F@2u;d~7reKhthbLpTpo}2 z;a&5LRjRpWxsk;k7&O(0W81Y|m^ToOPt)IEF3aWF)wNit+TQ3hj})U4J+1Xt?lrzt zd#OZEqsJa8k3Ev+i>hnY`8lJ1$0Oj)0L?*o=I)#UYtRuTHlmGerdTCy!l4F-ECXZ? zTbM8nw;6EVndRjbPs`S0)aFtY~ zUmaj%XA7=Ql*n22+@3jCUVp^fvePkyMywvD1k&WN=OpYQ?GTW+sPXdTF0W8vGc)Te zuAgjYO(`-@^~YL^w1jYjo>OCQA5aR3)r!7JS01RP6>At1)0-_%Px*$LV7!?;Up@5r z5X&Ks0~+94#jxIi;NUGkozYaWq}4Tkr!%iU^CP0JKO6HVjhatC^H1mdm#A}`eLDDT z&z6@Xg$@IJ6o9{6e(dD~bQY^1QvX~N!RCI_@Swe(jg4hVV|n{Y$9JZ%=BK=v(&QyX zDGXEd-uCP}rAY^yHD2lOPs_(i`Q(lc zr;s9!M=a|VO}q zlemR_Pwp)5Iag1Q_u}}@ts20L&Av*+1wl?_R|803q#ZWOKkKWyR+V#pgDpcTHC~$Y z8-%gxEwx!680>Tq(4H^x=W4m?V@{*QOl)t<^0?eoS ze)>C4_RNIT*?SqE@{=^c7o zs+iuAFIoXd$|PElsz8&hQCk4j6BSD0{M8(;WX@=LrArzu_zFr|?}A1k+UvEYe+k6h z8ien=wzV%px-1t!%2hN?6URqdyi55>9{&69DOBGNtA&tI&Oyi3bvr^!BATrgW1jKq!ZgW@MFMosEQCh7hnf8u`~LL((`(kRj%wF&hD$I{# z<;kCPSog<^Ov3!y@~X4c0?aRNiD?u9qOLk8WEIJ`7a#ZL`lll*wfMffiZTxd5w{ij z%ImLt_67M%EShSGKr;>_rJ#TxQxyScSUVm%^Fzy&T3du)fYIm4tBlghmz;Re{~em3 zf9kpTvmO0U`Jo4R^eP6>E|8JE@ZNTh%6e||9yxZ3LgsQ#ct+Wkufy{GAevl>i*OXZ^F3-m%U!EnX`dGaT>8)^Yn zD@R`P+#}_z&zcquj)C1Rs%%0PW5`3W?0Fy#EcTxbydFPk$IR&)(H~;bPhBBY(8zjg zgEo9Es{0nv{reGZc?1Zwl_g=C8Ad2u>Vc~0jxkjgK=Ct8dSbxU=rU?*y}CJZg4@nq znqKn`lh3{=9DCEiz z09uGEH4@dVHE-W)ed``QRF|L4t-ZQc8P*0~BBl1Is}M@b6HAo4mSZR)<%uO&6u~gH z6(Ad%*TlqQ|72yiFu5(5b{k7SzJ6)mC_4{9DeXyA(e95htsSPj!du7x!Tara#BejM z(#Mpn%!^+13TdR_pgld7FW(AmBS5LlqBr?iQtjk6rX8QgCSgIZwROZq--Mj+G$X=!h#v*gpX; z{Mze}8y?x|KV$d_iZJ)CO=6o{wB(+hIpR#}G@+{?(mma<6z6p(gx)*+zHKK6pl2GB7@ZkSBt zJ7-jr;Rjbd`a(d`h|doqx2HMHRmWAw-DsK4fk?=v@|EPH-Uw5$4{e-UqUU@O?_$3l zLFVf@tqgySNUwb~zWZBW@EAn%jo1#g%h0ATM>%q!9XwY9f;lX#7qRO^M7DGkXPzet zhA;n$(olNiMTBT^mU_fXO(R&M;PPu2rccE)prm1LnM4h|jY*S50Qfp_0$-nolyGqb zl2)}s_q=NbP>8d~jw*-8vGPKlHZXA|DOPLx%d0Hg{1R0|nNcFxGwEXEK@D$~k+&V! zR|vC1_jz=5q*a#4b4DT#eNj(_zkv(}D;Kk>l7|U?*lWQ^C$xHrWisVr1sHlk*?K=L z;SQ3*ti`|Siz|H$*bpN(cvZ)Dp1DLWF6bnr&rpV#W#~ii?z742Pj}pNk=Vt0+iCo3 z8hjI_YH&W}j);+uzYfi)Lcpmgh!EvQI8%yB&M)U_RhG0WCkcR@tNZVjL@O%dyV{!$ znp(CR(L6;H-y47H-y94C8VG-HitOG7hKxTZ7{m5_-(e5Jg_YT^E9ety;xo^#(*8+^ zwpr2Y0%}L{K~WMg!`%M2r=R)y>l98ho8BZ0@eQ>bM>dTk5`6hufyROGO|G~Y(6H8s zS6eiREsc%_yAcHGSn%Yrc*hEza0nj#v?0eAt_;N_47Zo_nR3(n7oL+J`}xLqmdoOE zzLw-KfO7P@-*G|Xd{ov*Nlie--rxchk)u$!$A@s9z8j4V47y!eAO8UG#ph$vu>8kw zO+%D8O$i0&gJ*Gk=jC(d(Whb-yXB!gfd1@hkMjyhD{xkpO=Qv^^7ro@iJWILcRJ>p zBKI$owAj4^Vb;WCCtYGWgnP0zP^oAQaayR-6|^^1X2Y~ys}Ji5-GN2g53c4gBfns# z&z{Z4VNRxJ{Uf400RvSOYj6}!A1=hazjpq7naLf3U!bEwPSo>OGbp7maItU1UIgNE zH^;uoqPAW$PT(I(9+qic@h~>j!u-@Kt{d%iWBmCSDh z=wv33*y53WK{lr2^h)z7W#40;Rt8 z%87ISX*^_azmw}NwG3qupsXzvlt;m6scvy3E?0Z-{e)UUr9+6J1We69Hn$~_R8FIL zb^i((PBO{9Ewy+dil9a%p%$P7h_^QKI-OvD!}H%^gYwKGN(f0E;t}~9>Ye(77xNo9 zyAgRVl2`1ijhwLS!$Sy; z)tvXbpJ5uHBnHayl~l!Q)lso{vM>ETmP#jL{D!ZlGbhc4#2LStcb&r8u95oqo>G1g z#J_v`;puO@Z*iq$Ci$8B7iLQmPR%7Z`Aa1z;y}6t%h^%ci#AHG4v&}(nS-b#$EX;E zn-A6^M1ne^!#xmzlUH6LvhIl#+B8U?i4{eXxr>;Tg{=@>px^PO{rF0r%Hu!=c!}5R zeAHZYn6N7y5Z-5l+#B?1k}mVdTLFQc7#xwIW1`a=<}*3r*mG*eT!If%*&@RGO4 zVjmXqID3ATI?if7QfLXh<&nzf$$>AZl?Ut6I1!4^LEPtkfbK$N^10ujhXHo=txM5&eDnZE=wRIfKwLRQOGBlg z&i4a=GbAsy0hlJThwP&=vIQguMG?O5^O3W<*UBZ|K!6(bMjTCnyHI>y4E$ME{2=|- z3A^~uyf`=^KPo>zlj1`>mocH<<7imiK0NK}vw9k^ah0th43O_IWO#ZrhIDbEEaqUa z8(}sJOB(WWz-185c{KNbP5ZyBRb8TNK%5HRcw*Oxb|O!gS2rT^_K!x?9*nR3&%g3n zB-Gg$%Lu5wI9qa2l|60jf-~i*C-dpm0}|f5oGjD_R&Il)qWz<{Uax6b0VrNme?6k^ zXV3k#{Pk102Y?|%DAwGGLWc*O5#g*54F1Mo{}wEeY%a^W3MQQx0bUF?psGOqm7ehO z+p zXFKO;p1RWYl*jj|lC7TI*QWtC0mc(5rh3aPkJn?dyzq?wzKZeWk&f>ms`f?v5QkjQ z&3SJay*LQFbbRMoG-r6&y|r>-cGX{{V-=lSJl{3xHI2;<;^zT>H+ZSu#A*84U#Ga~ z7SPC^>L;rOe|l0+Y<%6XTwi-RdOnjSkQg#vBqiqsyHjPkg|nZME@9u znB(k~D>Zi`MV2u3{VFR_?H(Re3#HvuO0bDEtrO%yYumeVRp@sC)}S!Y1@0;Ied~61 zpTH=n;aHE32m7qt_MO=g>rKRqkj4Au^vyi===TA+osa`0;_B0;QYP?HOLrTf0cr4$ zlh;*&Ph|oqvhxP#u%KHS+IzU_P8y1Ez~U62qU!^>NSLK-c9l=c@h;ojm_(Miit_aR zVy*?E&6Sy{tk6)q!MHH$ozyjeZjTMbNYx*?7`!v7`AeZDKQfC3;ftJ^rF>_0#^gITx)Fy<(_g6PswlN*{8}YK3DQ3el~7 zj4AiEjE8zCax-FQf2y~Ck4^D*J}~uYmb7yU%SiagjfVA5ht z;i1p`L(F0F47BfQ0Wz1UXJd~=BxZB3?Bt>-!-0?3b%k=iNkJ=$fcFnhj*%W@8O*ju z97;_xYI8Gn9{*NBDnI!Rx&F7-y>2sQ_rQP8m0qBGUno;Gf)T4z$wXsMb~>!7-}DL zq2?EJ?GR7ZQcK}V*#-M$-CG3bMuC8?)Fw`e=sbR-Q0Cp!k851>x89CD?3H1Z2Oo{L zk70s@$=1&#!n#O;(WX8$t2W&OZLAtPOaEBjQXD0{$nq>CJ6wfcNuhhtw-!<|-w@={ z1x@*$3&)opEn)nm0p;)_s_Y@1$ynbs?s>fbT-o*!`J3|EOP+?^2TT)?si8mw^o4Ua zS!uLXRAzWktSTk#fKPMnNN1Cc_NB*nAm56j2f#$3Hxz+e4h;7)T{Ash<2z(M&pl$1 zP0<7ahE2S$ZT$PZ@Jxe4-Nw2)j`Td0QIhX=M)UmChyqEYbVaFPI6psEE@iuQ(w2WJ z;k;s(kb6`awp2%(OWySx6FhQE6eC@}9?`DIE~ zp%FJQ5*lN5nP}yzCrC*NB1nEYzH?FFgnTJ%WJsb-g)EZ7YhGN@gjYPfavg>LDyt8c zpHJasUZaD17-M9NK=Lhkq5D1IRAyIma@mXEt+5VUtkip$wzOv;$A9{XXAQ2X*b!8h zHqpYla4=Pm6|xvvsuS#6%g|Tpi(f0@h%Xf9n8Jz@em}cMx#PfqcjZNgBuc71pVM$1 zf2#JSB^T_G!qE~DV-?B)W%Vj`iKm*w@PVv3Fj6w=?$psQePde_@=WY(<(zzJ+RsnN zdGFFLs5$hVf5KCChGd-Hlk#ewyDoqgf?VnHmDT)MPTT%wES}1_28WS6Qm9D!fIdLE zYoMH13aEl=6BA#fQ%wH~Z(wP(``|=pjD4>U*t8%+Hd2I1a~)HKF7I11aWOq)Z^q zr3@oDgJ2XAPVG0n*(axGwYYFoqe@#x?I$wBm|47GXV34%FFsu@fF3sfGxvlpq2}vZ!G_ zE9Mmf9;5Rp6q^M(XYA6_ns*bxaqOlbE9$MxiyP<|Bv1HPi(C6AWoi&Z*w};Wn&a;= zPHd;N?56dFtpKdn2t3KVH*Fn=e(@T$kNZd&*k~H%2M598)bfI_d??XL9a=cUf`_&Q zuu6XbUi+>gZBIcL82NTSfms|LNh63O` zRt*ab*|8@XHC7HH!6B}-*llR@Y+Bc~vV;lauuZBH6&7hs1GOTzC?(bQBA%4Net`_D z{md-_J$b!NT9C+q^_Z^8oQZ(r@fAYdS=>O#OQcnCY9}4@YN4&K$U?qNh4J_e?^Hx; zM0?i2=wu@5<#Hx7h8UAko=?U+m!(6y0eTI?nnk2t& z6fr(jkesROq0i8{5Fs@^$SO_YElm4ZqNz)zAK;Q28A1+GBzF2I-~WQDd77!H0o|w| z!>J^uy&oV1L0ItV;M2Bi4O&2c7hr)>NwGLl;>7ahhxm<$o_=x21t!q5Jv?l?zznIj z_R5mm;51o8DAU2Ah;{E%FS!zl@vAh#^KEK|LzqE%-8r?-m*<~nK2mn5bL0lSmz30#b&uyuan!Oj@AT>eP^XU60ze!O^u83$))$D>BBv1MaQesO0?) zZdq}RcTR0^O!o<@(PHSl$e*UyN`qCDY~`@c&;vJ6O#FL7F9Ib;ZMsPvx?syPr%cUMV_p=;Zsr~`_K3F>%g zU3Ru+BRw>HIzU`C-kqcy6ub>bbjwgF8^zGB|EQ;tYGAf$bx9PD@v2=e;b9`>BaX&a zJPwG20;AZpY|fDIG_WUM;{~2wD}8T@fugd}6|$!)%xe7#<<>TN70?Hz1j@UWRI1X7 zx)@?vfGdYhPYjfdNLw$F6-2Suz?#h>9n5Ru6rhfACydy0<^S*?X)?Uxr@mC4@t@C@ zYyNY)gnMy>zYIzRd`Ov)B=vTGxoNuH-?D@a?B z5cbaT6+aDD2+?79LFd5W2dqG0YYI-HoxwaRXf1pskht}D+DDo+53T4(-)WZ?rCo^5 z`xLeI20hmt97DHP;63!0CN@-O__Nb5 zeL5Ck-;&Jn#2n%!9R$}4{z3=v^-RsZz+(Bgz_01(w>z*1S)ILH=KDaa6qu^3>dm$5^SMxh zjQga_dY1107of!X^fZ^oS@OflSzkeR!QK>d?#v_QB@aPaIx#*b^}lS_NX!ez7I7;o zfasRw)d%u-X)b(J7!;S6yqkbkMX-@g3AFG12Tt2}zw%4!gK${_h(abr@e)jN7xTMc>EDy6>+kXzCmEm6C*wO)wX&x%S|+6vp6bh4?TwV) zZ0?N+*pD_GXd(Ge$3kR#J;rx_UVh+NQgCFrovU*dXEW>Fs(Z=$>@?mYB?&ka{zY$> zLY(!(#;{aHtfJN4T7p7zZVpf2kw{V%40-@l)QNcuBj%Kk8wW)-2Thd~co{iQz`%Lh zB>t$$ENBLVlWi7>loyeGCNGpbs+}H9XnYC2nivY%^zP~BTAg<}c<*^u_C}E8?D^O7 zZf=5VpTLP)G|^&jg&K~fz*R23@J!k98ZDPdOs~No@7)J+?a*I&wFCl=KxqR`Buf$t zM(NWpe&O-1Dw;wpQ0lIU=TNqp%?Nfm!zJ?7{YleWO;S9d5L{ux&L5SfVZaY}5F&us0rq^phCf{)_z2srjLI-q>_99- z2%BaU90+JWc$C1LN)FSg)?Wqdfwhns}+{r8d$Uo3r{*V93rAMAu{Ih~_Z}I>4 zz4O_@nEK1%*RV@gg%tGCK3yXGQW*3|M~acZ13lgc zwm|wdfFsWQ&fv@y1%yjM7F}N~NXadb=0~0S4J7M(r!pbE0M9I!LHK(c+n112%YzUX z>$e$9IoZ&*@bb--m4MH$G-U`#5rDGPt;cvKT`=y9|AXgDvF2NprR97O42h#LzVnOn zWUd-8M=@?WiWsYe3huxYP*Zp1#bl8_|7^`z%VLK`o|}Ao5bKmIR@8d>HA(6$hFXK zkkW}p;gcjm9lq~dvvF3JMU%M}HO_P?B&0eFm;n}R#HQ{;(ebUH6v5i&g9ymC;a|87 z$a>~|x?m#p8kQopgn1YNV1&xLxAVj!uTF=*4(~V3-(vgi5(GF>2Vt)b`w@ojZ^v)@ zBDShT>E*4U?jtg@HjWxI>aL>ivZg+-X4E^KF_m7l@aFi?GPyhCZ>SSFpRn2TM3sQhpFrjewQxG&A-OkYNbA<#~fCyfM5j{swD(6USNgoI7nb^!`%n@k`Osoz+ z>=hwTp9xNOGHL6mZR%1c8w9P|-Eimhi!u)0JmPr=L|PC$UN^#dBf9I#IPn}VK|&VBNIW=YU0IM{wTtrh_tSENNUX5pq)BpxuU%oOF;%=3ZEqH zKyq}*dMX_;T`XDpi{+vxg^XKi?7?-#INEKa;@tUO#pylv^X2=I=r7wS7H5!>GLx z!E~A05BW3oCt&jamx-c-8C9{Xlb5Rp}mcOdk zeeq1b0-<`{Du7kTIy;JFr!vQ$K63db>I$f7?aldD%M$5N&s@wg%G?L1mDtaheo~(B z67_rKIsbG~ZrkGZ4ga(&q}f#3%d3II01hh{WuTN${`$F??{`oC1j{7Km?A`91}nGn zl{U%e?Foxh{0{L%HXh0J=IQ%>lfbOG*jjI93q+qVogOv$1ktgt`ZYi-*i3@GS=^_@Rgs#W^(XxYaB70uMEV~=2+u;}Xh15`?B0HvUX4{JU>fv5N+~U__y&M( z7`c~_?UkjFyD$ujbxGikr&r3uIjlBu9}!Qynpm z7@-;wk4ESvVvR};9)#hlQuu_qiuvMpU=he#3RI!EuAJ4>O{4)@q!x%U1(Cc1P#TlO z)>qzl)2L)WFj+gYhL{~q?Lhx>nSIV*XoH}>=SdCQu{Hh1%5on%mif!Geglb9%i1IC zadk8*ull@4$~YdJ$`C?Z8JJS!?E|80wN}V$DA+_+^x$c2UdyNC@ONIL*O)-iej{OI zryWpQo);rRx9u;lgZYWn)uq+4)c5zGb6`4sF6t?PLtBUCw|*SVCrHhAz##jm;N>PC>Rrw%deoC5LZ+9aou7b* zz;}ib_7LKJh@aHXHbs%)Im^BPK%eu+p56gD8?ju4wYLIn$QA^tMievB)`GX^?n7LV z^&;D0F+?!^an*NtxC8Z-3Xt@K(}N^|cPmtNkP0L3J)$dYw0+9vt~3eJAHG(8?kQbF zAN1y;#12Q&R1~=((S{I!5%%z1Zb=+n1 zBlY`Q`K6y&AwE%-dNuKE*ZuS&2z~S^UxQG|@L(7_NZ{U>q4?QQax_{ck z(e52Kj$vgGt!N5AHm)4{q1IUX_9Nu=;jwL4&5F7tRQo#{kb2xSXN#yjxr4EDB5O~8&6# z;Q^?^#>3pW8X4W0*|i>V^~l{XHf%XicFlT**!aMdqH6MbIk-6r>2;ID5$$t5zZ4Up ze)kTBk?9niF~B{0xP|g_yzweI@m{7iU~;1{V#(nE2)sT1fY5R`2mU2Hz3yng zR!|j%5JC&5^axuX&|Hf8*s2r-gs*r1oihH^nor^M8~I|foa7XrM_eHT{i))3^SPMp z7@4*SNbkz}(vQXk6ISXlc*s7fT*Z{Sn>K)RMjh%5Y#7k(No=n9?QzQQDYHvj_+vX}? zYa2n;JpRVZ`ufky!{;7)_~%iXx=`j8JgPN34FCNc>~#K{V$#S4Afg*hyIpxEeer54 zfFW!&IdJPRED$MDHeMRM3_i@?;&e%vdj^#^3pZdNF-C>4Kcfhw1VTBv%yLFKqDPW@ zdG&=#Qx-uB9Ho0AZK-m`&pEeTE_iD_E2i14^k?smKNjwimHF;({T<+OBqhJ`fqS}y z)A@7><8rBtt`Gbb%0&DO6=LrfWJxmFp%%*D@`Np>%@$D1TwEh)8qH^$* z$`EMQPe0BJ?-TKhUIb55UN-G%CX&Ay*>Hgmnrz6niZ;ISR)Bgf4lDVrv%Z3&!|S=v zYPA!!%lS^1AU=+!z=E7AzT=0GzSW&Rwjd`ahC)6GQ2s+dE-(6S(hf8JqPi9Imlql@ ztNUr74A-s*Y0fgrP4us@$sR}v4@G7BeJZN^gxkOL(m_+DhfrkBZr}=0TUxwHC}-$g z?PD?b*hXFtl;NbyY$K&OX_N*9Kg{*rvbMYu*`fRQPU%$nwHNQ0R8P6t2!)ky^qxI@ zag22|Nkm!2sPq9Fr7}QOQUo#)9Bq$@KEb~h?}V}xA6UJ}I>04_B0_$OpAxrq0%p!G zvP0y^;D*1Ug;eo6q=!4+DL_|ee7u)S2s;iJandk_gz$OU%Zg`z5WWS;X-o%q8kA|=h--p52tDIPnzXJEYQ=NIrXrBTzb^bMYdb%E{}}qmwJQLKc4B*Pt7M{G z?YF7#%|10a^0YU+=PNMhJDQcUJ_v_Qb^_QI((RsutIYAJDVyCLu&0%D3p1&Mpv0no zGycXKs81CHR*_eKVR%eP7EnE)hmd@5Jjf8;k4Y!lMer?H44zSXrPTAmWMPDWcqlEEC+ws&FOqv-wwG}#NM zMFJnlabFwx`QeC~v)r46BiCjdrYgREr2Y72n8xc=ghchjG%2$GpSL&dk^9KbJwL`^ zE-;vAw%Q~miiClgH)@G;RaVv_)~3oVQq(f)tUbxvR0|iW>FLEb;5)G4i@^+R%o}PU zDT!)rEvdB&C?>zx{XOx|=R}mOZnxSOqehd=%>Np3;>1~=^BidU!mvhE$N|0S*Byss zZX?{7VGJ9F2v77Bh9DFi9ylc^#_eW)-@F@|ZJuDvbynO#YNoBo0>55NXtdG{B&LnQu9XdLh;fF18x^rLb`I0~QCS@#i~f(FC%T9 zW@ zyLn+&XOZetTU=H4vRxGowx==I_zk|Znqjl!;+`CX1P%hAL50{%BIF!VrO`v$(h+yHP-F6d zdR)Hhm*f@O+p6A7(>sCoyHtWPDw*?pVS80MQou8_evoE`N@@B&qE1j7ND`~mh=-DB?s0T>q2ZoW~2eth9K#Vh(_IG@YV1Vpn7IUU- zTXmc4O`fLym2@?J=aNLQn9$WgGNF~!&J1awLeLKbks5Z2z?r@g78^aO!o&nuhh$*M zkRqv~anrNQv?fNkD7&CfvU*kEO=7SQwtX9-J+`-1l9HL^-Wh?ms+%vE$qygTh3tFeoe@Bbf*odAo67 zCKa@JCI_rEc<(mJzhC4L5v$C7Y1(JRW6_Dq9_VzuNR)IOdP+SmZF zup>>LBUOPs`Xy}{$_<&dYvH$|dyA_AfQ~X_z$$(OWFp0@=TTWL%EQE_UA_{%HYMOSr7`u+ z@20^$-#X6$rb~sYz|I24M3y)NRQ(43fWEtb^d87JcJwbwVGlMo6-|Dt71Hazbkm6t zlz(~tR$7RPZ4F#bz595nuWWJq4OMRfy>dDIsq>`+q@3cpZj~;?tceX-D8{Tl%Yb5U zQ_3sXbE!&j0iIbw?Z=KdT%IIy%R^u_l+?jXL`=%+VyH5KLV*Ji6ZkCchk{I$SST1OrO_}9Bg+Qc zT)SgM(QH=&5qYGw15=FbC)qJKMG@zv956+N`}Kv7AYqv;AwTc}!TrMLf)-r&{Zn2sSc`O2QyfXrSEgAl%-FS zYKoDX0lGcuiFrPSA@>sb^^-9M1f@10Y>&BBPP3#t$x0tYWr}JktK%k#u6szjJ88Zg zxQ6u;qufBK;FR|a3a%LO`g7;g3!X3rLbd_kiU%jh%!he#A0>Plh!(u(vhC&=L4>;$ z5yiO1oboy39h5?3&+tsh?rhrENBn&XydfqqzDs4UHX+#0J=raBV=(5B(~jc0ekVzHMZac@EhYo@g3%Rx@T92dfoK|Zc!eEraQpcb zXv&tzw!I$8jbnPf9B0sburYX&=o7e1_#UX2515cwvbpNLZ)|nxaGiJs+yCnBFp?gl zc=zZ7dTX)V-aC5TQaLs?K?g0rCmTO(Fb{ttP|BUbcivEden*mhT%b_@KnwZsSFx%i zCCR&$LIht3;~ghN2z z4BdokFx3JNc9VBeaD{&K-osxX(N04BAOj{bs>NWTeWsY)iqA)D^-D!3(AXjDDTw-( z{l3^tyOrbkRH3c)SR$8-$9XKZ-^(=gLPT;`=`2(H#33NU5|}^Y`mXefVZulDY5;gW zHr{(VAn(hYvcLm84rq32x-641lP&Jg4ufG3H2#nIFLxF2V-Icve8YvRDVt#FJn{4T z0G161P7f63i)v~tJQ^5*ZE0WQ!3JHhAG8D)Qsi^Ggrq!|mr@`jZ>C6UNuNwoUR?$P zdjj~aD8GGmnPwGj=qBzTph*uTPDL8;dYEayNs&qkGLv{*-Hgjr84A#b@)_NyXLJI(**nMZj8L}ZM}`dzx=EXWy2&3|Yh_G(cyJNt8cVNwYQfjwLwM9^ zl=s?;mOQq(>2{S&6~U4^%0TfRp|HVinpK?f%}GrOuH=VTRW1FPMtdv6xURcm5D5NVCZ!4`~7rTOWTAG1SuxR!(AC+HwAsxgf zj4`7?CNFH~#m7z#CzAqP^&f5kixTGIJim>TG)_pR!z0k3690<@bY+J<2Sk zDhyjj4I*boqO7nEJ#4~lAiNahbLG82nr}4|=G!C2xpU5E<)BrtVTW16d4#zbSx=&h zdpl|?Q27RjpvKuH%gG`Y(LP&(P5W5F@cYU0@L=LLb-jT;pCTjA5>?ffkD@j%{!Ij~ z8gY!8az_G{s<2}%dtE5kU%>vv+DUR*wB+2v^i>XR<2`%T5Z*!6uUDG~{5`AX+}(b< zx*AH1R7lBIlAuA=M^uz8{2qkz$#O|eWEQ*OmvU4@UL#MEVwiIHBDZYR$<)s(eVKgpw`8$F66p)s*M@{EV)N=cp<*G?)%Cl9|WBx1) zLZ!ZCw8qH{mFN*WmuT^Pu$aG8MG!#C(4ak@xzX`zDOPvMQ}XbE0oFl-|)Fc zK&ffD=WJN!A7uLoj>f@1S%!z)Y$2pWGPuk{>A{jeojUEVmlIj@S5=m%WPy*N=E_p@dKCBKLAr_{lhr$ne+srJXk*)ifb6P854%-0yyjLPP`Jg2ysA3|ew}SNAI*Db`o+$?}#bEPEByjQtCgSuheQM5mau*CMEV=Q3AF}utq94_7gDdT#LP$0 zYnTLtB?@ygd;v%b27$51XWO<2DbOW|h$l&(7hpKiTw7Y?rC|Q{LpzrWL|+DZXE(nZ z&2k0D+aiTsb`?k_#u_#%$h>^F1{6P;Q}Gsw#)(!u_LHNp{ARH0zh37gQGiO{#5wO6 zhYlp!U*enc8gN}m7hL!=BRI#RH-F*-ksjX%ILvPv>*l+`9Y63CB?OD1gcW=N@{*^= z6HfISN+A!lCw!{ZK9GV5<%^AnHR09VnCbH5yv`^$5xuuR!as@BhpC25!1-aElW=&O zoSL=PEDaPQ{H};6a37hV1;9Bg(p2R(O8QG#DD2MVUbX(-8+<2rl>4l)yOxTphf9jz zMQbmXX+8{3jXLvK;3{9hfIwLMRF_qM>!F;TqjEm#gOuoni`Bblzgw0VhZg=bkMI$T3VJt zyai-dQ}Grv*~%`L%B&TwV1n*8tU_KGIIrSVTvx2c^LqVwWmFShCWcubv!){Qk}etr zCKds4(iL0Q4O1k$J=h!RQei2<{@n}w3fJC>iV@kyh?ZYg(HPosA9|J~mPKSK8>o8S zD|<0A=Jz;#8stk&rg|>@m45?)vWo3jE=r+o(1UWbk1+|*kkEjIgL&r zFZ!BIUy!rqBNf&KmNSDC>;(@Z?cG+F(wG{n$FvTK;lm)Gr~WFE3D#D0V?7Gs!j|A| z+Fm`~4WBP7#$wySUC!8>;!=_M_&N=~^~>FQIX&{4Rg7?W7&Vy@Cl)rg34y{Y9;A=~ zf!XqGZ$k}6TITJ+`-3~aE^4~Gya>j2!h)efwO*8XbXP?g<`KrpkC3dkiIIkxy$t%J z=hA7vG1Afi&5FG6tn{QV2Q(S;6<>ZDnJn)s;iqk>jIeSA`k1G=HJ@;brp^9$2T~UQ zdu+Uf+6Z!G&R@0*j4DSG0<=3(pP?>|@`Prz8r4(md z>U{I&oXv>a$J-$O1)oYz>ZzyvKw~>tyqNrD&{~(#g{AhWw+t)+B^QDvUW#FHvmY4Y z>GNJW;}8vZ#t?eN*uC|@5$2obOc>isxv41R*;svm4Ez=F;Qp*qfjwlUNCKtX@kCOy z-$OX$7DtQaZEq87)AILg&2Y4@BaZfdtO^nR zWEY{BBg8v)mI;q%m&LchX`uhnAAAvP)ae3QBcMnD-FLqKOjhADPzZP#VUXgLe2lgC z>%pg?DMWF5dKy#ywnHKCE!Le}E^BB&zB9JVCEz(>ijoVj;zM)U*fg^GS9|m|gxY7M44f#MpthR>ddl5ND#sP}KTz+07vmjJNJtwm<>^->m1aE< zd3iccojgOQwn&WMfV^fo|L1kc+6B-+S$g$_s2K}}OQBZw=Nj;eP$81v`X+i{!nfrq zwEh=or@Ef_`P7P{>itBjrJSkINPsk@F6Fj0Em^9Ah`q#$64A27YjFFg>B+J(u7I?& zJnMNidx&^B`f7?Q2ONx*6(Ydw8}+8Ka!BaDfZL@<+~7Ni39 z3=lj^`7*6SG{BauyjKYy@4;dRc(>sG9{k$?#sr|s9z9G;h_Sx%gyO6Zfz@G4BDx=^ zhrjU+DegglY7=;j6mMNA0(hK=X3aTAd)vVmenPwfN_o-so{))>E16Kp!U9cNbiw~# zOq*eglH)Bz?_d!M-6Gq3z#~|<0-Jakv|}w-0CTN^rj3|KLfzK4R)W<1y2uOnLyq5r+22wDs2PlD;5;Gic$z^m}&|&Q$fd<)dltWdrE+&|LiKfAC-O@Bgdq zOJzWhNvi;M@ui;J<7qq>K{;Y}*r;&x$WYI7{!AJv_^!=+h6Ij!CJf!>T ziBmj^wfRD;Ug=tyfEji< z1z{@zCj3F)?vUpzup(UPZ-;_b8Bx=AgPf~A+_hdjolcxS<2Pac0$;({5w7)N1a?Xn z@JvCs>*pB~oi;|ArAhHyL7?t?71rrU5A(Kkbm6nwh1x&7k)}SoADCW}ib{#ngw67) z=(i|5hHa5NH)ASy+_I0jz&sP%Mvu?K!Mz+M9v9R6tl#=&(vMzxztHf!F?h@GEmTOv zG4!}~x*<2J4WyLR)KrxIh(WUieN^*HF3ryI-6eePz-Kod}(+nSVp-- z{%xO|x2uD&tO?BR^)oz|aq>lG=El+@+Suo?($dYtik)y*joKg|(QJ;+bzxJP@v~v^(-0_{ z5>2KhYpZ8d1OPiZglf@2TZKuBU5G#DUr>CtX{CP9TT5hrV&vt#R;kw!hyoVEGwM+y zScQ>jN<$?UdXtr^ zbNJaCl85YZR|Rt-g<7^8K2NttI_(&BnTCM!)C>9p-|5Ad(~FP$xq5i-APwULk>|dj z_0iFXemnLy5gWC;K8c9?9;?nLDd-@4f5ssCVbrnT*E&b!qW$y!o=Q?^UOC z=(DX}!~lMtPM)_6w$iKq=cRPr|9n2ZVu>RQ5!&-6c(;8Z{{Brx6;>xgtUq?ruZxQf zZn#?HBP%aGC(VkYR3y$(}kCe6-!&I#nt z`^9c1oDD1^AASGFMx~sR)tz3ot-xUb-9wH0+G`Q7Yuk z-Wz;<^o|F4OnH}889839lj*8ox0@QL-U2|?CkxA;NW9=USw>Z*IPVWKB%d`&u{x#T&W7i}LqO4R+GJJ#e}ngns$n|@Zj7Q1j>8rkbf0F!*|06=EYet8A9ad%o11N08};{d>OzJaB{~+6C({f5=UA!gdjKQWcb)=aQV^+P9VnyMug$x( z(6R_FK;Ep7LxI((w1Rs3hF+33@QaX^7(B57_o^@R=<^?m=N|Q#?4dKxR!gM{h z&F}lUKkjoz3IDiLbhPCNg-b6a57{)qo`V*V!ZO`W|53%nJXE-_*-GCD2N>^nO9*Pg zs6lg<1L2X9O&aTynxg(yUpvFXB|B_LMQYUMd>wtc>aB&+jDsxN^weG?zsn?Pef6<90f%X16Cp1%)vdvD7xPkQbq z+mZs_K7D#l@zmLga>(I!A4j_~mmko?UNwEWq{SkdBVu|g(8ONV5dMceWAJSTV=dK= zl`FZ1Cs`Q?J<>$w%^z(n;qnEODV8~poNP^sZhcEW1+-3qB23oR<*nG;I&5?`8?Nk= zrCxalea5Om*vsH*-}GiqD(H*g!Y)Ar+^43?6aNUMiuTWDa47%mR`LMsCEHd02eU@f zMLeO5d0Q19T~>Q}?Ij1`Ye`2H%kVH%y_N-x6)sxzx^AL_z$5$iRgS)e{ z86GkA3va$#xpxZ20-)hw_YLCa`6IKVv%1u zot`>jb7P$JY~Zn5(Un z4NWgdGO!A8p;7T+E6b0mhN~(>b2GzA!hjkFAh912lpG}q1kp@~ioO13q>bQpB;G=Y zXAijmonSOqs?dh@3Qy$6#1wglcs>3i9QQsIO6^4&lg=$XHdMe!A?9iAe`fKUdEl&v=?l4xb5`|FL9&GqF`T|x_XyzgaC>YgG{kvkrr0^6Y@QtYEd(3NH zf>t4d)dv8gTEEn=lC7ja=g4mgj_tvHj=eEZT`v5~_Q0{KbhiAW5K7s|wOtSNl{Eklf#zOei_U97OTiBc41?~*bBm#rN44`u2i0+Ed1lEq6!jvc!AB2& z#e~06`bpu{ANrZtrBQ;R8_29Hl;KBGXm#YW2Ndp|SIQjE(LbO@=|V@c9Z(*nuu;ZB zJb8YJTF=e+QgeHSn5@O(c=c635PlZjc#1`S8$mt#)XP)ueAaofqc#}il{8w#WU$dy z-*a%ReJhRGh^p7=bBeSmu4Y#Y^Bf1JK|&NCb`o6_PfeoK{|3h%2zNRY?CwS@mMv1K zwoTY_(9tHf@=$2!iNi5ELT%)PLk%0mE3V=bG^q0UO99D4@Z&&25ez-_!|sQrh5 zyW<&MC;y*rmU#5AS6ymTv%MK9p2m~ijsU?pmGODi&kXg*xpT*@kstr5GG{z2a<8uW zL1!@R7v}uBxcf98IShW$m(xrBiHuPH8rc$Gh25i&>B&98Hx6qH-HPq(Lxllt`#PjA zAs6XIFnD$+U2MQB9^-j>N%~YZL!7blY0wJ_>+e_Go0I_yJpL{J|B3+V`~3Z-K9|)w zf+Yxd+LC0ol7Y#&G!yz2e3E38#>nB|H>hrbx`k_uee!9b1hyRirnD(1RZ_ZT<$S*1 zhr*C$4>wjLi@|z^Dsse@@&~WVAu!W#uZTnF3`Lr`MO+o5$H!qt^_Kj;;OtOpq0@Y6 z+z`rvLkprg*dY8^Dui9HpclhZgmJcM-;ctxQL6{wej}q()6{hP>KW5t7^Ss)O|?4y zl}D#rROG4P1(Uh&s|ij*cptaRGP0qbw)n_?KXNr^AMt~%r`=5-D39zKo|NB1R(gNe z!wWT&G~<3Lv0@t;Qk(eF*v+LKhlaSfz7;wHVvpzoq);>;vw2;8jCpHNP6@4Kb?0W;UI)44p zMQWEJ!Yp?ic?Kx_e;H~`Rv11-?uQQ8QKcDL#9G5P##4xp-3Q;wy4yV5Z>?1jP!ceNB*Wy%@jCLfZy((``tICt z%!VU!d_bhDJd(!;(nEDB{U2VJPo*cH_P>cjcRV2M8@2H1W7LRh->4Wsv~3i&5RGIo zCaAwB?C0A7f+ZB)+JKhHwHCk@e*(R_3-74$oOM_2V}zsSkS07!-Uuin+F5$ zJ3^NX-3KLnnWK+kywC`3!n4b99}YNN_0A#D(($4~$Q(hw(X@7-%C;vrCwJ}FMG922 zPNTX~pn$#89zod{!W_l zqvF>9g&>W#1R}sP0-NI@;lx-0vZCcv`)yWHbb8^?^y4EC6Q#@6w4<3N$+J&Sc+VSX z3Y2%GlWwH3mhZ`?wb|b-_)y#pp@)|vfyWBQplieZ<*Okfsfw^Fft)F@D`?hKE~pe> z*7p&Q`9Z~v1H2@}4qrs^LSKJt2i(|ZSmEPSRX5cYl}j}8%5JmQa8$%FfTBsiF6 z<=anB`;d`Cmc9nVYJ*3*v5U7xE8LpJV+M8$RAO%3af^&6UfV3P542^SkP@Yhex*%JWp%=~5DacV@>)9enuid~BT|8%Rz`W4 zB#u3y(;ZnL1U%+b4uC>aL9-ok$~LxNf3t!bt7ALT&(7<+9v&>G?VYH%q*{G-uPFo! ziOY5&&$=4R^1+9L@4#0ced(3gP8%MR`7{%?@AGUlrFe~G<#x}iT{~eGW!*6FM64oc z;rwhv0()yhkw8WMzJuvn_&|s+)T|2GY+d&gq0z2*A}+EnR)-)=U-zk#>EzFSaC`>x|#^lTS{kX9BRle-+djBIs8Yu`6kc9F_6f(p17hikS#Qk%zg( z=v7Ie=YXwDmrZ(~rT9+5B=+I+efo#>0)q2sI&nHiPdIHah{GJ5^}7&`Sn02qT_k54 zco3D5$CCi?!RM~RbnRlca>DVlQ* zQkae4>@oPEAVyR@`(4=`m8JC(v|25F4mJ=FK>ok?9kuQWz!y577R~rNzFdD9EuTVh z9i}n=lD*^t1Qy#DJ-a=W;ybGmOgC6p>tRkG2*pn|8w=DYka6jkjG)qd3^P#%{|+FW zrz|%=`6L-$4%vp1sdNMo$&G(~#{-~s>!Io&yg_Pa@J3na*jA$D)}_#hKtY!7UCdAYeRr!*8Vu z0ZCoyRYoX+_F9;d1uL^S4<$pjU{Tyt?5PWvoxBv-l{1!m^TQmm--VT_u8U1R!h+If zAGe@PBnl6`KV3{wrU|+%R3w%qj|pOxrQwZ9@fPtfQL0Z6!0)VJH%q%$>82-2AO#|z zM107%7TsSlmve=Q%;h(a?%T1Yk_lnL&fdJK%ySe^<#a#(Ls>t|o9RkON@Lm!Kknyh zWBKh1O=Ys`M^?kk9w7oHHJ^x@!5Ii+t7 z?s;~>!9_g=0n=hwC~kW!ms|S2l4GLs+e=2luxph;rPf5si7H(gdC#I_@q%xZ^ z8tmHGNSrEIj#oyG?y7RECCJ6!xD9X3(yG-@T}NVy<_i5n zHEI|hLi~($!cfP0Ok1(z?Lw`xea)5|p5A&1A!l=gl*;hlH&01r%s$pC;ToA>E1^k-dty!u5YleeSyrAo@vtk4bVLCEwYt(7|%VP z&iPjiybp;^o;-af?r|S?Xz-ae*?79*r^PYEZ(S-aLs$R7St1U@D{+B}Nud6OWx+^T5lhn(LNJT+v&OImTGU zk(V$>2^0`gD0L{jnxG6ZSU5_tUp$M3TWDKxbkv@UxW(|ry+n6cQuyu4aB6cb<2JgO z#>d+WeoQnt@?I0YY~{4APsm|Usza-E9N&NWDtmVkbC@w zBI>Oj5zW)pl^~{7AExbnvR~ zHd!C1JzbaBUoa-nxR&X_+sdmb5C2LE1wOJwiE%ONGdFl+jeqH3X|M$z!%@1G;WY;E z>ZQlhX&(vK;?FB<=yjaH!Dlv5S8tF=mFe$9YS|fA^1?-Vm#?V7U@xw)YeZt&pppvE zTp>NI0^2}QBn*lkg4|M36YizGPxJ;{4eQme~DuKs?o6jZSZz{DH=S0o9}>MecSRxD-Yb8l1-SO zny3Dbc`naIzWkoNRGCYEC?Y~A8At_l?@=X@PR!#ozqZo;#KNS`L(9<u!5H&)x)f zk;ULbiZIfQ9Da{9VHVP?{-iwksncFb7*@4s-64nVVN?In-c=s1JTH`$x% zSe;U3|2Qq$W^#*V}+eoOUZ)slk^ME$?5dV zU;5vzG_~NFV{a#rZ;2No0EPFuk9_pe^pcNccfuC6%*Zxt_T|_X1O#W`zrsK~A`YP8|! zEEmDF)&0ZY8@3FV4O;B4oMcvj5Foo>c5quwo%5{w0cJp7&UHL)TT28+4mQKKJpV#^ zvfOuytPBqm14S*zHYj_&d^t#gW$hOJrZc4LtxsFx5Ea4g6$P{{22j*<+Su6%4xScz zg~kiCG%%t5+#a--oISO^4LqTRq?f@`Tq#$0R6#^QK|ooEca}S$<9(TRnQ#lg!!R1MHeh>EP*g)dl>c}YxLyydcf@- z(AMP(uWYO+`5~4e7-xD_=Ae`IH++#Sz7Zjp4lLwa3W|=6`Z+r60$@EjdMIZQc5uDt_eTvFVKgXzA=~PkFrs~_Xj=hK zghaV2b_Sw}d4)_d3Gsk#vgj|Qok44qEq>|P3MaEgJ2%B$J+WY!*fyBSeYaohJ3~x&EWp|GfDw6b+ct2O7EUGo$0jhubJ0y`>0GQ$u`U*ZL*e&(?3s-o-5CQOPFH; zVd%*1pPluviWBv4^KdK3zT~ugzbc8YjGklq+_S z0XOAsn-phwiW@xWdvml^U4VU_0ijVEA@JaaK6u7IbGEkbTrEY@FEApFN4FT+ZyjSxPT zRowLoo!%81rO1a+Rzk6sd1a&7S}GR<SD?3iM9q~B|1jP#7KLD2QH zu;^v5CCa1djuEkCPWa_z4c-hxra??KUX%xJu9N1c{JgJ%XZ-t`8(~*rzUx)kHMh@5 zOF4ub3YL72BJRWKx)xD{H5tTOFfsi@s3pkEL4<9lwub>ejZUkqd14v z+1;W1G1A4_4U%vf9u@cjWhLjQ^l76cQ<}<2-xwR4kUaFc#Zpo1MYJ*1Iw9EjMH;;C zIXRb}@>8~eIr`t!q*kh)TZg-gl&?iR2*m>jfY*^s6r8nTvm#&Wr8DUfKeQlAg2u0e z;nc%FYLICbTmdL~?&fV{jB`8o01=QS*i9<^EAP&riSDNmQ}qd~?P0|DkZUj&5FuBh z&r3EFY(~1dA-diois@4>_V;xL0u!tr#PUQ1SqB9#q^Wt&E>M@>36xv~9=gKSDW~DP zuApp|ilcOg>dC<;R#S?;3Nx02uT6obr|Q`h+O(7A#=92r2mh7^ABJu4Pd^YyazM#v z5T)3U0%HYC;eHQ4PRXL>u+fzXT#d;e+lQadZFq5N_$WTYX^AWk`~!z)tN zDAH_0STrZ+QB>}xAGiQ#$u;o5Hz?#f{9BFfiLOjL+heFIR4O_oeMyYEbf zT-$OZ&z39&3$hQfv*($Iy@|FYK!_7_6Q$_X9)=RaZFM?S>#U zHh4t`X@E3@gL>v0W{HAnSXkYM(};B0DC@lxR-HMKe&)fGNtT>3lB`JB6L^WD-Gp@)c3r!xE^zZ>RTDag3 zJ;1?BmZ7b*7lD4M=m zhggfW07a}C(7l{qu$1IfBZM?w4+L3`MItc2qeg`-I6zTd0V3&(6*sZPi|P7lQMEV9B-(zo`<&n=6cM%TU{TQNeyz zA_-}pj)`TTrbB2T*fE=WVg1UqD-14z{V2>y#MxIR)o{v-iPgOxs24WTwX{|Slcd3h zszM!lQ93c!T1~p8czs1HF|v}bP}H?uVi7?Ct-9oY^c^zgPj>4(EsOM5X?Og4Phcit zha$d&6Tu4!D(R&_$PuO8zhUc@s7^yVmHk04i50Afr5yny!#-e*s2(^s0rc%zoS&q= zH#nyG10}ES(p5WRNC?iwH0$e%=PDiSl3T1SkqM0kexK*LQz+s)gkM)n!{@Cu;z`*h z17Cz_IbGX|ib6s{JL|H={g^yMI*bj0tQf&zPw1(W>9t$sz-eaRL({N~8*1ur7c;2r z;856@0wgsBRxncgjmMy{WRvP0i`(WLypkTFaM*{Ya>CeiIVxKu<4XLNFwESg8L|(^ zQ!9*4<@~kgatYaN*XQhko}<7&X6Vk~ork|^;%M&{iD0lOD)JM*dYCh9UqevlL+~>M zAlV-ssQArv%q4_C z4*|-)DOQ-Ws>>0p%oaTXS9Q_-#PTPa*5XsQ7Zza1=y>vIa7jU64hrmrZklhU5x*xM ztk}c-QDuRZuSkqyfsBVo@-eU!zOu4@7}mf-D3SEDP&1m=0?PB?K5}#Pwts99VJXcd z@b+zrTVkfCW~PXdEqJo_2| zFZdNPuIeth<4A`JoqbdGq}d6-FePDu=gWB)>WcykB6lcV^<}e1zq{)*Q4zoNqp1sS zr{x3nX==8bfZUtTbDpy^JKV)9i*~o_QGyR2rk`%CYLdFZBgfsQNTT~Zgh!nb``30t zUxcon_h}nC+i#GNH8S;f&bg!j-Q(ec#DcGKPdB;`D=ggF9ZUBQ>=f? z)zSro{riJ8(1q32T^cg6UHY!`i=!z@={k!GX?&#BE~bSBq|r$GoaDEw8d>@IM)Cj1 zlX=iV@Kv$Y4v@d_SY9E3>bqm+?}dGRJuOFg?nXw&Su{1fPJ1iXv_$hvf zLC*GO1M+g1ibwcz@DYymyM*NV>;1v!z8%n~*35M3MlrNVsX84?1J*I|O+O0jb|>~2 zg>yyrTh^6=w(zo-w|gNqAo8Q=&nQb^v$)C&xw1`3rtAyF_%reUrH~c@Nwm<0%Yi&{l7+U~ImKRU>7aDKXJombguR>0~>DlFnP!FNHisQP-4-5YXZReuUms;eJ z)?`5W31F#dq_3QpviL-U(eF^s%JAC&PE_yg3Vm7H=L{`QN0z}dz0 z{B&eZSy$48zFdcWmu?KfbS{G~YardjX3Ryr)3PpiN&0+M!F`@R1VsYxk?(h5K0QDF ziuD@`i)o4-@!FL%IUg-wvU^V?Ec^F>^L>&!bn;h571=YnKv4VbKR3=jJOh zvC`Z0D6ps-uXLu<=#_k)uXF7RcTSgr`E~1=e4EssnZ0O8+1e#tIt_o)FBV^2ad^RW zo!c z7sR4|d=To7pHYPgy$@%1g1S{osQng`k_Q_;aCl4uozxCph z1E=aaDpjg#7P?*?(RAYuQQRs^Nv{QXmN5z}Z|uC(FqGzmGy_Xluh#b)&;3F1kiF1Y zi&5Q4{3>i!Xpth)&-T9?=|shBqV_o3pS_zQV1wJgNUue)qyjwDbop(wi_x%e`zy{T zu?lcFqrZ|86qJJ0V#2eDk6<-qPIf}h=STv6YO5-?ghEp79Y@Nz(K6;)LWTX zDe*Hw_*A;h#me}PKzF`_6|hlCO=)2Rrm`H8VIR92D$puls>;7f`NeiRxkFk)FA&dz z30rMmqiJ;1?}_!GJa<@OTP!nx_}(Ap=cd!NZ^q8~0Zg69!#hXO`K`Y%lkl*Rv9szv zAxQzgjk^7rq-K^x*%|=KKE+-m-X{O}{u}74uwL@`6THY%TSIEs1>3 zHs-5eh2hK~8oxERS=wLs6P!AoeiHqK7414$EwzKn6^Jo-+IJ%QL;z&ZszW=f))xH9 zt1E(*`9WW%Tea`MOH!Dguz~K#S*6^>D4aia?mlCi6PseiNb~k~ly3{aN!nZ44zg_F z%{CnqCl8mbr`7OELaP1nFhB+ZhpyLQhlUSmaW94mjVriP_!Hn@SO-bDtZ=z!8P+DU z<`<>0_)BH^fVjir!~XKaWDuUdLUxJ*X}|7xHhn!rK|%zL>m zazuA6$3kxO9Neo`B?{UJd>#>eMOUbE3D;5eV}*NUM48*jI8393)(-*wncDBkLMX0WLszll{sBwtF*$1<5W3L3Suf%!EC!RSs^)R^3zez@+#Pwcy?L<0t;*8%Lb`C%mfbK1hw;oTgc^yp=9YXS0m>K2i!QVV2WaO#5 z1`(ki)#s0eb7Jk~b z%yvx_Iz?n*-3EIE{e1yMX@dFzivR}AZ|Q|gxw8*|WF7{+z%gB5ZHI@m(8y0O#t>?@ z2y0Q77Ydh-%yo`qGIfFxnRg?m56JN#Sc@CGpkb@4nkK0|>ePky^kqxN;P$Osl-WI5 z-W~&s#iiDOo-|#4D=qaS(6t1{?B;HS)OcY$y!T^1hTQnHoj3}f2U6T7iiqQwE{Vup z;sGCfs9JN=ih_GAdl{o6aJ#=*Q(WXaHbAILDzh_Cz?T?hhroZvY4Vcyp?$>hxj*>b(OX_Dr}2w_>Nld2pQt)@gf&Oq zys8CDDdpu9iK-3V@iVU-XvD)E6Tb8?EJ=c7SG|3+SV!_UBdZl#G)~D1wu%q$W66Xc zuT8(f^!GW<@2H3m)zYO0@x|!v$77(LP(!*a_On^bK z|0qi56C{BIbHfVJ1^|?~bh`s1`t32e*ale=sMUOd2d^J}d33K(ebCPGrkZz#?LNUw z_oA$1DlK|yuK>LAYd*M58)wTVlT;V;Fo#u?SH1e4c)~jp@d>t9e_}~OJW)O^;Iw#J zp~P)UoXS`L%s&>nM($ou`#aU;FsrvLW4XHGzslAb;uriL>pVlm6EpUKNue*E0#V-$ z?qQGI9lTjI2|HwNqE)JluCU9Bf6kJ@d0&V|>ki1Ncf2KVnovgCLnCH*ckmHS#^1u; zA!?wGZn1kUv}u|E9hQf5oM>CMJA!hFff;}jRjU0TJ)<~xx$?#5vg?c4r3@=sm0b_( zRj>ekXr#hV%B5RA6+P9z+K(cWC(fNquX+3%__Y?Sg@8Ozy5gshU{bcSRBlU$gRo<= zX`M5}K6#5C5)q+QS+m%01GkmwJ#w#HAHM*ou}aCWaeAh^@{1u$SW2ytz|KuI+}2Ha z>UBpB{$ec4ACCt7xL>N+!4I8inPL%%G94r%L3w{kv`T9iL3{V;{{Q4xx;;u)rHrs> zf{a*Ql_%Aj6V8PWQ65O_(So7|%fEdkvgmRThQej}M^m#a3l?6I8&92p!oJLV16H-% zYfa-dYwsviqk<1GnngC|Q3Dn_iP6qMn6y(XIm+nO3RHF8A}BC1+enqyp>L$@c;=f z3zSkp%WyPXv_n(vBxB~ANl#Nk;y0njnN0cOeCpZ-nN5K>ML)%cNcAHc+5^W@C&}lb zSG6)MCJ`dRnd0F&}hc@SwDXze&jwtTn z_DkudGakn4tHfF|$AiDgq3o<^{EgzuIXV{3G;KSFEI)p+m-#Qf>}7`PmcWCmVQ?M0 zBUlM-6f9xdm8e22m!FzzJdd&<@fXNWHN*&V9OTWu>0y}xk9@rh3%)e~(hvM=ht2#s zKL{b4&jPL)U%oSVM}@=h9KA94t~|wfn+;@fp#lg3=%lD_b0bKeu|D2~T~EfJ{_-%Z zzZ}dA;9*OJ@l+G0EL{=396PKh|NA0YHb3`sgo%6pVVO{k1)nO;<=*z1k5k*x2mt}5 zU0Lx-`>bov2SyJiq5g%mN8}I%eB0ji#c9H%`U9V)l9r_?dqS_MbxD?PAHme}0RE(| zq)U~n-cGY~K0*;YII{Srs zn@o{rCn;oUP}NUV0Y11-wr%jSf8)LS%l<$-Y%`EjQez|0+*bAEgum+8p)%cYx_Cga zYG6>?*{qN=3OD%GWLEC2g#A0X{Y;hW)F8sx&)_A5)`Rjym42lD zy?%0naAXCMm@o2HXPZzrv=mR1Vbr>CZT|JACyfoA5GqErr zYAQcNolO1WwzbAGn#Tiz;+Dl8mI38rIY8wnK6#$RmYu{*uZKEBp=o3E?Jza2mZ}E` zMvCY1!V_oG6K9TvFyTp70{tGlfJk;f@el(hRS^lcy>CaRXKU*a%NZ$|>Fs)VZtM!8 z@&f8boCS@A^FbiMPc=^fv?NWQ0bC~1PK&ELUQjRQk4!pU9HVsu5aGZGk6{^w{4l#X zF8v7gENEqWppS^lW*$So5?Ypy2TE^vxa9#-=o5Q@JQC`T{TLa^wi1A(Y$*}l@x&nl zVem+!??(VoeN(jH%7uvkr+shHxo)#cCwg|lbai5B$#W|I%htFbyFKg=QKmrM#mGZt zUIHJrd5B)Ba^)Pi&lo|ZijB9%ZK63vyv5ISdOia z-D;&1hW=lSr~e^OL*H47atb&oC{?5@K&;14xXDUA;@!t)BvssLm-zq(aae7d-HOPN ztDY~Vv`sJeinw(MTt-8v$S|6(F^0gpEgCK21)c|0a|%6EX|&g6ze9Fcnps}M-pKXA z7FJAo(V9X3XQ?56BxEhNOmn2KhpPX(!S4x|d<9ReZ%S1B82qZgPbevkVuOVB{&YJ1 zgr9dbU7GU0XVQ4f<4vxUT$8n;`hAnWS*ASQ2d}672&G=9TGoe#^FR1U4?4Dz)`Tz3 zPKk!~C-LBw#uMz*x^aNXG<$-5_)_FSK~P3pMKye)6r{+s8k=BSmx~iGUZ_9ymmF(8 zhTq~t!x~U7H7V0?b-OGERCG^Oi-ovM9zxS~qcvOs=N|n}W4Jw#*M;wDGHT_ahV4!) z_orXN&$BX!R-W0_vpfiD#I71xp26+EO=pS(P3_}o;IX0GeV4T!LW{hFvJ~i=08Z>x zOo|dU1;%hCD{q>w?d^ z)Pn|C^gCrcVhOH+o0o}EN`u+PZ_zBnLvt4U_oTP}%jt&yxtsz;K-9k~uT}c_KBUZV zAH6$rw8l!nb~2L~&M;!t#;cV+FH|(a@drv-DwZ9`z-0XOUTdQe(P;yX{_1 zkz=9(-K}zQjJk)v@!D&VQS-HFno&3kFsoI&fIoh4v$E9Q8UR#&`{->N;@&xWe^4m& z6;Qy$(qF;wG~c_KD~cQJizVg3y@#~CX<~vOdTIz6sOqJpk`aMV)8I`{j(!mGmsjJES~@LBMM3rQ*=KxML_svzYU z(&t;yM3~BYkLdX`=}G^hWI?(bFMfCMtzJA+<%e)S;E}b`q=e|~SE^kGnt1e% zUjuI?Xd)?ti8$y!|BfpuUQfgDh_6zLyt8F-0+VtODN_ZjJt|Y%sk;%@wPI*Z?$mRu zZ)Qd=wEZY3h-l};=B=_-g`n1vw4T;leoZ)_t{$tr};MMz;DyheeaPd@xy~%)?0%ZnL+1b zMElai`g;0{hQv(G7h9f3Cf+^n4HRGsE)JOrEX>G&+@3r**d1QIRqgY+a^mQ7-w7|4 zbxy>qF#WbLtpF|U9Yd6;BjX0ZF@dYS@(8kQuVYlKs53~}Lx{6bi9rdLcxXZh1jSe zUf8?SWQw}Xxpe4npDU5q^>i}=lGS^8_N5LLZ1;SM6TP<-z#V;L^E}w064$2)57OJ) z40~2cqF(Iv$cnBP#`VdUFmO(KPDx9Gy57rd>3*G4fS~<5sd8pJJ$txXHnIf>&Bh6V^qAJ31E00)81fCbp*Wb`Erx=30Ya4Stmdzw*-{ zv|rP7*MkaXHS>Yg>WMh`CjxEUKe~JLp7p@xQmFfU+NiwY-D5$A!@S*x6U6Hr7D<+d zXm3}6Mo9WAU9c{uj%x6!8QZxUtDl)iPW;>&XhJ(nd%L85oZC2a`>er%3=&NF z6C+&focY4V%14!F7!hAU&ffYB#^+jTF?xzoIpnE&F3rsNAT>EY3cG{AUU*{b*xkX- zO83I8a2AM#B7Xz=m%jJh9stFY8~4yMqXq&UKll<{Qakvt{*1FLO3;;frYasR zpEEn2mU+wvMZ#Gu6ck$Q=AcJlU-QSCfbQUIE{}svNW^?O?8J%Lv^YIAS|p6;6>^xc zkd^JoaF^mM%agigl?>Q;+UN(OlGsQTwl3C|Y?xFSd}>Q-Ife5h+;&9)p(ONhNPI?b zPDL07TAqX0|C`hjUPbJ8y9~v4$nO%GHaepXGviQ#?HjM^aBhn5SsA5Q4rSaHvXkZA z(yW5&dF(XD-c$-hdW*m&pyYTGkuT1zc@h9I<816NN3i_+0{vq@ALBXwp_6@QC|eMR zNZ>NO*VFiBuQYrCH=RzL_DmCMVD7~W6&8+y%%FD0zAKu59ZrYu}MrNoQ;mO zn*t3CqIZ@j)1#i%E_`_V70;STr`ENl`T+6BVabK=gv#wonVaq~{!m0#5FUI{7P*g- zwMw5=G>IRP4vyXS#DZ7h;Px-m%a&$9NK+#b93*WMB!Le;lAYi=ExA7$oKrHBKg_+-(pR`o$#ms6T8B(|H_qT+6X~=!4fhr z^L8Z|Mld>eXhXw7E|Vjh`&``nM`i1M7xwd63~OIg>o@(y>hw2bpp}|(D!*ZWi2*7&4S1x>}!%VsADG+B8{)YSqYoMnq+KM*x z&;Fj?9$`^EpC%%fNfbGfv)gIZ;zKa`dgM%K241kD_&h_$%*P6W8F*%R!wDwt;1$Os zQJWo62M|e^G9Et39%+p75uI7Qc}%p4QNJpijiS{W8&Aig*oZ07S&i~rqD4(efvgJ9 zkTL}V;XrEOGx3p`16=TcZIf>L5^h$H))cW{pH1Lle;4Dc!l>u6p}nwXq?6%dtT#cj z9Ead!OOZG?_(B=>JKz@IvsNZjG&wRmL2I+QiEx8d?w^xnBGgbBk=IX$_NSLd;t|v2 zf;Xp2Y1v<2CHL(U2ng}s{>1LWnD{s$WOToC1P)xZhf<@B;Hp45W#kDFu1~ ziu%$7)5wOD(UqU5ibFePO@b0UD~qXD(Y~@>E;9@7`m$nT`w*@}8@Us?dRHYj3Yt z6`hR%8VVu+;9Xx~is2F5Kl;wsA;F`}OC$`aGawzXR64jmkzRVq6WLC&YC1%b{QO-J zc6sKgtqSGB7SME$DsoVHR~@hfQ2wvu6SIsV*r4~ zhbYLBs~tVvSfCBNcwNvAv#ko1FNx)*yl-nREmpm3z(@e6zw0YIhTZn4zeL%5ln($Y zg#w>(sFcVRz%W|leiZ5tZVr1ql$$=YgUtFK1YMQnSdNE6WFWo#$g(NXfxejn-8)C$ zSn>q#TqTrWM>@|@(|@iU0B<-^0tKF`9fO|WIebkl`|FeSuIn7R12*Onrju5QSm!jKe|hltY4AZ& zF980laaV!1g0(&v`Ai}5GFd8XS<%f(##^Zy+aP(wS9}W&L#{jxa(_X~1M?%s=7lW& zH36y0=TX9PtDE-ZbEVz!whR`G_6>Pt`I$YOYJAq)T=NvNmt~$>b>ueMaG0~r$y2Q@ zYg2X&);-8Q^61ME736sjH$^?M5??9dj>e@@GWHN4;Xv7nkThY}k?j>V^YpVlb>i&V zbEU=w@9`}mdG%LNhd4?SfvE*(t<-nZV+b$cuxl2;0FN0PP@kQ*S`Q6RQ@=b>e&k)U zK8g-|dV1^YRlO%VplPk;%aTp!s=W&4qF{(f9-pz;K}isP-C`P>vm9Se(dTB3tw$^_ zCCA?6Z7pUnXl;bs16KM~;91^3&})ozT@=AXGQlwy)RXnsd8O;U$_W5~5-=5I|1Zv$ zHv&_h4nwu%gzO@{hl*?~%*7(Hj445pn{gEhg>v^;=6!AruwF4+FlG0$y!fWiZEa?Z zr-gEGTOoEZax7zOu-;0B(w5L3He3_Tj|?2f>X4N~y4@MT%+kgerSYq_N$^~%bp6QF z@mTtqXY5>h@@fAYmpd|B<5-Zfz$eq(^jOKNDU|8yQu)tCe;}E&7esm@M+>(}Jd9&Q5vwbcqp<#N**v|Lfk+^cRhTvR@`mswOapzrv6L+_eZ^!|M-Fy zRluLJsaTa>@55?Xf5amDeYzgp2ilX;;7hM-7XEHOVGY$aU^4d9m@k+jyl_X+#{F<4 zM#fXr;xsM|ZjYr8#o z)JjppoNWN#L%A1`aeE3Gi=E6OT)u#7LmO=YMl}ivstGg_n~t?J;~?IH17$GDo>VIB z!TkYIoggE;M94a7}5(*Uz(YQ-SDm1?X*5rBvZ~?@;ys)`Pnb ze7UpdWErMTXo+ao90T967vfbnn zR<2&QPx%Z)xnKAx<%;$;dpE-0(!Pp!vQv-SHpZS3{(k>#pOq^jqu`#ZIV8U(O59i} z3dm|FwWe?2QpEMK(rgYox|(_T7>YNKJ}9~=8*sxm!xoGefghg!xtC`XqEM$OpA~7* z?6`WIm&p#VCP)!H2{SB8Kl-p6v6y;&7phz^!mP}51&mnX=tB914{2Rat?3AVGzEfC zgZX9o0;52|*HW&ktR!LJDs}@tAu6-zQHl<*OiibVUO#v}9ewJDMLh80SGO>^E8&2~ z^P4gz=wK#dquP_#QZCQ%v&-Q<*zmkk=C{5dxqEz@e-~%^d{oO;AFSu-`fm-3J zOjNwR(>@e9@W@QL@Uyhy#N+q#i`#8uHNqWow_!7p$Fv_h05L!8$03NdkWyk5US5? z_=4I`R15@;!86E=^X7mjx-=6#Yr2>?%iXkizD)VqY)Q zLza9g zq_I9t)YX)mTT+>)gV1wqMy*W%`Tmi8tyBuAwBJ9-hQ8(xDhsSIvjDm1P(lmnP*B>( z_LhpwEUV)Tt(v!j{78NtTEha9BbR|+YGMfu)!xotR{_)iG87iYoi*RZlrXB!8_3QAIFERYvO+L(K6D>GHtJxx!qn*5B>o} zw_tPMMFeOZ%ce4DMZdj~X%%d2lhPw?i8jcVQIVair1`dcSN)1t{Bq-vil`SFX+l^E zv5hSbZA8ugo=@{FOV6w6m2y=Xrtq|tFAkKP{CdmpjYeIr&;*#E@C_B0lETxZ9kE0hY!RtQec)|CmzxLDm=X3L5&xrnm1s&uEA6JV7oI)Z35HbaRd%6&d&SS;mD zYo07pIZ2T+?Tnt>48$cH=Fb?C$jW}DzLqwH3fn|sSzBZyjgX=m?)}~;Qr)jaOgujI z$FHTo@hRP%b@dq@Jv=~vlo3{g7@np)o|J&XPoAu2=F;U@o=U%edPI@udz1uxI_n%Eye3p>;Z&}mHU)emkS{`Fb(M^W79MD1FVl6W2@=bmG zf&>G0l~;o*LYvg&%5GnQecw@O_KW4!<<8(B7YUFp*{FTr70X|A*gmHNBJ<)@tKG2< zfIID#!=O`W3Y3*GVNiWjRopFkaOOzl9^yO@()ZE?+bCAs@M_D-V?#LHk}Lo_^0#ob z3jN62Yrpkl?$H(o!^Ts#OK8Q9Oc#LW7n=G5U_#O!kv2R<9BCk7%^jpz8r@+QYIgc~)&QLzBy^Tw>qE zbl5)14Pi(d_b1jBFX@%jSP<+2F>6h1iU@%ZY1r457_%5paF?;wwH{*b8xzS{qpl12 zWLf(0+4WQ3lP_gO=XSs9G@dod_0U#*cH5o3W9W~)v;aPVD=YeGp&HzN8s;JDg#37f z{?v%zU^SM5Xe{9n^8rnyQ_o+%q4^froV5zUFw0U8V_=sBRU+^so5QXKC9dzM$$gTP z-uF1**}R>JO+{6&uA?KexQD%rw!kP;{ReD}4jm!{q#Gto-ikp(1}F zB&X7eGbcRcin2#m9ekCT-Yw`i=+kB?$U<0EAItCm?C1mje82GS$%3llKU?V_LRR1a z>PFNv#nlc3Van%}X&J&7}R+uvlDi$q>WelEW?5=nGGzlQDOhJFH3YMv$_>8j~N)1c!c! zjYAZSKb$!KLVD5@cDTJM)~k{pn8Z9=-Hdyv5ec0o)WE5#CU0rit)rae@^caL{v0u{ zC0k493ZdR8;pv@V0wn(z@b+iY^FIDkdc_YZXj2RVv#-8D9!EfBX*HZlNJXCZFYuP0 zICtKk=qU7~F?U3_Qo+2E^? z6wV${JgAGj6JLsooO=EDC^G+~tdv>OQ8nz2(x^-u7vat^N`q*rcG;_7aQk@%_#hrw z(DA$MtNf|$H9lB+CYX(g{m#?H&{Kn375h2Nxa<49>;6ggGyb2eRG}RCRrezEISJA!v z+aP2Kj~CSha#mSLYmBLq(&|E$>-DH!Z6(Bu`oQxl=@ULTs2^;HfAV{>2bVrbl+~|= zS%5Fz3xwTM5T~8=TVOz{7`d3_>?8z5c)pOHtMFb|b)Dh|?H|~fcH~#;M?0s@W|%J^ z{-C*RF3tAcl()c(u$T>TMgr&g9iZfy?f7s_QabwDALlW`F+9p56lZ1)zr+#WrDkD2 zBz*z`#6a25e_fRP;N)U$D}2{b@shz`t)TIz(&^xc z(P{>Q{J-0t9)jz>XBU6pPCowGkCQRdlz4ggwdjF7_-CMjOyxnitt}|Kyco8Hj8!o4Lzto)s zB`^{(%2OxK5>)jGIQ*hHsf_kpx6aV?G-QKj>sr2VAKg28(*oOO(^N8?vwR&zvf<30 z9*I65V{NMXa9KSVufB@ViR8v#ur@AW7%r^nMr=I%<#``X zV`Kg|(D%sbK*Y8l5hkXk0EyU7Y2fa2Wc`=f?4nY_DH_~zTB&6v?orEI%sr@LN(uy)napyWjJf1PibSB08BfI{O8r%Hvb`v00Rg zg0Fl1CHA7?ZNNmwM5>m*T6@FJOzP74rF9j-c;JOX7&dCUT1CV!?*f#@RjGS_uq>?%RQgzOOSP6BNdq z;O!N?Q6}mY4|NA`JlC_w!V>>|IYkgw(J$|(6+kfl8*Q=Zzeym*(SY+82bqlX*sIKH zFFsM}-5Ia5C^}QMmPC@J<-EA+%Jh)(0)jM9gu`D^W|0cGqtN<_X0ZqsD~L%qHvPnX z@p*}nB=o#k>uVyO#e;!BS9y1O@=(=HC9QHHHauDtZK1z7C%0~iCPIo!dVo)N(+sGr zQhNxIPp<;$Q=ANENMuR}N@CT`+@->!kOx~~+(N9V7_1EP%(7~WgEQtQKo&zkHY!9WW{78bTz6IsvAH0mx+Pz4msJ-$T)3ND* zpA>5^bJs*pnV{%kqU}gR58~KzDLDCpDN@<~rSj3m)V^X(EHK>8QCRrV0MMVye})#$ zFUeVmLnt1Bw&^J0$>Ly*^UeI{f{U5==H(P%D>snkusLr zW5fMFI+V*pcSS;K+rS$m6`jv`k)gMieMUH)IY;v`Y)~)%M4E2>)CW zTcIPfMNu9|oE+IqEvrOEddk~RZIZ(2!fd8zyT3>iG!(HFwX8EG#61rLYM>p*xX)=Y z|7LVo+%O*S+-%_^$-I4?r8!>@n}y)>{IZt|9n1L$fwdc~tA3+PYhgGF2{DegEbWLKq`|rzmEnXujnAI}c zwX_>x&$MqcatS7S2xIOi#`AQ@Dad?URO z5iogC?3;F_c4_Pw;tGFmT3Ctr>N2NQUG_}>!YWM-<{P7cG?WLDZ6RW|URhEw@_#MI z-G(4JO`@X8Pr5J)F0~C#WJ2Xu(d)}S?J=Ew0Rk2|TdCq=ixig7$0H0PHSGPpzc?qB zbGhHdeaoFNWI+h|hafx#oLh39O49?%?|E6MAf?cyⓈw-4RE!P@iC+j#1L(`l}-2 zJoJ+ga3M*Waa$+9C${!BA-+g=_Spi6h{cBQQu-{WunhI`V}Jy}6u*y}>>b(2AzHRf zpG2BdSuieAJn9*z?t=ov&@kw9-O(VacyUA1FG5iKV>;Jpebn*w#U zGQrT;4X$SedhV2^A0rE z%zY6w68x`so`1|2>8&Y+uv=V~`=eKZdE?K$Q;;?|rXYLf=68mkFYJ%YX_Ku~oMeEyKe6{PTX49A83N z_;sc;fVa!?0r-j9AM3K`&lhgU{k4)J1l3+#Ub)610?Dp>xh}5NS{nY3&`94@Z~s5v zN%hS<&p-jwWG{dXSXdYhY=|6|oH*F35af7CLur73g5f5SMcwb0-H+>m+pnGpua#L) z%%PYkbURXotqd9N>u-@FfD)thm?Mz%W-6^$33bW!Q}CoL@|1$uvxT-m;4g6M9t}Pg zg!1c+59d8anbDP2dlC0^AxzilR8YKKVBoR8IkMLybVTU&F!cR{zlIIKg8bm`P@pSb z4r z`_+#=B$w}f%bE62_Z-+e<`z4Sq~!4BxbR_P-R~BHJe_wQ8Q`9`(7jicumDzBc>hEAI?hZ6o7d8o97=(kDl|;@+n=Ykg3)?f37?{V!Yg|@_NA4 z4=Z;{&V6q!ED(_sXZN?PBkMtKJ={kcaYULe+gGQUOV#GFe^A9~m?pXBB^B1+6HKE9 zUrkKWZo0edXCu8nQBgfmp_evewb;Ydr05*;)8phr67#7&+6AH<%{k}I8;<4Da+>vH zQ8mq0-XDZi9Nku)bz{*7%3U>X`)B=gs>PNcu7#Ukp<^B9t3ok^**~TggP%uxV+2Z2 zTjYzZSAQS7M;sA^9@VTTj>YrPGM@F_CSaNkMvW`fQ5MKKrs<8`sWy&UV5LV9$iex@ z73!dOE%JD?P+j=a%DK&Zdy+z-`4u?%5+hSwMJJcPLK%~oCDcf#T;hECu6M~k4K2O3 zrKHu`YrW7NKzc8ZZI9%)^Xy+$p zEl29df|c*fW7pi4lhg<=RsnHKRU zFLMWiBmaE|&PdO`z=o&FiZ@ek_NGde>i5W5GHx7XsUI(8~ z=!|v^ah>4{HF%_nEPYUJ+f-l_v>qJ-!5FGcG=f*cdtDDj4RDJ9=ik?C>0*ofkUA>M zl^ZLxJqwG(R8yq3c~%j&kVmvsaYS z=I^qgmnR^O4lJQg`nR(F%8-QDPCk@M8@=hd{UIniM<;%iUh^sSTr#s4GZ6UQcnIXGy!+Q-K}#=VZ>VWvX% z4TkA%B}N>DKh+7C2g)xz_|aWV4Un+xkMbKz$4)-;OBMGMJt@OK`|Whr zKj+6N*GZLKc-rQaA@JHWoK?jteKA5`xDjD3T_)5kF06y={sBO-0Zw1!uv>r)mb{zg zV=A$T7z7DqJ3Vd1OcRx$2l{cE^rUgHz)ZlN@%OfXQ~7V%dmbD|7XE3BH5)*;qU>>u zpz;rgAlv;zDH+_MGDS;(13VuJ&z|=Sba^LYD7&2c0kcuIF{e6xQQ3;5#VqQujT3?u z(LE3E3CZZ%vCzctUL(gby5~C{Y+w@kBDjf7D7UU)Ja>jfc%i!@B*TjLHr6bZh;N2j zmB2_=0SwkAE+K&o0x{*Dtd_=lk=6FWDJLsizr;BjyTln=z9vKGRsK)hy}3@+p$0aF zG`Y~eXdSdf^b^rpZ?FlLot?h$0&B7RpRB-*^HL?hiE;@_wN$j=#avB$!S1z}_M_73 z!98juJ(C>E1%aLqx4m$B@tz~EqGn80tdSEdnzQ91o(iM1#9<+C$D)dXg{io=5k2x0 zbO^Po7oG5}INTFT#XsW0)`aE;7Dn#h-66s?NI5EFE}9TFWa- z?IH$>i0h#7to`5zrBAME&a0vtSUMHk$*4%*7Abi}BK-#sm>4$T;zC=85Mb&9-L$v@ z$06Q2uFti~p#UEhad~jC6PUA$3*F^3KQR}25mkOZ&H^k%&yHfhl4PxM zLWE4Ws$`X-5c5_aI@)jaD$!`j7?jraLXwf1IJ(7IQ0gv;yUgS(t+|d5`CX21qse}wgG8wP)(-G;w9p zFXqwgjDVe19d7b<34vN#pn^W-<$b8#p)D0)>+(Dk8-KzwewScB)=k6tc#0_ie=$V$NQMl16a#QzRmn+i<^%83L=ZNN~_xm^L#hJ0Dfzh^n zZQJp_tS4&r3{UqI-|L6sn&HTg%J*)%xv>#O8L;caFbtX3of2Vea{6!KOa7)h8FFXE zoPqX}2w+F}#mhsf_KSD?SW;u;>r|lP&*c{0_A~YobJZz_kfI*s*jKhZ<{Pm#8jf+W zSd5Dy7YoSh9PAvRvwA84@^S^1wFN~$_A=SHLxs& zu_S?2iY+dw)P!vkQ3kfeTzYoVH&RDz6b&(Jzr%FVU<*5J<9m*V-2HPPwE(q+3Tj*l zs7xSn;QvDW-YZK7vhy`M5rW{v=_yjGN)dW-5>xb7S&TXOJ9a_MD>q{G`&4@335Nk@ zN^<*RdZvBV@6-R;OG-AND5~6_G~CeLG-)|O6{?QLKLSB9`q=U++|c>Q{EDLiP?2Rw z@`Z@(4z7hl#sy{hDsLLl=2mHc)Eu8w&Xr6EZWYBDZ~Nwu=oC(+obaiR=BtW=l)JBr z>8R$@;O<8{u`|NK=i=G`s?h53RypJbo=>W57cFQR&n>|$Ct{aC4{A=dKAtSVh433j zBJ%J!^P&ZAEL&`^rqL(m`yB!t6IKkH;%3*hS! zvn25vKL_9oMyb5it_o;@v`j~hLo*$|*BCU}ZY424$Lqb|@yQ;O0au;HE2$Lgi(Kn zr-l6|7uSQ4(Jn@U!UJ)C^qCTT^p`vNyuLHZd(>e`w=XYE%y$>zI$w6M1Ihih*aZ~J z80#+Af1!+~gTqnmxD{L13zj*Iq%hmDp(7#yuDrx*PC#LZ&E#Fr0M^_M5)NL!Y>s1H zkzw^S=SHeHMxNaKnpi-l1hPm;(3XA8PHyxO{vCvr7tTaa8u7Bxa|4+y0>JX+fV!{7 zhF$FXY6le14{O_y+{$Jd90m)XoF`#@n5y9ZKDZXRJ2qU=`NW_32j%|9|0zRl3R5;B zH-K~MWRV9D@x)F0s^x>lsdBoQcql$-Q z5600*kj_e;eC8~q_;Wc0Kg5+(C1P-Pdf)b*%zbnI3|!8uF}nL=imDf#IRwT&_70#U zp!R1u<&5tp|ZaLc!!*Mu4(f(B$cNEv5%!-yC8%K3U9_*SUn<2 z=^zFW2W>xCtY(GI&HT5XCw6x}XiJ@eIM(sfU;mmgV;K`oWR8{Sj0wYIadZiPc8 zi%8nU&aMc$bB@l!K&Z0D3Um10zFol^IIfhODS%!-LBXk)nv+P^z$z~taonHFx)j8A|l$?5`HJCd^ub zO#;`%Cw*?j0M$XC0+Tu|Dfi>zh8Ed_S{3m}e>Yt5N!dn6`*DtU=_x7St6(j$K|c{m z1H265NzxV{d; zwAoi2@oEv0b&(B;udy85Ib@M>?4IHFEzyQn_z&78<9^z2h=j?Ef*s*3kM5rPSvv1g zo;wd1@I_y7JvT_MwybJW)9`qg|5`H<=%d?apdLxe@gSkun1Tf+F~0n^n20~K2;iDy zzLE%y;I?9?4HX9R_uu84m{; z)!nqM`_;)GSaa8M>kJv93DeQF2fzIKmtc3k{-vc@CvMLt?xpmC_deVW2dl`EWtIII z))!^yy`VF}xIc(+!|1MBk60v>h}wx_9v%V74GXG=%~a@_X0Wv)AU6QrOu)r^M|{N5 zQqALDr=?TmF9%RC`Gd3IRnPhCmbkj|jq8b7v{|yUC%_;zqI4#bS>oxLB+OAxU7feD2x}uFJ>wod zvN@P$XR1s?mk8D(mc2z~K82CKMtQHrgd9k?Jo{-k-X{+gi*OUJ_`^6~v6EY4=z9@% zaJOp1;lZeN%uX0NOIXqi-40c#aUu{k#y-FT51%<>USv^~YdrDY^cU8Gmzm}?ZkFY5 zXq%+#{sw6`QNVF}Y=*4w%WU^r4(Yz4B)k_K2S*8C@U#3;R_|z^_$Ve~<=d&VRSscW zxwRH9G2K_=N@Ufz2-UcRn?18r7;)wA#f}&B!5gry`2|Uf$Di_5$4-uCb-<(^>~EKC zOdLKfl`qexnZ;RONSk%aBdZH%nTE1pa zy0YQHM}Jst^c)XnJE5I$Q@j{7sz2kuC(>33%N+hs00A!(S7}F^;NwCIFB0m?8^R(O zR_#aNJ-Hr15+Msq5JleU)P~|J7RcPYlRB!ANf)t8r5ZSEJ z-4-E$6xMUIieVgJ-v3oP`O0^}flyq&imTx>fb&$4f(}n13My7R`M~3RKK&$U8y>vI z!iKct+Xl#+RR+g$Gm;tP&`||`a-DE@!sx*hSR2G)p(T+S(!=Pkbk_vn|1xkIS}$L2 zx92?@O3~zBsV}KV+J@22Kgq>bnSR1+LtePYS`|Vq2`1YS3p&my+)<8_Sp6K>RD^%<;5~u*f@TgpdG?sAsq4`~?}NgYoLZ9GE0R9A4c z7bl!Jen>0RuhR1%ZaGZzm%Xo~FBWd1E6Vjj@8vuC`h<}y)q?>Y&rd7^&wEfL4SD9B zts{JE-!SVIl4YLN(Ou9=k9!d*xlG%hfid@}%%(D$83rgt;5k9S5S`l%F8VXh-0M$#iMk{7wxPQ?}(VTf>&DF^4p7K;ae8PBcfk%;ALAe zhZ-!$h&ImaS~xcfbP34mpdcrVaKn_mQbR~w-cz|A+(0yQKeD5u&1;T9Q5kc;T z4#dj_ZBVLdrZA$3o9$I2X*%uzXcNLaoLyoYkZ!zdxqcR;cvd)JD=5a9qv7~o5h`8e zG!w@OVZJg^i_fH1*E7N6;J_W#b*Soug6zBvK%>_HgJMIL-TrarkM7?;K2?xWog43j05k-DSW=?)13&Z5jzaw(6P2Rh>+fq zLaN6Iq%X%gcH8%qnye%hUnz=svxOy2JE2Ydea_HQoWY7=NLUCpnb&((9t}nGA1OE} zbAla}cF9~HR+e^G8JCRi@G2~hQ44-8_j8?D^V6Uw+m^{3kZU5aersEBo&nMPop?+v zA2yG5YECb!s-{T6P>jIk5Vt;39aN<+GH6+DtAB_YO`**_&&QCCTifB3aYBg#vy>IJ zfV)sxVJVWE4)GiKt-Y-Ziy&q78!0Rg;tzgqJcKh|l}jvJ#D$1i(y7&>fN=E(-~ORr zpOuUmaxm>@U9~eH(QR z=gy^{J!VZkJ_#Ex7tiAmvvPAYDm<|va*2WfSpFR|Lbc_1YCMJb;FPtkXR`A09$ss% zp{WBytDJLtp|2PAPZ>L$1hgjYTb(?OJ+8+&s)7nFL>)u0u-p?s{3MNj?VM*%VA z-8bCcU|!-HtUfqkGV5z$!(^P6oQ>nIqo#O8m-b{*iN#pdLp5bbb&&lelmC z`_=|y_Nc-@&+$iV$eSKSb`aS@RxhfH@9p=X6pwWjLt;7=ZGmi9ww~`ngzXkNmHn`Y z7jmh620eI|W+v03_XC+ac&p#EK+Y3tL`s$m@$oj)#i7qu`HbvV#S8andd!y^?xTY0 z2DHL6;XRb05r!e&df(3r7F+3~SRoL5WDfi(+1Y8Fu_e!jf{VnDfdEzyE38x+z2aag zN{4UZU5-z2-<>+%4KiCANN1odpA*GDSI(~Hbg@Uq^v$2{{ES?9>Vp0Gw2mAXwN05mX z3YN|uss;1P0rY^;lnW^03WC@ggYeE*qYqTmPM+9LNgnE_&`^}a5mw#9Ts8MHIdY#V+6pcp{y>;J;}zH|43u2Ds9{;X!C3;qdi` z85K|&aof~)1>y#CA(O-S%POBO^_z0IQde1iUz^?D-z+wo@Q^a^i`Amzjn;|V@{j$z zqr2E*9{0KLq(}Yi+v=GvAJ}iO0kI6p{`rE%KY#r3^gVARVYq2Sr5@(79Jpa4P|^2b zYktRXUR+*Yj8v!Zk&(MX7<+j0szkKLvF77If;BLP@3B$*!NTiT*ZCi|+()Wu}> zJl~sDCH0J#1=r=h#j#R;;=BJs|G*)jf2!SZU$MdeWaWRCDhXobbRH&}mGOcNTMawT zn&3w%C=@ROLGx@}OjFZcf9IK!S^=35;N1tmhWg4sU}lPu$0pM)Ju5PyvYPThmp~#M z5z4i^iN#=d*Pl}8F-;+GK$iq|q<<%R$QQ(PPgq6e*i)n#=QfNs1oV0@0BBR$*9_bs zA+0z*GhSqLe;6}X7yJI>|4#q-pLhaupJQ*ZOxUqL@NpnY->FP3hAo66;Cag&RR>lX zdKL+P!xQob#As1bgHNbB3<#pVS&K8sgl<0vtfb(7TP}Qd!(8 zxEdE9G}QOeY_eQE>7RnyW1K@16COTvYDU8iVqgCI7vW zrlO1(A%tHYV*W|_ro&J0CFAp$gdTL;Np#&?so{7bB=@SuS`}F(sch>*z}VEi=6ab za|##>!qX0qUBdMD%h^n+T?N2t3$Qkb%8O~*R6}5E^{OGlz|F+ShbZzO>y$yA(s*k< zfm(_f&1L@K-QIpk;eBYcK0^b)qaXmKh9{qeGNd3}AqL6mZ@tKu``C1TtlW(E-4u4p z57Hz4-b|Y4%=`I}jJnM&FZcJOa2}T1EB@77TInu(0)h0#5>RY#Ksc1ADdn=-ynnLHlq0(Y29_*MqnizWyFX>eFu7Mw97mn$wXcCP!>=na{PFm$3Ujm$7X>tv~f-)w5L?Gb8qn>to zkflgC8&K556urRR*9U`rE9sn!l^LW0R#G{>OwQ?4CiHCWuL)Px-|DYh2y076e@E#> z^MS7^^4~%5W@S3BL(DBt7$;niCK8?Ng;L2`Iod6k{mX*D6@ww+oW!yM<%Gt2xr2q` zmtL)|x(85qz`VeGYAZ}WGxMaRmEWQ|iSIEBRWmmAm^_RhH6i(nLfv^S$(N|s2@IVt zgVV`n1gZ~l%fY}(_L14J>_Xn|@kC%gRpqSiou8e&>nm9-yqz9oU^o^3q`8dwh3pdlp+-;t+hFDw1)pHmH@gK#y_uq=P?76$KNH`e}zCh$^D&xVW-4=#o! zKZ&&DQPG#;!v^Sdmr!|xE_7|257yp`OwqyV7ooS+BJ4&#;Br@r`wyj0R6!l57cB0I z1t}zy^S_n{Vi&#Io9hv9s__D=rzC)k6!{GQR`I7{6+a*Y6P2+Fedk54K~G9ddm(M} z_+pc%ymbyN;N5IGOB?Y90jNDKGon=Sj%khS$~$570M{awP)O_^{7N06$UK+JEz2?R z4q2E=SH0l-sI;8O@kp0RUfhHv#ILDy?~@*mX&}~6c}ABfC{?pWOG5y4Tp--!%jcs) zfo%_k9yP+BcpmWi!AAMf`1VfI->?W5WzL*p^2x0rgg5{CuN2aJd-TQ0{l6G{H2p&$ z1+yf5cl-NCyX(^Dq^R)d4{@SY?rHP76@^Hz+NBbDkC{^tiKs+ohA9%2rI zgoVJdTUa;NH&WD3AjKu6o72rNV;+7PENe2LGP7x!nmKgl`c9k+imbIaRi5slh`2}0 zQDuIX3FoVFxO_vY#vGUAe{upsIQW%!a8{dUhs3V zk*NZNEut~T{d>+(%)W?*FyHK+)aTUvFi_~Z+=X~KY}X}R%25m0ZE~U8E|V%IDaFdX zGSoNRAQ)fs%}mlkx83%$jP5@9z4WBNPGazM$?-m2S%xLIoe6C?4msWZ6ZnrazU?DF z5ACGBgeS=xo&wO>Xm|vd?ArFQAEaxl*kd}7VJ`}^fr>748_*)0|Bmk^S%gZp7(%Gs zK~j;MZ!YZx#L((N^}PPEs5bI$@U2$Ig$VvK&V1xXPz@Um8C}_`&~ZYyNnb?Lp;d?} zr{;3Q4-4axVq*;g!{fq7BGUb(1pylZN|%NP;7bn>O(`@+VOImTm=8d9zgKu-wlgyi zvB3PYZ^n`wD7OYHm>(=VWFHn`rjP=7=j-J@bc4Zqh^;lbK&o-7J>{FI20|&ma+TJ{ipF973+7OlB&Q}hYfQu{3o+0Gs0J|&f08<*}$w&mIiWB z@qS-yVm`IX1PM;X`cfU}am%~|E8+)7l&V%Y1QKvw3Te8^r51xRa7{TxqSIc`wVeS# zhPj0Omm^;|C>~z#Pzn*tDNb0HC-=Q7*lFTc7-7uyHgQBRg&-;(1FHD^_x*xO zy24_Kvz!~=`&a8}KSHJoRs}hqdZ`6qhsXoagU|^;u2US$`QgJBmgXe z8Zg=c&=6%ju+6f~o?!rmizye4d5YK8(_xX#ALkMjPA``E3;q9)f-gUa`WBZs8BQY6 z$l#BrljW((R=E+J>fV`|)3IbFB$ti86wt=9aOXmL^hLkus^hzFErax0uRPG~f(mGC z(@`9O(Qy+hxZMqdy>5;FN&dsGqe5sxuqvAJTK@N2MH^xOj=OAqFnZl%zo>%Pc4&&_ zv5QgtO8#=rRJ>b!5t+-wY&83cS~UQiP}t!qTs3j}+XeZV58yZ&l!I5d9Zv_57ivg6 zKAp$Ay)cMHlg_#6?@Hhn=R8%yZcWqYq(+${OxS=PB_X-Gk`2+>^OG*Q(PD#F@EtJm zCYItP+*IsmnhNSdNw0DfuiYZb?MCIGQS!PLXff<+@!X>iy&vqG6b;uXIA3lPV|*Lw zwif0zdqsR^r|MszzNNy(!=3FiaA3CJ|s5 zBC3|k0y*rmTkf$&;bPI7v^(QnM$j<4do~>5=CCDrV7S16Z&V73jTXzPLR3fwtN?Pg zDHBv6Qvw)7d}3lYwU@#U$VXmf{Ii(Ee&b1B=Sfe#@VvBC=eXpF+)=QaO8y)}3f(HJ zIER%2nX!eXOKEJ>FwRX}Nu9ZsIX}5x#trYW@lHPSqbvejAhuBDIVYB8(j^Px51&iV zf8T>+I2_*I!#Vtudvtz=`IeFBz6VY zTF^G<$Exd1h5~jd-vqhD}e=ygmkwF4~dc3Du+X^fk=UU@$YCaz&Npv%9qxu zpe5eRF=i2DZZ1Mz58zB$q z7-qzg)E0Lw9V<6esDQdKo~LfxSVP?m67u`p8F~uc`E&kFBBo?{uXuK@q;AyG+)9%b zO%#M~4O-vNCkI|-Yvh@CgOpXk5ReoWB&EoD$JJ`)N+dtATycdS%C~3I(qhZA%*<=o z?5=unXV0gf`@70MaBDAj54SsBjP5>@qE8fObrWvXSp9XlG)p}%4QH^OE3;Av$SPE) zxgzD68wOZVW`xCUnqK-XQZ0yJPS5!*WlY9o*PgWobuC_j-=BQ!2b-Ktq4ef(PU^s6 zW64J(5rsi%5vkXDb;rF6{!q!)*MAvzq_#N&RTLvCiUqg}r*N;TVJSR{UZ82TBW`r8 zA8WyO?^~FW_lwvp9Ln-?(kzHSKY1>+p^5?Tw18~JL2m)z#~gO*bM$wk_q;6d-d=dr zQhBjp55R=q^xM}{&_AgT>m92G){K+QuNsy&KZmr)&hh@X?=!j!I@4l?lh#E1yc*|T zOfQy=jerla1S_aXlcL`sG>0qWFB;A*o*Ww-xCXgSQR*5+;L&6pD@d`j7B?|j*k!B}f6N!RlZ=$mFCNF+Sj# zC{L_j!z+GCEe#0J>Qi+gkF$$(STD?;8>AnE!?I+PY2i-3H7wM}*?{rKS@#9Xt-A~u z&^J8g1Ly;~n%%-blwt}CxMt>{xOd{j$(O09-Jc!;Z zjnAr>cbhWlrG*IKtsV_E=-`|r`m{=J`+A($7t&A8c)veW(Dbk z*UIx?$Lt(eQb??p!bI;f*(bB@i6xI(_Q=GnUlF@UFk+rr1>Pxc3axvoZL1_!ZY*ux zxtoP&0{+o?zo7GK$&e9M6xy23KiuWUo@!-}NMrT*f+A{Httc4ho#1afGwT;aU&O%hBm-I3j7v zq*Q5I;skkjX!AVcN50F|a+h-cYyM~r{2g9raCi$ zvHkfO|2PK%t+@c7vtqd2z1WvbP1(^RfVy+XKZVBfM;AOPQY2kKCcEJ~OK2xso@ODE z*t7%cmum-%0{y_z=Hlv={dK-kW}d)hFA6`ijU6}m;n{SybYah&E|rPKtw2jgY<7Mk zg{w3*S+Z!#&Swe=FFhf@Q=oj{l834-@}h$DYsllOssXh2FRO_29H&8=qh8yOp{y6K zuD2*NgX=`nsJwx5hKCSu;Cr(-2<`c<$lOqnErk;v!nnb3+2Gsco_%bU@h!;KUc7TA zg2jsypp4pOKv?Xf0L1n7u@QHwh3Mh-9)rG$vl_WhE^vNm@NubXxS)5tgpuo2*OLFV;Niz$NkLQp>GFCVu^w zAj!b;T7o)22vWesvUb_;g()y3qXHnea>fBp_IC{0=!(N57-4-$_;=yL^>?!Sxs@&1 z$zDwT41ka;USLuM_#iKO#*hqkgv#U?!4YR@X}y+roO z>Z(Mg>Mc&^pG-gT<5Bq!e0{Jd&`cbJqGreqv^)$FS~KtKr#8eBGm8yj>c@H4|2`EF^` zM9~ffS(R1ar_xuHx@#2_QsFy_8cu^8!3oL|uMYaPXDA=d^zs%9GOE8zqpv(86H}tG zY%iT!ejhd}vCX{-wEXYz|MzUUTu#q=4#jD(3+BHe%8nI=)j9qqT^kWO=C4WE zM^uJp82#Ix7~E8@UcWku#mGoEqHb&cI0tNQ`N4GB$iDV#qEm>-AdFGvkYG#Q3eJHh z7Z3L+V1rN>ss$}4$d3>>-)(V4kytM&yXNh$e*t&yOdQ@1rx*UQuX8%W;tlr3E$K)1 zebWd3b3~)IzpXbVStJ1w6!rCjx4W$gicT$^fHAK3PNj@he(c4ZSDeBNsEC(8SZ1ro z%HjY-6cng^#mA@g4?fO^zPT0<_9MSk&hVhHTni6hZTv}25r1=?nj09MJlpayHzHex z{e&(_s*5Pg3)B#sth~Oifkea=>N~cmua3ztas|&Wfy}`c$8~m|%N4pPt<6nacz^+! zRYD{U8J)GpviPddG6;=-+3Q2wgd*`eHN}izfBiH)k_tzmrPe8(NmE4eJi7eGUZB_3 z29P-R<7$Zfjm$$`Ef6B+B0%q* zyg|VK&D_Nt_-w@R*RGLx83nWd0AmX75Q`8!O2RqXOA}TfH;VNYR3Dx_o`sypL3QxT zimTfS3(F}7XAsC?MESRbMa+X15%QB`_8Lu*Tw9!$vBtFHGs0#Qx@|}>{ zNYazh2dAJ&g_k~eqa&Ug*7EL9W!!uJEf)FTDhkuwcN~kc?&))!9+vIV+8?K9 zLsy|L6p8UZ0oPA>(Yti6e~V-gXRz{^7O*pNL!f=mB@xL4M>p z)oaRd^1P4k0z!Jcj8M6)QrwI$%pKHw$wY|+%=U5xAU^T2IvH%$HVCu>*#<9_PT5&H ziDH^%%0szafMO@UtEpcQ=(3^#l zt?01=dElOJ_@y%4ly8)UT~?cmh~5b#3nnF^chaKAu^GXd0Cn)Cgj=uL9gglko1XP& zIqXvhP>DyaRp=nq(_*FsGyOJkdGt4JS_qidanM(2VfXc4QT+bt=zTBmknR)2BZ_^4 zF#Ro#Yyd0%`{-}1^b{T%zwicZ1KEah0uc+*Qd=*g|MzJnf3GayRHrMzWoNFuwcM5q z1|ePi^v#p^l^}bIq)W6sB$_0ExtDE;igf=Cdw$qZIFexjh}MJfPwnUQXiRH`lKb8I zg=%$v?3r#7)?pGau}zObSA}{d>46Iy_mQ1L0b+5_MGt+n>q~Q571CZI6$+tCc5sMj z`bk#d4zWH$ve7P_*%hyX@|3)#FqePQg;?U7C+DZ|XsY_^O)CJlpctxi-*Z;U`(g^2 z=?B1n;UHzGb6lG)0bZwkCgu*U;RnI-!1kmZ4olTvQ`F~DqeaVXP5{1(?6q>DDhfPJ zD8i9kn&M2;q@-X5ZxX25-)GPkHh@5BpAvzC|4{JE;>D2|q-{VY*1tUK?QJxbNMp3`4dN}P!V*iGJPlhlO zygCIbgsJ%*zLTDO(!8bDdnTfIt`#Yu39?W}qy|Z{@0K?;Ocs`vuf58{wa9H(I ztfMN}6*WyD8;pRGb(<_xPO63l*V94RW*fFQu<@^XW9nF_D*`!rTb6$eb)O3IJ)yXUI<{KyXGDeM> ztvI)^kvJ6y3&)l2Qk#5o&joE@#|R6drGm{NE{7x#JkHYb;q0F<6CXAk|6#9Hclg8; zadh4##G{5IByz!RhZmA7ysdK3vN?e^)L?ic_l9l;|g<^k5GrADMOT<~i zQl-~v1ax*}oxJMnD`g2^LnJ2AMby)?qU#o5He=QBh(HG=5Nxm_07&(NzyA6!%NuQl z=LQvS0Oo^-GG82Jw}V4VW^v_>AagZjdWuaG(Pr#SyiN`XFKEur7MFk&L*(bwUE+3F zQs6)bB{YV5Yxx29p!4!{&`g_rNg>(JoozCwQ^+tg6dIQ-*H64nIe6VFsT|UTY9Uup z48sG)tB1=Ys_(H5VLOn28DRqz6r!@&z`k@-cEY5mKtv-a$~!>Pr{otw<8n`+(p*n~ zA3qgW#D3d|OgU&;AO=i&Dc~ehcMI?kszYaF`Qc()X1J$nCM`eXzb~i7X|Fku$A*i^ z9||MozlUizNN5Q5`)v}0cglSfX{z-iz8*Ck{v6gc>PG9>5fX-X1hBBK=>Um;YoY6v z5*=k6r6^faUNivpkU{+*N#s7u8>}qaIS#F3oi}UOy}cxOyZioj<}ngUpx3C?G+tWl z9Y&Kvg^TIMl=F~&>IDSPnp&0B!<=_0i#LS%j@;#`$D&4Ps@*CA1iokVr7!r?pQfMs zqjP7e`7F?LfxIgF;{knCe`o)!P57MEo&-8Kl!fNY0a~syKo|-g<)K3>zH##Q3CASL zXY{7;3Vq-w>Esh%;o@w1+LHo63%(Zcr6t9NrHv z$7%Ddm4dnQ>9mmZa*ObP_~vtT_VHJNUwMec3d!?S_4y~hy75Q8>U6+ESA}nCk3i)& HuKa%il+r>+ literal 0 HcmV?d00001 diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 1c73de0a3e92eb..6757ad1cca1a23 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -28,10 +28,14 @@ llama_build_executable(test-tokenizer-0-falcon.cpp) llama_test_executable (test-tokenizer-0-falcon test-tokenizer-0-falcon.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-falcon.gguf) llama_build_executable(test-tokenizer-1-llama.cpp) llama_test_executable (test-tokenizer-1-llama test-tokenizer-1-llama.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-llama.gguf) +llama_test_executable(test-tokenizer-1-baichuan test-tokenizer-1-llama.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-baichuan.gguf) llama_build_executable(test-tokenizer-1-bpe.cpp) llama_test_executable (test-tokenizer-1-falcon test-tokenizer-1-bpe.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-falcon.gguf) llama_test_executable(test-tokenizer-1-aquila test-tokenizer-1-bpe.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-aquila.gguf) llama_test_executable(test-tokenizer-1-mpt test-tokenizer-1-bpe.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-mpt.gguf) +llama_test_executable(test-tokenizer-1-gpt-neox test-tokenizer-1-bpe.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-gpt-neox.gguf) +llama_test_executable(test-tokenizer-1-refact test-tokenizer-1-bpe.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-refact.gguf) +llama_test_executable(test-tokenizer-1-starcoder test-tokenizer-1-bpe.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../models/ggml-vocab-starcoder.gguf) llama_build_and_test_executable(test-grammar-parser.cpp) llama_build_and_test_executable(test-llama-grammar.cpp) llama_build_and_test_executable(test-grad0.cpp) # SLOW diff --git a/tests/test-tokenizer-1-bpe.cpp b/tests/test-tokenizer-1-bpe.cpp index 85a59a14dcd536..386530f23f92cc 100644 --- a/tests/test-tokenizer-1-bpe.cpp +++ b/tests/test-tokenizer-1-bpe.cpp @@ -91,9 +91,19 @@ int main(int argc, char **argv) { } } } - // TODO: why doesn't this work for the full range of Unicodes? + // Restrict to assigned unicode planes // for (uint32_t cp = 0x10000; cp < 0x0010ffff; ++cp) { - for (uint32_t cp = 0x10000; cp < 0x00080000; ++cp) { + for (uint32_t cp = 0x10000; cp < 0x00040000; ++cp) { + std::string str = codepoint_to_utf8(cp); + std::vector tokens = llama_tokenize(ctx, str, false); + std::string check = llama_detokenize_bpe(ctx, tokens); + if (str != check) { + fprintf(stderr, "%s : error: codepoint %x detokenizes to '%s'(%zu) instead of '%s'(%zu)\n", + __func__, cp, check.c_str(), check.length(), str.c_str(), str.length()); + return 4; + } + } + for (uint32_t cp = 0x000e0000; cp < 0x0010ffff; ++cp) { std::string str = codepoint_to_utf8(cp); std::vector tokens = llama_tokenize(ctx, str, false); std::string check = llama_detokenize_bpe(ctx, tokens); @@ -103,7 +113,6 @@ int main(int argc, char **argv) { return 4; } } - llama_free_model(model); llama_free(ctx); From 2b4ea35e56792064598e922e46d081e02bc96b94 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Tue, 24 Oct 2023 16:48:37 +0300 Subject: [PATCH 08/79] cuda : add batched cuBLAS GEMM for faster attention (#3749) * cmake : add helper for faster CUDA builds * batched : add NGL arg * ggml : skip nops in compute_forward * cuda : minor indentation * cuda : batched cuBLAS GEMMs for src0 F16 and src1 F32 (attention ops) * Apply suggestions from code review These changes plus: ```c++ #define cublasGemmBatchedEx hipblasGemmBatchedEx ``` are needed to compile with ROCM. I haven't done performance testing, but it seems to work. I couldn't figure out how to propose a change for lines outside what the pull changed, also this is the first time trying to create a multi-part review so please forgive me if I mess something up. * cuda : add ROCm / hipBLAS cublasGemmBatchedEx define * cuda : add cublasGemmStridedBatchedEx for non-broadcasted cases * cuda : reduce mallocs in cublasGemmBatchedEx branch * cuda : add TODO for calling cublas from kernel + using mem pool --------- Co-authored-by: Kerfuffle <44031344+KerfuffleV2@users.noreply.github.com> --- CMakeLists.txt | 1 + examples/batched/batched.cpp | 11 +- ggml-cuda.cu | 190 +++++++++++++++++++++++++++++++++-- ggml.c | 4 + 4 files changed, 193 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6af42a6c266c83..202f260491d393 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -331,6 +331,7 @@ if (LLAMA_CUBLAS) set(CMAKE_CUDA_ARCHITECTURES "60;61;70") # needed for f16 CUDA intrinsics else() set(CMAKE_CUDA_ARCHITECTURES "52;61;70") # lowest CUDA 12 standard + lowest for integer intrinsics + #set(CMAKE_CUDA_ARCHITECTURES "") # use this to compile much faster, but only F16 models work endif() endif() message(STATUS "Using CUDA architectures: ${CMAKE_CUDA_ARCHITECTURES}") diff --git a/examples/batched/batched.cpp b/examples/batched/batched.cpp index 75856a81fe9b1b..22a4265df77c09 100644 --- a/examples/batched/batched.cpp +++ b/examples/batched/batched.cpp @@ -11,7 +11,7 @@ int main(int argc, char ** argv) { gpt_params params; if (argc == 1 || argv[1][0] == '-') { - printf("usage: %s MODEL_PATH [PROMPT] [PARALLEL] [LEN]\n" , argv[0]); + printf("usage: %s MODEL_PATH [PROMPT] [PARALLEL] [LEN] [NGL]\n" , argv[0]); return 1 ; } @@ -21,6 +21,9 @@ int main(int argc, char ** argv) { // total length of the sequences including the prompt int n_len = 32; + // number of layers to offload to the GPU + int n_gpu_layers = 0; + if (argc >= 2) { params.model = argv[1]; } @@ -37,6 +40,10 @@ int main(int argc, char ** argv) { n_len = std::atoi(argv[4]); } + if (argc >= 6) { + n_gpu_layers = std::atoi(argv[5]); + } + if (params.prompt.empty()) { params.prompt = "Hello my name is"; } @@ -49,7 +56,7 @@ int main(int argc, char ** argv) { llama_model_params model_params = llama_model_default_params(); - // model_params.n_gpu_layers = 99; // offload all layers to the GPU + model_params.n_gpu_layers = n_gpu_layers; llama_model * model = llama_load_model_from_file(params.model.c_str(), model_params); diff --git a/ggml-cuda.cu b/ggml-cuda.cu index 654d3632fc179a..db053e3b8a9d81 100644 --- a/ggml-cuda.cu +++ b/ggml-cuda.cu @@ -29,6 +29,8 @@ #define __shfl_xor_sync(mask, var, laneMask, width) __shfl_xor(var, laneMask, width) #define cublasCreate hipblasCreate #define cublasGemmEx hipblasGemmEx +#define cublasGemmBatchedEx hipblasGemmBatchedEx +#define cublasGemmStridedBatchedEx hipblasGemmStridedBatchedEx #define cublasHandle_t hipblasHandle_t #define cublasSetMathMode(handle, mode) CUBLAS_STATUS_SUCCESS #define cublasSetStream hipblasSetStream @@ -4326,13 +4328,13 @@ static __global__ void mul_mat_vec_nc_f16_f32( // nc == non-contiguous const half * x = (const half *) vx; - const int row_x = blockDim.y*blockIdx.y + threadIdx.y; - const int channel = blockDim.z*blockIdx.z + threadIdx.z; + const int row_x = blockDim.y*blockIdx.y + threadIdx.y; + const int channel = blockDim.z*blockIdx.z + threadIdx.z; const int channel_x = channel / channel_x_divisor; - const int nrows_y = ncols_x; + const int nrows_y = ncols_x; const int nrows_dst = nrows_x; - const int row_dst = row_x; + const int row_dst = row_x; const int idst = channel*nrows_dst + row_dst; @@ -4345,13 +4347,13 @@ static __global__ void mul_mat_vec_nc_f16_f32( // nc == non-contiguous break; } - const int ix = channel_x*channel_stride_x + row_x*row_stride_x + col_x; - const float xi = __half2float(x[ix]); - const int row_y = col_x; + const int ix = channel_x*channel_stride_x + row_x*row_stride_x + col_x; const int iy = channel*nrows_y + row_y; + const float xi = __half2float(x[ix]); + tmp += xi * y[iy]; } @@ -7013,7 +7015,8 @@ static void ggml_cuda_mul_mat_vec_p021(const ggml_tensor * src0, const ggml_tens } static void ggml_cuda_mul_mat_vec_nc(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst){ - GGML_ASSERT(!ggml_is_contiguous(src0) && ggml_is_contiguous(src1)); + GGML_ASSERT(!ggml_is_transposed(src0)); + GGML_ASSERT(!ggml_is_transposed(src1)); GGML_ASSERT(!ggml_is_permuted(src0)); GGML_ASSERT(src0->backend != GGML_BACKEND_GPU_SPLIT); GGML_ASSERT(src0->type == GGML_TYPE_F16); @@ -7023,11 +7026,11 @@ static void ggml_cuda_mul_mat_vec_nc(const ggml_tensor * src0, const ggml_tensor const int64_t ne01 = src0->ne[1]; const int64_t ne02 = src0->ne[2]; - const int64_t ne12 = src1->ne[2]; - const int64_t nb01 = src0->nb[1]; const int64_t nb02 = src0->nb[2]; + const int64_t ne12 = src1->ne[2]; + CUDA_CHECK(ggml_cuda_set_device(g_main_device)); cudaStream_t main_stream = g_cudaStreams[g_main_device][0]; @@ -7046,6 +7049,159 @@ static void ggml_cuda_mul_mat_vec_nc(const ggml_tensor * src0, const ggml_tensor ggml_mul_mat_vec_nc_f16_f32_cuda(src0_ddq, src1_ddf, dst_ddf, ne00, ne01, row_stride_x, ne02, ne12, channel_stride_x, main_stream); } +static void ggml_cuda_mul_mat_mat_batched_cublas(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst){ + GGML_ASSERT(!ggml_is_transposed(src0)); + GGML_ASSERT(!ggml_is_transposed(src1)); + GGML_ASSERT(src0->backend != GGML_BACKEND_GPU_SPLIT); + GGML_ASSERT(src0->type == GGML_TYPE_F16); + GGML_ASSERT(src1->type == GGML_TYPE_F32); + + const int64_t ne00 = src0->ne[0]; GGML_UNUSED(ne00); + const int64_t ne01 = src0->ne[1]; + const int64_t ne02 = src0->ne[2]; + const int64_t ne03 = src0->ne[3]; + + const int64_t nb01 = src0->nb[1]; + const int64_t nb02 = src0->nb[2]; GGML_UNUSED(nb02); + const int64_t nb03 = src0->nb[3]; GGML_UNUSED(nb03); + + const int64_t ne10 = src1->ne[0]; + const int64_t ne11 = src1->ne[1]; + const int64_t ne12 = src1->ne[2]; + const int64_t ne13 = src1->ne[3]; + + const int64_t nb11 = src1->nb[1]; + const int64_t nb12 = src1->nb[2]; GGML_UNUSED(nb12); + const int64_t nb13 = src1->nb[3]; GGML_UNUSED(nb13); + + const int64_t ne1 = ggml_nelements(src1); + const int64_t ne = ggml_nelements(dst); + + CUDA_CHECK(ggml_cuda_set_device(g_main_device)); + cudaStream_t main_stream = g_cudaStreams[g_main_device][0]; + + int id; + CUDA_CHECK(cudaGetDevice(&id)); + CUBLAS_CHECK(cublasSetStream(g_cublas_handles[id], main_stream)); + + ggml_tensor_extra_gpu * src0_extra = (ggml_tensor_extra_gpu *) src0->extra; + void * src0_ddq = src0_extra->data_device[g_main_device]; + half * src0_as_f16 = (half *) src0_ddq; + + ggml_tensor_extra_gpu * src1_extra = (ggml_tensor_extra_gpu *) src1->extra; + float * src1_ddf = (float *) src1_extra->data_device[g_main_device]; + + ggml_tensor_extra_gpu * dst_extra = (ggml_tensor_extra_gpu *) dst->extra; + float * dst_ddf = (float *) dst_extra->data_device[g_main_device]; + + // convert src1 to fp16 + const to_fp16_cuda_t to_fp16_cuda = ggml_get_to_fp16_cuda(src1->type); + GGML_ASSERT(to_fp16_cuda != nullptr); + + size_t src1_as = 0; + half * src1_as_f16 = (half *) ggml_cuda_pool_malloc(ne1 * sizeof(half), &src1_as); + to_fp16_cuda(src1_ddf, src1_as_f16, ne1, main_stream); + + size_t dst_as = 0; + half * dst_f16 = (half *) ggml_cuda_pool_malloc(ne * sizeof(half), &dst_as); + + GGML_ASSERT(ne12 % ne02 == 0); + GGML_ASSERT(ne13 % ne03 == 0); + + // broadcast factors + const int64_t r2 = ne12/ne02; + const int64_t r3 = ne13/ne03; + + const half alpha_f16 = 1.0f; + const half beta_f16 = 0.0f; + +#if 0 + // use cublasGemmEx + { + for (int i13 = 0; i13 < ne13; ++i13) { + for (int i12 = 0; i12 < ne12; ++i12) { + int i03 = i13 / r3; + int i02 = i12 / r2; + + CUBLAS_CHECK( + cublasGemmEx(g_cublas_handles[id], CUBLAS_OP_T, CUBLAS_OP_N, + ne01, ne11, ne10, + &alpha_f16, (const char *) src0_as_f16 + i02*src0->nb[2] + i03*src0->nb[3] , CUDA_R_16F, nb01/sizeof(half), + (const char *) src1_as_f16 + i12*src1->nb[2]/2 + i13*src1->nb[3]/2, CUDA_R_16F, nb11/sizeof(float), + &beta_f16, ( char *) dst_f16 + i12* dst->nb[2]/2 + i13* dst->nb[3]/2, CUDA_R_16F, ne01, + CUBLAS_COMPUTE_16F, + CUBLAS_GEMM_DEFAULT_TENSOR_OP)); + } + } + } +#else + if (r2 == 1 && r3 == 1 && src0->nb[2]*src0->ne[2] == src0->nb[3] && src1->nb[2]*src1->ne[2] == src1->nb[3]) { + // there is no broadcast and src0, src1 are contiguous across dims 2, 3 + // use cublasGemmStridedBatchedEx + CUBLAS_CHECK( + cublasGemmStridedBatchedEx(g_cublas_handles[id], CUBLAS_OP_T, CUBLAS_OP_N, + ne01, ne11, ne10, + &alpha_f16, (const char *) src0_as_f16, CUDA_R_16F, nb01/sizeof(half), src0->nb[2]/sizeof(half), // strideA + (const char *) src1_as_f16, CUDA_R_16F, nb11/sizeof(float), src1->nb[2]/sizeof(float), // strideB + &beta_f16, ( char *) dst_f16, CUDA_R_16F, ne01, dst->nb[2]/sizeof(float), // strideC + ne12*ne13, + CUBLAS_COMPUTE_16F, + CUBLAS_GEMM_DEFAULT_TENSOR_OP)); + } else { + // use cublasGemmBatchedEx + // TODO: https://github.com/ggerganov/llama.cpp/pull/3749#discussion_r1369997000 + const int ne23 = ne12*ne13; + + // TODO: avoid this alloc + void ** ptrs = (void **) malloc(3*ne23*sizeof(void *)); + + for (int i13 = 0; i13 < ne13; ++i13) { + for (int i12 = 0; i12 < ne12; ++i12) { + int i03 = i13 / r3; + int i02 = i12 / r2; + + ptrs[0*ne23 + i12 + i13*ne12] = (char *) src0_as_f16 + i02*src0->nb[2] + i03*src0->nb[3]; + ptrs[1*ne23 + i12 + i13*ne12] = (char *) src1_as_f16 + i12*src1->nb[2]/2 + i13*src1->nb[3]/2; + ptrs[2*ne23 + i12 + i13*ne12] = (char *) dst_f16 + i12* dst->nb[2]/2 + i13* dst->nb[3]/2; + } + } + + // allocate device memory for pointers + void ** ptrs_as = nullptr; + CUDA_CHECK(cudaMalloc(&ptrs_as, 3*ne23*sizeof(void *))); + + // TODO: this does not work for some reason -- not sure why? + //size_t ptrs_s = 0; + //ptrs_as = (void **) ggml_cuda_pool_malloc(3*ne23*sizeof(void *), &ptrs_s); + + // copy pointers to device + CUDA_CHECK(cudaMemcpy(ptrs_as, ptrs, 3*ne23*sizeof(void *), cudaMemcpyHostToDevice)); + + free(ptrs); + + CUBLAS_CHECK( + cublasGemmBatchedEx(g_cublas_handles[id], CUBLAS_OP_T, CUBLAS_OP_N, + ne01, ne11, ne10, + &alpha_f16, (const void **) (ptrs_as + 0*ne23), CUDA_R_16F, nb01/sizeof(half), + (const void **) (ptrs_as + 1*ne23), CUDA_R_16F, nb11/sizeof(float), + &beta_f16, ( void **) (ptrs_as + 2*ne23), CUDA_R_16F, ne01, + ne23, + CUBLAS_COMPUTE_16F, + CUBLAS_GEMM_DEFAULT_TENSOR_OP)); + + // free device memory for pointers + CUDA_CHECK(cudaFree(ptrs_as)); + //ggml_cuda_pool_free(ptrs_as, ptrs_s); + } +#endif + + const to_fp32_cuda_t to_fp32_cuda = ggml_get_to_fp32_cuda(GGML_TYPE_F16); + to_fp32_cuda(dst_f16, dst_ddf, ne, main_stream); + + ggml_cuda_pool_free(src1_as_f16, src1_as); + ggml_cuda_pool_free(dst_f16, dst_as); +} + static void ggml_cuda_mul_mat(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { bool all_on_device = (src0->backend == GGML_BACKEND_GPU || src0->backend == GGML_BACKEND_GPU_SPLIT) && src1->backend == GGML_BACKEND_GPU && dst->backend == GGML_BACKEND_GPU; @@ -7058,10 +7214,22 @@ static void ggml_cuda_mul_mat(const ggml_tensor * src0, const ggml_tensor * src1 } } + // debug helpers + //printf("src0: %8d %8d %8d %8d\n", src0->ne[0], src0->ne[1], src0->ne[2], src0->ne[3]); + //printf(" %8d %8d %8d %8d\n", src0->nb[0], src0->nb[1], src0->nb[2], src0->nb[3]); + //printf("src1: %8d %8d %8d %8d\n", src1->ne[0], src1->ne[1], src1->ne[2], src1->ne[3]); + //printf(" %8d %8d %8d %8d\n", src1->nb[0], src1->nb[1], src1->nb[2], src1->nb[3]); + //printf("src0 is contiguous %d, transposed %d, type = %s, name = %s\n", ggml_is_contiguous(src0), ggml_is_transposed(src0), ggml_type_name(src0->type), src0->name); + //printf("src1 is contiguous %d, transposed %d, type = %s, name = %s\n", ggml_is_contiguous(src1), ggml_is_transposed(src1), ggml_type_name(src1->type), src1->name); + if (all_on_device && src0->type == GGML_TYPE_F16 && ggml_is_permuted(src0) && ggml_is_permuted(src1) && src1->ne[1] == 1) { + // KQ ggml_cuda_mul_mat_vec_p021(src0, src1, dst); - } else if (all_on_device && !ggml_is_contiguous(src0) && ggml_is_contiguous(src1) && src1->ne[1] == 1) { + } else if (all_on_device && src0->type == GGML_TYPE_F16 && !ggml_is_contiguous(src0) && !ggml_is_transposed(src1) && src1->ne[1] == 1) { + // KQV ggml_cuda_mul_mat_vec_nc(src0, src1, dst); + } else if (all_on_device && src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F32 && !ggml_is_transposed(src0) && !ggml_is_transposed(src1) && src1->ne[2]*src1->ne[3] > 1) { + ggml_cuda_mul_mat_mat_batched_cublas(src0, src1, dst); } else if (src0->type == GGML_TYPE_F32) { ggml_cuda_op_mul_mat(src0, src1, dst, ggml_cuda_op_mul_mat_cublas, false); } else if (ggml_is_quantized(src0->type) || src0->type == GGML_TYPE_F16) { diff --git a/ggml.c b/ggml.c index 49f3b7aba31f56..17f0ce48775923 100644 --- a/ggml.c +++ b/ggml.c @@ -16602,6 +16602,10 @@ static void ggml_compute_forward_cross_entropy_loss_back( static void ggml_compute_forward(struct ggml_compute_params * params, struct ggml_tensor * tensor) { GGML_ASSERT(params); + if (tensor->op == GGML_OP_NONE) { + return; + } + #ifdef GGML_USE_CUBLAS bool skip_cpu = ggml_cuda_compute_forward(params, tensor); if (skip_cpu) { From abd21fc99f1d35e2081e4c01dc09c71a86bf3c5a Mon Sep 17 00:00:00 2001 From: John Smith <67539080+kingsidelee@users.noreply.github.com> Date: Wed, 25 Oct 2023 01:48:45 +0800 Subject: [PATCH 09/79] cmake : add missed dependencies (#3763) --- examples/main-cmake-pkg/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/examples/main-cmake-pkg/CMakeLists.txt b/examples/main-cmake-pkg/CMakeLists.txt index 90813188460e08..cb00edbbbe3749 100644 --- a/examples/main-cmake-pkg/CMakeLists.txt +++ b/examples/main-cmake-pkg/CMakeLists.txt @@ -16,6 +16,8 @@ add_library(common OBJECT ${_common_path}/console.cpp ${_common_path}/grammar-parser.h ${_common_path}/grammar-parser.cpp + ${_common_path}/sampling.h + ${_common_path}/sampling.cpp ) # WARNING: because build-info.h is auto-generated, it will only From b2f7e04bd312eaf97eee0523aa09d950d585626b Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Tue, 24 Oct 2023 21:51:20 +0300 Subject: [PATCH 10/79] sync : ggml (conv ops + cuda MSVC fixes) (#3765) ggml-ci --- ggml-cuda.cu | 10 +- ggml.c | 442 +++++++++++++++++++++++++++++++++++++++++---------- ggml.h | 15 +- 3 files changed, 371 insertions(+), 96 deletions(-) diff --git a/ggml-cuda.cu b/ggml-cuda.cu index db053e3b8a9d81..d1e874b6c778af 100644 --- a/ggml-cuda.cu +++ b/ggml-cuda.cu @@ -5664,10 +5664,10 @@ void ggml_init_cublas() { GGML_ASSERT(g_device_count <= GGML_CUDA_MAX_DEVICES); int64_t total_vram = 0; fprintf(stderr, "%s: found %d " GGML_CUDA_NAME " devices:\n", __func__, g_device_count); - for (int64_t id = 0; id < g_device_count; ++id) { + for (int id = 0; id < g_device_count; ++id) { cudaDeviceProp prop; CUDA_CHECK(cudaGetDeviceProperties(&prop, id)); - fprintf(stderr, " Device %ld: %s, compute capability %d.%d\n", id, prop.name, prop.major, prop.minor); + fprintf(stderr, " Device %d: %s, compute capability %d.%d\n", id, prop.name, prop.major, prop.minor); g_tensor_split[id] = total_vram; total_vram += prop.totalGlobalMem; @@ -5677,15 +5677,15 @@ void ggml_init_cublas() { g_compute_capabilities[id] = 100*prop.major + 10*prop.minor; #endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) } - for (int64_t id = 0; id < g_device_count; ++id) { + for (int id = 0; id < g_device_count; ++id) { g_tensor_split[id] /= total_vram; } - for (int64_t id = 0; id < g_device_count; ++id) { + for (int id = 0; id < g_device_count; ++id) { CUDA_CHECK(ggml_cuda_set_device(id)); // create cuda streams - for (int64_t is = 0; is < MAX_STREAMS; ++is) { + for (int is = 0; is < MAX_STREAMS; ++is) { CUDA_CHECK(cudaStreamCreateWithFlags(&g_cudaStreams[id][is], cudaStreamNonBlocking)); } diff --git a/ggml.c b/ggml.c index 17f0ce48775923..6f66bab051cea4 100644 --- a/ggml.c +++ b/ggml.c @@ -571,7 +571,6 @@ int64_t ggml_cycles_per_ms(void) { #define ggml_perf_cycles_per_ms() 0 #endif - // // cache line // @@ -1828,7 +1827,6 @@ ggml_type_traits_t ggml_internal_get_type_traits(enum ggml_type type) { return type_traits[type]; } - // // simd mappings // @@ -4057,16 +4055,17 @@ static const char * GGML_OP_NAME[GGML_OP_COUNT] = { "ALIBI", "CLAMP", "CONV_1D", + "CONV_1D_STAGE_0", + "CONV_1D_STAGE_1", "CONV_TRANSPOSE_1D", "CONV_2D", + "CONV_2D_STAGE_0", + "CONV_2D_STAGE_1", "CONV_TRANSPOSE_2D", "POOL_1D", "POOL_2D", "UPSCALE", - "CONV_1D_STAGE_0", - "CONV_1D_STAGE_1", - "FLASH_ATTN", "FLASH_FF", "FLASH_ATTN_BACK", @@ -4092,7 +4091,7 @@ static const char * GGML_OP_NAME[GGML_OP_COUNT] = { "CROSS_ENTROPY_LOSS_BACK", }; -static_assert(GGML_OP_COUNT == 71, "GGML_OP_COUNT != 71"); +static_assert(GGML_OP_COUNT == 73, "GGML_OP_COUNT != 73"); static const char * GGML_OP_SYMBOL[GGML_OP_COUNT] = { "none", @@ -4143,16 +4142,17 @@ static const char * GGML_OP_SYMBOL[GGML_OP_COUNT] = { "alibi(x)", "clamp(x)", "conv_1d(x)", + "conv_1d_stage_0(x)", + "conv_1d_stage_1(x)", "conv_transpose_1d(x)", "conv_2d(x)", + "conv_2d_stage_0(x)", + "conv_2d_stage_1(x)", "conv_transpose_2d(x)", "pool_1d(x)", "pool_2d(x)", "upscale(x)", - "conv_1d_stage_0(x)", - "conv_1d_stage_1(x)", - "flash_attn(x)", "flash_ff(x)", "flash_attn_back(x)", @@ -4178,7 +4178,7 @@ static const char * GGML_OP_SYMBOL[GGML_OP_COUNT] = { "cross_entropy_loss_back(x,y)", }; -static_assert(GGML_OP_COUNT == 71, "GGML_OP_COUNT != 71"); +static_assert(GGML_OP_COUNT == 73, "GGML_OP_COUNT != 73"); static_assert(GGML_OP_POOL_COUNT == 2, "GGML_OP_POOL_COUNT != 2"); @@ -4209,8 +4209,10 @@ static void ggml_setup_op_has_task_pass(void) { p[GGML_OP_CONV_1D ] = true; p[GGML_OP_CONV_1D_STAGE_0 ] = true; p[GGML_OP_CONV_1D_STAGE_1 ] = true; - p[GGML_OP_CONV_2D ] = true; p[GGML_OP_CONV_TRANSPOSE_1D ] = true; + p[GGML_OP_CONV_2D ] = true; + p[GGML_OP_CONV_2D_STAGE_0 ] = true; + p[GGML_OP_CONV_2D_STAGE_1 ] = true; p[GGML_OP_CONV_TRANSPOSE_2D ] = true; p[GGML_OP_FLASH_ATTN_BACK ] = true; p[GGML_OP_CROSS_ENTROPY_LOSS ] = true; @@ -5954,7 +5956,6 @@ struct ggml_tensor * ggml_sqrt_inplace( return ggml_sqrt_impl(ctx, a, true); } - // ggml_log static struct ggml_tensor * ggml_log_impl( @@ -6008,7 +6009,6 @@ struct ggml_tensor * ggml_sum( return result; } - // ggml_sum_rows struct ggml_tensor * ggml_sum_rows( @@ -6640,7 +6640,6 @@ struct ggml_tensor * ggml_set_2d_inplace( return ggml_set_impl(ctx, a, b, nb1, a->nb[2], a->nb[3], offset, false); } - // ggml_cpy static struct ggml_tensor * ggml_cpy_impl( @@ -6720,7 +6719,6 @@ struct ggml_tensor * ggml_cont_inplace( return ggml_cont_impl(ctx, a, true); } - // make contiguous, with new shape GGML_API struct ggml_tensor * ggml_cont_1d( struct ggml_context * ctx, @@ -7173,7 +7171,6 @@ struct ggml_tensor * ggml_diag( return result; } - // ggml_diag_mask_inf static struct ggml_tensor * ggml_diag_mask_inf_impl( @@ -7285,7 +7282,6 @@ struct ggml_tensor * ggml_soft_max_inplace( return ggml_soft_max_impl(ctx, a, true); } - // ggml_soft_max_back static struct ggml_tensor * ggml_soft_max_back_impl( @@ -7702,7 +7698,11 @@ GGML_API struct ggml_tensor * ggml_conv_transpose_1d( // ggml_conv_2d -struct ggml_tensor * ggml_conv_2d( +// im2col: [N, IC, IH, IW] => [N, OH, OW, IC*KH*KW] +// a: [OC,IC, KH, KW] +// b: [N, IC, IH, IW] +// result: [N, OH, OW, IC*KH*KW] +static struct ggml_tensor * ggml_conv_2d_stage_0( struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, @@ -7721,17 +7721,21 @@ struct ggml_tensor * ggml_conv_2d( is_node = true; } + const int64_t OH = ggml_calc_conv_output_size(b->ne[1], a->ne[1], s1, p1, d1); + const int64_t OW = ggml_calc_conv_output_size(b->ne[0], a->ne[0], s0, p0, d0); + const int64_t ne[4] = { - ggml_calc_conv_output_size(b->ne[0], a->ne[0], s0, p0, d0), - ggml_calc_conv_output_size(b->ne[1], a->ne[1], s1, p1, d1), - a->ne[3], b->ne[3], + a->ne[2] * a->ne[1] * a->ne[0], + OW, + OH, + b->ne[3], }; - struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne); + struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F16, 4, ne); int32_t params[] = { s0, s1, p0, p1, d0, d1 }; ggml_set_op_params(result, params, sizeof(params)); - result->op = GGML_OP_CONV_2D; + result->op = GGML_OP_CONV_2D_STAGE_0; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; result->src[0] = a; result->src[1] = b; @@ -7740,8 +7744,61 @@ struct ggml_tensor * ggml_conv_2d( } -// ggml_conv_2d_sk_p0 +// gemm: [N, OC, OH, OW] = [OC, IC * KH * KW] x [N*OH*OW, IC * KH * KW] +// a: [OC, IC, KH, KW] +// b: [N, OH, OW, IC * KH * KW] +// result: [N, OC, OH, OW] +static struct ggml_tensor * ggml_conv_2d_stage_1( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b) { + + bool is_node = false; + if (a->grad || b->grad) { + GGML_ASSERT(false); // TODO: implement backward + is_node = true; + } + + const int64_t ne[4] = { + b->ne[1], + b->ne[2], + a->ne[3], + b->ne[3], + }; + struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne); + + result->op = GGML_OP_CONV_2D_STAGE_1; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src[0] = a; + result->src[1] = b; + + return result; + +} + +// a: [OC,IC, KH, KW] +// b: [N, IC, IH, IW] +// result: [N, OC, OH, OW] +struct ggml_tensor * ggml_conv_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int s0, + int s1, + int p0, + int p1, + int d0, + int d1) { + + struct ggml_tensor * result = ggml_conv_2d_stage_0(ctx, a, b, s0, s1, p0, p1, d0, d1); // [N, OH, OW, IC * KH * KW] + result = ggml_conv_2d_stage_1(ctx, a, result); + + return result; + +} + +// ggml_conv_2d_sk_p0 struct ggml_tensor * ggml_conv_2d_sk_p0( struct ggml_context * ctx, struct ggml_tensor * a, @@ -8180,7 +8237,6 @@ static struct ggml_tensor * ggml_add_rel_pos_impl( return result; } - struct ggml_tensor * ggml_add_rel_pos( struct ggml_context * ctx, struct ggml_tensor * a, @@ -8625,8 +8681,6 @@ struct ggml_tensor * ggml_map_custom3_inplace( return ggml_map_custom3_impl(ctx, a, b, c, fun, n_tasks, userdata, true); } - - // ggml_cross_entropy_loss struct ggml_tensor * ggml_cross_entropy_loss( @@ -9828,7 +9882,6 @@ static void ggml_compute_forward_add1( } } - // ggml_compute_forward_acc static void ggml_compute_forward_acc_f32( @@ -9968,7 +10021,6 @@ static void ggml_compute_forward_sub_f32( const int i2 = (ir - i3*ne2*ne1)/ne1; const int i1 = (ir - i3*ne2*ne1 - i2*ne1); - #ifdef GGML_USE_ACCELERATE vDSP_vsub( (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11), 1, @@ -10149,7 +10201,6 @@ static void ggml_compute_forward_div_f32( const int i2 = (ir - i3*ne2*ne1)/ne1; const int i1 = (ir - i3*ne2*ne1 - i2*ne1); - #ifdef GGML_USE_ACCELERATE UNUSED(ggml_vec_div_f32); @@ -10287,7 +10338,6 @@ static void ggml_compute_forward_sqrt( } } - // ggml_compute_forward_log static void ggml_compute_forward_log_f32( @@ -12120,7 +12170,6 @@ static void ggml_compute_forward_out_prod_f32( } } - //int64_t t1 = ggml_perf_time_us(); //static int64_t acc = 0; //acc += t1 - t0; @@ -12316,7 +12365,6 @@ static void ggml_compute_forward_scale_f32( const size_t nb1 = dst->nb[1]; - for (int i1 = ir0; i1 < ir1; i1++) { if (dst->data != src0->data) { // src0 is same shape as dst => same indices @@ -12714,7 +12762,6 @@ static void ggml_compute_forward_get_rows_back_f32( } } - static void ggml_compute_forward_get_rows_back( const struct ggml_compute_params * params, const struct ggml_tensor * src0, @@ -13997,6 +14044,7 @@ static void ggml_compute_forward_conv_1d_f32( } } +// TODO: reuse ggml_mul_mat or implement ggml_im2col and remove stage_0 and stage_1 static void gemm_f16_out_f32(int64_t m, int64_t n, int64_t k, ggml_fp16_t * A, ggml_fp16_t * B, @@ -14298,6 +14346,9 @@ static void ggml_compute_forward_conv_transpose_1d_f16_f32( } } + // need to zero dst since we are accumulating into it + memset(dst->data, 0, ggml_nbytes(dst)); + return; } @@ -14370,7 +14421,7 @@ static void ggml_compute_forward_conv_transpose_1d_f32( const float * const src = (float *)((char *) src0->data + i02*nb02 + i01*nb01); float * dst_data = wdata + i01*ne00*ne02; for (int64_t i00 = 0; i00 < ne00; i00++) { - dst_data[i01*ne00*ne02 + i00*ne02 + i02] = src[i00]; + dst_data[i00*ne02 + i02] = src[i00]; } } } @@ -14389,6 +14440,9 @@ static void ggml_compute_forward_conv_transpose_1d_f32( } } + // need to zero dst since we are accumulating into it + memset(dst->data, 0, ggml_nbytes(dst)); + return; } @@ -14450,28 +14504,190 @@ static void ggml_compute_forward_conv_transpose_1d( // ggml_compute_forward_conv_2d -static void ggml_compute_forward_conv_2d_f16_f32( +// src0: kernel [OC, IC, KH, KW] +// src1: image [N, IC, IH, IW] +// dst: result [N, OH, OW, IC*KH*KW] +static void ggml_compute_forward_conv_2d_stage_0_f32( const struct ggml_compute_params * params, const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst) { GGML_ASSERT(src0->type == GGML_TYPE_F16); GGML_ASSERT(src1->type == GGML_TYPE_F32); + GGML_ASSERT( dst->type == GGML_TYPE_F16); + + int64_t t0 = ggml_perf_time_us(); + UNUSED(t0); + + GGML_TENSOR_BINARY_OP_LOCALS; + + const int64_t N = ne13; + const int64_t IC = ne12; + const int64_t IH = ne11; + const int64_t IW = ne10; + + // const int64_t OC = ne03; + // const int64_t IC = ne02; + const int64_t KH = ne01; + const int64_t KW = ne00; + + const int64_t OH = ne2; + const int64_t OW = ne1; + + const int ith = params->ith; + const int nth = params->nth; + + const int32_t s0 = ((const int32_t*)(dst->op_params))[0]; + const int32_t s1 = ((const int32_t*)(dst->op_params))[1]; + const int32_t p0 = ((const int32_t*)(dst->op_params))[2]; + const int32_t p1 = ((const int32_t*)(dst->op_params))[3]; + const int32_t d0 = ((const int32_t*)(dst->op_params))[4]; + const int32_t d1 = ((const int32_t*)(dst->op_params))[5]; + + GGML_ASSERT(nb00 == sizeof(ggml_fp16_t)); + GGML_ASSERT(nb10 == sizeof(float)); + + if (params->type == GGML_TASK_INIT) { + memset(dst->data, 0, ggml_nbytes(dst)); + return; + } + + if (params->type == GGML_TASK_FINALIZE) { + return; + } + + // im2col: [N, IC, IH, IW] => [N, OH, OW, IC*KH*KW] + { + ggml_fp16_t * const wdata = (ggml_fp16_t *) dst->data; + + for (int64_t in = 0; in < N; in++) { + for (int64_t ioh = 0; ioh < OH; ioh++) { + for (int64_t iow = 0; iow < OW; iow++) { + for (int64_t iic = ith; iic < IC; iic+=nth) { + + // micro kernel + ggml_fp16_t * dst_data = wdata + (in*OH*OW + ioh*OW + iow)*(IC*KH*KW); // [IC, KH, KW] + const float * const src_data = (float *)((char *) src1->data + in*nb13 + iic*nb12); // [IH, IW] + + for (int64_t ikh = 0; ikh < KH; ikh++) { + for (int64_t ikw = 0; ikw < KW; ikw++) { + const int64_t iiw = iow*s0 + ikw*d0 - p0; + const int64_t iih = ioh*s1 + ikh*d1 - p1; + + if (!(iih < 0 || iih >= IH || iiw < 0 || iiw >= IW)) { + dst_data[iic*(KH*KW) + ikh*KW + ikw] = GGML_FP32_TO_FP16(src_data[iih*IW + iiw]); + } + } + } + } + } + } + } + } +} + +// gemm: [N, OC, OH, OW] = [OC, IC * KH * KW] x [N*OH*OW, IC * KH * KW] +// src0: [OC, IC, KH, KW] +// src1: [N, OH, OW, IC * KH * KW] +// result: [N, OC, OH, OW] +static void ggml_compute_forward_conv_2d_stage_1_f16( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + GGML_ASSERT(src0->type == GGML_TYPE_F16); + GGML_ASSERT(src1->type == GGML_TYPE_F16); GGML_ASSERT( dst->type == GGML_TYPE_F32); int64_t t0 = ggml_perf_time_us(); UNUSED(t0); + if (params->type == GGML_TASK_INIT) { + return; + } + + if (params->type == GGML_TASK_FINALIZE) { + return; + } + GGML_TENSOR_BINARY_OP_LOCALS; + GGML_ASSERT(nb00 == sizeof(ggml_fp16_t)); + GGML_ASSERT(nb10 == sizeof(ggml_fp16_t)); + GGML_ASSERT(nb0 == sizeof(float)); + + const int N = ne13; + const int OH = ne12; + const int OW = ne11; + + const int OC = ne03; + const int IC = ne02; + const int KH = ne01; + const int KW = ne00; + const int ith = params->ith; const int nth = params->nth; - const int nk0 = ne00; - const int nk1 = ne01; + int64_t m = OC; + int64_t n = OH * OW; + int64_t k = IC * KH * KW; + + // [N, OC, OH, OW] = [OC, IC * KH * KW] x [N*OH*OW, IC * KH * KW] + for (int i = 0; i < N; i++) { + ggml_fp16_t * A = (ggml_fp16_t *)src0->data; // [m, k] + ggml_fp16_t * B = (ggml_fp16_t *)src1->data + i * m * k; // [n, k] + float * C = (float *)dst->data + i * m * n; // [m, n] + + gemm_f16_out_f32(m, n, k, A, B, C, ith, nth); + } +} + +static void ggml_compute_forward_conv_2d_f16_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + GGML_ASSERT(src0->type == GGML_TYPE_F16); + GGML_ASSERT(src1->type == GGML_TYPE_F32); + GGML_ASSERT( dst->type == GGML_TYPE_F32); + + int64_t t0 = ggml_perf_time_us(); + UNUSED(t0); + + GGML_TENSOR_BINARY_OP_LOCALS + + // src1: image [N, IC, IH, IW] + // src0: kernel [OC, IC, KH, KW] + // dst: result [N, OC, OH, OW] + // ne12: IC + // ne0: OW + // ne1: OH + // nk0: KW + // nk1: KH + // ne13: N + + const int N = ne13; + const int IC = ne12; + const int IH = ne11; + const int IW = ne10; + + const int OC = ne03; + // const int IC = ne02; + const int KH = ne01; + const int KW = ne00; + + const int OH = ne1; + const int OW = ne0; + + const int ith = params->ith; + const int nth = params->nth; + + // const int nk0 = ne00; + // const int nk1 = ne01; // size of the convolution row - the kernel size unrolled across all channels - const int ew0 = nk0*nk1*ne02; + // const int ew0 = nk0*nk1*ne02; + // ew0: IC*KH*KW const int32_t s0 = ((const int32_t*)(dst->op_params))[0]; const int32_t s1 = ((const int32_t*)(dst->op_params))[1]; @@ -14487,24 +14703,27 @@ static void ggml_compute_forward_conv_2d_f16_f32( memset(params->wdata, 0, params->wsize); // prepare source data (src1) + // im2col: [N, IC, IH, IW] => [N*OH*OW, IC*KH*KW] + { ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + 0; - for (int i13 = 0; i13 < ne13; i13++) { - for (int i12 = 0; i12 < ne12; i12++) { - const float * const src = (float *)((char *) src1->data + i13*nb13 + i12*nb12); - ggml_fp16_t * dst_data = wdata + i13*(ne1*ne0*ew0); - - for (int i1 = 0; i1 < ne1; i1++) { - for (int i0 = 0; i0 < ne0; i0++) { - for (int ik1 = 0; ik1 < nk1; ik1++) { - for (int ik0 = 0; ik0 < nk0; ik0++) { - const int idx0 = i0*s0 + ik0*d0 - p0; - const int idx1 = i1*s1 + ik1*d1 - p1; - - if (!(idx1 < 0 || idx1 >= ne11 || idx0 < 0 || idx0 >= ne10)) { - dst_data[(i1*ne0 + i0)*ew0 + i12*(nk0*nk1) + ik1*nk0 + ik0] = - GGML_FP32_TO_FP16(src[idx1*ne10 + idx0]); + for (int in = 0; in < N; in++) { + for (int iic = 0; iic < IC; iic++) { + for (int ioh = 0; ioh < OH; ioh++) { + for (int iow = 0; iow < OW; iow++) { + + // micro kernel + ggml_fp16_t * dst_data = wdata + (in*OH*OW + ioh*OW + iow)*(IC*KH*KW); // [IC, KH, KW] + const float * const src_data = (float *)((char *) src1->data + in*nb13 + iic*nb12); // [IH, IW] + + for (int ikh = 0; ikh < KH; ikh++) { + for (int ikw = 0; ikw < KW; ikw++) { + const int iiw = iow*s0 + ikw*d0 - p0; + const int iih = ioh*s1 + ikh*d1 - p1; + + if (!(iih < 0 || iih >= IH || iiw < 0 || iiw >= IW)) { + dst_data[iic*(KH*KW) + ikh*KW + ikw] = GGML_FP32_TO_FP16(src_data[iih*IW + iiw]); } } } @@ -14521,30 +14740,22 @@ static void ggml_compute_forward_conv_2d_f16_f32( return; } - // total patches in dst - const int np = ne2; - - // patches per thread - const int dp = (np + nth - 1)/nth; + ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + 0; + // wdata: [N*OH*OW, IC*KH*KW] + // dst: result [N, OC, OH, OW] + // src0: kernel [OC, IC, KH, KW] - // patch range for this thread - const int ip0 = dp*ith; - const int ip1 = MIN(ip0 + dp, np); + int64_t m = OC; + int64_t n = OH * OW; + int64_t k = IC * KH * KW; - ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + 0; + // [N, OC, OH, OW] = [OC, IC * KH * KW] x [N*OH*OW, IC * KH * KW] + for (int i = 0; i < N; i++) { + ggml_fp16_t * A = (ggml_fp16_t *)src0->data; // [m, k] + ggml_fp16_t * B = (ggml_fp16_t *)wdata + i * m * k; // [n, k] + float * C = (float *)dst->data + i * m * n; // [m * k] - for (int i3 = 0; i3 < ne3; i3++) { - for (int i2 = ip0; i2 < ip1; i2++) { - float * dst_data = (float *)((char *) dst->data + i3*nb3 + i2*nb2); - - for (int i1 = 0; i1 < ne1; ++i1) { - for (int i0 = 0; i0 < ne0; ++i0) { - ggml_vec_dot_f16(ew0, dst_data + i1*ne0 + i0, - (ggml_fp16_t *) ((char *) src0->data + i2*nb03), - (ggml_fp16_t *) wdata + i3*nb3 + (i1*ne0 + i0)*ew0); - } - } - } + gemm_f16_out_f32(m, n, k, A, B, C, ith, nth); } } @@ -14570,6 +14781,48 @@ static void ggml_compute_forward_conv_2d( } } +static void ggml_compute_forward_conv_2d_stage_0( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F16: + { + ggml_compute_forward_conv_2d_stage_0_f32(params, src0, src1, dst); + } break; + case GGML_TYPE_F32: + { + GGML_ASSERT(false); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +static void ggml_compute_forward_conv_2d_stage_1( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F16: + { + ggml_compute_forward_conv_2d_stage_1_f16(params, src0, src1, dst); + } break; + case GGML_TYPE_F32: + { + GGML_ASSERT(false); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + // ggml_compute_forward_conv_transpose_2d static void ggml_compute_forward_conv_transpose_2d( @@ -14628,6 +14881,8 @@ static void ggml_compute_forward_conv_transpose_2d( } } + memset(dst->data, 0, ggml_nbytes(dst)); + return; } @@ -16126,7 +16381,6 @@ static void ggml_compute_forward_add_rel_pos_f32( const int ip0 = dp*ith; const int ip1 = MIN(ip0 + dp, np); - for (int64_t i13 = ip0; i13 < ip1; ++i13) { for (int64_t i12 = 0; i12 < ne12; ++i12) { for (int64_t i11 = 0; i11 < ne11; ++i11) { @@ -16193,7 +16447,6 @@ static void ggml_compute_forward_map_unary_f32( } } - static void ggml_compute_forward_map_unary( const struct ggml_compute_params * params, const struct ggml_tensor * src0, @@ -16241,7 +16494,6 @@ static void ggml_compute_forward_map_binary_f32( } } - static void ggml_compute_forward_map_binary( const struct ggml_compute_params * params, const struct ggml_tensor * src0, @@ -16293,7 +16545,6 @@ static void ggml_compute_forward_map_custom2_f32( fun(dst, a, b); } - // ggml_compute_forward_map_custom3 static void ggml_compute_forward_map_custom3_f32( @@ -16568,7 +16819,6 @@ static void ggml_compute_forward_cross_entropy_loss_back_f32( ggml_vec_sub_f32(nc, ds0, ds0, s1); ggml_vec_scale_f32(nc, ds0, d[0] / (float) nr); - #ifndef NDEBUG for (int i = 0; i < nc; ++i) { assert(!isnan(ds0[i])); @@ -16596,7 +16846,6 @@ static void ggml_compute_forward_cross_entropy_loss_back( } } - ///////////////////////////////// static void ggml_compute_forward(struct ggml_compute_params * params, struct ggml_tensor * tensor) { @@ -16808,6 +17057,14 @@ static void ggml_compute_forward(struct ggml_compute_params * params, struct ggm { ggml_compute_forward_conv_2d(params, tensor->src[0], tensor->src[1], tensor); } break; + case GGML_OP_CONV_2D_STAGE_0: + { + ggml_compute_forward_conv_2d_stage_0(params, tensor->src[0], tensor->src[1], tensor); + } break; + case GGML_OP_CONV_2D_STAGE_1: + { + ggml_compute_forward_conv_2d_stage_1(params, tensor->src[0], tensor->src[1], tensor); + } break; case GGML_OP_CONV_TRANSPOSE_2D: { ggml_compute_forward_conv_transpose_2d(params, tensor->src[0], tensor->src[1], tensor); @@ -17737,11 +17994,19 @@ static void ggml_compute_backward(struct ggml_context * ctx, struct ggml_tensor { GGML_ASSERT(false); // TODO: not implemented } break; + case GGML_OP_CONV_TRANSPOSE_1D: + { + GGML_ASSERT(false); // TODO: not implemented + } break; case GGML_OP_CONV_2D: { GGML_ASSERT(false); // TODO: not implemented } break; - case GGML_OP_CONV_TRANSPOSE_1D: + case GGML_OP_CONV_2D_STAGE_0: + { + GGML_ASSERT(false); // TODO: not implemented + } break; + case GGML_OP_CONV_2D_STAGE_1: { GGML_ASSERT(false); // TODO: not implemented } break; @@ -18670,6 +18935,7 @@ struct ggml_cplan ggml_graph_plan(struct ggml_cgraph * cgraph, int n_threads) { const int64_t ne0 = node->ne[0]; const int64_t ne1 = node->ne[1]; const int64_t ne2 = node->ne[2]; + const int64_t ne3 = node->ne[3]; const int64_t nk = ne00*ne01; const int64_t ew0 = nk * ne02; @@ -18680,7 +18946,8 @@ struct ggml_cplan ggml_graph_plan(struct ggml_cgraph * cgraph, int n_threads) { if (node->src[0]->type == GGML_TYPE_F16 && node->src[1]->type == GGML_TYPE_F32) { - cur = sizeof(ggml_fp16_t)*(ne0*ne1*ew0); + // im2col: [N*OH*OW, IC*KH*KW] + cur = sizeof(ggml_fp16_t)*(ne3*ne0*ne1*ew0); } else if (node->src[0]->type == GGML_TYPE_F32 && node->src[1]->type == GGML_TYPE_F32) { cur = sizeof(float)* (ne10*ne11*ne12); @@ -18690,6 +18957,14 @@ struct ggml_cplan ggml_graph_plan(struct ggml_cgraph * cgraph, int n_threads) { work_size = MAX(work_size, cur); } break; + case GGML_OP_CONV_2D_STAGE_0: + { + n_tasks = n_threads; + } break; + case GGML_OP_CONV_2D_STAGE_1: + { + n_tasks = n_threads; + } break; case GGML_OP_CONV_TRANSPOSE_2D: { n_tasks = n_threads; @@ -19878,7 +20153,6 @@ static enum ggml_opt_result ggml_opt_adam( opt->loss_after = fx; - // check convergence if (fabsf(fx - fx_prev[0])/fx < params.adam.eps_f) { GGML_PRINT_DEBUG("converged\n"); diff --git a/ggml.h b/ggml.h index 16aaf169ee8fda..08bff5511c2254 100644 --- a/ggml.h +++ b/ggml.h @@ -401,15 +401,16 @@ extern "C" { GGML_OP_ALIBI, GGML_OP_CLAMP, GGML_OP_CONV_1D, - GGML_OP_CONV_2D, + GGML_OP_CONV_1D_STAGE_0, // internal + GGML_OP_CONV_1D_STAGE_1, // internal GGML_OP_CONV_TRANSPOSE_1D, + GGML_OP_CONV_2D, + GGML_OP_CONV_2D_STAGE_0, // internal + GGML_OP_CONV_2D_STAGE_1, // internal GGML_OP_CONV_TRANSPOSE_2D, GGML_OP_POOL_1D, GGML_OP_POOL_2D, - GGML_OP_CONV_1D_STAGE_0, // internal - GGML_OP_CONV_1D_STAGE_1, // internal - GGML_OP_UPSCALE, // nearest interpolate GGML_OP_FLASH_ATTN, @@ -1020,9 +1021,9 @@ extern "C" { struct ggml_tensor * b, float eps); - // A: n columns, m rows - // B: n columns, p rows (i.e. we transpose it internally) - // result is m columns, p rows + // A: k columns, n rows => [ne03, ne02, n, k] + // B: k columns, m rows (i.e. we transpose it internally) => [ne03 * x, ne02 * y, m, k] + // result is n columns, m rows => [ne03 * x, ne02 * y, m, n] GGML_API struct ggml_tensor * ggml_mul_mat( struct ggml_context * ctx, struct ggml_tensor * a, From 1717521cdb976a2219888b0e5cba36e210eee9df Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Tue, 24 Oct 2023 23:08:20 +0300 Subject: [PATCH 11/79] server : do not block system prompt update (#3767) * server : do not block system prompt update * server : update state machine logic to process system prompts * server : minor --- examples/server/server.cpp | 57 +++++++++++++------------------------- 1 file changed, 20 insertions(+), 37 deletions(-) diff --git a/examples/server/server.cpp b/examples/server/server.cpp index 693f9b7735e493..f52a928c874468 100644 --- a/examples/server/server.cpp +++ b/examples/server/server.cpp @@ -454,7 +454,7 @@ struct llama_client_slot } void release() { - if (state == PROCESSING) + if (state == IDLE || state == PROCESSING) { t_token_generation = (ggml_time_us() - t_start_genereration) / 1e3; command = RELEASE; @@ -754,6 +754,7 @@ struct llama_server_context } slot->params.antiprompt.clear(); + const auto &stop = data.find("stop"); if (stop != data.end() && stop->is_array()) { @@ -867,7 +868,7 @@ struct llama_server_context kv_cache_clear(); - for (int32_t i = 0; i < batch.n_tokens; ++i) + for (int i = 0; i < (int) system_tokens.size(); ++i) { llama_batch_add(batch, system_tokens[i], i, { 0 }, false); } @@ -894,16 +895,8 @@ struct llama_server_context { slot.release(); } - wait_all_are_idle(); - all_slots_are_idle = true; - // wait until system prompt load system_need_update = true; - while (system_need_update) - { - std::this_thread::sleep_for(std::chrono::milliseconds(5)); - } - // system prompt loaded, continue } void process_system_prompt_data(const json &sys_props) { @@ -915,26 +908,6 @@ struct llama_server_context { notify_system_prompt_changed(); } - else - { - system_need_update = true; - } - } - - void wait_all_are_idle() { - bool wait = true; - while (wait) - { - wait = false; - for (auto &slot : slots) - { - if (!slot.available()) - { - wait = true; - break; - } - } - } } static size_t find_stopping_strings(const std::string &text, const size_t last_token_size, @@ -965,7 +938,6 @@ struct llama_server_context slot.has_next_token = false; } stop_pos = pos; - } } @@ -1444,7 +1416,7 @@ struct llama_server_context process_tasks(); // update the system prompt wait until all slots are idle state - if (system_need_update) + if (system_need_update && all_slots_are_idle) { LOG_TEE("updating system prompt\n"); update_system_prompt(); @@ -1498,7 +1470,7 @@ struct llama_server_context for (auto & slot : slots) { // release the slot - if (slot.state == PROCESSING && slot.command == RELEASE) + if (slot.command == RELEASE) { slot.state = IDLE; slot.command = NONE; @@ -1509,7 +1481,7 @@ struct llama_server_context continue; } - if (slot.state == IDLE || slot.command == RELEASE) + if (slot.state == IDLE) { continue; } @@ -1530,6 +1502,17 @@ struct llama_server_context { for (auto & slot : slots) { + const bool has_prompt = slot.prompt.is_array() || (slot.prompt.is_string() && !slot.prompt.get().empty()); + + // empty prompt passed -> release the slot and send empty response + if (slot.state == IDLE && slot.command == LOAD_PROMPT && !has_prompt) + { + slot.release(); + slot.print_timings(); + send_final_response(slot); + continue; + } + // need process the prompt if (slot.state == IDLE && slot.command == LOAD_PROMPT) { @@ -1749,8 +1732,8 @@ struct llama_server_context if (!process_token(result, slot)) { slot.release(); - send_final_response(slot); slot.print_timings(); + send_final_response(slot); } slot.i_batch = -1; @@ -2285,7 +2268,7 @@ int main(int argc, char **argv) if (!json_value(data, "stream", false)) { std::string completion_text; task_result result = llama.next_result(task_id); - if(!result.error && result.stop) { + if (!result.error && result.stop) { res.set_content(result.result_json.dump(-1, ' ', false, json::error_handler_t::replace), "application/json"); } else @@ -2312,7 +2295,7 @@ int main(int argc, char **argv) { return false; } - if(result.stop) { + if (result.stop) { break; } } else { From ad939626577cd25b462e8026cc543efb71528472 Mon Sep 17 00:00:00 2001 From: cebtenzzre Date: Tue, 24 Oct 2023 16:10:43 -0400 Subject: [PATCH 12/79] server : add parameter -tb N, --threads-batch N (#3584) (#3768) Co-authored-by: Michael Coppola Co-authored-by: Michael Coppola --- examples/server/server.cpp | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/examples/server/server.cpp b/examples/server/server.cpp index f52a928c874468..b4c4d0a20ad0a7 100644 --- a/examples/server/server.cpp +++ b/examples/server/server.cpp @@ -1749,15 +1749,16 @@ static void server_print_usage(const char *argv0, const gpt_params ¶ms, printf("usage: %s [options]\n", argv0); printf("\n"); printf("options:\n"); - printf(" -h, --help show this help message and exit\n"); - printf(" -v, --verbose verbose output (default: %s)\n", server_verbose ? "enabled" : "disabled"); - printf(" -t N, --threads N number of threads to use during computation (default: %d)\n", params.n_threads); - printf(" -c N, --ctx-size N size of the prompt context (default: %d)\n", params.n_ctx); - printf(" --rope-freq-base N RoPE base frequency (default: loaded from model)\n"); - printf(" --rope-freq-scale N RoPE frequency scaling factor (default: loaded from model)\n"); - printf(" -b N, --batch-size N batch size for prompt processing (default: %d)\n", params.n_batch); - printf(" --memory-f32 use f32 instead of f16 for memory key+value (default: disabled)\n"); - printf(" not recommended: doubles context memory required and no measurable increase in quality\n"); + printf(" -h, --help show this help message and exit\n"); + printf(" -v, --verbose verbose output (default: %s)\n", server_verbose ? "enabled" : "disabled"); + printf(" -t N, --threads N number of threads to use during computation (default: %d)\n", params.n_threads); + printf(" -tb N, --threads-batch N number of threads to use during batch and prompt processing (default: same as --threads)\n"); + printf(" -c N, --ctx-size N size of the prompt context (default: %d)\n", params.n_ctx); + printf(" --rope-freq-base N RoPE base frequency (default: loaded from model)\n"); + printf(" --rope-freq-scale N RoPE frequency scaling factor (default: loaded from model)\n"); + printf(" -b N, --batch-size N batch size for prompt processing (default: %d)\n", params.n_batch); + printf(" --memory-f32 use f32 instead of f16 for memory key+value (default: disabled)\n"); + printf(" not recommended: doubles context memory required and no measurable increase in quality\n"); if (llama_mlock_supported()) { printf(" --mlock force system to keep model in RAM rather than swapping or compressing\n"); @@ -1907,6 +1908,15 @@ static void server_params_parse(int argc, char **argv, server_params &sparams, } params.n_threads = std::stoi(argv[i]); } + else if (arg == "--threads-batch" || arg == "-tb") + { + if (++i >= argc) + { + invalid_param = true; + break; + } + params.n_threads_batch = std::stoi(argv[i]); + } else if (arg == "-b" || arg == "--batch-size") { if (++i >= argc) From cc448774866e6479c750bd7c135cd8f92cedee67 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Wed, 25 Oct 2023 10:09:16 +0300 Subject: [PATCH 13/79] log : disable pid in log filenames --- common/log.h | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/common/log.h b/common/log.h index 70e7e4ca215e30..d2c864ceab7be6 100644 --- a/common/log.h +++ b/common/log.h @@ -97,22 +97,23 @@ #define LOG_TEE_TARGET stderr #endif +// NOTE: currently disabled as it produces too many log files // Utility to obtain "pid" like unique process id and use it when creating log files. -inline std::string log_get_pid() -{ - static std::string pid; - if (pid.empty()) - { - // std::this_thread::get_id() is the most portable way of obtaining a "process id" - // it's not the same as "pid" but is unique enough to solve multiple instances - // trying to write to the same log. - std::stringstream ss; - ss << std::this_thread::get_id(); - pid = ss.str(); - } - - return pid; -} +//inline std::string log_get_pid() +//{ +// static std::string pid; +// if (pid.empty()) +// { +// // std::this_thread::get_id() is the most portable way of obtaining a "process id" +// // it's not the same as "pid" but is unique enough to solve multiple instances +// // trying to write to the same log. +// std::stringstream ss; +// ss << std::this_thread::get_id(); +// pid = ss.str(); +// } +// +// return pid; +//} // Utility function for generating log file names with unique id based on thread id. // invocation with log_filename_generator( "llama", "log" ) creates a string "llama..log" @@ -126,8 +127,8 @@ inline std::string log_filename_generator_impl(const std::string & log_file_base std::stringstream buf; buf << log_file_basename; - buf << "."; - buf << log_get_pid(); + //buf << "."; + //buf << log_get_pid(); buf << "."; buf << log_file_extension; From 6961c4bd0b5176e10ab03b35394f1e9eab761792 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Wed, 25 Oct 2023 10:26:27 +0300 Subject: [PATCH 14/79] batched-bench : print params at start --- examples/batched-bench/batched-bench.cpp | 4 ++++ ggml-cuda.cu | 12 ++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/examples/batched-bench/batched-bench.cpp b/examples/batched-bench/batched-bench.cpp index c552eaa738becf..43f9c971d18465 100644 --- a/examples/batched-bench/batched-bench.cpp +++ b/examples/batched-bench/batched-bench.cpp @@ -154,6 +154,10 @@ int main(int argc, char ** argv) { } } + LOG_TEE("\n"); + LOG_TEE("%s: n_kv_max = %d, is_pp_shared = %d, n_gpu_layers = %d, mmq = %d\n", __func__, n_kv_max, is_pp_shared, n_gpu_layers, mmq); + LOG_TEE("\n"); + LOG_TEE("|%6s | %6s | %4s | %6s | %8s | %8s | %8s | %8s | %8s | %8s |\n", "PP", "TG", "B", "N_KV", "T_PP s", "S_PP t/s", "T_TG s", "S_TG t/s", "T s", "S t/s"); LOG_TEE("|%6s-|-%6s-|-%4s-|-%6s-|-%8s-|-%8s-|-%8s-|-%8s-|-%8s-|-%8s-|\n", "------", "------", "----", "------", "--------", "--------", "--------", "--------", "--------", "--------"); diff --git a/ggml-cuda.cu b/ggml-cuda.cu index d1e874b6c778af..ba0cd5a7d3f1eb 100644 --- a/ggml-cuda.cu +++ b/ggml-cuda.cu @@ -6254,16 +6254,15 @@ inline void ggml_cuda_op_mul_mat_cublas( const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols, const int64_t src1_padded_row_size, const cudaStream_t & stream) { - GGML_ASSERT(src0_dd_i != nullptr); + GGML_ASSERT(src0_dd_i != nullptr); GGML_ASSERT(src1_ddf_i != nullptr); - GGML_ASSERT(dst_dd_i != nullptr); - + GGML_ASSERT(dst_dd_i != nullptr); const int64_t ne00 = src0->ne[0]; - const int64_t ne10 = src1->ne[0]; const int64_t ne0 = dst->ne[0]; + const int64_t row_diff = row_high - row_low; int id; @@ -7223,12 +7222,13 @@ static void ggml_cuda_mul_mat(const ggml_tensor * src0, const ggml_tensor * src1 //printf("src1 is contiguous %d, transposed %d, type = %s, name = %s\n", ggml_is_contiguous(src1), ggml_is_transposed(src1), ggml_type_name(src1->type), src1->name); if (all_on_device && src0->type == GGML_TYPE_F16 && ggml_is_permuted(src0) && ggml_is_permuted(src1) && src1->ne[1] == 1) { - // KQ + // KQ single-batch ggml_cuda_mul_mat_vec_p021(src0, src1, dst); } else if (all_on_device && src0->type == GGML_TYPE_F16 && !ggml_is_contiguous(src0) && !ggml_is_transposed(src1) && src1->ne[1] == 1) { - // KQV + // KQV single-batch ggml_cuda_mul_mat_vec_nc(src0, src1, dst); } else if (all_on_device && src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F32 && !ggml_is_transposed(src0) && !ggml_is_transposed(src1) && src1->ne[2]*src1->ne[3] > 1) { + // KQ + KQV multi-batch ggml_cuda_mul_mat_mat_batched_cublas(src0, src1, dst); } else if (src0->type == GGML_TYPE_F32) { ggml_cuda_op_mul_mat(src0, src1, dst, ggml_cuda_op_mul_mat_cublas, false); From 34b2a5e1ee4fe6295fb4420eb91131d743694c65 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 26 Oct 2023 22:53:37 +0300 Subject: [PATCH 15/79] server : do not release slot on image input (#3798) --- examples/server/server.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/server/server.cpp b/examples/server/server.cpp index b4c4d0a20ad0a7..5b7e4139de551e 100644 --- a/examples/server/server.cpp +++ b/examples/server/server.cpp @@ -1502,7 +1502,7 @@ struct llama_server_context { for (auto & slot : slots) { - const bool has_prompt = slot.prompt.is_array() || (slot.prompt.is_string() && !slot.prompt.get().empty()); + const bool has_prompt = slot.prompt.is_array() || (slot.prompt.is_string() && !slot.prompt.get().empty()) || !slot.images.empty(); // empty prompt passed -> release the slot and send empty response if (slot.state == IDLE && slot.command == LOAD_PROMPT && !has_prompt) From 2f9ec7e271220a78fe27c9e6ccbcc0dda31cda0f Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Fri, 27 Oct 2023 17:01:23 +0300 Subject: [PATCH 16/79] cuda : improve text-generation and batched decoding performance (#3776) * cuda : prints wip * cuda : new cublas gemm branch for multi-batch quantized src0 * cuda : add F32 sgemm branch * cuda : fine-tune >= VOLTA params + use MMQ only for small batches * cuda : remove duplicated cuBLAS GEMM code * cuda : add CUDA_USE_TENSOR_CORES and GGML_CUDA_FORCE_MMQ macros * build : add compile option to force use of MMQ kernels --- CMakeLists.txt | 7 +++ Makefile | 3 ++ ggml-cuda.cu | 130 +++++++++++++++++++++++++++++++++++++++++++------ llama.cpp | 2 - llama.h | 2 +- 5 files changed, 125 insertions(+), 19 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 202f260491d393..d9fc86237b15cc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,6 +82,7 @@ set(LLAMA_BLAS_VENDOR "Generic" CACHE STRING "llama: BLAS library vendor") option(LLAMA_CUBLAS "llama: use CUDA" OFF) #option(LLAMA_CUDA_CUBLAS "llama: use cuBLAS for prompt processing" OFF) option(LLAMA_CUDA_FORCE_DMMV "llama: use dmmv instead of mmvq CUDA kernels" OFF) +option(LLAMA_CUDA_FORCE_MMQ "llama: use mmq kernels instead of cuBLAS" OFF) set(LLAMA_CUDA_DMMV_X "32" CACHE STRING "llama: x stride for dmmv CUDA kernels") set(LLAMA_CUDA_MMV_Y "1" CACHE STRING "llama: y block size for mmv CUDA kernels") option(LLAMA_CUDA_F16 "llama: use 16 bit floats for some calculations" OFF) @@ -305,6 +306,9 @@ if (LLAMA_CUBLAS) if (LLAMA_CUDA_FORCE_DMMV) add_compile_definitions(GGML_CUDA_FORCE_DMMV) endif() + if (LLAMA_CUDA_FORCE_MMQ) + add_compile_definitions(GGML_CUDA_FORCE_MMQ) + endif() add_compile_definitions(GGML_CUDA_DMMV_X=${LLAMA_CUDA_DMMV_X}) add_compile_definitions(GGML_CUDA_MMV_Y=${LLAMA_CUDA_MMV_Y}) if (DEFINED LLAMA_CUDA_DMMV_Y) @@ -405,6 +409,9 @@ if (LLAMA_HIPBLAS) if (LLAMA_CUDA_FORCE_DMMV) target_compile_definitions(ggml-rocm PRIVATE GGML_CUDA_FORCE_DMMV) endif() + if (LLAMA_CUDA_FORCE_MMQ) + target_compile_definitions(ggml-rocm PRIVATE GGML_CUDA_FORCE_MMQ) + endif() target_compile_definitions(ggml-rocm PRIVATE GGML_CUDA_DMMV_X=${LLAMA_CUDA_DMMV_X}) target_compile_definitions(ggml-rocm PRIVATE GGML_CUDA_MMV_Y=${LLAMA_CUDA_MMV_Y}) target_compile_definitions(ggml-rocm PRIVATE K_QUANTS_PER_ITERATION=${LLAMA_CUDA_KQUANTS_ITER}) diff --git a/Makefile b/Makefile index 80179631f95a5b..68069f9ff331e9 100644 --- a/Makefile +++ b/Makefile @@ -397,6 +397,9 @@ endif # CUDA_DOCKER_ARCH ifdef LLAMA_CUDA_FORCE_DMMV NVCCFLAGS += -DGGML_CUDA_FORCE_DMMV endif # LLAMA_CUDA_FORCE_DMMV +ifdef LLAMA_CUDA_FORCE_MMQ + NVCCFLAGS += -DGGML_CUDA_FORCE_MMQ +endif # LLAMA_CUDA_FORCE_MMQ ifdef LLAMA_CUDA_DMMV_X NVCCFLAGS += -DGGML_CUDA_DMMV_X=$(LLAMA_CUDA_DMMV_X) else diff --git a/ggml-cuda.cu b/ggml-cuda.cu index ba0cd5a7d3f1eb..1ba951f688d82c 100644 --- a/ggml-cuda.cu +++ b/ggml-cuda.cu @@ -87,6 +87,24 @@ #define CC_OFFSET_AMD 1000000 #define CC_RDNA2 (CC_OFFSET_AMD + 1030) +// define this if you want to always fallback to MMQ kernels and not use cuBLAS for matrix multiplication +// on modern hardware, using cuBLAS is recommended as it utilizes F16 tensor cores which are very performant +// for large computational tasks. the drawback is that this requires some extra amount of VRAM: +// - 7B quantum model: +100-200 MB +// - 13B quantum model: +200-400 MB +// +//#define GGML_CUDA_FORCE_MMQ + +// TODO: improve this to be correct for more hardware +// for example, currently fails for GeForce GTX 1660 which is TURING arch (> VOLTA) but does not have tensor cores +// probably other such cases, and not sure what happens on AMD hardware +#if !defined(GGML_CUDA_FORCE_MMQ) +#define CUDA_USE_TENSOR_CORES +#endif + +// max batch size to use MMQ kernels when tensor cores are available +#define MMQ_MAX_BATCH_SIZE 32 + #if defined(GGML_USE_HIPBLAS) #define __CUDA_ARCH__ 1300 @@ -470,7 +488,6 @@ static int g_device_count = -1; static int g_main_device = 0; static int g_compute_capabilities[GGML_CUDA_MAX_DEVICES]; static float g_tensor_split[GGML_CUDA_MAX_DEVICES] = {0}; -static bool g_mul_mat_q = true; static void * g_scratch_buffer = nullptr; static size_t g_scratch_size = 0; // disabled by default @@ -3554,9 +3571,15 @@ static __device__ __forceinline__ void mul_mat_q( #define MMQ_X_Q4_0_RDNA1 64 #define MMQ_Y_Q4_0_RDNA1 64 #define NWARPS_Q4_0_RDNA1 8 +#if defined(CUDA_USE_TENSOR_CORES) +#define MMQ_X_Q4_0_AMPERE 4 +#define MMQ_Y_Q4_0_AMPERE 32 +#define NWARPS_Q4_0_AMPERE 4 +#else #define MMQ_X_Q4_0_AMPERE 64 #define MMQ_Y_Q4_0_AMPERE 128 #define NWARPS_Q4_0_AMPERE 4 +#endif #define MMQ_X_Q4_0_PASCAL 64 #define MMQ_Y_Q4_0_PASCAL 64 #define NWARPS_Q4_0_PASCAL 8 @@ -3615,9 +3638,15 @@ template static __global__ void #define MMQ_X_Q4_1_RDNA1 64 #define MMQ_Y_Q4_1_RDNA1 64 #define NWARPS_Q4_1_RDNA1 8 +#if defined(CUDA_USE_TENSOR_CORES) +#define MMQ_X_Q4_1_AMPERE 4 +#define MMQ_Y_Q4_1_AMPERE 32 +#define NWARPS_Q4_1_AMPERE 4 +#else #define MMQ_X_Q4_1_AMPERE 64 #define MMQ_Y_Q4_1_AMPERE 128 #define NWARPS_Q4_1_AMPERE 4 +#endif #define MMQ_X_Q4_1_PASCAL 64 #define MMQ_Y_Q4_1_PASCAL 64 #define NWARPS_Q4_1_PASCAL 8 @@ -3678,9 +3707,15 @@ template static __global__ void #define MMQ_X_Q5_0_RDNA1 64 #define MMQ_Y_Q5_0_RDNA1 64 #define NWARPS_Q5_0_RDNA1 8 +#if defined(CUDA_USE_TENSOR_CORES) +#define MMQ_X_Q5_0_AMPERE 4 +#define MMQ_Y_Q5_0_AMPERE 32 +#define NWARPS_Q5_0_AMPERE 4 +#else #define MMQ_X_Q5_0_AMPERE 128 #define MMQ_Y_Q5_0_AMPERE 64 #define NWARPS_Q5_0_AMPERE 4 +#endif #define MMQ_X_Q5_0_PASCAL 64 #define MMQ_Y_Q5_0_PASCAL 64 #define NWARPS_Q5_0_PASCAL 8 @@ -3739,9 +3774,15 @@ template static __global__ void #define MMQ_X_Q5_1_RDNA1 64 #define MMQ_Y_Q5_1_RDNA1 64 #define NWARPS_Q5_1_RDNA1 8 +#if defined(CUDA_USE_TENSOR_CORES) +#define MMQ_X_Q5_1_AMPERE 4 +#define MMQ_Y_Q5_1_AMPERE 32 +#define NWARPS_Q5_1_AMPERE 4 +#else #define MMQ_X_Q5_1_AMPERE 128 #define MMQ_Y_Q5_1_AMPERE 64 #define NWARPS_Q5_1_AMPERE 4 +#endif #define MMQ_X_Q5_1_PASCAL 64 #define MMQ_Y_Q5_1_PASCAL 64 #define NWARPS_Q5_1_PASCAL 8 @@ -3800,9 +3841,15 @@ mul_mat_q5_1( #define MMQ_X_Q8_0_RDNA1 64 #define MMQ_Y_Q8_0_RDNA1 64 #define NWARPS_Q8_0_RDNA1 8 +#if defined(CUDA_USE_TENSOR_CORES) +#define MMQ_X_Q8_0_AMPERE 4 +#define MMQ_Y_Q8_0_AMPERE 32 +#define NWARPS_Q8_0_AMPERE 4 +#else #define MMQ_X_Q8_0_AMPERE 128 #define MMQ_Y_Q8_0_AMPERE 64 #define NWARPS_Q8_0_AMPERE 4 +#endif #define MMQ_X_Q8_0_PASCAL 64 #define MMQ_Y_Q8_0_PASCAL 64 #define NWARPS_Q8_0_PASCAL 8 @@ -3861,9 +3908,15 @@ template static __global__ void #define MMQ_X_Q2_K_RDNA1 128 #define MMQ_Y_Q2_K_RDNA1 32 #define NWARPS_Q2_K_RDNA1 8 +#if defined(CUDA_USE_TENSOR_CORES) +#define MMQ_X_Q2_K_AMPERE 4 +#define MMQ_Y_Q2_K_AMPERE 32 +#define NWARPS_Q2_K_AMPERE 4 +#else #define MMQ_X_Q2_K_AMPERE 64 #define MMQ_Y_Q2_K_AMPERE 128 #define NWARPS_Q2_K_AMPERE 4 +#endif #define MMQ_X_Q2_K_PASCAL 64 #define MMQ_Y_Q2_K_PASCAL 64 #define NWARPS_Q2_K_PASCAL 8 @@ -3922,9 +3975,15 @@ mul_mat_q2_K( #define MMQ_X_Q3_K_RDNA1 32 #define MMQ_Y_Q3_K_RDNA1 128 #define NWARPS_Q3_K_RDNA1 8 +#if defined(CUDA_USE_TENSOR_CORES) +#define MMQ_X_Q3_K_AMPERE 4 +#define MMQ_Y_Q3_K_AMPERE 32 +#define NWARPS_Q3_K_AMPERE 4 +#else #define MMQ_X_Q3_K_AMPERE 128 #define MMQ_Y_Q3_K_AMPERE 128 #define NWARPS_Q3_K_AMPERE 4 +#endif #define MMQ_X_Q3_K_PASCAL 64 #define MMQ_Y_Q3_K_PASCAL 64 #define NWARPS_Q3_K_PASCAL 8 @@ -3985,9 +4044,15 @@ template static __global__ void #define MMQ_X_Q4_K_RDNA1 32 #define MMQ_Y_Q4_K_RDNA1 64 #define NWARPS_Q4_K_RDNA1 8 +#if defined(CUDA_USE_TENSOR_CORES) +#define MMQ_X_Q4_K_AMPERE 4 +#define MMQ_Y_Q4_K_AMPERE 32 +#define NWARPS_Q4_K_AMPERE 4 +#else #define MMQ_X_Q4_K_AMPERE 64 #define MMQ_Y_Q4_K_AMPERE 128 #define NWARPS_Q4_K_AMPERE 4 +#endif #define MMQ_X_Q4_K_PASCAL 64 #define MMQ_Y_Q4_K_PASCAL 64 #define NWARPS_Q4_K_PASCAL 8 @@ -4048,9 +4113,15 @@ template static __global__ void #define MMQ_X_Q5_K_RDNA1 32 #define MMQ_Y_Q5_K_RDNA1 64 #define NWARPS_Q5_K_RDNA1 8 +#if defined(CUDA_USE_TENSOR_CORES) +#define MMQ_X_Q5_K_AMPERE 4 +#define MMQ_Y_Q5_K_AMPERE 32 +#define NWARPS_Q5_K_AMPERE 4 +#else #define MMQ_X_Q5_K_AMPERE 64 #define MMQ_Y_Q5_K_AMPERE 128 #define NWARPS_Q5_K_AMPERE 4 +#endif #define MMQ_X_Q5_K_PASCAL 64 #define MMQ_Y_Q5_K_PASCAL 64 #define NWARPS_Q5_K_PASCAL 8 @@ -4109,9 +4180,15 @@ mul_mat_q5_K( #define MMQ_X_Q6_K_RDNA1 32 #define MMQ_Y_Q6_K_RDNA1 64 #define NWARPS_Q6_K_RDNA1 8 +#if defined(CUDA_USE_TENSOR_CORES) +#define MMQ_X_Q6_K_AMPERE 4 +#define MMQ_Y_Q6_K_AMPERE 32 +#define NWARPS_Q6_K_AMPERE 4 +#else #define MMQ_X_Q6_K_AMPERE 64 #define MMQ_Y_Q6_K_AMPERE 64 #define NWARPS_Q6_K_AMPERE 4 +#endif #define MMQ_X_Q6_K_PASCAL 64 #define MMQ_Y_Q6_K_PASCAL 64 #define NWARPS_Q6_K_PASCAL 8 @@ -5663,6 +5740,16 @@ void ggml_init_cublas() { CUDA_CHECK(cudaGetDeviceCount(&g_device_count)); GGML_ASSERT(g_device_count <= GGML_CUDA_MAX_DEVICES); int64_t total_vram = 0; +#if defined(GGML_CUDA_FORCE_MMQ) + fprintf(stderr, "%s: GGML_CUDA_FORCE_MMQ: yes\n", __func__); +#else + fprintf(stderr, "%s: GGML_CUDA_FORCE_MMQ: no\n", __func__); +#endif +#if defined(CUDA_USE_TENSOR_CORES) + fprintf(stderr, "%s: CUDA_USE_TENSOR_CORES: yes\n", __func__); +#else + fprintf(stderr, "%s: CUDA_USE_TENSOR_CORES: no\n", __func__); +#endif fprintf(stderr, "%s: found %d " GGML_CUDA_NAME " devices:\n", __func__, g_device_count); for (int id = 0; id < g_device_count; ++id) { cudaDeviceProp prop; @@ -6347,7 +6434,7 @@ inline void ggml_cuda_op_mul_mat_cublas( cublasSgemm(g_cublas_handles[id], CUBLAS_OP_T, CUBLAS_OP_N, row_diff, src1_ncols, ne10, &alpha, src0_ddf_i, ne00, - src1_ddf_i, ne10, + src1_ddf_i, ne10, &beta, dst_dd_i, ldc)); if (src0_as != 0) { @@ -7048,9 +7135,10 @@ static void ggml_cuda_mul_mat_vec_nc(const ggml_tensor * src0, const ggml_tensor ggml_mul_mat_vec_nc_f16_f32_cuda(src0_ddq, src1_ddf, dst_ddf, ne00, ne01, row_stride_x, ne02, ne12, channel_stride_x, main_stream); } -static void ggml_cuda_mul_mat_mat_batched_cublas(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst){ +static void ggml_cuda_mul_mat_mat_batched_cublas(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { GGML_ASSERT(!ggml_is_transposed(src0)); GGML_ASSERT(!ggml_is_transposed(src1)); + GGML_ASSERT(src0->backend != GGML_BACKEND_GPU_SPLIT); GGML_ASSERT(src0->type == GGML_TYPE_F16); GGML_ASSERT(src1->type == GGML_TYPE_F32); @@ -7202,17 +7290,24 @@ static void ggml_cuda_mul_mat_mat_batched_cublas(const ggml_tensor * src0, const } static void ggml_cuda_mul_mat(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - bool all_on_device = (src0->backend == GGML_BACKEND_GPU || src0->backend == GGML_BACKEND_GPU_SPLIT) && - src1->backend == GGML_BACKEND_GPU && dst->backend == GGML_BACKEND_GPU; + const bool all_on_device = + (src0->backend == GGML_BACKEND_GPU) && + (src1->backend == GGML_BACKEND_GPU) && + ( dst->backend == GGML_BACKEND_GPU); int64_t min_compute_capability = INT_MAX; for (int64_t id = 0; id < g_device_count; ++id) { - if (min_compute_capability > g_compute_capabilities[id] - && g_tensor_split[id] < (id + 1 < g_device_count ? g_tensor_split[id + 1] : 1.0f)) { + if (min_compute_capability > g_compute_capabilities[id] && g_tensor_split[id] < (id + 1 < g_device_count ? g_tensor_split[id + 1] : 1.0f)) { min_compute_capability = g_compute_capabilities[id]; } } +#ifdef CUDA_USE_TENSOR_CORES + const bool use_tensor_cores = true; +#else + const bool use_tensor_cores = false; +#endif + // debug helpers //printf("src0: %8d %8d %8d %8d\n", src0->ne[0], src0->ne[1], src0->ne[2], src0->ne[3]); //printf(" %8d %8d %8d %8d\n", src0->nb[0], src0->nb[1], src0->nb[2], src0->nb[3]); @@ -7221,20 +7316,19 @@ static void ggml_cuda_mul_mat(const ggml_tensor * src0, const ggml_tensor * src1 //printf("src0 is contiguous %d, transposed %d, type = %s, name = %s\n", ggml_is_contiguous(src0), ggml_is_transposed(src0), ggml_type_name(src0->type), src0->name); //printf("src1 is contiguous %d, transposed %d, type = %s, name = %s\n", ggml_is_contiguous(src1), ggml_is_transposed(src1), ggml_type_name(src1->type), src1->name); - if (all_on_device && src0->type == GGML_TYPE_F16 && ggml_is_permuted(src0) && ggml_is_permuted(src1) && src1->ne[1] == 1) { + if (all_on_device && !use_tensor_cores && src0->type == GGML_TYPE_F16 && ggml_is_permuted(src0) && ggml_is_permuted(src1) && src1->ne[1] == 1) { // KQ single-batch ggml_cuda_mul_mat_vec_p021(src0, src1, dst); - } else if (all_on_device && src0->type == GGML_TYPE_F16 && !ggml_is_contiguous(src0) && !ggml_is_transposed(src1) && src1->ne[1] == 1) { + } else if (all_on_device && !use_tensor_cores && src0->type == GGML_TYPE_F16 && !ggml_is_contiguous(src0) && !ggml_is_transposed(src1) && src1->ne[1] == 1) { // KQV single-batch ggml_cuda_mul_mat_vec_nc(src0, src1, dst); - } else if (all_on_device && src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F32 && !ggml_is_transposed(src0) && !ggml_is_transposed(src1) && src1->ne[2]*src1->ne[3] > 1) { + } else if (all_on_device && src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F32 && !ggml_is_transposed(src0) && !ggml_is_transposed(src1)) { // KQ + KQV multi-batch ggml_cuda_mul_mat_mat_batched_cublas(src0, src1, dst); } else if (src0->type == GGML_TYPE_F32) { ggml_cuda_op_mul_mat(src0, src1, dst, ggml_cuda_op_mul_mat_cublas, false); } else if (ggml_is_quantized(src0->type) || src0->type == GGML_TYPE_F16) { if (src1->ne[1] == 1 && src0->ne[0] % GGML_CUDA_DMMV_X == 0) { - #ifdef GGML_CUDA_FORCE_DMMV const bool use_mul_mat_vec_q = false; #else @@ -7247,7 +7341,15 @@ static void ggml_cuda_mul_mat(const ggml_tensor * src0, const ggml_tensor * src1 ggml_cuda_op_mul_mat(src0, src1, dst, ggml_cuda_op_dequantize_mul_mat_vec, false); } } else { - if (g_mul_mat_q && ggml_is_quantized(src0->type) && min_compute_capability >= MIN_CC_DP4A) { + bool use_mul_mat_q = min_compute_capability >= MIN_CC_DP4A && ggml_is_quantized(src0->type); + + // when tensor cores are available, use them for large batch size + // ref: https://github.com/ggerganov/llama.cpp/pull/3776 + if (use_tensor_cores && min_compute_capability >= CC_VOLTA && src1->ne[1] > MMQ_MAX_BATCH_SIZE) { + use_mul_mat_q = false; + } + + if (use_mul_mat_q) { ggml_cuda_op_mul_mat(src0, src1, dst, ggml_cuda_op_mul_mat_q, true); } else { ggml_cuda_op_mul_mat(src0, src1, dst, ggml_cuda_op_mul_mat_cublas, false); @@ -7601,10 +7703,6 @@ void ggml_cuda_set_main_device(const int main_device) { } } -void ggml_cuda_set_mul_mat_q(const bool mul_mat_q) { - g_mul_mat_q = mul_mat_q; -} - void ggml_cuda_set_scratch_size(const size_t scratch_size) { // this is a hack to not completely break llama.cpp when using multiple models or contexts simultaneously // it still won't always work as expected, but it's better than nothing diff --git a/llama.cpp b/llama.cpp index 61f30c3982f184..cc8669b0e9e23d 100644 --- a/llama.cpp +++ b/llama.cpp @@ -5959,8 +5959,6 @@ static int llama_decode_internal( } } - ggml_cuda_set_mul_mat_q(cparams.mul_mat_q); - // HACK: ggml-alloc may change the tensor backend when reusing a parent, so force output to be on the CPU here if needed if (!lctx.embedding.empty()) { embeddings->backend = GGML_BACKEND_CPU; diff --git a/llama.h b/llama.h index 2f2fee0e2ff9f3..beac9a0cedd76c 100644 --- a/llama.h +++ b/llama.h @@ -178,7 +178,7 @@ extern "C" { float rope_freq_scale; // RoPE frequency scaling factor, 0 = from model // Keep the booleans together to avoid misalignment during copy-by-value. - bool mul_mat_q; // if true, use experimental mul_mat_q kernels + bool mul_mat_q; // if true, use experimental mul_mat_q kernels (DEPRECATED - always true) bool f16_kv; // use fp16 for KV cache, fp32 otherwise bool logits_all; // the llama_eval() call computes all logits, not just the last one bool embedding; // embedding mode only From c8d6a1f34ab6f1b6bd468d256e535a61f98f114c Mon Sep 17 00:00:00 2001 From: Thibault Terrasson Date: Fri, 27 Oct 2023 16:37:41 +0200 Subject: [PATCH 17/79] simple : fix batch handling (#3803) --- examples/simple/simple.cpp | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/examples/simple/simple.cpp b/examples/simple/simple.cpp index f376c050994d19..374aef6f16189c 100644 --- a/examples/simple/simple.cpp +++ b/examples/simple/simple.cpp @@ -95,13 +95,8 @@ int main(int argc, char ** argv) { llama_batch batch = llama_batch_init(512, 0, 1); // evaluate the initial prompt - batch.n_tokens = tokens_list.size(); - - for (int32_t i = 0; i < batch.n_tokens; i++) { - batch.token[i] = tokens_list[i]; - batch.pos[i] = i; - batch.seq_id[i] = 0; - batch.logits[i] = false; + for (size_t i = 0; i < tokens_list.size(); i++) { + llama_batch_add(batch, tokens_list[i], i, { 0 }, false); } // llama_decode will output logits only for the last token of the prompt @@ -148,15 +143,10 @@ int main(int argc, char ** argv) { fflush(stdout); // prepare the next batch - batch.n_tokens = 0; + llama_batch_clear(batch); // push this new token for next evaluation - batch.token [batch.n_tokens] = new_token_id; - batch.pos [batch.n_tokens] = n_cur; - batch.seq_id[batch.n_tokens] = 0; - batch.logits[batch.n_tokens] = true; - - batch.n_tokens += 1; + llama_batch_add(batch, new_token_id, n_cur, { 0 }, true); n_decode += 1; } From 6d459cbfbe5a011dfca94f9550527a504b6f9aa1 Mon Sep 17 00:00:00 2001 From: cebtenzzre Date: Fri, 27 Oct 2023 17:33:53 -0400 Subject: [PATCH 18/79] llama : correctly report GGUFv3 format (#3818) --- llama.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/llama.cpp b/llama.cpp index cc8669b0e9e23d..408533d8a62f0b 100644 --- a/llama.cpp +++ b/llama.cpp @@ -1578,12 +1578,14 @@ static void llama_kv_cache_seq_shift( enum llama_fver { GGUF_FILE_VERSION_V1 = 1, GGUF_FILE_VERSION_V2 = 2, + GGUF_FILE_VERSION_V3 = 3, }; static const char * llama_file_version_name(llama_fver version) { switch (version) { case GGUF_FILE_VERSION_V1: return "GGUF V1 (support until nov 2023)"; - case GGUF_FILE_VERSION_V2: return "GGUF V2 (latest)"; + case GGUF_FILE_VERSION_V2: return "GGUF V2"; + case GGUF_FILE_VERSION_V3: return "GGUF V3 (latest)"; } return "unknown"; From 41aee4df821854f37d90a45281f03b6db8d27de2 Mon Sep 17 00:00:00 2001 From: Kerfuffle <44031344+KerfuffleV2@users.noreply.github.com> Date: Fri, 27 Oct 2023 15:40:07 -0600 Subject: [PATCH 19/79] speculative : ensure draft and target model vocab matches (#3812) * speculative: Ensure draft and target model vocab matches * Tolerate small differences when checking dft vs tgt vocab --- examples/speculative/speculative.cpp | 33 +++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/examples/speculative/speculative.cpp b/examples/speculative/speculative.cpp index 92ad27e8e423cc..f921b78455a72c 100644 --- a/examples/speculative/speculative.cpp +++ b/examples/speculative/speculative.cpp @@ -8,6 +8,9 @@ #include #include +#define SPEC_VOCAB_MAX_SIZE_DIFFERENCE 100 +#define SPEC_VOCAB_CHECK_START_TOKEN_ID 5 + struct seq_draft { bool active = false; bool drafting = false; @@ -64,6 +67,33 @@ int main(int argc, char ** argv) { params.n_gpu_layers = params.n_gpu_layers_draft; std::tie(model_dft, ctx_dft) = llama_init_from_gpt_params(params); + { + const int n_vocab_tgt = llama_n_vocab(model_tgt); + const int n_vocab_dft = llama_n_vocab(model_dft); + const int vocab_diff = n_vocab_tgt > n_vocab_dft + ? n_vocab_tgt - n_vocab_dft + : n_vocab_dft - n_vocab_tgt; + + if (vocab_diff > SPEC_VOCAB_MAX_SIZE_DIFFERENCE) { + fprintf(stderr, "%s: error: draft model vocab must closely match target model to use speculation but ", __func__); + fprintf(stderr, "target vocab size %d does not match draft vocab size %d - difference %d, max allowed %d\n", + n_vocab_tgt, llama_n_vocab(model_dft), vocab_diff, SPEC_VOCAB_MAX_SIZE_DIFFERENCE); + return 1; + } + + for (int i = SPEC_VOCAB_CHECK_START_TOKEN_ID; i < std::min(n_vocab_tgt, n_vocab_dft); ++i) { + const char * token_text_tgt = llama_token_get_text(model_tgt, i); + const char * token_text_dft = llama_token_get_text(model_dft, i); + if (std::strcmp(token_text_tgt, token_text_dft) != 0) { + fprintf(stderr, "%s: error: draft model vocab must match target model to use speculation but ", __func__); + fprintf(stderr, "token %d content differs - target '%s', draft '%s'\n", i, + llama_token_to_piece(ctx_tgt, i).c_str(), + llama_token_to_piece(ctx_dft, i).c_str()); + return 1; + } + } + } + // tokenize the prompt std::vector inp; inp = ::llama_tokenize(ctx_tgt, params.prompt, true); @@ -227,6 +257,7 @@ int main(int argc, char ** argv) { llama_batch_add (batch_dft, id, n_past_dft, { 0 }, true); llama_kv_cache_seq_rm(ctx_dft, 0, n_past_dft, -1); + // LOG("dft batch: %s\n", LOG_BATCH_TOSTR_PRETTY(ctx_dft, batch_dft).c_str()); llama_decode (ctx_dft, batch_dft); ++n_past_dft; @@ -370,7 +401,7 @@ int main(int argc, char ** argv) { llama_kv_cache_seq_cp(ctx_tgt, 0, s, -1, -1); } - //LOG("target batch: %s\n", LOG_BATCH_TOSTR_PRETTY(ctx_tgt, batch_tgt)); + // LOG("target batch: %s\n", LOG_BATCH_TOSTR_PRETTY(ctx_tgt, batch_tgt).c_str()); llama_decode(ctx_tgt, batch_tgt); ++n_past_tgt; } From fdee152e4eebb78c191df0b074857111d7f2aba7 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Sat, 28 Oct 2023 12:06:08 +0300 Subject: [PATCH 20/79] starcoder : add GPU offloading (#3827) * starcoder : do not GPU split 1D bias tensors * starcoder : offload layers to GPU ggml-ci --- llama.cpp | 106 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 85 insertions(+), 21 deletions(-) diff --git a/llama.cpp b/llama.cpp index 408533d8a62f0b..6caa58960cf3c3 100644 --- a/llama.cpp +++ b/llama.cpp @@ -2695,8 +2695,8 @@ static void llm_load_tensors( } break; case LLM_ARCH_STARCODER: { - model.tok_embeddings = ml.create_tensor(ctx, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, GGML_BACKEND_CPU); - model.pos_embeddings = ml.create_tensor(ctx, tn(LLM_TENSOR_POS_EMBD, "weight"), {n_embd, hparams.n_ctx_train}, GGML_BACKEND_CPU); + model.tok_embeddings = ml.create_tensor(ctx, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, GGML_BACKEND_CPU); + model.pos_embeddings = ml.create_tensor(ctx, tn(LLM_TENSOR_POS_EMBD, "weight"), {n_embd, hparams.n_ctx_train}, GGML_BACKEND_CPU); // output { @@ -2747,19 +2747,19 @@ static void llm_load_tensors( layer.attn_norm_b = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}, backend); layer.wqkv = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}, backend_split); - layer.bqkv = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd + 2*n_embd_gqa}, backend_split); + layer.bqkv = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd + 2*n_embd_gqa}, backend); layer.wo = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, backend_split); - layer.bo = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, backend_split); + layer.bo = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, backend); layer.ffn_norm = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, backend); layer.ffn_norm_b = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}, backend); layer.w2 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, backend_split); - layer.b2 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, backend_split); + layer.b2 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, backend); layer.w3 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, backend_split); - layer.b3 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, backend_split); + layer.b3 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, backend); if (backend == GGML_BACKEND_GPU) { vram_weights += @@ -4616,6 +4616,8 @@ static struct ggml_cgraph * llm_build_starcoder( const float norm_eps = hparams.f_norm_eps; + const int n_gpu_layers = model.n_gpu_layers; + const int32_t n_tokens = batch.n_tokens; const int32_t n_kv = ggml_allocr_is_measure(lctx.alloc) ? n_ctx : kv_self.n; const int32_t kv_head = ggml_allocr_is_measure(lctx.alloc) ? n_ctx - n_tokens : kv_self.head; @@ -4660,6 +4662,27 @@ static struct ggml_cgraph * llm_build_starcoder( } } + const int i_gpu_start = n_layer - n_gpu_layers; + (void) i_gpu_start; + + // offload functions set the tensor output backend to GPU + // tensors are GPU-accelerated if any input or the output has been offloaded + offload_func_t offload_func_nr = llama_nop; // nr = non-repeating + offload_func_t offload_func_kq = llama_nop; + offload_func_t offload_func_v = llama_nop; + +#ifdef GGML_USE_CUBLAS + if (n_gpu_layers > n_layer) { + offload_func_nr = ggml_cuda_assign_buffers_no_alloc; + } + if (n_gpu_layers > n_layer + 1) { + offload_func_v = ggml_cuda_assign_buffers_no_alloc; + } + if (n_gpu_layers > n_layer + 2) { + offload_func_kq = ggml_cuda_assign_buffers_no_alloc; + } +#endif // GGML_USE_CUBLAS + { // Compute position embeddings. struct ggml_tensor * inp_positions = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); @@ -4685,6 +4708,7 @@ static struct ggml_cgraph * llm_build_starcoder( // KQ_mask (mask for 1 head, it will be broadcasted to all heads) struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); ggml_set_name(KQ_mask, "KQ_mask"); + offload_func_kq(KQ_mask); ggml_allocr_alloc(lctx.alloc, KQ_mask); if (!ggml_allocr_is_measure(lctx.alloc)) { float * data = (float *) KQ_mask->data; @@ -4708,44 +4732,67 @@ static struct ggml_cgraph * llm_build_starcoder( ggml_set_name(inpL, "inpL"); for (int il = 0; il < n_layer; ++il) { + offload_func_t offload_func = llama_nop; + +#ifdef GGML_USE_CUBLAS + if (il >= i_gpu_start) { + offload_func = ggml_cuda_assign_buffers_no_alloc; + } +#endif // GGML_USE_CUBLAS + { // Norm cur = ggml_norm(ctx0, inpL, norm_eps); + offload_func(cur); + cur = ggml_add(ctx0, ggml_mul(ctx0, cur, model.layers[il].attn_norm), model.layers[il].attn_norm_b); + offload_func(cur); } { // Self Attention - cur = ggml_add(ctx0, ggml_mul_mat(ctx0, model.layers[il].wqkv, cur), model.layers[il].bqkv); + cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); + offload_func_kq(cur); - struct ggml_tensor * tmpq = ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*n_embd); - struct ggml_tensor * tmpk = ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], sizeof(float)*n_embd); - struct ggml_tensor * tmpv = ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], sizeof(float)*(n_embd + n_embd_gqa)); + cur = ggml_add(ctx0, cur, model.layers[il].bqkv); + offload_func_kq(cur); - struct ggml_tensor * Qcur = tmpq; + struct ggml_tensor * tmpq = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); + struct ggml_tensor * tmpk = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); + struct ggml_tensor * tmpv = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); + + ggml_set_name(tmpq, "tmpq"); + ggml_set_name(tmpk, "tmpk"); + ggml_set_name(tmpv, "tmpv"); + + offload_func_kq(tmpq); + offload_func_kq(tmpk); + offload_func_v (tmpv); + + struct ggml_tensor * Qcur = ggml_reshape_3d(ctx0, tmpq, n_embd_head, n_head, n_tokens); struct ggml_tensor * Kcur = tmpk; { - struct ggml_tensor * Vcur = ggml_transpose(ctx0, ggml_reshape_2d(ctx0, ggml_cont(ctx0, tmpv), n_embd_gqa, n_tokens)); + struct ggml_tensor * Vcur = ggml_transpose(ctx0, tmpv); + offload_func_v(Vcur); ggml_set_name(Vcur, "Vcur"); struct ggml_tensor * k = ggml_view_1d(ctx0, kv_self.k, n_tokens*n_embd_gqa, (ggml_element_size(kv_self.k)*n_embd_gqa)*(il*n_ctx + kv_head)); + offload_func_kq(k); ggml_set_name(k, "k"); struct ggml_tensor * v = ggml_view_2d(ctx0, kv_self.v, n_tokens, n_embd_gqa, ( n_ctx)*ggml_element_size(kv_self.v), (il*n_ctx)*ggml_element_size(kv_self.v)*n_embd_gqa + kv_head*ggml_element_size(kv_self.v)); + offload_func_v(v); + ggml_set_name(v, "v"); ggml_build_forward_expand(gf, ggml_cpy(ctx0, Kcur, k)); ggml_build_forward_expand(gf, ggml_cpy(ctx0, Vcur, v)); } - struct ggml_tensor * Q = - ggml_permute(ctx0, - ggml_cpy(ctx0, - Qcur, - ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_embd_head, n_head, n_tokens)), - 0, 2, 1, 3); + struct ggml_tensor * Q = ggml_permute(ctx0, Qcur, 0, 2, 1, 3); + offload_func_kq(Q); ggml_set_name(Q, "Q"); struct ggml_tensor * K = @@ -4754,23 +4801,28 @@ static struct ggml_cgraph * llm_build_starcoder( ggml_element_size(kv_self.k)*n_embd_gqa, ggml_element_size(kv_self.k)*n_embd_head, ggml_element_size(kv_self.k)*n_embd_gqa*n_ctx*il); + offload_func_kq(K); ggml_set_name(K, "K"); // K * Q struct ggml_tensor * KQ = ggml_mul_mat(ctx0, K, Q); + offload_func_kq(KQ); ggml_set_name(KQ, "KQ"); // KQ_scaled = KQ / sqrt(n_embd_head) // KQ_scaled shape [n_past + n_tokens, n_tokens, n_head, 1] struct ggml_tensor * KQ_scaled = ggml_scale_inplace(ctx0, KQ, KQ_scale); + offload_func_kq(KQ_scaled); ggml_set_name(KQ_scaled, "KQ_scaled"); // KQ_masked = mask_past(KQ_scaled) struct ggml_tensor * KQ_masked = ggml_add(ctx0, KQ_scaled, KQ_mask); + offload_func_kq(KQ_masked); ggml_set_name(KQ_masked, "KQ_masked"); // KQ = soft_max(KQ_masked) struct ggml_tensor * KQ_soft_max = ggml_soft_max_inplace(ctx0, KQ_masked); + offload_func_v(KQ_soft_max); ggml_set_name(KQ_soft_max, "KQ_soft_max"); // split cached V into n_head heads @@ -4783,22 +4835,25 @@ static struct ggml_cgraph * llm_build_starcoder( ggml_set_name(V, "V"); struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V, KQ_soft_max); + offload_func_v(KQV); ggml_set_name(KQV, "KQV"); - // KQV_merged = KQV.permute(0, 2, 1, 3) struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3); + offload_func_v(KQV_merged); ggml_set_name(KQV_merged, "KQV_merged"); - // cur = KQV_merged.contiguous().view(n_embd, n_tokens) cur = ggml_cont_2d(ctx0, KQV_merged, n_embd, n_tokens); + offload_func_v(cur); ggml_set_name(cur, "KQV_merged_contiguous"); } // Projection cur = ggml_add(ctx0, ggml_mul_mat(ctx0, model.layers[il].wo, cur), model.layers[il].bo); + offload_func(cur); // Add the input cur = ggml_add(ctx0, cur, inpL); + offload_func(cur); struct ggml_tensor * inpFF = cur; @@ -4807,27 +4862,36 @@ static struct ggml_cgraph * llm_build_starcoder( // Norm { cur = ggml_norm(ctx0, inpFF, norm_eps); + offload_func_nr(cur); + cur = ggml_add(ctx0, ggml_mul(ctx0, cur, model.layers[il].ffn_norm), model.layers[il].ffn_norm_b); + offload_func_nr(cur); } cur = ggml_add(ctx0, ggml_mul_mat(ctx0, model.layers[il].w3, cur), model.layers[il].b3); + offload_func(cur); // GELU activation cur = ggml_gelu(ctx0, cur); + offload_func(cur); // Projection cur = ggml_add(ctx0, ggml_mul_mat(ctx0, model.layers[il].w2, cur), model.layers[il].b2); + offload_func(cur); } inpL = ggml_add(ctx0, cur, inpFF); + } // Output Norm { cur = ggml_norm(ctx0, inpL, norm_eps); + offload_func_nr(cur); + cur = ggml_add(ctx0, ggml_mul(ctx0, cur, model.output_norm), model.output_norm_b); + ggml_set_name(cur, "result_norm"); } - ggml_set_name(cur, "result_norm"); cur = ggml_mul_mat(ctx0, model.output, cur); ggml_set_name(cur, "result_output"); From 177461104b454163473dced2a5038f4e016cdb7e Mon Sep 17 00:00:00 2001 From: Henk Poley Date: Sat, 28 Oct 2023 12:16:33 +0200 Subject: [PATCH 21/79] common : print that one line of the syntax help *also* to standard output (#3823) --- common/common.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/common.cpp b/common/common.cpp index 44bb76618f5f8b..c0d4924e2d4a53 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -743,7 +743,7 @@ void gpt_print_usage(int /*argc*/, char ** argv, const gpt_params & params) { #endif // GGML_USE_CUBLAS #endif printf(" --verbose-prompt print prompt before generation\n"); - fprintf(stderr, " --simple-io use basic IO for better compatibility in subprocesses and limited consoles\n"); + printf(" --simple-io use basic IO for better compatibility in subprocesses and limited consoles\n"); printf(" --lora FNAME apply LoRA adapter (implies --no-mmap)\n"); printf(" --lora-scaled FNAME S apply LoRA adapter with user defined scaling S (implies --no-mmap)\n"); printf(" --lora-base FNAME optional model to use as a base for the layers modified by the LoRA adapter\n"); From ee1a0ec9cb367ba41d138134795cbbbe93d2bf1c Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Sat, 28 Oct 2023 14:23:11 +0300 Subject: [PATCH 22/79] llama : add option for greedy sampling with probs (#3813) * llama : add option for greedy sampling with probs * llama : add comment about llama_sample_token_greedy() missing probs * sampling : temp == 0.0 -> no probs, temp < 0.0 -> probs --- common/common.cpp | 1 + common/sampling.cpp | 8 ++++++-- examples/speculative/speculative.cpp | 2 +- llama.h | 1 + 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/common/common.cpp b/common/common.cpp index c0d4924e2d4a53..f81f4d354bc017 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -224,6 +224,7 @@ bool gpt_params_parse(int argc, char ** argv, gpt_params & params) { break; } sparams.temp = std::stof(argv[i]); + sparams.temp = std::max(sparams.temp, 0.0f); } else if (arg == "--tfs") { if (++i >= argc) { invalid_param = true; diff --git a/common/sampling.cpp b/common/sampling.cpp index 5258d4e8263693..c4996c9857d8ac 100644 --- a/common/sampling.cpp +++ b/common/sampling.cpp @@ -167,8 +167,12 @@ llama_token llama_sampling_sample( llama_sample_grammar(ctx_main, &cur_p, ctx_sampling->grammar); } - if (temp <= 0) { - // greedy sampling + if (temp < 0.0) { + // greedy sampling, with probs + llama_sample_softmax(ctx_main, &cur_p); + id = cur_p.data[0].id; + } else if (temp == 0.0) { + // greedy sampling, no probs id = llama_sample_token_greedy(ctx_main, &cur_p); } else { if (mirostat == 1) { diff --git a/examples/speculative/speculative.cpp b/examples/speculative/speculative.cpp index f921b78455a72c..323c74652c9a69 100644 --- a/examples/speculative/speculative.cpp +++ b/examples/speculative/speculative.cpp @@ -148,7 +148,7 @@ int main(int argc, char ** argv) { std::vector drafts(n_seq_dft); params.sparams.grammar.clear(); // the draft samplers will copy the target sampler's grammar - params.sparams.temp = std::max(0.01f, params.sparams.temp); + params.sparams.temp = -1.0f; // force greedy sampling with probs for the draft model for (int s = 0; s < n_seq_dft; ++s) { drafts[s].ctx_sampling = llama_sampling_init(params.sparams); diff --git a/llama.h b/llama.h index beac9a0cedd76c..d901dcd9116d3d 100644 --- a/llama.h +++ b/llama.h @@ -658,6 +658,7 @@ extern "C" { float * mu); /// @details Selects the token with the highest probability. + /// Does not compute the token probabilities. Use llama_sample_softmax() instead. LLAMA_API llama_token llama_sample_token_greedy( struct llama_context * ctx, llama_token_data_array * candidates); From bd6d9e205982b34e0ba2c3b22bbf31a1ef1a1bb5 Mon Sep 17 00:00:00 2001 From: Kerfuffle <44031344+KerfuffleV2@users.noreply.github.com> Date: Sat, 28 Oct 2023 05:54:24 -0600 Subject: [PATCH 23/79] llama : allow quantizing k-quants to fall back when tensor size incompatible (#3747) * Allow quantizing k-quants to fall back when tensor size incompatible * quantizing: Add warning when tensors were incompatible with k-quants Clean up k-quants state passing a bit --- llama.cpp | 108 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 65 insertions(+), 43 deletions(-) diff --git a/llama.cpp b/llama.cpp index 6caa58960cf3c3..3d431ee7bf5260 100644 --- a/llama.cpp +++ b/llama.cpp @@ -8049,6 +8049,24 @@ struct no_init { no_init() { /* do nothing */ } }; +struct quantize_state_internal { + const llama_model & model; + const llama_model_quantize_params * params; +#ifdef GGML_USE_K_QUANTS + int n_attention_wv = 0; + int n_feed_forward_w2 = 0; + int i_attention_wv = 0; + int i_feed_forward_w2 = 0; + + int n_k_quantized = 0; + int n_fallback = 0; +#endif + quantize_state_internal(const llama_model & model, const llama_model_quantize_params * params) + : model(model) + , params(params) + {} +}; + static void llama_convert_tensor_internal( struct ggml_tensor * tensor, std::vector> & output, std::vector & workers, const size_t nelements, const int nthread @@ -8109,12 +8127,13 @@ static void llama_convert_tensor_internal( #ifdef GGML_USE_K_QUANTS static ggml_type get_k_quant_type( - ggml_type new_type, const ggml_tensor * tensor, const llama_model & model, llama_ftype ftype, int * i_attention_wv, - int n_attention_wv, int * i_feed_forward_w2, int n_feed_forward_w2 + quantize_state_internal & qs, + ggml_type new_type, const ggml_tensor * tensor, llama_ftype ftype ) { const std::string name = ggml_get_name(tensor); // TODO: avoid hardcoded tensor names - use the TN_* constants - const auto tn = LLM_TN(model.arch); + const llm_arch arch = qs.model.arch; + const auto tn = LLM_TN(arch); auto use_more_bits = [](int i_layer, int num_layers) -> bool { return i_layer < num_layers/8 || i_layer >= 7*num_layers/8 || (i_layer - num_layers/8)%3 == 2; @@ -8122,7 +8141,7 @@ static ggml_type get_k_quant_type( if (name == tn(LLM_TENSOR_OUTPUT, "weight")) { int nx = tensor->ne[0]; - if (model.arch == LLM_ARCH_FALCON || nx % QK_K != 0) { + if (arch == LLM_ARCH_FALCON || nx % QK_K != 0) { new_type = GGML_TYPE_Q8_0; } else if (new_type != GGML_TYPE_Q8_0) { @@ -8131,46 +8150,46 @@ static ggml_type get_k_quant_type( } else if (name.find("attn_v.weight") != std::string::npos) { if (ftype == LLAMA_FTYPE_MOSTLY_Q2_K) new_type = GGML_TYPE_Q3_K; else if (ftype == LLAMA_FTYPE_MOSTLY_Q3_K_M) { - new_type = *i_attention_wv < 2 ? GGML_TYPE_Q5_K : GGML_TYPE_Q4_K; + new_type = qs.i_attention_wv < 2 ? GGML_TYPE_Q5_K : GGML_TYPE_Q4_K; } else if (ftype == LLAMA_FTYPE_MOSTLY_Q3_K_L) new_type = GGML_TYPE_Q5_K; else if ((ftype == LLAMA_FTYPE_MOSTLY_Q4_K_M || ftype == LLAMA_FTYPE_MOSTLY_Q5_K_M) && - use_more_bits(*i_attention_wv, n_attention_wv)) new_type = GGML_TYPE_Q6_K; - else if (ftype == LLAMA_FTYPE_MOSTLY_Q4_K_S && *i_attention_wv < 4) new_type = GGML_TYPE_Q5_K; + use_more_bits(qs.i_attention_wv, qs.n_attention_wv)) new_type = GGML_TYPE_Q6_K; + else if (ftype == LLAMA_FTYPE_MOSTLY_Q4_K_S && qs.i_attention_wv < 4) new_type = GGML_TYPE_Q5_K; else if (QK_K == 64 && (ftype == LLAMA_FTYPE_MOSTLY_Q4_K_S || ftype == LLAMA_FTYPE_MOSTLY_Q3_K_S) && - (*i_attention_wv < n_attention_wv/8 || *i_attention_wv >= 7*n_attention_wv/8)) new_type = GGML_TYPE_Q6_K; - if (model.type == MODEL_70B) { + (qs.i_attention_wv < qs.n_attention_wv/8 || qs.i_attention_wv >= 7*qs.n_attention_wv/8)) new_type = GGML_TYPE_Q6_K; + if (qs.model.type == MODEL_70B) { // In the 70B model we have 8 heads sharing the same attn_v weights. As a result, the attn_v.weight tensor is // 8x smaller compared to attn_q.weight. Hence, we can get a nice boost in quantization accuracy with // nearly negligible increase in model size by quantizing this tensor with more bits: if (new_type == GGML_TYPE_Q3_K || new_type == GGML_TYPE_Q4_K) new_type = GGML_TYPE_Q5_K; } - ++*i_attention_wv; + ++qs.i_attention_wv; } else if (name.find("ffn_down.weight") != std::string::npos) { if (ftype == LLAMA_FTYPE_MOSTLY_Q2_K) new_type = GGML_TYPE_Q3_K; else if (ftype == LLAMA_FTYPE_MOSTLY_Q3_K_M) { - new_type = *i_feed_forward_w2 < 2 ? GGML_TYPE_Q5_K - : model.arch != LLM_ARCH_FALCON || use_more_bits(*i_feed_forward_w2, n_feed_forward_w2) ? GGML_TYPE_Q4_K + new_type = qs.i_feed_forward_w2 < 2 ? GGML_TYPE_Q5_K + : arch != LLM_ARCH_FALCON || use_more_bits(qs.i_feed_forward_w2, qs.n_feed_forward_w2) ? GGML_TYPE_Q4_K : GGML_TYPE_Q3_K; } else if (ftype == LLAMA_FTYPE_MOSTLY_Q3_K_L) { - new_type = model.arch == LLM_ARCH_FALCON ? GGML_TYPE_Q4_K : GGML_TYPE_Q5_K; + new_type = arch == LLM_ARCH_FALCON ? GGML_TYPE_Q4_K : GGML_TYPE_Q5_K; } else if (ftype == LLAMA_FTYPE_MOSTLY_Q4_K_M) { - if (model.arch == LLM_ARCH_FALCON) { - new_type = *i_feed_forward_w2 < 2 ? GGML_TYPE_Q6_K : - use_more_bits(*i_feed_forward_w2, n_feed_forward_w2) ? GGML_TYPE_Q5_K : GGML_TYPE_Q4_K; + if (arch == LLM_ARCH_FALCON) { + new_type = qs.i_feed_forward_w2 < 2 ? GGML_TYPE_Q6_K : + use_more_bits(qs.i_feed_forward_w2, qs.n_feed_forward_w2) ? GGML_TYPE_Q5_K : GGML_TYPE_Q4_K; } else { - if (use_more_bits(*i_feed_forward_w2, n_feed_forward_w2)) new_type = GGML_TYPE_Q6_K; + if (use_more_bits(qs.i_feed_forward_w2, qs.n_feed_forward_w2)) new_type = GGML_TYPE_Q6_K; } } - else if (ftype == LLAMA_FTYPE_MOSTLY_Q5_K_M && use_more_bits(*i_feed_forward_w2, n_feed_forward_w2)) new_type = GGML_TYPE_Q6_K; - else if (ftype == LLAMA_FTYPE_MOSTLY_Q4_K_S && model.arch != LLM_ARCH_FALCON && *i_feed_forward_w2 < 4) { + else if (ftype == LLAMA_FTYPE_MOSTLY_Q5_K_M && use_more_bits(qs.i_feed_forward_w2, qs.n_feed_forward_w2)) new_type = GGML_TYPE_Q6_K; + else if (ftype == LLAMA_FTYPE_MOSTLY_Q4_K_S && arch != LLM_ARCH_FALCON && qs.i_feed_forward_w2 < 4) { new_type = GGML_TYPE_Q5_K; } - ++*i_feed_forward_w2; + ++qs.i_feed_forward_w2; } else if (name.find("attn_output.weight") != std::string::npos) { - if (model.arch != LLM_ARCH_FALCON) { + if (arch != LLM_ARCH_FALCON) { if (ftype == LLAMA_FTYPE_MOSTLY_Q2_K ) new_type = GGML_TYPE_Q3_K; else if (ftype == LLAMA_FTYPE_MOSTLY_Q3_K_M) new_type = GGML_TYPE_Q4_K; else if (ftype == LLAMA_FTYPE_MOSTLY_Q3_K_L) new_type = GGML_TYPE_Q5_K; @@ -8197,20 +8216,23 @@ static ggml_type get_k_quant_type( int nx = tensor->ne[0]; int ny = tensor->ne[1]; if (nx % QK_K != 0) { - LLAMA_LOG_WARN("\n\n%s : tensor cols %d x %d are not divisible by %d, required for k-quants\n", __func__, nx, ny, QK_K); + LLAMA_LOG_WARN("\n\n%s : tensor cols %d x %d are not divisible by %d, required for %s", __func__, nx, ny, QK_K, ggml_type_name(new_type)); convert_incompatible_tensor = true; + } else { + ++qs.n_k_quantized; } } if (convert_incompatible_tensor) { - if (name == tn(LLM_TENSOR_OUTPUT, "weight")) { - new_type = GGML_TYPE_F16; //fall back to F16 instead of just failing. - LLAMA_LOG_WARN("F16 will be used for this tensor instead.\n"); - } else if (name == tn(LLM_TENSOR_TOKEN_EMBD, "weight")) { - new_type = GGML_TYPE_Q4_0; //fall back to Q4_0 instead of just failing. - LLAMA_LOG_WARN("Q4_0 will be used for this tensor instead.\n"); - } else { - throw std::runtime_error("Unsupported tensor size encountered\n"); + switch (new_type) { + case GGML_TYPE_Q2_K: new_type = GGML_TYPE_Q4_0; break; + case GGML_TYPE_Q3_K: new_type = GGML_TYPE_Q4_1; break; + case GGML_TYPE_Q4_K: new_type = GGML_TYPE_Q5_0; break; + case GGML_TYPE_Q5_K: new_type = GGML_TYPE_Q5_1; break; + case GGML_TYPE_Q6_K: new_type = GGML_TYPE_Q8_0; break; + default: throw std::runtime_error("\nUnsupported tensor size encountered\n"); } + LLAMA_LOG_WARN(" - using fallback quantization %s\n", ggml_type_name(new_type)); + ++qs.n_fallback; } return new_type; @@ -8268,6 +8290,8 @@ static void llama_model_quantize_internal(const std::string & fname_inp, const s llm_load_arch(ml, model); llm_load_hparams(ml, model); + struct quantize_state_internal qs(model, params); + if (params->only_copy) { ftype = model.ftype; } @@ -8281,9 +8305,6 @@ static void llama_model_quantize_internal(const std::string & fname_inp, const s gguf_set_val_u32(ctx_out, "general.file_type", ftype); #ifdef GGML_USE_K_QUANTS - int n_attention_wv = 0; - int n_feed_forward_w2 = 0; - for (int i = 0; i < ml.n_tensors; ++i) { struct ggml_tensor * meta = ml.get_tensor_meta(i); @@ -8291,19 +8312,16 @@ static void llama_model_quantize_internal(const std::string & fname_inp, const s // TODO: avoid hardcoded tensor names - use the TN_* constants if (name.find("attn_v.weight") != std::string::npos || name.find("attn_qkv.weight") != std::string::npos) { - ++n_attention_wv; + ++qs.n_attention_wv; } else if (name.find("ffn_down.weight") != std::string::npos) { - ++n_feed_forward_w2; + ++qs.n_feed_forward_w2; } } - if (n_attention_wv != n_feed_forward_w2 || (uint32_t)n_attention_wv != model.hparams.n_layer) { + if (qs.n_attention_wv != qs.n_feed_forward_w2 || (uint32_t)qs.n_attention_wv != model.hparams.n_layer) { LLAMA_LOG_WARN("%s ============ Strange model: n_attention_wv = %d, n_feed_forward_w2 = %d, hparams.n_layer = %d\n", - __func__, n_attention_wv, n_feed_forward_w2, model.hparams.n_layer); + __func__, qs.n_attention_wv, qs.n_feed_forward_w2, model.hparams.n_layer); } - - int i_attention_wv = 0; - int i_feed_forward_w2 = 0; #endif size_t total_size_org = 0; @@ -8370,9 +8388,7 @@ static void llama_model_quantize_internal(const std::string & fname_inp, const s if (quantize) { new_type = quantized_type; #ifdef GGML_USE_K_QUANTS - new_type = get_k_quant_type( - new_type, tensor, model, ftype, &i_attention_wv, n_attention_wv, &i_feed_forward_w2, n_feed_forward_w2 - ); + new_type = get_k_quant_type(qs, new_type, tensor, ftype); #endif // If we've decided to quantize to the same type the tensor is already // in then there's nothing to do. @@ -8498,6 +8514,12 @@ static void llama_model_quantize_internal(const std::string & fname_inp, const s LLAMA_LOG_INFO("\n"); } } +#ifdef GGML_USE_K_QUANTS + if (qs.n_fallback > 0) { + LLAMA_LOG_WARN("%s: WARNING: %d of %d tensor(s) incompatible with k-quants and required fallback quantization\n", + __func__, qs.n_fallback, qs.n_k_quantized + qs.n_fallback); + } +#endif } static int llama_apply_lora_from_file_internal( From 8a2f2fea2914aaa3f4b2f82800c7de15f15bdb09 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Sat, 28 Oct 2023 15:25:15 +0300 Subject: [PATCH 24/79] convert : ignore tokens if their IDs are within [0, vocab_size) (#3831) --- convert.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/convert.py b/convert.py index 0680f71ea73e89..bfbfab283f6ae7 100755 --- a/convert.py +++ b/convert.py @@ -366,16 +366,19 @@ def __init__(self, fname_tokenizer: Path, fname_added_tokens: Path | None) -> No added_tokens = {} vocab_size: int = self.sentencepiece_tokenizer.vocab_size() - expected_ids = list(range(vocab_size, vocab_size + len(added_tokens))) - actual_ids = sorted(added_tokens.values()) - if expected_ids != actual_ids: - raise Exception(f"Expected added token IDs to be sequential and start at {vocab_size}; got {actual_ids}") - items = sorted(added_tokens.items(), key=lambda text_idx: text_idx[1]) - self.added_tokens_list = [text for (text, idx) in items] - self.vocab_size_base: int = vocab_size - self.vocab_size: int = self.vocab_size_base + len(self.added_tokens_list) - self.fname_tokenizer = fname_tokenizer + new_tokens = {id: piece for piece, id in added_tokens.items() if id >= vocab_size} + expected_new_ids = list(range(vocab_size, vocab_size + len(new_tokens))) + actual_new_ids = sorted(new_tokens.keys()) + + if expected_new_ids != actual_new_ids: + raise ValueError(f"Expected new token IDs {expected_new_ids} to be sequential; got {actual_new_ids}") + + # Token pieces that were added to the base vocabulary. + self.added_tokens_list = [new_tokens[id] for id in actual_new_ids] + self.vocab_size_base = vocab_size + self.vocab_size = self.vocab_size_base + len(self.added_tokens_list) + self.fname_tokenizer = fname_tokenizer self.fname_added_tokens = fname_added_tokens def sentencepiece_tokens(self) -> Iterable[tuple[bytes, float, gguf.TokenType]]: From ba231e8a6dd8ad82acfe0e4d492ff7cef6b3f0a1 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Sat, 28 Oct 2023 15:25:33 +0300 Subject: [PATCH 25/79] issues : change label from bug to bug-unconfirmed (#3748) --- .github/ISSUE_TEMPLATE/bug.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug.md b/.github/ISSUE_TEMPLATE/bug.md index d7879b232b54dd..c003fe7c136274 100644 --- a/.github/ISSUE_TEMPLATE/bug.md +++ b/.github/ISSUE_TEMPLATE/bug.md @@ -1,7 +1,7 @@ --- name: Bug template about: Used to report bugs in llama.cpp -labels: ["bug"] +labels: ["bug-unconfirmed"] assignees: '' --- From 82a6646e0221216c41edcdf99f5a44bb051391f5 Mon Sep 17 00:00:00 2001 From: Aarni Koskela Date: Sat, 28 Oct 2023 15:43:01 +0300 Subject: [PATCH 26/79] metal : try cwd for ggml-metal.metal if bundle lookup fails (#3793) * Try cwd for ggml-metal if bundle lookup fails When building with `-DBUILD_SHARED_LIBS=ON -DLLAMA_METAL=ON -DLLAMA_BUILD_SERVER=ON`, `server` would fail to load `ggml-metal.metal` because `[bundle pathForResource:...]` returns `nil`. In that case, fall back to `ggml-metal.metal` in the cwd instead of passing `null` as a path. Follows up on #1782 * Update ggml-metal.m --------- Co-authored-by: Georgi Gerganov --- ggml-metal.m | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ggml-metal.m b/ggml-metal.m index c1901dca75269d..2380c431001408 100644 --- a/ggml-metal.m +++ b/ggml-metal.m @@ -210,6 +210,10 @@ static void ggml_metal_log(enum ggml_log_level level, const char* format, ...){ GGML_METAL_LOG_INFO("%s: default.metallib not found, loading from source\n", __func__); NSString * sourcePath = [bundle pathForResource:@"ggml-metal" ofType:@"metal"]; + if (sourcePath == nil) { + GGML_METAL_LOG_WARN("%s: error: could not use bundle path to find ggml-metal.metal, falling back to trying cwd\n", __func__); + sourcePath = @"ggml-metal.metal"; + } GGML_METAL_LOG_INFO("%s: loading '%s'\n", __func__, [sourcePath UTF8String]); NSString * src = [NSString stringWithContentsOfFile:sourcePath encoding:NSUTF8StringEncoding error:&error]; if (error) { From ff3bad83e29e3009010cbc923bebd769055eaa7f Mon Sep 17 00:00:00 2001 From: Erik Scholz Date: Sat, 28 Oct 2023 16:41:07 +0200 Subject: [PATCH 27/79] flake : update flake.lock for newer transformers version + provide extra dev shell (#3797) * flake : update flake.lock for newer transformers version + provide extra dev shell with torch and transformers (for most convert-xxx.py scripts) --- flake.lock | 6 +++--- flake.nix | 7 +++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index a7777d05d5c0cd..070f0e1613fc30 100644 --- a/flake.lock +++ b/flake.lock @@ -20,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1692913444, - "narHash": "sha256-1SvMQm2DwofNxXVtNWWtIcTh7GctEVrS/Xel/mdc6iY=", + "lastModified": 1698134075, + "narHash": "sha256-foCD+nuKzfh49bIoiCBur4+Fx1nozo+4C/6k8BYk4sg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "18324978d632ffc55ef1d928e81630c620f4f447", + "rev": "8efd5d1e283604f75a808a20e6cde0ef313d07d4", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index cfc4776a469381..fa34394b2f0593 100644 --- a/flake.nix +++ b/flake.nix @@ -51,6 +51,9 @@ }; llama-python = pkgs.python3.withPackages (ps: with ps; [ numpy sentencepiece ]); + # TODO(Green-Sky): find a better way to opt-into the heavy ml python runtime + llama-python-extra = + pkgs.python3.withPackages (ps: with ps; [ numpy sentencepiece torchWithoutCuda transformers ]); postPatch = '' substituteInPlace ./ggml-metal.m \ --replace '[bundle pathForResource:@"ggml-metal" ofType:@"metal"];' "@\"$out/bin/ggml-metal.metal\";" @@ -126,5 +129,9 @@ buildInputs = [ llama-python ]; packages = nativeBuildInputs ++ osSpecific; }; + devShells.extra = pkgs.mkShell { + buildInputs = [ llama-python-extra ]; + packages = nativeBuildInputs ++ osSpecific; + }; }); } From d69d777c02b9ac405a95f3cbfba219a990caefff Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Sun, 29 Oct 2023 18:32:28 +0200 Subject: [PATCH 28/79] ggml : quantization refactoring (#3833) * ggml : factor all quantization code in ggml-quants ggml-ci * ggml-quants : fix Zig and Swift builds + quantize tool ggml-ci * quantize : --pure option for disabling k-quant mixtures --------- Co-authored-by: cebtenzzre --- CMakeLists.txt | 12 +- Makefile | 18 +- Package.swift | 3 +- build.zig | 21 +- examples/quantize/quantize.cpp | 9 +- k_quants.c => ggml-quants.c | 4310 ++++++++++++++++++++++++-------- k_quants.h => ggml-quants.h | 103 +- ggml.c | 3641 +++++---------------------- ggml.h | 7 + llama.cpp | 34 +- llama.h | 1 + 11 files changed, 4073 insertions(+), 4086 deletions(-) rename k_quants.c => ggml-quants.c (71%) rename k_quants.h => ggml-quants.h (63%) diff --git a/CMakeLists.txt b/CMakeLists.txt index d9fc86237b15cc..3659279e2d7d09 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -94,7 +94,6 @@ option(LLAMA_CLBLAST "llama: use CLBlast" option(LLAMA_METAL "llama: use Metal" ${LLAMA_METAL_DEFAULT}) option(LLAMA_METAL_NDEBUG "llama: disable Metal debugging" OFF) option(LLAMA_MPI "llama: use MPI" OFF) -option(LLAMA_K_QUANTS "llama: use k-quants" ON) option(LLAMA_QKK_64 "llama: use super-block size of 64 for k-quants" OFF) option(LLAMA_BUILD_TESTS "llama: build tests" ${LLAMA_STANDALONE}) @@ -278,13 +277,8 @@ if (LLAMA_BLAS) endif() endif() -if (LLAMA_K_QUANTS) - set(GGML_HEADERS_EXTRA k_quants.h) - set(GGML_SOURCES_EXTRA k_quants.c) - add_compile_definitions(GGML_USE_K_QUANTS) - if (LLAMA_QKK_64) - add_compile_definitions(GGML_QKK_64) - endif() +if (LLAMA_QKK_64) + add_compile_definitions(GGML_QKK_64) endif() if (LLAMA_CUBLAS) @@ -673,6 +667,8 @@ add_library(ggml OBJECT ggml-alloc.h ggml-backend.c ggml-backend.h + ggml-quants.c + ggml-quants.h ${GGML_SOURCES_CUDA} ${GGML_HEADERS_CUDA} ${GGML_SOURCES_OPENCL} ${GGML_HEADERS_OPENCL} ${GGML_SOURCES_METAL} ${GGML_HEADERS_METAL} diff --git a/Makefile b/Makefile index 68069f9ff331e9..2cecc2216c87b6 100644 --- a/Makefile +++ b/Makefile @@ -342,13 +342,9 @@ else MK_CXXFLAGS += -march=rv64gcv -mabi=lp64d endif -ifndef LLAMA_NO_K_QUANTS - MK_CPPFLAGS += -DGGML_USE_K_QUANTS - OBJS += k_quants.o ifdef LLAMA_QKK_64 MK_CPPFLAGS += -DGGML_QKK_64 endif -endif ifndef LLAMA_NO_ACCELERATE # Mac OS - include Accelerate framework. @@ -365,7 +361,7 @@ ifdef LLAMA_MPI MK_CPPFLAGS += -DGGML_USE_MPI MK_CFLAGS += -Wno-cast-qual MK_CXXFLAGS += -Wno-cast-qual - OBJS += ggml-mpi.o + OBJS += ggml-mpi.o endif # LLAMA_MPI ifdef LLAMA_OPENBLAS @@ -382,7 +378,7 @@ endif # LLAMA_BLIS ifdef LLAMA_CUBLAS MK_CPPFLAGS += -DGGML_USE_CUBLAS -I/usr/local/cuda/include -I/opt/cuda/include -I$(CUDA_PATH)/targets/x86_64-linux/include MK_LDFLAGS += -lcublas -lculibos -lcudart -lcublasLt -lpthread -ldl -lrt -L/usr/local/cuda/lib64 -L/opt/cuda/lib64 -L$(CUDA_PATH)/targets/x86_64-linux/lib - OBJS += ggml-cuda.o + OBJS += ggml-cuda.o NVCCFLAGS = --forward-unknown-to-host-compiler -use_fast_math ifdef LLAMA_CUDA_NVCC NVCC = $(LLAMA_CUDA_NVCC) @@ -497,11 +493,6 @@ ggml-mpi.o: ggml-mpi.c ggml-mpi.h $(CC) $(CFLAGS) -c $< -o $@ endif # LLAMA_MPI -ifndef LLAMA_NO_K_QUANTS -k_quants.o: k_quants.c k_quants.h - $(CC) $(CFLAGS) -c $< -o $@ -endif # LLAMA_NO_K_QUANTS - # combine build flags with cmdline overrides override CFLAGS := $(MK_CPPFLAGS) $(CPPFLAGS) $(MK_CFLAGS) $(CFLAGS) override CXXFLAGS := $(MK_CPPFLAGS) $(CPPFLAGS) $(MK_CXXFLAGS) $(CXXFLAGS) @@ -542,7 +533,10 @@ ggml-alloc.o: ggml-alloc.c ggml.h ggml-alloc.h ggml-backend.o: ggml-backend.c ggml.h ggml-backend.h $(CC) $(CFLAGS) -c $< -o $@ -OBJS += ggml-alloc.o ggml-backend.o +ggml-quants.o: ggml-quants.c ggml.h ggml-quants.h + $(CC) $(CFLAGS) -c $< -o $@ + +OBJS += ggml-alloc.o ggml-backend.o ggml-quants.o llama.o: llama.cpp ggml.h ggml-alloc.h ggml-backend.h ggml-cuda.h ggml-metal.h llama.h $(CXX) $(CXXFLAGS) -c $< -o $@ diff --git a/Package.swift b/Package.swift index 4ab055b19da2e5..5b3bd72cafe196 100644 --- a/Package.swift +++ b/Package.swift @@ -42,13 +42,12 @@ let package = Package( "llama.cpp", "ggml-alloc.c", "ggml-backend.c", - "k_quants.c", + "ggml-quants.c", ] + additionalSources, resources: resources, publicHeadersPath: "spm-headers", cSettings: [ .unsafeFlags(["-Wno-shorten-64-to-32", "-O3", "-DNDEBUG"]), - .define("GGML_USE_K_QUANTS"), .define("GGML_USE_ACCELERATE") // NOTE: NEW_LAPACK will required iOS version 16.4+ // We should consider add this in the future when we drop support for iOS 14 diff --git a/build.zig b/build.zig index dcfa3dd6b97643..9b58b74ca858b6 100644 --- a/build.zig +++ b/build.zig @@ -116,15 +116,10 @@ pub fn build(b: *std.build.Builder) !void { var make = try Maker.init(b); make.enable_lto = b.option(bool, "lto", "Enable LTO optimization, (default: false)") orelse false; - if (b.option(bool, "k-quants", "Enable K-quants, (default: true)") orelse true) { - try make.addFlag("-DGGML_USE_K_QUANTS"); - const k_quants = make.obj("k_quants", "k_quants.c"); - try make.objs.append(k_quants); - } - const ggml = make.obj("ggml", "ggml.c"); const ggml_alloc = make.obj("ggml-alloc", "ggml-alloc.c"); const ggml_backend = make.obj("ggml-backend", "ggml-backend.c"); + const ggml_quants = make.obj("ggml-quants", "ggml-quants.c"); const llama = make.obj("llama", "llama.cpp"); const common = make.obj("common", "common/common.cpp"); const console = make.obj("console", "common/console.cpp"); @@ -133,14 +128,14 @@ pub fn build(b: *std.build.Builder) !void { const train = make.obj("train", "common/train.cpp"); const clip = make.obj("clip", "examples/llava/clip.cpp"); - _ = make.exe("main", "examples/main/main.cpp", &.{ ggml, ggml_alloc, ggml_backend, llama, common, sampling, console, grammar_parser }); - _ = make.exe("quantize", "examples/quantize/quantize.cpp", &.{ ggml, ggml_alloc, ggml_backend, llama, common }); - _ = make.exe("perplexity", "examples/perplexity/perplexity.cpp", &.{ ggml, ggml_alloc, ggml_backend, llama, common }); - _ = make.exe("embedding", "examples/embedding/embedding.cpp", &.{ ggml, ggml_alloc, ggml_backend, llama, common }); - _ = make.exe("finetune", "examples/finetune/finetune.cpp", &.{ ggml, ggml_alloc, ggml_backend, llama, common, train }); - _ = make.exe("train-text-from-scratch", "examples/train-text-from-scratch/train-text-from-scratch.cpp", &.{ ggml, ggml_alloc, ggml_backend, llama, common, train }); + _ = make.exe("main", "examples/main/main.cpp", &.{ ggml, ggml_alloc, ggml_backend, ggml_quants, llama, common, sampling, console, grammar_parser }); + _ = make.exe("quantize", "examples/quantize/quantize.cpp", &.{ ggml, ggml_alloc, ggml_backend, ggml_quants, llama, common }); + _ = make.exe("perplexity", "examples/perplexity/perplexity.cpp", &.{ ggml, ggml_alloc, ggml_backend, ggml_quants, llama, common }); + _ = make.exe("embedding", "examples/embedding/embedding.cpp", &.{ ggml, ggml_alloc, ggml_backend, ggml_quants, llama, common }); + _ = make.exe("finetune", "examples/finetune/finetune.cpp", &.{ ggml, ggml_alloc, ggml_backend, ggml_quants, llama, common, train }); + _ = make.exe("train-text-from-scratch", "examples/train-text-from-scratch/train-text-from-scratch.cpp", &.{ ggml, ggml_alloc, ggml_backend, ggml_quants, llama, common, train }); - const server = make.exe("server", "examples/server/server.cpp", &.{ ggml, ggml_alloc, ggml_backend, llama, common, sampling, grammar_parser, clip }); + const server = make.exe("server", "examples/server/server.cpp", &.{ ggml, ggml_alloc, ggml_backend, ggml_quants, llama, common, sampling, grammar_parser, clip }); if (server.target.isWindows()) { server.linkSystemLibrary("ws2_32"); } diff --git a/examples/quantize/quantize.cpp b/examples/quantize/quantize.cpp index c7dd0d894634cb..be0b2fe1eb963f 100644 --- a/examples/quantize/quantize.cpp +++ b/examples/quantize/quantize.cpp @@ -18,7 +18,6 @@ static const std::vector QUANT_OPTIONS = { { "Q4_1", LLAMA_FTYPE_MOSTLY_Q4_1, " 3.90G, +0.1585 ppl @ LLaMA-v1-7B", }, { "Q5_0", LLAMA_FTYPE_MOSTLY_Q5_0, " 4.33G, +0.0683 ppl @ LLaMA-v1-7B", }, { "Q5_1", LLAMA_FTYPE_MOSTLY_Q5_1, " 4.70G, +0.0349 ppl @ LLaMA-v1-7B", }, -#ifdef GGML_USE_K_QUANTS { "Q2_K", LLAMA_FTYPE_MOSTLY_Q2_K, " 2.63G, +0.6717 ppl @ LLaMA-v1-7B", }, { "Q3_K", LLAMA_FTYPE_MOSTLY_Q3_K_M, "alias for Q3_K_M" }, { "Q3_K_S", LLAMA_FTYPE_MOSTLY_Q3_K_S, " 2.75G, +0.5551 ppl @ LLaMA-v1-7B", }, @@ -31,7 +30,6 @@ static const std::vector QUANT_OPTIONS = { { "Q5_K_S", LLAMA_FTYPE_MOSTLY_Q5_K_S, " 4.33G, +0.0400 ppl @ LLaMA-v1-7B", }, { "Q5_K_M", LLAMA_FTYPE_MOSTLY_Q5_K_M, " 4.45G, +0.0122 ppl @ LLaMA-v1-7B", }, { "Q6_K", LLAMA_FTYPE_MOSTLY_Q6_K, " 5.15G, -0.0008 ppl @ LLaMA-v1-7B", }, -#endif { "Q8_0", LLAMA_FTYPE_MOSTLY_Q8_0, " 6.70G, +0.0004 ppl @ LLaMA-v1-7B", }, { "F16", LLAMA_FTYPE_MOSTLY_F16, "13.00G @ 7B", }, { "F32", LLAMA_FTYPE_ALL_F32, "26.00G @ 7B", }, @@ -70,13 +68,14 @@ static bool try_parse_ftype(const std::string & ftype_str_in, llama_ftype & ftyp } // usage: -// ./quantize [--allow-requantize] [--leave-output-tensor] models/llama/ggml-model.gguf [models/llama/ggml-model-quant.gguf] type [nthreads] +// ./quantize [--allow-requantize] [--leave-output-tensor] [--pure] models/llama/ggml-model.gguf [models/llama/ggml-model-quant.gguf] type [nthreads] // [[noreturn]] static void usage(const char * executable) { - printf("usage: %s [--help] [--allow-requantize] [--leave-output-tensor] model-f32.gguf [model-quant.gguf] type [nthreads]\n\n", executable); + printf("usage: %s [--help] [--allow-requantize] [--leave-output-tensor] [--pure] model-f32.gguf [model-quant.gguf] type [nthreads]\n\n", executable); printf(" --allow-requantize: Allows requantizing tensors that have already been quantized. Warning: This can severely reduce quality compared to quantizing from 16bit or 32bit\n"); printf(" --leave-output-tensor: Will leave output.weight un(re)quantized. Increases model size but may also increase quality, especially when requantizing\n"); + printf(" --pure: Disable k-quant mixtures and quantize all tensors to the same type\n"); printf("\nAllowed quantization types:\n"); for (auto & it : QUANT_OPTIONS) { if (it.name != "COPY") { @@ -103,6 +102,8 @@ int main(int argc, char ** argv) { params.quantize_output_tensor = false; } else if (strcmp(argv[arg_idx], "--allow-requantize") == 0) { params.allow_requantize = true; + } else if (strcmp(argv[arg_idx], "--pure") == 0) { + params.pure = true; } else { usage(argv[0]); } diff --git a/k_quants.c b/ggml-quants.c similarity index 71% rename from k_quants.c rename to ggml-quants.c index 801941fbee075a..fd4ee1be64befa 100644 --- a/k_quants.c +++ b/ggml-quants.c @@ -1,9 +1,10 @@ -#include "k_quants.h" +#include "ggml-quants.h" #include "ggml.h" #include #include #include +#include #ifdef __ARM_NEON @@ -65,1251 +66,3478 @@ inline static int32_t vaddvq_s32(int32x4_t v) { #define MM256_SET_M128I(a, b) _mm256_insertf128_si256(_mm256_castsi128_si256(b), (a), 1) -// -// 2-6 bit quantization in super-blocks -// +#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) || defined(__SSSE3__) +// multiply int8_t, add results pairwise twice +static inline __m128i mul_sum_i8_pairs(const __m128i x, const __m128i y) { + // Get absolute values of x vectors + const __m128i ax = _mm_sign_epi8(x, x); + // Sign the values of the y vectors + const __m128i sy = _mm_sign_epi8(y, x); + // Perform multiplication and create 16-bit values + const __m128i dot = _mm_maddubs_epi16(ax, sy); + const __m128i ones = _mm_set1_epi16(1); + return _mm_madd_epi16(ones, dot); +} -// -// ===================== Helper functions -// -static inline int nearest_int(float fval) { - assert(fval <= 4194303.f); - float val = fval + 12582912.f; - int i; memcpy(&i, &val, sizeof(int)); - return (i & 0x007fffff) - 0x00400000; +#if __AVX__ || __AVX2__ || __AVX512F__ +// horizontally add 8 floats +static inline float hsum_float_8(const __m256 x) { + __m128 res = _mm256_extractf128_ps(x, 1); + res = _mm_add_ps(res, _mm256_castps256_ps128(x)); + res = _mm_add_ps(res, _mm_movehl_ps(res, res)); + res = _mm_add_ss(res, _mm_movehdup_ps(res)); + return _mm_cvtss_f32(res); } -static float make_qx_quants(int n, int nmax, const float * restrict x, int8_t * restrict L, int rmse_type) { - float max = 0; - float amax = 0; - for (int i = 0; i < n; ++i) { - float ax = fabsf(x[i]); - if (ax > amax) { amax = ax; max = x[i]; } - } - if (amax < 1e-30f) { // all zero - for (int i = 0; i < n; ++i) { - L[i] = 0; +// horizontally add 8 int32_t +static inline int hsum_i32_8(const __m256i a) { + const __m128i sum128 = _mm_add_epi32(_mm256_castsi256_si128(a), _mm256_extractf128_si256(a, 1)); + const __m128i hi64 = _mm_unpackhi_epi64(sum128, sum128); + const __m128i sum64 = _mm_add_epi32(hi64, sum128); + const __m128i hi32 = _mm_shuffle_epi32(sum64, _MM_SHUFFLE(2, 3, 0, 1)); + return _mm_cvtsi128_si32(_mm_add_epi32(sum64, hi32)); +} + +// horizontally add 4 int32_t +static inline int hsum_i32_4(const __m128i a) { + const __m128i hi64 = _mm_unpackhi_epi64(a, a); + const __m128i sum64 = _mm_add_epi32(hi64, a); + const __m128i hi32 = _mm_shuffle_epi32(sum64, _MM_SHUFFLE(2, 3, 0, 1)); + return _mm_cvtsi128_si32(_mm_add_epi32(sum64, hi32)); +} + +#if defined(__AVX2__) || defined(__AVX512F__) +// spread 32 bits to 32 bytes { 0x00, 0xFF } +static inline __m256i bytes_from_bits_32(const uint8_t * x) { + uint32_t x32; + memcpy(&x32, x, sizeof(uint32_t)); + const __m256i shuf_mask = _mm256_set_epi64x( + 0x0303030303030303, 0x0202020202020202, + 0x0101010101010101, 0x0000000000000000); + __m256i bytes = _mm256_shuffle_epi8(_mm256_set1_epi32(x32), shuf_mask); + const __m256i bit_mask = _mm256_set1_epi64x(0x7fbfdfeff7fbfdfe); + bytes = _mm256_or_si256(bytes, bit_mask); + return _mm256_cmpeq_epi8(bytes, _mm256_set1_epi64x(-1)); +} + +// Unpack 32 4-bit fields into 32 bytes +// The output vector contains 32 bytes, each one in [ 0 .. 15 ] interval +static inline __m256i bytes_from_nibbles_32(const uint8_t * rsi) +{ + const __m128i tmp = _mm_loadu_si128((const __m128i *)rsi); + const __m256i bytes = MM256_SET_M128I(_mm_srli_epi16(tmp, 4), tmp); + const __m256i lowMask = _mm256_set1_epi8( 0xF ); + return _mm256_and_si256(lowMask, bytes); +} + +// add int16_t pairwise and return as float vector +static inline __m256 sum_i16_pairs_float(const __m256i x) { + const __m256i ones = _mm256_set1_epi16(1); + const __m256i summed_pairs = _mm256_madd_epi16(ones, x); + return _mm256_cvtepi32_ps(summed_pairs); +} + +static inline __m256 mul_sum_us8_pairs_float(const __m256i ax, const __m256i sy) { +#if __AVXVNNI__ + const __m256i zero = _mm256_setzero_si256(); + const __m256i summed_pairs = _mm256_dpbusd_epi32(zero, ax, sy); + return _mm256_cvtepi32_ps(summed_pairs); +#else + // Perform multiplication and create 16-bit values + const __m256i dot = _mm256_maddubs_epi16(ax, sy); + return sum_i16_pairs_float(dot); +#endif +} + +// multiply int8_t, add results pairwise twice and return as float vector +static inline __m256 mul_sum_i8_pairs_float(const __m256i x, const __m256i y) { +#if __AVXVNNIINT8__ + const __m256i zero = _mm256_setzero_si256(); + const __m256i summed_pairs = _mm256_dpbssd_epi32(zero, x, y); + return _mm256_cvtepi32_ps(summed_pairs); +#else + // Get absolute values of x vectors + const __m256i ax = _mm256_sign_epi8(x, x); + // Sign the values of the y vectors + const __m256i sy = _mm256_sign_epi8(y, x); + return mul_sum_us8_pairs_float(ax, sy); +#endif +} + +static inline __m128i packNibbles( __m256i bytes ) +{ + // Move bits within 16-bit lanes from 0000_abcd_0000_efgh into 0000_0000_abcd_efgh +#if __AVX512F__ + const __m256i bytes_srli_4 = _mm256_srli_epi16(bytes, 4); // 0000_0000_abcd_0000 + bytes = _mm256_or_si256(bytes, bytes_srli_4); // 0000_abcd_abcd_efgh + return _mm256_cvtepi16_epi8(bytes); // abcd_efgh +#else + const __m256i lowByte = _mm256_set1_epi16( 0xFF ); + __m256i high = _mm256_andnot_si256( lowByte, bytes ); + __m256i low = _mm256_and_si256( lowByte, bytes ); + high = _mm256_srli_epi16( high, 4 ); + bytes = _mm256_or_si256( low, high ); + + // Compress uint16_t lanes into bytes + __m128i r0 = _mm256_castsi256_si128( bytes ); + __m128i r1 = _mm256_extracti128_si256( bytes, 1 ); + return _mm_packus_epi16( r0, r1 ); +#endif +} +#elif defined(__AVX__) +// spread 32 bits to 32 bytes { 0x00, 0xFF } +static inline __m256i bytes_from_bits_32(const uint8_t * x) { + uint32_t x32; + memcpy(&x32, x, sizeof(uint32_t)); + const __m128i shuf_maskl = _mm_set_epi64x(0x0101010101010101, 0x0000000000000000); + const __m128i shuf_maskh = _mm_set_epi64x(0x0303030303030303, 0x0202020202020202); + __m128i bytesl = _mm_shuffle_epi8(_mm_set1_epi32(x32), shuf_maskl); + __m128i bytesh = _mm_shuffle_epi8(_mm_set1_epi32(x32), shuf_maskh); + const __m128i bit_mask = _mm_set1_epi64x(0x7fbfdfeff7fbfdfe); + bytesl = _mm_or_si128(bytesl, bit_mask); + bytesh = _mm_or_si128(bytesh, bit_mask); + bytesl = _mm_cmpeq_epi8(bytesl, _mm_set1_epi64x(-1)); + bytesh = _mm_cmpeq_epi8(bytesh, _mm_set1_epi64x(-1)); + return MM256_SET_M128I(bytesh, bytesl); +} + +// Unpack 32 4-bit fields into 32 bytes +// The output vector contains 32 bytes, each one in [ 0 .. 15 ] interval +static inline __m256i bytes_from_nibbles_32(const uint8_t * rsi) +{ + // Load 16 bytes from memory + __m128i tmpl = _mm_loadu_si128((const __m128i *)rsi); + __m128i tmph = _mm_srli_epi16(tmpl, 4); + const __m128i lowMask = _mm_set1_epi8(0xF); + tmpl = _mm_and_si128(lowMask, tmpl); + tmph = _mm_and_si128(lowMask, tmph); + return MM256_SET_M128I(tmph, tmpl); +} + +// add int16_t pairwise and return as float vector +static inline __m256 sum_i16_pairs_float(const __m128i xh, const __m128i xl) { + const __m128i ones = _mm_set1_epi16(1); + const __m128i summed_pairsl = _mm_madd_epi16(ones, xl); + const __m128i summed_pairsh = _mm_madd_epi16(ones, xh); + const __m256i summed_pairs = MM256_SET_M128I(summed_pairsh, summed_pairsl); + return _mm256_cvtepi32_ps(summed_pairs); +} + +static inline __m256 mul_sum_us8_pairs_float(const __m256i ax, const __m256i sy) { + const __m128i axl = _mm256_castsi256_si128(ax); + const __m128i axh = _mm256_extractf128_si256(ax, 1); + const __m128i syl = _mm256_castsi256_si128(sy); + const __m128i syh = _mm256_extractf128_si256(sy, 1); + // Perform multiplication and create 16-bit values + const __m128i dotl = _mm_maddubs_epi16(axl, syl); + const __m128i doth = _mm_maddubs_epi16(axh, syh); + return sum_i16_pairs_float(doth, dotl); +} + +// multiply int8_t, add results pairwise twice and return as float vector +static inline __m256 mul_sum_i8_pairs_float(const __m256i x, const __m256i y) { + const __m128i xl = _mm256_castsi256_si128(x); + const __m128i xh = _mm256_extractf128_si256(x, 1); + const __m128i yl = _mm256_castsi256_si128(y); + const __m128i yh = _mm256_extractf128_si256(y, 1); + // Get absolute values of x vectors + const __m128i axl = _mm_sign_epi8(xl, xl); + const __m128i axh = _mm_sign_epi8(xh, xh); + // Sign the values of the y vectors + const __m128i syl = _mm_sign_epi8(yl, xl); + const __m128i syh = _mm_sign_epi8(yh, xh); + // Perform multiplication and create 16-bit values + const __m128i dotl = _mm_maddubs_epi16(axl, syl); + const __m128i doth = _mm_maddubs_epi16(axh, syh); + return sum_i16_pairs_float(doth, dotl); +} + +static inline __m128i packNibbles( __m128i bytes1, __m128i bytes2 ) +{ + // Move bits within 16-bit lanes from 0000_abcd_0000_efgh into 0000_0000_abcd_efgh + const __m128i lowByte = _mm_set1_epi16( 0xFF ); + __m128i high = _mm_andnot_si128( lowByte, bytes1 ); + __m128i low = _mm_and_si128( lowByte, bytes1 ); + high = _mm_srli_epi16( high, 4 ); + bytes1 = _mm_or_si128( low, high ); + high = _mm_andnot_si128( lowByte, bytes2 ); + low = _mm_and_si128( lowByte, bytes2 ); + high = _mm_srli_epi16( high, 4 ); + bytes2 = _mm_or_si128( low, high ); + + return _mm_packus_epi16( bytes1, bytes2); +} +#endif +#elif defined(__SSSE3__) +// horizontally add 4x4 floats +static inline float hsum_float_4x4(const __m128 a, const __m128 b, const __m128 c, const __m128 d) { + __m128 res_0 =_mm_hadd_ps(a, b); + __m128 res_1 =_mm_hadd_ps(c, d); + __m128 res =_mm_hadd_ps(res_0, res_1); + res =_mm_hadd_ps(res, res); + res =_mm_hadd_ps(res, res); + + return _mm_cvtss_f32(res); +} +#endif // __AVX__ || __AVX2__ || __AVX512F__ +#endif // defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) || defined(__SSSE3__) + +#if defined(__ARM_NEON) + +#if !defined(__aarch64__) + +inline static int32_t vaddvq_s32(int32x4_t v) { + return vgetq_lane_s32(v, 0) + vgetq_lane_s32(v, 1) + vgetq_lane_s32(v, 2) + vgetq_lane_s32(v, 3); +} + +inline static float vaddvq_f32(float32x4_t v) { + return vgetq_lane_f32(v, 0) + vgetq_lane_f32(v, 1) + vgetq_lane_f32(v, 2) + vgetq_lane_f32(v, 3); +} + +inline static float vmaxvq_f32(float32x4_t v) { + return + MAX(MAX(vgetq_lane_f32(v, 0), vgetq_lane_f32(v, 1)), + MAX(vgetq_lane_f32(v, 2), vgetq_lane_f32(v, 3))); +} + +inline static int32x4_t vcvtnq_s32_f32(float32x4_t v) { + int32x4_t res; + + res[0] = roundf(vgetq_lane_f32(v, 0)); + res[1] = roundf(vgetq_lane_f32(v, 1)); + res[2] = roundf(vgetq_lane_f32(v, 2)); + res[3] = roundf(vgetq_lane_f32(v, 3)); + + return res; +} + +#endif +#endif + +#if defined(__ARM_NEON) || defined(__wasm_simd128__) +#define B1(c,s,n) 0x ## n ## c , 0x ## n ## s +#define B2(c,s,n) B1(c,s,n ## c), B1(c,s,n ## s) +#define B3(c,s,n) B2(c,s,n ## c), B2(c,s,n ## s) +#define B4(c,s,n) B3(c,s,n ## c), B3(c,s,n ## s) +#define B5(c,s,n) B4(c,s,n ## c), B4(c,s,n ## s) +#define B6(c,s,n) B5(c,s,n ## c), B5(c,s,n ## s) +#define B7(c,s,n) B6(c,s,n ## c), B6(c,s,n ## s) +#define B8(c,s ) B7(c,s, c), B7(c,s, s) + +// precomputed tables for expanding 8bits to 8 bytes: +static const uint64_t table_b2b_0[1 << 8] = { B8(00, 10) }; // ( b) << 4 +static const uint64_t table_b2b_1[1 << 8] = { B8(10, 00) }; // (!b) << 4 +#endif + +// reference implementation for deterministic creation of model files +void quantize_row_q4_0_reference(const float * restrict x, block_q4_0 * restrict y, int k) { + static const int qk = QK4_0; + + assert(k % qk == 0); + + const int nb = k / qk; + + for (int i = 0; i < nb; i++) { + float amax = 0.0f; // absolute max + float max = 0.0f; + + for (int j = 0; j < qk; j++) { + const float v = x[i*qk + j]; + if (amax < fabsf(v)) { + amax = fabsf(v); + max = v; + } } - return 0.f; - } - float iscale = -nmax / max; - if (rmse_type == 0) { - for (int i = 0; i < n; ++i) { - int l = nearest_int(iscale * x[i]); - L[i] = nmax + MAX(-nmax, MIN(nmax-1, l)); + + const float d = max / -8; + const float id = d ? 1.0f/d : 0.0f; + + y[i].d = ggml_fp32_to_fp16(d); + + for (int j = 0; j < qk/2; ++j) { + const float x0 = x[i*qk + 0 + j]*id; + const float x1 = x[i*qk + qk/2 + j]*id; + + const uint8_t xi0 = MIN(15, (int8_t)(x0 + 8.5f)); + const uint8_t xi1 = MIN(15, (int8_t)(x1 + 8.5f)); + + y[i].qs[j] = xi0; + y[i].qs[j] |= xi1 << 4; } - return 1/iscale; - } - bool return_early = false; - if (rmse_type < 0) { - rmse_type = -rmse_type; - return_early = true; - } - int weight_type = rmse_type%2; - float sumlx = 0; - float suml2 = 0; - for (int i = 0; i < n; ++i) { - int l = nearest_int(iscale * x[i]); - l = MAX(-nmax, MIN(nmax-1, l)); - L[i] = l + nmax; - float w = weight_type == 1 ? x[i] * x[i] : 1; - sumlx += w*x[i]*l; - suml2 += w*l*l; } - float scale = sumlx/suml2; - if (return_early) return suml2 > 0 ? 0.5f*(scale + 1/iscale) : 1/iscale; - float best = scale * sumlx; - for (int is = -9; is <= 9; ++is) { - if (is == 0) { - continue; +} + +void quantize_row_q4_0(const float * restrict x, void * restrict y, int k) { + quantize_row_q4_0_reference(x, y, k); +} + +void quantize_row_q4_1_reference(const float * restrict x, block_q4_1 * restrict y, int k) { + const int qk = QK4_1; + + assert(k % qk == 0); + + const int nb = k / qk; + + for (int i = 0; i < nb; i++) { + float min = FLT_MAX; + float max = -FLT_MAX; + + for (int j = 0; j < qk; j++) { + const float v = x[i*qk + j]; + + if (v < min) min = v; + if (v > max) max = v; } - iscale = -(nmax + 0.1f*is) / max; - sumlx = suml2 = 0; - for (int i = 0; i < n; ++i) { - int l = nearest_int(iscale * x[i]); - l = MAX(-nmax, MIN(nmax-1, l)); - float w = weight_type == 1 ? x[i] * x[i] : 1; - sumlx += w*x[i]*l; - suml2 += w*l*l; + + const float d = (max - min) / ((1 << 4) - 1); + const float id = d ? 1.0f/d : 0.0f; + + y[i].d = ggml_fp32_to_fp16(d); + y[i].m = ggml_fp32_to_fp16(min); + + for (int j = 0; j < qk/2; ++j) { + const float x0 = (x[i*qk + 0 + j] - min)*id; + const float x1 = (x[i*qk + qk/2 + j] - min)*id; + + const uint8_t xi0 = MIN(15, (int8_t)(x0 + 0.5f)); + const uint8_t xi1 = MIN(15, (int8_t)(x1 + 0.5f)); + + y[i].qs[j] = xi0; + y[i].qs[j] |= xi1 << 4; } - if (suml2 > 0 && sumlx*sumlx > best*suml2) { - for (int i = 0; i < n; ++i) { - int l = nearest_int(iscale * x[i]); - L[i] = nmax + MAX(-nmax, MIN(nmax-1, l)); + } +} + +void quantize_row_q4_1(const float * restrict x, void * restrict y, int k) { + quantize_row_q4_1_reference(x, y, k); +} + +void quantize_row_q5_0_reference(const float * restrict x, block_q5_0 * restrict y, int k) { + static const int qk = QK5_0; + + assert(k % qk == 0); + + const int nb = k / qk; + + for (int i = 0; i < nb; i++) { + float amax = 0.0f; // absolute max + float max = 0.0f; + + for (int j = 0; j < qk; j++) { + const float v = x[i*qk + j]; + if (amax < fabsf(v)) { + amax = fabsf(v); + max = v; } - scale = sumlx/suml2; best = scale*sumlx; } + + const float d = max / -16; + const float id = d ? 1.0f/d : 0.0f; + + y[i].d = ggml_fp32_to_fp16(d); + + uint32_t qh = 0; + + for (int j = 0; j < qk/2; ++j) { + const float x0 = x[i*qk + 0 + j]*id; + const float x1 = x[i*qk + qk/2 + j]*id; + + const uint8_t xi0 = MIN(31, (int8_t)(x0 + 16.5f)); + const uint8_t xi1 = MIN(31, (int8_t)(x1 + 16.5f)); + + y[i].qs[j] = (xi0 & 0x0F) | ((xi1 & 0x0F) << 4); + + // get the 5-th bit and store it in qh at the right position + qh |= ((xi0 & 0x10u) >> 4) << (j + 0); + qh |= ((xi1 & 0x10u) >> 4) << (j + qk/2); + } + + memcpy(&y[i].qh, &qh, sizeof(qh)); } - return scale; } -static float make_q3_quants(int n, int nmax, const float * restrict x, int8_t * restrict L, bool do_rmse) { - float max = 0; - float amax = 0; - for (int i = 0; i < n; ++i) { - float ax = fabsf(x[i]); - if (ax > amax) { amax = ax; max = x[i]; } +void quantize_row_q5_0(const float * restrict x, void * restrict y, int k) { + quantize_row_q5_0_reference(x, y, k); +} + +void quantize_row_q5_1_reference(const float * restrict x, block_q5_1 * restrict y, int k) { + const int qk = QK5_1; + + assert(k % qk == 0); + + const int nb = k / qk; + + for (int i = 0; i < nb; i++) { + float min = FLT_MAX; + float max = -FLT_MAX; + + for (int j = 0; j < qk; j++) { + const float v = x[i*qk + j]; + + if (v < min) min = v; + if (v > max) max = v; + } + + const float d = (max - min) / ((1 << 5) - 1); + const float id = d ? 1.0f/d : 0.0f; + + y[i].d = ggml_fp32_to_fp16(d); + y[i].m = ggml_fp32_to_fp16(min); + + uint32_t qh = 0; + + for (int j = 0; j < qk/2; ++j) { + const float x0 = (x[i*qk + 0 + j] - min)*id; + const float x1 = (x[i*qk + qk/2 + j] - min)*id; + + const uint8_t xi0 = (uint8_t)(x0 + 0.5f); + const uint8_t xi1 = (uint8_t)(x1 + 0.5f); + + y[i].qs[j] = (xi0 & 0x0F) | ((xi1 & 0x0F) << 4); + + // get the 5-th bit and store it in qh at the right position + qh |= ((xi0 & 0x10u) >> 4) << (j + 0); + qh |= ((xi1 & 0x10u) >> 4) << (j + qk/2); + } + + memcpy(&y[i].qh, &qh, sizeof(y[i].qh)); } - if (!amax) { // all zero - for (int i = 0; i < n; ++i) { L[i] = 0; } - return 0.f; +} + +void quantize_row_q5_1(const float * restrict x, void * restrict y, int k) { + quantize_row_q5_1_reference(x, y, k); +} + +// reference implementation for deterministic creation of model files +void quantize_row_q8_0_reference(const float * restrict x, block_q8_0 * restrict y, int k) { + assert(k % QK8_0 == 0); + const int nb = k / QK8_0; + + for (int i = 0; i < nb; i++) { + float amax = 0.0f; // absolute max + + for (int j = 0; j < QK8_0; j++) { + const float v = x[i*QK8_0 + j]; + amax = MAX(amax, fabsf(v)); + } + + const float d = amax / ((1 << 7) - 1); + const float id = d ? 1.0f/d : 0.0f; + + y[i].d = ggml_fp32_to_fp16(d); + + for (int j = 0; j < QK8_0; ++j) { + const float x0 = x[i*QK8_0 + j]*id; + + y[i].qs[j] = roundf(x0); + } } - float iscale = -nmax / max; - if (do_rmse) { - float sumlx = 0; - float suml2 = 0; - for (int i = 0; i < n; ++i) { - int l = nearest_int(iscale * x[i]); - l = MAX(-nmax, MIN(nmax-1, l)); - L[i] = l; - float w = x[i]*x[i]; - sumlx += w*x[i]*l; - suml2 += w*l*l; +} + +void quantize_row_q8_0(const float * restrict x, void * restrict vy, int k) { + assert(QK8_0 == 32); + assert(k % QK8_0 == 0); + const int nb = k / QK8_0; + + block_q8_0 * restrict y = vy; + +#if defined(__ARM_NEON) + for (int i = 0; i < nb; i++) { + float32x4_t srcv [8]; + float32x4_t asrcv[8]; + float32x4_t amaxv[8]; + + for (int j = 0; j < 8; j++) srcv[j] = vld1q_f32(x + i*32 + 4*j); + for (int j = 0; j < 8; j++) asrcv[j] = vabsq_f32(srcv[j]); + + for (int j = 0; j < 4; j++) amaxv[2*j] = vmaxq_f32(asrcv[2*j], asrcv[2*j+1]); + for (int j = 0; j < 2; j++) amaxv[4*j] = vmaxq_f32(amaxv[4*j], amaxv[4*j+2]); + for (int j = 0; j < 1; j++) amaxv[8*j] = vmaxq_f32(amaxv[8*j], amaxv[8*j+4]); + + const float amax = vmaxvq_f32(amaxv[0]); + + const float d = amax / ((1 << 7) - 1); + const float id = d ? 1.0f/d : 0.0f; + + y[i].d = ggml_fp32_to_fp16(d); + + for (int j = 0; j < 8; j++) { + const float32x4_t v = vmulq_n_f32(srcv[j], id); + const int32x4_t vi = vcvtnq_s32_f32(v); + + y[i].qs[4*j + 0] = vgetq_lane_s32(vi, 0); + y[i].qs[4*j + 1] = vgetq_lane_s32(vi, 1); + y[i].qs[4*j + 2] = vgetq_lane_s32(vi, 2); + y[i].qs[4*j + 3] = vgetq_lane_s32(vi, 3); } - for (int itry = 0; itry < 5; ++itry) { - int n_changed = 0; - for (int i = 0; i < n; ++i) { - float w = x[i]*x[i]; - float slx = sumlx - w*x[i]*L[i]; - if (slx > 0) { - float sl2 = suml2 - w*L[i]*L[i]; - int new_l = nearest_int(x[i] * sl2 / slx); - new_l = MAX(-nmax, MIN(nmax-1, new_l)); - if (new_l != L[i]) { - slx += w*x[i]*new_l; - sl2 += w*new_l*new_l; - if (sl2 > 0 && slx*slx*suml2 > sumlx*sumlx*sl2) { - L[i] = new_l; sumlx = slx; suml2 = sl2; - ++n_changed; - } - } - } + } +#elif defined(__wasm_simd128__) + for (int i = 0; i < nb; i++) { + v128_t srcv [8]; + v128_t asrcv[8]; + v128_t amaxv[8]; + + for (int j = 0; j < 8; j++) srcv[j] = wasm_v128_load(x + i*32 + 4*j); + for (int j = 0; j < 8; j++) asrcv[j] = wasm_f32x4_abs(srcv[j]); + + for (int j = 0; j < 4; j++) amaxv[2*j] = wasm_f32x4_max(asrcv[2*j], asrcv[2*j+1]); + for (int j = 0; j < 2; j++) amaxv[4*j] = wasm_f32x4_max(amaxv[4*j], amaxv[4*j+2]); + for (int j = 0; j < 1; j++) amaxv[8*j] = wasm_f32x4_max(amaxv[8*j], amaxv[8*j+4]); + + const float amax = MAX(MAX(wasm_f32x4_extract_lane(amaxv[0], 0), + wasm_f32x4_extract_lane(amaxv[0], 1)), + MAX(wasm_f32x4_extract_lane(amaxv[0], 2), + wasm_f32x4_extract_lane(amaxv[0], 3))); + + const float d = amax / ((1 << 7) - 1); + const float id = d ? 1.0f/d : 0.0f; + + y[i].d = ggml_fp32_to_fp16(d); + + for (int j = 0; j < 8; j++) { + const v128_t v = wasm_f32x4_mul(srcv[j], wasm_f32x4_splat(id)); + const v128_t vi = wasm_i32x4_trunc_sat_f32x4(v); + + y[i].qs[4*j + 0] = wasm_i32x4_extract_lane(vi, 0); + y[i].qs[4*j + 1] = wasm_i32x4_extract_lane(vi, 1); + y[i].qs[4*j + 2] = wasm_i32x4_extract_lane(vi, 2); + y[i].qs[4*j + 3] = wasm_i32x4_extract_lane(vi, 3); + } + } +#elif defined(__AVX2__) || defined(__AVX__) + for (int i = 0; i < nb; i++) { + // Load elements into 4 AVX vectors + __m256 v0 = _mm256_loadu_ps( x ); + __m256 v1 = _mm256_loadu_ps( x + 8 ); + __m256 v2 = _mm256_loadu_ps( x + 16 ); + __m256 v3 = _mm256_loadu_ps( x + 24 ); + x += 32; + + // Compute max(abs(e)) for the block + const __m256 signBit = _mm256_set1_ps( -0.0f ); + __m256 maxAbs = _mm256_andnot_ps( signBit, v0 ); + maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v1 ) ); + maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v2 ) ); + maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v3 ) ); + + __m128 max4 = _mm_max_ps( _mm256_extractf128_ps( maxAbs, 1 ), _mm256_castps256_ps128( maxAbs ) ); + max4 = _mm_max_ps( max4, _mm_movehl_ps( max4, max4 ) ); + max4 = _mm_max_ss( max4, _mm_movehdup_ps( max4 ) ); + const float maxScalar = _mm_cvtss_f32( max4 ); + + // Quantize these floats + const float d = maxScalar / 127.f; + y[i].d = ggml_fp32_to_fp16(d); + const float id = ( maxScalar != 0.0f ) ? 127.f / maxScalar : 0.0f; + const __m256 mul = _mm256_set1_ps( id ); + + // Apply the multiplier + v0 = _mm256_mul_ps( v0, mul ); + v1 = _mm256_mul_ps( v1, mul ); + v2 = _mm256_mul_ps( v2, mul ); + v3 = _mm256_mul_ps( v3, mul ); + + // Round to nearest integer + v0 = _mm256_round_ps( v0, _MM_ROUND_NEAREST ); + v1 = _mm256_round_ps( v1, _MM_ROUND_NEAREST ); + v2 = _mm256_round_ps( v2, _MM_ROUND_NEAREST ); + v3 = _mm256_round_ps( v3, _MM_ROUND_NEAREST ); + + // Convert floats to integers + __m256i i0 = _mm256_cvtps_epi32( v0 ); + __m256i i1 = _mm256_cvtps_epi32( v1 ); + __m256i i2 = _mm256_cvtps_epi32( v2 ); + __m256i i3 = _mm256_cvtps_epi32( v3 ); + +#if defined(__AVX2__) + // Convert int32 to int16 + i0 = _mm256_packs_epi32( i0, i1 ); // 0, 1, 2, 3, 8, 9, 10, 11, 4, 5, 6, 7, 12, 13, 14, 15 + i2 = _mm256_packs_epi32( i2, i3 ); // 16, 17, 18, 19, 24, 25, 26, 27, 20, 21, 22, 23, 28, 29, 30, 31 + // Convert int16 to int8 + i0 = _mm256_packs_epi16( i0, i2 ); // 0, 1, 2, 3, 8, 9, 10, 11, 16, 17, 18, 19, 24, 25, 26, 27, 4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, 28, 29, 30, 31 + + // We got our precious signed bytes, but the order is now wrong + // These AVX2 pack instructions process 16-byte pieces independently + // The following instruction is fixing the order + const __m256i perm = _mm256_setr_epi32( 0, 4, 1, 5, 2, 6, 3, 7 ); + i0 = _mm256_permutevar8x32_epi32( i0, perm ); + + _mm256_storeu_si256((__m256i *)y[i].qs, i0); +#else + // Since we don't have in AVX some necessary functions, + // we split the registers in half and call AVX2 analogs from SSE + __m128i ni0 = _mm256_castsi256_si128( i0 ); + __m128i ni1 = _mm256_extractf128_si256( i0, 1); + __m128i ni2 = _mm256_castsi256_si128( i1 ); + __m128i ni3 = _mm256_extractf128_si256( i1, 1); + __m128i ni4 = _mm256_castsi256_si128( i2 ); + __m128i ni5 = _mm256_extractf128_si256( i2, 1); + __m128i ni6 = _mm256_castsi256_si128( i3 ); + __m128i ni7 = _mm256_extractf128_si256( i3, 1); + + // Convert int32 to int16 + ni0 = _mm_packs_epi32( ni0, ni1 ); + ni2 = _mm_packs_epi32( ni2, ni3 ); + ni4 = _mm_packs_epi32( ni4, ni5 ); + ni6 = _mm_packs_epi32( ni6, ni7 ); + // Convert int16 to int8 + ni0 = _mm_packs_epi16( ni0, ni2 ); + ni4 = _mm_packs_epi16( ni4, ni6 ); + + _mm_storeu_si128((__m128i *)(y[i].qs + 0), ni0); + _mm_storeu_si128((__m128i *)(y[i].qs + 16), ni4); +#endif + } +#elif defined(__riscv_v_intrinsic) + + size_t vl = __riscv_vsetvl_e32m4(QK8_0); + + for (int i = 0; i < nb; i++) { + // load elements + vfloat32m4_t v_x = __riscv_vle32_v_f32m4(x+i*QK8_0, vl); + + vfloat32m4_t vfabs = __riscv_vfabs_v_f32m4(v_x, vl); + vfloat32m1_t tmp = __riscv_vfmv_v_f_f32m1(0.0f, vl); + vfloat32m1_t vmax = __riscv_vfredmax_vs_f32m4_f32m1(vfabs, tmp, vl); + float amax = __riscv_vfmv_f_s_f32m1_f32(vmax); + + const float d = amax / ((1 << 7) - 1); + const float id = d ? 1.0f/d : 0.0f; + + y[i].d = ggml_fp32_to_fp16(d); + + vfloat32m4_t x0 = __riscv_vfmul_vf_f32m4(v_x, id, vl); + + // convert to integer + vint16m2_t vi = __riscv_vfncvt_x_f_w_i16m2(x0, vl); + vint8m1_t vs = __riscv_vncvt_x_x_w_i8m1(vi, vl); + + // store result + __riscv_vse8_v_i8m1(y[i].qs , vs, vl); + } +#else + // scalar + quantize_row_q8_0_reference(x, y, k); +#endif +} + +// reference implementation for deterministic creation of model files +void quantize_row_q8_1_reference(const float * restrict x, block_q8_1 * restrict y, int k) { + assert(QK8_1 == 32); + assert(k % QK8_1 == 0); + const int nb = k / QK8_1; + + for (int i = 0; i < nb; i++) { + float amax = 0.0f; // absolute max + + for (int j = 0; j < QK8_1; j++) { + const float v = x[i*QK8_1 + j]; + amax = MAX(amax, fabsf(v)); + } + + const float d = amax / ((1 << 7) - 1); + const float id = d ? 1.0f/d : 0.0f; + + y[i].d = d; + + int sum = 0; + + for (int j = 0; j < QK8_1/2; ++j) { + const float v0 = x[i*QK8_1 + j]*id; + const float v1 = x[i*QK8_1 + QK8_1/2 + j]*id; + + y[i].qs[ j] = roundf(v0); + y[i].qs[QK8_1/2 + j] = roundf(v1); + + sum += y[i].qs[ j]; + sum += y[i].qs[QK8_1/2 + j]; + } + + y[i].s = sum*d; + } +} + +void quantize_row_q8_1(const float * restrict x, void * restrict vy, int k) { + assert(k % QK8_1 == 0); + const int nb = k / QK8_1; + + block_q8_1 * restrict y = vy; + +#if defined(__ARM_NEON) + for (int i = 0; i < nb; i++) { + float32x4_t srcv [8]; + float32x4_t asrcv[8]; + float32x4_t amaxv[8]; + + for (int j = 0; j < 8; j++) srcv[j] = vld1q_f32(x + i*32 + 4*j); + for (int j = 0; j < 8; j++) asrcv[j] = vabsq_f32(srcv[j]); + + for (int j = 0; j < 4; j++) amaxv[2*j] = vmaxq_f32(asrcv[2*j], asrcv[2*j+1]); + for (int j = 0; j < 2; j++) amaxv[4*j] = vmaxq_f32(amaxv[4*j], amaxv[4*j+2]); + for (int j = 0; j < 1; j++) amaxv[8*j] = vmaxq_f32(amaxv[8*j], amaxv[8*j+4]); + + const float amax = vmaxvq_f32(amaxv[0]); + + const float d = amax / ((1 << 7) - 1); + const float id = d ? 1.0f/d : 0.0f; + + y[i].d = d; + + int32x4_t accv = vdupq_n_s32(0); + + for (int j = 0; j < 8; j++) { + const float32x4_t v = vmulq_n_f32(srcv[j], id); + const int32x4_t vi = vcvtnq_s32_f32(v); + + y[i].qs[4*j + 0] = vgetq_lane_s32(vi, 0); + y[i].qs[4*j + 1] = vgetq_lane_s32(vi, 1); + y[i].qs[4*j + 2] = vgetq_lane_s32(vi, 2); + y[i].qs[4*j + 3] = vgetq_lane_s32(vi, 3); + + accv = vaddq_s32(accv, vi); + } + + y[i].s = d * vaddvq_s32(accv); + } +#elif defined(__wasm_simd128__) + for (int i = 0; i < nb; i++) { + v128_t srcv [8]; + v128_t asrcv[8]; + v128_t amaxv[8]; + + for (int j = 0; j < 8; j++) srcv[j] = wasm_v128_load(x + i*32 + 4*j); + for (int j = 0; j < 8; j++) asrcv[j] = wasm_f32x4_abs(srcv[j]); + + for (int j = 0; j < 4; j++) amaxv[2*j] = wasm_f32x4_max(asrcv[2*j], asrcv[2*j+1]); + for (int j = 0; j < 2; j++) amaxv[4*j] = wasm_f32x4_max(amaxv[4*j], amaxv[4*j+2]); + for (int j = 0; j < 1; j++) amaxv[8*j] = wasm_f32x4_max(amaxv[8*j], amaxv[8*j+4]); + + const float amax = MAX(MAX(wasm_f32x4_extract_lane(amaxv[0], 0), + wasm_f32x4_extract_lane(amaxv[0], 1)), + MAX(wasm_f32x4_extract_lane(amaxv[0], 2), + wasm_f32x4_extract_lane(amaxv[0], 3))); + + const float d = amax / ((1 << 7) - 1); + const float id = d ? 1.0f/d : 0.0f; + + y[i].d = d; + + v128_t accv = wasm_i32x4_splat(0); + + for (int j = 0; j < 8; j++) { + const v128_t v = wasm_f32x4_mul(srcv[j], wasm_f32x4_splat(id)); + const v128_t vi = wasm_i32x4_trunc_sat_f32x4(v); + + y[i].qs[4*j + 0] = wasm_i32x4_extract_lane(vi, 0); + y[i].qs[4*j + 1] = wasm_i32x4_extract_lane(vi, 1); + y[i].qs[4*j + 2] = wasm_i32x4_extract_lane(vi, 2); + y[i].qs[4*j + 3] = wasm_i32x4_extract_lane(vi, 3); + + accv = wasm_i32x4_add(accv, vi); + } + + y[i].s = d * (wasm_i32x4_extract_lane(accv, 0) + + wasm_i32x4_extract_lane(accv, 1) + + wasm_i32x4_extract_lane(accv, 2) + + wasm_i32x4_extract_lane(accv, 3)); + } +#elif defined(__AVX2__) || defined(__AVX__) + for (int i = 0; i < nb; i++) { + // Load elements into 4 AVX vectors + __m256 v0 = _mm256_loadu_ps( x ); + __m256 v1 = _mm256_loadu_ps( x + 8 ); + __m256 v2 = _mm256_loadu_ps( x + 16 ); + __m256 v3 = _mm256_loadu_ps( x + 24 ); + x += 32; + + // Compute max(abs(e)) for the block + const __m256 signBit = _mm256_set1_ps( -0.0f ); + __m256 maxAbs = _mm256_andnot_ps( signBit, v0 ); + maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v1 ) ); + maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v2 ) ); + maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v3 ) ); + + __m128 max4 = _mm_max_ps( _mm256_extractf128_ps( maxAbs, 1 ), _mm256_castps256_ps128( maxAbs ) ); + max4 = _mm_max_ps( max4, _mm_movehl_ps( max4, max4 ) ); + max4 = _mm_max_ss( max4, _mm_movehdup_ps( max4 ) ); + const float maxScalar = _mm_cvtss_f32( max4 ); + + // Quantize these floats + const float d = maxScalar / 127.f; + y[i].d = d; + const float id = ( maxScalar != 0.0f ) ? 127.f / maxScalar : 0.0f; + const __m256 mul = _mm256_set1_ps( id ); + + // Apply the multiplier + v0 = _mm256_mul_ps( v0, mul ); + v1 = _mm256_mul_ps( v1, mul ); + v2 = _mm256_mul_ps( v2, mul ); + v3 = _mm256_mul_ps( v3, mul ); + + // Round to nearest integer + v0 = _mm256_round_ps( v0, _MM_ROUND_NEAREST ); + v1 = _mm256_round_ps( v1, _MM_ROUND_NEAREST ); + v2 = _mm256_round_ps( v2, _MM_ROUND_NEAREST ); + v3 = _mm256_round_ps( v3, _MM_ROUND_NEAREST ); + + // Convert floats to integers + __m256i i0 = _mm256_cvtps_epi32( v0 ); + __m256i i1 = _mm256_cvtps_epi32( v1 ); + __m256i i2 = _mm256_cvtps_epi32( v2 ); + __m256i i3 = _mm256_cvtps_epi32( v3 ); + +#if defined(__AVX2__) + // Compute the sum of the quants and set y[i].s + y[i].s = d * hsum_i32_8(_mm256_add_epi32(_mm256_add_epi32(i0, i1), _mm256_add_epi32(i2, i3))); + + // Convert int32 to int16 + i0 = _mm256_packs_epi32( i0, i1 ); // 0, 1, 2, 3, 8, 9, 10, 11, 4, 5, 6, 7, 12, 13, 14, 15 + i2 = _mm256_packs_epi32( i2, i3 ); // 16, 17, 18, 19, 24, 25, 26, 27, 20, 21, 22, 23, 28, 29, 30, 31 + // Convert int16 to int8 + i0 = _mm256_packs_epi16( i0, i2 ); // 0, 1, 2, 3, 8, 9, 10, 11, 16, 17, 18, 19, 24, 25, 26, 27, 4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, 28, 29, 30, 31 + + // We got our precious signed bytes, but the order is now wrong + // These AVX2 pack instructions process 16-byte pieces independently + // The following instruction is fixing the order + const __m256i perm = _mm256_setr_epi32( 0, 4, 1, 5, 2, 6, 3, 7 ); + i0 = _mm256_permutevar8x32_epi32( i0, perm ); + + _mm256_storeu_si256((__m256i *)y[i].qs, i0); +#else + // Since we don't have in AVX some necessary functions, + // we split the registers in half and call AVX2 analogs from SSE + __m128i ni0 = _mm256_castsi256_si128( i0 ); + __m128i ni1 = _mm256_extractf128_si256( i0, 1); + __m128i ni2 = _mm256_castsi256_si128( i1 ); + __m128i ni3 = _mm256_extractf128_si256( i1, 1); + __m128i ni4 = _mm256_castsi256_si128( i2 ); + __m128i ni5 = _mm256_extractf128_si256( i2, 1); + __m128i ni6 = _mm256_castsi256_si128( i3 ); + __m128i ni7 = _mm256_extractf128_si256( i3, 1); + + // Compute the sum of the quants and set y[i].s + const __m128i s0 = _mm_add_epi32(_mm_add_epi32(ni0, ni1), _mm_add_epi32(ni2, ni3)); + const __m128i s1 = _mm_add_epi32(_mm_add_epi32(ni4, ni5), _mm_add_epi32(ni6, ni7)); + y[i].s = d * hsum_i32_4(_mm_add_epi32(s0, s1)); + + // Convert int32 to int16 + ni0 = _mm_packs_epi32( ni0, ni1 ); + ni2 = _mm_packs_epi32( ni2, ni3 ); + ni4 = _mm_packs_epi32( ni4, ni5 ); + ni6 = _mm_packs_epi32( ni6, ni7 ); + // Convert int16 to int8 + ni0 = _mm_packs_epi16( ni0, ni2 ); + ni4 = _mm_packs_epi16( ni4, ni6 ); + + _mm_storeu_si128((__m128i *)(y[i].qs + 0), ni0); + _mm_storeu_si128((__m128i *)(y[i].qs + 16), ni4); +#endif + } +#elif defined(__riscv_v_intrinsic) + + size_t vl = __riscv_vsetvl_e32m4(QK8_1); + + for (int i = 0; i < nb; i++) { + // load elements + vfloat32m4_t v_x = __riscv_vle32_v_f32m4(x+i*QK8_1, vl); + + vfloat32m4_t vfabs = __riscv_vfabs_v_f32m4(v_x, vl); + vfloat32m1_t tmp = __riscv_vfmv_v_f_f32m1(0.0, vl); + vfloat32m1_t vmax = __riscv_vfredmax_vs_f32m4_f32m1(vfabs, tmp, vl); + float amax = __riscv_vfmv_f_s_f32m1_f32(vmax); + + const float d = amax / ((1 << 7) - 1); + const float id = d ? 1.0f/d : 0.0f; + + y[i].d = d; + + vfloat32m4_t x0 = __riscv_vfmul_vf_f32m4(v_x, id, vl); + + // convert to integer + vint16m2_t vi = __riscv_vfncvt_x_f_w_i16m2(x0, vl); + vint8m1_t vs = __riscv_vncvt_x_x_w_i8m1(vi, vl); + + // store result + __riscv_vse8_v_i8m1(y[i].qs , vs, vl); + + // compute sum for y[i].s + vint16m1_t tmp2 = __riscv_vmv_v_x_i16m1(0, vl); + vint16m1_t vwrs = __riscv_vwredsum_vs_i8m1_i16m1(vs, tmp2, vl); + + // set y[i].s + int sum = __riscv_vmv_x_s_i16m1_i16(vwrs); + y[i].s = sum*d; + } +#else + // scalar + quantize_row_q8_1_reference(x, y, k); +#endif +} + +void dequantize_row_q4_0(const block_q4_0 * restrict x, float * restrict y, int k) { + static const int qk = QK4_0; + + assert(k % qk == 0); + + const int nb = k / qk; + + for (int i = 0; i < nb; i++) { + const float d = ggml_fp16_to_fp32(x[i].d); + + for (int j = 0; j < qk/2; ++j) { + const int x0 = (x[i].qs[j] & 0x0F) - 8; + const int x1 = (x[i].qs[j] >> 4) - 8; + + y[i*qk + j + 0 ] = x0*d; + y[i*qk + j + qk/2] = x1*d; + } + } +} + +void dequantize_row_q4_1(const block_q4_1 * restrict x, float * restrict y, int k) { + static const int qk = QK4_1; + + assert(k % qk == 0); + + const int nb = k / qk; + + for (int i = 0; i < nb; i++) { + const float d = ggml_fp16_to_fp32(x[i].d); + const float m = ggml_fp16_to_fp32(x[i].m); + + for (int j = 0; j < qk/2; ++j) { + const int x0 = (x[i].qs[j] & 0x0F); + const int x1 = (x[i].qs[j] >> 4); + + y[i*qk + j + 0 ] = x0*d + m; + y[i*qk + j + qk/2] = x1*d + m; + } + } +} + +void dequantize_row_q5_0(const block_q5_0 * restrict x, float * restrict y, int k) { + static const int qk = QK5_0; + + assert(k % qk == 0); + + const int nb = k / qk; + + for (int i = 0; i < nb; i++) { + const float d = ggml_fp16_to_fp32(x[i].d); + + uint32_t qh; + memcpy(&qh, x[i].qh, sizeof(qh)); + + for (int j = 0; j < qk/2; ++j) { + const uint8_t xh_0 = ((qh >> (j + 0)) << 4) & 0x10; + const uint8_t xh_1 = ((qh >> (j + 12)) ) & 0x10; + + const int32_t x0 = ((x[i].qs[j] & 0x0F) | xh_0) - 16; + const int32_t x1 = ((x[i].qs[j] >> 4) | xh_1) - 16; + + y[i*qk + j + 0 ] = x0*d; + y[i*qk + j + qk/2] = x1*d; + } + } +} + +void dequantize_row_q5_1(const block_q5_1 * restrict x, float * restrict y, int k) { + static const int qk = QK5_1; + + assert(k % qk == 0); + + const int nb = k / qk; + + for (int i = 0; i < nb; i++) { + const float d = ggml_fp16_to_fp32(x[i].d); + const float m = ggml_fp16_to_fp32(x[i].m); + + uint32_t qh; + memcpy(&qh, x[i].qh, sizeof(qh)); + + for (int j = 0; j < qk/2; ++j) { + const uint8_t xh_0 = ((qh >> (j + 0)) << 4) & 0x10; + const uint8_t xh_1 = ((qh >> (j + 12)) ) & 0x10; + + const int x0 = (x[i].qs[j] & 0x0F) | xh_0; + const int x1 = (x[i].qs[j] >> 4) | xh_1; + + y[i*qk + j + 0 ] = x0*d + m; + y[i*qk + j + qk/2] = x1*d + m; + } + } +} + +void dequantize_row_q8_0(const block_q8_0 * restrict x, float * restrict y, int k) { + static const int qk = QK8_0; + + assert(k % qk == 0); + + const int nb = k / qk; + + for (int i = 0; i < nb; i++) { + const float d = ggml_fp16_to_fp32(x[i].d); + + for (int j = 0; j < qk; ++j) { + y[i*qk + j] = x[i].qs[j]*d; + } + } +} + +// +// 2-6 bit quantization in super-blocks +// + +// +// ===================== Helper functions +// +static inline int nearest_int(float fval) { + assert(fval <= 4194303.f); + float val = fval + 12582912.f; + int i; memcpy(&i, &val, sizeof(int)); + return (i & 0x007fffff) - 0x00400000; +} + +static float make_qx_quants(int n, int nmax, const float * restrict x, int8_t * restrict L, int rmse_type) { + float max = 0; + float amax = 0; + for (int i = 0; i < n; ++i) { + float ax = fabsf(x[i]); + if (ax > amax) { amax = ax; max = x[i]; } + } + if (amax < 1e-30f) { // all zero + for (int i = 0; i < n; ++i) { + L[i] = 0; + } + return 0.f; + } + float iscale = -nmax / max; + if (rmse_type == 0) { + for (int i = 0; i < n; ++i) { + int l = nearest_int(iscale * x[i]); + L[i] = nmax + MAX(-nmax, MIN(nmax-1, l)); + } + return 1/iscale; + } + bool return_early = false; + if (rmse_type < 0) { + rmse_type = -rmse_type; + return_early = true; + } + int weight_type = rmse_type%2; + float sumlx = 0; + float suml2 = 0; + for (int i = 0; i < n; ++i) { + int l = nearest_int(iscale * x[i]); + l = MAX(-nmax, MIN(nmax-1, l)); + L[i] = l + nmax; + float w = weight_type == 1 ? x[i] * x[i] : 1; + sumlx += w*x[i]*l; + suml2 += w*l*l; + } + float scale = sumlx/suml2; + if (return_early) return suml2 > 0 ? 0.5f*(scale + 1/iscale) : 1/iscale; + float best = scale * sumlx; + for (int is = -9; is <= 9; ++is) { + if (is == 0) { + continue; + } + iscale = -(nmax + 0.1f*is) / max; + sumlx = suml2 = 0; + for (int i = 0; i < n; ++i) { + int l = nearest_int(iscale * x[i]); + l = MAX(-nmax, MIN(nmax-1, l)); + float w = weight_type == 1 ? x[i] * x[i] : 1; + sumlx += w*x[i]*l; + suml2 += w*l*l; + } + if (suml2 > 0 && sumlx*sumlx > best*suml2) { + for (int i = 0; i < n; ++i) { + int l = nearest_int(iscale * x[i]); + L[i] = nmax + MAX(-nmax, MIN(nmax-1, l)); + } + scale = sumlx/suml2; best = scale*sumlx; + } + } + return scale; +} + +static float make_q3_quants(int n, int nmax, const float * restrict x, int8_t * restrict L, bool do_rmse) { + float max = 0; + float amax = 0; + for (int i = 0; i < n; ++i) { + float ax = fabsf(x[i]); + if (ax > amax) { amax = ax; max = x[i]; } + } + if (!amax) { // all zero + for (int i = 0; i < n; ++i) { L[i] = 0; } + return 0.f; + } + float iscale = -nmax / max; + if (do_rmse) { + float sumlx = 0; + float suml2 = 0; + for (int i = 0; i < n; ++i) { + int l = nearest_int(iscale * x[i]); + l = MAX(-nmax, MIN(nmax-1, l)); + L[i] = l; + float w = x[i]*x[i]; + sumlx += w*x[i]*l; + suml2 += w*l*l; + } + for (int itry = 0; itry < 5; ++itry) { + int n_changed = 0; + for (int i = 0; i < n; ++i) { + float w = x[i]*x[i]; + float slx = sumlx - w*x[i]*L[i]; + if (slx > 0) { + float sl2 = suml2 - w*L[i]*L[i]; + int new_l = nearest_int(x[i] * sl2 / slx); + new_l = MAX(-nmax, MIN(nmax-1, new_l)); + if (new_l != L[i]) { + slx += w*x[i]*new_l; + sl2 += w*new_l*new_l; + if (sl2 > 0 && slx*slx*suml2 > sumlx*sumlx*sl2) { + L[i] = new_l; sumlx = slx; suml2 = sl2; + ++n_changed; + } + } + } + } + if (!n_changed) { + break; + } + } + for (int i = 0; i < n; ++i) { + L[i] += nmax; + } + return sumlx / suml2; + } + for (int i = 0; i < n; ++i) { + int l = nearest_int(iscale * x[i]); + l = MAX(-nmax, MIN(nmax-1, l)); + L[i] = l + nmax; + } + return 1/iscale; +} + +static float make_qkx1_quants(int n, int nmax, const float * restrict x, uint8_t * restrict L, float * restrict the_min, + int ntry, float alpha) { + float min = x[0]; + float max = x[0]; + for (int i = 1; i < n; ++i) { + if (x[i] < min) min = x[i]; + if (x[i] > max) max = x[i]; + } + if (max == min) { + for (int i = 0; i < n; ++i) L[i] = 0; + *the_min = 0; + return 0.f; + } + if (min > 0) min = 0; + float iscale = nmax/(max - min); + float scale = 1/iscale; + for (int itry = 0; itry < ntry; ++itry) { + float sumlx = 0; int suml2 = 0; + bool did_change = false; + for (int i = 0; i < n; ++i) { + int l = nearest_int(iscale*(x[i] - min)); + l = MAX(0, MIN(nmax, l)); + if (l != L[i]) { + L[i] = l; + did_change = true; + } + sumlx += (x[i] - min)*l; + suml2 += l*l; + } + scale = sumlx/suml2; + float sum = 0; + for (int i = 0; i < n; ++i) { + sum += x[i] - scale*L[i]; + } + min = alpha*min + (1 - alpha)*sum/n; + if (min > 0) min = 0; + iscale = 1/scale; + if (!did_change) break; + } + *the_min = -min; + return scale; +} + +static float make_qkx2_quants(int n, int nmax, const float * restrict x, const float * restrict weights, + uint8_t * restrict L, float * restrict the_min, uint8_t * restrict Laux, + float rmin, float rdelta, int nstep, bool use_mad) { + float min = x[0]; + float max = x[0]; + float sum_w = weights[0]; + float sum_x = sum_w * x[0]; + for (int i = 1; i < n; ++i) { + if (x[i] < min) min = x[i]; + if (x[i] > max) max = x[i]; + float w = weights[i]; + sum_w += w; + sum_x += w * x[i]; + } + if (min > 0) min = 0; + if (max == min) { + for (int i = 0; i < n; ++i) L[i] = 0; + *the_min = -min; + return 0.f; + } + float iscale = nmax/(max - min); + float scale = 1/iscale; + float best_mad = 0; + for (int i = 0; i < n; ++i) { + int l = nearest_int(iscale*(x[i] - min)); + L[i] = MAX(0, MIN(nmax, l)); + float diff = scale * L[i] + min - x[i]; + diff = use_mad ? fabsf(diff) : diff * diff; + float w = weights[i]; + best_mad += w * diff; + } + if (nstep < 1) { + *the_min = -min; + return scale; + } + for (int is = 0; is <= nstep; ++is) { + iscale = (rmin + rdelta*is + nmax)/(max - min); + float sum_l = 0, sum_l2 = 0, sum_xl = 0; + for (int i = 0; i < n; ++i) { + int l = nearest_int(iscale*(x[i] - min)); + l = MAX(0, MIN(nmax, l)); + Laux[i] = l; + float w = weights[i]; + sum_l += w*l; + sum_l2 += w*l*l; + sum_xl += w*l*x[i]; + } + float D = sum_w * sum_l2 - sum_l * sum_l; + if (D > 0) { + float this_scale = (sum_w * sum_xl - sum_x * sum_l)/D; + float this_min = (sum_l2 * sum_x - sum_l * sum_xl)/D; + if (this_min > 0) { + this_min = 0; + this_scale = sum_xl / sum_l2; + } + float mad = 0; + for (int i = 0; i < n; ++i) { + float diff = this_scale * Laux[i] + this_min - x[i]; + diff = use_mad ? fabsf(diff) : diff * diff; + float w = weights[i]; + mad += w * diff; + } + if (mad < best_mad) { + for (int i = 0; i < n; ++i) { + L[i] = Laux[i]; + } + best_mad = mad; + scale = this_scale; + min = this_min; + } + } + } + *the_min = -min; + return scale; +} + +#if QK_K == 256 +static inline void get_scale_min_k4(int j, const uint8_t * restrict q, uint8_t * restrict d, uint8_t * restrict m) { + if (j < 4) { + *d = q[j] & 63; *m = q[j + 4] & 63; + } else { + *d = (q[j+4] & 0xF) | ((q[j-4] >> 6) << 4); + *m = (q[j+4] >> 4) | ((q[j-0] >> 6) << 4); + } +} +#endif + +//========================- 2-bit (de)-quantization + +void quantize_row_q2_K_reference(const float * restrict x, block_q2_K * restrict y, int k) { + assert(k % QK_K == 0); + const int nb = k / QK_K; + + uint8_t L[QK_K]; + uint8_t Laux[16]; + float weights[16]; + float mins[QK_K/16]; + float scales[QK_K/16]; + + const float q4scale = 15.f; + + for (int i = 0; i < nb; i++) { + float max_scale = 0; // as we are deducting the min, scales are always positive + float max_min = 0; + for (int j = 0; j < QK_K/16; ++j) { + for (int l = 0; l < 16; ++l) weights[l] = fabsf(x[16*j + l]); + scales[j] = make_qkx2_quants(16, 3, x + 16*j, weights, L + 16*j, &mins[j], Laux, -0.5f, 0.1f, 15, true); + float scale = scales[j]; + if (scale > max_scale) { + max_scale = scale; + } + float min = mins[j]; + if (min > max_min) { + max_min = min; + } + } + + if (max_scale > 0) { + float iscale = q4scale/max_scale; + for (int j = 0; j < QK_K/16; ++j) { + int l = nearest_int(iscale*scales[j]); + y[i].scales[j] = l; + } + y[i].d = ggml_fp32_to_fp16(max_scale/q4scale); + } else { + for (int j = 0; j < QK_K/16; ++j) y[i].scales[j] = 0; + y[i].d = ggml_fp32_to_fp16(0.f); + } + if (max_min > 0) { + float iscale = q4scale/max_min; + for (int j = 0; j < QK_K/16; ++j) { + int l = nearest_int(iscale*mins[j]); + y[i].scales[j] |= (l << 4); + } + y[i].dmin = ggml_fp32_to_fp16(max_min/q4scale); + } else { + y[i].dmin = ggml_fp32_to_fp16(0.f); + } + for (int j = 0; j < QK_K/16; ++j) { + const float d = ggml_fp16_to_fp32(y[i].d) * (y[i].scales[j] & 0xF); + if (!d) continue; + const float dm = ggml_fp16_to_fp32(y[i].dmin) * (y[i].scales[j] >> 4); + for (int ii = 0; ii < 16; ++ii) { + int l = nearest_int((x[16*j + ii] + dm)/d); + l = MAX(0, MIN(3, l)); + L[16*j + ii] = l; + } + } + +#if QK_K == 256 + for (int j = 0; j < QK_K; j += 128) { + for (int l = 0; l < 32; ++l) { + y[i].qs[j/4 + l] = L[j + l] | (L[j + l + 32] << 2) | (L[j + l + 64] << 4) | (L[j + l + 96] << 6); + } + } +#else + for (int l = 0; l < 16; ++l) { + y[i].qs[l] = L[l] | (L[l + 16] << 2) | (L[l + 32] << 4) | (L[l + 48] << 6); + } +#endif + + x += QK_K; + + } +} + +void dequantize_row_q2_K(const block_q2_K * restrict x, float * restrict y, int k) { + assert(k % QK_K == 0); + const int nb = k / QK_K; + + for (int i = 0; i < nb; i++) { + + const float d = ggml_fp16_to_fp32(x[i].d); + const float min = ggml_fp16_to_fp32(x[i].dmin); + + const uint8_t * q = x[i].qs; + +#if QK_K == 256 + int is = 0; + float dl, ml; + for (int n = 0; n < QK_K; n += 128) { + int shift = 0; + for (int j = 0; j < 4; ++j) { + + uint8_t sc = x[i].scales[is++]; + dl = d * (sc & 0xF); ml = min * (sc >> 4); + for (int l = 0; l < 16; ++l) *y++ = dl * ((int8_t)((q[l] >> shift) & 3)) - ml; + + sc = x[i].scales[is++]; + dl = d * (sc & 0xF); ml = min * (sc >> 4); + for (int l = 0; l < 16; ++l) *y++ = dl * ((int8_t)((q[l+16] >> shift) & 3)) - ml; + + shift += 2; + } + q += 32; + } +#else + float dl1 = d * (x[i].scales[0] & 0xF), ml1 = min * (x[i].scales[0] >> 4); + float dl2 = d * (x[i].scales[1] & 0xF), ml2 = min * (x[i].scales[1] >> 4); + float dl3 = d * (x[i].scales[2] & 0xF), ml3 = min * (x[i].scales[2] >> 4); + float dl4 = d * (x[i].scales[3] & 0xF), ml4 = min * (x[i].scales[3] >> 4); + for (int l = 0; l < 16; ++l) { + y[l+ 0] = dl1 * ((int8_t)((q[l] >> 0) & 3)) - ml1; + y[l+16] = dl2 * ((int8_t)((q[l] >> 2) & 3)) - ml2; + y[l+32] = dl3 * ((int8_t)((q[l] >> 4) & 3)) - ml3; + y[l+48] = dl4 * ((int8_t)((q[l] >> 6) & 3)) - ml4; + } + y += QK_K; +#endif + } +} + +void quantize_row_q2_K(const float * restrict x, void * restrict vy, int k) { + quantize_row_q2_K_reference(x, vy, k); +} + +size_t ggml_quantize_q2_K(const float * restrict src, void * restrict dst, int n, int k, int64_t * restrict hist) { + (void)hist; // TODO: collect histograms + + for (int j = 0; j < n; j += k) { + block_q2_K * restrict y = (block_q2_K *)dst + j/QK_K; + quantize_row_q2_K_reference(src + j, y, k); + } + return (n/QK_K*sizeof(block_q2_K)); +} + +//========================= 3-bit (de)-quantization + +void quantize_row_q3_K_reference(const float * restrict x, block_q3_K * restrict y, int k) { + assert(k % QK_K == 0); + const int nb = k / QK_K; + + int8_t L[QK_K]; + float scales[QK_K / 16]; + + for (int i = 0; i < nb; i++) { + + float max_scale = 0; + float amax = 0; + for (int j = 0; j < QK_K/16; ++j) { + scales[j] = make_q3_quants(16, 4, x + 16*j, L + 16*j, true); + float scale = fabsf(scales[j]); + if (scale > amax) { + amax = scale; max_scale = scales[j]; + } + } + +#if QK_K == 256 + memset(y[i].scales, 0, 12); + if (max_scale) { + float iscale = -32.f/max_scale; + for (int j = 0; j < QK_K/16; ++j) { + int8_t l = nearest_int(iscale*scales[j]); + l = MAX(-32, MIN(31, l)) + 32; + if (j < 8) { + y[i].scales[j] = l & 0xF; + } else { + y[i].scales[j-8] |= ((l & 0xF) << 4); + } + l >>= 4; + y[i].scales[j%4 + 8] |= (l << (2*(j/4))); + } + y[i].d = ggml_fp32_to_fp16(1/iscale); + } else { + y[i].d = ggml_fp32_to_fp16(0.f); + } + + int8_t sc; + for (int j = 0; j < QK_K/16; ++j) { + sc = j < 8 ? y[i].scales[j] & 0xF : y[i].scales[j-8] >> 4; + sc = (sc | (((y[i].scales[8 + j%4] >> (2*(j/4))) & 3) << 4)) - 32; + float d = ggml_fp16_to_fp32(y[i].d) * sc; + if (!d) { + continue; + } + for (int ii = 0; ii < 16; ++ii) { + int l = nearest_int(x[16*j + ii]/d); + l = MAX(-4, MIN(3, l)); + L[16*j + ii] = l + 4; + } + } +#else + if (max_scale) { + float iscale = -8.f/max_scale; + for (int j = 0; j < QK_K/16; j+=2) { + int l1 = nearest_int(iscale*scales[j]); + l1 = 8 + MAX(-8, MIN(7, l1)); + int l2 = nearest_int(iscale*scales[j+1]); + l2 = 8 + MAX(-8, MIN(7, l2)); + y[i].scales[j/2] = l1 | (l2 << 4); + } + y[i].d = ggml_fp32_to_fp16(1/iscale); + } else { + for (int j = 0; j < QK_K/16; j+=2) { + y[i].scales[j/2] = 0; + } + y[i].d = ggml_fp32_to_fp16(0.f); + } + for (int j = 0; j < QK_K/16; ++j) { + int s = j%2 == 0 ? y[i].scales[j/2] & 0xF : y[i].scales[j/2] >> 4; + float d = ggml_fp16_to_fp32(y[i].d) * (s - 8); + if (!d) { + continue; + } + for (int ii = 0; ii < 16; ++ii) { + int l = nearest_int(x[16*j + ii]/d); + l = MAX(-4, MIN(3, l)); + L[16*j + ii] = l + 4; + } + } +#endif + + memset(y[i].hmask, 0, QK_K/8); + // We put the high-bit for the 1st 8 quants into bit 0, the next 8 into bit 1, etc. + int m = 0; + uint8_t hm = 1; + for (int j = 0; j < QK_K; ++j) { + if (L[j] > 3) { + y[i].hmask[m] |= hm; + L[j] -= 4; + } + if (++m == QK_K/8) { + m = 0; hm <<= 1; + } + } +#if QK_K == 256 + for (int j = 0; j < QK_K; j += 128) { + for (int l = 0; l < 32; ++l) { + y[i].qs[j/4 + l] = L[j + l] | (L[j + l + 32] << 2) | (L[j + l + 64] << 4) | (L[j + l + 96] << 6); + } + } +#else + for (int l = 0; l < 16; ++l) { + y[i].qs[l] = L[l] | (L[l + 16] << 2) | (L[l + 32] << 4) | (L[l + 48] << 6); + } +#endif + + x += QK_K; + } +} + +#if QK_K == 256 +void dequantize_row_q3_K(const block_q3_K * restrict x, float * restrict y, int k) { + assert(k % QK_K == 0); + const int nb = k / QK_K; + + const uint32_t kmask1 = 0x03030303; + const uint32_t kmask2 = 0x0f0f0f0f; + + uint32_t aux[4]; + const int8_t * scales = (const int8_t*)aux; + + for (int i = 0; i < nb; i++) { + + const float d_all = ggml_fp16_to_fp32(x[i].d); + + const uint8_t * restrict q = x[i].qs; + const uint8_t * restrict hm = x[i].hmask; + uint8_t m = 1; + + memcpy(aux, x[i].scales, 12); + uint32_t tmp = aux[2]; + aux[2] = ((aux[0] >> 4) & kmask2) | (((tmp >> 4) & kmask1) << 4); + aux[3] = ((aux[1] >> 4) & kmask2) | (((tmp >> 6) & kmask1) << 4); + aux[0] = (aux[0] & kmask2) | (((tmp >> 0) & kmask1) << 4); + aux[1] = (aux[1] & kmask2) | (((tmp >> 2) & kmask1) << 4); + + int is = 0; + float dl; + for (int n = 0; n < QK_K; n += 128) { + int shift = 0; + for (int j = 0; j < 4; ++j) { + + dl = d_all * (scales[is++] - 32); + for (int l = 0; l < 16; ++l) { + *y++ = dl * ((int8_t)((q[l+ 0] >> shift) & 3) - ((hm[l+ 0] & m) ? 0 : 4)); + } + + dl = d_all * (scales[is++] - 32); + for (int l = 0; l < 16; ++l) { + *y++ = dl * ((int8_t)((q[l+16] >> shift) & 3) - ((hm[l+16] & m) ? 0 : 4)); + } + + shift += 2; + m <<= 1; + } + q += 32; + } + + } +} +#else +void dequantize_row_q3_K(const block_q3_K * restrict x, float * restrict y, int k) { + assert(k % QK_K == 0); + assert(QK_K == 64); + const int nb = k / QK_K; + + for (int i = 0; i < nb; i++) { + + const float d_all = ggml_fp16_to_fp32(x[i].d); + + const uint8_t * restrict q = x[i].qs; + const uint8_t * restrict hm = x[i].hmask; + + const float d1 = d_all * ((x[i].scales[0] & 0xF) - 8); + const float d2 = d_all * ((x[i].scales[0] >> 4) - 8); + const float d3 = d_all * ((x[i].scales[1] & 0xF) - 8); + const float d4 = d_all * ((x[i].scales[1] >> 4) - 8); + + for (int l=0; l<8; ++l) { + uint8_t h = hm[l]; + y[l+ 0] = d1 * ((int8_t)((q[l+0] >> 0) & 3) - ((h & 0x01) ? 0 : 4)); + y[l+ 8] = d1 * ((int8_t)((q[l+8] >> 0) & 3) - ((h & 0x02) ? 0 : 4)); + y[l+16] = d2 * ((int8_t)((q[l+0] >> 2) & 3) - ((h & 0x04) ? 0 : 4)); + y[l+24] = d2 * ((int8_t)((q[l+8] >> 2) & 3) - ((h & 0x08) ? 0 : 4)); + y[l+32] = d3 * ((int8_t)((q[l+0] >> 4) & 3) - ((h & 0x10) ? 0 : 4)); + y[l+40] = d3 * ((int8_t)((q[l+8] >> 4) & 3) - ((h & 0x20) ? 0 : 4)); + y[l+48] = d4 * ((int8_t)((q[l+0] >> 6) & 3) - ((h & 0x40) ? 0 : 4)); + y[l+56] = d4 * ((int8_t)((q[l+8] >> 6) & 3) - ((h & 0x80) ? 0 : 4)); + } + y += QK_K; + } +} +#endif + +void quantize_row_q3_K(const float * restrict x, void * restrict vy, int k) { + quantize_row_q3_K_reference(x, vy, k); +} + +size_t ggml_quantize_q3_K(const float * restrict src, void * restrict dst, int n, int k, int64_t * restrict hist) { + (void)hist; // TODO: collect histograms + + for (int j = 0; j < n; j += k) { + block_q3_K * restrict y = (block_q3_K *)dst + j/QK_K; + quantize_row_q3_K_reference(src + j, y, k); + } + return (n/QK_K*sizeof(block_q3_K)); +} + +// ====================== 4-bit (de)-quantization + +void quantize_row_q4_K_reference(const float * restrict x, block_q4_K * restrict y, int k) { + assert(k % QK_K == 0); + const int nb = k / QK_K; + + uint8_t L[QK_K]; + uint8_t Laux[32]; + float weights[32]; + float mins[QK_K/32]; + float scales[QK_K/32]; + + for (int i = 0; i < nb; i++) { + + float max_scale = 0; // as we are deducting the min, scales are always positive + float max_min = 0; + for (int j = 0; j < QK_K/32; ++j) { + //scales[j] = make_qkx1_quants(32, 15, x + 32*j, L + 32*j, &mins[j], 9, 0.5f); + float sum_x2 = 0; + for (int l = 0; l < 32; ++l) sum_x2 += x[32*j + l] * x[32*j + l]; + float av_x = sqrtf(sum_x2/32); + for (int l = 0; l < 32; ++l) weights[l] = av_x + fabsf(x[32*j + l]); + scales[j] = make_qkx2_quants(32, 15, x + 32*j, weights, L + 32*j, &mins[j], Laux, -1.f, 0.1f, 20, false); + float scale = scales[j]; + if (scale > max_scale) { + max_scale = scale; + } + float min = mins[j]; + if (min > max_min) { + max_min = min; + } + } + +#if QK_K == 256 + float inv_scale = max_scale > 0 ? 63.f/max_scale : 0.f; + float inv_min = max_min > 0 ? 63.f/max_min : 0.f; + for (int j = 0; j < QK_K/32; ++j) { + uint8_t ls = nearest_int(inv_scale*scales[j]); + uint8_t lm = nearest_int(inv_min*mins[j]); + ls = MIN(63, ls); + lm = MIN(63, lm); + if (j < 4) { + y[i].scales[j] = ls; + y[i].scales[j+4] = lm; + } else { + y[i].scales[j+4] = (ls & 0xF) | ((lm & 0xF) << 4); + y[i].scales[j-4] |= ((ls >> 4) << 6); + y[i].scales[j-0] |= ((lm >> 4) << 6); + } + } + y[i].d = ggml_fp32_to_fp16(max_scale/63.f); + y[i].dmin = ggml_fp32_to_fp16(max_min/63.f); + + uint8_t sc, m; + for (int j = 0; j < QK_K/32; ++j) { + get_scale_min_k4(j, y[i].scales, &sc, &m); + const float d = ggml_fp16_to_fp32(y[i].d) * sc; + if (!d) continue; + const float dm = ggml_fp16_to_fp32(y[i].dmin) * m; + for (int ii = 0; ii < 32; ++ii) { + int l = nearest_int((x[32*j + ii] + dm)/d); + l = MAX(0, MIN(15, l)); + L[32*j + ii] = l; + } + } +#else + const float s_factor = 15.f; + float inv_scale = max_scale > 0 ? s_factor/max_scale : 0.f; + float inv_min = max_min > 0 ? s_factor/max_min : 0.f; + int d1 = nearest_int(inv_scale*scales[0]); + int m1 = nearest_int(inv_min*mins[0]); + int d2 = nearest_int(inv_scale*scales[1]); + int m2 = nearest_int(inv_min*mins[1]); + y[i].scales[0] = d1 | (m1 << 4); + y[i].scales[1] = d2 | (m2 << 4); + y[i].d[0] = ggml_fp32_to_fp16(max_scale/s_factor); + y[i].d[1] = ggml_fp32_to_fp16(max_min/s_factor); + + float sumlx = 0; + int suml2 = 0; + for (int j = 0; j < QK_K/32; ++j) { + const uint8_t sd = y[i].scales[j] & 0xF; + const uint8_t sm = y[i].scales[j] >> 4; + const float d = ggml_fp16_to_fp32(y[i].d[0]) * sd; + if (!d) continue; + const float m = ggml_fp16_to_fp32(y[i].d[1]) * sm; + for (int ii = 0; ii < 32; ++ii) { + int l = nearest_int((x[32*j + ii] + m)/d); + l = MAX(0, MIN(15, l)); + L[32*j + ii] = l; + sumlx += (x[32*j + ii] + m)*l*sd; + suml2 += l*l*sd*sd; + } + } + if (suml2) { + y[i].d[0] = ggml_fp32_to_fp16(sumlx/suml2); + } +#endif + uint8_t * q = y[i].qs; + for (int j = 0; j < QK_K; j += 64) { + for (int l = 0; l < 32; ++l) q[l] = L[j + l] | (L[j + l + 32] << 4); + q += 32; + } + + x += QK_K; + + } +} + +void dequantize_row_q4_K(const block_q4_K * restrict x, float * restrict y, int k) { + assert(k % QK_K == 0); + const int nb = k / QK_K; + + for (int i = 0; i < nb; i++) { + + const uint8_t * q = x[i].qs; + +#if QK_K == 256 + + const float d = ggml_fp16_to_fp32(x[i].d); + const float min = ggml_fp16_to_fp32(x[i].dmin); + + int is = 0; + uint8_t sc, m; + for (int j = 0; j < QK_K; j += 64) { + get_scale_min_k4(is + 0, x[i].scales, &sc, &m); + const float d1 = d * sc; const float m1 = min * m; + get_scale_min_k4(is + 1, x[i].scales, &sc, &m); + const float d2 = d * sc; const float m2 = min * m; + for (int l = 0; l < 32; ++l) *y++ = d1 * (q[l] & 0xF) - m1; + for (int l = 0; l < 32; ++l) *y++ = d2 * (q[l] >> 4) - m2; + q += 32; is += 2; + } +#else + const float dall = ggml_fp16_to_fp32(x[i].d[0]); + const float mall = ggml_fp16_to_fp32(x[i].d[1]); + const float d1 = dall * (x[i].scales[0] & 0xF), m1 = mall * (x[i].scales[0] >> 4); + const float d2 = dall * (x[i].scales[1] & 0xF), m2 = mall * (x[i].scales[1] >> 4); + for (int l = 0; l < 32; ++l) { + y[l+ 0] = d1 * (q[l] & 0xF) - m1; + y[l+32] = d2 * (q[l] >> 4) - m2; + } + y += QK_K; +#endif + + } +} + +void quantize_row_q4_K(const float * restrict x, void * restrict vy, int k) { + assert(k % QK_K == 0); + block_q4_K * restrict y = vy; + quantize_row_q4_K_reference(x, y, k); +} + +size_t ggml_quantize_q4_K(const float * restrict src, void * restrict dst, int n, int k, int64_t * restrict hist) { + assert(k % QK_K == 0); + (void)hist; // TODO: collect histograms + + for (int j = 0; j < n; j += k) { + block_q4_K * restrict y = (block_q4_K *)dst + j/QK_K; + quantize_row_q4_K_reference(src + j, y, k); + } + return (n/QK_K*sizeof(block_q4_K)); +} + +// ====================== 5-bit (de)-quantization + +void quantize_row_q5_K_reference(const float * restrict x, block_q5_K * restrict y, int k) { + assert(k % QK_K == 0); + const int nb = k / QK_K; + +#if QK_K == 256 + uint8_t L[QK_K]; + float mins[QK_K/32]; + float scales[QK_K/32]; + float weights[32]; + uint8_t Laux[32]; +#else + int8_t L[QK_K]; + float scales[QK_K/16]; +#endif + + for (int i = 0; i < nb; i++) { + +#if QK_K == 256 + + float max_scale = 0; // as we are deducting the min, scales are always positive + float max_min = 0; + for (int j = 0; j < QK_K/32; ++j) { + //scales[j] = make_qkx1_quants(32, 31, x + 32*j, L + 32*j, &mins[j], 9, 0.5f); + float sum_x2 = 0; + for (int l = 0; l < 32; ++l) sum_x2 += x[32*j + l] * x[32*j + l]; + float av_x = sqrtf(sum_x2/32); + for (int l = 0; l < 32; ++l) weights[l] = av_x + fabsf(x[32*j + l]); + scales[j] = make_qkx2_quants(32, 31, x + 32*j, weights, L + 32*j, &mins[j], Laux, -0.5f, 0.1f, 15, false); + float scale = scales[j]; + if (scale > max_scale) { + max_scale = scale; + } + float min = mins[j]; + if (min > max_min) { + max_min = min; + } + } + + float inv_scale = max_scale > 0 ? 63.f/max_scale : 0.f; + float inv_min = max_min > 0 ? 63.f/max_min : 0.f; + for (int j = 0; j < QK_K/32; ++j) { + uint8_t ls = nearest_int(inv_scale*scales[j]); + uint8_t lm = nearest_int(inv_min*mins[j]); + ls = MIN(63, ls); + lm = MIN(63, lm); + if (j < 4) { + y[i].scales[j] = ls; + y[i].scales[j+4] = lm; + } else { + y[i].scales[j+4] = (ls & 0xF) | ((lm & 0xF) << 4); + y[i].scales[j-4] |= ((ls >> 4) << 6); + y[i].scales[j-0] |= ((lm >> 4) << 6); } - if (!n_changed) { - break; + } + y[i].d = ggml_fp32_to_fp16(max_scale/63.f); + y[i].dmin = ggml_fp32_to_fp16(max_min/63.f); + + uint8_t sc, m; + for (int j = 0; j < QK_K/32; ++j) { + get_scale_min_k4(j, y[i].scales, &sc, &m); + const float d = ggml_fp16_to_fp32(y[i].d) * sc; + if (!d) continue; + const float dm = ggml_fp16_to_fp32(y[i].dmin) * m; + for (int ii = 0; ii < 32; ++ii) { + int l = nearest_int((x[32*j + ii] + dm)/d); + l = MAX(0, MIN(31, l)); + L[32*j + ii] = l; + } + } + + uint8_t * restrict qh = y[i].qh; + uint8_t * restrict ql = y[i].qs; + memset(qh, 0, QK_K/8); + + uint8_t m1 = 1, m2 = 2; + for (int n = 0; n < QK_K; n += 64) { + for (int j = 0; j < 32; ++j) { + int l1 = L[n + j]; + if (l1 > 15) { + l1 -= 16; qh[j] |= m1; + } + int l2 = L[n + j + 32]; + if (l2 > 15) { + l2 -= 16; qh[j] |= m2; + } + ql[j] = l1 | (l2 << 4); + } + m1 <<= 2; m2 <<= 2; + ql += 32; + } +#else + float max_scale = 0, amax = 0; + for (int j = 0; j < QK_K/16; ++j) { + scales[j] = make_qx_quants(16, 16, x + 16*j, L + 16*j, 1); + float abs_scale = fabsf(scales[j]); + if (abs_scale > amax) { + amax = abs_scale; + max_scale = scales[j]; + } + } + + float iscale = -128.f/max_scale; + for (int j = 0; j < QK_K/16; ++j) { + int l = nearest_int(iscale*scales[j]); + y[i].scales[j] = MAX(-128, MIN(127, l)); + } + y[i].d = ggml_fp32_to_fp16(1/iscale); + + for (int j = 0; j < QK_K/16; ++j) { + const float d = ggml_fp16_to_fp32(y[i].d) * y[i].scales[j]; + if (!d) continue; + for (int ii = 0; ii < 16; ++ii) { + int l = nearest_int(x[16*j + ii]/d); + l = MAX(-16, MIN(15, l)); + L[16*j + ii] = l + 16; + } + } + + uint8_t * restrict qh = y[i].qh; + uint8_t * restrict ql = y[i].qs; + memset(qh, 0, QK_K/8); + + for (int j = 0; j < 32; ++j) { + int jm = j%8; + int is = j/8; + int l1 = L[j]; + if (l1 > 15) { + l1 -= 16; qh[jm] |= (1 << is); + } + int l2 = L[j + 32]; + if (l2 > 15) { + l2 -= 16; qh[jm] |= (1 << (4 + is)); + } + ql[j] = l1 | (l2 << 4); + } +#endif + + x += QK_K; + + } +} + +void dequantize_row_q5_K(const block_q5_K * restrict x, float * restrict y, int k) { + assert(k % QK_K == 0); + const int nb = k / QK_K; + + for (int i = 0; i < nb; i++) { + + const uint8_t * ql = x[i].qs; + const uint8_t * qh = x[i].qh; + +#if QK_K == 256 + + const float d = ggml_fp16_to_fp32(x[i].d); + const float min = ggml_fp16_to_fp32(x[i].dmin); + + int is = 0; + uint8_t sc, m; + uint8_t u1 = 1, u2 = 2; + for (int j = 0; j < QK_K; j += 64) { + get_scale_min_k4(is + 0, x[i].scales, &sc, &m); + const float d1 = d * sc; const float m1 = min * m; + get_scale_min_k4(is + 1, x[i].scales, &sc, &m); + const float d2 = d * sc; const float m2 = min * m; + for (int l = 0; l < 32; ++l) *y++ = d1 * ((ql[l] & 0xF) + (qh[l] & u1 ? 16 : 0)) - m1; + for (int l = 0; l < 32; ++l) *y++ = d2 * ((ql[l] >> 4) + (qh[l] & u2 ? 16 : 0)) - m2; + ql += 32; is += 2; + u1 <<= 2; u2 <<= 2; + } +#else + float d = ggml_fp16_to_fp32(x[i].d); + const int8_t * restrict s = x[i].scales; + for (int l = 0; l < 8; ++l) { + y[l+ 0] = d * s[0] * ((ql[l+ 0] & 0xF) - (qh[l] & 0x01 ? 0 : 16)); + y[l+ 8] = d * s[0] * ((ql[l+ 8] & 0xF) - (qh[l] & 0x02 ? 0 : 16)); + y[l+16] = d * s[1] * ((ql[l+16] & 0xF) - (qh[l] & 0x04 ? 0 : 16)); + y[l+24] = d * s[1] * ((ql[l+24] & 0xF) - (qh[l] & 0x08 ? 0 : 16)); + y[l+32] = d * s[2] * ((ql[l+ 0] >> 4) - (qh[l] & 0x10 ? 0 : 16)); + y[l+40] = d * s[2] * ((ql[l+ 8] >> 4) - (qh[l] & 0x20 ? 0 : 16)); + y[l+48] = d * s[3] * ((ql[l+16] >> 4) - (qh[l] & 0x40 ? 0 : 16)); + y[l+56] = d * s[3] * ((ql[l+24] >> 4) - (qh[l] & 0x80 ? 0 : 16)); + } + y += QK_K; +#endif + } +} + +void quantize_row_q5_K(const float * restrict x, void * restrict vy, int k) { + assert(k % QK_K == 0); + block_q5_K * restrict y = vy; + quantize_row_q5_K_reference(x, y, k); +} + +size_t ggml_quantize_q5_K(const float * restrict src, void * restrict dst, int n, int k, int64_t * restrict hist) { + assert(k % QK_K == 0); + (void)hist; // TODO: collect histograms + + for (int j = 0; j < n; j += k) { + block_q5_K * restrict y = (block_q5_K *)dst + j/QK_K; + quantize_row_q5_K_reference(src + j, y, k); + } + return (n/QK_K*sizeof(block_q5_K)); +} + +// ====================== 6-bit (de)-quantization + +void quantize_row_q6_K_reference(const float * restrict x, block_q6_K * restrict y, int k) { + assert(k % QK_K == 0); + const int nb = k / QK_K; + + int8_t L[QK_K]; + float scales[QK_K/16]; + + for (int i = 0; i < nb; i++) { + + float max_scale = 0; + float max_abs_scale = 0; + + for (int ib = 0; ib < QK_K/16; ++ib) { + + const float scale = make_qx_quants(16, 32, x + 16*ib, L + 16*ib, 1); + scales[ib] = scale; + + const float abs_scale = fabsf(scale); + if (abs_scale > max_abs_scale) { + max_abs_scale = abs_scale; + max_scale = scale; + } + + } + + if (!max_abs_scale) { + memset(&y[i], 0, sizeof(block_q6_K)); + y[i].d = ggml_fp32_to_fp16(0.f); + x += QK_K; + continue; + } + + float iscale = -128.f/max_scale; + y[i].d = ggml_fp32_to_fp16(1/iscale); + for (int ib = 0; ib < QK_K/16; ++ib) { + y[i].scales[ib] = MIN(127, nearest_int(iscale*scales[ib])); + } + + for (int j = 0; j < QK_K/16; ++j) { + float d = ggml_fp16_to_fp32(y[i].d) * y[i].scales[j]; + if (!d) { + continue; + } + for (int ii = 0; ii < 16; ++ii) { + int l = nearest_int(x[16*j + ii]/d); + l = MAX(-32, MIN(31, l)); + L[16*j + ii] = l + 32; + } + } + + uint8_t * restrict ql = y[i].ql; + uint8_t * restrict qh = y[i].qh; +#if QK_K == 256 + for (int j = 0; j < QK_K; j += 128) { + for (int l = 0; l < 32; ++l) { + const uint8_t q1 = L[j + l + 0] & 0xF; + const uint8_t q2 = L[j + l + 32] & 0xF; + const uint8_t q3 = L[j + l + 64] & 0xF; + const uint8_t q4 = L[j + l + 96] & 0xF; + ql[l+ 0] = q1 | (q3 << 4); + ql[l+32] = q2 | (q4 << 4); + qh[l] = (L[j + l] >> 4) | ((L[j + l + 32] >> 4) << 2) | ((L[j + l + 64] >> 4) << 4) | ((L[j + l + 96] >> 4) << 6); + } + ql += 64; + qh += 32; + } +#else + for (int l = 0; l < 32; ++l) { + const uint8_t q1 = L[l + 0] & 0xF; + const uint8_t q2 = L[l + 32] & 0xF; + ql[l] = q1 | (q2 << 4); + } + for (int l = 0; l < 16; ++l) { + qh[l] = (L[l] >> 4) | ((L[l + 16] >> 4) << 2) | ((L[l + 32] >> 4) << 4) | ((L[l + 48] >> 4) << 6); + } +#endif + + x += QK_K; + + } +} + +void dequantize_row_q6_K(const block_q6_K * restrict x, float * restrict y, int k) { + assert(k % QK_K == 0); + const int nb = k / QK_K; + + for (int i = 0; i < nb; i++) { + + const float d = ggml_fp16_to_fp32(x[i].d); + + const uint8_t * restrict ql = x[i].ql; + const uint8_t * restrict qh = x[i].qh; + const int8_t * restrict sc = x[i].scales; + +#if QK_K == 256 + for (int n = 0; n < QK_K; n += 128) { + for (int l = 0; l < 32; ++l) { + int is = l/16; + const int8_t q1 = (int8_t)((ql[l + 0] & 0xF) | (((qh[l] >> 0) & 3) << 4)) - 32; + const int8_t q2 = (int8_t)((ql[l + 32] & 0xF) | (((qh[l] >> 2) & 3) << 4)) - 32; + const int8_t q3 = (int8_t)((ql[l + 0] >> 4) | (((qh[l] >> 4) & 3) << 4)) - 32; + const int8_t q4 = (int8_t)((ql[l + 32] >> 4) | (((qh[l] >> 6) & 3) << 4)) - 32; + y[l + 0] = d * sc[is + 0] * q1; + y[l + 32] = d * sc[is + 2] * q2; + y[l + 64] = d * sc[is + 4] * q3; + y[l + 96] = d * sc[is + 6] * q4; } + y += 128; + ql += 64; + qh += 32; + sc += 8; } - for (int i = 0; i < n; ++i) { - L[i] += nmax; +#else + for (int l = 0; l < 16; ++l) { + const int8_t q1 = (int8_t)((ql[l+ 0] & 0xF) | (((qh[l] >> 0) & 3) << 4)) - 32; + const int8_t q2 = (int8_t)((ql[l+16] & 0xF) | (((qh[l] >> 2) & 3) << 4)) - 32; + const int8_t q3 = (int8_t)((ql[l+ 0] >> 4) | (((qh[l] >> 4) & 3) << 4)) - 32; + const int8_t q4 = (int8_t)((ql[l+16] >> 4) | (((qh[l] >> 6) & 3) << 4)) - 32; + y[l+ 0] = d * sc[0] * q1; + y[l+16] = d * sc[1] * q2; + y[l+32] = d * sc[2] * q3; + y[l+48] = d * sc[3] * q4; } - return sumlx / suml2; - } - for (int i = 0; i < n; ++i) { - int l = nearest_int(iscale * x[i]); - l = MAX(-nmax, MIN(nmax-1, l)); - L[i] = l + nmax; + y += 64; +#endif + } - return 1/iscale; } -static float make_qkx1_quants(int n, int nmax, const float * restrict x, uint8_t * restrict L, float * restrict the_min, - int ntry, float alpha) { - float min = x[0]; - float max = x[0]; - for (int i = 1; i < n; ++i) { - if (x[i] < min) min = x[i]; - if (x[i] > max) max = x[i]; - } - if (max == min) { - for (int i = 0; i < n; ++i) L[i] = 0; - *the_min = 0; - return 0.f; +void quantize_row_q6_K(const float * restrict x, void * restrict vy, int k) { + assert(k % QK_K == 0); + block_q6_K * restrict y = vy; + quantize_row_q6_K_reference(x, y, k); +} + +size_t ggml_quantize_q6_K(const float * src, void * dst, int n, int k, int64_t * hist) { + assert(k % QK_K == 0); + (void)hist; // TODO: collect histograms + + for (int j = 0; j < n; j += k) { + block_q6_K * restrict y = (block_q6_K *)dst + j/QK_K; + quantize_row_q6_K_reference(src + j, y, k); } - if (min > 0) min = 0; - float iscale = nmax/(max - min); - float scale = 1/iscale; - for (int itry = 0; itry < ntry; ++itry) { - float sumlx = 0; int suml2 = 0; - bool did_change = false; - for (int i = 0; i < n; ++i) { - int l = nearest_int(iscale*(x[i] - min)); - l = MAX(0, MIN(nmax, l)); - if (l != L[i]) { - L[i] = l; - did_change = true; + return (n/QK_K*sizeof(block_q6_K)); +} + +//===================================== Q8_K ============================================== + +void quantize_row_q8_K_reference(const float * restrict x, block_q8_K * restrict y, int k) { + assert(k % QK_K == 0); + const int nb = k / QK_K; + + for (int i = 0; i < nb; i++) { + + float max = 0; + float amax = 0; + for (int j = 0; j < QK_K; ++j) { + float ax = fabsf(x[j]); + if (ax > amax) { + amax = ax; max = x[j]; } - sumlx += (x[i] - min)*l; - suml2 += l*l; } - scale = sumlx/suml2; - float sum = 0; - for (int i = 0; i < n; ++i) { - sum += x[i] - scale*L[i]; + if (!amax) { + y[i].d = 0; + memset(y[i].qs, 0, QK_K); + x += QK_K; + continue; } - min = alpha*min + (1 - alpha)*sum/n; - if (min > 0) min = 0; - iscale = 1/scale; - if (!did_change) break; - } - *the_min = -min; - return scale; -} - -static float make_qkx2_quants(int n, int nmax, const float * restrict x, const float * restrict weights, - uint8_t * restrict L, float * restrict the_min, uint8_t * restrict Laux, - float rmin, float rdelta, int nstep, bool use_mad) { - float min = x[0]; - float max = x[0]; - float sum_w = weights[0]; - float sum_x = sum_w * x[0]; - for (int i = 1; i < n; ++i) { - if (x[i] < min) min = x[i]; - if (x[i] > max) max = x[i]; - float w = weights[i]; - sum_w += w; - sum_x += w * x[i]; - } - if (min > 0) min = 0; - if (max == min) { - for (int i = 0; i < n; ++i) L[i] = 0; - *the_min = -min; - return 0.f; - } - float iscale = nmax/(max - min); - float scale = 1/iscale; - float best_mad = 0; - for (int i = 0; i < n; ++i) { - int l = nearest_int(iscale*(x[i] - min)); - L[i] = MAX(0, MIN(nmax, l)); - float diff = scale * L[i] + min - x[i]; - diff = use_mad ? fabsf(diff) : diff * diff; - float w = weights[i]; - best_mad += w * diff; - } - if (nstep < 1) { - *the_min = -min; - return scale; - } - for (int is = 0; is <= nstep; ++is) { - iscale = (rmin + rdelta*is + nmax)/(max - min); - float sum_l = 0, sum_l2 = 0, sum_xl = 0; - for (int i = 0; i < n; ++i) { - int l = nearest_int(iscale*(x[i] - min)); - l = MAX(0, MIN(nmax, l)); - Laux[i] = l; - float w = weights[i]; - sum_l += w*l; - sum_l2 += w*l*l; - sum_xl += w*l*x[i]; + const float iscale = -128.f/max; + for (int j = 0; j < QK_K; ++j) { + int v = nearest_int(iscale*x[j]); + y[i].qs[j] = MIN(127, v); } - float D = sum_w * sum_l2 - sum_l * sum_l; - if (D > 0) { - float this_scale = (sum_w * sum_xl - sum_x * sum_l)/D; - float this_min = (sum_l2 * sum_x - sum_l * sum_xl)/D; - if (this_min > 0) { - this_min = 0; - this_scale = sum_xl / sum_l2; - } - float mad = 0; - for (int i = 0; i < n; ++i) { - float diff = this_scale * Laux[i] + this_min - x[i]; - diff = use_mad ? fabsf(diff) : diff * diff; - float w = weights[i]; - mad += w * diff; - } - if (mad < best_mad) { - for (int i = 0; i < n; ++i) { - L[i] = Laux[i]; - } - best_mad = mad; - scale = this_scale; - min = this_min; + for (int j = 0; j < QK_K/16; ++j) { + int sum = 0; + for (int ii = 0; ii < 16; ++ii) { + sum += y[i].qs[j*16 + ii]; } + y[i].bsums[j] = sum; } + y[i].d = 1/iscale; + x += QK_K; } - *the_min = -min; - return scale; } -#if QK_K == 256 -static inline void get_scale_min_k4(int j, const uint8_t * restrict q, uint8_t * restrict d, uint8_t * restrict m) { - if (j < 4) { - *d = q[j] & 63; *m = q[j + 4] & 63; - } else { - *d = (q[j+4] & 0xF) | ((q[j-4] >> 6) << 4); - *m = (q[j+4] >> 4) | ((q[j-0] >> 6) << 4); +void dequantize_row_q8_K(const block_q8_K * restrict x, float * restrict y, int k) { + assert(k % QK_K == 0); + const int nb = k / QK_K; + + for (int i = 0; i < nb; i++) { + for (int j = 0; j < QK_K; ++j) { + *y++ = x[i].d * x[i].qs[j]; + } } } + +void quantize_row_q8_K(const float * restrict x, void * restrict y, int k) { + quantize_row_q8_K_reference(x, y, k); +} + +//===================================== Dot ptoducts ================================= + +// +// Helper functions +// +#if __AVX__ || __AVX2__ || __AVX512F__ + +// shuffles to pick the required scales in dot products +static inline __m256i get_scale_shuffle_q3k(int i) { + static const uint8_t k_shuffle[128] = { + 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, + 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, + 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11, + 12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13, 14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15, + }; + return _mm256_loadu_si256((const __m256i*)k_shuffle + i); +} +static inline __m256i get_scale_shuffle_k4(int i) { + static const uint8_t k_shuffle[256] = { + 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, + 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, + 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, + 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, + 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, + 10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11, + 12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13, + 14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15 + }; + return _mm256_loadu_si256((const __m256i*)k_shuffle + i); +} +static inline __m128i get_scale_shuffle(int i) { + static const uint8_t k_shuffle[128] = { + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, + 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, + 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, + 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, + 10,10,10,10,10,10,10,10, 11,11,11,11,11,11,11,11, + 12,12,12,12,12,12,12,12, 13,13,13,13,13,13,13,13, + 14,14,14,14,14,14,14,14, 15,15,15,15,15,15,15,15 + }; + return _mm_loadu_si128((const __m128i*)k_shuffle + i); +} #endif -//========================- 2-bit (de)-quantization +void ggml_vec_dot_q4_0_q8_0(int n, float * restrict s, const void * restrict vx, const void * restrict vy) { + const int qk = QK8_0; + const int nb = n / qk; + + assert(n % qk == 0); + + const block_q4_0 * restrict x = vx; + const block_q8_0 * restrict y = vy; -void quantize_row_q2_K_reference(const float * restrict x, block_q2_K * restrict y, int k) { - assert(k % QK_K == 0); - const int nb = k / QK_K; +#if defined(__ARM_NEON) + float32x4_t sumv0 = vdupq_n_f32(0.0f); + float32x4_t sumv1 = vdupq_n_f32(0.0f); - uint8_t L[QK_K]; - uint8_t Laux[16]; - float weights[16]; - float mins[QK_K/16]; - float scales[QK_K/16]; + assert(nb % 2 == 0); // TODO: handle odd nb - const float q4scale = 15.f; + for (int i = 0; i < nb; i += 2) { + const block_q4_0 * restrict x0 = &x[i + 0]; + const block_q4_0 * restrict x1 = &x[i + 1]; + const block_q8_0 * restrict y0 = &y[i + 0]; + const block_q8_0 * restrict y1 = &y[i + 1]; - for (int i = 0; i < nb; i++) { - float max_scale = 0; // as we are deducting the min, scales are always positive - float max_min = 0; - for (int j = 0; j < QK_K/16; ++j) { - for (int l = 0; l < 16; ++l) weights[l] = fabsf(x[16*j + l]); - scales[j] = make_qkx2_quants(16, 3, x + 16*j, weights, L + 16*j, &mins[j], Laux, -0.5f, 0.1f, 15, true); - float scale = scales[j]; - if (scale > max_scale) { - max_scale = scale; - } - float min = mins[j]; - if (min > max_min) { - max_min = min; - } - } + const uint8x16_t m4b = vdupq_n_u8(0x0F); + const int8x16_t s8b = vdupq_n_s8(0x8); - if (max_scale > 0) { - float iscale = q4scale/max_scale; - for (int j = 0; j < QK_K/16; ++j) { - int l = nearest_int(iscale*scales[j]); - y[i].scales[j] = l; - } - y[i].d = ggml_fp32_to_fp16(max_scale/q4scale); - } else { - for (int j = 0; j < QK_K/16; ++j) y[i].scales[j] = 0; - y[i].d = ggml_fp32_to_fp16(0.f); - } - if (max_min > 0) { - float iscale = q4scale/max_min; - for (int j = 0; j < QK_K/16; ++j) { - int l = nearest_int(iscale*mins[j]); - y[i].scales[j] |= (l << 4); - } - y[i].dmin = ggml_fp32_to_fp16(max_min/q4scale); - } else { - y[i].dmin = ggml_fp32_to_fp16(0.f); - } - for (int j = 0; j < QK_K/16; ++j) { - const float d = ggml_fp16_to_fp32(y[i].d) * (y[i].scales[j] & 0xF); - if (!d) continue; - const float dm = ggml_fp16_to_fp32(y[i].dmin) * (y[i].scales[j] >> 4); - for (int ii = 0; ii < 16; ++ii) { - int l = nearest_int((x[16*j + ii] + dm)/d); - l = MAX(0, MIN(3, l)); - L[16*j + ii] = l; - } - } + const uint8x16_t v0_0 = vld1q_u8(x0->qs); + const uint8x16_t v0_1 = vld1q_u8(x1->qs); -#if QK_K == 256 - for (int j = 0; j < QK_K; j += 128) { - for (int l = 0; l < 32; ++l) { - y[i].qs[j/4 + l] = L[j + l] | (L[j + l + 32] << 2) | (L[j + l + 64] << 4) | (L[j + l + 96] << 6); - } - } + // 4-bit -> 8-bit + const int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8 (v0_0, m4b)); + const int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4)); + const int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8 (v0_1, m4b)); + const int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4)); + + // sub 8 + const int8x16_t v0_0ls = vsubq_s8(v0_0l, s8b); + const int8x16_t v0_0hs = vsubq_s8(v0_0h, s8b); + const int8x16_t v0_1ls = vsubq_s8(v0_1l, s8b); + const int8x16_t v0_1hs = vsubq_s8(v0_1h, s8b); + + // load y + const int8x16_t v1_0l = vld1q_s8(y0->qs); + const int8x16_t v1_0h = vld1q_s8(y0->qs + 16); + const int8x16_t v1_1l = vld1q_s8(y1->qs); + const int8x16_t v1_1h = vld1q_s8(y1->qs + 16); + +#if defined(__ARM_FEATURE_DOTPROD) + // dot product into int32x4_t + const int32x4_t p_0 = vdotq_s32(vdotq_s32(vdupq_n_s32(0), v0_0ls, v1_0l), v0_0hs, v1_0h); + const int32x4_t p_1 = vdotq_s32(vdotq_s32(vdupq_n_s32(0), v0_1ls, v1_1l), v0_1hs, v1_1h); + + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(p_0), ggml_fp16_to_fp32(x0->d)*ggml_fp16_to_fp32(y0->d)); + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(p_1), ggml_fp16_to_fp32(x1->d)*ggml_fp16_to_fp32(y1->d)); #else - for (int l = 0; l < 16; ++l) { - y[i].qs[l] = L[l] | (L[l + 16] << 2) | (L[l + 32] << 4) | (L[l + 48] << 6); - } + const int16x8_t pl0l = vmull_s8(vget_low_s8 (v0_0ls), vget_low_s8 (v1_0l)); + const int16x8_t pl0h = vmull_s8(vget_high_s8(v0_0ls), vget_high_s8(v1_0l)); + const int16x8_t ph0l = vmull_s8(vget_low_s8 (v0_0hs), vget_low_s8 (v1_0h)); + const int16x8_t ph0h = vmull_s8(vget_high_s8(v0_0hs), vget_high_s8(v1_0h)); + + const int16x8_t pl1l = vmull_s8(vget_low_s8 (v0_1ls), vget_low_s8 (v1_1l)); + const int16x8_t pl1h = vmull_s8(vget_high_s8(v0_1ls), vget_high_s8(v1_1l)); + const int16x8_t ph1l = vmull_s8(vget_low_s8 (v0_1hs), vget_low_s8 (v1_1h)); + const int16x8_t ph1h = vmull_s8(vget_high_s8(v0_1hs), vget_high_s8(v1_1h)); + + const int32x4_t pl0 = vaddq_s32(vpaddlq_s16(pl0l), vpaddlq_s16(pl0h)); + const int32x4_t ph0 = vaddq_s32(vpaddlq_s16(ph0l), vpaddlq_s16(ph0h)); + const int32x4_t pl1 = vaddq_s32(vpaddlq_s16(pl1l), vpaddlq_s16(pl1h)); + const int32x4_t ph1 = vaddq_s32(vpaddlq_s16(ph1l), vpaddlq_s16(ph1h)); + + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(pl0, ph0)), ggml_fp16_to_fp32(x0->d)*ggml_fp16_to_fp32(y0->d)); + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(pl1, ph1)), ggml_fp16_to_fp32(x1->d)*ggml_fp16_to_fp32(y1->d)); #endif + } - x += QK_K; + *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1); +#elif defined(__AVX2__) + // Initialize accumulator with zeros + __m256 acc = _mm256_setzero_ps(); + + // Main loop + for (int i = 0; i < nb; ++i) { + /* Compute combined scale for the block */ + const __m256 d = _mm256_set1_ps( ggml_fp16_to_fp32(x[i].d) * ggml_fp16_to_fp32(y[i].d) ); + + __m256i bx = bytes_from_nibbles_32(x[i].qs); + // Now we have a vector with bytes in [ 0 .. 15 ] interval. Offset them into [ -8 .. +7 ] interval. + const __m256i off = _mm256_set1_epi8( 8 ); + bx = _mm256_sub_epi8( bx, off ); + + __m256i by = _mm256_loadu_si256((const __m256i *)y[i].qs); + + const __m256 q = mul_sum_i8_pairs_float(bx, by); + + /* Multiply q with scale and accumulate */ + acc = _mm256_fmadd_ps( d, q, acc ); } -} -void dequantize_row_q2_K(const block_q2_K * restrict x, float * restrict y, int k) { - assert(k % QK_K == 0); - const int nb = k / QK_K; + *s = hsum_float_8(acc); +#elif defined(__AVX__) + // Initialize accumulator with zeros + __m256 acc = _mm256_setzero_ps(); - for (int i = 0; i < nb; i++) { + // Main loop + for (int i = 0; i < nb; ++i) { + // Compute combined scale for the block + const __m256 d = _mm256_set1_ps( ggml_fp16_to_fp32(x[i].d) * ggml_fp16_to_fp32(y[i].d) ); - const float d = ggml_fp16_to_fp32(x[i].d); - const float min = ggml_fp16_to_fp32(x[i].dmin); + const __m128i lowMask = _mm_set1_epi8(0xF); + const __m128i off = _mm_set1_epi8(8); - const uint8_t * q = x[i].qs; + const __m128i tmp = _mm_loadu_si128((const __m128i *)x[i].qs); -#if QK_K == 256 - int is = 0; - float dl, ml; - for (int n = 0; n < QK_K; n += 128) { - int shift = 0; - for (int j = 0; j < 4; ++j) { + __m128i bx = _mm_and_si128(lowMask, tmp); + __m128i by = _mm_loadu_si128((const __m128i *)y[i].qs); + bx = _mm_sub_epi8(bx, off); + const __m128i i32_0 = mul_sum_i8_pairs(bx, by); - uint8_t sc = x[i].scales[is++]; - dl = d * (sc & 0xF); ml = min * (sc >> 4); - for (int l = 0; l < 16; ++l) *y++ = dl * ((int8_t)((q[l] >> shift) & 3)) - ml; + bx = _mm_and_si128(lowMask, _mm_srli_epi64(tmp, 4)); + by = _mm_loadu_si128((const __m128i *)(y[i].qs + 16)); + bx = _mm_sub_epi8(bx, off); + const __m128i i32_1 = mul_sum_i8_pairs(bx, by); - sc = x[i].scales[is++]; - dl = d * (sc & 0xF); ml = min * (sc >> 4); - for (int l = 0; l < 16; ++l) *y++ = dl * ((int8_t)((q[l+16] >> shift) & 3)) - ml; + // Convert int32_t to float + __m256 p = _mm256_cvtepi32_ps(MM256_SET_M128I(i32_0, i32_1)); - shift += 2; - } - q += 32; - } -#else - float dl1 = d * (x[i].scales[0] & 0xF), ml1 = min * (x[i].scales[0] >> 4); - float dl2 = d * (x[i].scales[1] & 0xF), ml2 = min * (x[i].scales[1] >> 4); - float dl3 = d * (x[i].scales[2] & 0xF), ml3 = min * (x[i].scales[2] >> 4); - float dl4 = d * (x[i].scales[3] & 0xF), ml4 = min * (x[i].scales[3] >> 4); - for (int l = 0; l < 16; ++l) { - y[l+ 0] = dl1 * ((int8_t)((q[l] >> 0) & 3)) - ml1; - y[l+16] = dl2 * ((int8_t)((q[l] >> 2) & 3)) - ml2; - y[l+32] = dl3 * ((int8_t)((q[l] >> 4) & 3)) - ml3; - y[l+48] = dl4 * ((int8_t)((q[l] >> 6) & 3)) - ml4; - } - y += QK_K; -#endif + // Apply the scale, and accumulate + acc = _mm256_add_ps(_mm256_mul_ps( d, p ), acc); } -} -void quantize_row_q2_K(const float * restrict x, void * restrict vy, int k) { - quantize_row_q2_K_reference(x, vy, k); -} + *s = hsum_float_8(acc); +#elif defined(__SSSE3__) + // set constants + const __m128i lowMask = _mm_set1_epi8(0xF); + const __m128i off = _mm_set1_epi8(8); + + // Initialize accumulator with zeros + __m128 acc_0 = _mm_setzero_ps(); + __m128 acc_1 = _mm_setzero_ps(); + __m128 acc_2 = _mm_setzero_ps(); + __m128 acc_3 = _mm_setzero_ps(); + + // First round without accumulation + { + _mm_prefetch(&x[0] + sizeof(block_q4_0), _MM_HINT_T0); + _mm_prefetch(&y[0] + sizeof(block_q8_0), _MM_HINT_T0); + + // Compute combined scale for the block 0 and 1 + const __m128 d_0_1 = _mm_set1_ps( ggml_fp16_to_fp32(x[0].d) * ggml_fp16_to_fp32(y[0].d) ); + + const __m128i tmp_0_1 = _mm_loadu_si128((const __m128i *)x[0].qs); + + __m128i bx_0 = _mm_and_si128(lowMask, tmp_0_1); + __m128i by_0 = _mm_loadu_si128((const __m128i *)y[0].qs); + bx_0 = _mm_sub_epi8(bx_0, off); + const __m128i i32_0 = mul_sum_i8_pairs(bx_0, by_0); + + __m128i bx_1 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp_0_1, 4)); + __m128i by_1 = _mm_loadu_si128((const __m128i *)(y[0].qs + 16)); + bx_1 = _mm_sub_epi8(bx_1, off); + const __m128i i32_1 = mul_sum_i8_pairs(bx_1, by_1); + + _mm_prefetch(&x[1] + sizeof(block_q4_0), _MM_HINT_T0); + _mm_prefetch(&y[1] + sizeof(block_q8_0), _MM_HINT_T0); + + // Compute combined scale for the block 2 and 3 + const __m128 d_2_3 = _mm_set1_ps( ggml_fp16_to_fp32(x[1].d) * ggml_fp16_to_fp32(y[1].d) ); + + const __m128i tmp_2_3 = _mm_loadu_si128((const __m128i *)x[1].qs); + + __m128i bx_2 = _mm_and_si128(lowMask, tmp_2_3); + __m128i by_2 = _mm_loadu_si128((const __m128i *)y[1].qs); + bx_2 = _mm_sub_epi8(bx_2, off); + const __m128i i32_2 = mul_sum_i8_pairs(bx_2, by_2); + + __m128i bx_3 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp_2_3, 4)); + __m128i by_3 = _mm_loadu_si128((const __m128i *)(y[1].qs + 16)); + bx_3 = _mm_sub_epi8(bx_3, off); + const __m128i i32_3 = mul_sum_i8_pairs(bx_3, by_3); + + // Convert int32_t to float + __m128 p0 = _mm_cvtepi32_ps(i32_0); + __m128 p1 = _mm_cvtepi32_ps(i32_1); + __m128 p2 = _mm_cvtepi32_ps(i32_2); + __m128 p3 = _mm_cvtepi32_ps(i32_3); + + // Apply the scale + acc_0 = _mm_mul_ps( d_0_1, p0 ); + acc_1 = _mm_mul_ps( d_0_1, p1 ); + acc_2 = _mm_mul_ps( d_2_3, p2 ); + acc_3 = _mm_mul_ps( d_2_3, p3 ); + } -size_t ggml_quantize_q2_K(const float * restrict src, void * restrict dst, int n, int k, int64_t * restrict hist) { - (void)hist; // TODO: collect histograms + assert(nb % 2 == 0); // TODO: handle odd nb - for (int j = 0; j < n; j += k) { - block_q2_K * restrict y = (block_q2_K *)dst + j/QK_K; - quantize_row_q2_K_reference(src + j, y, k); - } - return (n/QK_K*sizeof(block_q2_K)); -} + // Main loop + for (int i = 2; i < nb; i+=2) { + _mm_prefetch(&x[i] + sizeof(block_q4_0), _MM_HINT_T0); + _mm_prefetch(&y[i] + sizeof(block_q8_0), _MM_HINT_T0); -//========================= 3-bit (de)-quantization + // Compute combined scale for the block 0 and 1 + const __m128 d_0_1 = _mm_set1_ps( ggml_fp16_to_fp32(x[i].d) * ggml_fp16_to_fp32(y[i].d) ); -void quantize_row_q3_K_reference(const float * restrict x, block_q3_K * restrict y, int k) { - assert(k % QK_K == 0); - const int nb = k / QK_K; + const __m128i tmp_0_1 = _mm_loadu_si128((const __m128i *)x[i].qs); - int8_t L[QK_K]; - float scales[QK_K / 16]; + __m128i bx_0 = _mm_and_si128(lowMask, tmp_0_1); + __m128i by_0 = _mm_loadu_si128((const __m128i *)y[i].qs); + bx_0 = _mm_sub_epi8(bx_0, off); + const __m128i i32_0 = mul_sum_i8_pairs(bx_0, by_0); + + __m128i bx_1 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp_0_1, 4)); + __m128i by_1 = _mm_loadu_si128((const __m128i *)(y[i].qs + 16)); + bx_1 = _mm_sub_epi8(bx_1, off); + const __m128i i32_1 = mul_sum_i8_pairs(bx_1, by_1); + + _mm_prefetch(&x[i] + 2 * sizeof(block_q4_0), _MM_HINT_T0); + _mm_prefetch(&y[i] + 2 * sizeof(block_q8_0), _MM_HINT_T0); + + // Compute combined scale for the block 2 and 3 + const __m128 d_2_3 = _mm_set1_ps( ggml_fp16_to_fp32(x[i + 1].d) * ggml_fp16_to_fp32(y[i + 1].d) ); + + const __m128i tmp_2_3 = _mm_loadu_si128((const __m128i *)x[i + 1].qs); + + __m128i bx_2 = _mm_and_si128(lowMask, tmp_2_3); + __m128i by_2 = _mm_loadu_si128((const __m128i *)y[i + 1].qs); + bx_2 = _mm_sub_epi8(bx_2, off); + const __m128i i32_2 = mul_sum_i8_pairs(bx_2, by_2); + + __m128i bx_3 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp_2_3, 4)); + __m128i by_3 = _mm_loadu_si128((const __m128i *)(y[i + 1].qs + 16)); + bx_3 = _mm_sub_epi8(bx_3, off); + const __m128i i32_3 = mul_sum_i8_pairs(bx_3, by_3); + + // Convert int32_t to float + __m128 p0 = _mm_cvtepi32_ps(i32_0); + __m128 p1 = _mm_cvtepi32_ps(i32_1); + __m128 p2 = _mm_cvtepi32_ps(i32_2); + __m128 p3 = _mm_cvtepi32_ps(i32_3); + + // Apply the scale + __m128 p0_d = _mm_mul_ps( d_0_1, p0 ); + __m128 p1_d = _mm_mul_ps( d_0_1, p1 ); + __m128 p2_d = _mm_mul_ps( d_2_3, p2 ); + __m128 p3_d = _mm_mul_ps( d_2_3, p3 ); + + // Acummulate + acc_0 = _mm_add_ps(p0_d, acc_0); + acc_1 = _mm_add_ps(p1_d, acc_1); + acc_2 = _mm_add_ps(p2_d, acc_2); + acc_3 = _mm_add_ps(p3_d, acc_3); + } + + *s = hsum_float_4x4(acc_0, acc_1, acc_2, acc_3); +#elif defined(__riscv_v_intrinsic) + float sumf = 0.0; + + size_t vl = __riscv_vsetvl_e8m1(qk/2); for (int i = 0; i < nb; i++) { + // load elements + vuint8mf2_t tx = __riscv_vle8_v_u8mf2(x[i].qs, vl); - float max_scale = 0; - float amax = 0; - for (int j = 0; j < QK_K/16; ++j) { - scales[j] = make_q3_quants(16, 4, x + 16*j, L + 16*j, true); - float scale = fabsf(scales[j]); - if (scale > amax) { - amax = scale; max_scale = scales[j]; - } - } + vint8mf2_t y0 = __riscv_vle8_v_i8mf2(y[i].qs, vl); + vint8mf2_t y1 = __riscv_vle8_v_i8mf2(y[i].qs+16, vl); -#if QK_K == 256 - memset(y[i].scales, 0, 12); - if (max_scale) { - float iscale = -32.f/max_scale; - for (int j = 0; j < QK_K/16; ++j) { - int8_t l = nearest_int(iscale*scales[j]); - l = MAX(-32, MIN(31, l)) + 32; - if (j < 8) { - y[i].scales[j] = l & 0xF; - } else { - y[i].scales[j-8] |= ((l & 0xF) << 4); - } - l >>= 4; - y[i].scales[j%4 + 8] |= (l << (2*(j/4))); - } - y[i].d = ggml_fp32_to_fp16(1/iscale); - } else { - y[i].d = ggml_fp32_to_fp16(0.f); - } + // mask and store lower part of x, and then upper part + vuint8mf2_t x_a = __riscv_vand_vx_u8mf2(tx, 0x0F, vl); + vuint8mf2_t x_l = __riscv_vsrl_vx_u8mf2(tx, 0x04, vl); - int8_t sc; - for (int j = 0; j < QK_K/16; ++j) { - sc = j < 8 ? y[i].scales[j] & 0xF : y[i].scales[j-8] >> 4; - sc = (sc | (((y[i].scales[8 + j%4] >> (2*(j/4))) & 3) << 4)) - 32; - float d = ggml_fp16_to_fp32(y[i].d) * sc; - if (!d) { - continue; - } - for (int ii = 0; ii < 16; ++ii) { - int l = nearest_int(x[16*j + ii]/d); - l = MAX(-4, MIN(3, l)); - L[16*j + ii] = l + 4; - } - } -#else - if (max_scale) { - float iscale = -8.f/max_scale; - for (int j = 0; j < QK_K/16; j+=2) { - int l1 = nearest_int(iscale*scales[j]); - l1 = 8 + MAX(-8, MIN(7, l1)); - int l2 = nearest_int(iscale*scales[j+1]); - l2 = 8 + MAX(-8, MIN(7, l2)); - y[i].scales[j/2] = l1 | (l2 << 4); - } - y[i].d = ggml_fp32_to_fp16(1/iscale); - } else { - for (int j = 0; j < QK_K/16; j+=2) { - y[i].scales[j/2] = 0; - } - y[i].d = ggml_fp32_to_fp16(0.f); - } - for (int j = 0; j < QK_K/16; ++j) { - int s = j%2 == 0 ? y[i].scales[j/2] & 0xF : y[i].scales[j/2] >> 4; - float d = ggml_fp16_to_fp32(y[i].d) * (s - 8); - if (!d) { - continue; - } - for (int ii = 0; ii < 16; ++ii) { - int l = nearest_int(x[16*j + ii]/d); - l = MAX(-4, MIN(3, l)); - L[16*j + ii] = l + 4; - } - } -#endif + vint8mf2_t x_ai = __riscv_vreinterpret_v_u8mf2_i8mf2(x_a); + vint8mf2_t x_li = __riscv_vreinterpret_v_u8mf2_i8mf2(x_l); - memset(y[i].hmask, 0, QK_K/8); - // We put the high-bit for the 1st 8 quants into bit 0, the next 8 into bit 1, etc. - int m = 0; - uint8_t hm = 1; - for (int j = 0; j < QK_K; ++j) { - if (L[j] > 3) { - y[i].hmask[m] |= hm; - L[j] -= 4; - } - if (++m == QK_K/8) { - m = 0; hm <<= 1; - } - } -#if QK_K == 256 - for (int j = 0; j < QK_K; j += 128) { - for (int l = 0; l < 32; ++l) { - y[i].qs[j/4 + l] = L[j + l] | (L[j + l + 32] << 2) | (L[j + l + 64] << 4) | (L[j + l + 96] << 6); - } - } + // subtract offset + vint8mf2_t v0 = __riscv_vsub_vx_i8mf2(x_ai, 8, vl); + vint8mf2_t v1 = __riscv_vsub_vx_i8mf2(x_li, 8, vl); + + vint16m1_t vec_mul1 = __riscv_vwmul_vv_i16m1(v0, y0, vl); + vint16m1_t vec_mul2 = __riscv_vwmul_vv_i16m1(v1, y1, vl); + + vint32m1_t vec_zero = __riscv_vmv_v_x_i32m1(0, vl); + + vint32m1_t vs1 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul1, vec_zero, vl); + vint32m1_t vs2 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul2, vs1, vl); + + int sumi = __riscv_vmv_x_s_i32m1_i32(vs2); + + sumf += sumi*ggml_fp16_to_fp32(x[i].d)*ggml_fp16_to_fp32(y[i].d); + } + + *s = sumf; #else - for (int l = 0; l < 16; ++l) { - y[i].qs[l] = L[l] | (L[l + 16] << 2) | (L[l + 32] << 4) | (L[l + 48] << 6); + // scalar + float sumf = 0.0; + + for (int i = 0; i < nb; i++) { + int sumi = 0; + + for (int j = 0; j < qk/2; ++j) { + const int v0 = (x[i].qs[j] & 0x0F) - 8; + const int v1 = (x[i].qs[j] >> 4) - 8; + + sumi += (v0 * y[i].qs[j]) + (v1 * y[i].qs[j + qk/2]); } -#endif - x += QK_K; + sumf += sumi*ggml_fp16_to_fp32(x[i].d)*ggml_fp16_to_fp32(y[i].d); } + + *s = sumf; +#endif } -#if QK_K == 256 -void dequantize_row_q3_K(const block_q3_K * restrict x, float * restrict y, int k) { - assert(k % QK_K == 0); - const int nb = k / QK_K; +void ggml_vec_dot_q4_1_q8_1(const int n, float * restrict s, const void * restrict vx, const void * restrict vy) { + const int qk = QK8_1; + const int nb = n / qk; - const uint32_t kmask1 = 0x03030303; - const uint32_t kmask2 = 0x0f0f0f0f; + assert(n % qk == 0); - uint32_t aux[4]; - const int8_t * scales = (const int8_t*)aux; + const block_q4_1 * restrict x = vx; + const block_q8_1 * restrict y = vy; - for (int i = 0; i < nb; i++) { + // TODO: add WASM SIMD +#if defined(__ARM_NEON) + float32x4_t sumv0 = vdupq_n_f32(0.0f); + float32x4_t sumv1 = vdupq_n_f32(0.0f); - const float d_all = ggml_fp16_to_fp32(x[i].d); + float summs = 0; - const uint8_t * restrict q = x[i].qs; - const uint8_t * restrict hm = x[i].hmask; - uint8_t m = 1; + assert(nb % 2 == 0); // TODO: handle odd nb - memcpy(aux, x[i].scales, 12); - uint32_t tmp = aux[2]; - aux[2] = ((aux[0] >> 4) & kmask2) | (((tmp >> 4) & kmask1) << 4); - aux[3] = ((aux[1] >> 4) & kmask2) | (((tmp >> 6) & kmask1) << 4); - aux[0] = (aux[0] & kmask2) | (((tmp >> 0) & kmask1) << 4); - aux[1] = (aux[1] & kmask2) | (((tmp >> 2) & kmask1) << 4); + for (int i = 0; i < nb; i += 2) { + const block_q4_1 * restrict x0 = &x[i + 0]; + const block_q4_1 * restrict x1 = &x[i + 1]; + const block_q8_1 * restrict y0 = &y[i + 0]; + const block_q8_1 * restrict y1 = &y[i + 1]; - int is = 0; - float dl; - for (int n = 0; n < QK_K; n += 128) { - int shift = 0; - for (int j = 0; j < 4; ++j) { + summs += ggml_fp16_to_fp32(x0->m) * y0->s + ggml_fp16_to_fp32(x1->m) * y1->s; - dl = d_all * (scales[is++] - 32); - for (int l = 0; l < 16; ++l) { - *y++ = dl * ((int8_t)((q[l+ 0] >> shift) & 3) - ((hm[l+ 0] & m) ? 0 : 4)); - } + const uint8x16_t m4b = vdupq_n_u8(0x0F); - dl = d_all * (scales[is++] - 32); - for (int l = 0; l < 16; ++l) { - *y++ = dl * ((int8_t)((q[l+16] >> shift) & 3) - ((hm[l+16] & m) ? 0 : 4)); - } + const uint8x16_t v0_0 = vld1q_u8(x0->qs); + const uint8x16_t v0_1 = vld1q_u8(x1->qs); - shift += 2; - m <<= 1; - } - q += 32; - } + // 4-bit -> 8-bit + const int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8 (v0_0, m4b)); + const int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4)); + const int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8 (v0_1, m4b)); + const int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4)); + // load y + const int8x16_t v1_0l = vld1q_s8(y0->qs); + const int8x16_t v1_0h = vld1q_s8(y0->qs + 16); + const int8x16_t v1_1l = vld1q_s8(y1->qs); + const int8x16_t v1_1h = vld1q_s8(y1->qs + 16); + +#if defined(__ARM_FEATURE_DOTPROD) + // dot product into int32x4_t + const int32x4_t p_0 = vdotq_s32(vdotq_s32(vdupq_n_s32(0), v0_0l, v1_0l), v0_0h, v1_0h); + const int32x4_t p_1 = vdotq_s32(vdotq_s32(vdupq_n_s32(0), v0_1l, v1_1l), v0_1h, v1_1h); + + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(p_0), ggml_fp16_to_fp32(x0->d)*y0->d); + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(p_1), ggml_fp16_to_fp32(x1->d)*y1->d); +#else + const int16x8_t pl0l = vmull_s8(vget_low_s8 (v0_0l), vget_low_s8 (v1_0l)); + const int16x8_t pl0h = vmull_s8(vget_high_s8(v0_0l), vget_high_s8(v1_0l)); + const int16x8_t ph0l = vmull_s8(vget_low_s8 (v0_0h), vget_low_s8 (v1_0h)); + const int16x8_t ph0h = vmull_s8(vget_high_s8(v0_0h), vget_high_s8(v1_0h)); + + const int16x8_t pl1l = vmull_s8(vget_low_s8 (v0_1l), vget_low_s8 (v1_1l)); + const int16x8_t pl1h = vmull_s8(vget_high_s8(v0_1l), vget_high_s8(v1_1l)); + const int16x8_t ph1l = vmull_s8(vget_low_s8 (v0_1h), vget_low_s8 (v1_1h)); + const int16x8_t ph1h = vmull_s8(vget_high_s8(v0_1h), vget_high_s8(v1_1h)); + + const int32x4_t pl0 = vaddq_s32(vpaddlq_s16(pl0l), vpaddlq_s16(pl0h)); + const int32x4_t ph0 = vaddq_s32(vpaddlq_s16(ph0l), vpaddlq_s16(ph0h)); + const int32x4_t pl1 = vaddq_s32(vpaddlq_s16(pl1l), vpaddlq_s16(pl1h)); + const int32x4_t ph1 = vaddq_s32(vpaddlq_s16(ph1l), vpaddlq_s16(ph1h)); + + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(pl0, ph0)), ggml_fp16_to_fp32(x0->d)*y0->d); + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(pl1, ph1)), ggml_fp16_to_fp32(x1->d)*y1->d); +#endif } -} + + *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1) + summs; +#elif defined(__AVX2__) || defined(__AVX__) + // Initialize accumulator with zeros + __m256 acc = _mm256_setzero_ps(); + + float summs = 0; + + // Main loop + for (int i = 0; i < nb; ++i) { + const float d0 = ggml_fp16_to_fp32(x[i].d); + const float d1 = y[i].d; + + summs += ggml_fp16_to_fp32(x[i].m) * y[i].s; + + const __m256 d0v = _mm256_set1_ps( d0 ); + const __m256 d1v = _mm256_set1_ps( d1 ); + + // Compute combined scales + const __m256 d0d1 = _mm256_mul_ps( d0v, d1v ); + + // Load 16 bytes, and unpack 4 bit fields into bytes, making 32 bytes + const __m256i bx = bytes_from_nibbles_32(x[i].qs); + const __m256i by = _mm256_loadu_si256( (const __m256i *)y[i].qs ); + + const __m256 xy = mul_sum_us8_pairs_float(bx, by); + + // Accumulate d0*d1*x*y +#if defined(__AVX2__) + acc = _mm256_fmadd_ps( d0d1, xy, acc ); #else -void dequantize_row_q3_K(const block_q3_K * restrict x, float * restrict y, int k) { - assert(k % QK_K == 0); - assert(QK_K == 64); - const int nb = k / QK_K; + acc = _mm256_add_ps( _mm256_mul_ps( d0d1, xy ), acc ); +#endif + } + + *s = hsum_float_8(acc) + summs; +#elif defined(__riscv_v_intrinsic) + float sumf = 0.0; + + size_t vl = __riscv_vsetvl_e8m1(qk/2); for (int i = 0; i < nb; i++) { + // load elements + vuint8mf2_t tx = __riscv_vle8_v_u8mf2(x[i].qs, vl); - const float d_all = ggml_fp16_to_fp32(x[i].d); + vint8mf2_t y0 = __riscv_vle8_v_i8mf2(y[i].qs, vl); + vint8mf2_t y1 = __riscv_vle8_v_i8mf2(y[i].qs+16, vl); - const uint8_t * restrict q = x[i].qs; - const uint8_t * restrict hm = x[i].hmask; + // mask and store lower part of x, and then upper part + vuint8mf2_t x_a = __riscv_vand_vx_u8mf2(tx, 0x0F, vl); + vuint8mf2_t x_l = __riscv_vsrl_vx_u8mf2(tx, 0x04, vl); - const float d1 = d_all * ((x[i].scales[0] & 0xF) - 8); - const float d2 = d_all * ((x[i].scales[0] >> 4) - 8); - const float d3 = d_all * ((x[i].scales[1] & 0xF) - 8); - const float d4 = d_all * ((x[i].scales[1] >> 4) - 8); + vint8mf2_t v0 = __riscv_vreinterpret_v_u8mf2_i8mf2(x_a); + vint8mf2_t v1 = __riscv_vreinterpret_v_u8mf2_i8mf2(x_l); - for (int l=0; l<8; ++l) { - uint8_t h = hm[l]; - y[l+ 0] = d1 * ((int8_t)((q[l+0] >> 0) & 3) - ((h & 0x01) ? 0 : 4)); - y[l+ 8] = d1 * ((int8_t)((q[l+8] >> 0) & 3) - ((h & 0x02) ? 0 : 4)); - y[l+16] = d2 * ((int8_t)((q[l+0] >> 2) & 3) - ((h & 0x04) ? 0 : 4)); - y[l+24] = d2 * ((int8_t)((q[l+8] >> 2) & 3) - ((h & 0x08) ? 0 : 4)); - y[l+32] = d3 * ((int8_t)((q[l+0] >> 4) & 3) - ((h & 0x10) ? 0 : 4)); - y[l+40] = d3 * ((int8_t)((q[l+8] >> 4) & 3) - ((h & 0x20) ? 0 : 4)); - y[l+48] = d4 * ((int8_t)((q[l+0] >> 6) & 3) - ((h & 0x40) ? 0 : 4)); - y[l+56] = d4 * ((int8_t)((q[l+8] >> 6) & 3) - ((h & 0x80) ? 0 : 4)); + vint16m1_t vec_mul1 = __riscv_vwmul_vv_i16m1(v0, y0, vl); + vint16m1_t vec_mul2 = __riscv_vwmul_vv_i16m1(v1, y1, vl); + + vint32m1_t vec_zero = __riscv_vmv_v_x_i32m1(0, vl); + + vint32m1_t vs1 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul1, vec_zero, vl); + vint32m1_t vs2 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul2, vs1, vl); + + int sumi = __riscv_vmv_x_s_i32m1_i32(vs2); + + sumf += (ggml_fp16_to_fp32(x[i].d)*y[i].d)*sumi + ggml_fp16_to_fp32(x[i].m)*y[i].s; + } + + *s = sumf; +#else + // scalar + float sumf = 0.0; + + for (int i = 0; i < nb; i++) { + int sumi = 0; + + for (int j = 0; j < qk/2; ++j) { + const int v0 = (x[i].qs[j] & 0x0F); + const int v1 = (x[i].qs[j] >> 4); + + sumi += (v0 * y[i].qs[j]) + (v1 * y[i].qs[j + qk/2]); } - y += QK_K; + + sumf += (ggml_fp16_to_fp32(x[i].d)*y[i].d)*sumi + ggml_fp16_to_fp32(x[i].m)*y[i].s; } + + *s = sumf; +#endif } + +void ggml_vec_dot_q5_0_q8_0(const int n, float * restrict s, const void * restrict vx, const void * restrict vy) { + const int qk = QK8_0; + const int nb = n / qk; + + assert(n % qk == 0); + assert(qk == QK5_0); + + const block_q5_0 * restrict x = vx; + const block_q8_0 * restrict y = vy; + +#if defined(__ARM_NEON) + float32x4_t sumv0 = vdupq_n_f32(0.0f); + float32x4_t sumv1 = vdupq_n_f32(0.0f); + + uint32_t qh0; + uint32_t qh1; + + uint64_t tmp0[4]; + uint64_t tmp1[4]; + + assert(nb % 2 == 0); // TODO: handle odd nb + + for (int i = 0; i < nb; i += 2) { + const block_q5_0 * restrict x0 = &x[i]; + const block_q5_0 * restrict x1 = &x[i + 1]; + const block_q8_0 * restrict y0 = &y[i]; + const block_q8_0 * restrict y1 = &y[i + 1]; + + const uint8x16_t m4b = vdupq_n_u8(0x0F); + + // extract the 5th bit via lookup table ((!b) << 4) + memcpy(&qh0, x0->qh, sizeof(qh0)); + memcpy(&qh1, x1->qh, sizeof(qh1)); + + tmp0[0] = table_b2b_1[(qh0 >> 0) & 0xFF]; + tmp0[1] = table_b2b_1[(qh0 >> 8) & 0xFF]; + tmp0[2] = table_b2b_1[(qh0 >> 16) & 0xFF]; + tmp0[3] = table_b2b_1[(qh0 >> 24) ]; + + tmp1[0] = table_b2b_1[(qh1 >> 0) & 0xFF]; + tmp1[1] = table_b2b_1[(qh1 >> 8) & 0xFF]; + tmp1[2] = table_b2b_1[(qh1 >> 16) & 0xFF]; + tmp1[3] = table_b2b_1[(qh1 >> 24) ]; + + const int8x16_t qhl0 = vld1q_s8((const int8_t *)(tmp0 + 0)); + const int8x16_t qhh0 = vld1q_s8((const int8_t *)(tmp0 + 2)); + const int8x16_t qhl1 = vld1q_s8((const int8_t *)(tmp1 + 0)); + const int8x16_t qhh1 = vld1q_s8((const int8_t *)(tmp1 + 2)); + + const uint8x16_t v0_0 = vld1q_u8(x0->qs); + const uint8x16_t v0_1 = vld1q_u8(x1->qs); + + // 4-bit -> 8-bit + int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8 (v0_0, m4b)); + int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4)); + int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8 (v0_1, m4b)); + int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4)); + + // add high bit and sub 16 (equivalent to sub 0x10 when bit is zero) + const int8x16_t v0_0lf = vsubq_s8(v0_0l, qhl0); + const int8x16_t v0_0hf = vsubq_s8(v0_0h, qhh0); + const int8x16_t v0_1lf = vsubq_s8(v0_1l, qhl1); + const int8x16_t v0_1hf = vsubq_s8(v0_1h, qhh1); + + // load y + const int8x16_t v1_0l = vld1q_s8(y0->qs); + const int8x16_t v1_0h = vld1q_s8(y0->qs + 16); + const int8x16_t v1_1l = vld1q_s8(y1->qs); + const int8x16_t v1_1h = vld1q_s8(y1->qs + 16); + +#if defined(__ARM_FEATURE_DOTPROD) + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32( + vdotq_s32(vdupq_n_s32(0), v0_0lf, v1_0l), + vdotq_s32(vdupq_n_s32(0), v0_0hf, v1_0h))), ggml_fp16_to_fp32(x0->d)*ggml_fp16_to_fp32(y0->d)); + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32( + vdotq_s32(vdupq_n_s32(0), v0_1lf, v1_1l), + vdotq_s32(vdupq_n_s32(0), v0_1hf, v1_1h))), ggml_fp16_to_fp32(x1->d)*ggml_fp16_to_fp32(y1->d)); +#else + const int16x8_t pl0l = vmull_s8(vget_low_s8 (v0_0lf), vget_low_s8 (v1_0l)); + const int16x8_t pl0h = vmull_s8(vget_high_s8(v0_0lf), vget_high_s8(v1_0l)); + const int16x8_t ph0l = vmull_s8(vget_low_s8 (v0_0hf), vget_low_s8 (v1_0h)); + const int16x8_t ph0h = vmull_s8(vget_high_s8(v0_0hf), vget_high_s8(v1_0h)); + + const int16x8_t pl1l = vmull_s8(vget_low_s8 (v0_1lf), vget_low_s8 (v1_1l)); + const int16x8_t pl1h = vmull_s8(vget_high_s8(v0_1lf), vget_high_s8(v1_1l)); + const int16x8_t ph1l = vmull_s8(vget_low_s8 (v0_1hf), vget_low_s8 (v1_1h)); + const int16x8_t ph1h = vmull_s8(vget_high_s8(v0_1hf), vget_high_s8(v1_1h)); + + const int32x4_t pl0 = vaddq_s32(vpaddlq_s16(pl0l), vpaddlq_s16(pl0h)); + const int32x4_t ph0 = vaddq_s32(vpaddlq_s16(ph0l), vpaddlq_s16(ph0h)); + const int32x4_t pl1 = vaddq_s32(vpaddlq_s16(pl1l), vpaddlq_s16(pl1h)); + const int32x4_t ph1 = vaddq_s32(vpaddlq_s16(ph1l), vpaddlq_s16(ph1h)); + + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(pl0, ph0)), ggml_fp16_to_fp32(x0->d)*ggml_fp16_to_fp32(y0->d)); + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(pl1, ph1)), ggml_fp16_to_fp32(x1->d)*ggml_fp16_to_fp32(y1->d)); #endif + } -void quantize_row_q3_K(const float * restrict x, void * restrict vy, int k) { - quantize_row_q3_K_reference(x, vy, k); -} + *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1); +#elif defined(__wasm_simd128__) + v128_t sumv = wasm_f32x4_splat(0.0f); -size_t ggml_quantize_q3_K(const float * restrict src, void * restrict dst, int n, int k, int64_t * restrict hist) { - (void)hist; // TODO: collect histograms + uint32_t qh; + uint64_t tmp[4]; - for (int j = 0; j < n; j += k) { - block_q3_K * restrict y = (block_q3_K *)dst + j/QK_K; - quantize_row_q3_K_reference(src + j, y, k); + // TODO: check if unrolling this is better + for (int i = 0; i < nb; ++i) { + const block_q5_0 * restrict x0 = &x[i]; + const block_q8_0 * restrict y0 = &y[i]; + + const v128_t m4b = wasm_i8x16_splat(0x0F); + + // extract the 5th bit + memcpy(&qh, x0->qh, sizeof(qh)); + + tmp[0] = table_b2b_1[(qh >> 0) & 0xFF]; + tmp[1] = table_b2b_1[(qh >> 8) & 0xFF]; + tmp[2] = table_b2b_1[(qh >> 16) & 0xFF]; + tmp[3] = table_b2b_1[(qh >> 24) ]; + + const v128_t qhl = wasm_v128_load(tmp + 0); + const v128_t qhh = wasm_v128_load(tmp + 2); + + const v128_t v0 = wasm_v128_load(x0->qs); + + // 4-bit -> 8-bit + const v128_t v0l = wasm_v128_and (v0, m4b); + const v128_t v0h = wasm_u8x16_shr(v0, 4); + + // add high bit and sub 16 (equivalent to sub 0x10 when bit is zero) + const v128_t v0lf = wasm_i8x16_sub(v0l, qhl); + const v128_t v0hf = wasm_i8x16_sub(v0h, qhh); + + // load y + const v128_t v1l = wasm_v128_load(y0->qs); + const v128_t v1h = wasm_v128_load(y0->qs + 16); + + // int8x16 -> int16x8 + const v128_t v0lfl = wasm_i16x8_extend_low_i8x16 (v0lf); + const v128_t v0lfh = wasm_i16x8_extend_high_i8x16(v0lf); + const v128_t v0hfl = wasm_i16x8_extend_low_i8x16 (v0hf); + const v128_t v0hfh = wasm_i16x8_extend_high_i8x16(v0hf); + + const v128_t v1ll = wasm_i16x8_extend_low_i8x16 (v1l); + const v128_t v1lh = wasm_i16x8_extend_high_i8x16(v1l); + const v128_t v1hl = wasm_i16x8_extend_low_i8x16 (v1h); + const v128_t v1hh = wasm_i16x8_extend_high_i8x16(v1h); + + // dot product + sumv = wasm_f32x4_add(sumv, wasm_f32x4_mul(wasm_f32x4_convert_i32x4( + wasm_i32x4_add( + wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0lfl, v1ll), + wasm_i32x4_dot_i16x8(v0lfh, v1lh)), + wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0hfl, v1hl), + wasm_i32x4_dot_i16x8(v0hfh, v1hh)))), + wasm_f32x4_splat(ggml_fp16_to_fp32(x0->d) * ggml_fp16_to_fp32(y0->d)))); } - return (n/QK_K*sizeof(block_q3_K)); -} -// ====================== 4-bit (de)-quantization + *s = wasm_f32x4_extract_lane(sumv, 0) + wasm_f32x4_extract_lane(sumv, 1) + + wasm_f32x4_extract_lane(sumv, 2) + wasm_f32x4_extract_lane(sumv, 3); +#elif defined(__AVX2__) + // Initialize accumulator with zeros + __m256 acc = _mm256_setzero_ps(); -void quantize_row_q4_K_reference(const float * restrict x, block_q4_K * restrict y, int k) { - assert(k % QK_K == 0); - const int nb = k / QK_K; + // Main loop + for (int i = 0; i < nb; i++) { + /* Compute combined scale for the block */ + const __m256 d = _mm256_set1_ps(ggml_fp16_to_fp32(x[i].d) * ggml_fp16_to_fp32(y[i].d)); - uint8_t L[QK_K]; - uint8_t Laux[32]; - float weights[32]; - float mins[QK_K/32]; - float scales[QK_K/32]; + __m256i bx = bytes_from_nibbles_32(x[i].qs); + __m256i bxhi = bytes_from_bits_32(x[i].qh); + bxhi = _mm256_andnot_si256(bxhi, _mm256_set1_epi8((char)0xF0)); + bx = _mm256_or_si256(bx, bxhi); + + __m256i by = _mm256_loadu_si256((const __m256i *)y[i].qs); + + const __m256 q = mul_sum_i8_pairs_float(bx, by); + + /* Multiply q with scale and accumulate */ + acc = _mm256_fmadd_ps(d, q, acc); + } + + *s = hsum_float_8(acc); +#elif defined(__AVX__) + // Initialize accumulator with zeros + __m256 acc = _mm256_setzero_ps(); + __m128i mask = _mm_set1_epi8((char)0xF0); + // Main loop for (int i = 0; i < nb; i++) { + /* Compute combined scale for the block */ + const __m256 d = _mm256_set1_ps(ggml_fp16_to_fp32(x[i].d) * ggml_fp16_to_fp32(y[i].d)); + + __m256i bx = bytes_from_nibbles_32(x[i].qs); + const __m256i bxhi = bytes_from_bits_32(x[i].qh); + __m128i bxhil = _mm256_castsi256_si128(bxhi); + __m128i bxhih = _mm256_extractf128_si256(bxhi, 1); + bxhil = _mm_andnot_si128(bxhil, mask); + bxhih = _mm_andnot_si128(bxhih, mask); + __m128i bxl = _mm256_castsi256_si128(bx); + __m128i bxh = _mm256_extractf128_si256(bx, 1); + bxl = _mm_or_si128(bxl, bxhil); + bxh = _mm_or_si128(bxh, bxhih); + bx = MM256_SET_M128I(bxh, bxl); + + const __m256i by = _mm256_loadu_si256((const __m256i *)y[i].qs); + + const __m256 q = mul_sum_i8_pairs_float(bx, by); + + /* Multiply q with scale and accumulate */ + acc = _mm256_add_ps(_mm256_mul_ps(d, q), acc); + } - float max_scale = 0; // as we are deducting the min, scales are always positive - float max_min = 0; - for (int j = 0; j < QK_K/32; ++j) { - //scales[j] = make_qkx1_quants(32, 15, x + 32*j, L + 32*j, &mins[j], 9, 0.5f); - float sum_x2 = 0; - for (int l = 0; l < 32; ++l) sum_x2 += x[32*j + l] * x[32*j + l]; - float av_x = sqrtf(sum_x2/32); - for (int l = 0; l < 32; ++l) weights[l] = av_x + fabsf(x[32*j + l]); - scales[j] = make_qkx2_quants(32, 15, x + 32*j, weights, L + 32*j, &mins[j], Laux, -1.f, 0.1f, 20, false); - float scale = scales[j]; - if (scale > max_scale) { - max_scale = scale; - } - float min = mins[j]; - if (min > max_min) { - max_min = min; - } - } + *s = hsum_float_8(acc); +#elif defined(__riscv_v_intrinsic) + float sumf = 0.0; -#if QK_K == 256 - float inv_scale = max_scale > 0 ? 63.f/max_scale : 0.f; - float inv_min = max_min > 0 ? 63.f/max_min : 0.f; - for (int j = 0; j < QK_K/32; ++j) { - uint8_t ls = nearest_int(inv_scale*scales[j]); - uint8_t lm = nearest_int(inv_min*mins[j]); - ls = MIN(63, ls); - lm = MIN(63, lm); - if (j < 4) { - y[i].scales[j] = ls; - y[i].scales[j+4] = lm; - } else { - y[i].scales[j+4] = (ls & 0xF) | ((lm & 0xF) << 4); - y[i].scales[j-4] |= ((ls >> 4) << 6); - y[i].scales[j-0] |= ((lm >> 4) << 6); - } - } - y[i].d = ggml_fp32_to_fp16(max_scale/63.f); - y[i].dmin = ggml_fp32_to_fp16(max_min/63.f); + uint32_t qh; - uint8_t sc, m; - for (int j = 0; j < QK_K/32; ++j) { - get_scale_min_k4(j, y[i].scales, &sc, &m); - const float d = ggml_fp16_to_fp32(y[i].d) * sc; - if (!d) continue; - const float dm = ggml_fp16_to_fp32(y[i].dmin) * m; - for (int ii = 0; ii < 32; ++ii) { - int l = nearest_int((x[32*j + ii] + dm)/d); - l = MAX(0, MIN(15, l)); - L[32*j + ii] = l; - } - } -#else - const float s_factor = 15.f; - float inv_scale = max_scale > 0 ? s_factor/max_scale : 0.f; - float inv_min = max_min > 0 ? s_factor/max_min : 0.f; - int d1 = nearest_int(inv_scale*scales[0]); - int m1 = nearest_int(inv_min*mins[0]); - int d2 = nearest_int(inv_scale*scales[1]); - int m2 = nearest_int(inv_min*mins[1]); - y[i].scales[0] = d1 | (m1 << 4); - y[i].scales[1] = d2 | (m2 << 4); - y[i].d[0] = ggml_fp32_to_fp16(max_scale/s_factor); - y[i].d[1] = ggml_fp32_to_fp16(max_min/s_factor); + size_t vl = __riscv_vsetvl_e8m1(qk/2); - float sumlx = 0; - int suml2 = 0; - for (int j = 0; j < QK_K/32; ++j) { - const uint8_t sd = y[i].scales[j] & 0xF; - const uint8_t sm = y[i].scales[j] >> 4; - const float d = ggml_fp16_to_fp32(y[i].d[0]) * sd; - if (!d) continue; - const float m = ggml_fp16_to_fp32(y[i].d[1]) * sm; - for (int ii = 0; ii < 32; ++ii) { - int l = nearest_int((x[32*j + ii] + m)/d); - l = MAX(0, MIN(15, l)); - L[32*j + ii] = l; - sumlx += (x[32*j + ii] + m)*l*sd; - suml2 += l*l*sd*sd; - } - } - if (suml2) { - y[i].d[0] = ggml_fp32_to_fp16(sumlx/suml2); - } -#endif - uint8_t * q = y[i].qs; - for (int j = 0; j < QK_K; j += 64) { - for (int l = 0; l < 32; ++l) q[l] = L[j + l] | (L[j + l + 32] << 4); - q += 32; - } + // These tempory registers are for masking and shift operations + vuint32m2_t vt_1 = __riscv_vid_v_u32m2(vl); + vuint32m2_t vt_2 = __riscv_vsll_vv_u32m2(__riscv_vmv_v_x_u32m2(1, vl), vt_1, vl); + + vuint32m2_t vt_3 = __riscv_vsll_vx_u32m2(vt_2, 16, vl); + vuint32m2_t vt_4 = __riscv_vadd_vx_u32m2(vt_1, 12, vl); + + for (int i = 0; i < nb; i++) { + memcpy(&qh, x[i].qh, sizeof(uint32_t)); + + // ((qh & (1u << (j + 0 ))) >> (j + 0 )) << 4; + vuint32m2_t xha_0 = __riscv_vand_vx_u32m2(vt_2, qh, vl); + vuint32m2_t xhr_0 = __riscv_vsrl_vv_u32m2(xha_0, vt_1, vl); + vuint32m2_t xhl_0 = __riscv_vsll_vx_u32m2(xhr_0, 4, vl); + + // ((qh & (1u << (j + 16))) >> (j + 12)); + vuint32m2_t xha_1 = __riscv_vand_vx_u32m2(vt_3, qh, vl); + vuint32m2_t xhl_1 = __riscv_vsrl_vv_u32m2(xha_1, vt_4, vl); + + // narrowing + vuint16m1_t xhc_0 = __riscv_vncvt_x_x_w_u16m1(xhl_0, vl); + vuint8mf2_t xh_0 = __riscv_vncvt_x_x_w_u8mf2(xhc_0, vl); + + vuint16m1_t xhc_1 = __riscv_vncvt_x_x_w_u16m1(xhl_1, vl); + vuint8mf2_t xh_1 = __riscv_vncvt_x_x_w_u8mf2(xhc_1, vl); + + // load + vuint8mf2_t tx = __riscv_vle8_v_u8mf2(x[i].qs, vl); + + vint8mf2_t y0 = __riscv_vle8_v_i8mf2(y[i].qs, vl); + vint8mf2_t y1 = __riscv_vle8_v_i8mf2(y[i].qs+16, vl); + + vuint8mf2_t x_at = __riscv_vand_vx_u8mf2(tx, 0x0F, vl); + vuint8mf2_t x_lt = __riscv_vsrl_vx_u8mf2(tx, 0x04, vl); + + vuint8mf2_t x_a = __riscv_vor_vv_u8mf2(x_at, xh_0, vl); + vuint8mf2_t x_l = __riscv_vor_vv_u8mf2(x_lt, xh_1, vl); + + vint8mf2_t x_ai = __riscv_vreinterpret_v_u8mf2_i8mf2(x_a); + vint8mf2_t x_li = __riscv_vreinterpret_v_u8mf2_i8mf2(x_l); - x += QK_K; + vint8mf2_t v0 = __riscv_vsub_vx_i8mf2(x_ai, 16, vl); + vint8mf2_t v1 = __riscv_vsub_vx_i8mf2(x_li, 16, vl); + + vint16m1_t vec_mul1 = __riscv_vwmul_vv_i16m1(v0, y0, vl); + vint16m1_t vec_mul2 = __riscv_vwmul_vv_i16m1(v1, y1, vl); + + vint32m1_t vec_zero = __riscv_vmv_v_x_i32m1(0, vl); + + vint32m1_t vs1 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul1, vec_zero, vl); + vint32m1_t vs2 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul2, vs1, vl); + int sumi = __riscv_vmv_x_s_i32m1_i32(vs2); + + sumf += (ggml_fp16_to_fp32(x[i].d)*ggml_fp16_to_fp32(y[i].d)) * sumi; } -} -void dequantize_row_q4_K(const block_q4_K * restrict x, float * restrict y, int k) { - assert(k % QK_K == 0); - const int nb = k / QK_K; + *s = sumf; +#else + // scalar + float sumf = 0.0; for (int i = 0; i < nb; i++) { + uint32_t qh; + memcpy(&qh, x[i].qh, sizeof(qh)); - const uint8_t * q = x[i].qs; + int sumi = 0; -#if QK_K == 256 + for (int j = 0; j < qk/2; ++j) { + const uint8_t xh_0 = ((qh & (1u << (j + 0 ))) >> (j + 0 )) << 4; + const uint8_t xh_1 = ((qh & (1u << (j + 16))) >> (j + 12)); - const float d = ggml_fp16_to_fp32(x[i].d); - const float min = ggml_fp16_to_fp32(x[i].dmin); + const int32_t x0 = ((x[i].qs[j] & 0x0F) | xh_0) - 16; + const int32_t x1 = ((x[i].qs[j] >> 4) | xh_1) - 16; - int is = 0; - uint8_t sc, m; - for (int j = 0; j < QK_K; j += 64) { - get_scale_min_k4(is + 0, x[i].scales, &sc, &m); - const float d1 = d * sc; const float m1 = min * m; - get_scale_min_k4(is + 1, x[i].scales, &sc, &m); - const float d2 = d * sc; const float m2 = min * m; - for (int l = 0; l < 32; ++l) *y++ = d1 * (q[l] & 0xF) - m1; - for (int l = 0; l < 32; ++l) *y++ = d2 * (q[l] >> 4) - m2; - q += 32; is += 2; - } -#else - const float dall = ggml_fp16_to_fp32(x[i].d[0]); - const float mall = ggml_fp16_to_fp32(x[i].d[1]); - const float d1 = dall * (x[i].scales[0] & 0xF), m1 = mall * (x[i].scales[0] >> 4); - const float d2 = dall * (x[i].scales[1] & 0xF), m2 = mall * (x[i].scales[1] >> 4); - for (int l = 0; l < 32; ++l) { - y[l+ 0] = d1 * (q[l] & 0xF) - m1; - y[l+32] = d2 * (q[l] >> 4) - m2; + sumi += (x0 * y[i].qs[j]) + (x1 * y[i].qs[j + qk/2]); } - y += QK_K; -#endif + sumf += (ggml_fp16_to_fp32(x[i].d)*ggml_fp16_to_fp32(y[i].d)) * sumi; } -} -void quantize_row_q4_K(const float * restrict x, void * restrict vy, int k) { - assert(k % QK_K == 0); - block_q4_K * restrict y = vy; - quantize_row_q4_K_reference(x, y, k); + *s = sumf; +#endif } -size_t ggml_quantize_q4_K(const float * restrict src, void * restrict dst, int n, int k, int64_t * restrict hist) { - assert(k % QK_K == 0); - (void)hist; // TODO: collect histograms +void ggml_vec_dot_q5_1_q8_1(const int n, float * restrict s, const void * restrict vx, const void * restrict vy) { + const int qk = QK8_1; + const int nb = n / qk; - for (int j = 0; j < n; j += k) { - block_q4_K * restrict y = (block_q4_K *)dst + j/QK_K; - quantize_row_q4_K_reference(src + j, y, k); - } - return (n/QK_K*sizeof(block_q4_K)); -} + assert(n % qk == 0); + assert(qk == QK5_1); -// ====================== 5-bit (de)-quantization + const block_q5_1 * restrict x = vx; + const block_q8_1 * restrict y = vy; -void quantize_row_q5_K_reference(const float * restrict x, block_q5_K * restrict y, int k) { - assert(k % QK_K == 0); - const int nb = k / QK_K; +#if defined(__ARM_NEON) + float32x4_t sumv0 = vdupq_n_f32(0.0f); + float32x4_t sumv1 = vdupq_n_f32(0.0f); -#if QK_K == 256 - uint8_t L[QK_K]; - float mins[QK_K/32]; - float scales[QK_K/32]; - float weights[32]; - uint8_t Laux[32]; + float summs0 = 0.0f; + float summs1 = 0.0f; + + uint32_t qh0; + uint32_t qh1; + + uint64_t tmp0[4]; + uint64_t tmp1[4]; + + assert(nb % 2 == 0); // TODO: handle odd nb + + for (int i = 0; i < nb; i += 2) { + const block_q5_1 * restrict x0 = &x[i]; + const block_q5_1 * restrict x1 = &x[i + 1]; + const block_q8_1 * restrict y0 = &y[i]; + const block_q8_1 * restrict y1 = &y[i + 1]; + + const uint8x16_t m4b = vdupq_n_u8(0x0F); + + summs0 += ggml_fp16_to_fp32(x0->m) * y0->s; + summs1 += ggml_fp16_to_fp32(x1->m) * y1->s; + + // extract the 5th bit via lookup table ((b) << 4) + memcpy(&qh0, x0->qh, sizeof(qh0)); + memcpy(&qh1, x1->qh, sizeof(qh1)); + + tmp0[0] = table_b2b_0[(qh0 >> 0) & 0xFF]; + tmp0[1] = table_b2b_0[(qh0 >> 8) & 0xFF]; + tmp0[2] = table_b2b_0[(qh0 >> 16) & 0xFF]; + tmp0[3] = table_b2b_0[(qh0 >> 24) ]; + + tmp1[0] = table_b2b_0[(qh1 >> 0) & 0xFF]; + tmp1[1] = table_b2b_0[(qh1 >> 8) & 0xFF]; + tmp1[2] = table_b2b_0[(qh1 >> 16) & 0xFF]; + tmp1[3] = table_b2b_0[(qh1 >> 24) ]; + + const int8x16_t qhl0 = vld1q_s8((const int8_t *)(tmp0 + 0)); + const int8x16_t qhh0 = vld1q_s8((const int8_t *)(tmp0 + 2)); + const int8x16_t qhl1 = vld1q_s8((const int8_t *)(tmp1 + 0)); + const int8x16_t qhh1 = vld1q_s8((const int8_t *)(tmp1 + 2)); + + const uint8x16_t v0_0 = vld1q_u8(x0->qs); + const uint8x16_t v0_1 = vld1q_u8(x1->qs); + + // 4-bit -> 8-bit + const int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8 (v0_0, m4b)); + const int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4)); + const int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8 (v0_1, m4b)); + const int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4)); + + // add high bit + const int8x16_t v0_0lf = vorrq_s8(v0_0l, qhl0); + const int8x16_t v0_0hf = vorrq_s8(v0_0h, qhh0); + const int8x16_t v0_1lf = vorrq_s8(v0_1l, qhl1); + const int8x16_t v0_1hf = vorrq_s8(v0_1h, qhh1); + + // load y + const int8x16_t v1_0l = vld1q_s8(y0->qs); + const int8x16_t v1_0h = vld1q_s8(y0->qs + 16); + const int8x16_t v1_1l = vld1q_s8(y1->qs); + const int8x16_t v1_1h = vld1q_s8(y1->qs + 16); + +#if defined(__ARM_FEATURE_DOTPROD) + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32( + vdotq_s32(vdupq_n_s32(0), v0_0lf, v1_0l), + vdotq_s32(vdupq_n_s32(0), v0_0hf, v1_0h))), ggml_fp16_to_fp32(x0->d)*y0->d); + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32( + vdotq_s32(vdupq_n_s32(0), v0_1lf, v1_1l), + vdotq_s32(vdupq_n_s32(0), v0_1hf, v1_1h))), ggml_fp16_to_fp32(x1->d)*y1->d); #else - int8_t L[QK_K]; - float scales[QK_K/16]; + const int16x8_t pl0l = vmull_s8(vget_low_s8 (v0_0lf), vget_low_s8 (v1_0l)); + const int16x8_t pl0h = vmull_s8(vget_high_s8(v0_0lf), vget_high_s8(v1_0l)); + const int16x8_t ph0l = vmull_s8(vget_low_s8 (v0_0hf), vget_low_s8 (v1_0h)); + const int16x8_t ph0h = vmull_s8(vget_high_s8(v0_0hf), vget_high_s8(v1_0h)); + + const int16x8_t pl1l = vmull_s8(vget_low_s8 (v0_1lf), vget_low_s8 (v1_1l)); + const int16x8_t pl1h = vmull_s8(vget_high_s8(v0_1lf), vget_high_s8(v1_1l)); + const int16x8_t ph1l = vmull_s8(vget_low_s8 (v0_1hf), vget_low_s8 (v1_1h)); + const int16x8_t ph1h = vmull_s8(vget_high_s8(v0_1hf), vget_high_s8(v1_1h)); + + const int32x4_t pl0 = vaddq_s32(vpaddlq_s16(pl0l), vpaddlq_s16(pl0h)); + const int32x4_t ph0 = vaddq_s32(vpaddlq_s16(ph0l), vpaddlq_s16(ph0h)); + const int32x4_t pl1 = vaddq_s32(vpaddlq_s16(pl1l), vpaddlq_s16(pl1h)); + const int32x4_t ph1 = vaddq_s32(vpaddlq_s16(ph1l), vpaddlq_s16(ph1h)); + + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(pl0, ph0)), ggml_fp16_to_fp32(x0->d)*y0->d); + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(pl1, ph1)), ggml_fp16_to_fp32(x1->d)*y1->d); #endif + } - for (int i = 0; i < nb; i++) { + *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1) + summs0 + summs1; +#elif defined(__wasm_simd128__) + v128_t sumv = wasm_f32x4_splat(0.0f); -#if QK_K == 256 + float summs = 0.0f; - float max_scale = 0; // as we are deducting the min, scales are always positive - float max_min = 0; - for (int j = 0; j < QK_K/32; ++j) { - //scales[j] = make_qkx1_quants(32, 31, x + 32*j, L + 32*j, &mins[j], 9, 0.5f); - float sum_x2 = 0; - for (int l = 0; l < 32; ++l) sum_x2 += x[32*j + l] * x[32*j + l]; - float av_x = sqrtf(sum_x2/32); - for (int l = 0; l < 32; ++l) weights[l] = av_x + fabsf(x[32*j + l]); - scales[j] = make_qkx2_quants(32, 31, x + 32*j, weights, L + 32*j, &mins[j], Laux, -0.5f, 0.1f, 15, false); - float scale = scales[j]; - if (scale > max_scale) { - max_scale = scale; - } - float min = mins[j]; - if (min > max_min) { - max_min = min; - } - } + uint32_t qh; + uint64_t tmp[4]; - float inv_scale = max_scale > 0 ? 63.f/max_scale : 0.f; - float inv_min = max_min > 0 ? 63.f/max_min : 0.f; - for (int j = 0; j < QK_K/32; ++j) { - uint8_t ls = nearest_int(inv_scale*scales[j]); - uint8_t lm = nearest_int(inv_min*mins[j]); - ls = MIN(63, ls); - lm = MIN(63, lm); - if (j < 4) { - y[i].scales[j] = ls; - y[i].scales[j+4] = lm; - } else { - y[i].scales[j+4] = (ls & 0xF) | ((lm & 0xF) << 4); - y[i].scales[j-4] |= ((ls >> 4) << 6); - y[i].scales[j-0] |= ((lm >> 4) << 6); - } - } - y[i].d = ggml_fp32_to_fp16(max_scale/63.f); - y[i].dmin = ggml_fp32_to_fp16(max_min/63.f); + // TODO: check if unrolling this is better + for (int i = 0; i < nb; ++i) { + const block_q5_1 * restrict x0 = &x[i]; + const block_q8_1 * restrict y0 = &y[i]; - uint8_t sc, m; - for (int j = 0; j < QK_K/32; ++j) { - get_scale_min_k4(j, y[i].scales, &sc, &m); - const float d = ggml_fp16_to_fp32(y[i].d) * sc; - if (!d) continue; - const float dm = ggml_fp16_to_fp32(y[i].dmin) * m; - for (int ii = 0; ii < 32; ++ii) { - int l = nearest_int((x[32*j + ii] + dm)/d); - l = MAX(0, MIN(31, l)); - L[32*j + ii] = l; - } - } + summs += ggml_fp16_to_fp32(x0->m) * y0->s; - uint8_t * restrict qh = y[i].qh; - uint8_t * restrict ql = y[i].qs; - memset(qh, 0, QK_K/8); + const v128_t m4b = wasm_i8x16_splat(0x0F); - uint8_t m1 = 1, m2 = 2; - for (int n = 0; n < QK_K; n += 64) { - for (int j = 0; j < 32; ++j) { - int l1 = L[n + j]; - if (l1 > 15) { - l1 -= 16; qh[j] |= m1; - } - int l2 = L[n + j + 32]; - if (l2 > 15) { - l2 -= 16; qh[j] |= m2; - } - ql[j] = l1 | (l2 << 4); - } - m1 <<= 2; m2 <<= 2; - ql += 32; - } -#else - float max_scale = 0, amax = 0; - for (int j = 0; j < QK_K/16; ++j) { - scales[j] = make_qx_quants(16, 16, x + 16*j, L + 16*j, 1); - float abs_scale = fabsf(scales[j]); - if (abs_scale > amax) { - amax = abs_scale; - max_scale = scales[j]; - } - } + // extract the 5th bit + memcpy(&qh, x0->qh, sizeof(qh)); - float iscale = -128.f/max_scale; - for (int j = 0; j < QK_K/16; ++j) { - int l = nearest_int(iscale*scales[j]); - y[i].scales[j] = MAX(-128, MIN(127, l)); - } - y[i].d = ggml_fp32_to_fp16(1/iscale); + tmp[0] = table_b2b_0[(qh >> 0) & 0xFF]; + tmp[1] = table_b2b_0[(qh >> 8) & 0xFF]; + tmp[2] = table_b2b_0[(qh >> 16) & 0xFF]; + tmp[3] = table_b2b_0[(qh >> 24) ]; - for (int j = 0; j < QK_K/16; ++j) { - const float d = ggml_fp16_to_fp32(y[i].d) * y[i].scales[j]; - if (!d) continue; - for (int ii = 0; ii < 16; ++ii) { - int l = nearest_int(x[16*j + ii]/d); - l = MAX(-16, MIN(15, l)); - L[16*j + ii] = l + 16; - } - } + const v128_t qhl = wasm_v128_load(tmp + 0); + const v128_t qhh = wasm_v128_load(tmp + 2); - uint8_t * restrict qh = y[i].qh; - uint8_t * restrict ql = y[i].qs; - memset(qh, 0, QK_K/8); + const v128_t v0 = wasm_v128_load(x0->qs); - for (int j = 0; j < 32; ++j) { - int jm = j%8; - int is = j/8; - int l1 = L[j]; - if (l1 > 15) { - l1 -= 16; qh[jm] |= (1 << is); - } - int l2 = L[j + 32]; - if (l2 > 15) { - l2 -= 16; qh[jm] |= (1 << (4 + is)); - } - ql[j] = l1 | (l2 << 4); - } -#endif + // 4-bit -> 8-bit + const v128_t v0l = wasm_v128_and (v0, m4b); + const v128_t v0h = wasm_u8x16_shr(v0, 4); - x += QK_K; + // add high bit + const v128_t v0lf = wasm_v128_or(v0l, qhl); + const v128_t v0hf = wasm_v128_or(v0h, qhh); + + // load y + const v128_t v1l = wasm_v128_load(y0->qs); + const v128_t v1h = wasm_v128_load(y0->qs + 16); + // int8x16 -> int16x8 + const v128_t v0lfl = wasm_i16x8_extend_low_i8x16 (v0lf); + const v128_t v0lfh = wasm_i16x8_extend_high_i8x16(v0lf); + const v128_t v0hfl = wasm_i16x8_extend_low_i8x16 (v0hf); + const v128_t v0hfh = wasm_i16x8_extend_high_i8x16(v0hf); + + const v128_t v1ll = wasm_i16x8_extend_low_i8x16 (v1l); + const v128_t v1lh = wasm_i16x8_extend_high_i8x16(v1l); + const v128_t v1hl = wasm_i16x8_extend_low_i8x16 (v1h); + const v128_t v1hh = wasm_i16x8_extend_high_i8x16(v1h); + + // dot product + sumv = wasm_f32x4_add(sumv, + wasm_f32x4_mul(wasm_f32x4_convert_i32x4(wasm_i32x4_add( + wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0lfl, v1ll), + wasm_i32x4_dot_i16x8(v0lfh, v1lh)), + wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0hfl, v1hl), + wasm_i32x4_dot_i16x8(v0hfh, v1hh)))), + wasm_f32x4_splat(ggml_fp16_to_fp32(x0->d) * y0->d))); } -} -void dequantize_row_q5_K(const block_q5_K * restrict x, float * restrict y, int k) { - assert(k % QK_K == 0); - const int nb = k / QK_K; + *s = wasm_f32x4_extract_lane(sumv, 0) + wasm_f32x4_extract_lane(sumv, 1) + + wasm_f32x4_extract_lane(sumv, 2) + wasm_f32x4_extract_lane(sumv, 3) + summs; +#elif defined(__AVX2__) + // Initialize accumulator with zeros + __m256 acc = _mm256_setzero_ps(); + + float summs = 0.0f; + // Main loop for (int i = 0; i < nb; i++) { + const __m256 dx = _mm256_set1_ps(ggml_fp16_to_fp32(x[i].d)); - const uint8_t * ql = x[i].qs; - const uint8_t * qh = x[i].qh; + summs += ggml_fp16_to_fp32(x[i].m) * y[i].s; -#if QK_K == 256 + __m256i bx = bytes_from_nibbles_32(x[i].qs); + __m256i bxhi = bytes_from_bits_32(x[i].qh); + bxhi = _mm256_and_si256(bxhi, _mm256_set1_epi8(0x10)); + bx = _mm256_or_si256(bx, bxhi); - const float d = ggml_fp16_to_fp32(x[i].d); - const float min = ggml_fp16_to_fp32(x[i].dmin); + const __m256 dy = _mm256_set1_ps(y[i].d); + const __m256i by = _mm256_loadu_si256((const __m256i *)y[i].qs); - int is = 0; - uint8_t sc, m; - uint8_t u1 = 1, u2 = 2; - for (int j = 0; j < QK_K; j += 64) { - get_scale_min_k4(is + 0, x[i].scales, &sc, &m); - const float d1 = d * sc; const float m1 = min * m; - get_scale_min_k4(is + 1, x[i].scales, &sc, &m); - const float d2 = d * sc; const float m2 = min * m; - for (int l = 0; l < 32; ++l) *y++ = d1 * ((ql[l] & 0xF) + (qh[l] & u1 ? 16 : 0)) - m1; - for (int l = 0; l < 32; ++l) *y++ = d2 * ((ql[l] >> 4) + (qh[l] & u2 ? 16 : 0)) - m2; - ql += 32; is += 2; - u1 <<= 2; u2 <<= 2; - } -#else - float d = ggml_fp16_to_fp32(x[i].d); - const int8_t * restrict s = x[i].scales; - for (int l = 0; l < 8; ++l) { - y[l+ 0] = d * s[0] * ((ql[l+ 0] & 0xF) - (qh[l] & 0x01 ? 0 : 16)); - y[l+ 8] = d * s[0] * ((ql[l+ 8] & 0xF) - (qh[l] & 0x02 ? 0 : 16)); - y[l+16] = d * s[1] * ((ql[l+16] & 0xF) - (qh[l] & 0x04 ? 0 : 16)); - y[l+24] = d * s[1] * ((ql[l+24] & 0xF) - (qh[l] & 0x08 ? 0 : 16)); - y[l+32] = d * s[2] * ((ql[l+ 0] >> 4) - (qh[l] & 0x10 ? 0 : 16)); - y[l+40] = d * s[2] * ((ql[l+ 8] >> 4) - (qh[l] & 0x20 ? 0 : 16)); - y[l+48] = d * s[3] * ((ql[l+16] >> 4) - (qh[l] & 0x40 ? 0 : 16)); - y[l+56] = d * s[3] * ((ql[l+24] >> 4) - (qh[l] & 0x80 ? 0 : 16)); - } - y += QK_K; -#endif + const __m256 q = mul_sum_us8_pairs_float(bx, by); + + acc = _mm256_fmadd_ps(q, _mm256_mul_ps(dx, dy), acc); } -} -void quantize_row_q5_K(const float * restrict x, void * restrict vy, int k) { - assert(k % QK_K == 0); - block_q5_K * restrict y = vy; - quantize_row_q5_K_reference(x, y, k); -} + *s = hsum_float_8(acc) + summs; +#elif defined(__AVX__) + // Initialize accumulator with zeros + __m256 acc = _mm256_setzero_ps(); + __m128i mask = _mm_set1_epi8(0x10); -size_t ggml_quantize_q5_K(const float * restrict src, void * restrict dst, int n, int k, int64_t * restrict hist) { - assert(k % QK_K == 0); - (void)hist; // TODO: collect histograms + float summs = 0.0f; - for (int j = 0; j < n; j += k) { - block_q5_K * restrict y = (block_q5_K *)dst + j/QK_K; - quantize_row_q5_K_reference(src + j, y, k); + // Main loop + for (int i = 0; i < nb; i++) { + const __m256 dx = _mm256_set1_ps(ggml_fp16_to_fp32(x[i].d)); + + summs += ggml_fp16_to_fp32(x[i].m) * y[i].s; + + __m256i bx = bytes_from_nibbles_32(x[i].qs); + const __m256i bxhi = bytes_from_bits_32(x[i].qh); + __m128i bxhil = _mm256_castsi256_si128(bxhi); + __m128i bxhih = _mm256_extractf128_si256(bxhi, 1); + bxhil = _mm_and_si128(bxhil, mask); + bxhih = _mm_and_si128(bxhih, mask); + __m128i bxl = _mm256_castsi256_si128(bx); + __m128i bxh = _mm256_extractf128_si256(bx, 1); + bxl = _mm_or_si128(bxl, bxhil); + bxh = _mm_or_si128(bxh, bxhih); + bx = MM256_SET_M128I(bxh, bxl); + + const __m256 dy = _mm256_set1_ps(y[i].d); + const __m256i by = _mm256_loadu_si256((const __m256i *)y[i].qs); + + const __m256 q = mul_sum_us8_pairs_float(bx, by); + + acc = _mm256_add_ps(_mm256_mul_ps(q, _mm256_mul_ps(dx, dy)), acc); } - return (n/QK_K*sizeof(block_q5_K)); -} -// ====================== 6-bit (de)-quantization + *s = hsum_float_8(acc) + summs; +#elif defined(__riscv_v_intrinsic) + float sumf = 0.0; -void quantize_row_q6_K_reference(const float * restrict x, block_q6_K * restrict y, int k) { - assert(k % QK_K == 0); - const int nb = k / QK_K; + uint32_t qh; - int8_t L[QK_K]; - float scales[QK_K/16]; + size_t vl = __riscv_vsetvl_e8m1(qk/2); + + // temporary registers for shift operations + vuint32m2_t vt_1 = __riscv_vid_v_u32m2(vl); + vuint32m2_t vt_2 = __riscv_vadd_vx_u32m2(vt_1, 12, vl); for (int i = 0; i < nb; i++) { + memcpy(&qh, x[i].qh, sizeof(uint32_t)); - float max_scale = 0; - float max_abs_scale = 0; + // load qh + vuint32m2_t vqh = __riscv_vmv_v_x_u32m2(qh, vl); - for (int ib = 0; ib < QK_K/16; ++ib) { + // ((qh >> (j + 0)) << 4) & 0x10; + vuint32m2_t xhr_0 = __riscv_vsrl_vv_u32m2(vqh, vt_1, vl); + vuint32m2_t xhl_0 = __riscv_vsll_vx_u32m2(xhr_0, 4, vl); + vuint32m2_t xha_0 = __riscv_vand_vx_u32m2(xhl_0, 0x10, vl); - const float scale = make_qx_quants(16, 32, x + 16*ib, L + 16*ib, 1); - scales[ib] = scale; + // ((qh >> (j + 12)) ) & 0x10; + vuint32m2_t xhr_1 = __riscv_vsrl_vv_u32m2(vqh, vt_2, vl); + vuint32m2_t xha_1 = __riscv_vand_vx_u32m2(xhr_1, 0x10, vl); - const float abs_scale = fabsf(scale); - if (abs_scale > max_abs_scale) { - max_abs_scale = abs_scale; - max_scale = scale; - } + // narrowing + vuint16m1_t xhc_0 = __riscv_vncvt_x_x_w_u16m1(xha_0, vl); + vuint8mf2_t xh_0 = __riscv_vncvt_x_x_w_u8mf2(xhc_0, vl); - } + vuint16m1_t xhc_1 = __riscv_vncvt_x_x_w_u16m1(xha_1, vl); + vuint8mf2_t xh_1 = __riscv_vncvt_x_x_w_u8mf2(xhc_1, vl); - if (!max_abs_scale) { - memset(&y[i], 0, sizeof(block_q6_K)); - y[i].d = ggml_fp32_to_fp16(0.f); - x += QK_K; - continue; - } + // load + vuint8mf2_t tx = __riscv_vle8_v_u8mf2(x[i].qs, vl); - float iscale = -128.f/max_scale; - y[i].d = ggml_fp32_to_fp16(1/iscale); - for (int ib = 0; ib < QK_K/16; ++ib) { - y[i].scales[ib] = MIN(127, nearest_int(iscale*scales[ib])); - } + vint8mf2_t y0 = __riscv_vle8_v_i8mf2(y[i].qs, vl); + vint8mf2_t y1 = __riscv_vle8_v_i8mf2(y[i].qs+16, vl); - for (int j = 0; j < QK_K/16; ++j) { - float d = ggml_fp16_to_fp32(y[i].d) * y[i].scales[j]; - if (!d) { - continue; - } - for (int ii = 0; ii < 16; ++ii) { - int l = nearest_int(x[16*j + ii]/d); - l = MAX(-32, MIN(31, l)); - L[16*j + ii] = l + 32; - } - } + vuint8mf2_t x_at = __riscv_vand_vx_u8mf2(tx, 0x0F, vl); + vuint8mf2_t x_lt = __riscv_vsrl_vx_u8mf2(tx, 0x04, vl); - uint8_t * restrict ql = y[i].ql; - uint8_t * restrict qh = y[i].qh; -#if QK_K == 256 - for (int j = 0; j < QK_K; j += 128) { - for (int l = 0; l < 32; ++l) { - const uint8_t q1 = L[j + l + 0] & 0xF; - const uint8_t q2 = L[j + l + 32] & 0xF; - const uint8_t q3 = L[j + l + 64] & 0xF; - const uint8_t q4 = L[j + l + 96] & 0xF; - ql[l+ 0] = q1 | (q3 << 4); - ql[l+32] = q2 | (q4 << 4); - qh[l] = (L[j + l] >> 4) | ((L[j + l + 32] >> 4) << 2) | ((L[j + l + 64] >> 4) << 4) | ((L[j + l + 96] >> 4) << 6); - } - ql += 64; - qh += 32; - } -#else - for (int l = 0; l < 32; ++l) { - const uint8_t q1 = L[l + 0] & 0xF; - const uint8_t q2 = L[l + 32] & 0xF; - ql[l] = q1 | (q2 << 4); - } - for (int l = 0; l < 16; ++l) { - qh[l] = (L[l] >> 4) | ((L[l + 16] >> 4) << 2) | ((L[l + 32] >> 4) << 4) | ((L[l + 48] >> 4) << 6); - } -#endif + vuint8mf2_t x_a = __riscv_vor_vv_u8mf2(x_at, xh_0, vl); + vuint8mf2_t x_l = __riscv_vor_vv_u8mf2(x_lt, xh_1, vl); - x += QK_K; + vint8mf2_t v0 = __riscv_vreinterpret_v_u8mf2_i8mf2(x_a); + vint8mf2_t v1 = __riscv_vreinterpret_v_u8mf2_i8mf2(x_l); + + vint16m1_t vec_mul1 = __riscv_vwmul_vv_i16m1(v0, y0, vl); + vint16m1_t vec_mul2 = __riscv_vwmul_vv_i16m1(v1, y1, vl); + + vint32m1_t vec_zero = __riscv_vmv_v_x_i32m1(0, vl); + + vint32m1_t vs1 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul1, vec_zero, vl); + vint32m1_t vs2 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul2, vs1, vl); + int sumi = __riscv_vmv_x_s_i32m1_i32(vs2); + + sumf += (ggml_fp16_to_fp32(x[i].d)*y[i].d)*sumi + ggml_fp16_to_fp32(x[i].m)*y[i].s; } -} -void dequantize_row_q6_K(const block_q6_K * restrict x, float * restrict y, int k) { - assert(k % QK_K == 0); - const int nb = k / QK_K; + *s = sumf; +#else + // scalar + float sumf = 0.0; for (int i = 0; i < nb; i++) { + uint32_t qh; + memcpy(&qh, x[i].qh, sizeof(qh)); - const float d = ggml_fp16_to_fp32(x[i].d); + int sumi = 0; - const uint8_t * restrict ql = x[i].ql; - const uint8_t * restrict qh = x[i].qh; - const int8_t * restrict sc = x[i].scales; + for (int j = 0; j < qk/2; ++j) { + const uint8_t xh_0 = ((qh >> (j + 0)) << 4) & 0x10; + const uint8_t xh_1 = ((qh >> (j + 12)) ) & 0x10; -#if QK_K == 256 - for (int n = 0; n < QK_K; n += 128) { - for (int l = 0; l < 32; ++l) { - int is = l/16; - const int8_t q1 = (int8_t)((ql[l + 0] & 0xF) | (((qh[l] >> 0) & 3) << 4)) - 32; - const int8_t q2 = (int8_t)((ql[l + 32] & 0xF) | (((qh[l] >> 2) & 3) << 4)) - 32; - const int8_t q3 = (int8_t)((ql[l + 0] >> 4) | (((qh[l] >> 4) & 3) << 4)) - 32; - const int8_t q4 = (int8_t)((ql[l + 32] >> 4) | (((qh[l] >> 6) & 3) << 4)) - 32; - y[l + 0] = d * sc[is + 0] * q1; - y[l + 32] = d * sc[is + 2] * q2; - y[l + 64] = d * sc[is + 4] * q3; - y[l + 96] = d * sc[is + 6] * q4; - } - y += 128; - ql += 64; - qh += 32; - sc += 8; - } -#else - for (int l = 0; l < 16; ++l) { - const int8_t q1 = (int8_t)((ql[l+ 0] & 0xF) | (((qh[l] >> 0) & 3) << 4)) - 32; - const int8_t q2 = (int8_t)((ql[l+16] & 0xF) | (((qh[l] >> 2) & 3) << 4)) - 32; - const int8_t q3 = (int8_t)((ql[l+ 0] >> 4) | (((qh[l] >> 4) & 3) << 4)) - 32; - const int8_t q4 = (int8_t)((ql[l+16] >> 4) | (((qh[l] >> 6) & 3) << 4)) - 32; - y[l+ 0] = d * sc[0] * q1; - y[l+16] = d * sc[1] * q2; - y[l+32] = d * sc[2] * q3; - y[l+48] = d * sc[3] * q4; + const int32_t x0 = (x[i].qs[j] & 0xF) | xh_0; + const int32_t x1 = (x[i].qs[j] >> 4) | xh_1; + + sumi += (x0 * y[i].qs[j]) + (x1 * y[i].qs[j + qk/2]); } - y += 64; -#endif + sumf += (ggml_fp16_to_fp32(x[i].d)*y[i].d)*sumi + ggml_fp16_to_fp32(x[i].m)*y[i].s; } -} -void quantize_row_q6_K(const float * restrict x, void * restrict vy, int k) { - assert(k % QK_K == 0); - block_q6_K * restrict y = vy; - quantize_row_q6_K_reference(x, y, k); + *s = sumf; +#endif } -size_t ggml_quantize_q6_K(const float * src, void * dst, int n, int k, int64_t * hist) { - assert(k % QK_K == 0); - (void)hist; // TODO: collect histograms +void ggml_vec_dot_q8_0_q8_0(const int n, float * restrict s, const void * restrict vx, const void * restrict vy) { + const int qk = QK8_0; + const int nb = n / qk; - for (int j = 0; j < n; j += k) { - block_q6_K * restrict y = (block_q6_K *)dst + j/QK_K; - quantize_row_q6_K_reference(src + j, y, k); + assert(n % qk == 0); + + const block_q8_0 * restrict x = vx; + const block_q8_0 * restrict y = vy; + +#if defined(__ARM_NEON) + float32x4_t sumv0 = vdupq_n_f32(0.0f); + float32x4_t sumv1 = vdupq_n_f32(0.0f); + + assert(nb % 2 == 0); // TODO: handle odd nb + + for (int i = 0; i < nb; i += 2) { + const block_q8_0 * restrict x0 = &x[i + 0]; + const block_q8_0 * restrict x1 = &x[i + 1]; + const block_q8_0 * restrict y0 = &y[i + 0]; + const block_q8_0 * restrict y1 = &y[i + 1]; + + const int8x16_t x0_0 = vld1q_s8(x0->qs); + const int8x16_t x0_1 = vld1q_s8(x0->qs + 16); + const int8x16_t x1_0 = vld1q_s8(x1->qs); + const int8x16_t x1_1 = vld1q_s8(x1->qs + 16); + + // load y + const int8x16_t y0_0 = vld1q_s8(y0->qs); + const int8x16_t y0_1 = vld1q_s8(y0->qs + 16); + const int8x16_t y1_0 = vld1q_s8(y1->qs); + const int8x16_t y1_1 = vld1q_s8(y1->qs + 16); + +#if defined(__ARM_FEATURE_DOTPROD) + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32( + vdotq_s32(vdupq_n_s32(0), x0_0, y0_0), + vdotq_s32(vdupq_n_s32(0), x0_1, y0_1))), ggml_fp16_to_fp32(x0->d)*ggml_fp16_to_fp32(y0->d)); + + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32( + vdotq_s32(vdupq_n_s32(0), x1_0, y1_0), + vdotq_s32(vdupq_n_s32(0), x1_1, y1_1))), ggml_fp16_to_fp32(x1->d)*ggml_fp16_to_fp32(y1->d)); + +#else + const int16x8_t p0_0 = vmull_s8(vget_low_s8 (x0_0), vget_low_s8 (y0_0)); + const int16x8_t p0_1 = vmull_s8(vget_high_s8(x0_0), vget_high_s8(y0_0)); + const int16x8_t p0_2 = vmull_s8(vget_low_s8 (x0_1), vget_low_s8 (y0_1)); + const int16x8_t p0_3 = vmull_s8(vget_high_s8(x0_1), vget_high_s8(y0_1)); + + const int16x8_t p1_0 = vmull_s8(vget_low_s8 (x1_0), vget_low_s8 (y1_0)); + const int16x8_t p1_1 = vmull_s8(vget_high_s8(x1_0), vget_high_s8(y1_0)); + const int16x8_t p1_2 = vmull_s8(vget_low_s8 (x1_1), vget_low_s8 (y1_1)); + const int16x8_t p1_3 = vmull_s8(vget_high_s8(x1_1), vget_high_s8(y1_1)); + + const int32x4_t p0 = vaddq_s32(vpaddlq_s16(p0_0), vpaddlq_s16(p0_1)); + const int32x4_t p1 = vaddq_s32(vpaddlq_s16(p0_2), vpaddlq_s16(p0_3)); + const int32x4_t p2 = vaddq_s32(vpaddlq_s16(p1_0), vpaddlq_s16(p1_1)); + const int32x4_t p3 = vaddq_s32(vpaddlq_s16(p1_2), vpaddlq_s16(p1_3)); + + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(p0, p1)), ggml_fp16_to_fp32(x0->d)*ggml_fp16_to_fp32(y0->d)); + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(p2, p3)), ggml_fp16_to_fp32(x1->d)*ggml_fp16_to_fp32(y1->d)); +#endif } - return (n/QK_K*sizeof(block_q6_K)); -} -//===================================== Q8_K ============================================== + *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1); +#elif defined(__AVX2__) || defined(__AVX__) + // Initialize accumulator with zeros + __m256 acc = _mm256_setzero_ps(); -void quantize_row_q8_K_reference(const float * restrict x, block_q8_K * restrict y, int k) { - assert(k % QK_K == 0); - const int nb = k / QK_K; + // Main loop + for (int i = 0; i < nb; ++i) { + // Compute combined scale for the block + const __m256 d = _mm256_set1_ps(ggml_fp16_to_fp32(x[i].d) * ggml_fp16_to_fp32(y[i].d)); + __m256i bx = _mm256_loadu_si256((const __m256i *)x[i].qs); + __m256i by = _mm256_loadu_si256((const __m256i *)y[i].qs); - for (int i = 0; i < nb; i++) { + const __m256 q = mul_sum_i8_pairs_float(bx, by); - float max = 0; - float amax = 0; - for (int j = 0; j < QK_K; ++j) { - float ax = fabsf(x[j]); - if (ax > amax) { - amax = ax; max = x[j]; - } - } - if (!amax) { - y[i].d = 0; - memset(y[i].qs, 0, QK_K); - x += QK_K; - continue; - } - const float iscale = -128.f/max; - for (int j = 0; j < QK_K; ++j) { - int v = nearest_int(iscale*x[j]); - y[i].qs[j] = MIN(127, v); - } - for (int j = 0; j < QK_K/16; ++j) { - int sum = 0; - for (int ii = 0; ii < 16; ++ii) { - sum += y[i].qs[j*16 + ii]; - } - y[i].bsums[j] = sum; - } - y[i].d = 1/iscale; - x += QK_K; + // Multiply q with scale and accumulate +#if defined(__AVX2__) + acc = _mm256_fmadd_ps( d, q, acc ); +#else + acc = _mm256_add_ps( _mm256_mul_ps( d, q ), acc ); +#endif } -} -void dequantize_row_q8_K(const block_q8_K * restrict x, float * restrict y, int k) { - assert(k % QK_K == 0); - const int nb = k / QK_K; + *s = hsum_float_8(acc); +#elif defined(__riscv_v_intrinsic) + float sumf = 0.0; + size_t vl = __riscv_vsetvl_e8m1(qk); for (int i = 0; i < nb; i++) { - for (int j = 0; j < QK_K; ++j) { - *y++ = x[i].d * x[i].qs[j]; - } + // load elements + vint8m1_t bx = __riscv_vle8_v_i8m1(x[i].qs, vl); + vint8m1_t by = __riscv_vle8_v_i8m1(y[i].qs, vl); + + vint16m2_t vw_mul = __riscv_vwmul_vv_i16m2(bx, by, vl); + + vint32m1_t v_zero = __riscv_vmv_v_x_i32m1(0, vl); + vint32m1_t v_sum = __riscv_vwredsum_vs_i16m2_i32m1(vw_mul, v_zero, vl); + + int sumi = __riscv_vmv_x_s_i32m1_i32(v_sum); + + sumf += sumi*(ggml_fp16_to_fp32(x[i].d)*ggml_fp16_to_fp32(y[i].d)); } -} -void quantize_row_q8_K(const float * restrict x, void * restrict y, int k) { - quantize_row_q8_K_reference(x, y, k); -} + *s = sumf; +#else + // scalar + float sumf = 0.0; -//===================================== Dot ptoducts ================================= + for (int i = 0; i < nb; i++) { + int sumi = 0; -// -// Helper functions -// -#if __AVX__ || __AVX2__ || __AVX512F__ + for (int j = 0; j < qk; j++) { + sumi += x[i].qs[j]*y[i].qs[j]; + } -// horizontally add 8 floats -static inline float hsum_float_8(const __m256 x) { - __m128 res = _mm256_extractf128_ps(x, 1); - res = _mm_add_ps(res, _mm256_castps256_ps128(x)); - res = _mm_add_ps(res, _mm_movehl_ps(res, res)); - res = _mm_add_ss(res, _mm_movehdup_ps(res)); - return _mm_cvtss_f32(res); -} + sumf += sumi*(ggml_fp16_to_fp32(x[i].d)*ggml_fp16_to_fp32(y[i].d)); + } -// shuffles to pick the required scales in dot products -static inline __m256i get_scale_shuffle_q3k(int i) { - static const uint8_t k_shuffle[128] = { - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, - 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11, - 12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13, 14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15, - }; - return _mm256_loadu_si256((const __m256i*)k_shuffle + i); -} -static inline __m256i get_scale_shuffle_k4(int i) { - static const uint8_t k_shuffle[256] = { - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, - 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, - 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, - 10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11, - 12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13, - 14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15 - }; - return _mm256_loadu_si256((const __m256i*)k_shuffle + i); -} -static inline __m128i get_scale_shuffle(int i) { - static const uint8_t k_shuffle[128] = { - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, - 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, - 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, - 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, - 10,10,10,10,10,10,10,10, 11,11,11,11,11,11,11,11, - 12,12,12,12,12,12,12,12, 13,13,13,13,13,13,13,13, - 14,14,14,14,14,14,14,14, 15,15,15,15,15,15,15,15 - }; - return _mm_loadu_si128((const __m128i*)k_shuffle + i); -} + *s = sumf; #endif +} #if QK_K == 256 void ggml_vec_dot_q2_K_q8_K(const int n, float * restrict s, const void * restrict vx, const void * restrict vy) { diff --git a/k_quants.h b/ggml-quants.h similarity index 63% rename from k_quants.h rename to ggml-quants.h index 9de089e7a47195..d88f99e331f1dd 100644 --- a/k_quants.h +++ b/ggml-quants.h @@ -1,20 +1,14 @@ #pragma once +// This is a private API for quantization and dequantization +// Should not be used directly, use ggml.h instead + #include "ggml.h" #include #include #include -// Super-block size -#ifdef GGML_QKK_64 -#define QK_K 64 -#define K_SCALE_SIZE 4 -#else -#define QK_K 256 -#define K_SCALE_SIZE 12 -#endif - #ifndef static_assert #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201100L) #define static_assert(cond, msg) _Static_assert(cond, msg) @@ -23,10 +17,66 @@ #endif #endif +#define QK4_0 32 +typedef struct { + ggml_fp16_t d; // delta + uint8_t qs[QK4_0 / 2]; // nibbles / quants +} block_q4_0; +static_assert(sizeof(block_q4_0) == sizeof(ggml_fp16_t) + QK4_0 / 2, "wrong q4_0 block size/padding"); + +#define QK4_1 32 +typedef struct { + ggml_fp16_t d; // delta + ggml_fp16_t m; // min + uint8_t qs[QK4_1 / 2]; // nibbles / quants +} block_q4_1; +static_assert(sizeof(block_q4_1) == 2 * sizeof(ggml_fp16_t) + QK4_1 / 2, "wrong q4_1 block size/padding"); + +#define QK5_0 32 +typedef struct { + ggml_fp16_t d; // delta + uint8_t qh[4]; // 5-th bit of quants + uint8_t qs[QK5_0 / 2]; // nibbles / quants +} block_q5_0; +static_assert(sizeof(block_q5_0) == sizeof(ggml_fp16_t) + sizeof(uint32_t) + QK5_0 / 2, "wrong q5_0 block size/padding"); + +#define QK5_1 32 +typedef struct { + ggml_fp16_t d; // delta + ggml_fp16_t m; // min + uint8_t qh[4]; // 5-th bit of quants + uint8_t qs[QK5_1 / 2]; // nibbles / quants +} block_q5_1; +static_assert(sizeof(block_q5_1) == 2 * sizeof(ggml_fp16_t) + sizeof(uint32_t) + QK5_1 / 2, "wrong q5_1 block size/padding"); + +#define QK8_0 32 +typedef struct { + ggml_fp16_t d; // delta + int8_t qs[QK8_0]; // quants +} block_q8_0; +static_assert(sizeof(block_q8_0) == sizeof(ggml_fp16_t) + QK8_0, "wrong q8_0 block size/padding"); + +#define QK8_1 32 +typedef struct { + float d; // delta + float s; // d * sum(qs[i]) + int8_t qs[QK8_1]; // quants +} block_q8_1; +static_assert(sizeof(block_q8_1) == 2*sizeof(float) + QK8_1, "wrong q8_1 block size/padding"); + // // Super-block quantization structures // +// Super-block size +#ifdef GGML_QKK_64 +#define QK_K 64 +#define K_SCALE_SIZE 4 +#else +#define QK_K 256 +#define K_SCALE_SIZE 12 +#endif + // 2-bit quantization // weight is represented as x = a * q + b // 16 blocks of 16 elements each @@ -127,6 +177,13 @@ static_assert(sizeof(block_q8_K) == sizeof(float) + QK_K + QK_K/16*sizeof(int16_ // Quantization +void quantize_row_q4_0_reference(const float * restrict x, block_q4_0 * restrict y, int k); +void quantize_row_q4_1_reference(const float * restrict x, block_q4_1 * restrict y, int k); +void quantize_row_q5_0_reference(const float * restrict x, block_q5_0 * restrict y, int k); +void quantize_row_q5_1_reference(const float * restrict x, block_q5_1 * restrict y, int k); +void quantize_row_q8_0_reference(const float * restrict x, block_q8_0 * restrict y, int k); +void quantize_row_q8_1_reference(const float * restrict x, block_q8_1 * restrict y, int k); + void quantize_row_q2_K_reference(const float * restrict x, block_q2_K * restrict y, int k); void quantize_row_q3_K_reference(const float * restrict x, block_q3_K * restrict y, int k); void quantize_row_q4_K_reference(const float * restrict x, block_q4_K * restrict y, int k); @@ -134,6 +191,13 @@ void quantize_row_q5_K_reference(const float * restrict x, block_q5_K * restrict void quantize_row_q6_K_reference(const float * restrict x, block_q6_K * restrict y, int k); void quantize_row_q8_K_reference(const float * restrict x, block_q8_K * restrict y, int k); +void quantize_row_q4_0(const float * restrict x, void * restrict y, int k); +void quantize_row_q4_1(const float * restrict x, void * restrict y, int k); +void quantize_row_q5_0(const float * restrict x, void * restrict y, int k); +void quantize_row_q5_1(const float * restrict x, void * restrict y, int k); +void quantize_row_q8_0(const float * restrict x, void * restrict y, int k); +void quantize_row_q8_1(const float * restrict x, void * restrict y, int k); + void quantize_row_q2_K(const float * restrict x, void * restrict y, int k); void quantize_row_q3_K(const float * restrict x, void * restrict y, int k); void quantize_row_q4_K(const float * restrict x, void * restrict y, int k); @@ -142,6 +206,13 @@ void quantize_row_q6_K(const float * restrict x, void * restrict y, int k); void quantize_row_q8_K(const float * restrict x, void * restrict y, int k); // Dequantization +void dequantize_row_q4_0(const block_q4_0 * restrict x, float * restrict y, int k); +void dequantize_row_q4_1(const block_q4_1 * restrict x, float * restrict y, int k); +void dequantize_row_q5_0(const block_q5_0 * restrict x, float * restrict y, int k); +void dequantize_row_q5_1(const block_q5_1 * restrict x, float * restrict y, int k); +void dequantize_row_q8_0(const block_q8_0 * restrict x, float * restrict y, int k); +//void dequantize_row_q8_1(const block_q8_1 * restrict x, float * restrict y, int k); + void dequantize_row_q2_K(const block_q2_K * restrict x, float * restrict y, int k); void dequantize_row_q3_K(const block_q3_K * restrict x, float * restrict y, int k); void dequantize_row_q4_K(const block_q4_K * restrict x, float * restrict y, int k); @@ -150,16 +221,14 @@ void dequantize_row_q6_K(const block_q6_K * restrict x, float * restrict y, int void dequantize_row_q8_K(const block_q8_K * restrict x, float * restrict y, int k); // Dot product +void ggml_vec_dot_q4_0_q8_0(int n, float * restrict s, const void * restrict vx, const void * restrict vy); +void ggml_vec_dot_q4_1_q8_1(int n, float * restrict s, const void * restrict vx, const void * restrict vy); +void ggml_vec_dot_q5_0_q8_0(int n, float * restrict s, const void * restrict vx, const void * restrict vy); +void ggml_vec_dot_q5_1_q8_1(int n, float * restrict s, const void * restrict vx, const void * restrict vy); +void ggml_vec_dot_q8_0_q8_0(int n, float * restrict s, const void * restrict vx, const void * restrict vy); + void ggml_vec_dot_q2_K_q8_K(int n, float * restrict s, const void * restrict vx, const void * restrict vy); void ggml_vec_dot_q3_K_q8_K(int n, float * restrict s, const void * restrict vx, const void * restrict vy); void ggml_vec_dot_q4_K_q8_K(int n, float * restrict s, const void * restrict vx, const void * restrict vy); void ggml_vec_dot_q5_K_q8_K(int n, float * restrict s, const void * restrict vx, const void * restrict vy); void ggml_vec_dot_q6_K_q8_K(int n, float * restrict s, const void * restrict vx, const void * restrict vy); - -// Quantization with histogram collection -size_t ggml_quantize_q2_K(const float * src, void * dst, int n, int k, int64_t * hist); -size_t ggml_quantize_q3_K(const float * src, void * dst, int n, int k, int64_t * hist); -size_t ggml_quantize_q4_K(const float * src, void * dst, int n, int k, int64_t * hist); -size_t ggml_quantize_q5_K(const float * src, void * dst, int n, int k, int64_t * hist); -size_t ggml_quantize_q6_K(const float * src, void * dst, int n, int k, int64_t * hist); - diff --git a/ggml.c b/ggml.c index 6f66bab051cea4..95f72c35e8f205 100644 --- a/ggml.c +++ b/ggml.c @@ -1,10 +1,7 @@ #define _CRT_SECURE_NO_DEPRECATE // Disables ridiculous "unsafe" warnigns on Windows #include "ggml.h" - -#ifdef GGML_USE_K_QUANTS -#include "k_quants.h" -#endif +#include "ggml-quants.h" #if defined(_MSC_VER) || defined(__MINGW32__) #include // using malloc.h with MSC/MINGW @@ -443,21 +440,6 @@ static ggml_fp16_t table_exp_f16[1 << 16]; // precomputed f32 table for f16 (256 KB) static float table_f32_f16[1 << 16]; -#if defined(__ARM_NEON) || defined(__wasm_simd128__) -#define B1(c,s,n) 0x ## n ## c , 0x ## n ## s -#define B2(c,s,n) B1(c,s,n ## c), B1(c,s,n ## s) -#define B3(c,s,n) B2(c,s,n ## c), B2(c,s,n ## s) -#define B4(c,s,n) B3(c,s,n ## c), B3(c,s,n ## s) -#define B5(c,s,n) B4(c,s,n ## c), B4(c,s,n ## s) -#define B6(c,s,n) B5(c,s,n ## c), B5(c,s,n ## s) -#define B7(c,s,n) B6(c,s,n ## c), B6(c,s,n ## s) -#define B8(c,s ) B7(c,s, c), B7(c,s, s) - -// precomputed tables for expanding 8bits to 8 bytes: -static const uint64_t table_b2b_0[1 << 8] = { B8(00, 10) }; // ( b) << 4 -static const uint64_t table_b2b_1[1 << 8] = { B8(10, 00) }; // (!b) << 4 -#endif - // On ARM NEON, it's quicker to directly convert x -> x instead of calling into ggml_lookup_fp16_to_fp32, // so we define GGML_FP16_TO_FP32 and GGML_FP32_TO_FP16 elsewhere for NEON. // This is also true for POWER9. @@ -587,3071 +569,794 @@ int64_t ggml_cycles_per_ms(void) { static const size_t CACHE_LINE_SIZE_F32 = CACHE_LINE_SIZE/sizeof(float); -// -// quantization -// - -#define MM256_SET_M128I(a, b) _mm256_insertf128_si256(_mm256_castsi128_si256(b), (a), 1) - -#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) || defined(__SSSE3__) -// multiply int8_t, add results pairwise twice -static inline __m128i mul_sum_i8_pairs(const __m128i x, const __m128i y) { - // Get absolute values of x vectors - const __m128i ax = _mm_sign_epi8(x, x); - // Sign the values of the y vectors - const __m128i sy = _mm_sign_epi8(y, x); - // Perform multiplication and create 16-bit values - const __m128i dot = _mm_maddubs_epi16(ax, sy); - const __m128i ones = _mm_set1_epi16(1); - return _mm_madd_epi16(ones, dot); -} - -#if __AVX__ || __AVX2__ || __AVX512F__ -// horizontally add 8 floats -static inline float hsum_float_8(const __m256 x) { - __m128 res = _mm256_extractf128_ps(x, 1); - res = _mm_add_ps(res, _mm256_castps256_ps128(x)); - res = _mm_add_ps(res, _mm_movehl_ps(res, res)); - res = _mm_add_ss(res, _mm_movehdup_ps(res)); - return _mm_cvtss_f32(res); -} - -// horizontally add 8 int32_t -static inline int hsum_i32_8(const __m256i a) { - const __m128i sum128 = _mm_add_epi32(_mm256_castsi256_si128(a), _mm256_extractf128_si256(a, 1)); - const __m128i hi64 = _mm_unpackhi_epi64(sum128, sum128); - const __m128i sum64 = _mm_add_epi32(hi64, sum128); - const __m128i hi32 = _mm_shuffle_epi32(sum64, _MM_SHUFFLE(2, 3, 0, 1)); - return _mm_cvtsi128_si32(_mm_add_epi32(sum64, hi32)); -} - -// horizontally add 4 int32_t -static inline int hsum_i32_4(const __m128i a) { - const __m128i hi64 = _mm_unpackhi_epi64(a, a); - const __m128i sum64 = _mm_add_epi32(hi64, a); - const __m128i hi32 = _mm_shuffle_epi32(sum64, _MM_SHUFFLE(2, 3, 0, 1)); - return _mm_cvtsi128_si32(_mm_add_epi32(sum64, hi32)); -} - -#if defined(__AVX2__) || defined(__AVX512F__) -// spread 32 bits to 32 bytes { 0x00, 0xFF } -static inline __m256i bytes_from_bits_32(const uint8_t * x) { - uint32_t x32; - memcpy(&x32, x, sizeof(uint32_t)); - const __m256i shuf_mask = _mm256_set_epi64x( - 0x0303030303030303, 0x0202020202020202, - 0x0101010101010101, 0x0000000000000000); - __m256i bytes = _mm256_shuffle_epi8(_mm256_set1_epi32(x32), shuf_mask); - const __m256i bit_mask = _mm256_set1_epi64x(0x7fbfdfeff7fbfdfe); - bytes = _mm256_or_si256(bytes, bit_mask); - return _mm256_cmpeq_epi8(bytes, _mm256_set1_epi64x(-1)); -} - -// Unpack 32 4-bit fields into 32 bytes -// The output vector contains 32 bytes, each one in [ 0 .. 15 ] interval -static inline __m256i bytes_from_nibbles_32(const uint8_t * rsi) -{ - const __m128i tmp = _mm_loadu_si128((const __m128i *)rsi); - const __m256i bytes = MM256_SET_M128I(_mm_srli_epi16(tmp, 4), tmp); - const __m256i lowMask = _mm256_set1_epi8( 0xF ); - return _mm256_and_si256(lowMask, bytes); -} - -// add int16_t pairwise and return as float vector -static inline __m256 sum_i16_pairs_float(const __m256i x) { - const __m256i ones = _mm256_set1_epi16(1); - const __m256i summed_pairs = _mm256_madd_epi16(ones, x); - return _mm256_cvtepi32_ps(summed_pairs); -} - -static inline __m256 mul_sum_us8_pairs_float(const __m256i ax, const __m256i sy) { -#if __AVXVNNI__ - const __m256i zero = _mm256_setzero_si256(); - const __m256i summed_pairs = _mm256_dpbusd_epi32(zero, ax, sy); - return _mm256_cvtepi32_ps(summed_pairs); -#else - // Perform multiplication and create 16-bit values - const __m256i dot = _mm256_maddubs_epi16(ax, sy); - return sum_i16_pairs_float(dot); -#endif -} - -// multiply int8_t, add results pairwise twice and return as float vector -static inline __m256 mul_sum_i8_pairs_float(const __m256i x, const __m256i y) { -#if __AVXVNNIINT8__ - const __m256i zero = _mm256_setzero_si256(); - const __m256i summed_pairs = _mm256_dpbssd_epi32(zero, x, y); - return _mm256_cvtepi32_ps(summed_pairs); -#else - // Get absolute values of x vectors - const __m256i ax = _mm256_sign_epi8(x, x); - // Sign the values of the y vectors - const __m256i sy = _mm256_sign_epi8(y, x); - return mul_sum_us8_pairs_float(ax, sy); -#endif -} +static void ggml_vec_dot_f32(const int n, float * restrict s, const float * restrict x, const float * restrict y); +static void ggml_vec_dot_f16(const int n, float * restrict s, ggml_fp16_t * restrict x, ggml_fp16_t * restrict y); -static inline __m128i packNibbles( __m256i bytes ) -{ - // Move bits within 16-bit lanes from 0000_abcd_0000_efgh into 0000_0000_abcd_efgh -#if __AVX512F__ - const __m256i bytes_srli_4 = _mm256_srli_epi16(bytes, 4); // 0000_0000_abcd_0000 - bytes = _mm256_or_si256(bytes, bytes_srli_4); // 0000_abcd_abcd_efgh - return _mm256_cvtepi16_epi8(bytes); // abcd_efgh -#else - const __m256i lowByte = _mm256_set1_epi16( 0xFF ); - __m256i high = _mm256_andnot_si256( lowByte, bytes ); - __m256i low = _mm256_and_si256( lowByte, bytes ); - high = _mm256_srli_epi16( high, 4 ); - bytes = _mm256_or_si256( low, high ); - - // Compress uint16_t lanes into bytes - __m128i r0 = _mm256_castsi256_si128( bytes ); - __m128i r1 = _mm256_extracti128_si256( bytes, 1 ); - return _mm_packus_epi16( r0, r1 ); -#endif -} -#elif defined(__AVX__) -// spread 32 bits to 32 bytes { 0x00, 0xFF } -static inline __m256i bytes_from_bits_32(const uint8_t * x) { - uint32_t x32; - memcpy(&x32, x, sizeof(uint32_t)); - const __m128i shuf_maskl = _mm_set_epi64x(0x0101010101010101, 0x0000000000000000); - const __m128i shuf_maskh = _mm_set_epi64x(0x0303030303030303, 0x0202020202020202); - __m128i bytesl = _mm_shuffle_epi8(_mm_set1_epi32(x32), shuf_maskl); - __m128i bytesh = _mm_shuffle_epi8(_mm_set1_epi32(x32), shuf_maskh); - const __m128i bit_mask = _mm_set1_epi64x(0x7fbfdfeff7fbfdfe); - bytesl = _mm_or_si128(bytesl, bit_mask); - bytesh = _mm_or_si128(bytesh, bit_mask); - bytesl = _mm_cmpeq_epi8(bytesl, _mm_set1_epi64x(-1)); - bytesh = _mm_cmpeq_epi8(bytesh, _mm_set1_epi64x(-1)); - return MM256_SET_M128I(bytesh, bytesl); -} - -// Unpack 32 4-bit fields into 32 bytes -// The output vector contains 32 bytes, each one in [ 0 .. 15 ] interval -static inline __m256i bytes_from_nibbles_32(const uint8_t * rsi) -{ - // Load 16 bytes from memory - __m128i tmpl = _mm_loadu_si128((const __m128i *)rsi); - __m128i tmph = _mm_srli_epi16(tmpl, 4); - const __m128i lowMask = _mm_set1_epi8(0xF); - tmpl = _mm_and_si128(lowMask, tmpl); - tmph = _mm_and_si128(lowMask, tmph); - return MM256_SET_M128I(tmph, tmpl); -} - -// add int16_t pairwise and return as float vector -static inline __m256 sum_i16_pairs_float(const __m128i xh, const __m128i xl) { - const __m128i ones = _mm_set1_epi16(1); - const __m128i summed_pairsl = _mm_madd_epi16(ones, xl); - const __m128i summed_pairsh = _mm_madd_epi16(ones, xh); - const __m256i summed_pairs = MM256_SET_M128I(summed_pairsh, summed_pairsl); - return _mm256_cvtepi32_ps(summed_pairs); -} - -static inline __m256 mul_sum_us8_pairs_float(const __m256i ax, const __m256i sy) { - const __m128i axl = _mm256_castsi256_si128(ax); - const __m128i axh = _mm256_extractf128_si256(ax, 1); - const __m128i syl = _mm256_castsi256_si128(sy); - const __m128i syh = _mm256_extractf128_si256(sy, 1); - // Perform multiplication and create 16-bit values - const __m128i dotl = _mm_maddubs_epi16(axl, syl); - const __m128i doth = _mm_maddubs_epi16(axh, syh); - return sum_i16_pairs_float(doth, dotl); -} - -// multiply int8_t, add results pairwise twice and return as float vector -static inline __m256 mul_sum_i8_pairs_float(const __m256i x, const __m256i y) { - const __m128i xl = _mm256_castsi256_si128(x); - const __m128i xh = _mm256_extractf128_si256(x, 1); - const __m128i yl = _mm256_castsi256_si128(y); - const __m128i yh = _mm256_extractf128_si256(y, 1); - // Get absolute values of x vectors - const __m128i axl = _mm_sign_epi8(xl, xl); - const __m128i axh = _mm_sign_epi8(xh, xh); - // Sign the values of the y vectors - const __m128i syl = _mm_sign_epi8(yl, xl); - const __m128i syh = _mm_sign_epi8(yh, xh); - // Perform multiplication and create 16-bit values - const __m128i dotl = _mm_maddubs_epi16(axl, syl); - const __m128i doth = _mm_maddubs_epi16(axh, syh); - return sum_i16_pairs_float(doth, dotl); -} - -static inline __m128i packNibbles( __m128i bytes1, __m128i bytes2 ) -{ - // Move bits within 16-bit lanes from 0000_abcd_0000_efgh into 0000_0000_abcd_efgh - const __m128i lowByte = _mm_set1_epi16( 0xFF ); - __m128i high = _mm_andnot_si128( lowByte, bytes1 ); - __m128i low = _mm_and_si128( lowByte, bytes1 ); - high = _mm_srli_epi16( high, 4 ); - bytes1 = _mm_or_si128( low, high ); - high = _mm_andnot_si128( lowByte, bytes2 ); - low = _mm_and_si128( lowByte, bytes2 ); - high = _mm_srli_epi16( high, 4 ); - bytes2 = _mm_or_si128( low, high ); - - return _mm_packus_epi16( bytes1, bytes2); -} -#endif -#elif defined(__SSSE3__) -// horizontally add 4x4 floats -static inline float hsum_float_4x4(const __m128 a, const __m128 b, const __m128 c, const __m128 d) { - __m128 res_0 =_mm_hadd_ps(a, b); - __m128 res_1 =_mm_hadd_ps(c, d); - __m128 res =_mm_hadd_ps(res_0, res_1); - res =_mm_hadd_ps(res, res); - res =_mm_hadd_ps(res, res); +static const ggml_type_traits_t type_traits[GGML_TYPE_COUNT] = { + [GGML_TYPE_I8] = { + .type_name = "i8", + .blck_size = 1, + .type_size = sizeof(int8_t), + .is_quantized = false, + }, + [GGML_TYPE_I16] = { + .type_name = "i16", + .blck_size = 1, + .type_size = sizeof(int16_t), + .is_quantized = false, + }, + [GGML_TYPE_I32] = { + .type_name = "i32", + .blck_size = 1, + .type_size = sizeof(int32_t), + .is_quantized = false, + }, + [GGML_TYPE_F32] = { + .type_name = "f32", + .blck_size = 1, + .type_size = sizeof(float), + .is_quantized = false, + .vec_dot = (ggml_vec_dot_t) ggml_vec_dot_f32, + .vec_dot_type = GGML_TYPE_F32, + }, + [GGML_TYPE_F16] = { + .type_name = "f16", + .blck_size = 1, + .type_size = sizeof(ggml_fp16_t), + .is_quantized = false, + .to_float = (ggml_to_float_t) ggml_fp16_to_fp32_row, + .from_float = (ggml_from_float_t) ggml_fp32_to_fp16_row, + .from_float_reference = (ggml_from_float_t) ggml_fp32_to_fp16_row, + .vec_dot = (ggml_vec_dot_t) ggml_vec_dot_f16, + .vec_dot_type = GGML_TYPE_F16, + }, + [GGML_TYPE_Q4_0] = { + .type_name = "q4_0", + .blck_size = QK4_0, + .type_size = sizeof(block_q4_0), + .is_quantized = true, + .to_float = (ggml_to_float_t) dequantize_row_q4_0, + .from_float = quantize_row_q4_0, + .from_float_reference = (ggml_from_float_t) quantize_row_q4_0_reference, + .vec_dot = ggml_vec_dot_q4_0_q8_0, + .vec_dot_type = GGML_TYPE_Q8_0, + }, + [GGML_TYPE_Q4_1] = { + .type_name = "q4_1", + .blck_size = QK4_1, + .type_size = sizeof(block_q4_1), + .is_quantized = true, + .to_float = (ggml_to_float_t) dequantize_row_q4_1, + .from_float = quantize_row_q4_1, + .from_float_reference = (ggml_from_float_t) quantize_row_q4_1_reference, + .vec_dot = ggml_vec_dot_q4_1_q8_1, + .vec_dot_type = GGML_TYPE_Q8_1, + }, + [GGML_TYPE_Q5_0] = { + .type_name = "q5_0", + .blck_size = QK5_0, + .type_size = sizeof(block_q5_0), + .is_quantized = true, + .to_float = (ggml_to_float_t) dequantize_row_q5_0, + .from_float = quantize_row_q5_0, + .from_float_reference = (ggml_from_float_t) quantize_row_q5_0_reference, + .vec_dot = ggml_vec_dot_q5_0_q8_0, + .vec_dot_type = GGML_TYPE_Q8_0, + }, + [GGML_TYPE_Q5_1] = { + .type_name = "q5_1", + .blck_size = QK5_1, + .type_size = sizeof(block_q5_1), + .is_quantized = true, + .to_float = (ggml_to_float_t) dequantize_row_q5_1, + .from_float = quantize_row_q5_1, + .from_float_reference = (ggml_from_float_t) quantize_row_q5_1_reference, + .vec_dot = ggml_vec_dot_q5_1_q8_1, + .vec_dot_type = GGML_TYPE_Q8_1, + }, + [GGML_TYPE_Q8_0] = { + .type_name = "q8_0", + .blck_size = QK8_0, + .type_size = sizeof(block_q8_0), + .is_quantized = true, + .to_float = (ggml_to_float_t) dequantize_row_q8_0, + .from_float = quantize_row_q8_0, + .from_float_reference = (ggml_from_float_t) quantize_row_q8_0_reference, + .vec_dot = ggml_vec_dot_q8_0_q8_0, + .vec_dot_type = GGML_TYPE_Q8_0, + }, + [GGML_TYPE_Q8_1] = { + .type_name = "q8_1", + .blck_size = QK8_1, + .type_size = sizeof(block_q8_1), + .is_quantized = true, + .from_float = quantize_row_q8_1, + .from_float_reference = (ggml_from_float_t) quantize_row_q8_1_reference, + .vec_dot_type = GGML_TYPE_Q8_1, + }, + [GGML_TYPE_Q2_K] = { + .type_name = "q2_K", + .blck_size = QK_K, + .type_size = sizeof(block_q2_K), + .is_quantized = true, + .to_float = (ggml_to_float_t) dequantize_row_q2_K, + .from_float = quantize_row_q2_K, + .from_float_reference = (ggml_from_float_t) quantize_row_q2_K_reference, + .vec_dot = ggml_vec_dot_q2_K_q8_K, + .vec_dot_type = GGML_TYPE_Q8_K, + }, + [GGML_TYPE_Q3_K] = { + .type_name = "q3_K", + .blck_size = QK_K, + .type_size = sizeof(block_q3_K), + .is_quantized = true, + .to_float = (ggml_to_float_t) dequantize_row_q3_K, + .from_float = quantize_row_q3_K, + .from_float_reference = (ggml_from_float_t) quantize_row_q3_K_reference, + .vec_dot = ggml_vec_dot_q3_K_q8_K, + .vec_dot_type = GGML_TYPE_Q8_K, + }, + [GGML_TYPE_Q4_K] = { + .type_name = "q4_K", + .blck_size = QK_K, + .type_size = sizeof(block_q4_K), + .is_quantized = true, + .to_float = (ggml_to_float_t) dequantize_row_q4_K, + .from_float = quantize_row_q4_K, + .from_float_reference = (ggml_from_float_t) quantize_row_q4_K_reference, + .vec_dot = ggml_vec_dot_q4_K_q8_K, + .vec_dot_type = GGML_TYPE_Q8_K, + }, + [GGML_TYPE_Q5_K] = { + .type_name = "q5_K", + .blck_size = QK_K, + .type_size = sizeof(block_q5_K), + .is_quantized = true, + .to_float = (ggml_to_float_t) dequantize_row_q5_K, + .from_float = quantize_row_q5_K, + .from_float_reference = (ggml_from_float_t) quantize_row_q5_K_reference, + .vec_dot = ggml_vec_dot_q5_K_q8_K, + .vec_dot_type = GGML_TYPE_Q8_K, + }, + [GGML_TYPE_Q6_K] = { + .type_name = "q6_K", + .blck_size = QK_K, + .type_size = sizeof(block_q6_K), + .is_quantized = true, + .to_float = (ggml_to_float_t) dequantize_row_q6_K, + .from_float = quantize_row_q6_K, + .from_float_reference = (ggml_from_float_t) quantize_row_q6_K_reference, + .vec_dot = ggml_vec_dot_q6_K_q8_K, + .vec_dot_type = GGML_TYPE_Q8_K, + }, + [GGML_TYPE_Q8_K] = { + .type_name = "q8_K", + .blck_size = QK_K, + .type_size = sizeof(block_q8_K), + .is_quantized = true, + .from_float = quantize_row_q8_K, + } +}; - return _mm_cvtss_f32(res); +// For internal test use +ggml_type_traits_t ggml_internal_get_type_traits(enum ggml_type type) { + GGML_ASSERT(type < GGML_TYPE_COUNT); + return type_traits[type]; } -#endif // __AVX__ || __AVX2__ || __AVX512F__ -#endif // defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) || defined(__SSSE3__) - -#if defined(__ARM_NEON) -#if !defined(__aarch64__) +// +// simd mappings +// -inline static int32_t vaddvq_s32(int32x4_t v) { - return vgetq_lane_s32(v, 0) + vgetq_lane_s32(v, 1) + vgetq_lane_s32(v, 2) + vgetq_lane_s32(v, 3); -} +// we define a common set of C macros which map to specific intrinsics based on the current architecture +// we then implement the fundamental computation operations below using only these macros +// adding support for new architectures requires to define the corresponding SIMD macros +// +// GGML_F32_STEP / GGML_F16_STEP +// number of elements to process in a single step +// +// GGML_F32_EPR / GGML_F16_EPR +// number of elements to fit in a single register +// -inline static float vaddvq_f32(float32x4_t v) { - return vgetq_lane_f32(v, 0) + vgetq_lane_f32(v, 1) + vgetq_lane_f32(v, 2) + vgetq_lane_f32(v, 3); -} +#if defined(__ARM_NEON) && defined(__ARM_FEATURE_FMA) -inline static float vmaxvq_f32(float32x4_t v) { - return - MAX(MAX(vgetq_lane_f32(v, 0), vgetq_lane_f32(v, 1)), - MAX(vgetq_lane_f32(v, 2), vgetq_lane_f32(v, 3))); -} +#define GGML_SIMD -inline static int32x4_t vcvtnq_s32_f32(float32x4_t v) { - int32x4_t res; +// F32 NEON - res[0] = roundf(vgetq_lane_f32(v, 0)); - res[1] = roundf(vgetq_lane_f32(v, 1)); - res[2] = roundf(vgetq_lane_f32(v, 2)); - res[3] = roundf(vgetq_lane_f32(v, 3)); +#define GGML_F32_STEP 16 +#define GGML_F32_EPR 4 - return res; +#define GGML_F32x4 float32x4_t +#define GGML_F32x4_ZERO vdupq_n_f32(0.0f) +#define GGML_F32x4_SET1(x) vdupq_n_f32(x) +#define GGML_F32x4_LOAD vld1q_f32 +#define GGML_F32x4_STORE vst1q_f32 +#define GGML_F32x4_FMA(a, b, c) vfmaq_f32(a, b, c) +#define GGML_F32x4_ADD vaddq_f32 +#define GGML_F32x4_MUL vmulq_f32 +#define GGML_F32x4_REDUCE_ONE(x) vaddvq_f32(x) +#define GGML_F32x4_REDUCE(res, x) \ +{ \ + int offset = GGML_F32_ARR >> 1; \ + for (int i = 0; i < offset; ++i) { \ + x[i] = vaddq_f32(x[i], x[offset+i]); \ + } \ + offset >>= 1; \ + for (int i = 0; i < offset; ++i) { \ + x[i] = vaddq_f32(x[i], x[offset+i]); \ + } \ + offset >>= 1; \ + for (int i = 0; i < offset; ++i) { \ + x[i] = vaddq_f32(x[i], x[offset+i]); \ + } \ + res = GGML_F32x4_REDUCE_ONE(x[0]); \ } -#endif -#endif - -#define QK4_0 32 -typedef struct { - ggml_fp16_t d; // delta - uint8_t qs[QK4_0 / 2]; // nibbles / quants -} block_q4_0; -static_assert(sizeof(block_q4_0) == sizeof(ggml_fp16_t) + QK4_0 / 2, "wrong q4_0 block size/padding"); - -#define QK4_1 32 -typedef struct { - ggml_fp16_t d; // delta - ggml_fp16_t m; // min - uint8_t qs[QK4_1 / 2]; // nibbles / quants -} block_q4_1; -static_assert(sizeof(block_q4_1) == 2 * sizeof(ggml_fp16_t) + QK4_1 / 2, "wrong q4_1 block size/padding"); - -#define QK5_0 32 -typedef struct { - ggml_fp16_t d; // delta - uint8_t qh[4]; // 5-th bit of quants - uint8_t qs[QK5_0 / 2]; // nibbles / quants -} block_q5_0; -static_assert(sizeof(block_q5_0) == sizeof(ggml_fp16_t) + sizeof(uint32_t) + QK5_0 / 2, "wrong q5_0 block size/padding"); - -#define QK5_1 32 -typedef struct { - ggml_fp16_t d; // delta - ggml_fp16_t m; // min - uint8_t qh[4]; // 5-th bit of quants - uint8_t qs[QK5_1 / 2]; // nibbles / quants -} block_q5_1; -static_assert(sizeof(block_q5_1) == 2 * sizeof(ggml_fp16_t) + sizeof(uint32_t) + QK5_1 / 2, "wrong q5_1 block size/padding"); - -#define QK8_0 32 -typedef struct { - ggml_fp16_t d; // delta - int8_t qs[QK8_0]; // quants -} block_q8_0; -static_assert(sizeof(block_q8_0) == sizeof(ggml_fp16_t) + QK8_0, "wrong q8_0 block size/padding"); - -#define QK8_1 32 -typedef struct { - float d; // delta - float s; // d * sum(qs[i]) - int8_t qs[QK8_1]; // quants -} block_q8_1; -static_assert(sizeof(block_q8_1) == 2*sizeof(float) + QK8_1, "wrong q8_1 block size/padding"); - -// reference implementation for deterministic creation of model files -static void quantize_row_q4_0_reference(const float * restrict x, block_q4_0 * restrict y, int k) { - static const int qk = QK4_0; - - assert(k % qk == 0); - - const int nb = k / qk; - - for (int i = 0; i < nb; i++) { - float amax = 0.0f; // absolute max - float max = 0.0f; - - for (int j = 0; j < qk; j++) { - const float v = x[i*qk + j]; - if (amax < fabsf(v)) { - amax = fabsf(v); - max = v; - } - } +#define GGML_F32_VEC GGML_F32x4 +#define GGML_F32_VEC_ZERO GGML_F32x4_ZERO +#define GGML_F32_VEC_SET1 GGML_F32x4_SET1 +#define GGML_F32_VEC_LOAD GGML_F32x4_LOAD +#define GGML_F32_VEC_STORE GGML_F32x4_STORE +#define GGML_F32_VEC_FMA GGML_F32x4_FMA +#define GGML_F32_VEC_ADD GGML_F32x4_ADD +#define GGML_F32_VEC_MUL GGML_F32x4_MUL +#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE - const float d = max / -8; - const float id = d ? 1.0f/d : 0.0f; +// F16 NEON - y[i].d = GGML_FP32_TO_FP16(d); +#if defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC) + #define GGML_F16_STEP 32 + #define GGML_F16_EPR 8 - for (int j = 0; j < qk/2; ++j) { - const float x0 = x[i*qk + 0 + j]*id; - const float x1 = x[i*qk + qk/2 + j]*id; - - const uint8_t xi0 = MIN(15, (int8_t)(x0 + 8.5f)); - const uint8_t xi1 = MIN(15, (int8_t)(x1 + 8.5f)); - - y[i].qs[j] = xi0; - y[i].qs[j] |= xi1 << 4; - } - } -} - -static void quantize_row_q4_0(const float * restrict x, void * restrict y, int k) { - quantize_row_q4_0_reference(x, y, k); -} - -static void quantize_row_q4_1_reference(const float * restrict x, block_q4_1 * restrict y, int k) { - const int qk = QK4_1; - - assert(k % qk == 0); - - const int nb = k / qk; - - for (int i = 0; i < nb; i++) { - float min = FLT_MAX; - float max = -FLT_MAX; - - for (int j = 0; j < qk; j++) { - const float v = x[i*qk + j]; - - if (v < min) min = v; - if (v > max) max = v; - } - - const float d = (max - min) / ((1 << 4) - 1); - const float id = d ? 1.0f/d : 0.0f; - - y[i].d = GGML_FP32_TO_FP16(d); - y[i].m = GGML_FP32_TO_FP16(min); - - for (int j = 0; j < qk/2; ++j) { - const float x0 = (x[i*qk + 0 + j] - min)*id; - const float x1 = (x[i*qk + qk/2 + j] - min)*id; - - const uint8_t xi0 = MIN(15, (int8_t)(x0 + 0.5f)); - const uint8_t xi1 = MIN(15, (int8_t)(x1 + 0.5f)); - - y[i].qs[j] = xi0; - y[i].qs[j] |= xi1 << 4; - } - } -} - -static void quantize_row_q4_1(const float * restrict x, void * restrict y, int k) { - quantize_row_q4_1_reference(x, y, k); -} - -static void quantize_row_q5_0_reference(const float * restrict x, block_q5_0 * restrict y, int k) { - static const int qk = QK5_0; - - assert(k % qk == 0); - - const int nb = k / qk; - - for (int i = 0; i < nb; i++) { - float amax = 0.0f; // absolute max - float max = 0.0f; - - for (int j = 0; j < qk; j++) { - const float v = x[i*qk + j]; - if (amax < fabsf(v)) { - amax = fabsf(v); - max = v; - } - } - - const float d = max / -16; - const float id = d ? 1.0f/d : 0.0f; - - y[i].d = GGML_FP32_TO_FP16(d); - - uint32_t qh = 0; - - for (int j = 0; j < qk/2; ++j) { - const float x0 = x[i*qk + 0 + j]*id; - const float x1 = x[i*qk + qk/2 + j]*id; - - const uint8_t xi0 = MIN(31, (int8_t)(x0 + 16.5f)); - const uint8_t xi1 = MIN(31, (int8_t)(x1 + 16.5f)); - - y[i].qs[j] = (xi0 & 0x0F) | ((xi1 & 0x0F) << 4); - - // get the 5-th bit and store it in qh at the right position - qh |= ((xi0 & 0x10u) >> 4) << (j + 0); - qh |= ((xi1 & 0x10u) >> 4) << (j + qk/2); - } - - memcpy(&y[i].qh, &qh, sizeof(qh)); - } -} - -static void quantize_row_q5_0(const float * restrict x, void * restrict y, int k) { - quantize_row_q5_0_reference(x, y, k); -} - -static void quantize_row_q5_1_reference(const float * restrict x, block_q5_1 * restrict y, int k) { - const int qk = QK5_1; - - assert(k % qk == 0); - - const int nb = k / qk; - - for (int i = 0; i < nb; i++) { - float min = FLT_MAX; - float max = -FLT_MAX; - - for (int j = 0; j < qk; j++) { - const float v = x[i*qk + j]; - - if (v < min) min = v; - if (v > max) max = v; - } - - const float d = (max - min) / ((1 << 5) - 1); - const float id = d ? 1.0f/d : 0.0f; - - y[i].d = GGML_FP32_TO_FP16(d); - y[i].m = GGML_FP32_TO_FP16(min); - - uint32_t qh = 0; - - for (int j = 0; j < qk/2; ++j) { - const float x0 = (x[i*qk + 0 + j] - min)*id; - const float x1 = (x[i*qk + qk/2 + j] - min)*id; - - const uint8_t xi0 = (uint8_t)(x0 + 0.5f); - const uint8_t xi1 = (uint8_t)(x1 + 0.5f); - - y[i].qs[j] = (xi0 & 0x0F) | ((xi1 & 0x0F) << 4); - - // get the 5-th bit and store it in qh at the right position - qh |= ((xi0 & 0x10u) >> 4) << (j + 0); - qh |= ((xi1 & 0x10u) >> 4) << (j + qk/2); - } - - memcpy(&y[i].qh, &qh, sizeof(y[i].qh)); - } -} - -static void quantize_row_q5_1(const float * restrict x, void * restrict y, int k) { - quantize_row_q5_1_reference(x, y, k); -} - -// reference implementation for deterministic creation of model files -static void quantize_row_q8_0_reference(const float * restrict x, block_q8_0 * restrict y, int k) { - assert(k % QK8_0 == 0); - const int nb = k / QK8_0; - - for (int i = 0; i < nb; i++) { - float amax = 0.0f; // absolute max - - for (int j = 0; j < QK8_0; j++) { - const float v = x[i*QK8_0 + j]; - amax = MAX(amax, fabsf(v)); - } - - const float d = amax / ((1 << 7) - 1); - const float id = d ? 1.0f/d : 0.0f; - - y[i].d = GGML_FP32_TO_FP16(d); - - for (int j = 0; j < QK8_0; ++j) { - const float x0 = x[i*QK8_0 + j]*id; - - y[i].qs[j] = roundf(x0); - } - } -} - -static void quantize_row_q8_0(const float * restrict x, void * restrict vy, int k) { - assert(QK8_0 == 32); - assert(k % QK8_0 == 0); - const int nb = k / QK8_0; - - block_q8_0 * restrict y = vy; - -#if defined(__ARM_NEON) - for (int i = 0; i < nb; i++) { - float32x4_t srcv [8]; - float32x4_t asrcv[8]; - float32x4_t amaxv[8]; - - for (int j = 0; j < 8; j++) srcv[j] = vld1q_f32(x + i*32 + 4*j); - for (int j = 0; j < 8; j++) asrcv[j] = vabsq_f32(srcv[j]); - - for (int j = 0; j < 4; j++) amaxv[2*j] = vmaxq_f32(asrcv[2*j], asrcv[2*j+1]); - for (int j = 0; j < 2; j++) amaxv[4*j] = vmaxq_f32(amaxv[4*j], amaxv[4*j+2]); - for (int j = 0; j < 1; j++) amaxv[8*j] = vmaxq_f32(amaxv[8*j], amaxv[8*j+4]); - - const float amax = vmaxvq_f32(amaxv[0]); - - const float d = amax / ((1 << 7) - 1); - const float id = d ? 1.0f/d : 0.0f; - - y[i].d = GGML_FP32_TO_FP16(d); - - for (int j = 0; j < 8; j++) { - const float32x4_t v = vmulq_n_f32(srcv[j], id); - const int32x4_t vi = vcvtnq_s32_f32(v); - - y[i].qs[4*j + 0] = vgetq_lane_s32(vi, 0); - y[i].qs[4*j + 1] = vgetq_lane_s32(vi, 1); - y[i].qs[4*j + 2] = vgetq_lane_s32(vi, 2); - y[i].qs[4*j + 3] = vgetq_lane_s32(vi, 3); - } - } -#elif defined(__wasm_simd128__) - for (int i = 0; i < nb; i++) { - v128_t srcv [8]; - v128_t asrcv[8]; - v128_t amaxv[8]; - - for (int j = 0; j < 8; j++) srcv[j] = wasm_v128_load(x + i*32 + 4*j); - for (int j = 0; j < 8; j++) asrcv[j] = wasm_f32x4_abs(srcv[j]); - - for (int j = 0; j < 4; j++) amaxv[2*j] = wasm_f32x4_max(asrcv[2*j], asrcv[2*j+1]); - for (int j = 0; j < 2; j++) amaxv[4*j] = wasm_f32x4_max(amaxv[4*j], amaxv[4*j+2]); - for (int j = 0; j < 1; j++) amaxv[8*j] = wasm_f32x4_max(amaxv[8*j], amaxv[8*j+4]); - - const float amax = MAX(MAX(wasm_f32x4_extract_lane(amaxv[0], 0), - wasm_f32x4_extract_lane(amaxv[0], 1)), - MAX(wasm_f32x4_extract_lane(amaxv[0], 2), - wasm_f32x4_extract_lane(amaxv[0], 3))); - - const float d = amax / ((1 << 7) - 1); - const float id = d ? 1.0f/d : 0.0f; - - y[i].d = GGML_FP32_TO_FP16(d); - - for (int j = 0; j < 8; j++) { - const v128_t v = wasm_f32x4_mul(srcv[j], wasm_f32x4_splat(id)); - const v128_t vi = wasm_i32x4_trunc_sat_f32x4(v); - - y[i].qs[4*j + 0] = wasm_i32x4_extract_lane(vi, 0); - y[i].qs[4*j + 1] = wasm_i32x4_extract_lane(vi, 1); - y[i].qs[4*j + 2] = wasm_i32x4_extract_lane(vi, 2); - y[i].qs[4*j + 3] = wasm_i32x4_extract_lane(vi, 3); - } - } -#elif defined(__AVX2__) || defined(__AVX__) - for (int i = 0; i < nb; i++) { - // Load elements into 4 AVX vectors - __m256 v0 = _mm256_loadu_ps( x ); - __m256 v1 = _mm256_loadu_ps( x + 8 ); - __m256 v2 = _mm256_loadu_ps( x + 16 ); - __m256 v3 = _mm256_loadu_ps( x + 24 ); - x += 32; - - // Compute max(abs(e)) for the block - const __m256 signBit = _mm256_set1_ps( -0.0f ); - __m256 maxAbs = _mm256_andnot_ps( signBit, v0 ); - maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v1 ) ); - maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v2 ) ); - maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v3 ) ); - - __m128 max4 = _mm_max_ps( _mm256_extractf128_ps( maxAbs, 1 ), _mm256_castps256_ps128( maxAbs ) ); - max4 = _mm_max_ps( max4, _mm_movehl_ps( max4, max4 ) ); - max4 = _mm_max_ss( max4, _mm_movehdup_ps( max4 ) ); - const float maxScalar = _mm_cvtss_f32( max4 ); - - // Quantize these floats - const float d = maxScalar / 127.f; - y[i].d = GGML_FP32_TO_FP16(d); - const float id = ( maxScalar != 0.0f ) ? 127.f / maxScalar : 0.0f; - const __m256 mul = _mm256_set1_ps( id ); - - // Apply the multiplier - v0 = _mm256_mul_ps( v0, mul ); - v1 = _mm256_mul_ps( v1, mul ); - v2 = _mm256_mul_ps( v2, mul ); - v3 = _mm256_mul_ps( v3, mul ); - - // Round to nearest integer - v0 = _mm256_round_ps( v0, _MM_ROUND_NEAREST ); - v1 = _mm256_round_ps( v1, _MM_ROUND_NEAREST ); - v2 = _mm256_round_ps( v2, _MM_ROUND_NEAREST ); - v3 = _mm256_round_ps( v3, _MM_ROUND_NEAREST ); - - // Convert floats to integers - __m256i i0 = _mm256_cvtps_epi32( v0 ); - __m256i i1 = _mm256_cvtps_epi32( v1 ); - __m256i i2 = _mm256_cvtps_epi32( v2 ); - __m256i i3 = _mm256_cvtps_epi32( v3 ); - -#if defined(__AVX2__) - // Convert int32 to int16 - i0 = _mm256_packs_epi32( i0, i1 ); // 0, 1, 2, 3, 8, 9, 10, 11, 4, 5, 6, 7, 12, 13, 14, 15 - i2 = _mm256_packs_epi32( i2, i3 ); // 16, 17, 18, 19, 24, 25, 26, 27, 20, 21, 22, 23, 28, 29, 30, 31 - // Convert int16 to int8 - i0 = _mm256_packs_epi16( i0, i2 ); // 0, 1, 2, 3, 8, 9, 10, 11, 16, 17, 18, 19, 24, 25, 26, 27, 4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, 28, 29, 30, 31 - - // We got our precious signed bytes, but the order is now wrong - // These AVX2 pack instructions process 16-byte pieces independently - // The following instruction is fixing the order - const __m256i perm = _mm256_setr_epi32( 0, 4, 1, 5, 2, 6, 3, 7 ); - i0 = _mm256_permutevar8x32_epi32( i0, perm ); - - _mm256_storeu_si256((__m256i *)y[i].qs, i0); -#else - // Since we don't have in AVX some necessary functions, - // we split the registers in half and call AVX2 analogs from SSE - __m128i ni0 = _mm256_castsi256_si128( i0 ); - __m128i ni1 = _mm256_extractf128_si256( i0, 1); - __m128i ni2 = _mm256_castsi256_si128( i1 ); - __m128i ni3 = _mm256_extractf128_si256( i1, 1); - __m128i ni4 = _mm256_castsi256_si128( i2 ); - __m128i ni5 = _mm256_extractf128_si256( i2, 1); - __m128i ni6 = _mm256_castsi256_si128( i3 ); - __m128i ni7 = _mm256_extractf128_si256( i3, 1); - - // Convert int32 to int16 - ni0 = _mm_packs_epi32( ni0, ni1 ); - ni2 = _mm_packs_epi32( ni2, ni3 ); - ni4 = _mm_packs_epi32( ni4, ni5 ); - ni6 = _mm_packs_epi32( ni6, ni7 ); - // Convert int16 to int8 - ni0 = _mm_packs_epi16( ni0, ni2 ); - ni4 = _mm_packs_epi16( ni4, ni6 ); - - _mm_storeu_si128((__m128i *)(y[i].qs + 0), ni0); - _mm_storeu_si128((__m128i *)(y[i].qs + 16), ni4); -#endif - } -#elif defined(__riscv_v_intrinsic) - - size_t vl = __riscv_vsetvl_e32m4(QK8_0); - - for (int i = 0; i < nb; i++) { - // load elements - vfloat32m4_t v_x = __riscv_vle32_v_f32m4(x+i*QK8_0, vl); - - vfloat32m4_t vfabs = __riscv_vfabs_v_f32m4(v_x, vl); - vfloat32m1_t tmp = __riscv_vfmv_v_f_f32m1(0.0f, vl); - vfloat32m1_t vmax = __riscv_vfredmax_vs_f32m4_f32m1(vfabs, tmp, vl); - float amax = __riscv_vfmv_f_s_f32m1_f32(vmax); - - const float d = amax / ((1 << 7) - 1); - const float id = d ? 1.0f/d : 0.0f; - - y[i].d = GGML_FP32_TO_FP16(d); - - vfloat32m4_t x0 = __riscv_vfmul_vf_f32m4(v_x, id, vl); - - // convert to integer - vint16m2_t vi = __riscv_vfncvt_x_f_w_i16m2(x0, vl); - vint8m1_t vs = __riscv_vncvt_x_x_w_i8m1(vi, vl); - - // store result - __riscv_vse8_v_i8m1(y[i].qs , vs, vl); - } -#else - // scalar - quantize_row_q8_0_reference(x, y, k); -#endif -} - -// reference implementation for deterministic creation of model files -static void quantize_row_q8_1_reference(const float * restrict x, block_q8_1 * restrict y, int k) { - assert(QK8_1 == 32); - assert(k % QK8_1 == 0); - const int nb = k / QK8_1; - - for (int i = 0; i < nb; i++) { - float amax = 0.0f; // absolute max - - for (int j = 0; j < QK8_1; j++) { - const float v = x[i*QK8_1 + j]; - amax = MAX(amax, fabsf(v)); - } - - const float d = amax / ((1 << 7) - 1); - const float id = d ? 1.0f/d : 0.0f; - - y[i].d = d; - - int sum = 0; - - for (int j = 0; j < QK8_1/2; ++j) { - const float v0 = x[i*QK8_1 + j]*id; - const float v1 = x[i*QK8_1 + QK8_1/2 + j]*id; - - y[i].qs[ j] = roundf(v0); - y[i].qs[QK8_1/2 + j] = roundf(v1); - - sum += y[i].qs[ j]; - sum += y[i].qs[QK8_1/2 + j]; - } - - y[i].s = sum*d; - } -} - -static void quantize_row_q8_1(const float * restrict x, void * restrict vy, int k) { - assert(k % QK8_1 == 0); - const int nb = k / QK8_1; - - block_q8_1 * restrict y = vy; - -#if defined(__ARM_NEON) - for (int i = 0; i < nb; i++) { - float32x4_t srcv [8]; - float32x4_t asrcv[8]; - float32x4_t amaxv[8]; - - for (int j = 0; j < 8; j++) srcv[j] = vld1q_f32(x + i*32 + 4*j); - for (int j = 0; j < 8; j++) asrcv[j] = vabsq_f32(srcv[j]); - - for (int j = 0; j < 4; j++) amaxv[2*j] = vmaxq_f32(asrcv[2*j], asrcv[2*j+1]); - for (int j = 0; j < 2; j++) amaxv[4*j] = vmaxq_f32(amaxv[4*j], amaxv[4*j+2]); - for (int j = 0; j < 1; j++) amaxv[8*j] = vmaxq_f32(amaxv[8*j], amaxv[8*j+4]); - - const float amax = vmaxvq_f32(amaxv[0]); - - const float d = amax / ((1 << 7) - 1); - const float id = d ? 1.0f/d : 0.0f; - - y[i].d = d; - - int32x4_t accv = vdupq_n_s32(0); - - for (int j = 0; j < 8; j++) { - const float32x4_t v = vmulq_n_f32(srcv[j], id); - const int32x4_t vi = vcvtnq_s32_f32(v); - - y[i].qs[4*j + 0] = vgetq_lane_s32(vi, 0); - y[i].qs[4*j + 1] = vgetq_lane_s32(vi, 1); - y[i].qs[4*j + 2] = vgetq_lane_s32(vi, 2); - y[i].qs[4*j + 3] = vgetq_lane_s32(vi, 3); - - accv = vaddq_s32(accv, vi); - } - - y[i].s = d * vaddvq_s32(accv); - } -#elif defined(__wasm_simd128__) - for (int i = 0; i < nb; i++) { - v128_t srcv [8]; - v128_t asrcv[8]; - v128_t amaxv[8]; - - for (int j = 0; j < 8; j++) srcv[j] = wasm_v128_load(x + i*32 + 4*j); - for (int j = 0; j < 8; j++) asrcv[j] = wasm_f32x4_abs(srcv[j]); - - for (int j = 0; j < 4; j++) amaxv[2*j] = wasm_f32x4_max(asrcv[2*j], asrcv[2*j+1]); - for (int j = 0; j < 2; j++) amaxv[4*j] = wasm_f32x4_max(amaxv[4*j], amaxv[4*j+2]); - for (int j = 0; j < 1; j++) amaxv[8*j] = wasm_f32x4_max(amaxv[8*j], amaxv[8*j+4]); - - const float amax = MAX(MAX(wasm_f32x4_extract_lane(amaxv[0], 0), - wasm_f32x4_extract_lane(amaxv[0], 1)), - MAX(wasm_f32x4_extract_lane(amaxv[0], 2), - wasm_f32x4_extract_lane(amaxv[0], 3))); - - const float d = amax / ((1 << 7) - 1); - const float id = d ? 1.0f/d : 0.0f; - - y[i].d = d; - - v128_t accv = wasm_i32x4_splat(0); - - for (int j = 0; j < 8; j++) { - const v128_t v = wasm_f32x4_mul(srcv[j], wasm_f32x4_splat(id)); - const v128_t vi = wasm_i32x4_trunc_sat_f32x4(v); - - y[i].qs[4*j + 0] = wasm_i32x4_extract_lane(vi, 0); - y[i].qs[4*j + 1] = wasm_i32x4_extract_lane(vi, 1); - y[i].qs[4*j + 2] = wasm_i32x4_extract_lane(vi, 2); - y[i].qs[4*j + 3] = wasm_i32x4_extract_lane(vi, 3); - - accv = wasm_i32x4_add(accv, vi); - } - - y[i].s = d * (wasm_i32x4_extract_lane(accv, 0) + - wasm_i32x4_extract_lane(accv, 1) + - wasm_i32x4_extract_lane(accv, 2) + - wasm_i32x4_extract_lane(accv, 3)); - } -#elif defined(__AVX2__) || defined(__AVX__) - for (int i = 0; i < nb; i++) { - // Load elements into 4 AVX vectors - __m256 v0 = _mm256_loadu_ps( x ); - __m256 v1 = _mm256_loadu_ps( x + 8 ); - __m256 v2 = _mm256_loadu_ps( x + 16 ); - __m256 v3 = _mm256_loadu_ps( x + 24 ); - x += 32; - - // Compute max(abs(e)) for the block - const __m256 signBit = _mm256_set1_ps( -0.0f ); - __m256 maxAbs = _mm256_andnot_ps( signBit, v0 ); - maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v1 ) ); - maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v2 ) ); - maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v3 ) ); - - __m128 max4 = _mm_max_ps( _mm256_extractf128_ps( maxAbs, 1 ), _mm256_castps256_ps128( maxAbs ) ); - max4 = _mm_max_ps( max4, _mm_movehl_ps( max4, max4 ) ); - max4 = _mm_max_ss( max4, _mm_movehdup_ps( max4 ) ); - const float maxScalar = _mm_cvtss_f32( max4 ); - - // Quantize these floats - const float d = maxScalar / 127.f; - y[i].d = d; - const float id = ( maxScalar != 0.0f ) ? 127.f / maxScalar : 0.0f; - const __m256 mul = _mm256_set1_ps( id ); - - // Apply the multiplier - v0 = _mm256_mul_ps( v0, mul ); - v1 = _mm256_mul_ps( v1, mul ); - v2 = _mm256_mul_ps( v2, mul ); - v3 = _mm256_mul_ps( v3, mul ); - - // Round to nearest integer - v0 = _mm256_round_ps( v0, _MM_ROUND_NEAREST ); - v1 = _mm256_round_ps( v1, _MM_ROUND_NEAREST ); - v2 = _mm256_round_ps( v2, _MM_ROUND_NEAREST ); - v3 = _mm256_round_ps( v3, _MM_ROUND_NEAREST ); - - // Convert floats to integers - __m256i i0 = _mm256_cvtps_epi32( v0 ); - __m256i i1 = _mm256_cvtps_epi32( v1 ); - __m256i i2 = _mm256_cvtps_epi32( v2 ); - __m256i i3 = _mm256_cvtps_epi32( v3 ); - -#if defined(__AVX2__) - // Compute the sum of the quants and set y[i].s - y[i].s = d * hsum_i32_8(_mm256_add_epi32(_mm256_add_epi32(i0, i1), _mm256_add_epi32(i2, i3))); - - // Convert int32 to int16 - i0 = _mm256_packs_epi32( i0, i1 ); // 0, 1, 2, 3, 8, 9, 10, 11, 4, 5, 6, 7, 12, 13, 14, 15 - i2 = _mm256_packs_epi32( i2, i3 ); // 16, 17, 18, 19, 24, 25, 26, 27, 20, 21, 22, 23, 28, 29, 30, 31 - // Convert int16 to int8 - i0 = _mm256_packs_epi16( i0, i2 ); // 0, 1, 2, 3, 8, 9, 10, 11, 16, 17, 18, 19, 24, 25, 26, 27, 4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, 28, 29, 30, 31 - - // We got our precious signed bytes, but the order is now wrong - // These AVX2 pack instructions process 16-byte pieces independently - // The following instruction is fixing the order - const __m256i perm = _mm256_setr_epi32( 0, 4, 1, 5, 2, 6, 3, 7 ); - i0 = _mm256_permutevar8x32_epi32( i0, perm ); - - _mm256_storeu_si256((__m256i *)y[i].qs, i0); -#else - // Since we don't have in AVX some necessary functions, - // we split the registers in half and call AVX2 analogs from SSE - __m128i ni0 = _mm256_castsi256_si128( i0 ); - __m128i ni1 = _mm256_extractf128_si256( i0, 1); - __m128i ni2 = _mm256_castsi256_si128( i1 ); - __m128i ni3 = _mm256_extractf128_si256( i1, 1); - __m128i ni4 = _mm256_castsi256_si128( i2 ); - __m128i ni5 = _mm256_extractf128_si256( i2, 1); - __m128i ni6 = _mm256_castsi256_si128( i3 ); - __m128i ni7 = _mm256_extractf128_si256( i3, 1); - - // Compute the sum of the quants and set y[i].s - const __m128i s0 = _mm_add_epi32(_mm_add_epi32(ni0, ni1), _mm_add_epi32(ni2, ni3)); - const __m128i s1 = _mm_add_epi32(_mm_add_epi32(ni4, ni5), _mm_add_epi32(ni6, ni7)); - y[i].s = d * hsum_i32_4(_mm_add_epi32(s0, s1)); - - // Convert int32 to int16 - ni0 = _mm_packs_epi32( ni0, ni1 ); - ni2 = _mm_packs_epi32( ni2, ni3 ); - ni4 = _mm_packs_epi32( ni4, ni5 ); - ni6 = _mm_packs_epi32( ni6, ni7 ); - // Convert int16 to int8 - ni0 = _mm_packs_epi16( ni0, ni2 ); - ni4 = _mm_packs_epi16( ni4, ni6 ); - - _mm_storeu_si128((__m128i *)(y[i].qs + 0), ni0); - _mm_storeu_si128((__m128i *)(y[i].qs + 16), ni4); -#endif - } -#elif defined(__riscv_v_intrinsic) - - size_t vl = __riscv_vsetvl_e32m4(QK8_1); - - for (int i = 0; i < nb; i++) { - // load elements - vfloat32m4_t v_x = __riscv_vle32_v_f32m4(x+i*QK8_1, vl); - - vfloat32m4_t vfabs = __riscv_vfabs_v_f32m4(v_x, vl); - vfloat32m1_t tmp = __riscv_vfmv_v_f_f32m1(0.0, vl); - vfloat32m1_t vmax = __riscv_vfredmax_vs_f32m4_f32m1(vfabs, tmp, vl); - float amax = __riscv_vfmv_f_s_f32m1_f32(vmax); - - const float d = amax / ((1 << 7) - 1); - const float id = d ? 1.0f/d : 0.0f; - - y[i].d = d; - - vfloat32m4_t x0 = __riscv_vfmul_vf_f32m4(v_x, id, vl); - - // convert to integer - vint16m2_t vi = __riscv_vfncvt_x_f_w_i16m2(x0, vl); - vint8m1_t vs = __riscv_vncvt_x_x_w_i8m1(vi, vl); - - // store result - __riscv_vse8_v_i8m1(y[i].qs , vs, vl); - - // compute sum for y[i].s - vint16m1_t tmp2 = __riscv_vmv_v_x_i16m1(0, vl); - vint16m1_t vwrs = __riscv_vwredsum_vs_i8m1_i16m1(vs, tmp2, vl); - - // set y[i].s - int sum = __riscv_vmv_x_s_i16m1_i16(vwrs); - y[i].s = sum*d; - } -#else - // scalar - quantize_row_q8_1_reference(x, y, k); -#endif -} - -static void dequantize_row_q4_0(const block_q4_0 * restrict x, float * restrict y, int k) { - static const int qk = QK4_0; - - assert(k % qk == 0); - - const int nb = k / qk; - - for (int i = 0; i < nb; i++) { - const float d = GGML_FP16_TO_FP32(x[i].d); - - for (int j = 0; j < qk/2; ++j) { - const int x0 = (x[i].qs[j] & 0x0F) - 8; - const int x1 = (x[i].qs[j] >> 4) - 8; - - y[i*qk + j + 0 ] = x0*d; - y[i*qk + j + qk/2] = x1*d; - } - } -} - -static void dequantize_row_q4_1(const block_q4_1 * restrict x, float * restrict y, int k) { - static const int qk = QK4_1; - - assert(k % qk == 0); - - const int nb = k / qk; - - for (int i = 0; i < nb; i++) { - const float d = GGML_FP16_TO_FP32(x[i].d); - const float m = GGML_FP16_TO_FP32(x[i].m); - - for (int j = 0; j < qk/2; ++j) { - const int x0 = (x[i].qs[j] & 0x0F); - const int x1 = (x[i].qs[j] >> 4); - - y[i*qk + j + 0 ] = x0*d + m; - y[i*qk + j + qk/2] = x1*d + m; - } - } -} - -static void dequantize_row_q5_0(const block_q5_0 * restrict x, float * restrict y, int k) { - static const int qk = QK5_0; - - assert(k % qk == 0); - - const int nb = k / qk; - - for (int i = 0; i < nb; i++) { - const float d = GGML_FP16_TO_FP32(x[i].d); - - uint32_t qh; - memcpy(&qh, x[i].qh, sizeof(qh)); - - for (int j = 0; j < qk/2; ++j) { - const uint8_t xh_0 = ((qh >> (j + 0)) << 4) & 0x10; - const uint8_t xh_1 = ((qh >> (j + 12)) ) & 0x10; - - const int32_t x0 = ((x[i].qs[j] & 0x0F) | xh_0) - 16; - const int32_t x1 = ((x[i].qs[j] >> 4) | xh_1) - 16; - - y[i*qk + j + 0 ] = x0*d; - y[i*qk + j + qk/2] = x1*d; - } - } -} - -static void dequantize_row_q5_1(const block_q5_1 * restrict x, float * restrict y, int k) { - static const int qk = QK5_1; - - assert(k % qk == 0); - - const int nb = k / qk; - - for (int i = 0; i < nb; i++) { - const float d = GGML_FP16_TO_FP32(x[i].d); - const float m = GGML_FP16_TO_FP32(x[i].m); - - uint32_t qh; - memcpy(&qh, x[i].qh, sizeof(qh)); - - for (int j = 0; j < qk/2; ++j) { - const uint8_t xh_0 = ((qh >> (j + 0)) << 4) & 0x10; - const uint8_t xh_1 = ((qh >> (j + 12)) ) & 0x10; - - const int x0 = (x[i].qs[j] & 0x0F) | xh_0; - const int x1 = (x[i].qs[j] >> 4) | xh_1; - - y[i*qk + j + 0 ] = x0*d + m; - y[i*qk + j + qk/2] = x1*d + m; - } - } -} - -static void dequantize_row_q8_0(const void * restrict vx, float * restrict y, int k) { - static const int qk = QK8_0; - - assert(k % qk == 0); - - const int nb = k / qk; - - const block_q8_0 * restrict x = vx; - - for (int i = 0; i < nb; i++) { - const float d = GGML_FP16_TO_FP32(x[i].d); - - for (int j = 0; j < qk; ++j) { - y[i*qk + j] = x[i].qs[j]*d; - } - } -} - -static void ggml_vec_dot_f32(const int n, float * restrict s, const float * restrict x, const float * restrict y); -static void ggml_vec_dot_f16(const int n, float * restrict s, ggml_fp16_t * restrict x, ggml_fp16_t * restrict y); -static void ggml_vec_dot_q4_0_q8_0(const int n, float * restrict s, const void * restrict vx, const void * restrict vy); -static void ggml_vec_dot_q4_1_q8_1(const int n, float * restrict s, const void * restrict vx, const void * restrict vy); -static void ggml_vec_dot_q5_0_q8_0(const int n, float * restrict s, const void * restrict vx, const void * restrict vy); -static void ggml_vec_dot_q5_1_q8_1(const int n, float * restrict s, const void * restrict vx, const void * restrict vy); -static void ggml_vec_dot_q8_0_q8_0(const int n, float * restrict s, const void * restrict vx, const void * restrict vy); - -static const ggml_type_traits_t type_traits[GGML_TYPE_COUNT] = { - [GGML_TYPE_I8] = { - .type_name = "i8", - .blck_size = 1, - .type_size = sizeof(int8_t), - .is_quantized = false, - }, - [GGML_TYPE_I16] = { - .type_name = "i16", - .blck_size = 1, - .type_size = sizeof(int16_t), - .is_quantized = false, - }, - [GGML_TYPE_I32] = { - .type_name = "i32", - .blck_size = 1, - .type_size = sizeof(int32_t), - .is_quantized = false, - }, - [GGML_TYPE_F32] = { - .type_name = "f32", - .blck_size = 1, - .type_size = sizeof(float), - .is_quantized = false, - .vec_dot = (ggml_vec_dot_t) ggml_vec_dot_f32, - .vec_dot_type = GGML_TYPE_F32, - }, - [GGML_TYPE_F16] = { - .type_name = "f16", - .blck_size = 1, - .type_size = sizeof(ggml_fp16_t), - .is_quantized = false, - .to_float = (ggml_to_float_t) ggml_fp16_to_fp32_row, - .from_float = (ggml_from_float_t) ggml_fp32_to_fp16_row, - .from_float_reference = (ggml_from_float_t) ggml_fp32_to_fp16_row, - .vec_dot = (ggml_vec_dot_t) ggml_vec_dot_f16, - .vec_dot_type = GGML_TYPE_F16, - }, - [GGML_TYPE_Q4_0] = { - .type_name = "q4_0", - .blck_size = QK4_0, - .type_size = sizeof(block_q4_0), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_q4_0, - .from_float = quantize_row_q4_0, - .from_float_reference = (ggml_from_float_t) quantize_row_q4_0_reference, - .vec_dot = ggml_vec_dot_q4_0_q8_0, - .vec_dot_type = GGML_TYPE_Q8_0, - }, - [GGML_TYPE_Q4_1] = { - .type_name = "q4_1", - .blck_size = QK4_1, - .type_size = sizeof(block_q4_1), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_q4_1, - .from_float = quantize_row_q4_1, - .from_float_reference = (ggml_from_float_t) quantize_row_q4_1_reference, - .vec_dot = ggml_vec_dot_q4_1_q8_1, - .vec_dot_type = GGML_TYPE_Q8_1, - }, - [GGML_TYPE_Q5_0] = { - .type_name = "q5_0", - .blck_size = QK5_0, - .type_size = sizeof(block_q5_0), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_q5_0, - .from_float = quantize_row_q5_0, - .from_float_reference = (ggml_from_float_t) quantize_row_q5_0_reference, - .vec_dot = ggml_vec_dot_q5_0_q8_0, - .vec_dot_type = GGML_TYPE_Q8_0, - }, - [GGML_TYPE_Q5_1] = { - .type_name = "q5_1", - .blck_size = QK5_1, - .type_size = sizeof(block_q5_1), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_q5_1, - .from_float = quantize_row_q5_1, - .from_float_reference = (ggml_from_float_t) quantize_row_q5_1_reference, - .vec_dot = ggml_vec_dot_q5_1_q8_1, - .vec_dot_type = GGML_TYPE_Q8_1, - }, - [GGML_TYPE_Q8_0] = { - .type_name = "q8_0", - .blck_size = QK8_0, - .type_size = sizeof(block_q8_0), - .is_quantized = true, - .to_float = dequantize_row_q8_0, - .from_float = quantize_row_q8_0, - .from_float_reference = (ggml_from_float_t) quantize_row_q8_0_reference, - .vec_dot = ggml_vec_dot_q8_0_q8_0, - .vec_dot_type = GGML_TYPE_Q8_0, - }, - [GGML_TYPE_Q8_1] = { - .type_name = "q8_1", - .blck_size = QK8_1, - .type_size = sizeof(block_q8_1), - .is_quantized = true, - .from_float = quantize_row_q8_1, - .from_float_reference = (ggml_from_float_t) quantize_row_q8_1_reference, - .vec_dot_type = GGML_TYPE_Q8_1, - }, -#ifdef GGML_USE_K_QUANTS - [GGML_TYPE_Q2_K] = { - .type_name = "q2_K", - .blck_size = QK_K, - .type_size = sizeof(block_q2_K), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_q2_K, - .from_float = quantize_row_q2_K, - .from_float_reference = (ggml_from_float_t) quantize_row_q2_K_reference, - .vec_dot = ggml_vec_dot_q2_K_q8_K, - .vec_dot_type = GGML_TYPE_Q8_K, - }, - [GGML_TYPE_Q3_K] = { - .type_name = "q3_K", - .blck_size = QK_K, - .type_size = sizeof(block_q3_K), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_q3_K, - .from_float = quantize_row_q3_K, - .from_float_reference = (ggml_from_float_t) quantize_row_q3_K_reference, - .vec_dot = ggml_vec_dot_q3_K_q8_K, - .vec_dot_type = GGML_TYPE_Q8_K, - }, - [GGML_TYPE_Q4_K] = { - .type_name = "q4_K", - .blck_size = QK_K, - .type_size = sizeof(block_q4_K), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_q4_K, - .from_float = quantize_row_q4_K, - .from_float_reference = (ggml_from_float_t) quantize_row_q4_K_reference, - .vec_dot = ggml_vec_dot_q4_K_q8_K, - .vec_dot_type = GGML_TYPE_Q8_K, - }, - [GGML_TYPE_Q5_K] = { - .type_name = "q5_K", - .blck_size = QK_K, - .type_size = sizeof(block_q5_K), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_q5_K, - .from_float = quantize_row_q5_K, - .from_float_reference = (ggml_from_float_t) quantize_row_q5_K_reference, - .vec_dot = ggml_vec_dot_q5_K_q8_K, - .vec_dot_type = GGML_TYPE_Q8_K, - }, - [GGML_TYPE_Q6_K] = { - .type_name = "q6_K", - .blck_size = QK_K, - .type_size = sizeof(block_q6_K), - .is_quantized = true, - .to_float = (ggml_to_float_t) dequantize_row_q6_K, - .from_float = quantize_row_q6_K, - .from_float_reference = (ggml_from_float_t) quantize_row_q6_K_reference, - .vec_dot = ggml_vec_dot_q6_K_q8_K, - .vec_dot_type = GGML_TYPE_Q8_K, - }, - [GGML_TYPE_Q8_K] = { - .type_name = "q8_K", - .blck_size = QK_K, - .type_size = sizeof(block_q8_K), - .is_quantized = true, - .from_float = quantize_row_q8_K, - } -#endif -}; - -// For internal test use -ggml_type_traits_t ggml_internal_get_type_traits(enum ggml_type type) { - GGML_ASSERT(type < GGML_TYPE_COUNT); - return type_traits[type]; -} - -// -// simd mappings -// - -// we define a common set of C macros which map to specific intrinsics based on the current architecture -// we then implement the fundamental computation operations below using only these macros -// adding support for new architectures requires to define the corresponding SIMD macros -// -// GGML_F32_STEP / GGML_F16_STEP -// number of elements to process in a single step -// -// GGML_F32_EPR / GGML_F16_EPR -// number of elements to fit in a single register -// - -#if defined(__ARM_NEON) && defined(__ARM_FEATURE_FMA) - -#define GGML_SIMD - -// F32 NEON - -#define GGML_F32_STEP 16 -#define GGML_F32_EPR 4 - -#define GGML_F32x4 float32x4_t -#define GGML_F32x4_ZERO vdupq_n_f32(0.0f) -#define GGML_F32x4_SET1(x) vdupq_n_f32(x) -#define GGML_F32x4_LOAD vld1q_f32 -#define GGML_F32x4_STORE vst1q_f32 -#define GGML_F32x4_FMA(a, b, c) vfmaq_f32(a, b, c) -#define GGML_F32x4_ADD vaddq_f32 -#define GGML_F32x4_MUL vmulq_f32 -#define GGML_F32x4_REDUCE_ONE(x) vaddvq_f32(x) -#define GGML_F32x4_REDUCE(res, x) \ -{ \ - int offset = GGML_F32_ARR >> 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = vaddq_f32(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = vaddq_f32(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = vaddq_f32(x[i], x[offset+i]); \ - } \ - res = GGML_F32x4_REDUCE_ONE(x[0]); \ -} - -#define GGML_F32_VEC GGML_F32x4 -#define GGML_F32_VEC_ZERO GGML_F32x4_ZERO -#define GGML_F32_VEC_SET1 GGML_F32x4_SET1 -#define GGML_F32_VEC_LOAD GGML_F32x4_LOAD -#define GGML_F32_VEC_STORE GGML_F32x4_STORE -#define GGML_F32_VEC_FMA GGML_F32x4_FMA -#define GGML_F32_VEC_ADD GGML_F32x4_ADD -#define GGML_F32_VEC_MUL GGML_F32x4_MUL -#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE - -// F16 NEON - -#if defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC) - #define GGML_F16_STEP 32 - #define GGML_F16_EPR 8 - - #define GGML_F16x8 float16x8_t - #define GGML_F16x8_ZERO vdupq_n_f16(0.0f) - #define GGML_F16x8_SET1(x) vdupq_n_f16(x) - #define GGML_F16x8_LOAD vld1q_f16 - #define GGML_F16x8_STORE vst1q_f16 - #define GGML_F16x8_FMA(a, b, c) vfmaq_f16(a, b, c) - #define GGML_F16x8_ADD vaddq_f16 - #define GGML_F16x8_MUL vmulq_f16 - #define GGML_F16x8_REDUCE(res, x) \ - do { \ - int offset = GGML_F16_ARR >> 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = vaddq_f16(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = vaddq_f16(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = vaddq_f16(x[i], x[offset+i]); \ - } \ - const float32x4_t t0 = vcvt_f32_f16(vget_low_f16 (x[0])); \ - const float32x4_t t1 = vcvt_f32_f16(vget_high_f16(x[0])); \ - res = (ggml_float) vaddvq_f32(vaddq_f32(t0, t1)); \ - } while (0) - - #define GGML_F16_VEC GGML_F16x8 - #define GGML_F16_VEC_ZERO GGML_F16x8_ZERO - #define GGML_F16_VEC_SET1 GGML_F16x8_SET1 - #define GGML_F16_VEC_LOAD(p, i) GGML_F16x8_LOAD(p) - #define GGML_F16_VEC_STORE(p, r, i) GGML_F16x8_STORE(p, r[i]) - #define GGML_F16_VEC_FMA GGML_F16x8_FMA - #define GGML_F16_VEC_ADD GGML_F16x8_ADD - #define GGML_F16_VEC_MUL GGML_F16x8_MUL - #define GGML_F16_VEC_REDUCE GGML_F16x8_REDUCE -#else - // if FP16 vector arithmetic is not supported, we use FP32 instead - // and take advantage of the vcvt_ functions to convert to/from FP16 - - #define GGML_F16_STEP 16 - #define GGML_F16_EPR 4 - - #define GGML_F32Cx4 float32x4_t - #define GGML_F32Cx4_ZERO vdupq_n_f32(0.0f) - #define GGML_F32Cx4_SET1(x) vdupq_n_f32(x) - #define GGML_F32Cx4_LOAD(x) vcvt_f32_f16(vld1_f16(x)) - #define GGML_F32Cx4_STORE(x, y) vst1_f16(x, vcvt_f16_f32(y)) - #define GGML_F32Cx4_FMA(a, b, c) vfmaq_f32(a, b, c) - #define GGML_F32Cx4_ADD vaddq_f32 - #define GGML_F32Cx4_MUL vmulq_f32 - #define GGML_F32Cx4_REDUCE GGML_F32x4_REDUCE - - #define GGML_F16_VEC GGML_F32Cx4 - #define GGML_F16_VEC_ZERO GGML_F32Cx4_ZERO - #define GGML_F16_VEC_SET1 GGML_F32Cx4_SET1 - #define GGML_F16_VEC_LOAD(p, i) GGML_F32Cx4_LOAD(p) - #define GGML_F16_VEC_STORE(p, r, i) GGML_F32Cx4_STORE(p, r[i]) - #define GGML_F16_VEC_FMA GGML_F32Cx4_FMA - #define GGML_F16_VEC_ADD GGML_F32Cx4_ADD - #define GGML_F16_VEC_MUL GGML_F32Cx4_MUL - #define GGML_F16_VEC_REDUCE GGML_F32Cx4_REDUCE -#endif - -#elif defined(__AVX__) - -#define GGML_SIMD - -// F32 AVX - -#define GGML_F32_STEP 32 -#define GGML_F32_EPR 8 - -#define GGML_F32x8 __m256 -#define GGML_F32x8_ZERO _mm256_setzero_ps() -#define GGML_F32x8_SET1(x) _mm256_set1_ps(x) -#define GGML_F32x8_LOAD _mm256_loadu_ps -#define GGML_F32x8_STORE _mm256_storeu_ps -#if defined(__FMA__) - #define GGML_F32x8_FMA(a, b, c) _mm256_fmadd_ps(b, c, a) -#else - #define GGML_F32x8_FMA(a, b, c) _mm256_add_ps(_mm256_mul_ps(b, c), a) -#endif -#define GGML_F32x8_ADD _mm256_add_ps -#define GGML_F32x8_MUL _mm256_mul_ps -#define GGML_F32x8_REDUCE(res, x) \ -do { \ - int offset = GGML_F32_ARR >> 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = _mm256_add_ps(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = _mm256_add_ps(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = _mm256_add_ps(x[i], x[offset+i]); \ - } \ - const __m128 t0 = _mm_add_ps(_mm256_castps256_ps128(x[0]), \ - _mm256_extractf128_ps(x[0], 1)); \ - const __m128 t1 = _mm_hadd_ps(t0, t0); \ - res = _mm_cvtss_f32(_mm_hadd_ps(t1, t1)); \ -} while (0) -// TODO: is this optimal ? - -#define GGML_F32_VEC GGML_F32x8 -#define GGML_F32_VEC_ZERO GGML_F32x8_ZERO -#define GGML_F32_VEC_SET1 GGML_F32x8_SET1 -#define GGML_F32_VEC_LOAD GGML_F32x8_LOAD -#define GGML_F32_VEC_STORE GGML_F32x8_STORE -#define GGML_F32_VEC_FMA GGML_F32x8_FMA -#define GGML_F32_VEC_ADD GGML_F32x8_ADD -#define GGML_F32_VEC_MUL GGML_F32x8_MUL -#define GGML_F32_VEC_REDUCE GGML_F32x8_REDUCE - -// F16 AVX - -#define GGML_F16_STEP 32 -#define GGML_F16_EPR 8 - -// F16 arithmetic is not supported by AVX, so we use F32 instead - -#define GGML_F32Cx8 __m256 -#define GGML_F32Cx8_ZERO _mm256_setzero_ps() -#define GGML_F32Cx8_SET1(x) _mm256_set1_ps(x) - -#if defined(__F16C__) -// the _mm256_cvt intrinsics require F16C -#define GGML_F32Cx8_LOAD(x) _mm256_cvtph_ps(_mm_loadu_si128((__m128i *)(x))) -#define GGML_F32Cx8_STORE(x, y) _mm_storeu_si128((__m128i *)(x), _mm256_cvtps_ph(y, 0)) -#else -static inline __m256 __avx_f32cx8_load(ggml_fp16_t *x) { - float tmp[8]; - - for (int i = 0; i < 8; i++) { - tmp[i] = GGML_FP16_TO_FP32(x[i]); - } - - return _mm256_loadu_ps(tmp); -} -static inline void __avx_f32cx8_store(ggml_fp16_t *x, __m256 y) { - float arr[8]; - - _mm256_storeu_ps(arr, y); - - for (int i = 0; i < 8; i++) - x[i] = GGML_FP32_TO_FP16(arr[i]); -} -#define GGML_F32Cx8_LOAD(x) __avx_f32cx8_load(x) -#define GGML_F32Cx8_STORE(x, y) __avx_f32cx8_store(x, y) -#endif - -#define GGML_F32Cx8_FMA GGML_F32x8_FMA -#define GGML_F32Cx8_ADD _mm256_add_ps -#define GGML_F32Cx8_MUL _mm256_mul_ps -#define GGML_F32Cx8_REDUCE GGML_F32x8_REDUCE - -#define GGML_F16_VEC GGML_F32Cx8 -#define GGML_F16_VEC_ZERO GGML_F32Cx8_ZERO -#define GGML_F16_VEC_SET1 GGML_F32Cx8_SET1 -#define GGML_F16_VEC_LOAD(p, i) GGML_F32Cx8_LOAD(p) -#define GGML_F16_VEC_STORE(p, r, i) GGML_F32Cx8_STORE(p, r[i]) -#define GGML_F16_VEC_FMA GGML_F32Cx8_FMA -#define GGML_F16_VEC_ADD GGML_F32Cx8_ADD -#define GGML_F16_VEC_MUL GGML_F32Cx8_MUL -#define GGML_F16_VEC_REDUCE GGML_F32Cx8_REDUCE - -#elif defined(__POWER9_VECTOR__) - -#define GGML_SIMD - -// F32 POWER9 - -#define GGML_F32_STEP 32 -#define GGML_F32_EPR 4 - -#define GGML_F32x4 vector float -#define GGML_F32x4_ZERO 0.0f -#define GGML_F32x4_SET1 vec_splats -#define GGML_F32x4_LOAD(p) vec_xl(0, p) -#define GGML_F32x4_STORE(p, r) vec_xst(r, 0, p) -#define GGML_F32x4_FMA(a, b, c) vec_madd(b, c, a) -#define GGML_F32x4_ADD vec_add -#define GGML_F32x4_MUL vec_mul -#define GGML_F32x4_REDUCE(res, x) \ -{ \ - int offset = GGML_F32_ARR >> 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = vec_add(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = vec_add(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = vec_add(x[i], x[offset+i]); \ - } \ - res = vec_extract(x[0], 0) + \ - vec_extract(x[0], 1) + \ - vec_extract(x[0], 2) + \ - vec_extract(x[0], 3); \ -} - -#define GGML_F32_VEC GGML_F32x4 -#define GGML_F32_VEC_ZERO GGML_F32x4_ZERO -#define GGML_F32_VEC_SET1 GGML_F32x4_SET1 -#define GGML_F32_VEC_LOAD GGML_F32x4_LOAD -#define GGML_F32_VEC_STORE GGML_F32x4_STORE -#define GGML_F32_VEC_FMA GGML_F32x4_FMA -#define GGML_F32_VEC_ADD GGML_F32x4_ADD -#define GGML_F32_VEC_MUL GGML_F32x4_MUL -#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE - -// F16 POWER9 -#define GGML_F16_STEP GGML_F32_STEP -#define GGML_F16_EPR GGML_F32_EPR -#define GGML_F16_VEC GGML_F32x4 -#define GGML_F16_VEC_ZERO GGML_F32x4_ZERO -#define GGML_F16_VEC_SET1 GGML_F32x4_SET1 -#define GGML_F16_VEC_FMA GGML_F32x4_FMA -#define GGML_F16_VEC_REDUCE GGML_F32x4_REDUCE -// Use vec_xl, not vec_ld, in case the load address is not aligned. -#define GGML_F16_VEC_LOAD(p, i) (i & 0x1) ? \ - vec_extract_fp32_from_shorth(vec_xl(0, p - GGML_F16_EPR)) : \ - vec_extract_fp32_from_shortl(vec_xl(0, p)) -#define GGML_ENDIAN_BYTE(i) ((unsigned char *)&(uint16_t){1})[i] -#define GGML_F16_VEC_STORE(p, r, i) \ - if (i & 0x1) \ - vec_xst(vec_pack_to_short_fp32(r[i - GGML_ENDIAN_BYTE(1)], \ - r[i - GGML_ENDIAN_BYTE(0)]), \ - 0, p - GGML_F16_EPR) - -#elif defined(__wasm_simd128__) - -#define GGML_SIMD - -// F32 WASM - -#define GGML_F32_STEP 16 -#define GGML_F32_EPR 4 - -#define GGML_F32x4 v128_t -#define GGML_F32x4_ZERO wasm_f32x4_splat(0.0f) -#define GGML_F32x4_SET1(x) wasm_f32x4_splat(x) -#define GGML_F32x4_LOAD wasm_v128_load -#define GGML_F32x4_STORE wasm_v128_store -#define GGML_F32x4_FMA(a, b, c) wasm_f32x4_add(wasm_f32x4_mul(b, c), a) -#define GGML_F32x4_ADD wasm_f32x4_add -#define GGML_F32x4_MUL wasm_f32x4_mul -#define GGML_F32x4_REDUCE(res, x) \ -{ \ - int offset = GGML_F32_ARR >> 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = wasm_f32x4_add(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = wasm_f32x4_add(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = wasm_f32x4_add(x[i], x[offset+i]); \ - } \ - res = wasm_f32x4_extract_lane(x[0], 0) + \ - wasm_f32x4_extract_lane(x[0], 1) + \ - wasm_f32x4_extract_lane(x[0], 2) + \ - wasm_f32x4_extract_lane(x[0], 3); \ -} - -#define GGML_F32_VEC GGML_F32x4 -#define GGML_F32_VEC_ZERO GGML_F32x4_ZERO -#define GGML_F32_VEC_SET1 GGML_F32x4_SET1 -#define GGML_F32_VEC_LOAD GGML_F32x4_LOAD -#define GGML_F32_VEC_STORE GGML_F32x4_STORE -#define GGML_F32_VEC_FMA GGML_F32x4_FMA -#define GGML_F32_VEC_ADD GGML_F32x4_ADD -#define GGML_F32_VEC_MUL GGML_F32x4_MUL -#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE - -// F16 WASM - -#define GGML_F16_STEP 16 -#define GGML_F16_EPR 4 - -inline static v128_t __wasm_f16x4_load(const ggml_fp16_t * p) { - float tmp[4]; - - tmp[0] = GGML_FP16_TO_FP32(p[0]); - tmp[1] = GGML_FP16_TO_FP32(p[1]); - tmp[2] = GGML_FP16_TO_FP32(p[2]); - tmp[3] = GGML_FP16_TO_FP32(p[3]); - - return wasm_v128_load(tmp); -} - -inline static void __wasm_f16x4_store(ggml_fp16_t * p, v128_t x) { - float tmp[4]; - - wasm_v128_store(tmp, x); - - p[0] = GGML_FP32_TO_FP16(tmp[0]); - p[1] = GGML_FP32_TO_FP16(tmp[1]); - p[2] = GGML_FP32_TO_FP16(tmp[2]); - p[3] = GGML_FP32_TO_FP16(tmp[3]); -} - -#define GGML_F16x4 v128_t -#define GGML_F16x4_ZERO wasm_f32x4_splat(0.0f) -#define GGML_F16x4_SET1(x) wasm_f32x4_splat(x) -#define GGML_F16x4_LOAD(x) __wasm_f16x4_load(x) -#define GGML_F16x4_STORE(x, y) __wasm_f16x4_store(x, y) -#define GGML_F16x4_FMA GGML_F32x4_FMA -#define GGML_F16x4_ADD wasm_f32x4_add -#define GGML_F16x4_MUL wasm_f32x4_mul -#define GGML_F16x4_REDUCE(res, x) \ -{ \ - int offset = GGML_F16_ARR >> 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = wasm_f32x4_add(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = wasm_f32x4_add(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = wasm_f32x4_add(x[i], x[offset+i]); \ - } \ - res = wasm_f32x4_extract_lane(x[0], 0) + \ - wasm_f32x4_extract_lane(x[0], 1) + \ - wasm_f32x4_extract_lane(x[0], 2) + \ - wasm_f32x4_extract_lane(x[0], 3); \ -} - -#define GGML_F16_VEC GGML_F16x4 -#define GGML_F16_VEC_ZERO GGML_F16x4_ZERO -#define GGML_F16_VEC_SET1 GGML_F16x4_SET1 -#define GGML_F16_VEC_LOAD(p, i) GGML_F16x4_LOAD(p) -#define GGML_F16_VEC_STORE(p, r, i) GGML_F16x4_STORE(p, r[i]) -#define GGML_F16_VEC_FMA GGML_F16x4_FMA -#define GGML_F16_VEC_ADD GGML_F16x4_ADD -#define GGML_F16_VEC_MUL GGML_F16x4_MUL -#define GGML_F16_VEC_REDUCE GGML_F16x4_REDUCE - -#elif defined(__SSE3__) - -#define GGML_SIMD - -// F32 SSE - -#define GGML_F32_STEP 32 -#define GGML_F32_EPR 4 - -#define GGML_F32x4 __m128 -#define GGML_F32x4_ZERO _mm_setzero_ps() -#define GGML_F32x4_SET1(x) _mm_set1_ps(x) -#define GGML_F32x4_LOAD _mm_loadu_ps -#define GGML_F32x4_STORE _mm_storeu_ps -#if defined(__FMA__) - // TODO: Does this work? - #define GGML_F32x4_FMA(a, b, c) _mm_fmadd_ps(b, c, a) -#else - #define GGML_F32x4_FMA(a, b, c) _mm_add_ps(_mm_mul_ps(b, c), a) -#endif -#define GGML_F32x4_ADD _mm_add_ps -#define GGML_F32x4_MUL _mm_mul_ps -#define GGML_F32x4_REDUCE(res, x) \ -{ \ - int offset = GGML_F32_ARR >> 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = _mm_add_ps(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = _mm_add_ps(x[i], x[offset+i]); \ - } \ - offset >>= 1; \ - for (int i = 0; i < offset; ++i) { \ - x[i] = _mm_add_ps(x[i], x[offset+i]); \ - } \ - const __m128 t0 = _mm_hadd_ps(x[0], x[0]); \ - res = _mm_cvtss_f32(_mm_hadd_ps(t0, t0)); \ -} -// TODO: is this optimal ? - -#define GGML_F32_VEC GGML_F32x4 -#define GGML_F32_VEC_ZERO GGML_F32x4_ZERO -#define GGML_F32_VEC_SET1 GGML_F32x4_SET1 -#define GGML_F32_VEC_LOAD GGML_F32x4_LOAD -#define GGML_F32_VEC_STORE GGML_F32x4_STORE -#define GGML_F32_VEC_FMA GGML_F32x4_FMA -#define GGML_F32_VEC_ADD GGML_F32x4_ADD -#define GGML_F32_VEC_MUL GGML_F32x4_MUL -#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE - -// F16 SSE - -#define GGML_F16_STEP 32 -#define GGML_F16_EPR 4 - -static inline __m128 __sse_f16x4_load(ggml_fp16_t *x) { - float tmp[4]; - - tmp[0] = GGML_FP16_TO_FP32(x[0]); - tmp[1] = GGML_FP16_TO_FP32(x[1]); - tmp[2] = GGML_FP16_TO_FP32(x[2]); - tmp[3] = GGML_FP16_TO_FP32(x[3]); - - return _mm_loadu_ps(tmp); -} - -static inline void __sse_f16x4_store(ggml_fp16_t *x, __m128 y) { - float arr[4]; - - _mm_storeu_ps(arr, y); - - x[0] = GGML_FP32_TO_FP16(arr[0]); - x[1] = GGML_FP32_TO_FP16(arr[1]); - x[2] = GGML_FP32_TO_FP16(arr[2]); - x[3] = GGML_FP32_TO_FP16(arr[3]); -} - -#define GGML_F32Cx4 __m128 -#define GGML_F32Cx4_ZERO _mm_setzero_ps() -#define GGML_F32Cx4_SET1(x) _mm_set1_ps(x) -#define GGML_F32Cx4_LOAD(x) __sse_f16x4_load(x) -#define GGML_F32Cx4_STORE(x, y) __sse_f16x4_store(x, y) -#define GGML_F32Cx4_FMA GGML_F32x4_FMA -#define GGML_F32Cx4_ADD _mm_add_ps -#define GGML_F32Cx4_MUL _mm_mul_ps -#define GGML_F32Cx4_REDUCE GGML_F32x4_REDUCE - -#define GGML_F16_VEC GGML_F32Cx4 -#define GGML_F16_VEC_ZERO GGML_F32Cx4_ZERO -#define GGML_F16_VEC_SET1 GGML_F32Cx4_SET1 -#define GGML_F16_VEC_LOAD(p, i) GGML_F32Cx4_LOAD(p) -#define GGML_F16_VEC_STORE(p, r, i) GGML_F32Cx4_STORE(p, r[i]) -#define GGML_F16_VEC_FMA GGML_F32Cx4_FMA -#define GGML_F16_VEC_ADD GGML_F32Cx4_ADD -#define GGML_F16_VEC_MUL GGML_F32Cx4_MUL -#define GGML_F16_VEC_REDUCE GGML_F32Cx4_REDUCE - -#endif - -// GGML_F32_ARR / GGML_F16_ARR -// number of registers to use per step -#ifdef GGML_SIMD -#define GGML_F32_ARR (GGML_F32_STEP/GGML_F32_EPR) -#define GGML_F16_ARR (GGML_F16_STEP/GGML_F16_EPR) -#endif - -// -// fundamental operations -// - -inline static void ggml_vec_set_i8(const int n, int8_t * x, const int8_t v) { for (int i = 0; i < n; ++i) x[i] = v; } - -inline static void ggml_vec_set_i16(const int n, int16_t * x, const int16_t v) { for (int i = 0; i < n; ++i) x[i] = v; } - -inline static void ggml_vec_set_i32(const int n, int32_t * x, const int32_t v) { for (int i = 0; i < n; ++i) x[i] = v; } - -inline static void ggml_vec_set_f16(const int n, ggml_fp16_t * x, const int32_t v) { for (int i = 0; i < n; ++i) x[i] = v; } - -inline static void ggml_vec_add_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i] = x[i] + y[i]; } -inline static void ggml_vec_add1_f32(const int n, float * z, const float * x, const float v) { for (int i = 0; i < n; ++i) z[i] = x[i] + v; } -inline static void ggml_vec_acc_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] += x[i]; } -inline static void ggml_vec_acc1_f32(const int n, float * y, const float v) { for (int i = 0; i < n; ++i) y[i] += v; } -inline static void ggml_vec_sub_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i] = x[i] - y[i]; } -inline static void ggml_vec_set_f32 (const int n, float * x, const float v) { for (int i = 0; i < n; ++i) x[i] = v; } -inline static void ggml_vec_cpy_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = x[i]; } -inline static void ggml_vec_neg_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = -x[i]; } -inline static void ggml_vec_mul_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i] = x[i]*y[i]; } -inline static void ggml_vec_div_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i] = x[i]/y[i]; } - -static void ggml_vec_dot_f32(const int n, float * restrict s, const float * restrict x, const float * restrict y) { -#ifdef GGML_SIMD - float sumf = 0.0f; - const int np = (n & ~(GGML_F32_STEP - 1)); - - GGML_F32_VEC sum[GGML_F32_ARR] = { GGML_F32_VEC_ZERO }; - - GGML_F32_VEC ax[GGML_F32_ARR]; - GGML_F32_VEC ay[GGML_F32_ARR]; - - for (int i = 0; i < np; i += GGML_F32_STEP) { - for (int j = 0; j < GGML_F32_ARR; j++) { - ax[j] = GGML_F32_VEC_LOAD(x + i + j*GGML_F32_EPR); - ay[j] = GGML_F32_VEC_LOAD(y + i + j*GGML_F32_EPR); - - sum[j] = GGML_F32_VEC_FMA(sum[j], ax[j], ay[j]); - } - } - - // reduce sum0..sum3 to sum0 - GGML_F32_VEC_REDUCE(sumf, sum); - - // leftovers - for (int i = np; i < n; ++i) { - sumf += x[i]*y[i]; - } -#else - // scalar - ggml_float sumf = 0.0; - for (int i = 0; i < n; ++i) { - sumf += (ggml_float)(x[i]*y[i]); - } -#endif - - *s = sumf; -} - -static void ggml_vec_dot_f16(const int n, float * restrict s, ggml_fp16_t * restrict x, ggml_fp16_t * restrict y) { - ggml_float sumf = 0.0; - -#if defined(GGML_SIMD) - const int np = (n & ~(GGML_F16_STEP - 1)); - - GGML_F16_VEC sum[GGML_F16_ARR] = { GGML_F16_VEC_ZERO }; - - GGML_F16_VEC ax[GGML_F16_ARR]; - GGML_F16_VEC ay[GGML_F16_ARR]; - - for (int i = 0; i < np; i += GGML_F16_STEP) { - for (int j = 0; j < GGML_F16_ARR; j++) { - ax[j] = GGML_F16_VEC_LOAD(x + i + j*GGML_F16_EPR, j); - ay[j] = GGML_F16_VEC_LOAD(y + i + j*GGML_F16_EPR, j); - - sum[j] = GGML_F16_VEC_FMA(sum[j], ax[j], ay[j]); - } - } - - // reduce sum0..sum3 to sum0 - GGML_F16_VEC_REDUCE(sumf, sum); - - // leftovers - for (int i = np; i < n; ++i) { - sumf += (ggml_float)(GGML_FP16_TO_FP32(x[i])*GGML_FP16_TO_FP32(y[i])); - } -#else - for (int i = 0; i < n; ++i) { - sumf += (ggml_float)(GGML_FP16_TO_FP32(x[i])*GGML_FP16_TO_FP32(y[i])); - } -#endif - - *s = sumf; -} - -static void ggml_vec_dot_q4_0_q8_0(const int n, float * restrict s, const void * restrict vx, const void * restrict vy) { - const int qk = QK8_0; - const int nb = n / qk; - - assert(n % qk == 0); - - const block_q4_0 * restrict x = vx; - const block_q8_0 * restrict y = vy; - -#if defined(__ARM_NEON) - float32x4_t sumv0 = vdupq_n_f32(0.0f); - float32x4_t sumv1 = vdupq_n_f32(0.0f); - - GGML_ASSERT(nb % 2 == 0); // TODO: handle odd nb - for (int i = 0; i < nb; i += 2) { - const block_q4_0 * restrict x0 = &x[i + 0]; - const block_q4_0 * restrict x1 = &x[i + 1]; - const block_q8_0 * restrict y0 = &y[i + 0]; - const block_q8_0 * restrict y1 = &y[i + 1]; - - const uint8x16_t m4b = vdupq_n_u8(0x0F); - const int8x16_t s8b = vdupq_n_s8(0x8); - - const uint8x16_t v0_0 = vld1q_u8(x0->qs); - const uint8x16_t v0_1 = vld1q_u8(x1->qs); - - // 4-bit -> 8-bit - const int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8 (v0_0, m4b)); - const int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4)); - const int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8 (v0_1, m4b)); - const int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4)); - - // sub 8 - const int8x16_t v0_0ls = vsubq_s8(v0_0l, s8b); - const int8x16_t v0_0hs = vsubq_s8(v0_0h, s8b); - const int8x16_t v0_1ls = vsubq_s8(v0_1l, s8b); - const int8x16_t v0_1hs = vsubq_s8(v0_1h, s8b); - - // load y - const int8x16_t v1_0l = vld1q_s8(y0->qs); - const int8x16_t v1_0h = vld1q_s8(y0->qs + 16); - const int8x16_t v1_1l = vld1q_s8(y1->qs); - const int8x16_t v1_1h = vld1q_s8(y1->qs + 16); - -#if defined(__ARM_FEATURE_DOTPROD) - // dot product into int32x4_t - const int32x4_t p_0 = vdotq_s32(vdotq_s32(vdupq_n_s32(0), v0_0ls, v1_0l), v0_0hs, v1_0h); - const int32x4_t p_1 = vdotq_s32(vdotq_s32(vdupq_n_s32(0), v0_1ls, v1_1l), v0_1hs, v1_1h); - - sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(p_0), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d)); - sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(p_1), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d)); -#else - const int16x8_t pl0l = vmull_s8(vget_low_s8 (v0_0ls), vget_low_s8 (v1_0l)); - const int16x8_t pl0h = vmull_s8(vget_high_s8(v0_0ls), vget_high_s8(v1_0l)); - const int16x8_t ph0l = vmull_s8(vget_low_s8 (v0_0hs), vget_low_s8 (v1_0h)); - const int16x8_t ph0h = vmull_s8(vget_high_s8(v0_0hs), vget_high_s8(v1_0h)); - - const int16x8_t pl1l = vmull_s8(vget_low_s8 (v0_1ls), vget_low_s8 (v1_1l)); - const int16x8_t pl1h = vmull_s8(vget_high_s8(v0_1ls), vget_high_s8(v1_1l)); - const int16x8_t ph1l = vmull_s8(vget_low_s8 (v0_1hs), vget_low_s8 (v1_1h)); - const int16x8_t ph1h = vmull_s8(vget_high_s8(v0_1hs), vget_high_s8(v1_1h)); - - const int32x4_t pl0 = vaddq_s32(vpaddlq_s16(pl0l), vpaddlq_s16(pl0h)); - const int32x4_t ph0 = vaddq_s32(vpaddlq_s16(ph0l), vpaddlq_s16(ph0h)); - const int32x4_t pl1 = vaddq_s32(vpaddlq_s16(pl1l), vpaddlq_s16(pl1h)); - const int32x4_t ph1 = vaddq_s32(vpaddlq_s16(ph1l), vpaddlq_s16(ph1h)); - - sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(pl0, ph0)), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d)); - sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(pl1, ph1)), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d)); -#endif - } - - *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1); -#elif defined(__AVX2__) - // Initialize accumulator with zeros - __m256 acc = _mm256_setzero_ps(); - - // Main loop - for (int i = 0; i < nb; ++i) { - /* Compute combined scale for the block */ - const __m256 d = _mm256_set1_ps( GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d) ); - - __m256i bx = bytes_from_nibbles_32(x[i].qs); - - // Now we have a vector with bytes in [ 0 .. 15 ] interval. Offset them into [ -8 .. +7 ] interval. - const __m256i off = _mm256_set1_epi8( 8 ); - bx = _mm256_sub_epi8( bx, off ); - - __m256i by = _mm256_loadu_si256((const __m256i *)y[i].qs); - - const __m256 q = mul_sum_i8_pairs_float(bx, by); - - /* Multiply q with scale and accumulate */ - acc = _mm256_fmadd_ps( d, q, acc ); - } - - *s = hsum_float_8(acc); -#elif defined(__AVX__) - // Initialize accumulator with zeros - __m256 acc = _mm256_setzero_ps(); - - // Main loop - for (int i = 0; i < nb; ++i) { - // Compute combined scale for the block - const __m256 d = _mm256_set1_ps( GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d) ); - - const __m128i lowMask = _mm_set1_epi8(0xF); - const __m128i off = _mm_set1_epi8(8); - - const __m128i tmp = _mm_loadu_si128((const __m128i *)x[i].qs); - - __m128i bx = _mm_and_si128(lowMask, tmp); - __m128i by = _mm_loadu_si128((const __m128i *)y[i].qs); - bx = _mm_sub_epi8(bx, off); - const __m128i i32_0 = mul_sum_i8_pairs(bx, by); - - bx = _mm_and_si128(lowMask, _mm_srli_epi64(tmp, 4)); - by = _mm_loadu_si128((const __m128i *)(y[i].qs + 16)); - bx = _mm_sub_epi8(bx, off); - const __m128i i32_1 = mul_sum_i8_pairs(bx, by); - - // Convert int32_t to float - __m256 p = _mm256_cvtepi32_ps(MM256_SET_M128I(i32_0, i32_1)); - - // Apply the scale, and accumulate - acc = _mm256_add_ps(_mm256_mul_ps( d, p ), acc); - } - - *s = hsum_float_8(acc); -#elif defined(__SSSE3__) - // set constants - const __m128i lowMask = _mm_set1_epi8(0xF); - const __m128i off = _mm_set1_epi8(8); - - // Initialize accumulator with zeros - __m128 acc_0 = _mm_setzero_ps(); - __m128 acc_1 = _mm_setzero_ps(); - __m128 acc_2 = _mm_setzero_ps(); - __m128 acc_3 = _mm_setzero_ps(); - - // First round without accumulation - { - _mm_prefetch(&x[0] + sizeof(block_q4_0), _MM_HINT_T0); - _mm_prefetch(&y[0] + sizeof(block_q8_0), _MM_HINT_T0); - - // Compute combined scale for the block 0 and 1 - const __m128 d_0_1 = _mm_set1_ps( GGML_FP16_TO_FP32(x[0].d) * GGML_FP16_TO_FP32(y[0].d) ); - - const __m128i tmp_0_1 = _mm_loadu_si128((const __m128i *)x[0].qs); - - __m128i bx_0 = _mm_and_si128(lowMask, tmp_0_1); - __m128i by_0 = _mm_loadu_si128((const __m128i *)y[0].qs); - bx_0 = _mm_sub_epi8(bx_0, off); - const __m128i i32_0 = mul_sum_i8_pairs(bx_0, by_0); - - __m128i bx_1 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp_0_1, 4)); - __m128i by_1 = _mm_loadu_si128((const __m128i *)(y[0].qs + 16)); - bx_1 = _mm_sub_epi8(bx_1, off); - const __m128i i32_1 = mul_sum_i8_pairs(bx_1, by_1); - - _mm_prefetch(&x[1] + sizeof(block_q4_0), _MM_HINT_T0); - _mm_prefetch(&y[1] + sizeof(block_q8_0), _MM_HINT_T0); - - // Compute combined scale for the block 2 and 3 - const __m128 d_2_3 = _mm_set1_ps( GGML_FP16_TO_FP32(x[1].d) * GGML_FP16_TO_FP32(y[1].d) ); - - const __m128i tmp_2_3 = _mm_loadu_si128((const __m128i *)x[1].qs); - - __m128i bx_2 = _mm_and_si128(lowMask, tmp_2_3); - __m128i by_2 = _mm_loadu_si128((const __m128i *)y[1].qs); - bx_2 = _mm_sub_epi8(bx_2, off); - const __m128i i32_2 = mul_sum_i8_pairs(bx_2, by_2); - - __m128i bx_3 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp_2_3, 4)); - __m128i by_3 = _mm_loadu_si128((const __m128i *)(y[1].qs + 16)); - bx_3 = _mm_sub_epi8(bx_3, off); - const __m128i i32_3 = mul_sum_i8_pairs(bx_3, by_3); - - // Convert int32_t to float - __m128 p0 = _mm_cvtepi32_ps(i32_0); - __m128 p1 = _mm_cvtepi32_ps(i32_1); - __m128 p2 = _mm_cvtepi32_ps(i32_2); - __m128 p3 = _mm_cvtepi32_ps(i32_3); - - // Apply the scale - acc_0 = _mm_mul_ps( d_0_1, p0 ); - acc_1 = _mm_mul_ps( d_0_1, p1 ); - acc_2 = _mm_mul_ps( d_2_3, p2 ); - acc_3 = _mm_mul_ps( d_2_3, p3 ); - } - - // Main loop - GGML_ASSERT(nb % 2 == 0); // TODO: handle odd nb - for (int i = 2; i < nb; i+=2) { - _mm_prefetch(&x[i] + sizeof(block_q4_0), _MM_HINT_T0); - _mm_prefetch(&y[i] + sizeof(block_q8_0), _MM_HINT_T0); - - // Compute combined scale for the block 0 and 1 - const __m128 d_0_1 = _mm_set1_ps( GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d) ); - - const __m128i tmp_0_1 = _mm_loadu_si128((const __m128i *)x[i].qs); - - __m128i bx_0 = _mm_and_si128(lowMask, tmp_0_1); - __m128i by_0 = _mm_loadu_si128((const __m128i *)y[i].qs); - bx_0 = _mm_sub_epi8(bx_0, off); - const __m128i i32_0 = mul_sum_i8_pairs(bx_0, by_0); - - __m128i bx_1 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp_0_1, 4)); - __m128i by_1 = _mm_loadu_si128((const __m128i *)(y[i].qs + 16)); - bx_1 = _mm_sub_epi8(bx_1, off); - const __m128i i32_1 = mul_sum_i8_pairs(bx_1, by_1); - - _mm_prefetch(&x[i] + 2 * sizeof(block_q4_0), _MM_HINT_T0); - _mm_prefetch(&y[i] + 2 * sizeof(block_q8_0), _MM_HINT_T0); - - // Compute combined scale for the block 2 and 3 - const __m128 d_2_3 = _mm_set1_ps( GGML_FP16_TO_FP32(x[i + 1].d) * GGML_FP16_TO_FP32(y[i + 1].d) ); - - const __m128i tmp_2_3 = _mm_loadu_si128((const __m128i *)x[i + 1].qs); - - __m128i bx_2 = _mm_and_si128(lowMask, tmp_2_3); - __m128i by_2 = _mm_loadu_si128((const __m128i *)y[i + 1].qs); - bx_2 = _mm_sub_epi8(bx_2, off); - const __m128i i32_2 = mul_sum_i8_pairs(bx_2, by_2); - - __m128i bx_3 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp_2_3, 4)); - __m128i by_3 = _mm_loadu_si128((const __m128i *)(y[i + 1].qs + 16)); - bx_3 = _mm_sub_epi8(bx_3, off); - const __m128i i32_3 = mul_sum_i8_pairs(bx_3, by_3); - - // Convert int32_t to float - __m128 p0 = _mm_cvtepi32_ps(i32_0); - __m128 p1 = _mm_cvtepi32_ps(i32_1); - __m128 p2 = _mm_cvtepi32_ps(i32_2); - __m128 p3 = _mm_cvtepi32_ps(i32_3); - - // Apply the scale - __m128 p0_d = _mm_mul_ps( d_0_1, p0 ); - __m128 p1_d = _mm_mul_ps( d_0_1, p1 ); - __m128 p2_d = _mm_mul_ps( d_2_3, p2 ); - __m128 p3_d = _mm_mul_ps( d_2_3, p3 ); - - // Acummulate - acc_0 = _mm_add_ps(p0_d, acc_0); - acc_1 = _mm_add_ps(p1_d, acc_1); - acc_2 = _mm_add_ps(p2_d, acc_2); - acc_3 = _mm_add_ps(p3_d, acc_3); - } - - *s = hsum_float_4x4(acc_0, acc_1, acc_2, acc_3); -#elif defined(__riscv_v_intrinsic) - float sumf = 0.0; - - size_t vl = __riscv_vsetvl_e8m1(qk/2); - - for (int i = 0; i < nb; i++) { - // load elements - vuint8mf2_t tx = __riscv_vle8_v_u8mf2(x[i].qs, vl); - - vint8mf2_t y0 = __riscv_vle8_v_i8mf2(y[i].qs, vl); - vint8mf2_t y1 = __riscv_vle8_v_i8mf2(y[i].qs+16, vl); - - // mask and store lower part of x, and then upper part - vuint8mf2_t x_a = __riscv_vand_vx_u8mf2(tx, 0x0F, vl); - vuint8mf2_t x_l = __riscv_vsrl_vx_u8mf2(tx, 0x04, vl); - - vint8mf2_t x_ai = __riscv_vreinterpret_v_u8mf2_i8mf2(x_a); - vint8mf2_t x_li = __riscv_vreinterpret_v_u8mf2_i8mf2(x_l); - - // subtract offset - vint8mf2_t v0 = __riscv_vsub_vx_i8mf2(x_ai, 8, vl); - vint8mf2_t v1 = __riscv_vsub_vx_i8mf2(x_li, 8, vl); - - vint16m1_t vec_mul1 = __riscv_vwmul_vv_i16m1(v0, y0, vl); - vint16m1_t vec_mul2 = __riscv_vwmul_vv_i16m1(v1, y1, vl); - - vint32m1_t vec_zero = __riscv_vmv_v_x_i32m1(0, vl); - - vint32m1_t vs1 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul1, vec_zero, vl); - vint32m1_t vs2 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul2, vs1, vl); - - int sumi = __riscv_vmv_x_s_i32m1_i32(vs2); - - sumf += sumi*GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d); - } - - *s = sumf; -#else - // scalar - float sumf = 0.0; - - for (int i = 0; i < nb; i++) { - int sumi = 0; - - for (int j = 0; j < qk/2; ++j) { - const int v0 = (x[i].qs[j] & 0x0F) - 8; - const int v1 = (x[i].qs[j] >> 4) - 8; - - sumi += (v0 * y[i].qs[j]) + (v1 * y[i].qs[j + qk/2]); - } - - sumf += sumi*GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d); - } - - *s = sumf; -#endif -} - -static void ggml_vec_dot_q4_1_q8_1(const int n, float * restrict s, const void * restrict vx, const void * restrict vy) { - const int qk = QK8_1; - const int nb = n / qk; - - assert(n % qk == 0); - - const block_q4_1 * restrict x = vx; - const block_q8_1 * restrict y = vy; - - // TODO: add WASM SIMD -#if defined(__ARM_NEON) - float32x4_t sumv0 = vdupq_n_f32(0.0f); - float32x4_t sumv1 = vdupq_n_f32(0.0f); - - float summs = 0; - - GGML_ASSERT(nb % 2 == 0); // TODO: handle odd nb - for (int i = 0; i < nb; i += 2) { - const block_q4_1 * restrict x0 = &x[i + 0]; - const block_q4_1 * restrict x1 = &x[i + 1]; - const block_q8_1 * restrict y0 = &y[i + 0]; - const block_q8_1 * restrict y1 = &y[i + 1]; - - summs += GGML_FP16_TO_FP32(x0->m) * y0->s + GGML_FP16_TO_FP32(x1->m) * y1->s; - - const uint8x16_t m4b = vdupq_n_u8(0x0F); - - const uint8x16_t v0_0 = vld1q_u8(x0->qs); - const uint8x16_t v0_1 = vld1q_u8(x1->qs); - - // 4-bit -> 8-bit - const int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8 (v0_0, m4b)); - const int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4)); - const int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8 (v0_1, m4b)); - const int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4)); - - // load y - const int8x16_t v1_0l = vld1q_s8(y0->qs); - const int8x16_t v1_0h = vld1q_s8(y0->qs + 16); - const int8x16_t v1_1l = vld1q_s8(y1->qs); - const int8x16_t v1_1h = vld1q_s8(y1->qs + 16); - -#if defined(__ARM_FEATURE_DOTPROD) - // dot product into int32x4_t - const int32x4_t p_0 = vdotq_s32(vdotq_s32(vdupq_n_s32(0), v0_0l, v1_0l), v0_0h, v1_0h); - const int32x4_t p_1 = vdotq_s32(vdotq_s32(vdupq_n_s32(0), v0_1l, v1_1l), v0_1h, v1_1h); - - sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(p_0), GGML_FP16_TO_FP32(x0->d)*y0->d); - sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(p_1), GGML_FP16_TO_FP32(x1->d)*y1->d); -#else - const int16x8_t pl0l = vmull_s8(vget_low_s8 (v0_0l), vget_low_s8 (v1_0l)); - const int16x8_t pl0h = vmull_s8(vget_high_s8(v0_0l), vget_high_s8(v1_0l)); - const int16x8_t ph0l = vmull_s8(vget_low_s8 (v0_0h), vget_low_s8 (v1_0h)); - const int16x8_t ph0h = vmull_s8(vget_high_s8(v0_0h), vget_high_s8(v1_0h)); - - const int16x8_t pl1l = vmull_s8(vget_low_s8 (v0_1l), vget_low_s8 (v1_1l)); - const int16x8_t pl1h = vmull_s8(vget_high_s8(v0_1l), vget_high_s8(v1_1l)); - const int16x8_t ph1l = vmull_s8(vget_low_s8 (v0_1h), vget_low_s8 (v1_1h)); - const int16x8_t ph1h = vmull_s8(vget_high_s8(v0_1h), vget_high_s8(v1_1h)); - - const int32x4_t pl0 = vaddq_s32(vpaddlq_s16(pl0l), vpaddlq_s16(pl0h)); - const int32x4_t ph0 = vaddq_s32(vpaddlq_s16(ph0l), vpaddlq_s16(ph0h)); - const int32x4_t pl1 = vaddq_s32(vpaddlq_s16(pl1l), vpaddlq_s16(pl1h)); - const int32x4_t ph1 = vaddq_s32(vpaddlq_s16(ph1l), vpaddlq_s16(ph1h)); - - sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(pl0, ph0)), GGML_FP16_TO_FP32(x0->d)*y0->d); - sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(pl1, ph1)), GGML_FP16_TO_FP32(x1->d)*y1->d); -#endif - } - - *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1) + summs; -#elif defined(__AVX2__) || defined(__AVX__) - // Initialize accumulator with zeros - __m256 acc = _mm256_setzero_ps(); - - float summs = 0; - - // Main loop - for (int i = 0; i < nb; ++i) { - const float d0 = GGML_FP16_TO_FP32(x[i].d); - const float d1 = y[i].d; - - summs += GGML_FP16_TO_FP32(x[i].m) * y[i].s; - - const __m256 d0v = _mm256_set1_ps( d0 ); - const __m256 d1v = _mm256_set1_ps( d1 ); - - // Compute combined scales - const __m256 d0d1 = _mm256_mul_ps( d0v, d1v ); - - // Load 16 bytes, and unpack 4 bit fields into bytes, making 32 bytes - const __m256i bx = bytes_from_nibbles_32(x[i].qs); - const __m256i by = _mm256_loadu_si256( (const __m256i *)y[i].qs ); - - const __m256 xy = mul_sum_us8_pairs_float(bx, by); - - // Accumulate d0*d1*x*y -#if defined(__AVX2__) - acc = _mm256_fmadd_ps( d0d1, xy, acc ); -#else - acc = _mm256_add_ps( _mm256_mul_ps( d0d1, xy ), acc ); -#endif - } - - *s = hsum_float_8(acc) + summs; -#elif defined(__riscv_v_intrinsic) - float sumf = 0.0; - - size_t vl = __riscv_vsetvl_e8m1(qk/2); - - for (int i = 0; i < nb; i++) { - // load elements - vuint8mf2_t tx = __riscv_vle8_v_u8mf2(x[i].qs, vl); - - vint8mf2_t y0 = __riscv_vle8_v_i8mf2(y[i].qs, vl); - vint8mf2_t y1 = __riscv_vle8_v_i8mf2(y[i].qs+16, vl); - - // mask and store lower part of x, and then upper part - vuint8mf2_t x_a = __riscv_vand_vx_u8mf2(tx, 0x0F, vl); - vuint8mf2_t x_l = __riscv_vsrl_vx_u8mf2(tx, 0x04, vl); - - vint8mf2_t v0 = __riscv_vreinterpret_v_u8mf2_i8mf2(x_a); - vint8mf2_t v1 = __riscv_vreinterpret_v_u8mf2_i8mf2(x_l); - - vint16m1_t vec_mul1 = __riscv_vwmul_vv_i16m1(v0, y0, vl); - vint16m1_t vec_mul2 = __riscv_vwmul_vv_i16m1(v1, y1, vl); - - vint32m1_t vec_zero = __riscv_vmv_v_x_i32m1(0, vl); - - vint32m1_t vs1 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul1, vec_zero, vl); - vint32m1_t vs2 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul2, vs1, vl); - - int sumi = __riscv_vmv_x_s_i32m1_i32(vs2); - - sumf += (GGML_FP16_TO_FP32(x[i].d)*y[i].d)*sumi + GGML_FP16_TO_FP32(x[i].m)*y[i].s; - } + #define GGML_F16x8 float16x8_t + #define GGML_F16x8_ZERO vdupq_n_f16(0.0f) + #define GGML_F16x8_SET1(x) vdupq_n_f16(x) + #define GGML_F16x8_LOAD vld1q_f16 + #define GGML_F16x8_STORE vst1q_f16 + #define GGML_F16x8_FMA(a, b, c) vfmaq_f16(a, b, c) + #define GGML_F16x8_ADD vaddq_f16 + #define GGML_F16x8_MUL vmulq_f16 + #define GGML_F16x8_REDUCE(res, x) \ + do { \ + int offset = GGML_F16_ARR >> 1; \ + for (int i = 0; i < offset; ++i) { \ + x[i] = vaddq_f16(x[i], x[offset+i]); \ + } \ + offset >>= 1; \ + for (int i = 0; i < offset; ++i) { \ + x[i] = vaddq_f16(x[i], x[offset+i]); \ + } \ + offset >>= 1; \ + for (int i = 0; i < offset; ++i) { \ + x[i] = vaddq_f16(x[i], x[offset+i]); \ + } \ + const float32x4_t t0 = vcvt_f32_f16(vget_low_f16 (x[0])); \ + const float32x4_t t1 = vcvt_f32_f16(vget_high_f16(x[0])); \ + res = (ggml_float) vaddvq_f32(vaddq_f32(t0, t1)); \ + } while (0) - *s = sumf; + #define GGML_F16_VEC GGML_F16x8 + #define GGML_F16_VEC_ZERO GGML_F16x8_ZERO + #define GGML_F16_VEC_SET1 GGML_F16x8_SET1 + #define GGML_F16_VEC_LOAD(p, i) GGML_F16x8_LOAD(p) + #define GGML_F16_VEC_STORE(p, r, i) GGML_F16x8_STORE(p, r[i]) + #define GGML_F16_VEC_FMA GGML_F16x8_FMA + #define GGML_F16_VEC_ADD GGML_F16x8_ADD + #define GGML_F16_VEC_MUL GGML_F16x8_MUL + #define GGML_F16_VEC_REDUCE GGML_F16x8_REDUCE #else - // scalar - float sumf = 0.0; - - for (int i = 0; i < nb; i++) { - int sumi = 0; - - for (int j = 0; j < qk/2; ++j) { - const int v0 = (x[i].qs[j] & 0x0F); - const int v1 = (x[i].qs[j] >> 4); + // if FP16 vector arithmetic is not supported, we use FP32 instead + // and take advantage of the vcvt_ functions to convert to/from FP16 - sumi += (v0 * y[i].qs[j]) + (v1 * y[i].qs[j + qk/2]); - } + #define GGML_F16_STEP 16 + #define GGML_F16_EPR 4 - sumf += (GGML_FP16_TO_FP32(x[i].d)*y[i].d)*sumi + GGML_FP16_TO_FP32(x[i].m)*y[i].s; - } + #define GGML_F32Cx4 float32x4_t + #define GGML_F32Cx4_ZERO vdupq_n_f32(0.0f) + #define GGML_F32Cx4_SET1(x) vdupq_n_f32(x) + #define GGML_F32Cx4_LOAD(x) vcvt_f32_f16(vld1_f16(x)) + #define GGML_F32Cx4_STORE(x, y) vst1_f16(x, vcvt_f16_f32(y)) + #define GGML_F32Cx4_FMA(a, b, c) vfmaq_f32(a, b, c) + #define GGML_F32Cx4_ADD vaddq_f32 + #define GGML_F32Cx4_MUL vmulq_f32 + #define GGML_F32Cx4_REDUCE GGML_F32x4_REDUCE - *s = sumf; + #define GGML_F16_VEC GGML_F32Cx4 + #define GGML_F16_VEC_ZERO GGML_F32Cx4_ZERO + #define GGML_F16_VEC_SET1 GGML_F32Cx4_SET1 + #define GGML_F16_VEC_LOAD(p, i) GGML_F32Cx4_LOAD(p) + #define GGML_F16_VEC_STORE(p, r, i) GGML_F32Cx4_STORE(p, r[i]) + #define GGML_F16_VEC_FMA GGML_F32Cx4_FMA + #define GGML_F16_VEC_ADD GGML_F32Cx4_ADD + #define GGML_F16_VEC_MUL GGML_F32Cx4_MUL + #define GGML_F16_VEC_REDUCE GGML_F32Cx4_REDUCE #endif -} -static void ggml_vec_dot_q5_0_q8_0(const int n, float * restrict s, const void * restrict vx, const void * restrict vy) { - const int qk = QK8_0; - const int nb = n / qk; +#elif defined(__AVX__) - assert(n % qk == 0); - assert(qk == QK5_0); +#define GGML_SIMD - const block_q5_0 * restrict x = vx; - const block_q8_0 * restrict y = vy; +// F32 AVX -#if defined(__ARM_NEON) - float32x4_t sumv0 = vdupq_n_f32(0.0f); - float32x4_t sumv1 = vdupq_n_f32(0.0f); - - uint32_t qh0; - uint32_t qh1; - - uint64_t tmp0[4]; - uint64_t tmp1[4]; - - GGML_ASSERT(nb % 2 == 0); // TODO: handle odd nb - for (int i = 0; i < nb; i += 2) { - const block_q5_0 * restrict x0 = &x[i]; - const block_q5_0 * restrict x1 = &x[i + 1]; - const block_q8_0 * restrict y0 = &y[i]; - const block_q8_0 * restrict y1 = &y[i + 1]; - - const uint8x16_t m4b = vdupq_n_u8(0x0F); - - // extract the 5th bit via lookup table ((!b) << 4) - memcpy(&qh0, x0->qh, sizeof(qh0)); - memcpy(&qh1, x1->qh, sizeof(qh1)); - - tmp0[0] = table_b2b_1[(qh0 >> 0) & 0xFF]; - tmp0[1] = table_b2b_1[(qh0 >> 8) & 0xFF]; - tmp0[2] = table_b2b_1[(qh0 >> 16) & 0xFF]; - tmp0[3] = table_b2b_1[(qh0 >> 24) ]; - - tmp1[0] = table_b2b_1[(qh1 >> 0) & 0xFF]; - tmp1[1] = table_b2b_1[(qh1 >> 8) & 0xFF]; - tmp1[2] = table_b2b_1[(qh1 >> 16) & 0xFF]; - tmp1[3] = table_b2b_1[(qh1 >> 24) ]; - - const int8x16_t qhl0 = vld1q_s8((const int8_t *)(tmp0 + 0)); - const int8x16_t qhh0 = vld1q_s8((const int8_t *)(tmp0 + 2)); - const int8x16_t qhl1 = vld1q_s8((const int8_t *)(tmp1 + 0)); - const int8x16_t qhh1 = vld1q_s8((const int8_t *)(tmp1 + 2)); - - const uint8x16_t v0_0 = vld1q_u8(x0->qs); - const uint8x16_t v0_1 = vld1q_u8(x1->qs); - - // 4-bit -> 8-bit - int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8 (v0_0, m4b)); - int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4)); - int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8 (v0_1, m4b)); - int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4)); - - // add high bit and sub 16 (equivalent to sub 0x10 when bit is zero) - const int8x16_t v0_0lf = vsubq_s8(v0_0l, qhl0); - const int8x16_t v0_0hf = vsubq_s8(v0_0h, qhh0); - const int8x16_t v0_1lf = vsubq_s8(v0_1l, qhl1); - const int8x16_t v0_1hf = vsubq_s8(v0_1h, qhh1); - - // load y - const int8x16_t v1_0l = vld1q_s8(y0->qs); - const int8x16_t v1_0h = vld1q_s8(y0->qs + 16); - const int8x16_t v1_1l = vld1q_s8(y1->qs); - const int8x16_t v1_1h = vld1q_s8(y1->qs + 16); - -#if defined(__ARM_FEATURE_DOTPROD) - sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32( - vdotq_s32(vdupq_n_s32(0), v0_0lf, v1_0l), - vdotq_s32(vdupq_n_s32(0), v0_0hf, v1_0h))), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d)); - sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32( - vdotq_s32(vdupq_n_s32(0), v0_1lf, v1_1l), - vdotq_s32(vdupq_n_s32(0), v0_1hf, v1_1h))), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d)); +#define GGML_F32_STEP 32 +#define GGML_F32_EPR 8 + +#define GGML_F32x8 __m256 +#define GGML_F32x8_ZERO _mm256_setzero_ps() +#define GGML_F32x8_SET1(x) _mm256_set1_ps(x) +#define GGML_F32x8_LOAD _mm256_loadu_ps +#define GGML_F32x8_STORE _mm256_storeu_ps +#if defined(__FMA__) + #define GGML_F32x8_FMA(a, b, c) _mm256_fmadd_ps(b, c, a) #else - const int16x8_t pl0l = vmull_s8(vget_low_s8 (v0_0lf), vget_low_s8 (v1_0l)); - const int16x8_t pl0h = vmull_s8(vget_high_s8(v0_0lf), vget_high_s8(v1_0l)); - const int16x8_t ph0l = vmull_s8(vget_low_s8 (v0_0hf), vget_low_s8 (v1_0h)); - const int16x8_t ph0h = vmull_s8(vget_high_s8(v0_0hf), vget_high_s8(v1_0h)); - - const int16x8_t pl1l = vmull_s8(vget_low_s8 (v0_1lf), vget_low_s8 (v1_1l)); - const int16x8_t pl1h = vmull_s8(vget_high_s8(v0_1lf), vget_high_s8(v1_1l)); - const int16x8_t ph1l = vmull_s8(vget_low_s8 (v0_1hf), vget_low_s8 (v1_1h)); - const int16x8_t ph1h = vmull_s8(vget_high_s8(v0_1hf), vget_high_s8(v1_1h)); - - const int32x4_t pl0 = vaddq_s32(vpaddlq_s16(pl0l), vpaddlq_s16(pl0h)); - const int32x4_t ph0 = vaddq_s32(vpaddlq_s16(ph0l), vpaddlq_s16(ph0h)); - const int32x4_t pl1 = vaddq_s32(vpaddlq_s16(pl1l), vpaddlq_s16(pl1h)); - const int32x4_t ph1 = vaddq_s32(vpaddlq_s16(ph1l), vpaddlq_s16(ph1h)); - - sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(pl0, ph0)), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d)); - sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(pl1, ph1)), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d)); + #define GGML_F32x8_FMA(a, b, c) _mm256_add_ps(_mm256_mul_ps(b, c), a) #endif - } - - *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1); -#elif defined(__wasm_simd128__) - v128_t sumv = wasm_f32x4_splat(0.0f); - - uint32_t qh; - uint64_t tmp[4]; - - // TODO: check if unrolling this is better - for (int i = 0; i < nb; ++i) { - const block_q5_0 * restrict x0 = &x[i]; - const block_q8_0 * restrict y0 = &y[i]; - - const v128_t m4b = wasm_i8x16_splat(0x0F); - - // extract the 5th bit - memcpy(&qh, x0->qh, sizeof(qh)); - - tmp[0] = table_b2b_1[(qh >> 0) & 0xFF]; - tmp[1] = table_b2b_1[(qh >> 8) & 0xFF]; - tmp[2] = table_b2b_1[(qh >> 16) & 0xFF]; - tmp[3] = table_b2b_1[(qh >> 24) ]; - - const v128_t qhl = wasm_v128_load(tmp + 0); - const v128_t qhh = wasm_v128_load(tmp + 2); - - const v128_t v0 = wasm_v128_load(x0->qs); - - // 4-bit -> 8-bit - const v128_t v0l = wasm_v128_and (v0, m4b); - const v128_t v0h = wasm_u8x16_shr(v0, 4); - - // add high bit and sub 16 (equivalent to sub 0x10 when bit is zero) - const v128_t v0lf = wasm_i8x16_sub(v0l, qhl); - const v128_t v0hf = wasm_i8x16_sub(v0h, qhh); - - // load y - const v128_t v1l = wasm_v128_load(y0->qs); - const v128_t v1h = wasm_v128_load(y0->qs + 16); - - // int8x16 -> int16x8 - const v128_t v0lfl = wasm_i16x8_extend_low_i8x16 (v0lf); - const v128_t v0lfh = wasm_i16x8_extend_high_i8x16(v0lf); - const v128_t v0hfl = wasm_i16x8_extend_low_i8x16 (v0hf); - const v128_t v0hfh = wasm_i16x8_extend_high_i8x16(v0hf); - - const v128_t v1ll = wasm_i16x8_extend_low_i8x16 (v1l); - const v128_t v1lh = wasm_i16x8_extend_high_i8x16(v1l); - const v128_t v1hl = wasm_i16x8_extend_low_i8x16 (v1h); - const v128_t v1hh = wasm_i16x8_extend_high_i8x16(v1h); - - // dot product - sumv = wasm_f32x4_add(sumv, wasm_f32x4_mul(wasm_f32x4_convert_i32x4( - wasm_i32x4_add( - wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0lfl, v1ll), - wasm_i32x4_dot_i16x8(v0lfh, v1lh)), - wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0hfl, v1hl), - wasm_i32x4_dot_i16x8(v0hfh, v1hh)))), - wasm_f32x4_splat(GGML_FP16_TO_FP32(x0->d) * GGML_FP16_TO_FP32(y0->d)))); - } - - *s = wasm_f32x4_extract_lane(sumv, 0) + wasm_f32x4_extract_lane(sumv, 1) + - wasm_f32x4_extract_lane(sumv, 2) + wasm_f32x4_extract_lane(sumv, 3); -#elif defined(__AVX2__) - // Initialize accumulator with zeros - __m256 acc = _mm256_setzero_ps(); - - // Main loop - for (int i = 0; i < nb; i++) { - /* Compute combined scale for the block */ - const __m256 d = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d)); - - __m256i bx = bytes_from_nibbles_32(x[i].qs); - __m256i bxhi = bytes_from_bits_32(x[i].qh); - bxhi = _mm256_andnot_si256(bxhi, _mm256_set1_epi8((char)0xF0)); - bx = _mm256_or_si256(bx, bxhi); - - __m256i by = _mm256_loadu_si256((const __m256i *)y[i].qs); - - const __m256 q = mul_sum_i8_pairs_float(bx, by); +#define GGML_F32x8_ADD _mm256_add_ps +#define GGML_F32x8_MUL _mm256_mul_ps +#define GGML_F32x8_REDUCE(res, x) \ +do { \ + int offset = GGML_F32_ARR >> 1; \ + for (int i = 0; i < offset; ++i) { \ + x[i] = _mm256_add_ps(x[i], x[offset+i]); \ + } \ + offset >>= 1; \ + for (int i = 0; i < offset; ++i) { \ + x[i] = _mm256_add_ps(x[i], x[offset+i]); \ + } \ + offset >>= 1; \ + for (int i = 0; i < offset; ++i) { \ + x[i] = _mm256_add_ps(x[i], x[offset+i]); \ + } \ + const __m128 t0 = _mm_add_ps(_mm256_castps256_ps128(x[0]), \ + _mm256_extractf128_ps(x[0], 1)); \ + const __m128 t1 = _mm_hadd_ps(t0, t0); \ + res = _mm_cvtss_f32(_mm_hadd_ps(t1, t1)); \ +} while (0) +// TODO: is this optimal ? - /* Multiply q with scale and accumulate */ - acc = _mm256_fmadd_ps(d, q, acc); - } +#define GGML_F32_VEC GGML_F32x8 +#define GGML_F32_VEC_ZERO GGML_F32x8_ZERO +#define GGML_F32_VEC_SET1 GGML_F32x8_SET1 +#define GGML_F32_VEC_LOAD GGML_F32x8_LOAD +#define GGML_F32_VEC_STORE GGML_F32x8_STORE +#define GGML_F32_VEC_FMA GGML_F32x8_FMA +#define GGML_F32_VEC_ADD GGML_F32x8_ADD +#define GGML_F32_VEC_MUL GGML_F32x8_MUL +#define GGML_F32_VEC_REDUCE GGML_F32x8_REDUCE - *s = hsum_float_8(acc); -#elif defined(__AVX__) - // Initialize accumulator with zeros - __m256 acc = _mm256_setzero_ps(); - __m128i mask = _mm_set1_epi8((char)0xF0); +// F16 AVX - // Main loop - for (int i = 0; i < nb; i++) { - /* Compute combined scale for the block */ - const __m256 d = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d)); +#define GGML_F16_STEP 32 +#define GGML_F16_EPR 8 - __m256i bx = bytes_from_nibbles_32(x[i].qs); - const __m256i bxhi = bytes_from_bits_32(x[i].qh); - __m128i bxhil = _mm256_castsi256_si128(bxhi); - __m128i bxhih = _mm256_extractf128_si256(bxhi, 1); - bxhil = _mm_andnot_si128(bxhil, mask); - bxhih = _mm_andnot_si128(bxhih, mask); - __m128i bxl = _mm256_castsi256_si128(bx); - __m128i bxh = _mm256_extractf128_si256(bx, 1); - bxl = _mm_or_si128(bxl, bxhil); - bxh = _mm_or_si128(bxh, bxhih); - bx = MM256_SET_M128I(bxh, bxl); +// F16 arithmetic is not supported by AVX, so we use F32 instead - const __m256i by = _mm256_loadu_si256((const __m256i *)y[i].qs); +#define GGML_F32Cx8 __m256 +#define GGML_F32Cx8_ZERO _mm256_setzero_ps() +#define GGML_F32Cx8_SET1(x) _mm256_set1_ps(x) - const __m256 q = mul_sum_i8_pairs_float(bx, by); +#if defined(__F16C__) +// the _mm256_cvt intrinsics require F16C +#define GGML_F32Cx8_LOAD(x) _mm256_cvtph_ps(_mm_loadu_si128((__m128i *)(x))) +#define GGML_F32Cx8_STORE(x, y) _mm_storeu_si128((__m128i *)(x), _mm256_cvtps_ph(y, 0)) +#else +static inline __m256 __avx_f32cx8_load(ggml_fp16_t *x) { + float tmp[8]; - /* Multiply q with scale and accumulate */ - acc = _mm256_add_ps(_mm256_mul_ps(d, q), acc); + for (int i = 0; i < 8; i++) { + tmp[i] = GGML_FP16_TO_FP32(x[i]); } - *s = hsum_float_8(acc); -#elif defined(__riscv_v_intrinsic) - float sumf = 0.0; - - uint32_t qh; - - size_t vl = __riscv_vsetvl_e8m1(qk/2); - - // These tempory registers are for masking and shift operations - vuint32m2_t vt_1 = __riscv_vid_v_u32m2(vl); - vuint32m2_t vt_2 = __riscv_vsll_vv_u32m2(__riscv_vmv_v_x_u32m2(1, vl), vt_1, vl); - - vuint32m2_t vt_3 = __riscv_vsll_vx_u32m2(vt_2, 16, vl); - vuint32m2_t vt_4 = __riscv_vadd_vx_u32m2(vt_1, 12, vl); - - for (int i = 0; i < nb; i++) { - memcpy(&qh, x[i].qh, sizeof(uint32_t)); - - // ((qh & (1u << (j + 0 ))) >> (j + 0 )) << 4; - vuint32m2_t xha_0 = __riscv_vand_vx_u32m2(vt_2, qh, vl); - vuint32m2_t xhr_0 = __riscv_vsrl_vv_u32m2(xha_0, vt_1, vl); - vuint32m2_t xhl_0 = __riscv_vsll_vx_u32m2(xhr_0, 4, vl); - - // ((qh & (1u << (j + 16))) >> (j + 12)); - vuint32m2_t xha_1 = __riscv_vand_vx_u32m2(vt_3, qh, vl); - vuint32m2_t xhl_1 = __riscv_vsrl_vv_u32m2(xha_1, vt_4, vl); - - // narrowing - vuint16m1_t xhc_0 = __riscv_vncvt_x_x_w_u16m1(xhl_0, vl); - vuint8mf2_t xh_0 = __riscv_vncvt_x_x_w_u8mf2(xhc_0, vl); - - vuint16m1_t xhc_1 = __riscv_vncvt_x_x_w_u16m1(xhl_1, vl); - vuint8mf2_t xh_1 = __riscv_vncvt_x_x_w_u8mf2(xhc_1, vl); - - // load - vuint8mf2_t tx = __riscv_vle8_v_u8mf2(x[i].qs, vl); - - vint8mf2_t y0 = __riscv_vle8_v_i8mf2(y[i].qs, vl); - vint8mf2_t y1 = __riscv_vle8_v_i8mf2(y[i].qs+16, vl); - - vuint8mf2_t x_at = __riscv_vand_vx_u8mf2(tx, 0x0F, vl); - vuint8mf2_t x_lt = __riscv_vsrl_vx_u8mf2(tx, 0x04, vl); - - vuint8mf2_t x_a = __riscv_vor_vv_u8mf2(x_at, xh_0, vl); - vuint8mf2_t x_l = __riscv_vor_vv_u8mf2(x_lt, xh_1, vl); - - vint8mf2_t x_ai = __riscv_vreinterpret_v_u8mf2_i8mf2(x_a); - vint8mf2_t x_li = __riscv_vreinterpret_v_u8mf2_i8mf2(x_l); - - vint8mf2_t v0 = __riscv_vsub_vx_i8mf2(x_ai, 16, vl); - vint8mf2_t v1 = __riscv_vsub_vx_i8mf2(x_li, 16, vl); - - vint16m1_t vec_mul1 = __riscv_vwmul_vv_i16m1(v0, y0, vl); - vint16m1_t vec_mul2 = __riscv_vwmul_vv_i16m1(v1, y1, vl); - - vint32m1_t vec_zero = __riscv_vmv_v_x_i32m1(0, vl); - - vint32m1_t vs1 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul1, vec_zero, vl); - vint32m1_t vs2 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul2, vs1, vl); - - int sumi = __riscv_vmv_x_s_i32m1_i32(vs2); + return _mm256_loadu_ps(tmp); +} +static inline void __avx_f32cx8_store(ggml_fp16_t *x, __m256 y) { + float arr[8]; - sumf += (GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d)) * sumi; - } + _mm256_storeu_ps(arr, y); - *s = sumf; -#else - // scalar - float sumf = 0.0; + for (int i = 0; i < 8; i++) + x[i] = GGML_FP32_TO_FP16(arr[i]); +} +#define GGML_F32Cx8_LOAD(x) __avx_f32cx8_load(x) +#define GGML_F32Cx8_STORE(x, y) __avx_f32cx8_store(x, y) +#endif - for (int i = 0; i < nb; i++) { - uint32_t qh; - memcpy(&qh, x[i].qh, sizeof(qh)); +#define GGML_F32Cx8_FMA GGML_F32x8_FMA +#define GGML_F32Cx8_ADD _mm256_add_ps +#define GGML_F32Cx8_MUL _mm256_mul_ps +#define GGML_F32Cx8_REDUCE GGML_F32x8_REDUCE - int sumi = 0; +#define GGML_F16_VEC GGML_F32Cx8 +#define GGML_F16_VEC_ZERO GGML_F32Cx8_ZERO +#define GGML_F16_VEC_SET1 GGML_F32Cx8_SET1 +#define GGML_F16_VEC_LOAD(p, i) GGML_F32Cx8_LOAD(p) +#define GGML_F16_VEC_STORE(p, r, i) GGML_F32Cx8_STORE(p, r[i]) +#define GGML_F16_VEC_FMA GGML_F32Cx8_FMA +#define GGML_F16_VEC_ADD GGML_F32Cx8_ADD +#define GGML_F16_VEC_MUL GGML_F32Cx8_MUL +#define GGML_F16_VEC_REDUCE GGML_F32Cx8_REDUCE - for (int j = 0; j < qk/2; ++j) { - const uint8_t xh_0 = ((qh & (1u << (j + 0 ))) >> (j + 0 )) << 4; - const uint8_t xh_1 = ((qh & (1u << (j + 16))) >> (j + 12)); +#elif defined(__POWER9_VECTOR__) - const int32_t x0 = ((x[i].qs[j] & 0x0F) | xh_0) - 16; - const int32_t x1 = ((x[i].qs[j] >> 4) | xh_1) - 16; +#define GGML_SIMD - sumi += (x0 * y[i].qs[j]) + (x1 * y[i].qs[j + qk/2]); - } +// F32 POWER9 - sumf += (GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d)) * sumi; - } +#define GGML_F32_STEP 32 +#define GGML_F32_EPR 4 - *s = sumf; -#endif +#define GGML_F32x4 vector float +#define GGML_F32x4_ZERO 0.0f +#define GGML_F32x4_SET1 vec_splats +#define GGML_F32x4_LOAD(p) vec_xl(0, p) +#define GGML_F32x4_STORE(p, r) vec_xst(r, 0, p) +#define GGML_F32x4_FMA(a, b, c) vec_madd(b, c, a) +#define GGML_F32x4_ADD vec_add +#define GGML_F32x4_MUL vec_mul +#define GGML_F32x4_REDUCE(res, x) \ +{ \ + int offset = GGML_F32_ARR >> 1; \ + for (int i = 0; i < offset; ++i) { \ + x[i] = vec_add(x[i], x[offset+i]); \ + } \ + offset >>= 1; \ + for (int i = 0; i < offset; ++i) { \ + x[i] = vec_add(x[i], x[offset+i]); \ + } \ + offset >>= 1; \ + for (int i = 0; i < offset; ++i) { \ + x[i] = vec_add(x[i], x[offset+i]); \ + } \ + res = vec_extract(x[0], 0) + \ + vec_extract(x[0], 1) + \ + vec_extract(x[0], 2) + \ + vec_extract(x[0], 3); \ } -static void ggml_vec_dot_q5_1_q8_1(const int n, float * restrict s, const void * restrict vx, const void * restrict vy) { - const int qk = QK8_1; - const int nb = n / qk; - - assert(n % qk == 0); - assert(qk == QK5_1); - - const block_q5_1 * restrict x = vx; - const block_q8_1 * restrict y = vy; +#define GGML_F32_VEC GGML_F32x4 +#define GGML_F32_VEC_ZERO GGML_F32x4_ZERO +#define GGML_F32_VEC_SET1 GGML_F32x4_SET1 +#define GGML_F32_VEC_LOAD GGML_F32x4_LOAD +#define GGML_F32_VEC_STORE GGML_F32x4_STORE +#define GGML_F32_VEC_FMA GGML_F32x4_FMA +#define GGML_F32_VEC_ADD GGML_F32x4_ADD +#define GGML_F32_VEC_MUL GGML_F32x4_MUL +#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE -#if defined(__ARM_NEON) - float32x4_t sumv0 = vdupq_n_f32(0.0f); - float32x4_t sumv1 = vdupq_n_f32(0.0f); - - float summs0 = 0.0f; - float summs1 = 0.0f; - - uint32_t qh0; - uint32_t qh1; - - uint64_t tmp0[4]; - uint64_t tmp1[4]; - - GGML_ASSERT(nb % 2 == 0); // TODO: handle odd nb - for (int i = 0; i < nb; i += 2) { - const block_q5_1 * restrict x0 = &x[i]; - const block_q5_1 * restrict x1 = &x[i + 1]; - const block_q8_1 * restrict y0 = &y[i]; - const block_q8_1 * restrict y1 = &y[i + 1]; - - const uint8x16_t m4b = vdupq_n_u8(0x0F); - - summs0 += GGML_FP16_TO_FP32(x0->m) * y0->s; - summs1 += GGML_FP16_TO_FP32(x1->m) * y1->s; - - // extract the 5th bit via lookup table ((b) << 4) - memcpy(&qh0, x0->qh, sizeof(qh0)); - memcpy(&qh1, x1->qh, sizeof(qh1)); - - tmp0[0] = table_b2b_0[(qh0 >> 0) & 0xFF]; - tmp0[1] = table_b2b_0[(qh0 >> 8) & 0xFF]; - tmp0[2] = table_b2b_0[(qh0 >> 16) & 0xFF]; - tmp0[3] = table_b2b_0[(qh0 >> 24) ]; - - tmp1[0] = table_b2b_0[(qh1 >> 0) & 0xFF]; - tmp1[1] = table_b2b_0[(qh1 >> 8) & 0xFF]; - tmp1[2] = table_b2b_0[(qh1 >> 16) & 0xFF]; - tmp1[3] = table_b2b_0[(qh1 >> 24) ]; - - const int8x16_t qhl0 = vld1q_s8((const int8_t *)(tmp0 + 0)); - const int8x16_t qhh0 = vld1q_s8((const int8_t *)(tmp0 + 2)); - const int8x16_t qhl1 = vld1q_s8((const int8_t *)(tmp1 + 0)); - const int8x16_t qhh1 = vld1q_s8((const int8_t *)(tmp1 + 2)); - - const uint8x16_t v0_0 = vld1q_u8(x0->qs); - const uint8x16_t v0_1 = vld1q_u8(x1->qs); - - // 4-bit -> 8-bit - const int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8 (v0_0, m4b)); - const int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4)); - const int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8 (v0_1, m4b)); - const int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4)); - - // add high bit - const int8x16_t v0_0lf = vorrq_s8(v0_0l, qhl0); - const int8x16_t v0_0hf = vorrq_s8(v0_0h, qhh0); - const int8x16_t v0_1lf = vorrq_s8(v0_1l, qhl1); - const int8x16_t v0_1hf = vorrq_s8(v0_1h, qhh1); - - // load y - const int8x16_t v1_0l = vld1q_s8(y0->qs); - const int8x16_t v1_0h = vld1q_s8(y0->qs + 16); - const int8x16_t v1_1l = vld1q_s8(y1->qs); - const int8x16_t v1_1h = vld1q_s8(y1->qs + 16); - -#if defined(__ARM_FEATURE_DOTPROD) - sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32( - vdotq_s32(vdupq_n_s32(0), v0_0lf, v1_0l), - vdotq_s32(vdupq_n_s32(0), v0_0hf, v1_0h))), GGML_FP16_TO_FP32(x0->d)*y0->d); - sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32( - vdotq_s32(vdupq_n_s32(0), v0_1lf, v1_1l), - vdotq_s32(vdupq_n_s32(0), v0_1hf, v1_1h))), GGML_FP16_TO_FP32(x1->d)*y1->d); -#else - const int16x8_t pl0l = vmull_s8(vget_low_s8 (v0_0lf), vget_low_s8 (v1_0l)); - const int16x8_t pl0h = vmull_s8(vget_high_s8(v0_0lf), vget_high_s8(v1_0l)); - const int16x8_t ph0l = vmull_s8(vget_low_s8 (v0_0hf), vget_low_s8 (v1_0h)); - const int16x8_t ph0h = vmull_s8(vget_high_s8(v0_0hf), vget_high_s8(v1_0h)); - - const int16x8_t pl1l = vmull_s8(vget_low_s8 (v0_1lf), vget_low_s8 (v1_1l)); - const int16x8_t pl1h = vmull_s8(vget_high_s8(v0_1lf), vget_high_s8(v1_1l)); - const int16x8_t ph1l = vmull_s8(vget_low_s8 (v0_1hf), vget_low_s8 (v1_1h)); - const int16x8_t ph1h = vmull_s8(vget_high_s8(v0_1hf), vget_high_s8(v1_1h)); - - const int32x4_t pl0 = vaddq_s32(vpaddlq_s16(pl0l), vpaddlq_s16(pl0h)); - const int32x4_t ph0 = vaddq_s32(vpaddlq_s16(ph0l), vpaddlq_s16(ph0h)); - const int32x4_t pl1 = vaddq_s32(vpaddlq_s16(pl1l), vpaddlq_s16(pl1h)); - const int32x4_t ph1 = vaddq_s32(vpaddlq_s16(ph1l), vpaddlq_s16(ph1h)); - - sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(pl0, ph0)), GGML_FP16_TO_FP32(x0->d)*y0->d); - sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(pl1, ph1)), GGML_FP16_TO_FP32(x1->d)*y1->d); -#endif - } +// F16 POWER9 +#define GGML_F16_STEP GGML_F32_STEP +#define GGML_F16_EPR GGML_F32_EPR +#define GGML_F16_VEC GGML_F32x4 +#define GGML_F16_VEC_ZERO GGML_F32x4_ZERO +#define GGML_F16_VEC_SET1 GGML_F32x4_SET1 +#define GGML_F16_VEC_FMA GGML_F32x4_FMA +#define GGML_F16_VEC_REDUCE GGML_F32x4_REDUCE +// Use vec_xl, not vec_ld, in case the load address is not aligned. +#define GGML_F16_VEC_LOAD(p, i) (i & 0x1) ? \ + vec_extract_fp32_from_shorth(vec_xl(0, p - GGML_F16_EPR)) : \ + vec_extract_fp32_from_shortl(vec_xl(0, p)) +#define GGML_ENDIAN_BYTE(i) ((unsigned char *)&(uint16_t){1})[i] +#define GGML_F16_VEC_STORE(p, r, i) \ + if (i & 0x1) \ + vec_xst(vec_pack_to_short_fp32(r[i - GGML_ENDIAN_BYTE(1)], \ + r[i - GGML_ENDIAN_BYTE(0)]), \ + 0, p - GGML_F16_EPR) - *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1) + summs0 + summs1; #elif defined(__wasm_simd128__) - v128_t sumv = wasm_f32x4_splat(0.0f); - - float summs = 0.0f; - - uint32_t qh; - uint64_t tmp[4]; - - // TODO: check if unrolling this is better - for (int i = 0; i < nb; ++i) { - const block_q5_1 * restrict x0 = &x[i]; - const block_q8_1 * restrict y0 = &y[i]; - summs += GGML_FP16_TO_FP32(x0->m) * y0->s; - - const v128_t m4b = wasm_i8x16_splat(0x0F); - - // extract the 5th bit - memcpy(&qh, x0->qh, sizeof(qh)); +#define GGML_SIMD - tmp[0] = table_b2b_0[(qh >> 0) & 0xFF]; - tmp[1] = table_b2b_0[(qh >> 8) & 0xFF]; - tmp[2] = table_b2b_0[(qh >> 16) & 0xFF]; - tmp[3] = table_b2b_0[(qh >> 24) ]; +// F32 WASM - const v128_t qhl = wasm_v128_load(tmp + 0); - const v128_t qhh = wasm_v128_load(tmp + 2); +#define GGML_F32_STEP 16 +#define GGML_F32_EPR 4 - const v128_t v0 = wasm_v128_load(x0->qs); +#define GGML_F32x4 v128_t +#define GGML_F32x4_ZERO wasm_f32x4_splat(0.0f) +#define GGML_F32x4_SET1(x) wasm_f32x4_splat(x) +#define GGML_F32x4_LOAD wasm_v128_load +#define GGML_F32x4_STORE wasm_v128_store +#define GGML_F32x4_FMA(a, b, c) wasm_f32x4_add(wasm_f32x4_mul(b, c), a) +#define GGML_F32x4_ADD wasm_f32x4_add +#define GGML_F32x4_MUL wasm_f32x4_mul +#define GGML_F32x4_REDUCE(res, x) \ +{ \ + int offset = GGML_F32_ARR >> 1; \ + for (int i = 0; i < offset; ++i) { \ + x[i] = wasm_f32x4_add(x[i], x[offset+i]); \ + } \ + offset >>= 1; \ + for (int i = 0; i < offset; ++i) { \ + x[i] = wasm_f32x4_add(x[i], x[offset+i]); \ + } \ + offset >>= 1; \ + for (int i = 0; i < offset; ++i) { \ + x[i] = wasm_f32x4_add(x[i], x[offset+i]); \ + } \ + res = wasm_f32x4_extract_lane(x[0], 0) + \ + wasm_f32x4_extract_lane(x[0], 1) + \ + wasm_f32x4_extract_lane(x[0], 2) + \ + wasm_f32x4_extract_lane(x[0], 3); \ +} - // 4-bit -> 8-bit - const v128_t v0l = wasm_v128_and (v0, m4b); - const v128_t v0h = wasm_u8x16_shr(v0, 4); +#define GGML_F32_VEC GGML_F32x4 +#define GGML_F32_VEC_ZERO GGML_F32x4_ZERO +#define GGML_F32_VEC_SET1 GGML_F32x4_SET1 +#define GGML_F32_VEC_LOAD GGML_F32x4_LOAD +#define GGML_F32_VEC_STORE GGML_F32x4_STORE +#define GGML_F32_VEC_FMA GGML_F32x4_FMA +#define GGML_F32_VEC_ADD GGML_F32x4_ADD +#define GGML_F32_VEC_MUL GGML_F32x4_MUL +#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE - // add high bit - const v128_t v0lf = wasm_v128_or(v0l, qhl); - const v128_t v0hf = wasm_v128_or(v0h, qhh); +// F16 WASM - // load y - const v128_t v1l = wasm_v128_load(y0->qs); - const v128_t v1h = wasm_v128_load(y0->qs + 16); +#define GGML_F16_STEP 16 +#define GGML_F16_EPR 4 - // int8x16 -> int16x8 - const v128_t v0lfl = wasm_i16x8_extend_low_i8x16 (v0lf); - const v128_t v0lfh = wasm_i16x8_extend_high_i8x16(v0lf); - const v128_t v0hfl = wasm_i16x8_extend_low_i8x16 (v0hf); - const v128_t v0hfh = wasm_i16x8_extend_high_i8x16(v0hf); +inline static v128_t __wasm_f16x4_load(const ggml_fp16_t * p) { + float tmp[4]; - const v128_t v1ll = wasm_i16x8_extend_low_i8x16 (v1l); - const v128_t v1lh = wasm_i16x8_extend_high_i8x16(v1l); - const v128_t v1hl = wasm_i16x8_extend_low_i8x16 (v1h); - const v128_t v1hh = wasm_i16x8_extend_high_i8x16(v1h); + tmp[0] = GGML_FP16_TO_FP32(p[0]); + tmp[1] = GGML_FP16_TO_FP32(p[1]); + tmp[2] = GGML_FP16_TO_FP32(p[2]); + tmp[3] = GGML_FP16_TO_FP32(p[3]); - // dot product - sumv = wasm_f32x4_add(sumv, - wasm_f32x4_mul(wasm_f32x4_convert_i32x4(wasm_i32x4_add( - wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0lfl, v1ll), - wasm_i32x4_dot_i16x8(v0lfh, v1lh)), - wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0hfl, v1hl), - wasm_i32x4_dot_i16x8(v0hfh, v1hh)))), - wasm_f32x4_splat(GGML_FP16_TO_FP32(x0->d) * y0->d))); - } + return wasm_v128_load(tmp); +} - *s = wasm_f32x4_extract_lane(sumv, 0) + wasm_f32x4_extract_lane(sumv, 1) + - wasm_f32x4_extract_lane(sumv, 2) + wasm_f32x4_extract_lane(sumv, 3) + summs; -#elif defined(__AVX2__) - // Initialize accumulator with zeros - __m256 acc = _mm256_setzero_ps(); +inline static void __wasm_f16x4_store(ggml_fp16_t * p, v128_t x) { + float tmp[4]; - float summs = 0.0f; + wasm_v128_store(tmp, x); - // Main loop - for (int i = 0; i < nb; i++) { - const __m256 dx = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d)); + p[0] = GGML_FP32_TO_FP16(tmp[0]); + p[1] = GGML_FP32_TO_FP16(tmp[1]); + p[2] = GGML_FP32_TO_FP16(tmp[2]); + p[3] = GGML_FP32_TO_FP16(tmp[3]); +} - summs += GGML_FP16_TO_FP32(x[i].m) * y[i].s; +#define GGML_F16x4 v128_t +#define GGML_F16x4_ZERO wasm_f32x4_splat(0.0f) +#define GGML_F16x4_SET1(x) wasm_f32x4_splat(x) +#define GGML_F16x4_LOAD(x) __wasm_f16x4_load(x) +#define GGML_F16x4_STORE(x, y) __wasm_f16x4_store(x, y) +#define GGML_F16x4_FMA GGML_F32x4_FMA +#define GGML_F16x4_ADD wasm_f32x4_add +#define GGML_F16x4_MUL wasm_f32x4_mul +#define GGML_F16x4_REDUCE(res, x) \ +{ \ + int offset = GGML_F16_ARR >> 1; \ + for (int i = 0; i < offset; ++i) { \ + x[i] = wasm_f32x4_add(x[i], x[offset+i]); \ + } \ + offset >>= 1; \ + for (int i = 0; i < offset; ++i) { \ + x[i] = wasm_f32x4_add(x[i], x[offset+i]); \ + } \ + offset >>= 1; \ + for (int i = 0; i < offset; ++i) { \ + x[i] = wasm_f32x4_add(x[i], x[offset+i]); \ + } \ + res = wasm_f32x4_extract_lane(x[0], 0) + \ + wasm_f32x4_extract_lane(x[0], 1) + \ + wasm_f32x4_extract_lane(x[0], 2) + \ + wasm_f32x4_extract_lane(x[0], 3); \ +} - __m256i bx = bytes_from_nibbles_32(x[i].qs); - __m256i bxhi = bytes_from_bits_32(x[i].qh); - bxhi = _mm256_and_si256(bxhi, _mm256_set1_epi8(0x10)); - bx = _mm256_or_si256(bx, bxhi); +#define GGML_F16_VEC GGML_F16x4 +#define GGML_F16_VEC_ZERO GGML_F16x4_ZERO +#define GGML_F16_VEC_SET1 GGML_F16x4_SET1 +#define GGML_F16_VEC_LOAD(p, i) GGML_F16x4_LOAD(p) +#define GGML_F16_VEC_STORE(p, r, i) GGML_F16x4_STORE(p, r[i]) +#define GGML_F16_VEC_FMA GGML_F16x4_FMA +#define GGML_F16_VEC_ADD GGML_F16x4_ADD +#define GGML_F16_VEC_MUL GGML_F16x4_MUL +#define GGML_F16_VEC_REDUCE GGML_F16x4_REDUCE - const __m256 dy = _mm256_set1_ps(y[i].d); - const __m256i by = _mm256_loadu_si256((const __m256i *)y[i].qs); +#elif defined(__SSE3__) - const __m256 q = mul_sum_us8_pairs_float(bx, by); +#define GGML_SIMD - acc = _mm256_fmadd_ps(q, _mm256_mul_ps(dx, dy), acc); - } +// F32 SSE - *s = hsum_float_8(acc) + summs; -#elif defined(__AVX__) - // Initialize accumulator with zeros - __m256 acc = _mm256_setzero_ps(); - __m128i mask = _mm_set1_epi8(0x10); +#define GGML_F32_STEP 32 +#define GGML_F32_EPR 4 - float summs = 0.0f; +#define GGML_F32x4 __m128 +#define GGML_F32x4_ZERO _mm_setzero_ps() +#define GGML_F32x4_SET1(x) _mm_set1_ps(x) +#define GGML_F32x4_LOAD _mm_loadu_ps +#define GGML_F32x4_STORE _mm_storeu_ps +#if defined(__FMA__) + // TODO: Does this work? + #define GGML_F32x4_FMA(a, b, c) _mm_fmadd_ps(b, c, a) +#else + #define GGML_F32x4_FMA(a, b, c) _mm_add_ps(_mm_mul_ps(b, c), a) +#endif +#define GGML_F32x4_ADD _mm_add_ps +#define GGML_F32x4_MUL _mm_mul_ps +#define GGML_F32x4_REDUCE(res, x) \ +{ \ + int offset = GGML_F32_ARR >> 1; \ + for (int i = 0; i < offset; ++i) { \ + x[i] = _mm_add_ps(x[i], x[offset+i]); \ + } \ + offset >>= 1; \ + for (int i = 0; i < offset; ++i) { \ + x[i] = _mm_add_ps(x[i], x[offset+i]); \ + } \ + offset >>= 1; \ + for (int i = 0; i < offset; ++i) { \ + x[i] = _mm_add_ps(x[i], x[offset+i]); \ + } \ + const __m128 t0 = _mm_hadd_ps(x[0], x[0]); \ + res = _mm_cvtss_f32(_mm_hadd_ps(t0, t0)); \ +} +// TODO: is this optimal ? - // Main loop - for (int i = 0; i < nb; i++) { - const __m256 dx = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d)); +#define GGML_F32_VEC GGML_F32x4 +#define GGML_F32_VEC_ZERO GGML_F32x4_ZERO +#define GGML_F32_VEC_SET1 GGML_F32x4_SET1 +#define GGML_F32_VEC_LOAD GGML_F32x4_LOAD +#define GGML_F32_VEC_STORE GGML_F32x4_STORE +#define GGML_F32_VEC_FMA GGML_F32x4_FMA +#define GGML_F32_VEC_ADD GGML_F32x4_ADD +#define GGML_F32_VEC_MUL GGML_F32x4_MUL +#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE - summs += GGML_FP16_TO_FP32(x[i].m) * y[i].s; +// F16 SSE - __m256i bx = bytes_from_nibbles_32(x[i].qs); - const __m256i bxhi = bytes_from_bits_32(x[i].qh); - __m128i bxhil = _mm256_castsi256_si128(bxhi); - __m128i bxhih = _mm256_extractf128_si256(bxhi, 1); - bxhil = _mm_and_si128(bxhil, mask); - bxhih = _mm_and_si128(bxhih, mask); - __m128i bxl = _mm256_castsi256_si128(bx); - __m128i bxh = _mm256_extractf128_si256(bx, 1); - bxl = _mm_or_si128(bxl, bxhil); - bxh = _mm_or_si128(bxh, bxhih); - bx = MM256_SET_M128I(bxh, bxl); +#define GGML_F16_STEP 32 +#define GGML_F16_EPR 4 - const __m256 dy = _mm256_set1_ps(y[i].d); - const __m256i by = _mm256_loadu_si256((const __m256i *)y[i].qs); +static inline __m128 __sse_f16x4_load(ggml_fp16_t *x) { + float tmp[4]; - const __m256 q = mul_sum_us8_pairs_float(bx, by); + tmp[0] = GGML_FP16_TO_FP32(x[0]); + tmp[1] = GGML_FP16_TO_FP32(x[1]); + tmp[2] = GGML_FP16_TO_FP32(x[2]); + tmp[3] = GGML_FP16_TO_FP32(x[3]); - acc = _mm256_add_ps(_mm256_mul_ps(q, _mm256_mul_ps(dx, dy)), acc); - } + return _mm_loadu_ps(tmp); +} - *s = hsum_float_8(acc) + summs; -#elif defined(__riscv_v_intrinsic) - float sumf = 0.0; +static inline void __sse_f16x4_store(ggml_fp16_t *x, __m128 y) { + float arr[4]; - uint32_t qh; + _mm_storeu_ps(arr, y); - size_t vl = __riscv_vsetvl_e8m1(qk/2); + x[0] = GGML_FP32_TO_FP16(arr[0]); + x[1] = GGML_FP32_TO_FP16(arr[1]); + x[2] = GGML_FP32_TO_FP16(arr[2]); + x[3] = GGML_FP32_TO_FP16(arr[3]); +} - // temporary registers for shift operations - vuint32m2_t vt_1 = __riscv_vid_v_u32m2(vl); - vuint32m2_t vt_2 = __riscv_vadd_vx_u32m2(vt_1, 12, vl); +#define GGML_F32Cx4 __m128 +#define GGML_F32Cx4_ZERO _mm_setzero_ps() +#define GGML_F32Cx4_SET1(x) _mm_set1_ps(x) +#define GGML_F32Cx4_LOAD(x) __sse_f16x4_load(x) +#define GGML_F32Cx4_STORE(x, y) __sse_f16x4_store(x, y) +#define GGML_F32Cx4_FMA GGML_F32x4_FMA +#define GGML_F32Cx4_ADD _mm_add_ps +#define GGML_F32Cx4_MUL _mm_mul_ps +#define GGML_F32Cx4_REDUCE GGML_F32x4_REDUCE - for (int i = 0; i < nb; i++) { - memcpy(&qh, x[i].qh, sizeof(uint32_t)); +#define GGML_F16_VEC GGML_F32Cx4 +#define GGML_F16_VEC_ZERO GGML_F32Cx4_ZERO +#define GGML_F16_VEC_SET1 GGML_F32Cx4_SET1 +#define GGML_F16_VEC_LOAD(p, i) GGML_F32Cx4_LOAD(p) +#define GGML_F16_VEC_STORE(p, r, i) GGML_F32Cx4_STORE(p, r[i]) +#define GGML_F16_VEC_FMA GGML_F32Cx4_FMA +#define GGML_F16_VEC_ADD GGML_F32Cx4_ADD +#define GGML_F16_VEC_MUL GGML_F32Cx4_MUL +#define GGML_F16_VEC_REDUCE GGML_F32Cx4_REDUCE - // load qh - vuint32m2_t vqh = __riscv_vmv_v_x_u32m2(qh, vl); +#endif - // ((qh >> (j + 0)) << 4) & 0x10; - vuint32m2_t xhr_0 = __riscv_vsrl_vv_u32m2(vqh, vt_1, vl); - vuint32m2_t xhl_0 = __riscv_vsll_vx_u32m2(xhr_0, 4, vl); - vuint32m2_t xha_0 = __riscv_vand_vx_u32m2(xhl_0, 0x10, vl); +// GGML_F32_ARR / GGML_F16_ARR +// number of registers to use per step +#ifdef GGML_SIMD +#define GGML_F32_ARR (GGML_F32_STEP/GGML_F32_EPR) +#define GGML_F16_ARR (GGML_F16_STEP/GGML_F16_EPR) +#endif - // ((qh >> (j + 12)) ) & 0x10; - vuint32m2_t xhr_1 = __riscv_vsrl_vv_u32m2(vqh, vt_2, vl); - vuint32m2_t xha_1 = __riscv_vand_vx_u32m2(xhr_1, 0x10, vl); +// +// fundamental operations +// - // narrowing - vuint16m1_t xhc_0 = __riscv_vncvt_x_x_w_u16m1(xha_0, vl); - vuint8mf2_t xh_0 = __riscv_vncvt_x_x_w_u8mf2(xhc_0, vl); +inline static void ggml_vec_set_i8(const int n, int8_t * x, const int8_t v) { for (int i = 0; i < n; ++i) x[i] = v; } - vuint16m1_t xhc_1 = __riscv_vncvt_x_x_w_u16m1(xha_1, vl); - vuint8mf2_t xh_1 = __riscv_vncvt_x_x_w_u8mf2(xhc_1, vl); +inline static void ggml_vec_set_i16(const int n, int16_t * x, const int16_t v) { for (int i = 0; i < n; ++i) x[i] = v; } - // load - vuint8mf2_t tx = __riscv_vle8_v_u8mf2(x[i].qs, vl); +inline static void ggml_vec_set_i32(const int n, int32_t * x, const int32_t v) { for (int i = 0; i < n; ++i) x[i] = v; } - vint8mf2_t y0 = __riscv_vle8_v_i8mf2(y[i].qs, vl); - vint8mf2_t y1 = __riscv_vle8_v_i8mf2(y[i].qs+16, vl); +inline static void ggml_vec_set_f16(const int n, ggml_fp16_t * x, const int32_t v) { for (int i = 0; i < n; ++i) x[i] = v; } - vuint8mf2_t x_at = __riscv_vand_vx_u8mf2(tx, 0x0F, vl); - vuint8mf2_t x_lt = __riscv_vsrl_vx_u8mf2(tx, 0x04, vl); +inline static void ggml_vec_add_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i] = x[i] + y[i]; } +inline static void ggml_vec_add1_f32(const int n, float * z, const float * x, const float v) { for (int i = 0; i < n; ++i) z[i] = x[i] + v; } +inline static void ggml_vec_acc_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] += x[i]; } +inline static void ggml_vec_acc1_f32(const int n, float * y, const float v) { for (int i = 0; i < n; ++i) y[i] += v; } +inline static void ggml_vec_sub_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i] = x[i] - y[i]; } +inline static void ggml_vec_set_f32 (const int n, float * x, const float v) { for (int i = 0; i < n; ++i) x[i] = v; } +inline static void ggml_vec_cpy_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = x[i]; } +inline static void ggml_vec_neg_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = -x[i]; } +inline static void ggml_vec_mul_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i] = x[i]*y[i]; } +inline static void ggml_vec_div_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i] = x[i]/y[i]; } - vuint8mf2_t x_a = __riscv_vor_vv_u8mf2(x_at, xh_0, vl); - vuint8mf2_t x_l = __riscv_vor_vv_u8mf2(x_lt, xh_1, vl); +static void ggml_vec_dot_f32(const int n, float * restrict s, const float * restrict x, const float * restrict y) { +#ifdef GGML_SIMD + float sumf = 0.0f; + const int np = (n & ~(GGML_F32_STEP - 1)); - vint8mf2_t v0 = __riscv_vreinterpret_v_u8mf2_i8mf2(x_a); - vint8mf2_t v1 = __riscv_vreinterpret_v_u8mf2_i8mf2(x_l); + GGML_F32_VEC sum[GGML_F32_ARR] = { GGML_F32_VEC_ZERO }; - vint16m1_t vec_mul1 = __riscv_vwmul_vv_i16m1(v0, y0, vl); - vint16m1_t vec_mul2 = __riscv_vwmul_vv_i16m1(v1, y1, vl); + GGML_F32_VEC ax[GGML_F32_ARR]; + GGML_F32_VEC ay[GGML_F32_ARR]; - vint32m1_t vec_zero = __riscv_vmv_v_x_i32m1(0, vl); + for (int i = 0; i < np; i += GGML_F32_STEP) { + for (int j = 0; j < GGML_F32_ARR; j++) { + ax[j] = GGML_F32_VEC_LOAD(x + i + j*GGML_F32_EPR); + ay[j] = GGML_F32_VEC_LOAD(y + i + j*GGML_F32_EPR); - vint32m1_t vs1 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul1, vec_zero, vl); - vint32m1_t vs2 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul2, vs1, vl); + sum[j] = GGML_F32_VEC_FMA(sum[j], ax[j], ay[j]); + } + } - int sumi = __riscv_vmv_x_s_i32m1_i32(vs2); + // reduce sum0..sum3 to sum0 + GGML_F32_VEC_REDUCE(sumf, sum); - sumf += (GGML_FP16_TO_FP32(x[i].d)*y[i].d)*sumi + GGML_FP16_TO_FP32(x[i].m)*y[i].s; + // leftovers + for (int i = np; i < n; ++i) { + sumf += x[i]*y[i]; } - - *s = sumf; #else // scalar - float sumf = 0.0; - - for (int i = 0; i < nb; i++) { - uint32_t qh; - memcpy(&qh, x[i].qh, sizeof(qh)); - - int sumi = 0; - - for (int j = 0; j < qk/2; ++j) { - const uint8_t xh_0 = ((qh >> (j + 0)) << 4) & 0x10; - const uint8_t xh_1 = ((qh >> (j + 12)) ) & 0x10; - - const int32_t x0 = (x[i].qs[j] & 0xF) | xh_0; - const int32_t x1 = (x[i].qs[j] >> 4) | xh_1; - - sumi += (x0 * y[i].qs[j]) + (x1 * y[i].qs[j + qk/2]); - } - - sumf += (GGML_FP16_TO_FP32(x[i].d)*y[i].d)*sumi + GGML_FP16_TO_FP32(x[i].m)*y[i].s; + ggml_float sumf = 0.0; + for (int i = 0; i < n; ++i) { + sumf += (ggml_float)(x[i]*y[i]); } +#endif *s = sumf; -#endif } -static void ggml_vec_dot_q8_0_q8_0(const int n, float * restrict s, const void * restrict vx, const void * restrict vy) { - const int qk = QK8_0; - const int nb = n / qk; - - assert(n % qk == 0); - - const block_q8_0 * restrict x = vx; - const block_q8_0 * restrict y = vy; - -#if defined(__ARM_NEON) - float32x4_t sumv0 = vdupq_n_f32(0.0f); - float32x4_t sumv1 = vdupq_n_f32(0.0f); - - GGML_ASSERT(nb % 2 == 0); // TODO: handle odd nb - for (int i = 0; i < nb; i += 2) { - const block_q8_0 * restrict x0 = &x[i + 0]; - const block_q8_0 * restrict x1 = &x[i + 1]; - const block_q8_0 * restrict y0 = &y[i + 0]; - const block_q8_0 * restrict y1 = &y[i + 1]; - - const int8x16_t x0_0 = vld1q_s8(x0->qs); - const int8x16_t x0_1 = vld1q_s8(x0->qs + 16); - const int8x16_t x1_0 = vld1q_s8(x1->qs); - const int8x16_t x1_1 = vld1q_s8(x1->qs + 16); - - // load y - const int8x16_t y0_0 = vld1q_s8(y0->qs); - const int8x16_t y0_1 = vld1q_s8(y0->qs + 16); - const int8x16_t y1_0 = vld1q_s8(y1->qs); - const int8x16_t y1_1 = vld1q_s8(y1->qs + 16); - -#if defined(__ARM_FEATURE_DOTPROD) - sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32( - vdotq_s32(vdupq_n_s32(0), x0_0, y0_0), - vdotq_s32(vdupq_n_s32(0), x0_1, y0_1))), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d)); - - sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32( - vdotq_s32(vdupq_n_s32(0), x1_0, y1_0), - vdotq_s32(vdupq_n_s32(0), x1_1, y1_1))), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d)); +static void ggml_vec_dot_f16(const int n, float * restrict s, ggml_fp16_t * restrict x, ggml_fp16_t * restrict y) { + ggml_float sumf = 0.0; -#else - const int16x8_t p0_0 = vmull_s8(vget_low_s8 (x0_0), vget_low_s8 (y0_0)); - const int16x8_t p0_1 = vmull_s8(vget_high_s8(x0_0), vget_high_s8(y0_0)); - const int16x8_t p0_2 = vmull_s8(vget_low_s8 (x0_1), vget_low_s8 (y0_1)); - const int16x8_t p0_3 = vmull_s8(vget_high_s8(x0_1), vget_high_s8(y0_1)); - - const int16x8_t p1_0 = vmull_s8(vget_low_s8 (x1_0), vget_low_s8 (y1_0)); - const int16x8_t p1_1 = vmull_s8(vget_high_s8(x1_0), vget_high_s8(y1_0)); - const int16x8_t p1_2 = vmull_s8(vget_low_s8 (x1_1), vget_low_s8 (y1_1)); - const int16x8_t p1_3 = vmull_s8(vget_high_s8(x1_1), vget_high_s8(y1_1)); - - const int32x4_t p0 = vaddq_s32(vpaddlq_s16(p0_0), vpaddlq_s16(p0_1)); - const int32x4_t p1 = vaddq_s32(vpaddlq_s16(p0_2), vpaddlq_s16(p0_3)); - const int32x4_t p2 = vaddq_s32(vpaddlq_s16(p1_0), vpaddlq_s16(p1_1)); - const int32x4_t p3 = vaddq_s32(vpaddlq_s16(p1_2), vpaddlq_s16(p1_3)); - - sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(p0, p1)), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d)); - sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(p2, p3)), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d)); -#endif - } +#if defined(GGML_SIMD) + const int np = (n & ~(GGML_F16_STEP - 1)); - *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1); -#elif defined(__AVX2__) || defined(__AVX__) - // Initialize accumulator with zeros - __m256 acc = _mm256_setzero_ps(); + GGML_F16_VEC sum[GGML_F16_ARR] = { GGML_F16_VEC_ZERO }; - // Main loop - for (int i = 0; i < nb; ++i) { - // Compute combined scale for the block - const __m256 d = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d)); - __m256i bx = _mm256_loadu_si256((const __m256i *)x[i].qs); - __m256i by = _mm256_loadu_si256((const __m256i *)y[i].qs); + GGML_F16_VEC ax[GGML_F16_ARR]; + GGML_F16_VEC ay[GGML_F16_ARR]; - const __m256 q = mul_sum_i8_pairs_float(bx, by); + for (int i = 0; i < np; i += GGML_F16_STEP) { + for (int j = 0; j < GGML_F16_ARR; j++) { + ax[j] = GGML_F16_VEC_LOAD(x + i + j*GGML_F16_EPR, j); + ay[j] = GGML_F16_VEC_LOAD(y + i + j*GGML_F16_EPR, j); - // Multiply q with scale and accumulate -#if defined(__AVX2__) - acc = _mm256_fmadd_ps( d, q, acc ); -#else - acc = _mm256_add_ps( _mm256_mul_ps( d, q ), acc ); -#endif + sum[j] = GGML_F16_VEC_FMA(sum[j], ax[j], ay[j]); + } } - *s = hsum_float_8(acc); -#elif defined(__riscv_v_intrinsic) - float sumf = 0.0; - size_t vl = __riscv_vsetvl_e8m1(qk); - - for (int i = 0; i < nb; i++) { - // load elements - vint8m1_t bx = __riscv_vle8_v_i8m1(x[i].qs, vl); - vint8m1_t by = __riscv_vle8_v_i8m1(y[i].qs, vl); - - vint16m2_t vw_mul = __riscv_vwmul_vv_i16m2(bx, by, vl); - - vint32m1_t v_zero = __riscv_vmv_v_x_i32m1(0, vl); - vint32m1_t v_sum = __riscv_vwredsum_vs_i16m2_i32m1(vw_mul, v_zero, vl); - - int sumi = __riscv_vmv_x_s_i32m1_i32(v_sum); + // reduce sum0..sum3 to sum0 + GGML_F16_VEC_REDUCE(sumf, sum); - sumf += sumi*(GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d)); + // leftovers + for (int i = np; i < n; ++i) { + sumf += (ggml_float)(GGML_FP16_TO_FP32(x[i])*GGML_FP16_TO_FP32(y[i])); } - - *s = sumf; #else - // scalar - float sumf = 0.0; - - for (int i = 0; i < nb; i++) { - int sumi = 0; - - for (int j = 0; j < qk; j++) { - sumi += x[i].qs[j]*y[i].qs[j]; - } - - sumf += sumi*(GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d)); + for (int i = 0; i < n; ++i) { + sumf += (ggml_float)(GGML_FP16_TO_FP32(x[i])*GGML_FP16_TO_FP32(y[i])); } +#endif *s = sumf; -#endif } // compute GGML_VEC_DOT_UNROLL dot products at once @@ -21001,7 +18706,6 @@ size_t ggml_quantize_chunk(enum ggml_type type, const float * src, void * dst, i block_q8_0 * block = (block_q8_0*)dst + start / QK8_0; result = ggml_quantize_q8_0(src + start, block, n, n, hist); } break; -#ifdef GGML_USE_K_QUANTS case GGML_TYPE_Q2_K: { GGML_ASSERT(start % QK_K == 0); @@ -21032,7 +18736,6 @@ size_t ggml_quantize_chunk(enum ggml_type type, const float * src, void * dst, i block_q6_K * block = (block_q6_K*)dst + start / QK_K; result = ggml_quantize_q6_K(src + start, block, n, n, hist); } break; -#endif case GGML_TYPE_F16: { int elemsize = sizeof(ggml_fp16_t); diff --git a/ggml.h b/ggml.h index 08bff5511c2254..8c954904e5a007 100644 --- a/ggml.h +++ b/ggml.h @@ -1930,12 +1930,19 @@ extern "C" { // quantization // + // TODO: these would probably get removed in favor of the more general ggml_quantize_chunk GGML_API size_t ggml_quantize_q4_0(const float * src, void * dst, int n, int k, int64_t * hist); GGML_API size_t ggml_quantize_q4_1(const float * src, void * dst, int n, int k, int64_t * hist); GGML_API size_t ggml_quantize_q5_0(const float * src, void * dst, int n, int k, int64_t * hist); GGML_API size_t ggml_quantize_q5_1(const float * src, void * dst, int n, int k, int64_t * hist); GGML_API size_t ggml_quantize_q8_0(const float * src, void * dst, int n, int k, int64_t * hist); + GGML_API size_t ggml_quantize_q2_K(const float * src, void * dst, int n, int k, int64_t * hist); + GGML_API size_t ggml_quantize_q3_K(const float * src, void * dst, int n, int k, int64_t * hist); + GGML_API size_t ggml_quantize_q4_K(const float * src, void * dst, int n, int k, int64_t * hist); + GGML_API size_t ggml_quantize_q5_K(const float * src, void * dst, int n, int k, int64_t * hist); + GGML_API size_t ggml_quantize_q6_K(const float * src, void * dst, int n, int k, int64_t * hist); + GGML_API size_t ggml_quantize_chunk(enum ggml_type type, const float * src, void * dst, int start, int n, int64_t * hist); // diff --git a/llama.cpp b/llama.cpp index 3d431ee7bf5260..1d1db8fc97fa38 100644 --- a/llama.cpp +++ b/llama.cpp @@ -19,13 +19,11 @@ #ifdef GGML_USE_MPI # include "ggml-mpi.h" #endif -#ifdef GGML_USE_K_QUANTS -# ifndef QK_K -# ifdef GGML_QKK_64 -# define QK_K 64 -# else -# define QK_K 256 -# endif +#ifndef QK_K +# ifdef GGML_QKK_64 +# define QK_K 64 +# else +# define QK_K 256 # endif #endif @@ -8052,7 +8050,7 @@ struct no_init { struct quantize_state_internal { const llama_model & model; const llama_model_quantize_params * params; -#ifdef GGML_USE_K_QUANTS + int n_attention_wv = 0; int n_feed_forward_w2 = 0; int i_attention_wv = 0; @@ -8060,7 +8058,7 @@ struct quantize_state_internal { int n_k_quantized = 0; int n_fallback = 0; -#endif + quantize_state_internal(const llama_model & model, const llama_model_quantize_params * params) : model(model) , params(params) @@ -8125,7 +8123,6 @@ static void llama_convert_tensor_internal( workers.clear(); } -#ifdef GGML_USE_K_QUANTS static ggml_type get_k_quant_type( quantize_state_internal & qs, ggml_type new_type, const ggml_tensor * tensor, llama_ftype ftype @@ -8237,7 +8234,6 @@ static ggml_type get_k_quant_type( return new_type; } -#endif static void llama_model_quantize_internal(const std::string & fname_inp, const std::string & fname_out, const llama_model_quantize_params * params) { ggml_type quantized_type; @@ -8252,7 +8248,6 @@ static void llama_model_quantize_internal(const std::string & fname_inp, const s case LLAMA_FTYPE_MOSTLY_F16: quantized_type = GGML_TYPE_F16; break; case LLAMA_FTYPE_ALL_F32: quantized_type = GGML_TYPE_F32; break; -#ifdef GGML_USE_K_QUANTS // K-quants case LLAMA_FTYPE_MOSTLY_Q2_K: quantized_type = GGML_TYPE_Q2_K; break; case LLAMA_FTYPE_MOSTLY_Q3_K_S: @@ -8263,7 +8258,7 @@ static void llama_model_quantize_internal(const std::string & fname_inp, const s case LLAMA_FTYPE_MOSTLY_Q5_K_S: case LLAMA_FTYPE_MOSTLY_Q5_K_M: quantized_type = GGML_TYPE_Q5_K; break; case LLAMA_FTYPE_MOSTLY_Q6_K: quantized_type = GGML_TYPE_Q6_K; break; -#endif + default: throw std::runtime_error(format("invalid output file type %d\n", ftype)); } @@ -8304,7 +8299,6 @@ static void llama_model_quantize_internal(const std::string & fname_inp, const s gguf_set_val_u32(ctx_out, "general.quantization_version", GGML_QNT_VERSION); gguf_set_val_u32(ctx_out, "general.file_type", ftype); -#ifdef GGML_USE_K_QUANTS for (int i = 0; i < ml.n_tensors; ++i) { struct ggml_tensor * meta = ml.get_tensor_meta(i); @@ -8322,7 +8316,6 @@ static void llama_model_quantize_internal(const std::string & fname_inp, const s LLAMA_LOG_WARN("%s ============ Strange model: n_attention_wv = %d, n_feed_forward_w2 = %d, hparams.n_layer = %d\n", __func__, qs.n_attention_wv, qs.n_feed_forward_w2, model.hparams.n_layer); } -#endif size_t total_size_org = 0; size_t total_size_new = 0; @@ -8387,9 +8380,10 @@ static void llama_model_quantize_internal(const std::string & fname_inp, const s if (quantize) { new_type = quantized_type; -#ifdef GGML_USE_K_QUANTS - new_type = get_k_quant_type(qs, new_type, tensor, ftype); -#endif + if (!params->pure) { + new_type = get_k_quant_type(qs, new_type, tensor, ftype); + } + // If we've decided to quantize to the same type the tensor is already // in then there's nothing to do. quantize = tensor->type != new_type; @@ -8514,12 +8508,11 @@ static void llama_model_quantize_internal(const std::string & fname_inp, const s LLAMA_LOG_INFO("\n"); } } -#ifdef GGML_USE_K_QUANTS + if (qs.n_fallback > 0) { LLAMA_LOG_WARN("%s: WARNING: %d of %d tensor(s) incompatible with k-quants and required fallback quantization\n", __func__, qs.n_fallback, qs.n_k_quantized + qs.n_fallback); } -#endif } static int llama_apply_lora_from_file_internal( @@ -8844,6 +8837,7 @@ struct llama_model_quantize_params llama_model_quantize_default_params() { /*.allow_requantize =*/ false, /*.quantize_output_tensor =*/ true, /*.only_copy =*/ false, + /*.pure =*/ false, }; return result; diff --git a/llama.h b/llama.h index d901dcd9116d3d..6927bd6010dd7a 100644 --- a/llama.h +++ b/llama.h @@ -191,6 +191,7 @@ extern "C" { bool allow_requantize; // allow quantizing non-f32/f16 tensors bool quantize_output_tensor; // quantize output.weight bool only_copy; // only copy tensors - ftype, allow_requantize and quantize_output_tensor are ignored + bool pure; // disable k-quant mixtures and quantize all tensors to the same type } llama_model_quantize_params; // grammar types From 71a09da301705b9c5ad4ca3cf3fbd966dd3f1ec5 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Sun, 29 Oct 2023 18:32:51 +0200 Subject: [PATCH 29/79] llama : fix kv shift bug (#3835) ggml-ci --- llama.cpp | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/llama.cpp b/llama.cpp index 1d1db8fc97fa38..d8510a5cf01254 100644 --- a/llama.cpp +++ b/llama.cpp @@ -1552,14 +1552,14 @@ static void llama_kv_cache_seq_shift( for (uint32_t i = 0; i < cache.size; ++i) { if (cache.cells[i].has_seq_id(seq_id) && cache.cells[i].pos >= p0 && cache.cells[i].pos < p1) { - cache.cells[i].pos += delta; + cache.has_shift = true; + cache.cells[i].pos += delta; + cache.cells[i].delta += delta; + if (cache.cells[i].pos < 0) { cache.cells[i].pos = -1; cache.cells[i].seq_id.clear(); if (new_head == cache.size) new_head = i; - } else { - cache.has_shift = true; - cache.cells[i].delta = delta; } } } @@ -6073,11 +6073,20 @@ static int llama_decode_internal( #endif // update the kv ring buffer - lctx.kv_self.has_shift = false; - lctx.kv_self.head += n_tokens; - // Ensure kv cache head points to a valid index. - if (lctx.kv_self.head >= lctx.kv_self.size) { - lctx.kv_self.head = 0; + { + if (kv_self.has_shift) { + kv_self.has_shift = false; + for (uint32_t i = 0; i < kv_self.size; ++i) { + kv_self.cells[i].delta = 0; + } + } + + kv_self.head += n_tokens; + + // Ensure kv cache head points to a valid index. + if (kv_self.head >= kv_self.size) { + kv_self.head = 0; + } } #ifdef GGML_PERF From 2046eb4345e62c4575b3cdc0115a51db89f3fb70 Mon Sep 17 00:00:00 2001 From: cebtenzzre Date: Sun, 29 Oct 2023 12:33:47 -0400 Subject: [PATCH 30/79] make : remove unnecessary dependency on build-info.h (#3842) --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 2cecc2216c87b6..c53c1e7260fef4 100644 --- a/Makefile +++ b/Makefile @@ -541,10 +541,10 @@ OBJS += ggml-alloc.o ggml-backend.o ggml-quants.o llama.o: llama.cpp ggml.h ggml-alloc.h ggml-backend.h ggml-cuda.h ggml-metal.h llama.h $(CXX) $(CXXFLAGS) -c $< -o $@ -COMMON_H_DEPS = common/common.h common/sampling.h build-info.h common/log.h -COMMON_DEPS = $(COMMON_H_DEPS) common.o sampling.o grammar-parser.o +COMMON_H_DEPS = common/common.h common/sampling.h common/log.h +COMMON_DEPS = common.o sampling.o grammar-parser.o -common.o: common/common.cpp $(COMMON_H_DEPS) +common.o: common/common.cpp build-info.h $(COMMON_H_DEPS) $(CXX) $(CXXFLAGS) -c $< -o $@ sampling.o: common/sampling.cpp $(COMMON_H_DEPS) From 6e08281e588bbba1a5d180290a94a43f167f3a1a Mon Sep 17 00:00:00 2001 From: Kerfuffle <44031344+KerfuffleV2@users.noreply.github.com> Date: Sun, 29 Oct 2023 11:31:40 -0600 Subject: [PATCH 31/79] Extend llama_kv_cache_seq_rm to allow matching any sequence (#3843) * Extend llama_kv_cache_seq_rm to allow matichng any sequence * Replace llama_kv_cache_tokens_rm with llama_kv_cache_clear Use llama_kv_cache_clear for cache clearing Change calls to llama_kv_cache_tokens_rm that want to delete by position to use llama_kv_cache_seq_rm functionality --- common/common.cpp | 2 +- examples/batched-bench/batched-bench.cpp | 2 +- examples/llama-bench/llama-bench.cpp | 4 ++-- examples/main/main.cpp | 2 +- examples/perplexity/perplexity.cpp | 6 ++--- examples/server/server.cpp | 2 +- llama.cpp | 29 ++++++++++++------------ llama.h | 15 +++++------- 8 files changed, 30 insertions(+), 32 deletions(-) diff --git a/common/common.cpp b/common/common.cpp index f81f4d354bc017..c187128d6ede3d 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -889,7 +889,7 @@ std::tuple llama_init_from_gpt_par std::vector tmp = { llama_token_bos(model), llama_token_eos(model), }; llama_decode(lctx, llama_batch_get_one(tmp.data(), std::min(tmp.size(), (size_t) params.n_batch), 0, 0)); - llama_kv_cache_tokens_rm(lctx, -1, -1); + llama_kv_cache_clear(lctx); llama_reset_timings(lctx); } diff --git a/examples/batched-bench/batched-bench.cpp b/examples/batched-bench/batched-bench.cpp index 43f9c971d18465..533c55c17aad17 100644 --- a/examples/batched-bench/batched-bench.cpp +++ b/examples/batched-bench/batched-bench.cpp @@ -185,7 +185,7 @@ int main(int argc, char ** argv) { const auto t_pp_start = ggml_time_us(); - llama_kv_cache_tokens_rm(ctx, -1, -1); + llama_kv_cache_clear(ctx); if (!decode_helper(ctx, batch, ctx_params.n_batch)) { LOG_TEE("%s: llama_decode() failed\n", __func__); diff --git a/examples/llama-bench/llama-bench.cpp b/examples/llama-bench/llama-bench.cpp index 20767d555b206d..780398184d2215 100644 --- a/examples/llama-bench/llama-bench.cpp +++ b/examples/llama-bench/llama-bench.cpp @@ -1037,7 +1037,7 @@ int main(int argc, char ** argv) { test t(inst, lmodel, ctx); - llama_kv_cache_tokens_rm(ctx, -1, -1); + llama_kv_cache_clear(ctx); // warmup run if (t.n_prompt > 0) { @@ -1048,7 +1048,7 @@ int main(int argc, char ** argv) { } for (int i = 0; i < params.reps; i++) { - llama_kv_cache_tokens_rm(ctx, -1, -1); + llama_kv_cache_clear(ctx); uint64_t t_start = get_time_ns(); if (t.n_prompt > 0) { diff --git a/examples/main/main.cpp b/examples/main/main.cpp index 3d9f670b9da7f2..8a43b6ab878a5f 100644 --- a/examples/main/main.cpp +++ b/examples/main/main.cpp @@ -298,7 +298,7 @@ int main(int argc, char ** argv) { } // remove any "future" tokens that we might have inherited from the previous session - llama_kv_cache_tokens_rm(ctx, n_matching_session_tokens, -1); + llama_kv_cache_seq_rm(ctx, -1, n_matching_session_tokens, -1); } LOGLN( diff --git a/examples/perplexity/perplexity.cpp b/examples/perplexity/perplexity.cpp index 3c2542e8c105e7..bd2c73d87875fe 100644 --- a/examples/perplexity/perplexity.cpp +++ b/examples/perplexity/perplexity.cpp @@ -210,7 +210,7 @@ static results_perplexity perplexity_v2(llama_context * ctx, const gpt_params & const auto t_start = std::chrono::high_resolution_clock::now(); // clear the KV cache - llama_kv_cache_tokens_rm(ctx, -1, -1); + llama_kv_cache_clear(ctx); for (int j = 0; j < num_batches; ++j) { const int batch_start = start + j * n_batch; @@ -339,7 +339,7 @@ static results_perplexity perplexity(llama_context * ctx, const gpt_params & par const auto t_start = std::chrono::high_resolution_clock::now(); // clear the KV cache - llama_kv_cache_tokens_rm(ctx, -1, -1); + llama_kv_cache_clear(ctx); for (int j = 0; j < num_batches; ++j) { const int batch_start = start + j * n_batch; @@ -573,7 +573,7 @@ static void hellaswag_score(llama_context * ctx, const gpt_params & params) { } // clear the KV cache - llama_kv_cache_tokens_rm(ctx, -1, -1); + llama_kv_cache_clear(ctx); auto logits = hellaswag_evaluate_tokens(ctx, query_embd, 0, params.n_batch, n_vocab); if (logits.empty()) { diff --git a/examples/server/server.cpp b/examples/server/server.cpp index 5b7e4139de551e..c163c7f8ec0dd1 100644 --- a/examples/server/server.cpp +++ b/examples/server/server.cpp @@ -857,7 +857,7 @@ struct llama_server_context void kv_cache_clear() { // clear the entire KV cache - llama_kv_cache_tokens_rm(ctx, -1, -1); + llama_kv_cache_clear(ctx); clean_kv_cache = false; } diff --git a/llama.cpp b/llama.cpp index d8510a5cf01254..a4340d5277b09c 100644 --- a/llama.cpp +++ b/llama.cpp @@ -1466,17 +1466,12 @@ static int32_t llama_kv_cache_cell_max(const struct llama_kv_cache & cache) { return 0; } -static void llama_kv_cache_tokens_rm(struct llama_kv_cache & cache, int32_t c0, int32_t c1) { - if (c0 < 0) c0 = 0; - if (c1 < 0) c1 = cache.size; - - for (int32_t i = c0; i < c1; ++i) { +static void llama_kv_cache_clear(struct llama_kv_cache & cache) { + for (int32_t i = 0; i < cache.size; ++i) { cache.cells[i].pos = -1; cache.cells[i].seq_id.clear(); } - - // Searching for a free slot can start here since we know it will be empty. - cache.head = uint32_t(c0); + cache.head = 0; } static void llama_kv_cache_seq_rm( @@ -1490,8 +1485,14 @@ static void llama_kv_cache_seq_rm( if (p1 < 0) p1 = std::numeric_limits::max(); for (uint32_t i = 0; i < cache.size; ++i) { - if (cache.cells[i].has_seq_id(seq_id) && cache.cells[i].pos >= p0 && cache.cells[i].pos < p1) { - cache.cells[i].seq_id.erase(seq_id); + if (cache.cells[i].pos >= p0 && cache.cells[i].pos < p1) { + if (seq_id < 0) { + cache.cells[i].seq_id.clear(); + } else if (cache.cells[i].has_seq_id(seq_id)) { + cache.cells[i].seq_id.erase(seq_id); + } else { + continue; + } if (cache.cells[i].seq_id.empty()) { cache.cells[i].pos = -1; if (new_head == cache.size) new_head = i; @@ -9207,8 +9208,8 @@ int llama_get_kv_cache_token_count(const struct llama_context * ctx) { return ctx->kv_self.head; } -void llama_kv_cache_tokens_rm(struct llama_context * ctx, int32_t c0, int32_t c1) { - llama_kv_cache_tokens_rm(ctx->kv_self, c0, c1); +void llama_kv_cache_clear(struct llama_context * ctx) { + llama_kv_cache_clear(ctx->kv_self); } void llama_kv_cache_seq_rm(struct llama_context * ctx, llama_seq_id seq_id, llama_pos p0, llama_pos p1) { @@ -9654,7 +9655,7 @@ int llama_eval( llama_token * tokens, int32_t n_tokens, int n_past) { - llama_kv_cache_tokens_rm(ctx->kv_self, n_past, -1); + llama_kv_cache_seq_rm(ctx->kv_self, -1, n_past, -1); const int ret = llama_decode_internal(*ctx, llama_batch_get_one(tokens, n_tokens, n_past, 0)); if (ret < 0) { @@ -9669,7 +9670,7 @@ int llama_eval_embd( float * embd, int32_t n_tokens, int n_past) { - llama_kv_cache_tokens_rm(ctx->kv_self, n_past, -1); + llama_kv_cache_seq_rm(ctx->kv_self, -1, n_past, -1); llama_batch batch = { n_tokens, nullptr, embd, nullptr, nullptr, nullptr, nullptr, n_past, 1, 0, }; diff --git a/llama.h b/llama.h index 6927bd6010dd7a..d727dbd9fd915d 100644 --- a/llama.h +++ b/llama.h @@ -334,17 +334,14 @@ extern "C" { LLAMA_API DEPRECATED(int llama_get_kv_cache_token_count(const struct llama_context * ctx), "avoid using this, it will be removed in the future, instead - count the tokens in user code"); - // Remove all tokens data of cells in [c0, c1) - // c0 < 0 : [0, c1] - // c1 < 0 : [c0, inf) - LLAMA_API void llama_kv_cache_tokens_rm( - struct llama_context * ctx, - int32_t c0, - int32_t c1); + // Clear the KV cache + LLAMA_API void llama_kv_cache_clear( + struct llama_context * ctx); // Removes all tokens that belong to the specified sequence and have positions in [p0, p1) - // p0 < 0 : [0, p1] - // p1 < 0 : [p0, inf) + // seq_id < 0 : match any sequence + // p0 < 0 : [0, p1] + // p1 < 0 : [p0, inf) LLAMA_API void llama_kv_cache_seq_rm( struct llama_context * ctx, llama_seq_id seq_id, From 207b51900e15cc7f89763a3bb1c565fe11cbb45d Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Mon, 30 Oct 2023 19:19:15 +0200 Subject: [PATCH 32/79] ggml : move FP16 <-> FP32 code to ggml-impl.h (#3861) * ggml : move FP16 <-> FP32 stuff to ggml-impl.h ggml-ci * tests : fix ARM build * ggml : explicitly initialize deprecated type traits * ggml : add math.h to ggml-impl.h * ggml : remove duplicate static assert macros * ggml : prefix lookup tables with ggml_ ggml-ci * ggml-impl : move extern "C" to start of file --- ggml-impl.h | 237 ++++++++++++++++++++++++ ggml-quants.c | 350 ++++++++++++++++++------------------ ggml-quants.h | 14 +- ggml.c | 282 +++++------------------------ llama.cpp | 2 +- tests/test-double-float.cpp | 2 +- tests/test-quantize-fns.cpp | 7 + 7 files changed, 470 insertions(+), 424 deletions(-) create mode 100644 ggml-impl.h diff --git a/ggml-impl.h b/ggml-impl.h new file mode 100644 index 00000000000000..5ec18a50c8da57 --- /dev/null +++ b/ggml-impl.h @@ -0,0 +1,237 @@ +#pragma once + +#include "ggml.h" + +// GGML internal header + +#include +#include +#include +#include // memcpy +#include // fabsf + +#ifdef __cplusplus +extern "C" { +#endif + +// static_assert should be a #define, but if it's not, +// fall back to the _Static_assert C11 keyword. +// if C99 - static_assert is noop +// ref: https://stackoverflow.com/a/53923785/4039976 +#ifndef static_assert +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201100L) +#define static_assert(cond, msg) _Static_assert(cond, msg) +#else +#define static_assert(cond, msg) struct global_scope_noop_trick +#endif +#endif + +// __FMA__ and __F16C__ are not defined in MSVC, however they are implied with AVX2/AVX512 +#if defined(_MSC_VER) && (defined(__AVX2__) || defined(__AVX512F__)) +#ifndef __FMA__ +#define __FMA__ +#endif +#ifndef __F16C__ +#define __F16C__ +#endif +#ifndef __SSE3__ +#define __SSE3__ +#endif +#endif + +#undef MIN +#undef MAX + +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#define MAX(a, b) ((a) > (b) ? (a) : (b)) + +// 16-bit float +// on Arm, we use __fp16 +// on x86, we use uint16_t +#if defined(__ARM_NEON) && !defined(_MSC_VER) + +// if YCM cannot find , make a symbolic link to it, for example: +// +// $ ln -sfn /Library/Developer/CommandLineTools/usr/lib/clang/13.1.6/include/arm_neon.h ./src/ +// +#include + +#define GGML_COMPUTE_FP16_TO_FP32(x) ((float) (x)) +#define GGML_COMPUTE_FP32_TO_FP16(x) (x) + +#define GGML_FP16_TO_FP32(x) ((float) (x)) +#define GGML_FP32_TO_FP16(x) (x) + +#else + +#ifdef __wasm_simd128__ +#include +#else +#ifdef __POWER9_VECTOR__ +#include +#undef bool +#define bool _Bool +#else +#if defined(_MSC_VER) || defined(__MINGW32__) +#include +#else +#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) || defined(__SSSE3__) || defined(__SSE3__) +#if !defined(__riscv) +#include +#endif +#endif +#endif +#endif +#endif + +#ifdef __riscv_v_intrinsic +#include +#endif + +#ifdef __F16C__ + +#ifdef _MSC_VER +#define GGML_COMPUTE_FP16_TO_FP32(x) _mm_cvtss_f32(_mm_cvtph_ps(_mm_cvtsi32_si128(x))) +#define GGML_COMPUTE_FP32_TO_FP16(x) _mm_extract_epi16(_mm_cvtps_ph(_mm_set_ss(x), 0), 0) +#else +#define GGML_COMPUTE_FP16_TO_FP32(x) _cvtsh_ss(x) +#define GGML_COMPUTE_FP32_TO_FP16(x) _cvtss_sh(x, 0) +#endif + +#elif defined(__POWER9_VECTOR__) + +#define GGML_COMPUTE_FP16_TO_FP32(x) ggml_compute_fp16_to_fp32(x) +#define GGML_COMPUTE_FP32_TO_FP16(x) ggml_compute_fp32_to_fp16(x) +/* the inline asm below is about 12% faster than the lookup method */ +#define GGML_FP16_TO_FP32(x) GGML_COMPUTE_FP16_TO_FP32(x) +#define GGML_FP32_TO_FP16(x) GGML_COMPUTE_FP32_TO_FP16(x) + +static inline float ggml_compute_fp16_to_fp32(ggml_fp16_t h) { + register float f; + register double d; + __asm__( + "mtfprd %0,%2\n" + "xscvhpdp %0,%0\n" + "frsp %1,%0\n" : + /* temp */ "=d"(d), + /* out */ "=f"(f): + /* in */ "r"(h)); + return f; +} + +static inline ggml_fp16_t ggml_compute_fp32_to_fp16(float f) { + register double d; + register ggml_fp16_t r; + __asm__( /* xscvdphp can work on double or single precision */ + "xscvdphp %0,%2\n" + "mffprd %1,%0\n" : + /* temp */ "=d"(d), + /* out */ "=r"(r): + /* in */ "f"(f)); + return r; +} + +#else + +// FP16 <-> FP32 +// ref: https://github.com/Maratyszcza/FP16 + +static inline float fp32_from_bits(uint32_t w) { + union { + uint32_t as_bits; + float as_value; + } fp32; + fp32.as_bits = w; + return fp32.as_value; +} + +static inline uint32_t fp32_to_bits(float f) { + union { + float as_value; + uint32_t as_bits; + } fp32; + fp32.as_value = f; + return fp32.as_bits; +} + +static inline float ggml_compute_fp16_to_fp32(ggml_fp16_t h) { + const uint32_t w = (uint32_t) h << 16; + const uint32_t sign = w & UINT32_C(0x80000000); + const uint32_t two_w = w + w; + + const uint32_t exp_offset = UINT32_C(0xE0) << 23; +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) || defined(__GNUC__) && !defined(__STRICT_ANSI__) + const float exp_scale = 0x1.0p-112f; +#else + const float exp_scale = fp32_from_bits(UINT32_C(0x7800000)); +#endif + const float normalized_value = fp32_from_bits((two_w >> 4) + exp_offset) * exp_scale; + + const uint32_t magic_mask = UINT32_C(126) << 23; + const float magic_bias = 0.5f; + const float denormalized_value = fp32_from_bits((two_w >> 17) | magic_mask) - magic_bias; + + const uint32_t denormalized_cutoff = UINT32_C(1) << 27; + const uint32_t result = sign | + (two_w < denormalized_cutoff ? fp32_to_bits(denormalized_value) : fp32_to_bits(normalized_value)); + return fp32_from_bits(result); +} + +static inline ggml_fp16_t ggml_compute_fp32_to_fp16(float f) { +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) || defined(__GNUC__) && !defined(__STRICT_ANSI__) + const float scale_to_inf = 0x1.0p+112f; + const float scale_to_zero = 0x1.0p-110f; +#else + const float scale_to_inf = fp32_from_bits(UINT32_C(0x77800000)); + const float scale_to_zero = fp32_from_bits(UINT32_C(0x08800000)); +#endif + float base = (fabsf(f) * scale_to_inf) * scale_to_zero; + + const uint32_t w = fp32_to_bits(f); + const uint32_t shl1_w = w + w; + const uint32_t sign = w & UINT32_C(0x80000000); + uint32_t bias = shl1_w & UINT32_C(0xFF000000); + if (bias < UINT32_C(0x71000000)) { + bias = UINT32_C(0x71000000); + } + + base = fp32_from_bits((bias >> 1) + UINT32_C(0x07800000)) + base; + const uint32_t bits = fp32_to_bits(base); + const uint32_t exp_bits = (bits >> 13) & UINT32_C(0x00007C00); + const uint32_t mantissa_bits = bits & UINT32_C(0x00000FFF); + const uint32_t nonsign = exp_bits + mantissa_bits; + return (sign >> 16) | (shl1_w > UINT32_C(0xFF000000) ? UINT16_C(0x7E00) : nonsign); +} + +#define GGML_COMPUTE_FP16_TO_FP32(x) ggml_compute_fp16_to_fp32(x) +#define GGML_COMPUTE_FP32_TO_FP16(x) ggml_compute_fp32_to_fp16(x) + +#endif // __F16C__ + +#endif // __ARM_NEON + +// precomputed f32 table for f16 (256 KB) +// defined in ggml.c, initialized in ggml_init() +extern float ggml_table_f32_f16[1 << 16]; + +// On ARM NEON, it's quicker to directly convert x -> x instead of calling into ggml_lookup_fp16_to_fp32, +// so we define GGML_FP16_TO_FP32 and GGML_FP32_TO_FP16 elsewhere for NEON. +// This is also true for POWER9. +#if !defined(GGML_FP16_TO_FP32) || !defined(GGML_FP32_TO_FP16) + +inline static float ggml_lookup_fp16_to_fp32(ggml_fp16_t f) { + uint16_t s; + memcpy(&s, &f, sizeof(uint16_t)); + return ggml_table_f32_f16[s]; +} + +#define GGML_FP16_TO_FP32(x) ggml_lookup_fp16_to_fp32(x) +#define GGML_FP32_TO_FP16(x) GGML_COMPUTE_FP32_TO_FP16(x) + +#endif + + // TODO: backend v2 PR + +#ifdef __cplusplus +} +#endif diff --git a/ggml-quants.c b/ggml-quants.c index fd4ee1be64befa..72159446738e30 100644 --- a/ggml-quants.c +++ b/ggml-quants.c @@ -1,5 +1,5 @@ #include "ggml-quants.h" -#include "ggml.h" +#include "ggml-impl.h" #include #include @@ -352,7 +352,7 @@ void quantize_row_q4_0_reference(const float * restrict x, block_q4_0 * restrict const float d = max / -8; const float id = d ? 1.0f/d : 0.0f; - y[i].d = ggml_fp32_to_fp16(d); + y[i].d = GGML_FP32_TO_FP16(d); for (int j = 0; j < qk/2; ++j) { const float x0 = x[i*qk + 0 + j]*id; @@ -392,8 +392,8 @@ void quantize_row_q4_1_reference(const float * restrict x, block_q4_1 * restrict const float d = (max - min) / ((1 << 4) - 1); const float id = d ? 1.0f/d : 0.0f; - y[i].d = ggml_fp32_to_fp16(d); - y[i].m = ggml_fp32_to_fp16(min); + y[i].d = GGML_FP32_TO_FP16(d); + y[i].m = GGML_FP32_TO_FP16(min); for (int j = 0; j < qk/2; ++j) { const float x0 = (x[i*qk + 0 + j] - min)*id; @@ -434,7 +434,7 @@ void quantize_row_q5_0_reference(const float * restrict x, block_q5_0 * restrict const float d = max / -16; const float id = d ? 1.0f/d : 0.0f; - y[i].d = ggml_fp32_to_fp16(d); + y[i].d = GGML_FP32_TO_FP16(d); uint32_t qh = 0; @@ -481,8 +481,8 @@ void quantize_row_q5_1_reference(const float * restrict x, block_q5_1 * restrict const float d = (max - min) / ((1 << 5) - 1); const float id = d ? 1.0f/d : 0.0f; - y[i].d = ggml_fp32_to_fp16(d); - y[i].m = ggml_fp32_to_fp16(min); + y[i].d = GGML_FP32_TO_FP16(d); + y[i].m = GGML_FP32_TO_FP16(min); uint32_t qh = 0; @@ -524,7 +524,7 @@ void quantize_row_q8_0_reference(const float * restrict x, block_q8_0 * restrict const float d = amax / ((1 << 7) - 1); const float id = d ? 1.0f/d : 0.0f; - y[i].d = ggml_fp32_to_fp16(d); + y[i].d = GGML_FP32_TO_FP16(d); for (int j = 0; j < QK8_0; ++j) { const float x0 = x[i*QK8_0 + j]*id; @@ -559,7 +559,7 @@ void quantize_row_q8_0(const float * restrict x, void * restrict vy, int k) { const float d = amax / ((1 << 7) - 1); const float id = d ? 1.0f/d : 0.0f; - y[i].d = ggml_fp32_to_fp16(d); + y[i].d = GGML_FP32_TO_FP16(d); for (int j = 0; j < 8; j++) { const float32x4_t v = vmulq_n_f32(srcv[j], id); @@ -592,7 +592,7 @@ void quantize_row_q8_0(const float * restrict x, void * restrict vy, int k) { const float d = amax / ((1 << 7) - 1); const float id = d ? 1.0f/d : 0.0f; - y[i].d = ggml_fp32_to_fp16(d); + y[i].d = GGML_FP32_TO_FP16(d); for (int j = 0; j < 8; j++) { const v128_t v = wasm_f32x4_mul(srcv[j], wasm_f32x4_splat(id)); @@ -627,7 +627,7 @@ void quantize_row_q8_0(const float * restrict x, void * restrict vy, int k) { // Quantize these floats const float d = maxScalar / 127.f; - y[i].d = ggml_fp32_to_fp16(d); + y[i].d = GGML_FP32_TO_FP16(d); const float id = ( maxScalar != 0.0f ) ? 127.f / maxScalar : 0.0f; const __m256 mul = _mm256_set1_ps( id ); @@ -704,7 +704,7 @@ void quantize_row_q8_0(const float * restrict x, void * restrict vy, int k) { const float d = amax / ((1 << 7) - 1); const float id = d ? 1.0f/d : 0.0f; - y[i].d = ggml_fp32_to_fp16(d); + y[i].d = GGML_FP32_TO_FP16(d); vfloat32m4_t x0 = __riscv_vfmul_vf_f32m4(v_x, id, vl); @@ -982,7 +982,7 @@ void dequantize_row_q4_0(const block_q4_0 * restrict x, float * restrict y, int const int nb = k / qk; for (int i = 0; i < nb; i++) { - const float d = ggml_fp16_to_fp32(x[i].d); + const float d = GGML_FP16_TO_FP32(x[i].d); for (int j = 0; j < qk/2; ++j) { const int x0 = (x[i].qs[j] & 0x0F) - 8; @@ -1002,8 +1002,8 @@ void dequantize_row_q4_1(const block_q4_1 * restrict x, float * restrict y, int const int nb = k / qk; for (int i = 0; i < nb; i++) { - const float d = ggml_fp16_to_fp32(x[i].d); - const float m = ggml_fp16_to_fp32(x[i].m); + const float d = GGML_FP16_TO_FP32(x[i].d); + const float m = GGML_FP16_TO_FP32(x[i].m); for (int j = 0; j < qk/2; ++j) { const int x0 = (x[i].qs[j] & 0x0F); @@ -1023,7 +1023,7 @@ void dequantize_row_q5_0(const block_q5_0 * restrict x, float * restrict y, int const int nb = k / qk; for (int i = 0; i < nb; i++) { - const float d = ggml_fp16_to_fp32(x[i].d); + const float d = GGML_FP16_TO_FP32(x[i].d); uint32_t qh; memcpy(&qh, x[i].qh, sizeof(qh)); @@ -1049,8 +1049,8 @@ void dequantize_row_q5_1(const block_q5_1 * restrict x, float * restrict y, int const int nb = k / qk; for (int i = 0; i < nb; i++) { - const float d = ggml_fp16_to_fp32(x[i].d); - const float m = ggml_fp16_to_fp32(x[i].m); + const float d = GGML_FP16_TO_FP32(x[i].d); + const float m = GGML_FP16_TO_FP32(x[i].m); uint32_t qh; memcpy(&qh, x[i].qh, sizeof(qh)); @@ -1076,7 +1076,7 @@ void dequantize_row_q8_0(const block_q8_0 * restrict x, float * restrict y, int const int nb = k / qk; for (int i = 0; i < nb; i++) { - const float d = ggml_fp16_to_fp32(x[i].d); + const float d = GGML_FP16_TO_FP32(x[i].d); for (int j = 0; j < qk; ++j) { y[i*qk + j] = x[i].qs[j]*d; @@ -1387,10 +1387,10 @@ void quantize_row_q2_K_reference(const float * restrict x, block_q2_K * restrict int l = nearest_int(iscale*scales[j]); y[i].scales[j] = l; } - y[i].d = ggml_fp32_to_fp16(max_scale/q4scale); + y[i].d = GGML_FP32_TO_FP16(max_scale/q4scale); } else { for (int j = 0; j < QK_K/16; ++j) y[i].scales[j] = 0; - y[i].d = ggml_fp32_to_fp16(0.f); + y[i].d = GGML_FP32_TO_FP16(0.f); } if (max_min > 0) { float iscale = q4scale/max_min; @@ -1398,14 +1398,14 @@ void quantize_row_q2_K_reference(const float * restrict x, block_q2_K * restrict int l = nearest_int(iscale*mins[j]); y[i].scales[j] |= (l << 4); } - y[i].dmin = ggml_fp32_to_fp16(max_min/q4scale); + y[i].dmin = GGML_FP32_TO_FP16(max_min/q4scale); } else { - y[i].dmin = ggml_fp32_to_fp16(0.f); + y[i].dmin = GGML_FP32_TO_FP16(0.f); } for (int j = 0; j < QK_K/16; ++j) { - const float d = ggml_fp16_to_fp32(y[i].d) * (y[i].scales[j] & 0xF); + const float d = GGML_FP16_TO_FP32(y[i].d) * (y[i].scales[j] & 0xF); if (!d) continue; - const float dm = ggml_fp16_to_fp32(y[i].dmin) * (y[i].scales[j] >> 4); + const float dm = GGML_FP16_TO_FP32(y[i].dmin) * (y[i].scales[j] >> 4); for (int ii = 0; ii < 16; ++ii) { int l = nearest_int((x[16*j + ii] + dm)/d); l = MAX(0, MIN(3, l)); @@ -1436,8 +1436,8 @@ void dequantize_row_q2_K(const block_q2_K * restrict x, float * restrict y, int for (int i = 0; i < nb; i++) { - const float d = ggml_fp16_to_fp32(x[i].d); - const float min = ggml_fp16_to_fp32(x[i].dmin); + const float d = GGML_FP16_TO_FP32(x[i].d); + const float min = GGML_FP16_TO_FP32(x[i].dmin); const uint8_t * q = x[i].qs; @@ -1526,16 +1526,16 @@ void quantize_row_q3_K_reference(const float * restrict x, block_q3_K * restrict l >>= 4; y[i].scales[j%4 + 8] |= (l << (2*(j/4))); } - y[i].d = ggml_fp32_to_fp16(1/iscale); + y[i].d = GGML_FP32_TO_FP16(1/iscale); } else { - y[i].d = ggml_fp32_to_fp16(0.f); + y[i].d = GGML_FP32_TO_FP16(0.f); } int8_t sc; for (int j = 0; j < QK_K/16; ++j) { sc = j < 8 ? y[i].scales[j] & 0xF : y[i].scales[j-8] >> 4; sc = (sc | (((y[i].scales[8 + j%4] >> (2*(j/4))) & 3) << 4)) - 32; - float d = ggml_fp16_to_fp32(y[i].d) * sc; + float d = GGML_FP16_TO_FP32(y[i].d) * sc; if (!d) { continue; } @@ -1555,16 +1555,16 @@ void quantize_row_q3_K_reference(const float * restrict x, block_q3_K * restrict l2 = 8 + MAX(-8, MIN(7, l2)); y[i].scales[j/2] = l1 | (l2 << 4); } - y[i].d = ggml_fp32_to_fp16(1/iscale); + y[i].d = GGML_FP32_TO_FP16(1/iscale); } else { for (int j = 0; j < QK_K/16; j+=2) { y[i].scales[j/2] = 0; } - y[i].d = ggml_fp32_to_fp16(0.f); + y[i].d = GGML_FP32_TO_FP16(0.f); } for (int j = 0; j < QK_K/16; ++j) { int s = j%2 == 0 ? y[i].scales[j/2] & 0xF : y[i].scales[j/2] >> 4; - float d = ggml_fp16_to_fp32(y[i].d) * (s - 8); + float d = GGML_FP16_TO_FP32(y[i].d) * (s - 8); if (!d) { continue; } @@ -1618,7 +1618,7 @@ void dequantize_row_q3_K(const block_q3_K * restrict x, float * restrict y, int for (int i = 0; i < nb; i++) { - const float d_all = ggml_fp16_to_fp32(x[i].d); + const float d_all = GGML_FP16_TO_FP32(x[i].d); const uint8_t * restrict q = x[i].qs; const uint8_t * restrict hm = x[i].hmask; @@ -1663,7 +1663,7 @@ void dequantize_row_q3_K(const block_q3_K * restrict x, float * restrict y, int for (int i = 0; i < nb; i++) { - const float d_all = ggml_fp16_to_fp32(x[i].d); + const float d_all = GGML_FP16_TO_FP32(x[i].d); const uint8_t * restrict q = x[i].qs; const uint8_t * restrict hm = x[i].hmask; @@ -1753,15 +1753,15 @@ void quantize_row_q4_K_reference(const float * restrict x, block_q4_K * restrict y[i].scales[j-0] |= ((lm >> 4) << 6); } } - y[i].d = ggml_fp32_to_fp16(max_scale/63.f); - y[i].dmin = ggml_fp32_to_fp16(max_min/63.f); + y[i].d = GGML_FP32_TO_FP16(max_scale/63.f); + y[i].dmin = GGML_FP32_TO_FP16(max_min/63.f); uint8_t sc, m; for (int j = 0; j < QK_K/32; ++j) { get_scale_min_k4(j, y[i].scales, &sc, &m); - const float d = ggml_fp16_to_fp32(y[i].d) * sc; + const float d = GGML_FP16_TO_FP32(y[i].d) * sc; if (!d) continue; - const float dm = ggml_fp16_to_fp32(y[i].dmin) * m; + const float dm = GGML_FP16_TO_FP32(y[i].dmin) * m; for (int ii = 0; ii < 32; ++ii) { int l = nearest_int((x[32*j + ii] + dm)/d); l = MAX(0, MIN(15, l)); @@ -1778,17 +1778,17 @@ void quantize_row_q4_K_reference(const float * restrict x, block_q4_K * restrict int m2 = nearest_int(inv_min*mins[1]); y[i].scales[0] = d1 | (m1 << 4); y[i].scales[1] = d2 | (m2 << 4); - y[i].d[0] = ggml_fp32_to_fp16(max_scale/s_factor); - y[i].d[1] = ggml_fp32_to_fp16(max_min/s_factor); + y[i].d[0] = GGML_FP32_TO_FP16(max_scale/s_factor); + y[i].d[1] = GGML_FP32_TO_FP16(max_min/s_factor); float sumlx = 0; int suml2 = 0; for (int j = 0; j < QK_K/32; ++j) { const uint8_t sd = y[i].scales[j] & 0xF; const uint8_t sm = y[i].scales[j] >> 4; - const float d = ggml_fp16_to_fp32(y[i].d[0]) * sd; + const float d = GGML_FP16_TO_FP32(y[i].d[0]) * sd; if (!d) continue; - const float m = ggml_fp16_to_fp32(y[i].d[1]) * sm; + const float m = GGML_FP16_TO_FP32(y[i].d[1]) * sm; for (int ii = 0; ii < 32; ++ii) { int l = nearest_int((x[32*j + ii] + m)/d); l = MAX(0, MIN(15, l)); @@ -1798,7 +1798,7 @@ void quantize_row_q4_K_reference(const float * restrict x, block_q4_K * restrict } } if (suml2) { - y[i].d[0] = ggml_fp32_to_fp16(sumlx/suml2); + y[i].d[0] = GGML_FP32_TO_FP16(sumlx/suml2); } #endif uint8_t * q = y[i].qs; @@ -1822,8 +1822,8 @@ void dequantize_row_q4_K(const block_q4_K * restrict x, float * restrict y, int #if QK_K == 256 - const float d = ggml_fp16_to_fp32(x[i].d); - const float min = ggml_fp16_to_fp32(x[i].dmin); + const float d = GGML_FP16_TO_FP32(x[i].d); + const float min = GGML_FP16_TO_FP32(x[i].dmin); int is = 0; uint8_t sc, m; @@ -1837,8 +1837,8 @@ void dequantize_row_q4_K(const block_q4_K * restrict x, float * restrict y, int q += 32; is += 2; } #else - const float dall = ggml_fp16_to_fp32(x[i].d[0]); - const float mall = ggml_fp16_to_fp32(x[i].d[1]); + const float dall = GGML_FP16_TO_FP32(x[i].d[0]); + const float mall = GGML_FP16_TO_FP32(x[i].d[1]); const float d1 = dall * (x[i].scales[0] & 0xF), m1 = mall * (x[i].scales[0] >> 4); const float d2 = dall * (x[i].scales[1] & 0xF), m2 = mall * (x[i].scales[1] >> 4); for (int l = 0; l < 32; ++l) { @@ -1924,15 +1924,15 @@ void quantize_row_q5_K_reference(const float * restrict x, block_q5_K * restrict y[i].scales[j-0] |= ((lm >> 4) << 6); } } - y[i].d = ggml_fp32_to_fp16(max_scale/63.f); - y[i].dmin = ggml_fp32_to_fp16(max_min/63.f); + y[i].d = GGML_FP32_TO_FP16(max_scale/63.f); + y[i].dmin = GGML_FP32_TO_FP16(max_min/63.f); uint8_t sc, m; for (int j = 0; j < QK_K/32; ++j) { get_scale_min_k4(j, y[i].scales, &sc, &m); - const float d = ggml_fp16_to_fp32(y[i].d) * sc; + const float d = GGML_FP16_TO_FP32(y[i].d) * sc; if (!d) continue; - const float dm = ggml_fp16_to_fp32(y[i].dmin) * m; + const float dm = GGML_FP16_TO_FP32(y[i].dmin) * m; for (int ii = 0; ii < 32; ++ii) { int l = nearest_int((x[32*j + ii] + dm)/d); l = MAX(0, MIN(31, l)); @@ -1976,10 +1976,10 @@ void quantize_row_q5_K_reference(const float * restrict x, block_q5_K * restrict int l = nearest_int(iscale*scales[j]); y[i].scales[j] = MAX(-128, MIN(127, l)); } - y[i].d = ggml_fp32_to_fp16(1/iscale); + y[i].d = GGML_FP32_TO_FP16(1/iscale); for (int j = 0; j < QK_K/16; ++j) { - const float d = ggml_fp16_to_fp32(y[i].d) * y[i].scales[j]; + const float d = GGML_FP16_TO_FP32(y[i].d) * y[i].scales[j]; if (!d) continue; for (int ii = 0; ii < 16; ++ii) { int l = nearest_int(x[16*j + ii]/d); @@ -2023,8 +2023,8 @@ void dequantize_row_q5_K(const block_q5_K * restrict x, float * restrict y, int #if QK_K == 256 - const float d = ggml_fp16_to_fp32(x[i].d); - const float min = ggml_fp16_to_fp32(x[i].dmin); + const float d = GGML_FP16_TO_FP32(x[i].d); + const float min = GGML_FP16_TO_FP32(x[i].dmin); int is = 0; uint8_t sc, m; @@ -2040,7 +2040,7 @@ void dequantize_row_q5_K(const block_q5_K * restrict x, float * restrict y, int u1 <<= 2; u2 <<= 2; } #else - float d = ggml_fp16_to_fp32(x[i].d); + float d = GGML_FP16_TO_FP32(x[i].d); const int8_t * restrict s = x[i].scales; for (int l = 0; l < 8; ++l) { y[l+ 0] = d * s[0] * ((ql[l+ 0] & 0xF) - (qh[l] & 0x01 ? 0 : 16)); @@ -2103,19 +2103,19 @@ void quantize_row_q6_K_reference(const float * restrict x, block_q6_K * restrict if (!max_abs_scale) { memset(&y[i], 0, sizeof(block_q6_K)); - y[i].d = ggml_fp32_to_fp16(0.f); + y[i].d = GGML_FP32_TO_FP16(0.f); x += QK_K; continue; } float iscale = -128.f/max_scale; - y[i].d = ggml_fp32_to_fp16(1/iscale); + y[i].d = GGML_FP32_TO_FP16(1/iscale); for (int ib = 0; ib < QK_K/16; ++ib) { y[i].scales[ib] = MIN(127, nearest_int(iscale*scales[ib])); } for (int j = 0; j < QK_K/16; ++j) { - float d = ggml_fp16_to_fp32(y[i].d) * y[i].scales[j]; + float d = GGML_FP16_TO_FP32(y[i].d) * y[i].scales[j]; if (!d) { continue; } @@ -2164,7 +2164,7 @@ void dequantize_row_q6_K(const block_q6_K * restrict x, float * restrict y, int for (int i = 0; i < nb; i++) { - const float d = ggml_fp16_to_fp32(x[i].d); + const float d = GGML_FP16_TO_FP32(x[i].d); const uint8_t * restrict ql = x[i].ql; const uint8_t * restrict qh = x[i].qh; @@ -2371,8 +2371,8 @@ void ggml_vec_dot_q4_0_q8_0(int n, float * restrict s, const void * restrict vx, const int32x4_t p_0 = vdotq_s32(vdotq_s32(vdupq_n_s32(0), v0_0ls, v1_0l), v0_0hs, v1_0h); const int32x4_t p_1 = vdotq_s32(vdotq_s32(vdupq_n_s32(0), v0_1ls, v1_1l), v0_1hs, v1_1h); - sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(p_0), ggml_fp16_to_fp32(x0->d)*ggml_fp16_to_fp32(y0->d)); - sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(p_1), ggml_fp16_to_fp32(x1->d)*ggml_fp16_to_fp32(y1->d)); + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(p_0), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d)); + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(p_1), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d)); #else const int16x8_t pl0l = vmull_s8(vget_low_s8 (v0_0ls), vget_low_s8 (v1_0l)); const int16x8_t pl0h = vmull_s8(vget_high_s8(v0_0ls), vget_high_s8(v1_0l)); @@ -2389,8 +2389,8 @@ void ggml_vec_dot_q4_0_q8_0(int n, float * restrict s, const void * restrict vx, const int32x4_t pl1 = vaddq_s32(vpaddlq_s16(pl1l), vpaddlq_s16(pl1h)); const int32x4_t ph1 = vaddq_s32(vpaddlq_s16(ph1l), vpaddlq_s16(ph1h)); - sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(pl0, ph0)), ggml_fp16_to_fp32(x0->d)*ggml_fp16_to_fp32(y0->d)); - sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(pl1, ph1)), ggml_fp16_to_fp32(x1->d)*ggml_fp16_to_fp32(y1->d)); + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(pl0, ph0)), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d)); + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(pl1, ph1)), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d)); #endif } @@ -2402,7 +2402,7 @@ void ggml_vec_dot_q4_0_q8_0(int n, float * restrict s, const void * restrict vx, // Main loop for (int i = 0; i < nb; ++i) { /* Compute combined scale for the block */ - const __m256 d = _mm256_set1_ps( ggml_fp16_to_fp32(x[i].d) * ggml_fp16_to_fp32(y[i].d) ); + const __m256 d = _mm256_set1_ps( GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d) ); __m256i bx = bytes_from_nibbles_32(x[i].qs); @@ -2426,7 +2426,7 @@ void ggml_vec_dot_q4_0_q8_0(int n, float * restrict s, const void * restrict vx, // Main loop for (int i = 0; i < nb; ++i) { // Compute combined scale for the block - const __m256 d = _mm256_set1_ps( ggml_fp16_to_fp32(x[i].d) * ggml_fp16_to_fp32(y[i].d) ); + const __m256 d = _mm256_set1_ps( GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d) ); const __m128i lowMask = _mm_set1_epi8(0xF); const __m128i off = _mm_set1_epi8(8); @@ -2468,7 +2468,7 @@ void ggml_vec_dot_q4_0_q8_0(int n, float * restrict s, const void * restrict vx, _mm_prefetch(&y[0] + sizeof(block_q8_0), _MM_HINT_T0); // Compute combined scale for the block 0 and 1 - const __m128 d_0_1 = _mm_set1_ps( ggml_fp16_to_fp32(x[0].d) * ggml_fp16_to_fp32(y[0].d) ); + const __m128 d_0_1 = _mm_set1_ps( GGML_FP16_TO_FP32(x[0].d) * GGML_FP16_TO_FP32(y[0].d) ); const __m128i tmp_0_1 = _mm_loadu_si128((const __m128i *)x[0].qs); @@ -2486,7 +2486,7 @@ void ggml_vec_dot_q4_0_q8_0(int n, float * restrict s, const void * restrict vx, _mm_prefetch(&y[1] + sizeof(block_q8_0), _MM_HINT_T0); // Compute combined scale for the block 2 and 3 - const __m128 d_2_3 = _mm_set1_ps( ggml_fp16_to_fp32(x[1].d) * ggml_fp16_to_fp32(y[1].d) ); + const __m128 d_2_3 = _mm_set1_ps( GGML_FP16_TO_FP32(x[1].d) * GGML_FP16_TO_FP32(y[1].d) ); const __m128i tmp_2_3 = _mm_loadu_si128((const __m128i *)x[1].qs); @@ -2521,7 +2521,7 @@ void ggml_vec_dot_q4_0_q8_0(int n, float * restrict s, const void * restrict vx, _mm_prefetch(&y[i] + sizeof(block_q8_0), _MM_HINT_T0); // Compute combined scale for the block 0 and 1 - const __m128 d_0_1 = _mm_set1_ps( ggml_fp16_to_fp32(x[i].d) * ggml_fp16_to_fp32(y[i].d) ); + const __m128 d_0_1 = _mm_set1_ps( GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d) ); const __m128i tmp_0_1 = _mm_loadu_si128((const __m128i *)x[i].qs); @@ -2539,7 +2539,7 @@ void ggml_vec_dot_q4_0_q8_0(int n, float * restrict s, const void * restrict vx, _mm_prefetch(&y[i] + 2 * sizeof(block_q8_0), _MM_HINT_T0); // Compute combined scale for the block 2 and 3 - const __m128 d_2_3 = _mm_set1_ps( ggml_fp16_to_fp32(x[i + 1].d) * ggml_fp16_to_fp32(y[i + 1].d) ); + const __m128 d_2_3 = _mm_set1_ps( GGML_FP16_TO_FP32(x[i + 1].d) * GGML_FP16_TO_FP32(y[i + 1].d) ); const __m128i tmp_2_3 = _mm_loadu_si128((const __m128i *)x[i + 1].qs); @@ -2606,7 +2606,7 @@ void ggml_vec_dot_q4_0_q8_0(int n, float * restrict s, const void * restrict vx, int sumi = __riscv_vmv_x_s_i32m1_i32(vs2); - sumf += sumi*ggml_fp16_to_fp32(x[i].d)*ggml_fp16_to_fp32(y[i].d); + sumf += sumi*GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d); } *s = sumf; @@ -2624,7 +2624,7 @@ void ggml_vec_dot_q4_0_q8_0(int n, float * restrict s, const void * restrict vx, sumi += (v0 * y[i].qs[j]) + (v1 * y[i].qs[j + qk/2]); } - sumf += sumi*ggml_fp16_to_fp32(x[i].d)*ggml_fp16_to_fp32(y[i].d); + sumf += sumi*GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d); } *s = sumf; @@ -2655,7 +2655,7 @@ void ggml_vec_dot_q4_1_q8_1(const int n, float * restrict s, const void * restri const block_q8_1 * restrict y0 = &y[i + 0]; const block_q8_1 * restrict y1 = &y[i + 1]; - summs += ggml_fp16_to_fp32(x0->m) * y0->s + ggml_fp16_to_fp32(x1->m) * y1->s; + summs += GGML_FP16_TO_FP32(x0->m) * y0->s + GGML_FP16_TO_FP32(x1->m) * y1->s; const uint8x16_t m4b = vdupq_n_u8(0x0F); @@ -2679,8 +2679,8 @@ void ggml_vec_dot_q4_1_q8_1(const int n, float * restrict s, const void * restri const int32x4_t p_0 = vdotq_s32(vdotq_s32(vdupq_n_s32(0), v0_0l, v1_0l), v0_0h, v1_0h); const int32x4_t p_1 = vdotq_s32(vdotq_s32(vdupq_n_s32(0), v0_1l, v1_1l), v0_1h, v1_1h); - sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(p_0), ggml_fp16_to_fp32(x0->d)*y0->d); - sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(p_1), ggml_fp16_to_fp32(x1->d)*y1->d); + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(p_0), GGML_FP16_TO_FP32(x0->d)*y0->d); + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(p_1), GGML_FP16_TO_FP32(x1->d)*y1->d); #else const int16x8_t pl0l = vmull_s8(vget_low_s8 (v0_0l), vget_low_s8 (v1_0l)); const int16x8_t pl0h = vmull_s8(vget_high_s8(v0_0l), vget_high_s8(v1_0l)); @@ -2697,8 +2697,8 @@ void ggml_vec_dot_q4_1_q8_1(const int n, float * restrict s, const void * restri const int32x4_t pl1 = vaddq_s32(vpaddlq_s16(pl1l), vpaddlq_s16(pl1h)); const int32x4_t ph1 = vaddq_s32(vpaddlq_s16(ph1l), vpaddlq_s16(ph1h)); - sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(pl0, ph0)), ggml_fp16_to_fp32(x0->d)*y0->d); - sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(pl1, ph1)), ggml_fp16_to_fp32(x1->d)*y1->d); + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(pl0, ph0)), GGML_FP16_TO_FP32(x0->d)*y0->d); + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(pl1, ph1)), GGML_FP16_TO_FP32(x1->d)*y1->d); #endif } @@ -2711,10 +2711,10 @@ void ggml_vec_dot_q4_1_q8_1(const int n, float * restrict s, const void * restri // Main loop for (int i = 0; i < nb; ++i) { - const float d0 = ggml_fp16_to_fp32(x[i].d); + const float d0 = GGML_FP16_TO_FP32(x[i].d); const float d1 = y[i].d; - summs += ggml_fp16_to_fp32(x[i].m) * y[i].s; + summs += GGML_FP16_TO_FP32(x[i].m) * y[i].s; const __m256 d0v = _mm256_set1_ps( d0 ); const __m256 d1v = _mm256_set1_ps( d1 ); @@ -2766,7 +2766,7 @@ void ggml_vec_dot_q4_1_q8_1(const int n, float * restrict s, const void * restri int sumi = __riscv_vmv_x_s_i32m1_i32(vs2); - sumf += (ggml_fp16_to_fp32(x[i].d)*y[i].d)*sumi + ggml_fp16_to_fp32(x[i].m)*y[i].s; + sumf += (GGML_FP16_TO_FP32(x[i].d)*y[i].d)*sumi + GGML_FP16_TO_FP32(x[i].m)*y[i].s; } *s = sumf; @@ -2784,7 +2784,7 @@ void ggml_vec_dot_q4_1_q8_1(const int n, float * restrict s, const void * restri sumi += (v0 * y[i].qs[j]) + (v1 * y[i].qs[j + qk/2]); } - sumf += (ggml_fp16_to_fp32(x[i].d)*y[i].d)*sumi + ggml_fp16_to_fp32(x[i].m)*y[i].s; + sumf += (GGML_FP16_TO_FP32(x[i].d)*y[i].d)*sumi + GGML_FP16_TO_FP32(x[i].m)*y[i].s; } *s = sumf; @@ -2864,10 +2864,10 @@ void ggml_vec_dot_q5_0_q8_0(const int n, float * restrict s, const void * restri #if defined(__ARM_FEATURE_DOTPROD) sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32( vdotq_s32(vdupq_n_s32(0), v0_0lf, v1_0l), - vdotq_s32(vdupq_n_s32(0), v0_0hf, v1_0h))), ggml_fp16_to_fp32(x0->d)*ggml_fp16_to_fp32(y0->d)); + vdotq_s32(vdupq_n_s32(0), v0_0hf, v1_0h))), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d)); sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32( vdotq_s32(vdupq_n_s32(0), v0_1lf, v1_1l), - vdotq_s32(vdupq_n_s32(0), v0_1hf, v1_1h))), ggml_fp16_to_fp32(x1->d)*ggml_fp16_to_fp32(y1->d)); + vdotq_s32(vdupq_n_s32(0), v0_1hf, v1_1h))), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d)); #else const int16x8_t pl0l = vmull_s8(vget_low_s8 (v0_0lf), vget_low_s8 (v1_0l)); const int16x8_t pl0h = vmull_s8(vget_high_s8(v0_0lf), vget_high_s8(v1_0l)); @@ -2884,8 +2884,8 @@ void ggml_vec_dot_q5_0_q8_0(const int n, float * restrict s, const void * restri const int32x4_t pl1 = vaddq_s32(vpaddlq_s16(pl1l), vpaddlq_s16(pl1h)); const int32x4_t ph1 = vaddq_s32(vpaddlq_s16(ph1l), vpaddlq_s16(ph1h)); - sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(pl0, ph0)), ggml_fp16_to_fp32(x0->d)*ggml_fp16_to_fp32(y0->d)); - sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(pl1, ph1)), ggml_fp16_to_fp32(x1->d)*ggml_fp16_to_fp32(y1->d)); + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(pl0, ph0)), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d)); + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(pl1, ph1)), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d)); #endif } @@ -2946,7 +2946,7 @@ void ggml_vec_dot_q5_0_q8_0(const int n, float * restrict s, const void * restri wasm_i32x4_dot_i16x8(v0lfh, v1lh)), wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0hfl, v1hl), wasm_i32x4_dot_i16x8(v0hfh, v1hh)))), - wasm_f32x4_splat(ggml_fp16_to_fp32(x0->d) * ggml_fp16_to_fp32(y0->d)))); + wasm_f32x4_splat(GGML_FP16_TO_FP32(x0->d) * GGML_FP16_TO_FP32(y0->d)))); } *s = wasm_f32x4_extract_lane(sumv, 0) + wasm_f32x4_extract_lane(sumv, 1) + @@ -2958,7 +2958,7 @@ void ggml_vec_dot_q5_0_q8_0(const int n, float * restrict s, const void * restri // Main loop for (int i = 0; i < nb; i++) { /* Compute combined scale for the block */ - const __m256 d = _mm256_set1_ps(ggml_fp16_to_fp32(x[i].d) * ggml_fp16_to_fp32(y[i].d)); + const __m256 d = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d)); __m256i bx = bytes_from_nibbles_32(x[i].qs); __m256i bxhi = bytes_from_bits_32(x[i].qh); @@ -2982,7 +2982,7 @@ void ggml_vec_dot_q5_0_q8_0(const int n, float * restrict s, const void * restri // Main loop for (int i = 0; i < nb; i++) { /* Compute combined scale for the block */ - const __m256 d = _mm256_set1_ps(ggml_fp16_to_fp32(x[i].d) * ggml_fp16_to_fp32(y[i].d)); + const __m256 d = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d)); __m256i bx = bytes_from_nibbles_32(x[i].qs); const __m256i bxhi = bytes_from_bits_32(x[i].qh); @@ -3066,7 +3066,7 @@ void ggml_vec_dot_q5_0_q8_0(const int n, float * restrict s, const void * restri int sumi = __riscv_vmv_x_s_i32m1_i32(vs2); - sumf += (ggml_fp16_to_fp32(x[i].d)*ggml_fp16_to_fp32(y[i].d)) * sumi; + sumf += (GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d)) * sumi; } *s = sumf; @@ -3090,7 +3090,7 @@ void ggml_vec_dot_q5_0_q8_0(const int n, float * restrict s, const void * restri sumi += (x0 * y[i].qs[j]) + (x1 * y[i].qs[j + qk/2]); } - sumf += (ggml_fp16_to_fp32(x[i].d)*ggml_fp16_to_fp32(y[i].d)) * sumi; + sumf += (GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d)) * sumi; } *s = sumf; @@ -3130,8 +3130,8 @@ void ggml_vec_dot_q5_1_q8_1(const int n, float * restrict s, const void * restri const uint8x16_t m4b = vdupq_n_u8(0x0F); - summs0 += ggml_fp16_to_fp32(x0->m) * y0->s; - summs1 += ggml_fp16_to_fp32(x1->m) * y1->s; + summs0 += GGML_FP16_TO_FP32(x0->m) * y0->s; + summs1 += GGML_FP16_TO_FP32(x1->m) * y1->s; // extract the 5th bit via lookup table ((b) << 4) memcpy(&qh0, x0->qh, sizeof(qh0)); @@ -3176,10 +3176,10 @@ void ggml_vec_dot_q5_1_q8_1(const int n, float * restrict s, const void * restri #if defined(__ARM_FEATURE_DOTPROD) sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32( vdotq_s32(vdupq_n_s32(0), v0_0lf, v1_0l), - vdotq_s32(vdupq_n_s32(0), v0_0hf, v1_0h))), ggml_fp16_to_fp32(x0->d)*y0->d); + vdotq_s32(vdupq_n_s32(0), v0_0hf, v1_0h))), GGML_FP16_TO_FP32(x0->d)*y0->d); sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32( vdotq_s32(vdupq_n_s32(0), v0_1lf, v1_1l), - vdotq_s32(vdupq_n_s32(0), v0_1hf, v1_1h))), ggml_fp16_to_fp32(x1->d)*y1->d); + vdotq_s32(vdupq_n_s32(0), v0_1hf, v1_1h))), GGML_FP16_TO_FP32(x1->d)*y1->d); #else const int16x8_t pl0l = vmull_s8(vget_low_s8 (v0_0lf), vget_low_s8 (v1_0l)); const int16x8_t pl0h = vmull_s8(vget_high_s8(v0_0lf), vget_high_s8(v1_0l)); @@ -3196,8 +3196,8 @@ void ggml_vec_dot_q5_1_q8_1(const int n, float * restrict s, const void * restri const int32x4_t pl1 = vaddq_s32(vpaddlq_s16(pl1l), vpaddlq_s16(pl1h)); const int32x4_t ph1 = vaddq_s32(vpaddlq_s16(ph1l), vpaddlq_s16(ph1h)); - sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(pl0, ph0)), ggml_fp16_to_fp32(x0->d)*y0->d); - sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(pl1, ph1)), ggml_fp16_to_fp32(x1->d)*y1->d); + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(pl0, ph0)), GGML_FP16_TO_FP32(x0->d)*y0->d); + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(pl1, ph1)), GGML_FP16_TO_FP32(x1->d)*y1->d); #endif } @@ -3215,7 +3215,7 @@ void ggml_vec_dot_q5_1_q8_1(const int n, float * restrict s, const void * restri const block_q5_1 * restrict x0 = &x[i]; const block_q8_1 * restrict y0 = &y[i]; - summs += ggml_fp16_to_fp32(x0->m) * y0->s; + summs += GGML_FP16_TO_FP32(x0->m) * y0->s; const v128_t m4b = wasm_i8x16_splat(0x0F); @@ -3262,7 +3262,7 @@ void ggml_vec_dot_q5_1_q8_1(const int n, float * restrict s, const void * restri wasm_i32x4_dot_i16x8(v0lfh, v1lh)), wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0hfl, v1hl), wasm_i32x4_dot_i16x8(v0hfh, v1hh)))), - wasm_f32x4_splat(ggml_fp16_to_fp32(x0->d) * y0->d))); + wasm_f32x4_splat(GGML_FP16_TO_FP32(x0->d) * y0->d))); } *s = wasm_f32x4_extract_lane(sumv, 0) + wasm_f32x4_extract_lane(sumv, 1) + @@ -3275,9 +3275,9 @@ void ggml_vec_dot_q5_1_q8_1(const int n, float * restrict s, const void * restri // Main loop for (int i = 0; i < nb; i++) { - const __m256 dx = _mm256_set1_ps(ggml_fp16_to_fp32(x[i].d)); + const __m256 dx = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d)); - summs += ggml_fp16_to_fp32(x[i].m) * y[i].s; + summs += GGML_FP16_TO_FP32(x[i].m) * y[i].s; __m256i bx = bytes_from_nibbles_32(x[i].qs); __m256i bxhi = bytes_from_bits_32(x[i].qh); @@ -3302,9 +3302,9 @@ void ggml_vec_dot_q5_1_q8_1(const int n, float * restrict s, const void * restri // Main loop for (int i = 0; i < nb; i++) { - const __m256 dx = _mm256_set1_ps(ggml_fp16_to_fp32(x[i].d)); + const __m256 dx = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d)); - summs += ggml_fp16_to_fp32(x[i].m) * y[i].s; + summs += GGML_FP16_TO_FP32(x[i].m) * y[i].s; __m256i bx = bytes_from_nibbles_32(x[i].qs); const __m256i bxhi = bytes_from_bits_32(x[i].qh); @@ -3385,7 +3385,7 @@ void ggml_vec_dot_q5_1_q8_1(const int n, float * restrict s, const void * restri int sumi = __riscv_vmv_x_s_i32m1_i32(vs2); - sumf += (ggml_fp16_to_fp32(x[i].d)*y[i].d)*sumi + ggml_fp16_to_fp32(x[i].m)*y[i].s; + sumf += (GGML_FP16_TO_FP32(x[i].d)*y[i].d)*sumi + GGML_FP16_TO_FP32(x[i].m)*y[i].s; } *s = sumf; @@ -3409,7 +3409,7 @@ void ggml_vec_dot_q5_1_q8_1(const int n, float * restrict s, const void * restri sumi += (x0 * y[i].qs[j]) + (x1 * y[i].qs[j + qk/2]); } - sumf += (ggml_fp16_to_fp32(x[i].d)*y[i].d)*sumi + ggml_fp16_to_fp32(x[i].m)*y[i].s; + sumf += (GGML_FP16_TO_FP32(x[i].d)*y[i].d)*sumi + GGML_FP16_TO_FP32(x[i].m)*y[i].s; } *s = sumf; @@ -3451,11 +3451,11 @@ void ggml_vec_dot_q8_0_q8_0(const int n, float * restrict s, const void * restri #if defined(__ARM_FEATURE_DOTPROD) sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32( vdotq_s32(vdupq_n_s32(0), x0_0, y0_0), - vdotq_s32(vdupq_n_s32(0), x0_1, y0_1))), ggml_fp16_to_fp32(x0->d)*ggml_fp16_to_fp32(y0->d)); + vdotq_s32(vdupq_n_s32(0), x0_1, y0_1))), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d)); sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32( vdotq_s32(vdupq_n_s32(0), x1_0, y1_0), - vdotq_s32(vdupq_n_s32(0), x1_1, y1_1))), ggml_fp16_to_fp32(x1->d)*ggml_fp16_to_fp32(y1->d)); + vdotq_s32(vdupq_n_s32(0), x1_1, y1_1))), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d)); #else const int16x8_t p0_0 = vmull_s8(vget_low_s8 (x0_0), vget_low_s8 (y0_0)); @@ -3473,8 +3473,8 @@ void ggml_vec_dot_q8_0_q8_0(const int n, float * restrict s, const void * restri const int32x4_t p2 = vaddq_s32(vpaddlq_s16(p1_0), vpaddlq_s16(p1_1)); const int32x4_t p3 = vaddq_s32(vpaddlq_s16(p1_2), vpaddlq_s16(p1_3)); - sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(p0, p1)), ggml_fp16_to_fp32(x0->d)*ggml_fp16_to_fp32(y0->d)); - sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(p2, p3)), ggml_fp16_to_fp32(x1->d)*ggml_fp16_to_fp32(y1->d)); + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(p0, p1)), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d)); + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(p2, p3)), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d)); #endif } @@ -3486,7 +3486,7 @@ void ggml_vec_dot_q8_0_q8_0(const int n, float * restrict s, const void * restri // Main loop for (int i = 0; i < nb; ++i) { // Compute combined scale for the block - const __m256 d = _mm256_set1_ps(ggml_fp16_to_fp32(x[i].d) * ggml_fp16_to_fp32(y[i].d)); + const __m256 d = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d)); __m256i bx = _mm256_loadu_si256((const __m256i *)x[i].qs); __m256i by = _mm256_loadu_si256((const __m256i *)y[i].qs); @@ -3517,7 +3517,7 @@ void ggml_vec_dot_q8_0_q8_0(const int n, float * restrict s, const void * restri int sumi = __riscv_vmv_x_s_i32m1_i32(v_sum); - sumf += sumi*(ggml_fp16_to_fp32(x[i].d)*ggml_fp16_to_fp32(y[i].d)); + sumf += sumi*(GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d)); } *s = sumf; @@ -3532,7 +3532,7 @@ void ggml_vec_dot_q8_0_q8_0(const int n, float * restrict s, const void * restri sumi += x[i].qs[j]*y[i].qs[j]; } - sumf += sumi*(ggml_fp16_to_fp32(x[i].d)*ggml_fp16_to_fp32(y[i].d)); + sumf += sumi*(GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d)); } *s = sumf; @@ -3562,8 +3562,8 @@ void ggml_vec_dot_q2_K_q8_K(const int n, float * restrict s, const void * restri for (int i = 0; i < nb; ++i) { - const float d = y[i].d * ggml_fp16_to_fp32(x[i].d); - const float dmin = -y[i].d * ggml_fp16_to_fp32(x[i].dmin); + const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); + const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin); const uint8_t * restrict q2 = x[i].qs; const int8_t * restrict q8 = y[i].qs; @@ -3641,8 +3641,8 @@ void ggml_vec_dot_q2_K_q8_K(const int n, float * restrict s, const void * restri for (int i = 0; i < nb; ++i) { - const float d = y[i].d * ggml_fp16_to_fp32(x[i].d); - const float dmin = -y[i].d * ggml_fp16_to_fp32(x[i].dmin); + const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); + const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin); const uint8_t * restrict q2 = x[i].qs; const int8_t * restrict q8 = y[i].qs; @@ -3708,8 +3708,8 @@ void ggml_vec_dot_q2_K_q8_K(const int n, float * restrict s, const void * restri for (int i = 0; i < nb; ++i) { - const float dall = y[i].d * ggml_fp16_to_fp32(x[i].d); - const float dmin = -y[i].d * ggml_fp16_to_fp32(x[i].dmin); + const float dall = y[i].d * GGML_FP16_TO_FP32(x[i].d); + const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin); const uint8_t * restrict q2 = x[i].qs; const int8_t * restrict q8 = y[i].qs; @@ -3816,8 +3816,8 @@ void ggml_vec_dot_q2_K_q8_K(const int n, float * restrict s, const void * restri const int8_t * q8 = y[i].qs; const uint8_t * sc = x[i].scales; - const float dall = y[i].d * ggml_fp16_to_fp32(x[i].d); - const float dmin = -y[i].d * ggml_fp16_to_fp32(x[i].dmin); + const float dall = y[i].d * GGML_FP16_TO_FP32(x[i].d); + const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin); size_t vl = 16; @@ -3903,8 +3903,8 @@ void ggml_vec_dot_q2_K_q8_K(const int n, float * restrict s, const void * restri summs += y[i].bsums[j] * (sc[j] >> 4); } - const float dall = y[i].d * ggml_fp16_to_fp32(x[i].d); - const float dmin = y[i].d * ggml_fp16_to_fp32(x[i].dmin); + const float dall = y[i].d * GGML_FP16_TO_FP32(x[i].d); + const float dmin = y[i].d * GGML_FP16_TO_FP32(x[i].dmin); int isum = 0; int is = 0; @@ -4021,8 +4021,8 @@ void ggml_vec_dot_q2_K_q8_K(const int n, float * restrict s, const void * restri for (int i = 0; i < nb; ++i) { - const float d = y[i].d * ggml_fp16_to_fp32(x[i].d); - const float dmin = -y[i].d * ggml_fp16_to_fp32(x[i].dmin); + const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); + const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin); const uint8_t * restrict q2 = x[i].qs; const int8_t * restrict q8 = y[i].qs; @@ -4073,8 +4073,8 @@ void ggml_vec_dot_q2_K_q8_K(const int n, float * restrict s, const void * restri for (int i = 0; i < nb; ++i) { - const float d = y[i].d * ggml_fp16_to_fp32(x[i].d); - const float dmin = -y[i].d * ggml_fp16_to_fp32(x[i].dmin); + const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); + const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin); const uint8_t * restrict q2 = x[i].qs; const int8_t * restrict q8 = y[i].qs; @@ -4188,8 +4188,8 @@ void ggml_vec_dot_q2_K_q8_K(const int n, float * restrict s, const void * restri summs += y[i].bsums[j] * (sc[j] >> 4); } - const float dall = y[i].d * ggml_fp16_to_fp32(x[i].d); - const float dmin = y[i].d * ggml_fp16_to_fp32(x[i].dmin); + const float dall = y[i].d * GGML_FP16_TO_FP32(x[i].d); + const float dmin = y[i].d * GGML_FP16_TO_FP32(x[i].dmin); isum[0] = isum[1] = isum[2] = isum[3] = 0; for (int l = 0; l < 16; ++l) { @@ -4242,7 +4242,7 @@ void ggml_vec_dot_q3_K_q8_K(const int n, float * restrict s, const void * restri for (int i = 0; i < nb; ++i) { - const float d = y[i].d * ggml_fp16_to_fp32(x[i].d); + const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); const uint8_t * restrict q3 = x[i].qs; const uint8_t * restrict qh = x[i].hmask; @@ -4350,7 +4350,7 @@ void ggml_vec_dot_q3_K_q8_K(const int n, float * restrict s, const void * restri for (int i = 0; i < nb; ++i) { - const float d = y[i].d * ggml_fp16_to_fp32(x[i].d); + const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); const uint8_t * restrict q3 = x[i].qs; const int8_t * restrict q8 = y[i].qs; @@ -4455,7 +4455,7 @@ void ggml_vec_dot_q3_K_q8_K(const int n, float * restrict s, const void * restri for (int i = 0; i < nb; ++i) { - const float d = y[i].d * ggml_fp16_to_fp32(x[i].d); + const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); const uint8_t * restrict q3 = x[i].qs; const int8_t * restrict q8 = y[i].qs; @@ -4676,7 +4676,7 @@ void ggml_vec_dot_q3_K_q8_K(const int n, float * restrict s, const void * restri } - const float d = ggml_fp16_to_fp32(x[i].d) * y[i].d; + const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; sumf += d*sum_t; @@ -4741,7 +4741,7 @@ void ggml_vec_dot_q3_K_q8_K(const int n, float * restrict s, const void * restri for (int l = 0; l < 8; ++l) aux32[l] += (scales[j] - 32) * aux16[l]; q8 += 8; a += 8; } - const float d = ggml_fp16_to_fp32(x[i].d) * y[i].d; + const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; for (int l = 0; l < 8; ++l) sums[l] += d * aux32[l]; } for (int l = 0; l < 8; ++l) sumf += sums[l]; @@ -4843,7 +4843,7 @@ void ggml_vec_dot_q3_K_q8_K(const int n, float * restrict s, const void * restri for (int i = 0; i < nb; ++i) { - const float d = y[i].d * ggml_fp16_to_fp32(x[i].d); + const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); const uint8_t * restrict q3 = x[i].qs; const int8_t * restrict q8 = y[i].qs; @@ -4914,7 +4914,7 @@ void ggml_vec_dot_q3_K_q8_K(const int n, float * restrict s, const void * restri for (int i = 0; i < nb; ++i) { - const float d = y[i].d * ggml_fp16_to_fp32(x[i].d); + const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); const uint8_t * restrict q3 = x[i].qs; const int8_t * restrict q8 = y[i].qs; @@ -5099,7 +5099,7 @@ void ggml_vec_dot_q3_K_q8_K(const int n, float * restrict s, const void * restri q8 += 8; a += 8; for (int l = 0; l < 8; ++l) aux32[l] += scales[j] * aux16[l]; } - const float d = ggml_fp16_to_fp32(x[i].d) * y[i].d; + const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; for (int l = 0; l < 8; ++l) sums[l] += d * aux32[l]; } for (int l = 0; l < 8; ++l) sumf += sums[l]; @@ -5139,8 +5139,8 @@ void ggml_vec_dot_q4_K_q8_K(const int n, float * restrict s, const void * restri for (int i = 0; i < nb; ++i) { - const float d = y[i].d * ggml_fp16_to_fp32(x[i].d); - const float dmin = y[i].d * ggml_fp16_to_fp32(x[i].dmin); + const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); + const float dmin = y[i].d * GGML_FP16_TO_FP32(x[i].dmin); const int16x8_t q8sums = vpaddq_s16(vld1q_s16(y[i].bsums), vld1q_s16(y[i].bsums + 8)); @@ -5222,8 +5222,8 @@ void ggml_vec_dot_q4_K_q8_K(const int n, float * restrict s, const void * restri for (int i = 0; i < nb; ++i) { - const float d = y[i].d * ggml_fp16_to_fp32(x[i].d); - const float dmin = -y[i].d * ggml_fp16_to_fp32(x[i].dmin); + const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); + const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin); memcpy(utmp, x[i].scales, 12); utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4); @@ -5288,8 +5288,8 @@ void ggml_vec_dot_q4_K_q8_K(const int n, float * restrict s, const void * restri for (int i = 0; i < nb; ++i) { - const float d = y[i].d * ggml_fp16_to_fp32(x[i].d); - const float dmin = -y[i].d * ggml_fp16_to_fp32(x[i].dmin); + const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); + const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin); const uint8_t * restrict q4 = x[i].qs; const int8_t * restrict q8 = y[i].qs; @@ -5371,8 +5371,8 @@ void ggml_vec_dot_q4_K_q8_K(const int n, float * restrict s, const void * restri size_t vl = 8; - const float d = y[i].d * ggml_fp16_to_fp32(x[i].d); - const float dmin = y[i].d * ggml_fp16_to_fp32(x[i].dmin); + const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); + const float dmin = y[i].d * GGML_FP16_TO_FP32(x[i].dmin); vint16mf2_t q8sums_0 = __riscv_vlse16_v_i16mf2(y[i].bsums, 4, vl); vint16mf2_t q8sums_1 = __riscv_vlse16_v_i16mf2(y[i].bsums+1, 4, vl); @@ -5482,9 +5482,9 @@ void ggml_vec_dot_q4_K_q8_K(const int n, float * restrict s, const void * restri for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l]; q8 += 8; a += 8; } - const float d = ggml_fp16_to_fp32(x[i].d) * y[i].d; + const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; for (int l = 0; l < 8; ++l) sums[l] += d * aux32[l]; - const float dmin = ggml_fp16_to_fp32(x[i].dmin) * y[i].d; + const float dmin = GGML_FP16_TO_FP32(x[i].dmin) * y[i].d; sumf -= dmin * sumi; } for (int l = 0; l < 8; ++l) sumf += sums[l]; @@ -5586,8 +5586,8 @@ void ggml_vec_dot_q4_K_q8_K(const int n, float * restrict s, const void * restri for (int i = 0; i < nb; ++i) { - const float d = ggml_fp16_to_fp32(x[i].d[0]) * y[i].d; - const float m = ggml_fp16_to_fp32(x[i].d[1]) * y[i].d; + const float d = GGML_FP16_TO_FP32(x[i].d[0]) * y[i].d; + const float m = GGML_FP16_TO_FP32(x[i].d[1]) * y[i].d; const __m256 vd = _mm256_set1_ps(d); const uint16_t * a = (const uint16_t *)x[i].scales; @@ -5632,8 +5632,8 @@ void ggml_vec_dot_q4_K_q8_K(const int n, float * restrict s, const void * restri for (int i = 0; i < nb; ++i) { - const float d = ggml_fp16_to_fp32(x[i].d[0]) * y[i].d; - const float m = ggml_fp16_to_fp32(x[i].d[1]) * y[i].d; + const float d = GGML_FP16_TO_FP32(x[i].d[0]) * y[i].d; + const float m = GGML_FP16_TO_FP32(x[i].d[1]) * y[i].d; const __m256 vd = _mm256_set1_ps(d); const uint16_t * a = (const uint16_t *)x[i].scales; @@ -5689,8 +5689,8 @@ void ggml_vec_dot_q4_K_q8_K(const int n, float * restrict s, const void * restri s16[0] = b[0] & 0x0f0f; s16[1] = (b[0] >> 4) & 0x0f0f; - sumf -= y[i].d * ggml_fp16_to_fp32(x[i].d[1]) * (scales[2] * (y[i].bsums[0] + y[i].bsums[1]) + scales[3] * (y[i].bsums[2] + y[i].bsums[3])); - const float d = y[i].d * ggml_fp16_to_fp32(x[i].d[0]); + sumf -= y[i].d * GGML_FP16_TO_FP32(x[i].d[1]) * (scales[2] * (y[i].bsums[0] + y[i].bsums[1]) + scales[3] * (y[i].bsums[2] + y[i].bsums[3])); + const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d[0]); size_t vl = 32; @@ -5739,9 +5739,9 @@ void ggml_vec_dot_q4_K_q8_K(const int n, float * restrict s, const void * restri s16[0] = b[0] & 0x0f0f; s16[1] = (b[0] >> 4) & 0x0f0f; - sumf -= y[i].d * ggml_fp16_to_fp32(x[i].d[1]) * (scales[2] * (y[i].bsums[0] + y[i].bsums[1]) + scales[3] * (y[i].bsums[2] + y[i].bsums[3])); + sumf -= y[i].d * GGML_FP16_TO_FP32(x[i].d[1]) * (scales[2] * (y[i].bsums[0] + y[i].bsums[1]) + scales[3] * (y[i].bsums[2] + y[i].bsums[3])); - const float d = y[i].d * ggml_fp16_to_fp32(x[i].d[0]); + const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d[0]); for (int j = 0; j < QK_K/32; ++j) { for (int l = 0; l < 16; ++l) aux16[l] = q8[l] * a[l]; @@ -5789,8 +5789,8 @@ void ggml_vec_dot_q5_K_q8_K(const int n, float * restrict s, const void * restri for (int i = 0; i < nb; ++i) { - const float d = y[i].d * ggml_fp16_to_fp32(x[i].d); - const float dmin = y[i].d * ggml_fp16_to_fp32(x[i].dmin); + const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); + const float dmin = y[i].d * GGML_FP16_TO_FP32(x[i].dmin); const int16x8_t q8sums = vpaddq_s16(vld1q_s16(y[i].bsums), vld1q_s16(y[i].bsums + 8)); @@ -5878,8 +5878,8 @@ void ggml_vec_dot_q5_K_q8_K(const int n, float * restrict s, const void * restri const int8_t * restrict q8 = y[i].qs; #if QK_K == 256 - const float d = y[i].d * ggml_fp16_to_fp32(x[i].d); - const float dmin = -y[i].d * ggml_fp16_to_fp32(x[i].dmin); + const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); + const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin); memcpy(utmp, x[i].scales, 12); utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4); @@ -5960,8 +5960,8 @@ void ggml_vec_dot_q5_K_q8_K(const int n, float * restrict s, const void * restri for (int i = 0; i < nb; ++i) { - const float d = y[i].d * ggml_fp16_to_fp32(x[i].d); - const float dmin = -y[i].d * ggml_fp16_to_fp32(x[i].dmin); + const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); + const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin); const uint8_t * restrict q5 = x[i].qs; const int8_t * restrict q8 = y[i].qs; @@ -6065,8 +6065,8 @@ void ggml_vec_dot_q5_K_q8_K(const int n, float * restrict s, const void * restri const uint8_t * restrict hm = x[i].qh; const int8_t * restrict q8 = y[i].qs; - const float d = ggml_fp16_to_fp32(x[i].d) * y[i].d; - const float dmin = ggml_fp16_to_fp32(x[i].dmin) * y[i].d; + const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; + const float dmin = GGML_FP16_TO_FP32(x[i].dmin) * y[i].d; vint16mf2_t q8sums_0 = __riscv_vlse16_v_i16mf2(y[i].bsums, 4, vl); vint16mf2_t q8sums_1 = __riscv_vlse16_v_i16mf2(y[i].bsums+1, 4, vl); @@ -6188,9 +6188,9 @@ void ggml_vec_dot_q5_K_q8_K(const int n, float * restrict s, const void * restri for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l]; q8 += 8; a += 8; } - const float d = ggml_fp16_to_fp32(x[i].d) * y[i].d; + const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; for (int l = 0; l < 8; ++l) sums[l] += d * aux32[l]; - const float dmin = ggml_fp16_to_fp32(x[i].dmin) * y[i].d; + const float dmin = GGML_FP16_TO_FP32(x[i].dmin) * y[i].d; sumf -= dmin * sumi; } for (int l = 0; l < 8; ++l) sumf += sums[l]; @@ -6288,7 +6288,7 @@ void ggml_vec_dot_q5_K_q8_K(const int n, float * restrict s, const void * restri const uint8_t * restrict q5 = x[i].qs; const int8_t * restrict q8 = y[i].qs; - const float d = y[i].d * ggml_fp16_to_fp32(x[i].d); + const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); const __m256i q5bits = _mm256_loadu_si256((const __m256i*)q5); @@ -6334,7 +6334,7 @@ void ggml_vec_dot_q5_K_q8_K(const int n, float * restrict s, const void * restri const uint8_t * restrict q5 = x[i].qs; const int8_t * restrict q8 = y[i].qs; - const float d = y[i].d * ggml_fp16_to_fp32(x[i].d); + const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); const __m256i q5bits = _mm256_loadu_si256((const __m256i*)q5); @@ -6471,7 +6471,7 @@ void ggml_vec_dot_q5_K_q8_K(const int n, float * restrict s, const void * restri for (int l = 0; l < 8; ++l) a[8*is + l] -= (hm[l] & m ? 0 : 16); } - const float d = y[i].d * ggml_fp16_to_fp32(x[i].d); + const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); const int8_t * restrict sc = x[i].scales; for (int j = 0; j < QK_K/16; ++j) { @@ -6514,7 +6514,7 @@ void ggml_vec_dot_q6_K_q8_K(const int n, float * restrict s, const void * restri for (int i = 0; i < nb; ++i) { - const float d_all = ggml_fp16_to_fp32(x[i].d); + const float d_all = GGML_FP16_TO_FP32(x[i].d); const uint8_t * restrict q6 = x[i].ql; const uint8_t * restrict qh = x[i].qh; @@ -6646,7 +6646,7 @@ void ggml_vec_dot_q6_K_q8_K(const int n, float * restrict s, const void * restri for (int i = 0; i < nb; ++i) { - const float d = y[i].d * ggml_fp16_to_fp32(x[i].d); + const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); const uint8_t * restrict q4 = x[i].ql; const uint8_t * restrict qh = x[i].qh; @@ -6726,7 +6726,7 @@ void ggml_vec_dot_q6_K_q8_K(const int n, float * restrict s, const void * restri for (int i = 0; i < nb; ++i) { - const float d = y[i].d * ggml_fp16_to_fp32(x[i].d); + const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); const uint8_t * restrict q4 = x[i].ql; const uint8_t * restrict qh = x[i].qh; @@ -6838,7 +6838,7 @@ void ggml_vec_dot_q6_K_q8_K(const int n, float * restrict s, const void * restri float sumf = 0; for (int i = 0; i < nb; ++i) { - const float d = ggml_fp16_to_fp32(x[i].d) * y[i].d; + const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; const uint8_t * restrict q6 = x[i].ql; const uint8_t * restrict qh = x[i].qh; @@ -6955,7 +6955,7 @@ void ggml_vec_dot_q6_K_q8_K(const int n, float * restrict s, const void * restri for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l]; q8 += 8; a += 8; } - const float d = ggml_fp16_to_fp32(x[i].d) * y[i].d; + const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; for (int l = 0; l < 8; ++l) sums[l] += d * aux32[l]; } for (int l = 0; l < 8; ++l) sumf += sums[l]; @@ -7053,7 +7053,7 @@ void ggml_vec_dot_q6_K_q8_K(const int n, float * restrict s, const void * restri for (int i = 0; i < nb; ++i) { - const float d = y[i].d * ggml_fp16_to_fp32(x[i].d); + const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); const uint8_t * restrict q4 = x[i].ql; const uint8_t * restrict qh = x[i].qh; @@ -7110,7 +7110,7 @@ void ggml_vec_dot_q6_K_q8_K(const int n, float * restrict s, const void * restri for (int i = 0; i < nb; ++i) { - const float d = y[i].d * ggml_fp16_to_fp32(x[i].d); + const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d); const uint8_t * restrict q4 = x[i].ql; const uint8_t * restrict qh = x[i].qh; @@ -7269,7 +7269,7 @@ void ggml_vec_dot_q6_K_q8_K(const int n, float * restrict s, const void * restri for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l]; q8 += 8; a += 8; } - const float d = ggml_fp16_to_fp32(x[i].d) * y[i].d; + const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d; for (int l = 0; l < 8; ++l) sums[l] += d * aux32[l]; } for (int l = 0; l < 8; ++l) sumf += sums[l]; diff --git a/ggml-quants.h b/ggml-quants.h index d88f99e331f1dd..70c12c27465e80 100644 --- a/ggml-quants.h +++ b/ggml-quants.h @@ -1,22 +1,12 @@ #pragma once -// This is a private API for quantization and dequantization -// Should not be used directly, use ggml.h instead +#include "ggml-impl.h" -#include "ggml.h" +// GGML internal header #include -#include #include -#ifndef static_assert -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201100L) -#define static_assert(cond, msg) _Static_assert(cond, msg) -#else -#define static_assert(cond, msg) struct global_scope_noop_trick -#endif -#endif - #define QK4_0 32 typedef struct { ggml_fp16_t d; // delta diff --git a/ggml.c b/ggml.c index 95f72c35e8f205..84407b1224226f 100644 --- a/ggml.c +++ b/ggml.c @@ -1,6 +1,6 @@ #define _CRT_SECURE_NO_DEPRECATE // Disables ridiculous "unsafe" warnigns on Windows -#include "ggml.h" +#include "ggml-impl.h" #include "ggml-quants.h" #if defined(_MSC_VER) || defined(__MINGW32__) @@ -27,18 +27,6 @@ #include #endif -// static_assert should be a #define, but if it's not, -// fall back to the _Static_assert C11 keyword. -// if C99 - static_assert is noop -// ref: https://stackoverflow.com/a/53923785/4039976 -#ifndef static_assert -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201100L) -#define static_assert(cond, msg) _Static_assert(cond, msg) -#else -#define static_assert(cond, msg) struct global_scope_noop_trick -#endif -#endif - #if defined(_MSC_VER) // disable "possible loss of data" to avoid hundreds of casts // we should just be careful :) @@ -106,23 +94,11 @@ typedef void * thread_ret_t; #include #endif + #ifdef GGML_USE_CPU_HBM #include #endif -// __FMA__ and __F16C__ are not defined in MSVC, however they are implied with AVX2/AVX512 -#if defined(_MSC_VER) && (defined(__AVX2__) || defined(__AVX512F__)) -#ifndef __FMA__ -#define __FMA__ -#endif -#ifndef __F16C__ -#define __F16C__ -#endif -#ifndef __SSE3__ -#define __SSE3__ -#endif -#endif - /*#define GGML_PERF*/ #define GGML_DEBUG 0 #define GGML_GELU_FP16 @@ -248,213 +224,27 @@ inline static void * ggml_aligned_malloc(size_t size) { #include "ggml-opencl.h" #endif -#undef MIN -#undef MAX -#define MIN(a, b) ((a) < (b) ? (a) : (b)) -#define MAX(a, b) ((a) > (b) ? (a) : (b)) - // floating point type used to accumulate sums typedef double ggml_float; -// 16-bit float -// on Arm, we use __fp16 -// on x86, we use uint16_t -#if defined(__ARM_NEON) && !defined(_MSC_VER) - -// if YCM cannot find , make a symbolic link to it, for example: -// -// $ ln -sfn /Library/Developer/CommandLineTools/usr/lib/clang/13.1.6/include/arm_neon.h ./src/ -// -#include - -#define GGML_COMPUTE_FP16_TO_FP32(x) ((float) (x)) -#define GGML_COMPUTE_FP32_TO_FP16(x) (x) - -#define GGML_FP16_TO_FP32(x) ((float) (x)) -#define GGML_FP32_TO_FP16(x) (x) - -#else - -#ifdef __wasm_simd128__ -#include -#else -#ifdef __POWER9_VECTOR__ -#include -#undef bool -#define bool _Bool -#else -#if defined(_MSC_VER) || defined(__MINGW32__) -#include -#else -#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) || defined(__SSSE3__) || defined(__SSE3__) -#if !defined(__riscv) -#include -#endif -#endif -#endif -#endif -#endif - -#ifdef __riscv_v_intrinsic -#include -#endif - -#ifdef __F16C__ - -#ifdef _MSC_VER -#define GGML_COMPUTE_FP16_TO_FP32(x) _mm_cvtss_f32(_mm_cvtph_ps(_mm_cvtsi32_si128(x))) -#define GGML_COMPUTE_FP32_TO_FP16(x) _mm_extract_epi16(_mm_cvtps_ph(_mm_set_ss(x), 0), 0) -#else -#define GGML_COMPUTE_FP16_TO_FP32(x) _cvtsh_ss(x) -#define GGML_COMPUTE_FP32_TO_FP16(x) _cvtss_sh(x, 0) -#endif - -#elif defined(__POWER9_VECTOR__) - -#define GGML_COMPUTE_FP16_TO_FP32(x) ggml_compute_fp16_to_fp32(x) -#define GGML_COMPUTE_FP32_TO_FP16(x) ggml_compute_fp32_to_fp16(x) -/* the inline asm below is about 12% faster than the lookup method */ -#define GGML_FP16_TO_FP32(x) GGML_COMPUTE_FP16_TO_FP32(x) -#define GGML_FP32_TO_FP16(x) GGML_COMPUTE_FP32_TO_FP16(x) - -static inline float ggml_compute_fp16_to_fp32(ggml_fp16_t h) { - register float f; - register double d; - __asm__( - "mtfprd %0,%2\n" - "xscvhpdp %0,%0\n" - "frsp %1,%0\n" : - /* temp */ "=d"(d), - /* out */ "=f"(f): - /* in */ "r"(h)); - return f; -} - -static inline ggml_fp16_t ggml_compute_fp32_to_fp16(float f) { - register double d; - register ggml_fp16_t r; - __asm__( /* xscvdphp can work on double or single precision */ - "xscvdphp %0,%2\n" - "mffprd %1,%0\n" : - /* temp */ "=d"(d), - /* out */ "=r"(r): - /* in */ "f"(f)); - return r; -} - -#else - -// FP16 <-> FP32 -// ref: https://github.com/Maratyszcza/FP16 - -static inline float fp32_from_bits(uint32_t w) { - union { - uint32_t as_bits; - float as_value; - } fp32; - fp32.as_bits = w; - return fp32.as_value; -} - -static inline uint32_t fp32_to_bits(float f) { - union { - float as_value; - uint32_t as_bits; - } fp32; - fp32.as_value = f; - return fp32.as_bits; -} - -static inline float ggml_compute_fp16_to_fp32(ggml_fp16_t h) { - const uint32_t w = (uint32_t) h << 16; - const uint32_t sign = w & UINT32_C(0x80000000); - const uint32_t two_w = w + w; - - const uint32_t exp_offset = UINT32_C(0xE0) << 23; -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) || defined(__GNUC__) && !defined(__STRICT_ANSI__) - const float exp_scale = 0x1.0p-112f; -#else - const float exp_scale = fp32_from_bits(UINT32_C(0x7800000)); -#endif - const float normalized_value = fp32_from_bits((two_w >> 4) + exp_offset) * exp_scale; - - const uint32_t magic_mask = UINT32_C(126) << 23; - const float magic_bias = 0.5f; - const float denormalized_value = fp32_from_bits((two_w >> 17) | magic_mask) - magic_bias; - - const uint32_t denormalized_cutoff = UINT32_C(1) << 27; - const uint32_t result = sign | - (two_w < denormalized_cutoff ? fp32_to_bits(denormalized_value) : fp32_to_bits(normalized_value)); - return fp32_from_bits(result); -} - -static inline ggml_fp16_t ggml_compute_fp32_to_fp16(float f) { -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) || defined(__GNUC__) && !defined(__STRICT_ANSI__) - const float scale_to_inf = 0x1.0p+112f; - const float scale_to_zero = 0x1.0p-110f; -#else - const float scale_to_inf = fp32_from_bits(UINT32_C(0x77800000)); - const float scale_to_zero = fp32_from_bits(UINT32_C(0x08800000)); -#endif - float base = (fabsf(f) * scale_to_inf) * scale_to_zero; - - const uint32_t w = fp32_to_bits(f); - const uint32_t shl1_w = w + w; - const uint32_t sign = w & UINT32_C(0x80000000); - uint32_t bias = shl1_w & UINT32_C(0xFF000000); - if (bias < UINT32_C(0x71000000)) { - bias = UINT32_C(0x71000000); - } - - base = fp32_from_bits((bias >> 1) + UINT32_C(0x07800000)) + base; - const uint32_t bits = fp32_to_bits(base); - const uint32_t exp_bits = (bits >> 13) & UINT32_C(0x00007C00); - const uint32_t mantissa_bits = bits & UINT32_C(0x00000FFF); - const uint32_t nonsign = exp_bits + mantissa_bits; - return (sign >> 16) | (shl1_w > UINT32_C(0xFF000000) ? UINT16_C(0x7E00) : nonsign); -} - -#define GGML_COMPUTE_FP16_TO_FP32(x) ggml_compute_fp16_to_fp32(x) -#define GGML_COMPUTE_FP32_TO_FP16(x) ggml_compute_fp32_to_fp16(x) - -#endif // __F16C__ - -#endif // __ARM_NEON - // // global data // // precomputed gelu table for f16 (128 KB) -static ggml_fp16_t table_gelu_f16[1 << 16]; +static ggml_fp16_t ggml_table_gelu_f16[1 << 16]; // precomputed quick gelu table for f16 (128 KB) -static ggml_fp16_t table_gelu_quick_f16[1 << 16]; +static ggml_fp16_t ggml_table_gelu_quick_f16[1 << 16]; // precomputed silu table for f16 (128 KB) -static ggml_fp16_t table_silu_f16[1 << 16]; +static ggml_fp16_t ggml_table_silu_f16[1 << 16]; // precomputed exp table for f16 (128 KB) -static ggml_fp16_t table_exp_f16[1 << 16]; - -// precomputed f32 table for f16 (256 KB) -static float table_f32_f16[1 << 16]; +static ggml_fp16_t ggml_table_exp_f16[1 << 16]; -// On ARM NEON, it's quicker to directly convert x -> x instead of calling into ggml_lookup_fp16_to_fp32, -// so we define GGML_FP16_TO_FP32 and GGML_FP32_TO_FP16 elsewhere for NEON. -// This is also true for POWER9. -#if !defined(GGML_FP16_TO_FP32) || !defined(GGML_FP32_TO_FP16) - -inline static float ggml_lookup_fp16_to_fp32(ggml_fp16_t f) { - uint16_t s; - memcpy(&s, &f, sizeof(uint16_t)); - return table_f32_f16[s]; -} - -#define GGML_FP16_TO_FP32(x) ggml_lookup_fp16_to_fp32(x) -#define GGML_FP32_TO_FP16(x) GGML_COMPUTE_FP32_TO_FP16(x) - -#endif +// precomputed f32 table for f16 (256 KB) (ggml-impl.h) +float ggml_table_f32_f16[1 << 16]; // note: do not use these inside ggml.c // these are meant to be used via the ggml.h API @@ -632,6 +422,28 @@ static const ggml_type_traits_t type_traits[GGML_TYPE_COUNT] = { .vec_dot = ggml_vec_dot_q4_1_q8_1, .vec_dot_type = GGML_TYPE_Q8_1, }, + [4] = { // GGML_TYPE_Q4_2 + .type_name = "DEPRECATED", + .blck_size = 0, + .type_size = 0, + .is_quantized = false, + .to_float = NULL, + .from_float = NULL, + .from_float_reference = NULL, + .vec_dot = NULL, + .vec_dot_type = GGML_TYPE_COUNT, + }, + [5] = { // GGML_TYPE_Q4_3 + .type_name = "DEPRECATED", + .blck_size = 0, + .type_size = 0, + .is_quantized = false, + .to_float = NULL, + .from_float = NULL, + .from_float_reference = NULL, + .vec_dot = NULL, + .vec_dot_type = GGML_TYPE_COUNT, + }, [GGML_TYPE_Q5_0] = { .type_name = "q5_0", .blck_size = QK5_0, @@ -1551,7 +1363,7 @@ inline static float ggml_gelu_f32(float x) { inline static void ggml_vec_gelu_f16(const int n, ggml_fp16_t * y, const ggml_fp16_t * x) { const uint16_t * i16 = (const uint16_t *) x; for (int i = 0; i < n; ++i) { - y[i] = table_gelu_f16[i16[i]]; + y[i] = ggml_table_gelu_f16[i16[i]]; } } @@ -1561,7 +1373,7 @@ inline static void ggml_vec_gelu_f32(const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) { ggml_fp16_t fp16 = GGML_FP32_TO_FP16(x[i]); memcpy(&t, &fp16, sizeof(uint16_t)); - y[i] = GGML_FP16_TO_FP32(table_gelu_f16[t]); + y[i] = GGML_FP16_TO_FP32(ggml_table_gelu_f16[t]); } } #else @@ -1579,7 +1391,7 @@ inline static float ggml_gelu_quick_f32(float x) { //inline static void ggml_vec_gelu_quick_f16(const int n, ggml_fp16_t * y, const ggml_fp16_t * x) { // const uint16_t * i16 = (const uint16_t *) x; // for (int i = 0; i < n; ++i) { -// y[i] = table_gelu_quick_f16[i16[i]]; +// y[i] = ggml_table_gelu_quick_f16[i16[i]]; // } //} @@ -1589,7 +1401,7 @@ inline static void ggml_vec_gelu_quick_f32(const int n, float * y, const float * for (int i = 0; i < n; ++i) { ggml_fp16_t fp16 = GGML_FP32_TO_FP16(x[i]); memcpy(&t, &fp16, sizeof(uint16_t)); - y[i] = GGML_FP16_TO_FP32(table_gelu_quick_f16[t]); + y[i] = GGML_FP16_TO_FP32(ggml_table_gelu_quick_f16[t]); } } #else @@ -1608,7 +1420,7 @@ inline static float ggml_silu_f32(float x) { //inline static void ggml_vec_silu_f16(const int n, ggml_fp16_t * y, const ggml_fp16_t * x) { // const uint16_t * i16 = (const uint16_t *) x; // for (int i = 0; i < n; ++i) { -// y[i] = table_silu_f16[i16[i]]; +// y[i] = ggml_table_silu_f16[i16[i]]; // } //} @@ -1618,7 +1430,7 @@ inline static void ggml_vec_silu_f32(const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) { ggml_fp16_t fp16 = GGML_FP32_TO_FP16(x[i]); memcpy(&t, &fp16, sizeof(uint16_t)); - y[i] = GGML_FP16_TO_FP32(table_silu_f16[t]); + y[i] = GGML_FP16_TO_FP32(ggml_table_silu_f16[t]); } } #else @@ -2334,11 +2146,11 @@ struct ggml_context * ggml_init(struct ggml_init_params params) { for (int i = 0; i < (1 << 16); ++i) { uint16_t ui = i; memcpy(&ii, &ui, sizeof(ii)); - const float f = table_f32_f16[i] = GGML_COMPUTE_FP16_TO_FP32(ii); - table_gelu_f16[i] = GGML_FP32_TO_FP16(ggml_gelu_f32(f)); - table_gelu_quick_f16[i] = GGML_FP32_TO_FP16(ggml_gelu_quick_f32(f)); - table_silu_f16[i] = GGML_FP32_TO_FP16(ggml_silu_f32(f)); - table_exp_f16[i] = GGML_FP32_TO_FP16(expf(f)); + const float f = ggml_table_f32_f16[i] = GGML_COMPUTE_FP16_TO_FP32(ii); + ggml_table_gelu_f16[i] = GGML_FP32_TO_FP16(ggml_gelu_f32(f)); + ggml_table_gelu_quick_f16[i] = GGML_FP32_TO_FP16(ggml_gelu_quick_f32(f)); + ggml_table_silu_f16[i] = GGML_FP32_TO_FP16(ggml_silu_f32(f)); + ggml_table_exp_f16[i] = GGML_FP32_TO_FP16(expf(f)); } const uint64_t t_end = ggml_time_us(); UNUSED(t_end); @@ -10701,7 +10513,7 @@ static void ggml_compute_forward_soft_max_f32( // const float val = (sp[i] == -INFINITY) ? 0.0 : exp(sp[i] - max); ggml_fp16_t s = GGML_FP32_TO_FP16(sp[i] - max); memcpy(&scvt, &s, sizeof(scvt)); - const float val = GGML_FP16_TO_FP32(table_exp_f16[scvt]); + const float val = GGML_FP16_TO_FP32(ggml_table_exp_f16[scvt]); sum += (ggml_float)val; dp[i] = val; } @@ -12990,7 +12802,7 @@ static void ggml_compute_forward_flash_attn_f32( #else ggml_fp16_t s = GGML_FP32_TO_FP16(SS[j] - max); memcpy(&scvt[j], &s, sizeof(uint16_t)); - const float val = GGML_FP16_TO_FP32(table_exp_f16[scvt[j]]); + const float val = GGML_FP16_TO_FP32(ggml_table_exp_f16[scvt[j]]); #endif sump[j] += (ggml_float)val; SS[j] = val; @@ -13192,7 +13004,7 @@ static void ggml_compute_forward_flash_attn_f16( } else { ggml_fp16_t s = GGML_FP32_TO_FP16(SS[j] - max); memcpy(&scvt[j], &s, sizeof(uint16_t)); - const float val = GGML_FP16_TO_FP32(table_exp_f16[scvt[j]]); + const float val = GGML_FP16_TO_FP32(ggml_table_exp_f16[scvt[j]]); sump[j] += (ggml_float)val; SS[j] = val; } @@ -13643,7 +13455,7 @@ static void ggml_compute_forward_flash_attn_back_f32( #else ggml_fp16_t s = GGML_FP32_TO_FP16(SR[j] - max); memcpy(&scvt[j], &s, sizeof(uint16_t)); - const float val = GGML_FP16_TO_FP32(table_exp_f16[scvt[j]]); + const float val = GGML_FP16_TO_FP32(ggml_table_exp_f16[scvt[j]]); #endif sump[j] += (ggml_float)val; SW[j] = val; @@ -14393,7 +14205,7 @@ static void ggml_compute_forward_cross_entropy_loss_f32( #else ggml_fp16_t s = GGML_FP32_TO_FP16(s0[i] - max); memcpy(&scvt, &s, sizeof(scvt)); - const float val = GGML_FP16_TO_FP32(table_exp_f16[scvt]); + const float val = GGML_FP16_TO_FP32(ggml_table_exp_f16[scvt]); #endif sum += (ggml_float)val; st[i] = val; @@ -14507,7 +14319,7 @@ static void ggml_compute_forward_cross_entropy_loss_back_f32( #else ggml_fp16_t s = GGML_FP32_TO_FP16(s0[i] - max); memcpy(&scvt, &s, sizeof(scvt)); - const float val = GGML_FP16_TO_FP32(table_exp_f16[scvt]); + const float val = GGML_FP16_TO_FP32(ggml_table_exp_f16[scvt]); #endif sum += (ggml_float)val; ds0[i] = val; diff --git a/llama.cpp b/llama.cpp index a4340d5277b09c..e599917a81eb1d 100644 --- a/llama.cpp +++ b/llama.cpp @@ -1467,7 +1467,7 @@ static int32_t llama_kv_cache_cell_max(const struct llama_kv_cache & cache) { } static void llama_kv_cache_clear(struct llama_kv_cache & cache) { - for (int32_t i = 0; i < cache.size; ++i) { + for (int32_t i = 0; i < (int32_t) cache.size; ++i) { cache.cells[i].pos = -1; cache.cells[i].seq_id.clear(); } diff --git a/tests/test-double-float.cpp b/tests/test-double-float.cpp index afd7bf77fcb552..753dae911b0cb3 100644 --- a/tests/test-double-float.cpp +++ b/tests/test-double-float.cpp @@ -4,7 +4,7 @@ #undef NDEBUG #include -#if !defined(__riscv) && !defined(__s390__) +#if !defined(__riscv) && !defined(__s390__) && !defined(__ARM_NEON) #include #endif #include diff --git a/tests/test-quantize-fns.cpp b/tests/test-quantize-fns.cpp index 884af40548fb79..a2459a2867c5c0 100644 --- a/tests/test-quantize-fns.cpp +++ b/tests/test-quantize-fns.cpp @@ -129,6 +129,13 @@ int main(int argc, char * argv[]) { ggml_type type = (ggml_type) i; ggml_type_traits_t qfns = ggml_internal_get_type_traits(type); + // deprecated - skip + if (qfns.blck_size == 0) { + continue; + } + + printf("Testing %s\n", ggml_type_name((ggml_type) i)); + if (qfns.from_float && qfns.to_float) { const float total_error = total_quantization_error(qfns, test_size, test_data.data()); const float max_quantization_error = From 07178c98e1b61a5e2af39d347add12e7eb9e08e1 Mon Sep 17 00:00:00 2001 From: Tungsten842 <886724vf@anonaddy.me> Date: Tue, 31 Oct 2023 18:24:03 +0100 Subject: [PATCH 33/79] flake.nix: fix for rocm 5.7 (#3853) --- flake.lock | 12 ++++++------ flake.nix | 10 ++++++---- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/flake.lock b/flake.lock index 070f0e1613fc30..0455f65617a2dc 100644 --- a/flake.lock +++ b/flake.lock @@ -5,11 +5,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1692799911, - "narHash": "sha256-3eihraek4qL744EvQXsK1Ha6C3CR7nnT8X2qWap4RNk=", + "lastModified": 1694529238, + "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", "owner": "numtide", "repo": "flake-utils", - "rev": "f9e7cf818399d17d347f847525c5a5a8032e4e44", + "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", "type": "github" }, "original": { @@ -20,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1698134075, - "narHash": "sha256-foCD+nuKzfh49bIoiCBur4+Fx1nozo+4C/6k8BYk4sg=", + "lastModified": 1698318101, + "narHash": "sha256-gUihHt3yPD7bVqg+k/UVHgngyaJ3DMEBchbymBMvK1E=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "8efd5d1e283604f75a808a20e6cde0ef313d07d4", + "rev": "63678e9f3d3afecfeafa0acead6239cdb447574c", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index fa34394b2f0593..4cf28d5c11c0fd 100644 --- a/flake.nix +++ b/flake.nix @@ -11,8 +11,7 @@ meta.mainProgram = "llama"; inherit (pkgs.stdenv) isAarch32 isAarch64 isDarwin; buildInputs = with pkgs; [ openmpi ]; - osSpecific = with pkgs; buildInputs ++ - ( + osSpecific = with pkgs; buildInputs ++ ( if isAarch64 && isDarwin then with pkgs.darwin.apple_sdk_11_0.frameworks; [ Accelerate @@ -96,12 +95,15 @@ }; packages.rocm = pkgs.stdenv.mkDerivation { inherit name src meta postPatch nativeBuildInputs postInstall; - buildInputs = with pkgs; buildInputs ++ [ hip hipblas rocblas ]; + buildInputs = with pkgs.rocmPackages; buildInputs ++ [ clr hipblas rocblas ]; cmakeFlags = cmakeFlags ++ [ "-DLLAMA_HIPBLAS=1" "-DCMAKE_C_COMPILER=hipcc" "-DCMAKE_CXX_COMPILER=hipcc" - "-DCMAKE_POSITION_INDEPENDENT_CODE=ON" + # Build all targets supported by rocBLAS. When updating search for TARGET_LIST_ROCM + # in github.com/ROCmSoftwarePlatform/rocBLAS/blob/develop/CMakeLists.txt + # and select the line that matches the current nixpkgs version of rocBLAS. + "-DAMDGPU_TARGETS=gfx803;gfx900;gfx906:xnack-;gfx908:xnack-;gfx90a:xnack+;gfx90a:xnack-;gfx940;gfx941;gfx942;gfx1010;gfx1012;gfx1030;gfx1100;gfx1101;gfx1102" ]; }; apps.llama-server = { From 238657db2364cfb728c694470a4a81702afea760 Mon Sep 17 00:00:00 2001 From: kalomaze <66376113+kalomaze@users.noreply.github.com> Date: Tue, 31 Oct 2023 14:44:49 -0500 Subject: [PATCH 34/79] samplers : Min-P sampler implementation [alternative to Top P/Top K] (#3841) * Introduce the new Min-P sampler by @kalomaze The Min-P sampling method was designed as an alternative to Top-P, and aims to ensure a balance of quality and variety. The parameter *p* represents the minimum probability for a token to be considered, relative to the probability of the most likely token. * Min-P enabled and set to 0.05 default --------- Co-authored-by: Georgi Gerganov Co-authored-by: cebtenzzre --- common/common.cpp | 8 ++++++++ common/sampling.cpp | 6 ++++-- common/sampling.h | 1 + examples/main/README.md | 8 ++++++++ llama.cpp | 26 ++++++++++++++++++++++++++ llama.h | 7 +++++++ 6 files changed, 54 insertions(+), 2 deletions(-) diff --git a/common/common.cpp b/common/common.cpp index c187128d6ede3d..dc4865e80b1544 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -218,6 +218,12 @@ bool gpt_params_parse(int argc, char ** argv, gpt_params & params) { break; } sparams.top_p = std::stof(argv[i]); + } else if (arg == "--min-p") { + if (++i >= argc) { + invalid_param = true; + break; + } + sparams.min_p = std::stof(argv[i]); } else if (arg == "--temp") { if (++i >= argc) { invalid_param = true; @@ -679,6 +685,7 @@ void gpt_print_usage(int /*argc*/, char ** argv, const gpt_params & params) { printf(" -b N, --batch-size N batch size for prompt processing (default: %d)\n", params.n_batch); printf(" --top-k N top-k sampling (default: %d, 0 = disabled)\n", sparams.top_k); printf(" --top-p N top-p sampling (default: %.1f, 1.0 = disabled)\n", (double)sparams.top_p); + printf(" --min-p N min-p sampling (default: %.1f, 0.0 = disabled)\n", (double)sparams.min_p); printf(" --tfs N tail free sampling, parameter z (default: %.1f, 1.0 = disabled)\n", (double)sparams.tfs_z); printf(" --typical N locally typical sampling, parameter p (default: %.1f, 1.0 = disabled)\n", (double)sparams.typical_p); printf(" --repeat-last-n N last n tokens to consider for penalize (default: %d, 0 = disabled, -1 = ctx_size)\n", sparams.penalty_last_n); @@ -1275,6 +1282,7 @@ void dump_non_result_info_yaml(FILE * stream, const gpt_params & params, const l fprintf(stream, "threads: %d # default: %d\n", params.n_threads, std::thread::hardware_concurrency()); fprintf(stream, "top_k: %d # default: 40\n", sparams.top_k); fprintf(stream, "top_p: %f # default: 0.95\n", sparams.top_p); + fprintf(stream, "min_p: %f # default: 0.0\n", sparams.min_p); fprintf(stream, "typical_p: %f # default: 1.0\n", sparams.typical_p); fprintf(stream, "verbose_prompt: %s # default: false\n", params.verbose_prompt ? "true" : "false"); } diff --git a/common/sampling.cpp b/common/sampling.cpp index c4996c9857d8ac..673d67a6d5380e 100644 --- a/common/sampling.cpp +++ b/common/sampling.cpp @@ -89,10 +89,10 @@ std::string llama_sampling_print(const llama_sampling_params & params) { snprintf(result, sizeof(result), "\trepeat_last_n = %d, repeat_penalty = %.3f, frequency_penalty = %.3f, presence_penalty = %.3f\n" - "\ttop_k = %d, tfs_z = %.3f, top_p = %.3f, typical_p = %.3f, temp = %.3f\n" + "\ttop_k = %d, tfs_z = %.3f, top_p = %.3f, min_p = %.3f, typical_p = %.3f, temp = %.3f\n" "\tmirostat = %d, mirostat_lr = %.3f, mirostat_ent = %.3f", params.penalty_last_n, params.penalty_repeat, params.penalty_freq, params.penalty_present, - params.top_k, params.tfs_z, params.top_p, params.typical_p, params.temp, + params.top_k, params.tfs_z, params.top_p, params.min_p, params.typical_p, params.temp, params.mirostat, params.mirostat_eta, params.mirostat_tau); return std::string(result); @@ -110,6 +110,7 @@ llama_token llama_sampling_sample( const float temp = params.temp; const int32_t top_k = params.top_k <= 0 ? n_vocab : params.top_k; const float top_p = params.top_p; + const float min_p = params.min_p; const float tfs_z = params.tfs_z; const float typical_p = params.typical_p; const int32_t penalty_last_n = params.penalty_last_n < 0 ? params.n_prev : params.penalty_last_n; @@ -190,6 +191,7 @@ llama_token llama_sampling_sample( llama_sample_tail_free(ctx_main, &cur_p, tfs_z, min_keep); llama_sample_typical (ctx_main, &cur_p, typical_p, min_keep); llama_sample_top_p (ctx_main, &cur_p, top_p, min_keep); + llama_sample_min_p (ctx_main, &cur_p, min_p, min_keep); llama_sample_temp (ctx_main, &cur_p, temp); id = llama_sample_token(ctx_main, &cur_p); diff --git a/common/sampling.h b/common/sampling.h index 62ea6d4cfb7e5e..7c9b8dcf23bcbf 100644 --- a/common/sampling.h +++ b/common/sampling.h @@ -14,6 +14,7 @@ typedef struct llama_sampling_params { int32_t n_probs = 0; // if greater than 0, output the probabilities of top n_probs tokens. int32_t top_k = 40; // <= 0 to use vocab size float top_p = 0.95f; // 1.0 = disabled + float min_p = 0.05f; // 0.0 = disabled float tfs_z = 1.00f; // 1.0 = disabled float typical_p = 1.00f; // 1.0 = disabled float temp = 0.80f; // 1.0 = disabled diff --git a/examples/main/README.md b/examples/main/README.md index a9561c383c0cba..a3428b48763d0b 100644 --- a/examples/main/README.md +++ b/examples/main/README.md @@ -208,6 +208,14 @@ Top-p sampling, also known as nucleus sampling, is another text generation metho Example usage: `--top-p 0.95` +### Min P Sampling + +- `--min-p N`: Sets a minimum base probability threshold for token selection (default: 0.05). + +The Min-P sampling method was designed as an alternative to Top-P, and aims to ensure a balance of quality and variety. The parameter *p* represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with *p*=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. + +Example usage: `--min-p 0.05` + ### Tail Free Sampling (TFS) - `--tfs N`: Enable tail free sampling with parameter z (default: 1.0, 1.0 = disabled). diff --git a/llama.cpp b/llama.cpp index e599917a81eb1d..7ee5892989f0a9 100644 --- a/llama.cpp +++ b/llama.cpp @@ -7368,6 +7368,32 @@ void llama_sample_top_p(struct llama_context * ctx, llama_token_data_array * can } } +void llama_sample_min_p(struct llama_context * ctx, llama_token_data_array * candidates, float p, size_t min_keep) { + if (p <= 0.0f || !candidates->size) { + return; + } + + llama_sample_softmax(ctx, candidates); + + const int64_t t_start_sample_us = ggml_time_us(); + + float scale = candidates->data[0].p; // scale by max prob + size_t i = 1; // first token always matches + + for (; i < candidates->size; ++i) { + if (candidates->data[i].p < p * scale && i >= min_keep) { + break; // prob too small + } + } + + // Resize the output vector to keep only the matching tokens + candidates->size = i; + + if (ctx) { + ctx->t_sample_us += ggml_time_us() - t_start_sample_us; + } +} + void llama_sample_tail_free(struct llama_context * ctx, llama_token_data_array * candidates, float z, size_t min_keep) { if (z >= 1.0f || candidates->size <= 2) { return; diff --git a/llama.h b/llama.h index d727dbd9fd915d..75fe391ef2e733 100644 --- a/llama.h +++ b/llama.h @@ -598,6 +598,13 @@ extern "C" { float p, size_t min_keep); + /// @details Minimum P sampling as described in https://github.com/ggerganov/llama.cpp/pull/3841 + LLAMA_API void llama_sample_min_p( + struct llama_context * ctx, + llama_token_data_array * candidates, + float p, + size_t min_keep); + /// @details Tail Free Sampling described in https://www.trentonbricken.com/Tail-Free-Sampling/. LLAMA_API void llama_sample_tail_free( struct llama_context * ctx, From 71e3718abdb2771b50c9606d3a7569623a0b0afe Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Wed, 1 Nov 2023 08:04:02 +0200 Subject: [PATCH 35/79] llama : refactor graph build code (#3837) * llama : factor out ggml-alloc from graph graph build functions ggml-ci * metal : disable kernel load log * llama : factor out tensor offloading outside the build call (wip) ggml-ci * llama : offload rest of the models ggml-ci * llama : update offload log messages to print node index * llama : comments * llama : support offloading result_norm + comments * llama : factor graph input into a function * llama : do tensor offload only with CUDA * llama : fix res_norm offloading * llama : try to optimize offloading code * llama : fix non-CUDA build * llama : try to fix build * llama : move refact in correct place + optimize graph input * llama : refactor tensor offloading as callback * llama : add layer index to all tensor names * llama : add functional header * llama : comment ggml-ci * llama : remove obsolete map for layer counting * llama : add llm_build helper functions (#3848) * llama : add llm_build_norm helper function ggml-ci * llama : add llm_build_ffn helper function (#3849) ggml-ci * llama : add llm_build_k_shift helper ggml-ci * llama : fix offloading after recent changes * llama : add llm_build_kv_store helper ggml-ci * llama : remove obsolete offload names * llama : fix llm_build_k_shift to use n_head_kv instead of n_head * llama : simplify falcon Q, K, V computation * llama : remove obsolete comments in build graphs * llama : add llm_build_kqv helper ggml-ci * llama : minor * llama : add LLAMA_OFFLOAD_DEBUG + fix starcoder offloading * llama : fix input allocation logic * llama : update offload functions for KQ tensors * llama : normalize tensor names ggml-ci * llama : enable warning about not offloaded tensors * llama : remove extra ; + deduplicate gate_b logic * llama : add llm_build_inp_embd helper --- ggml-metal.m | 11 +- ggml.h | 2 +- llama.cpp | 3741 ++++++++++++++++++++------------------------------ 3 files changed, 1520 insertions(+), 2234 deletions(-) diff --git a/ggml-metal.m b/ggml-metal.m index 2380c431001408..bc881395a7aadc 100644 --- a/ggml-metal.m +++ b/ggml-metal.m @@ -238,14 +238,17 @@ static void ggml_metal_log(enum ggml_log_level level, const char* format, ...){ // load kernels { NSError * error = nil; -#define GGML_METAL_ADD_KERNEL(name) \ - ctx->function_##name = [ctx->library newFunctionWithName:@"kernel_"#name]; \ - ctx->pipeline_##name = [ctx->device newComputePipelineStateWithFunction:ctx->function_##name error:&error]; \ + + /* GGML_METAL_LOG_INFO("%s: loaded %-32s %16p | th_max = %4d | th_width = %4d\n", __func__, "kernel_"#name, (void *) ctx->pipeline_##name, \ (int) ctx->pipeline_##name.maxTotalThreadsPerThreadgroup, \ (int) ctx->pipeline_##name.threadExecutionWidth); \ + */ +#define GGML_METAL_ADD_KERNEL(name) \ + ctx->function_##name = [ctx->library newFunctionWithName:@"kernel_"#name]; \ + ctx->pipeline_##name = [ctx->device newComputePipelineStateWithFunction:ctx->function_##name error:&error]; \ if (error) { \ - GGML_METAL_LOG_ERROR("%s: error: load pipeline error: %s\n", __func__, [[error description] UTF8String]); \ + GGML_METAL_LOG_ERROR("%s: error: load pipeline error: %s\n", __func__, [[error description] UTF8String]); \ return NULL; \ } diff --git a/ggml.h b/ggml.h index 8c954904e5a007..9d16c5a72fda0e 100644 --- a/ggml.h +++ b/ggml.h @@ -709,7 +709,7 @@ extern "C" { // Context tensor enumeration and lookup GGML_API struct ggml_tensor * ggml_get_first_tensor(struct ggml_context * ctx); GGML_API struct ggml_tensor * ggml_get_next_tensor (struct ggml_context * ctx, struct ggml_tensor * tensor); - GGML_API struct ggml_tensor * ggml_get_tensor(struct ggml_context * ctx, const char * name); + GGML_API struct ggml_tensor * ggml_get_tensor (struct ggml_context * ctx, const char * name); GGML_API struct ggml_tensor * ggml_set_zero(struct ggml_tensor * tensor); GGML_API struct ggml_tensor * ggml_set_i32 (struct ggml_tensor * tensor, int32_t value); diff --git a/llama.cpp b/llama.cpp index 7ee5892989f0a9..ead1d421d243dc 100644 --- a/llama.cpp +++ b/llama.cpp @@ -60,7 +60,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -69,11 +71,10 @@ #include #include #include +#include #include #include #include -#include -#include #if defined(_MSC_VER) #pragma warning(disable: 4244 4267) // possible loss of data @@ -969,7 +970,7 @@ struct llama_mlock { typedef void (*offload_func_t)(struct ggml_tensor * tensor); -static void llama_nop(struct ggml_tensor * tensor) { // don't offload by default +static void ggml_offload_nop(struct ggml_tensor * tensor) { (void) tensor; } @@ -1113,13 +1114,13 @@ struct llama_layer { struct ggml_tensor * ffn_norm_b; // ff - struct ggml_tensor * w1; // ffn_gate - struct ggml_tensor * w2; // ffn_down - struct ggml_tensor * w3; // ffn_up + struct ggml_tensor * ffn_gate; // w1 + struct ggml_tensor * ffn_down; // w2 + struct ggml_tensor * ffn_up; // w3 // ff bias - struct ggml_tensor * b2; // ffn_down - struct ggml_tensor * b3; // ffn_up + struct ggml_tensor * ffn_down_b; // b2 + struct ggml_tensor * ffn_up_b; // b3 }; struct llama_kv_cell { @@ -1225,8 +1226,8 @@ struct llama_model { llama_hparams hparams = {}; llama_vocab vocab; - struct ggml_tensor * tok_embeddings; - struct ggml_tensor * pos_embeddings; + struct ggml_tensor * tok_embd; + struct ggml_tensor * pos_embd; struct ggml_tensor * tok_norm; struct ggml_tensor * tok_norm_b; @@ -2482,7 +2483,7 @@ static void llm_load_tensors( case LLM_ARCH_LLAMA: case LLM_ARCH_REFACT: { - model.tok_embeddings = ml.create_tensor(ctx, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, GGML_BACKEND_CPU); + model.tok_embd = ml.create_tensor(ctx, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, GGML_BACKEND_CPU); // output { @@ -2536,21 +2537,21 @@ static void llm_load_tensors( layer.ffn_norm = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, backend); - layer.w1 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, backend_split); - layer.w2 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, backend_split); - layer.w3 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, backend_split); + layer.ffn_gate = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, backend_split); + layer.ffn_down = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, backend_split); + layer.ffn_up = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, backend_split); if (backend == GGML_BACKEND_GPU) { vram_weights += - ggml_nbytes(layer.attn_norm) + ggml_nbytes(layer.wq) + ggml_nbytes(layer.wk) + - ggml_nbytes(layer.wv) + ggml_nbytes(layer.wo) + ggml_nbytes(layer.ffn_norm) + - ggml_nbytes(layer.w1) + ggml_nbytes(layer.w2) + ggml_nbytes(layer.w3); + ggml_nbytes(layer.attn_norm) + ggml_nbytes(layer.wq) + ggml_nbytes(layer.wk) + + ggml_nbytes(layer.wv) + ggml_nbytes(layer.wo) + ggml_nbytes(layer.ffn_norm) + + ggml_nbytes(layer.ffn_gate) + ggml_nbytes(layer.ffn_down) + ggml_nbytes(layer.ffn_up); } } } break; case LLM_ARCH_BAICHUAN: { - model.tok_embeddings = ml.create_tensor(ctx, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, GGML_BACKEND_CPU); + model.tok_embd = ml.create_tensor(ctx, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, GGML_BACKEND_CPU); { ggml_backend_type backend_norm; ggml_backend_type backend_output; @@ -2602,15 +2603,15 @@ static void llm_load_tensors( layer.ffn_norm = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, backend); - layer.w1 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, backend_split); - layer.w2 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, backend_split); - layer.w3 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, backend_split); + layer.ffn_gate = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, backend_split); + layer.ffn_down = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, backend_split); + layer.ffn_up = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, backend_split); if (backend == GGML_BACKEND_GPU) { vram_weights += - ggml_nbytes(layer.attn_norm) + ggml_nbytes(layer.wq) + ggml_nbytes(layer.wk) + - ggml_nbytes(layer.wv) + ggml_nbytes(layer.wo) + ggml_nbytes(layer.ffn_norm) + - ggml_nbytes(layer.w1) + ggml_nbytes(layer.w2) + ggml_nbytes(layer.w3); + ggml_nbytes(layer.attn_norm) + ggml_nbytes(layer.wq) + ggml_nbytes(layer.wk) + + ggml_nbytes(layer.wv) + ggml_nbytes(layer.wo) + ggml_nbytes(layer.ffn_norm) + + ggml_nbytes(layer.ffn_gate) + ggml_nbytes(layer.ffn_down) + ggml_nbytes(layer.ffn_up); } } } break; @@ -2618,7 +2619,7 @@ static void llm_load_tensors( { // TODO: CPU-only for now - model.tok_embeddings = ml.create_tensor(ctx, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, GGML_BACKEND_CPU); + model.tok_embd = ml.create_tensor(ctx, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, GGML_BACKEND_CPU); // output { @@ -2681,21 +2682,21 @@ static void llm_load_tensors( layer.wqkv = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}, backend_split); layer.wo = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, backend_split); - layer.w2 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, backend_split); - layer.w3 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, backend_split); + layer.ffn_down = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, backend_split); + layer.ffn_up = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, backend_split); if (backend == GGML_BACKEND_GPU) { vram_weights += ggml_nbytes(layer.attn_norm) + ggml_nbytes(layer.attn_norm_b) + ggml_nbytes(layer.wqkv) + ggml_nbytes(layer.wo) + - ggml_nbytes(layer.w2) + ggml_nbytes(layer.w3); + ggml_nbytes(layer.ffn_down) + ggml_nbytes(layer.ffn_up); } } } break; case LLM_ARCH_STARCODER: { - model.tok_embeddings = ml.create_tensor(ctx, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, GGML_BACKEND_CPU); - model.pos_embeddings = ml.create_tensor(ctx, tn(LLM_TENSOR_POS_EMBD, "weight"), {n_embd, hparams.n_ctx_train}, GGML_BACKEND_CPU); + model.tok_embd = ml.create_tensor(ctx, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, GGML_BACKEND_CPU); + model.pos_embd = ml.create_tensor(ctx, tn(LLM_TENSOR_POS_EMBD, "weight"), {n_embd, hparams.n_ctx_train}, GGML_BACKEND_CPU); // output { @@ -2754,11 +2755,11 @@ static void llm_load_tensors( layer.ffn_norm = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, backend); layer.ffn_norm_b = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}, backend); - layer.w2 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, backend_split); - layer.b2 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, backend); + layer.ffn_down = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, backend_split); + layer.ffn_down_b = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, backend); - layer.w3 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, backend_split); - layer.b3 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, backend); + layer.ffn_up = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, backend_split); + layer.ffn_up_b = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, backend); if (backend == GGML_BACKEND_GPU) { vram_weights += @@ -2766,14 +2767,14 @@ static void llm_load_tensors( ggml_nbytes(layer.wqkv) + ggml_nbytes(layer.bqkv) + ggml_nbytes(layer.wo) + ggml_nbytes(layer.bo) + ggml_nbytes(layer.ffn_norm) + ggml_nbytes(layer.ffn_norm_b) + - ggml_nbytes(layer.w2) + ggml_nbytes(layer.b2) + - ggml_nbytes(layer.w3) + ggml_nbytes(layer.b3); + ggml_nbytes(layer.ffn_down) + ggml_nbytes(layer.ffn_down_b) + + ggml_nbytes(layer.ffn_up) + ggml_nbytes(layer.ffn_up_b); } } } break; case LLM_ARCH_PERSIMMON: { - model.tok_embeddings = ml.create_tensor(ctx, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, GGML_BACKEND_CPU); + model.tok_embd = ml.create_tensor(ctx, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, GGML_BACKEND_CPU); { ggml_backend_type backend_norm; @@ -2814,31 +2815,31 @@ static void llm_load_tensors( const ggml_backend_type backend = int(i) < i_gpu_start ? GGML_BACKEND_CPU : LLAMA_BACKEND_OFFLOAD; const ggml_backend_type backend_split = int(i) < i_gpu_start ? GGML_BACKEND_CPU : LLAMA_BACKEND_OFFLOAD_SPLIT; auto & layer = model.layers[i]; - layer.attn_norm = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, backend); - layer.attn_norm_b = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}, backend); - layer.wqkv = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}, backend_split); - layer.bqkv = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd + 2*n_embd_gqa}, backend_split); - layer.wo = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, backend_split); - layer.bo = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, backend_split); - layer.w2 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, backend_split); - layer.b2 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, backend_split); - layer.w3 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, backend_split); - layer.b3 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, backend_split); - layer.ffn_norm = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, backend); - layer.ffn_norm_b = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}, backend); + layer.attn_norm = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, backend); + layer.attn_norm_b = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}, backend); + layer.wqkv = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}, backend_split); + layer.bqkv = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd + 2*n_embd_gqa}, backend_split); + layer.wo = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, backend_split); + layer.bo = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, backend_split); + layer.ffn_down = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, backend_split); + layer.ffn_down_b = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, backend_split); + layer.ffn_up = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, backend_split); + layer.ffn_up_b = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, backend_split); + layer.ffn_norm = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, backend); + layer.ffn_norm_b = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}, backend); layer.attn_q_norm = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_Q_NORM, "weight", i), {64}, backend); - layer.attn_q_norm_b = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_Q_NORM, "bias", i), {64}, backend); + layer.attn_q_norm_b = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_Q_NORM, "bias", i), {64}, backend); layer.attn_k_norm = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_K_NORM, "weight", i), {64}, backend); - layer.attn_k_norm_b = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_K_NORM, "bias", i), {64}, backend); + layer.attn_k_norm_b = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_K_NORM, "bias", i), {64}, backend); } } break; case LLM_ARCH_BLOOM: { // TODO: CPU-only for now - model.tok_embeddings = ml.create_tensor(ctx, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, GGML_BACKEND_CPU); - model.tok_norm = ml.create_tensor(ctx, tn(LLM_TENSOR_TOKEN_EMBD_NORM, "weight"), {n_embd}, GGML_BACKEND_CPU); - model.tok_norm_b = ml.create_tensor(ctx, tn(LLM_TENSOR_TOKEN_EMBD_NORM, "bias"), {n_embd}, GGML_BACKEND_CPU); + model.tok_embd = ml.create_tensor(ctx, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, GGML_BACKEND_CPU); + model.tok_norm = ml.create_tensor(ctx, tn(LLM_TENSOR_TOKEN_EMBD_NORM, "weight"), {n_embd}, GGML_BACKEND_CPU); + model.tok_norm_b = ml.create_tensor(ctx, tn(LLM_TENSOR_TOKEN_EMBD_NORM, "bias"), {n_embd}, GGML_BACKEND_CPU); // output { @@ -2897,11 +2898,11 @@ static void llm_load_tensors( layer.ffn_norm = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, backend); layer.ffn_norm_b = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}, backend); - layer.w2 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, backend_split); - layer.b2 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, backend_split); + layer.ffn_down = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, backend_split); + layer.ffn_down_b = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, backend_split); - layer.w3 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, backend_split); - layer.b3 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, backend_split); + layer.ffn_up = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, backend_split); + layer.ffn_up_b = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, backend_split); if (backend == GGML_BACKEND_GPU) { vram_weights += @@ -2909,14 +2910,14 @@ static void llm_load_tensors( ggml_nbytes(layer.wqkv) + ggml_nbytes(layer.bqkv) + ggml_nbytes(layer.wo) + ggml_nbytes(layer.bo) + ggml_nbytes(layer.ffn_norm) + ggml_nbytes(layer.ffn_norm_b) + - ggml_nbytes(layer.w3) + ggml_nbytes(layer.b3) + - ggml_nbytes(layer.w2) + ggml_nbytes(layer.b2); + ggml_nbytes(layer.ffn_up) + ggml_nbytes(layer.ffn_up_b) + + ggml_nbytes(layer.ffn_down) + ggml_nbytes(layer.ffn_down_b); } } } break; case LLM_ARCH_MPT: { - model.tok_embeddings = ml.create_tensor(ctx, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, GGML_BACKEND_CPU); + model.tok_embd = ml.create_tensor(ctx, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, GGML_BACKEND_CPU); // output { @@ -2967,8 +2968,8 @@ static void llm_load_tensors( layer.ffn_norm = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, backend); - layer.w2 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, backend_split); - layer.w3 = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, backend_split); + layer.ffn_down = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "weight", i), { n_ff, n_embd}, backend_split); + layer.ffn_up = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, backend_split); if (backend == GGML_BACKEND_GPU) { vram_weights += @@ -2976,8 +2977,8 @@ static void llm_load_tensors( ggml_nbytes(layer.wqkv) + ggml_nbytes(layer.wo) + ggml_nbytes(layer.ffn_norm) + - ggml_nbytes(layer.w2) + - ggml_nbytes(layer.w3); + ggml_nbytes(layer.ffn_down) + + ggml_nbytes(layer.ffn_up); } } } break; @@ -3007,10 +3008,10 @@ static void llm_load_tensors( #ifdef GGML_USE_CUBLAS const int max_backend_supported_layers = hparams.n_layer + 3; - const int max_offloadable_layers = hparams.n_layer + 3; -#elif defined(GGML_USE_CLBLAST) + const int max_offloadable_layers = hparams.n_layer + 3; +#elif GGML_USE_CLBLAST const int max_backend_supported_layers = hparams.n_layer + 1; - const int max_offloadable_layers = hparams.n_layer + 1; + const int max_offloadable_layers = hparams.n_layer + 1; #endif // GGML_USE_CUBLAS LLAMA_LOG_INFO("%s: offloaded %d/%d layers to GPU\n", __func__, std::min(n_gpu_layers, max_offloadable_layers), max_backend_supported_layers); @@ -3089,9 +3090,359 @@ static bool llama_model_load( return true; } +using llm_build_cb = std::function; + +enum llm_rope_type { + LLM_ROPE, + LLM_ROPE_NEOX, + LLM_ROPE_GLM, +}; + +static struct ggml_tensor * llm_build_inp_embd( + struct ggml_context * ctx, + const llama_batch & batch, + struct ggml_tensor * tok_embd, + int64_t n_embd, + int32_t n_tokens, + const llm_build_cb & cb) { + struct ggml_tensor * inpL; + + if (batch.token) { + struct ggml_tensor * inp_tokens = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, n_tokens); + cb(inp_tokens, "inp_tokens", -1); + + inpL = ggml_get_rows(ctx, tok_embd, inp_tokens); + } else { +#ifdef GGML_USE_MPI + GGML_ASSERT(false && "not implemented"); +#endif + + inpL = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, n_embd, n_tokens); + } + + return inpL; +} + +// Persimmon: n_rot = n_embd_head/2 +// Other: n_rot = n_embd_head +static void llm_build_k_shift( + const llama_context & lctx, + struct ggml_context * ctx, + struct ggml_cgraph * graph, + int64_t n_rot, + llm_rope_type type, + const llm_build_cb & cb) { + const auto & model = lctx.model; + const auto & kv_self = lctx.kv_self; + const auto & cparams = lctx.cparams; + + const auto & hparams = model.hparams; + + const int64_t n_layer = hparams.n_layer; + const int64_t n_head_kv = hparams.n_head_kv; + const int64_t n_embd_gqa = hparams.n_embd_gqa(); + const int64_t n_embd_head = hparams.n_embd_head(); + + const int64_t n_ctx = lctx.cparams.n_ctx; + + const float freq_base = cparams.rope_freq_base; + const float freq_scale = cparams.rope_freq_scale; + + GGML_ASSERT(n_embd_head % n_rot == 0); + + struct ggml_tensor * K_shift = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, n_ctx); + cb(K_shift, "K_shift", -1); + + int rope_type = 0; + + switch (type) { + case LLM_ROPE: rope_type = 0; break; + case LLM_ROPE_NEOX: rope_type = 2; break; + case LLM_ROPE_GLM: rope_type = 4; break; + } + + for (int il = 0; il < n_layer; ++il) { + struct ggml_tensor * tmp = + // we rotate only the first n_rot dimensions + ggml_rope_custom_inplace(ctx, + ggml_view_3d(ctx, kv_self.k, + n_rot, n_head_kv, n_ctx, + ggml_element_size(kv_self.k)*n_embd_head, + ggml_element_size(kv_self.k)*n_embd_gqa, + ggml_element_size(kv_self.k)*n_embd_gqa*n_ctx*il), + K_shift, n_rot, rope_type, 0, freq_base, freq_scale); + cb(tmp, "K_shifted", il); + ggml_build_forward_expand(graph, tmp); + } +} + +static void llm_build_kv_store( + const llama_context & lctx, + struct ggml_context * ctx, + struct ggml_cgraph * graph, + struct ggml_tensor * k_cur, + struct ggml_tensor * v_cur, + int32_t n_tokens, + int32_t kv_head, + const llm_build_cb & cb, + int64_t il) { + const auto & model = lctx.model; + const auto & kv_self = lctx.kv_self; + const auto & cparams = lctx.cparams; + + const auto & hparams = model.hparams; + + const int64_t n_ctx = cparams.n_ctx; + const int64_t n_embd_gqa = hparams.n_embd_gqa(); + + // compute the transposed [n_tokens, n_embd] V matrix + struct ggml_tensor * v_cur_t = ggml_transpose(ctx, ggml_reshape_2d(ctx, v_cur, n_embd_gqa, n_tokens)); + //struct ggml_tensor * v_cur_t = ggml_transpose(ctx, v_cur); // TODO: reshape above is likely not needed + cb(v_cur_t, "v_cur_t", il); + + struct ggml_tensor * k_cache_view = ggml_view_1d(ctx, kv_self.k, n_tokens*n_embd_gqa, + (ggml_element_size(kv_self.k)*n_embd_gqa)*(il*n_ctx + kv_head)); + cb(k_cache_view, "k_cache_view", il); + + struct ggml_tensor * v_cache_view = ggml_view_2d(ctx, kv_self.v, n_tokens, n_embd_gqa, + ( n_ctx)*ggml_element_size(kv_self.v), + (il*n_ctx)*ggml_element_size(kv_self.v)*n_embd_gqa + kv_head*ggml_element_size(kv_self.v)); + cb(v_cache_view, "v_cache_view", il); + + // important: storing RoPE-ed version of K in the KV cache! + ggml_build_forward_expand(graph, ggml_cpy(ctx, k_cur, k_cache_view)); + ggml_build_forward_expand(graph, ggml_cpy(ctx, v_cur_t, v_cache_view)); +} + +enum llm_norm_type { + LLM_NORM, + LLM_NORM_RMS, +}; + +static struct ggml_tensor * llm_build_norm( + struct ggml_context * ctx, + struct ggml_tensor * cur, + struct ggml_tensor * mw, + struct ggml_tensor * mb, + llm_norm_type type, + float eps, + const llm_build_cb & cb, + int il) { + switch (type) { + case LLM_NORM: cur = ggml_norm (ctx, cur, eps); break; + case LLM_NORM_RMS: cur = ggml_rms_norm(ctx, cur, eps); break; + } + + if (mw || mb) { + cb(cur, "norm", il); + } + + if (mw) { + cur = ggml_mul(ctx, cur, mw); + if (mb) { + cb(cur, "norm_w", il); + } + } + + if (mb) { + cur = ggml_add(ctx, cur, mb); + } + + return cur; +} + +enum llm_ffn_op_type { + LLM_FFN_SILU, + LLM_FFN_GELU, + LLM_FFN_RELU, + LLM_FFN_RELU_SQR, +}; + +enum llm_ffn_gate_type { + LLM_FFN_SEQ, + LLM_FFN_PAR, // ffn_gate is parallel to ffn_up +}; + +static struct ggml_tensor * llm_build_ffn( + struct ggml_context * ctx, + struct ggml_tensor * cur, + struct ggml_tensor * up, + struct ggml_tensor * up_b, + struct ggml_tensor * gate, + struct ggml_tensor * gate_b, + struct ggml_tensor * down, + struct ggml_tensor * down_b, + llm_ffn_op_type type_op, + llm_ffn_gate_type type_gate, + const llm_build_cb & cb, + int il) { + struct ggml_tensor * tmp = ggml_mul_mat(ctx, up, cur); + cb(tmp, "ffn_up", il); + + if (up_b) { + tmp = ggml_add(ctx, tmp, up_b); + cb(tmp, "ffn_up_b", il); + } + + if (gate) { + switch (type_gate) { + case LLM_FFN_SEQ: + { + cur = ggml_mul_mat(ctx, gate, tmp); + cb(cur, "ffn_gate", il); + } break; + case LLM_FFN_PAR: + { + cur = ggml_mul_mat(ctx, gate, cur); + cb(cur, "ffn_gate", il); + } break; + } + + if (gate_b) { + cur = ggml_add(ctx, cur, gate_b); + cb(cur, "ffn_gate_b", il); + } + } else { + cur = tmp; + } + + switch (type_op) { + case LLM_FFN_SILU: + { + cur = ggml_silu(ctx, cur); + cb(cur, "ffn_silu", il); + } break; + case LLM_FFN_GELU: + { + cur = ggml_gelu(ctx, cur); + cb(cur, "ffn_gelu", il); + } break; + case LLM_FFN_RELU: + { + cur = ggml_relu(ctx, cur); + cb(cur, "ffn_relu", il); + } break; + case LLM_FFN_RELU_SQR: + { + cur = ggml_relu(ctx, cur); + cb(cur, "ffn_relu", il); + + cur = ggml_sqr(ctx, cur); + cb(cur, "ffn_sqr(relu)", il); + } break; + } + + if (type_gate == LLM_FFN_PAR) { + cur = ggml_mul(ctx, cur, tmp); + cb(cur, "ffn_gate_par", il); + } + + cur = ggml_mul_mat(ctx, down, cur); + if (down_b) { + cb(cur, "ffn_down", il); + } + + if (down_b) { + cur = ggml_add(ctx, cur, down_b); + } + + return cur; +} + +// if max_alibi_bias > 0 then apply ALiBi +static struct ggml_tensor * llm_build_kqv( + const llama_context & lctx, + struct ggml_context * ctx, + struct ggml_tensor * cur, + struct ggml_tensor * wo, + struct ggml_tensor * wo_b, + struct ggml_tensor * q_cur, + struct ggml_tensor * kq_scale, + struct ggml_tensor * kq_mask, + int32_t n_tokens, + int32_t n_kv, + float alibi_bias_max, + const llm_build_cb & cb, + int il) { + const auto & model = lctx.model; + const auto & kv_self = lctx.kv_self; + const auto & cparams = lctx.cparams; + + const auto & hparams = model.hparams; + + const int64_t n_ctx = cparams.n_ctx; + const int64_t n_embd = hparams.n_embd; + const int64_t n_head = hparams.n_head; + const int64_t n_head_kv = hparams.n_head_kv; + const int64_t n_embd_head = hparams.n_embd_head(); + const int64_t n_embd_gqa = hparams.n_embd_gqa(); + + struct ggml_tensor * q = ggml_permute(ctx, q_cur, 0, 2, 1, 3); + cb(q, "q", il); + + struct ggml_tensor * k = + ggml_view_3d(ctx, kv_self.k, + n_embd_head, n_kv, n_head_kv, + ggml_element_size(kv_self.k)*n_embd_gqa, + ggml_element_size(kv_self.k)*n_embd_head, + ggml_element_size(kv_self.k)*n_embd_gqa*n_ctx*il); + cb(k, "k", il); + + struct ggml_tensor * kq = ggml_mul_mat(ctx, k, q); + cb(kq, "kq", il); + + kq = ggml_scale(ctx, kq, kq_scale); + cb(kq, "kq_scaled", il); + + if (alibi_bias_max > 0.0f) { + // TODO: n_head or n_head_kv + // TODO: K-shift is likely not working + // TODO: change to ggml_add + kq = ggml_alibi(ctx, kq, /*n_past*/ 0, n_head, alibi_bias_max); + cb(kq, "kq_scaled_alibi", il); + } + + kq = ggml_add(ctx, kq, kq_mask); + cb(kq, "kq_masked", il); + + kq = ggml_soft_max(ctx, kq); + cb(kq, "kq_soft_max", il); + + // split cached v into n_head heads + struct ggml_tensor * v = + ggml_view_3d(ctx, kv_self.v, + n_kv, n_embd_head, n_head_kv, + ggml_element_size(kv_self.v)*n_ctx, + ggml_element_size(kv_self.v)*n_ctx*n_embd_head, + ggml_element_size(kv_self.v)*n_ctx*n_embd_gqa*il); + cb(v, "v", il); + + struct ggml_tensor * kqv = ggml_mul_mat(ctx, v, kq); + cb(kqv, "kqv", il); + + struct ggml_tensor * kqv_merged = ggml_permute(ctx, kqv, 0, 2, 1, 3); + cb(kqv_merged, "kqv_merged", il); + + cur = ggml_cont_2d(ctx, kqv_merged, n_embd, n_tokens); + cb(cur, "kqv_merged_cont", il); + + cur = ggml_mul_mat(ctx, wo, cur); + if (wo_b) { + cb(cur, "kqv_wo", il); + } + + if (wo_b) { + cur = ggml_add(ctx, cur, wo_b); + } + + return cur; +} + static struct ggml_cgraph * llm_build_llama( - llama_context & lctx, - const llama_batch & batch) { + llama_context & lctx, + const llama_batch & batch, + const llm_build_cb & cb, + bool worst_case) { const auto & model = lctx.model; const auto & hparams = model.hparams; const auto & cparams = lctx.cparams; @@ -3106,7 +3457,6 @@ static struct ggml_cgraph * llm_build_llama( const int64_t n_head = hparams.n_head; const int64_t n_head_kv = hparams.n_head_kv; const int64_t n_embd_head = hparams.n_embd_head(); - const int64_t n_embd_gqa = hparams.n_embd_gqa(); GGML_ASSERT(n_embd_head == hparams.n_rot); @@ -3114,13 +3464,11 @@ static struct ggml_cgraph * llm_build_llama( const float freq_scale = cparams.rope_freq_scale; const float norm_rms_eps = hparams.f_norm_rms_eps; - const int n_gpu_layers = model.n_gpu_layers; - const int32_t n_tokens = batch.n_tokens; - const int32_t n_kv = ggml_allocr_is_measure(lctx.alloc) ? n_ctx : kv_self.n; - const int32_t kv_head = ggml_allocr_is_measure(lctx.alloc) ? n_ctx - n_tokens : kv_self.head; + const int32_t n_kv = worst_case ? n_ctx : kv_self.n; + const int32_t kv_head = worst_case ? n_ctx - n_tokens : kv_self.head; - const bool do_rope_shift = ggml_allocr_is_measure(lctx.alloc) || kv_self.has_shift; + const bool do_rope_shift = worst_case || kv_self.has_shift; //printf("n_kv = %d\n", n_kv); @@ -3139,314 +3487,81 @@ static struct ggml_cgraph * llm_build_llama( struct ggml_tensor * cur; struct ggml_tensor * inpL; - if (batch.token) { - struct ggml_tensor * inp_tokens = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); - - ggml_allocr_alloc(lctx.alloc, inp_tokens); - if (!ggml_allocr_is_measure(lctx.alloc)) { - memcpy(inp_tokens->data, batch.token, n_tokens*ggml_element_size(inp_tokens)); - } - ggml_set_name(inp_tokens, "inp_tokens"); - - inpL = ggml_get_rows(ctx0, model.tok_embeddings, inp_tokens); - } else { -#ifdef GGML_USE_MPI - GGML_ASSERT(false && "not implemented"); -#endif - - inpL = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_embd, n_tokens); - - ggml_allocr_alloc(lctx.alloc, inpL); - if (!ggml_allocr_is_measure(lctx.alloc)) { - memcpy(inpL->data, batch.embd, n_tokens * n_embd * ggml_element_size(inpL)); - } - } - - const int i_gpu_start = n_layer - n_gpu_layers; - (void) i_gpu_start; - - // offload functions set the tensor output backend to GPU - // tensors are GPU-accelerated if any input or the output has been offloaded - offload_func_t offload_func_nr = llama_nop; // nr = non-repeating - offload_func_t offload_func_kq = llama_nop; - offload_func_t offload_func_v = llama_nop; + inpL = llm_build_inp_embd(ctx0, batch, model.tok_embd, n_embd, n_tokens, cb); + cb(inpL, "inp_embd", -1); -#ifdef GGML_USE_CUBLAS - if (n_gpu_layers > n_layer) { - offload_func_nr = ggml_cuda_assign_buffers_no_alloc; - } - if (n_gpu_layers > n_layer + 1) { - offload_func_v = ggml_cuda_assign_buffers_no_alloc; - } - if (n_gpu_layers > n_layer + 2) { - offload_func_kq = ggml_cuda_assign_buffers_no_alloc; - } -#endif // GGML_USE_CUBLAS + // inp_pos - contains the positions + struct ggml_tensor * inp_pos = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); + cb(inp_pos, "inp_pos", -1); // KQ_scale struct ggml_tensor * KQ_scale = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); - ggml_set_name(KQ_scale, "1/sqrt(n_embd_head)"); - ggml_allocr_alloc(lctx.alloc, KQ_scale); - if (!ggml_allocr_is_measure(lctx.alloc)) { - ggml_set_f32(KQ_scale, 1.0f/sqrtf(float(n_embd_head))); - } + cb(KQ_scale, "KQ_scale", -1); // KQ_mask (mask for 1 head, it will be broadcasted to all heads) struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); - offload_func_kq(KQ_mask); - ggml_set_name(KQ_mask, "KQ_mask"); - ggml_allocr_alloc(lctx.alloc, KQ_mask); - if (!ggml_allocr_is_measure(lctx.alloc)) { - float * data = (float *) KQ_mask->data; - memset(data, 0, ggml_nbytes(KQ_mask)); - - for (int h = 0; h < 1; ++h) { - for (int j = 0; j < n_tokens; ++j) { - const llama_pos pos = batch.pos[j]; - const llama_seq_id seq_id = batch.seq_id[j][0]; - - for (int i = 0; i < n_kv; ++i) { - if (!kv_self.cells[i].has_seq_id(seq_id) || kv_self.cells[i].pos > pos) { - data[h*(n_kv*n_tokens) + j*n_kv + i] = -INFINITY; - } - } - } - } - } - - // KQ_pos - contains the positions - struct ggml_tensor * KQ_pos = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); - offload_func_kq(KQ_pos); - ggml_set_name(KQ_pos, "KQ_pos"); - ggml_allocr_alloc(lctx.alloc, KQ_pos); - if (!ggml_allocr_is_measure(lctx.alloc)) { - int * data = (int *) KQ_pos->data; - for (int i = 0; i < n_tokens; ++i) { - data[i] = batch.pos[i]; - } - } + cb(KQ_mask, "KQ_mask", -1); // shift the entire K-cache if needed if (do_rope_shift) { - struct ggml_tensor * K_shift = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_ctx); - offload_func_kq(K_shift); - ggml_set_name(K_shift, "K_shift"); - ggml_allocr_alloc(lctx.alloc, K_shift); - if (!ggml_allocr_is_measure(lctx.alloc)) { - int * data = (int *) K_shift->data; - for (int i = 0; i < n_ctx; ++i) { - data[i] = kv_self.cells[i].delta; - } - } - - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * tmp = - ggml_rope_custom_inplace(ctx0, - ggml_view_3d(ctx0, kv_self.k, - n_embd_head, n_head_kv, n_ctx, - ggml_element_size(kv_self.k)*n_embd_head, - ggml_element_size(kv_self.k)*n_embd_gqa, - ggml_element_size(kv_self.k)*n_embd_gqa*n_ctx*il), - K_shift, n_embd_head, 0, 0, freq_base, freq_scale); - offload_func_kq(tmp); - ggml_build_forward_expand(gf, tmp); - } + llm_build_k_shift(lctx, ctx0, gf, n_embd_head, LLM_ROPE, cb); } for (int il = 0; il < n_layer; ++il) { - ggml_format_name(inpL, "layer_inp_%d", il); - - offload_func_t offload_func = llama_nop; - -#ifdef GGML_USE_CUBLAS - if (il >= i_gpu_start) { - offload_func = ggml_cuda_assign_buffers_no_alloc; - } -#endif // GGML_USE_CUBLAS - struct ggml_tensor * inpSA = inpL; // norm - { - cur = ggml_rms_norm(ctx0, inpL, norm_rms_eps); - offload_func(cur); - ggml_set_name(cur, "rms_norm_0"); - - // cur = cur*attn_norm(broadcasted) - cur = ggml_mul(ctx0, cur, model.layers[il].attn_norm); - offload_func(cur); - ggml_set_name(cur, "attention_norm_0"); - } + cur = llm_build_norm(ctx0, inpL, + model.layers[il].attn_norm, NULL, + LLM_NORM_RMS, norm_rms_eps, cb, il); + cb(cur, "attn_norm", il); // self-attention { // compute Q and K and RoPE them - struct ggml_tensor * tmpk = ggml_mul_mat(ctx0, model.layers[il].wk, cur); - offload_func_kq(tmpk); - ggml_set_name(tmpk, "tmpk"); - - struct ggml_tensor * tmpq = ggml_mul_mat(ctx0, model.layers[il].wq, cur); - offload_func_kq(tmpq); - ggml_set_name(tmpq, "tmpq"); - - struct ggml_tensor * Kcur = ggml_rope_custom(ctx0, ggml_reshape_3d(ctx0, tmpk, n_embd_head, n_head_kv, n_tokens), KQ_pos, n_embd_head, 0, 0, freq_base, freq_scale); - offload_func_kq(Kcur); - ggml_set_name(Kcur, "Kcur"); - - struct ggml_tensor * Qcur = ggml_rope_custom(ctx0, ggml_reshape_3d(ctx0, tmpq, n_embd_head, n_head, n_tokens), KQ_pos, n_embd_head, 0, 0, freq_base, freq_scale); - offload_func_kq(Qcur); - ggml_set_name(Qcur, "Qcur"); - - // store key and value to memory - { - // compute the transposed [n_tokens, n_embd] V matrix - - struct ggml_tensor * tmpv = ggml_mul_mat(ctx0, model.layers[il].wv, cur); - offload_func_v(tmpv); - ggml_set_name(tmpv, "tmpv"); - - struct ggml_tensor * Vcur = ggml_transpose(ctx0, ggml_reshape_2d(ctx0, tmpv, n_embd_gqa, n_tokens)); - offload_func_v(Vcur); - ggml_set_name(Vcur, "Vcur"); - - struct ggml_tensor * k = ggml_view_1d(ctx0, kv_self.k, n_tokens*n_embd_gqa, (ggml_element_size(kv_self.k)*n_embd_gqa)*(il*n_ctx + kv_head)); - offload_func_kq(k); - ggml_set_name(k, "k"); - - struct ggml_tensor * v = ggml_view_2d(ctx0, kv_self.v, n_tokens, n_embd_gqa, - ( n_ctx)*ggml_element_size(kv_self.v), - (il*n_ctx)*ggml_element_size(kv_self.v)*n_embd_gqa + kv_head*ggml_element_size(kv_self.v)); - offload_func_v(v); - ggml_set_name(v, "v"); + struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); + cb(Qcur, "Qcur", il); - // important: storing RoPE-ed version of K in the KV cache! - ggml_build_forward_expand(gf, ggml_cpy(ctx0, Kcur, k)); - ggml_build_forward_expand(gf, ggml_cpy(ctx0, Vcur, v)); - } + struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); + cb(Kcur, "Kcur", il); - struct ggml_tensor * Q = ggml_permute(ctx0, Qcur, 0, 2, 1, 3); - offload_func_kq(Q); - ggml_set_name(Q, "Q"); + struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); + cb(Vcur, "Vcur", il); - struct ggml_tensor * K = - ggml_view_3d(ctx0, kv_self.k, - n_embd_head, n_kv, n_head_kv, - ggml_element_size(kv_self.k)*n_embd_gqa, - ggml_element_size(kv_self.k)*n_embd_head, - ggml_element_size(kv_self.k)*n_embd_gqa*n_ctx*il); - offload_func_kq(K); - ggml_set_name(K, "K"); - - // K * Q - struct ggml_tensor * KQ = ggml_mul_mat(ctx0, K, Q); - offload_func_kq(KQ); - ggml_set_name(KQ, "KQ"); - - // KQ_scaled = KQ / sqrt(n_embd_head) - // KQ_scaled shape [n_kv, n_tokens, n_head, 1] - struct ggml_tensor * KQ_scaled = ggml_scale(ctx0, KQ, KQ_scale); - offload_func_kq(KQ_scaled); - ggml_set_name(KQ_scaled, "KQ_scaled"); - - // KQ_masked = mask_past(KQ_scaled) - struct ggml_tensor * KQ_masked = ggml_add(ctx0, KQ_scaled, KQ_mask); - offload_func_kq(KQ_masked); - ggml_set_name(KQ_masked, "KQ_masked"); - - // KQ = soft_max(KQ_masked) - struct ggml_tensor * KQ_soft_max = ggml_soft_max(ctx0, KQ_masked); - offload_func_v(KQ_soft_max); - ggml_set_name(KQ_soft_max, "KQ_soft_max"); - - // split cached V into n_head heads - struct ggml_tensor * V = - ggml_view_3d(ctx0, kv_self.v, - n_kv, n_embd_head, n_head_kv, - ggml_element_size(kv_self.v)*n_ctx, - ggml_element_size(kv_self.v)*n_ctx*n_embd_head, - ggml_element_size(kv_self.v)*n_ctx*n_embd_gqa*il); - offload_func_v(V); - ggml_set_name(V, "V"); - -#if 1 - struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V, KQ_soft_max); - offload_func_v(KQV); - ggml_set_name(KQV, "KQV"); -#else - // make V contiguous in memory to speed up the matmul, however we waste time on the copy - // on M1 this is faster for the perplexity computation, but ~5% slower for the single-token generation - // is there a better way? - struct ggml_tensor * V_cont = ggml_cpy(ctx0, V, ggml_new_tensor_3d(ctx0, kv_self.v->type, n_ctx, n_embd_head, n_head)); - struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V_cont, KQ_soft_max); -#endif + Qcur = ggml_rope_custom(ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens), inp_pos, n_embd_head, 0, 0, freq_base, freq_scale); + cb(Qcur, "Qcur", il); - // KQV_merged = KQV.permute(0, 2, 1, 3) - struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3); - offload_func_v(KQV_merged); - ggml_set_name(KQV_merged, "KQV_merged"); + Kcur = ggml_rope_custom(ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens), inp_pos, n_embd_head, 0, 0, freq_base, freq_scale); + cb(Kcur, "Kcur", il); - // cur = KQV_merged.contiguous().view(n_embd, n_tokens) - cur = ggml_cont_2d(ctx0, KQV_merged, n_embd, n_tokens); - offload_func_v(cur); - ggml_set_name(cur, "KQV_merged_contiguous"); + llm_build_kv_store(lctx, ctx0, gf, Kcur, Vcur, n_tokens, kv_head, cb, il); - // projection (no bias) - cur = ggml_mul_mat(ctx0, - model.layers[il].wo, - cur); - offload_func(cur); - ggml_set_name(cur, "result_wo"); + cur = llm_build_kqv(lctx, ctx0, cur, + model.layers[il].wo, NULL, + Qcur, KQ_scale, KQ_mask, n_tokens, n_kv, -1.0f, cb, il); + cb(cur, "kqv_out", il); } - struct ggml_tensor * inpFF = ggml_add(ctx0, cur, inpSA); - offload_func(inpFF); - ggml_set_name(inpFF, "inpFF"); + struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); + cb(ffn_inp, "ffn_inp", il); // feed-forward network { - // norm - { - cur = ggml_rms_norm(ctx0, inpFF, norm_rms_eps); - offload_func(cur); - ggml_set_name(cur, "rms_norm_1"); - - // cur = cur*ffn_norm(broadcasted) - cur = ggml_mul(ctx0, cur, model.layers[il].ffn_norm); - offload_func(cur); - ggml_set_name(cur, "ffn_norm"); - } - - struct ggml_tensor * tmp = ggml_mul_mat(ctx0, - model.layers[il].w3, - cur); - offload_func(tmp); - ggml_set_name(tmp, "result_w3"); + cur = llm_build_norm(ctx0, ffn_inp, + model.layers[il].ffn_norm, NULL, + LLM_NORM_RMS, norm_rms_eps, cb, il); + cb(cur, "ffn_norm", il); - cur = ggml_mul_mat(ctx0, - model.layers[il].w1, - cur); - offload_func(cur); - ggml_set_name(cur, "result_w1"); - - // SILU activation - cur = ggml_silu(ctx0, cur); - offload_func(cur); - ggml_set_name(cur, "silu"); - - cur = ggml_mul(ctx0, cur, tmp); - offload_func(cur); - ggml_set_name(cur, "silu_x_result_w3"); - - cur = ggml_mul_mat(ctx0, - model.layers[il].w2, - cur); - offload_func(cur); - ggml_set_name(cur, "result_w2"); + cur = llm_build_ffn(ctx0, cur, + model.layers[il].ffn_up, NULL, + model.layers[il].ffn_gate, NULL, + model.layers[il].ffn_down, NULL, + LLM_FFN_SILU, LLM_FFN_PAR, cb, il); + cb(cur, "ffn_out", il); } - cur = ggml_add(ctx0, cur, inpFF); - offload_func(cur); - ggml_set_name(cur, "inpFF_+_result_w2"); + cur = ggml_add(ctx0, cur, ffn_inp); + cb(cur, "l_out", il); // input for next layer inpL = cur; @@ -3454,21 +3569,14 @@ static struct ggml_cgraph * llm_build_llama( cur = inpL; - // norm - { - cur = ggml_rms_norm(ctx0, cur, norm_rms_eps); - offload_func_nr(cur); - ggml_set_name(cur, "rms_norm_2"); - - // cur = cur*norm(broadcasted) - cur = ggml_mul(ctx0, cur, model.output_norm); - // offload_func_nr(cur); // TODO CPU + GPU mirrored backend - ggml_set_name(cur, "result_norm"); - } + cur = llm_build_norm(ctx0, cur, + model.output_norm, NULL, + LLM_NORM_RMS, norm_rms_eps, cb, -1); + cb(cur, "result_norm", -1); // lm_head cur = ggml_mul_mat(ctx0, model.output, cur); - ggml_set_name(cur, "result_output"); + cb(cur, "result_output", -1); ggml_build_forward_expand(gf, cur); @@ -3479,7 +3587,9 @@ static struct ggml_cgraph * llm_build_llama( static struct ggml_cgraph * llm_build_baichaun( llama_context & lctx, - const llama_batch & batch) { + const llama_batch & batch, + const llm_build_cb & cb, + bool worst_case) { const auto & model = lctx.model; const auto & hparams = model.hparams; const auto & cparams = lctx.cparams; @@ -3494,7 +3604,6 @@ static struct ggml_cgraph * llm_build_baichaun( const int64_t n_head = hparams.n_head; const int64_t n_head_kv = hparams.n_head_kv; const int64_t n_embd_head = hparams.n_embd_head(); - const int64_t n_embd_gqa = hparams.n_embd_gqa(); GGML_ASSERT(n_embd_head == hparams.n_rot); @@ -3502,13 +3611,11 @@ static struct ggml_cgraph * llm_build_baichaun( const float freq_scale = cparams.rope_freq_scale; const float norm_rms_eps = hparams.f_norm_rms_eps; - const int n_gpu_layers = model.n_gpu_layers; - const int32_t n_tokens = batch.n_tokens; - const int32_t n_kv = ggml_allocr_is_measure(lctx.alloc) ? n_ctx : kv_self.n; - const int32_t kv_head = ggml_allocr_is_measure(lctx.alloc) ? n_ctx - n_tokens : kv_self.head; + const int32_t n_kv = worst_case ? n_ctx : kv_self.n; + const int32_t kv_head = worst_case ? n_ctx - n_tokens : kv_self.head; - const bool do_rope_shift = ggml_allocr_is_measure(lctx.alloc) || kv_self.has_shift; + const bool do_rope_shift = worst_case || kv_self.has_shift; auto & buf_compute = lctx.buf_compute; @@ -3525,331 +3632,91 @@ static struct ggml_cgraph * llm_build_baichaun( struct ggml_tensor * cur; struct ggml_tensor * inpL; - if (batch.token) { - struct ggml_tensor * inp_tokens = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); - - ggml_allocr_alloc(lctx.alloc, inp_tokens); - if (!ggml_allocr_is_measure(lctx.alloc)) { - memcpy(inp_tokens->data, batch.token, n_tokens*ggml_element_size(inp_tokens)); - } - ggml_set_name(inp_tokens, "inp_tokens"); - - inpL = ggml_get_rows(ctx0, model.tok_embeddings, inp_tokens); - } else { -#ifdef GGML_USE_MPI - GGML_ASSERT(false && "not implemented"); -#endif - - inpL = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_embd, n_tokens); - - ggml_allocr_alloc(lctx.alloc, inpL); - if (!ggml_allocr_is_measure(lctx.alloc)) { - memcpy(inpL->data, batch.embd, n_tokens * n_embd * ggml_element_size(inpL)); - } - } - - const int i_gpu_start = n_layer - n_gpu_layers; - (void) i_gpu_start; - - // offload functions set the tensor output backend to GPU - // tensors are GPU-accelerated if any input or the output has been offloaded - offload_func_t offload_func_nr = llama_nop; // nr = non-repeating - offload_func_t offload_func_kq = llama_nop; - offload_func_t offload_func_v = llama_nop; + inpL = llm_build_inp_embd(ctx0, batch, model.tok_embd, n_embd, n_tokens, cb); + cb(inpL, "inp_embd", -1); -#ifdef GGML_USE_CUBLAS - if (n_gpu_layers > n_layer) { - offload_func_nr = ggml_cuda_assign_buffers_no_alloc; - } - if (n_gpu_layers > n_layer + 1) { - offload_func_v = ggml_cuda_assign_buffers_no_alloc; - } - if (n_gpu_layers > n_layer + 2) { - offload_func_kq = ggml_cuda_assign_buffers_no_alloc; - } -#endif // GGML_USE_CUBLAS + // inp_pos - contains the positions + struct ggml_tensor * inp_pos = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); + cb(inp_pos, "inp_pos", -1); // KQ_scale struct ggml_tensor * KQ_scale = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); - ggml_set_name(KQ_scale, "1/sqrt(n_embd_head)"); - ggml_allocr_alloc(lctx.alloc, KQ_scale); - if (!ggml_allocr_is_measure(lctx.alloc)) { - ggml_set_f32(KQ_scale, 1.0f/sqrtf(float(n_embd)/n_head)); - } + cb(KQ_scale, "KQ_scale", -1); // KQ_mask (mask for 1 head, it will be broadcasted to all heads) struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); - offload_func_kq(KQ_mask); - ggml_set_name(KQ_mask, "KQ_mask"); - ggml_allocr_alloc(lctx.alloc, KQ_mask); - if (!ggml_allocr_is_measure(lctx.alloc)) { - float * data = (float *) KQ_mask->data; - memset(data, 0, ggml_nbytes(KQ_mask)); - - for (int h = 0; h < 1; ++h) { - for (int j = 0; j < n_tokens; ++j) { - const llama_pos pos = batch.pos[j]; - const llama_seq_id seq_id = batch.seq_id[j][0]; - - for (int i = 0; i < n_kv; ++i) { - if (!kv_self.cells[i].has_seq_id(seq_id) || kv_self.cells[i].pos > pos) { - data[h*(n_kv*n_tokens) + j*n_kv + i] = -INFINITY; - } - } - } - } - } - - // KQ_pos - contains the positions - struct ggml_tensor * KQ_pos = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); - offload_func_kq(KQ_pos); - ggml_set_name(KQ_pos, "KQ_pos"); - ggml_allocr_alloc(lctx.alloc, KQ_pos); - if (!ggml_allocr_is_measure(lctx.alloc)) { - int * data = (int *) KQ_pos->data; - for (int i = 0; i < n_tokens; ++i) { - data[i] = batch.pos[i]; - } - } + cb(KQ_mask, "KQ_mask", -1); // shift the entire K-cache if needed if (do_rope_shift) { - struct ggml_tensor * K_shift = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_ctx); - offload_func_kq(K_shift); - ggml_set_name(K_shift, "K_shift"); - ggml_allocr_alloc(lctx.alloc, K_shift); - if (!ggml_allocr_is_measure(lctx.alloc)) { - int * data = (int *) K_shift->data; - for (int i = 0; i < n_ctx; ++i) { - data[i] = kv_self.cells[i].delta; - } - } - - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * tmp = - ggml_rope_custom_inplace(ctx0, - ggml_view_3d(ctx0, kv_self.k, - n_embd_head, n_head_kv, n_ctx, - ggml_element_size(kv_self.k)*n_embd_head, - ggml_element_size(kv_self.k)*n_embd_gqa, - ggml_element_size(kv_self.k)*n_embd_gqa*n_ctx*il), - K_shift, n_embd_head, 0, 0, freq_base, freq_scale); - offload_func_kq(tmp); - ggml_build_forward_expand(gf, tmp); - } + llm_build_k_shift(lctx, ctx0, gf, n_embd_head, LLM_ROPE, cb); } for (int il = 0; il < n_layer; ++il) { - ggml_format_name(inpL, "layer_inp_%d", il); - - offload_func_t offload_func = llama_nop; - -#ifdef GGML_USE_CUBLAS - if (il >= i_gpu_start) { - offload_func = ggml_cuda_assign_buffers_no_alloc; - } -#endif // GGML_USE_CUBLAS - struct ggml_tensor * inpSA = inpL; - // norm - { - cur = ggml_rms_norm(ctx0, inpL, norm_rms_eps); - offload_func(cur); - ggml_set_name(cur, "rms_norm_0"); - - // cur = cur*attn_norm(broadcasted) - cur = ggml_mul(ctx0, cur, model.layers[il].attn_norm); - offload_func(cur); - ggml_set_name(cur, "attention_norm_0"); - } + cur = llm_build_norm(ctx0, inpL, + model.layers[il].attn_norm, NULL, + LLM_NORM_RMS, norm_rms_eps, cb, il); + cb(cur, "attn_norm", il); // self-attention { - // compute Q and K and RoPE them - struct ggml_tensor * tmpk = ggml_mul_mat(ctx0, model.layers[il].wk, cur); - offload_func_kq(tmpk); - ggml_set_name(tmpk, "tmpk"); + struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); + cb(Qcur, "Qcur", il); + + struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); + cb(Kcur, "Kcur", il); - struct ggml_tensor * tmpq = ggml_mul_mat(ctx0, model.layers[il].wq, cur); - offload_func_kq(tmpq); - ggml_set_name(tmpq, "tmpq"); + struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); + cb(Vcur, "Vcur", il); - struct ggml_tensor * Kcur; - struct ggml_tensor * Qcur; switch (model.type) { case MODEL_7B: - Kcur = ggml_rope_custom(ctx0, ggml_reshape_3d(ctx0, tmpk, n_embd_head, n_head_kv, n_tokens), KQ_pos, n_embd_head, 0, 0, freq_base, freq_scale); - Qcur = ggml_rope_custom(ctx0, ggml_reshape_3d(ctx0, tmpq, n_embd_head, n_head, n_tokens), KQ_pos, n_embd_head, 0, 0, freq_base, freq_scale); + Qcur = ggml_rope_custom(ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens), inp_pos, n_embd_head, 0, 0, freq_base, freq_scale); + Kcur = ggml_rope_custom(ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens), inp_pos, n_embd_head, 0, 0, freq_base, freq_scale); break; case MODEL_13B: - Kcur = ggml_reshape_3d(ctx0, tmpk, n_embd/n_head, n_head, n_tokens); - Qcur = ggml_reshape_3d(ctx0, tmpq, n_embd/n_head, n_head, n_tokens); + Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd/n_head, n_head, n_tokens); + Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd/n_head, n_head, n_tokens); break; default: GGML_ASSERT(false); } + cb(Qcur, "Qcur", il); + cb(Kcur, "Kcur", il); - offload_func_kq(Kcur); - ggml_set_name(Kcur, "Kcur"); + llm_build_kv_store(lctx, ctx0, gf, Kcur, Vcur, n_tokens, kv_head, cb, il); - offload_func_kq(Qcur); - ggml_set_name(Qcur, "Qcur"); + // apply ALiBi for 13B model + const float alibi_bias_max = model.type == MODEL_13B ? 8.0f : -1.0f; - // store key and value to memory - { - // compute the transposed [n_tokens, n_embd] V matrix + cur = llm_build_kqv(lctx, ctx0, cur, + model.layers[il].wo, NULL, + Qcur, KQ_scale, KQ_mask, n_tokens, n_kv, alibi_bias_max, cb, il); + cb(cur, "kqv_out", il); + } - struct ggml_tensor * tmpv = ggml_mul_mat(ctx0, model.layers[il].wv, cur); - offload_func_v(tmpv); - ggml_set_name(tmpv, "tmpv"); - - struct ggml_tensor * Vcur = ggml_transpose(ctx0, ggml_reshape_2d(ctx0, tmpv, n_embd_gqa, n_tokens)); - offload_func_v(Vcur); - ggml_set_name(Vcur, "Vcur"); - - struct ggml_tensor * k = ggml_view_1d(ctx0, kv_self.k, n_tokens*n_embd_gqa, (ggml_element_size(kv_self.k)*n_embd_gqa)*(il*n_ctx + kv_head)); - offload_func_kq(k); - ggml_set_name(k, "k"); - - struct ggml_tensor * v = ggml_view_2d(ctx0, kv_self.v, n_tokens, n_embd_gqa, - ( n_ctx)*ggml_element_size(kv_self.v), - (il*n_ctx)*ggml_element_size(kv_self.v)*n_embd_gqa + kv_head*ggml_element_size(kv_self.v)); - offload_func_v(v); - ggml_set_name(v, "v"); - - // important: storing RoPE-ed version of K in the KV cache! - ggml_build_forward_expand(gf, ggml_cpy(ctx0, Kcur, k)); - ggml_build_forward_expand(gf, ggml_cpy(ctx0, Vcur, v)); - } - - struct ggml_tensor * Q = ggml_permute(ctx0, Qcur, 0, 2, 1, 3); - offload_func_kq(Q); - ggml_set_name(Q, "Q"); - - struct ggml_tensor * K = - ggml_view_3d(ctx0, kv_self.k, - n_embd_head, n_kv, n_head_kv, - ggml_element_size(kv_self.k)*n_embd_gqa, - ggml_element_size(kv_self.k)*n_embd_head, - ggml_element_size(kv_self.k)*n_embd_gqa*n_ctx*il); - offload_func_kq(K); - ggml_set_name(K, "K"); - - // K * Q - struct ggml_tensor * KQ = ggml_mul_mat(ctx0, K, Q); - offload_func_kq(KQ); - ggml_set_name(KQ, "KQ"); - - // KQ_scaled = KQ / sqrt(n_embd_head) - // KQ_scaled shape [n_past + n_tokens, n_tokens, n_head, 1] - struct ggml_tensor * KQ_scaled = ggml_scale(ctx0, KQ, KQ_scale); - offload_func_kq(KQ_scaled); - ggml_set_name(KQ_scaled, "KQ_scaled"); - - struct ggml_tensor * KQ_masked; - struct ggml_tensor * KQ_scaled_alibi; - - switch (model.type) { - case MODEL_7B: - KQ_masked = ggml_add(ctx0, KQ_scaled, KQ_mask); - break; - case MODEL_13B: - // TODO: replace with ggml_add() - KQ_scaled_alibi = ggml_alibi(ctx0, KQ_scaled, /*n_past*/ 0, n_head, 8); - ggml_set_name(KQ_scaled_alibi, "KQ_scaled_alibi"); - KQ_masked = ggml_add(ctx0, KQ_scaled_alibi, KQ_mask); - break; - default: - GGML_ASSERT(false); - } - - // KQ = soft_max(KQ_masked) - struct ggml_tensor * KQ_soft_max = ggml_soft_max(ctx0, KQ_masked); - offload_func_v(KQ_soft_max); - ggml_set_name(KQ_soft_max, "KQ_soft_max"); - - // split cached V into n_head heads - struct ggml_tensor * V = - ggml_view_3d(ctx0, kv_self.v, - n_kv, n_embd_head, n_head_kv, - ggml_element_size(kv_self.v)*n_ctx, - ggml_element_size(kv_self.v)*n_ctx*n_embd_head, - ggml_element_size(kv_self.v)*n_ctx*n_embd_gqa*il); - offload_func_v(V); - ggml_set_name(V, "V"); - - struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V, KQ_soft_max); - offload_func_v(KQV); - ggml_set_name(KQV, "KQV"); - - // KQV_merged = KQV.permute(0, 2, 1, 3) - struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3); - offload_func_v(KQV_merged); - ggml_set_name(KQV_merged, "KQV_merged"); - - // cur = KQV_merged.contiguous().view(n_embd, n_tokens) - cur = ggml_cont_2d(ctx0, KQV_merged, n_embd, n_tokens); - offload_func_v(cur); - ggml_set_name(cur, "KQV_merged_contiguous"); - - // projection (no bias) - cur = ggml_mul_mat(ctx0, - model.layers[il].wo, - cur); - offload_func(cur); - ggml_set_name(cur, "result_wo"); - } - - struct ggml_tensor * inpFF = ggml_add(ctx0, cur, inpSA); - offload_func(inpFF); - ggml_set_name(inpFF, "inpFF"); + struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); + cb(ffn_inp, "ffn_inp", il); // feed-forward network { - // norm - { - cur = ggml_rms_norm(ctx0, inpFF, norm_rms_eps); - offload_func(cur); - ggml_set_name(cur, "rms_norm_1"); - - // cur = cur*ffn_norm(broadcasted) - cur = ggml_mul(ctx0, cur, model.layers[il].ffn_norm); - offload_func(cur); - ggml_set_name(cur, "ffn_norm"); - } + cur = llm_build_norm(ctx0, ffn_inp, + model.layers[il].ffn_norm, NULL, + LLM_NORM_RMS, norm_rms_eps, cb, il); + cb(cur, "ffn_norm", il); - struct ggml_tensor * tmp = ggml_mul_mat(ctx0, - model.layers[il].w3, - cur); - offload_func(tmp); - ggml_set_name(tmp, "result_w3"); - - cur = ggml_mul_mat(ctx0, - model.layers[il].w1, - cur); - offload_func(cur); - ggml_set_name(cur, "result_w1"); - - // SILU activation - cur = ggml_silu(ctx0, cur); - offload_func(cur); - ggml_set_name(cur, "silu"); - - cur = ggml_mul(ctx0, cur, tmp); - offload_func(cur); - ggml_set_name(cur, "silu_x_result_w3"); - - cur = ggml_mul_mat(ctx0, - model.layers[il].w2, - cur); - offload_func(cur); - ggml_set_name(cur, "result_w2"); + cur = llm_build_ffn(ctx0, cur, + model.layers[il].ffn_up, NULL, + model.layers[il].ffn_gate, NULL, + model.layers[il].ffn_down, NULL, + LLM_FFN_SILU, LLM_FFN_PAR, cb, il); + cb(cur, "ffn_out", il); } - cur = ggml_add(ctx0, cur, inpFF); - offload_func(cur); - ggml_set_name(cur, "inpFF_+_result_w2"); + cur = ggml_add(ctx0, cur, ffn_inp); + cb(cur, "l_out", il); // input for next layer inpL = cur; @@ -3857,21 +3724,14 @@ static struct ggml_cgraph * llm_build_baichaun( cur = inpL; - // norm - { - cur = ggml_rms_norm(ctx0, cur, norm_rms_eps); - offload_func_nr(cur); - ggml_set_name(cur, "rms_norm_2"); - - // cur = cur*norm(broadcasted) - cur = ggml_mul(ctx0, cur, model.output_norm); - // offload_func_nr(cur); // TODO CPU + GPU mirrored backend - ggml_set_name(cur, "result_norm"); - } + cur = llm_build_norm(ctx0, cur, + model.output_norm, NULL, + LLM_NORM_RMS, norm_rms_eps, cb, -1); + cb(cur, "result_norm", -1); // lm_head cur = ggml_mul_mat(ctx0, model.output, cur); - ggml_set_name(cur, "result_output"); + cb(cur, "result_output", -1); ggml_build_forward_expand(gf, cur); @@ -3880,9 +3740,11 @@ static struct ggml_cgraph * llm_build_baichaun( return gf; } -static struct ggml_cgraph * llm_build_refact( +static struct ggml_cgraph * llm_build_falcon( llama_context & lctx, - const llama_batch & batch) { + const llama_batch & batch, + const llm_build_cb & cb, + bool worst_case) { const auto & model = lctx.model; const auto & hparams = model.hparams; const auto & cparams = lctx.cparams; @@ -3899,15 +3761,20 @@ static struct ggml_cgraph * llm_build_refact( const int64_t n_embd_head = hparams.n_embd_head(); const int64_t n_embd_gqa = hparams.n_embd_gqa(); - const float norm_rms_eps = hparams.f_norm_rms_eps; + GGML_ASSERT(n_embd_head == hparams.n_rot); - const int n_gpu_layers = model.n_gpu_layers; + const float freq_base = cparams.rope_freq_base; + const float freq_scale = cparams.rope_freq_scale; + const float norm_eps = hparams.f_norm_eps; const int32_t n_tokens = batch.n_tokens; - const int32_t n_kv = ggml_allocr_is_measure(lctx.alloc) ? n_ctx : kv_self.n; - const int32_t kv_head = ggml_allocr_is_measure(lctx.alloc) ? n_ctx - n_tokens : kv_self.head; + const int32_t n_kv = worst_case ? n_ctx : kv_self.n; + const int32_t kv_head = worst_case ? n_ctx - n_tokens : kv_self.head; - // printf("n_kv = %d\n", n_kv); + const bool do_rope_shift = worst_case || kv_self.has_shift; + + //printf("kv_head = %d, n_kv = %d, n_tokens = %d, n_ctx = %d, is_measure = %d, has_shift = %d\n", + // kv_head, n_kv, n_tokens, n_ctx, ggml_allocr_is_measure(lctx.alloc), kv_self.has_shift); auto & buf_compute = lctx.buf_compute; @@ -3924,277 +3791,94 @@ static struct ggml_cgraph * llm_build_refact( struct ggml_tensor * cur; struct ggml_tensor * inpL; - if (batch.token) { - struct ggml_tensor * inp_tokens = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); - - ggml_allocr_alloc(lctx.alloc, inp_tokens); - if (!ggml_allocr_is_measure(lctx.alloc)) { - memcpy(inp_tokens->data, batch.token, n_tokens*ggml_element_size(inp_tokens)); - } - ggml_set_name(inp_tokens, "inp_tokens"); - - inpL = ggml_get_rows(ctx0, model.tok_embeddings, inp_tokens); - } else { -#ifdef GGML_USE_MPI - GGML_ASSERT(false && "not implemented"); -#endif - - inpL = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_embd, n_tokens); - - ggml_allocr_alloc(lctx.alloc, inpL); - if (!ggml_allocr_is_measure(lctx.alloc)) { - memcpy(inpL->data, batch.embd, n_tokens * n_embd * ggml_element_size(inpL)); - } - } - - const int i_gpu_start = n_layer - n_gpu_layers; - (void) i_gpu_start; + inpL = llm_build_inp_embd(ctx0, batch, model.tok_embd, n_embd, n_tokens, cb); + cb(inpL, "inp_embd", -1); - // offload functions set the tensor output backend to GPU - // tensors are GPU-accelerated if any input or the output has been offloaded - offload_func_t offload_func_nr = llama_nop; // nr = non-repeating - offload_func_t offload_func_kq = llama_nop; - offload_func_t offload_func_v = llama_nop; - -#ifdef GGML_USE_CUBLAS - if (n_gpu_layers > n_layer) { - offload_func_nr = ggml_cuda_assign_buffers_no_alloc; - } - if (n_gpu_layers > n_layer + 1) { - offload_func_v = ggml_cuda_assign_buffers_no_alloc; - } - if (n_gpu_layers > n_layer + 2) { - offload_func_kq = ggml_cuda_assign_buffers_no_alloc; - } -#endif // GGML_USE_CUBLAS + // inp_pos - contains the positions + struct ggml_tensor * inp_pos = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); + cb(inp_pos, "inp_pos", -1); // KQ_scale struct ggml_tensor * KQ_scale = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); - ggml_set_name(KQ_scale, "1/sqrt(n_embd_head)"); - ggml_allocr_alloc(lctx.alloc, KQ_scale); - if (!ggml_allocr_is_measure(lctx.alloc)) { - ggml_set_f32(KQ_scale, 1.0f/sqrtf(float(n_embd_head))); - } + cb(KQ_scale, "KQ_scale", -1); // KQ_mask (mask for 1 head, it will be broadcasted to all heads) struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); - offload_func_kq(KQ_mask); - ggml_set_name(KQ_mask, "KQ_mask"); - ggml_allocr_alloc(lctx.alloc, KQ_mask); - if (!ggml_allocr_is_measure(lctx.alloc)) { - float * data = (float *) KQ_mask->data; - memset(data, 0, ggml_nbytes(KQ_mask)); - - for (int h = 0; h < 1; ++h) { - for (int j = 0; j < n_tokens; ++j) { - const llama_pos pos = batch.pos[j]; - const llama_seq_id seq_id = batch.seq_id[j][0]; - - for (int i = 0; i < n_kv; ++i) { - if (!kv_self.cells[i].has_seq_id(seq_id) || kv_self.cells[i].pos > pos) { - data[h*(n_kv*n_tokens) + j*n_kv + i] = -INFINITY; - } - } - } - } + cb(KQ_mask, "KQ_mask", -1); + + // shift the entire K-cache if needed + if (do_rope_shift) { + llm_build_k_shift(lctx, ctx0, gf, n_embd_head, LLM_ROPE_NEOX, cb); } for (int il = 0; il < n_layer; ++il) { - ggml_format_name(inpL, "layer_inp_%d", il); - - offload_func_t offload_func = llama_nop; - -#ifdef GGML_USE_CUBLAS - if (il >= i_gpu_start) { - offload_func = ggml_cuda_assign_buffers_no_alloc; - } -#endif // GGML_USE_CUBLAS - - struct ggml_tensor * inpSA = inpL; - - // norm - { - cur = ggml_rms_norm(ctx0, inpL, norm_rms_eps); - offload_func(cur); - ggml_set_name(cur, "rms_norm_0"); + struct ggml_tensor * attn_norm; - // cur = cur*attn_norm(broadcasted) - cur = ggml_mul(ctx0, cur, model.layers[il].attn_norm); - offload_func(cur); - ggml_set_name(cur, "attention_norm_0"); - } + attn_norm = llm_build_norm(ctx0, inpL, + model.layers[il].attn_norm, + model.layers[il].attn_norm_b, + LLM_NORM, norm_eps, cb, il); + cb(attn_norm, "attn_norm", il); // self-attention { - // compute Q and K - struct ggml_tensor * tmpk = ggml_mul_mat(ctx0, model.layers[il].wk, cur); - offload_func_kq(tmpk); - ggml_set_name(tmpk, "tmpk"); - - struct ggml_tensor * tmpq = ggml_mul_mat(ctx0, model.layers[il].wq, cur); - offload_func_kq(tmpq); - ggml_set_name(tmpq, "tmpq"); - - struct ggml_tensor * Kcur = ggml_reshape_3d(ctx0, tmpk, n_embd_head, n_head_kv, n_tokens); - offload_func_kq(Kcur); - ggml_set_name(Kcur, "Kcur"); - - struct ggml_tensor * Qcur = ggml_reshape_3d(ctx0, tmpq, n_embd_head, n_head, n_tokens); - offload_func_kq(Qcur); - ggml_set_name(Qcur, "Qcur"); - - // store key and value to memory - { - // compute the transposed [n_tokens, n_embd] V matrix - - struct ggml_tensor * tmpv = ggml_mul_mat(ctx0, model.layers[il].wv, cur); - offload_func_v(tmpv); - ggml_set_name(tmpv, "tmpv"); - - struct ggml_tensor * Vcur = ggml_transpose(ctx0, ggml_reshape_2d(ctx0, tmpv, n_embd_gqa, n_tokens)); - offload_func_v(Vcur); - ggml_set_name(Vcur, "Vcur"); + if (model.layers[il].attn_norm_2) { + // Falcon-40B + cur = llm_build_norm(ctx0, attn_norm, + model.layers[il].attn_norm_2, + model.layers[il].attn_norm_2_b, + LLM_NORM, norm_eps, cb, il); + cb(cur, "attn_norm_2", il); + } else { + cur = attn_norm; + } - struct ggml_tensor * k = ggml_view_1d(ctx0, kv_self.k, n_tokens*n_embd_gqa, (ggml_element_size(kv_self.k)*n_embd_gqa)*(il*n_ctx + kv_head)); - offload_func_kq(k); - ggml_set_name(k, "k"); + cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); + cb(cur, "wqkv", il); - struct ggml_tensor * v = ggml_view_2d(ctx0, kv_self.v, n_tokens, n_embd_gqa, - ( n_ctx)*ggml_element_size(kv_self.v), - (il*n_ctx)*ggml_element_size(kv_self.v)*n_embd_gqa + kv_head*ggml_element_size(kv_self.v)); - offload_func_v(v); - ggml_set_name(v, "v"); + struct ggml_tensor * Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); + struct ggml_tensor * Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); + struct ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); - ggml_build_forward_expand(gf, ggml_cpy(ctx0, Kcur, k)); - ggml_build_forward_expand(gf, ggml_cpy(ctx0, Vcur, v)); - } + cb(Qcur, "Qcur", il); + cb(Kcur, "Kcur", il); + cb(Vcur, "Vcur", il); - struct ggml_tensor * Q = ggml_permute(ctx0, Qcur, 0, 2, 1, 3); - offload_func_kq(Q); - ggml_set_name(Q, "Q"); + Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); + Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); - struct ggml_tensor * K = - ggml_view_3d(ctx0, kv_self.k, - n_embd_head, n_kv, n_head_kv, - ggml_element_size(kv_self.k)*n_embd_gqa, - ggml_element_size(kv_self.k)*n_embd_head, - ggml_element_size(kv_self.k)*n_embd_gqa*n_ctx*il); - offload_func_kq(K); - ggml_set_name(K, "K"); - - // K * Q - struct ggml_tensor * KQ = ggml_mul_mat(ctx0, K, Q); - offload_func_kq(KQ); - ggml_set_name(KQ, "KQ"); - - // KQ_scaled = KQ / sqrt(n_embd_head) - // KQ_scaled shape [n_kv, n_tokens, n_head, 1] - struct ggml_tensor * KQ_scaled = ggml_scale(ctx0, KQ, KQ_scale); - offload_func_kq(KQ_scaled); - ggml_set_name(KQ_scaled, "KQ_scaled"); - - // KQ_masked = mask_past(KQ_scaled) - struct ggml_tensor * KQ_scaled_alibi = ggml_alibi(ctx0, KQ_scaled, /*n_past*/ 0, n_head, 8); - ggml_set_name(KQ_scaled_alibi, "KQ_scaled_alibi"); - - struct ggml_tensor * KQ_masked = ggml_add(ctx0, KQ_scaled_alibi, KQ_mask); - offload_func_kq(KQ_masked); - ggml_set_name(KQ_masked, "KQ_masked"); - - // KQ = soft_max(KQ_masked) - struct ggml_tensor * KQ_soft_max = ggml_soft_max(ctx0, KQ_masked); - offload_func_v(KQ_soft_max); - ggml_set_name(KQ_soft_max, "KQ_soft_max"); - - // split cached V into n_head heads - struct ggml_tensor * V = - ggml_view_3d(ctx0, kv_self.v, - n_kv, n_embd_head, n_head_kv, - ggml_element_size(kv_self.v)*n_ctx, - ggml_element_size(kv_self.v)*n_ctx*n_embd_head, - ggml_element_size(kv_self.v)*n_ctx*n_embd_gqa*il); - offload_func_v(V); - ggml_set_name(V, "V"); - -#if 1 - struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V, KQ_soft_max); - offload_func_v(KQV); - ggml_set_name(KQV, "KQV"); -#else - // make V contiguous in memory to speed up the matmul, however we waste time on the copy - // on M1 this is faster for the perplexity computation, but ~5% slower for the single-token generation - // is there a better way? - struct ggml_tensor * V_cont = ggml_cpy(ctx0, V, ggml_new_tensor_3d(ctx0, kv_self.v->type, n_ctx, n_embd_head, n_head)); - struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V_cont, KQ_soft_max); -#endif + // using mode = 2 for neox mode + Qcur = ggml_rope_custom(ctx0, Qcur, inp_pos, n_embd_head, 2, 0, freq_base, freq_scale); + cb(Qcur, "Qcur", il); - // KQV_merged = KQV.permute(0, 2, 1, 3) - struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3); - offload_func_v(KQV_merged); - ggml_set_name(KQV_merged, "KQV_merged"); + Kcur = ggml_rope_custom(ctx0, Kcur, inp_pos, n_embd_head, 2, 0, freq_base, freq_scale); + cb(Kcur, "Kcur", il); - // cur = KQV_merged.contiguous().view(n_embd, n_tokens) - cur = ggml_cont_2d(ctx0, KQV_merged, n_embd, n_tokens); - offload_func_v(cur); - ggml_set_name(cur, "KQV_merged_contiguous"); + llm_build_kv_store(lctx, ctx0, gf, Kcur, Vcur, n_tokens, kv_head, cb, il); - // projection (no bias) - cur = ggml_mul_mat(ctx0, - model.layers[il].wo, - cur); - offload_func(cur); - ggml_set_name(cur, "result_wo"); + cur = llm_build_kqv(lctx, ctx0, attn_norm, + model.layers[il].wo, NULL, + Qcur, KQ_scale, KQ_mask, n_tokens, n_kv, -1.0f, cb, il); + cb(cur, "kqv_out", il); } - struct ggml_tensor * inpFF = ggml_add(ctx0, cur, inpSA); - offload_func(inpFF); - ggml_set_name(inpFF, "inpFF"); + struct ggml_tensor * ffn_inp = cur; - // feed-forward network + // feed forward { - // norm - { - cur = ggml_rms_norm(ctx0, inpFF, norm_rms_eps); - offload_func(cur); - ggml_set_name(cur, "rms_norm_1"); - - // cur = cur*ffn_norm(broadcasted) - cur = ggml_mul(ctx0, cur, model.layers[il].ffn_norm); - offload_func(cur); - ggml_set_name(cur, "ffn_norm"); - } - - struct ggml_tensor * tmp = ggml_mul_mat(ctx0, - model.layers[il].w3, - cur); - offload_func(tmp); - ggml_set_name(tmp, "result_w3"); - - cur = ggml_mul_mat(ctx0, - model.layers[il].w1, - cur); - offload_func(cur); - ggml_set_name(cur, "result_w1"); - - // SILU activation - cur = ggml_silu(ctx0, cur); - offload_func(cur); - ggml_set_name(cur, "silu"); - - cur = ggml_mul(ctx0, cur, tmp); - offload_func(cur); - ggml_set_name(cur, "silu_x_result_w3"); - - cur = ggml_mul_mat(ctx0, - model.layers[il].w2, - cur); - offload_func(cur); - ggml_set_name(cur, "result_w2"); + cur = llm_build_ffn(ctx0, attn_norm, // !! use the attn norm, not the result + model.layers[il].ffn_up, NULL, + NULL, NULL, + model.layers[il].ffn_down, NULL, + LLM_FFN_GELU, LLM_FFN_SEQ, cb, il); + cb(cur, "ffn_out", il); } - cur = ggml_add(ctx0, cur, inpFF); - offload_func(cur); - ggml_set_name(cur, "inpFF_+_result_w2"); + cur = ggml_add(ctx0, cur, ffn_inp); + cb(cur, "l_out", il); + + cur = ggml_add(ctx0, cur, inpL); + cb(cur, "l_out", il); // input for next layer inpL = cur; @@ -4203,20 +3887,14 @@ static struct ggml_cgraph * llm_build_refact( cur = inpL; // norm - { - cur = ggml_rms_norm(ctx0, cur, norm_rms_eps); - offload_func_nr(cur); - ggml_set_name(cur, "rms_norm_2"); - - // cur = cur*norm(broadcasted) - cur = ggml_mul(ctx0, cur, model.output_norm); - // offload_func_nr(cur); // TODO CPU + GPU mirrored backend - ggml_set_name(cur, "result_norm"); - } + cur = llm_build_norm(ctx0, cur, + model.output_norm, + model.output_norm_b, + LLM_NORM, norm_eps, cb, -1); + cb(cur, "result_norm", -1); - // lm_head cur = ggml_mul_mat(ctx0, model.output, cur); - ggml_set_name(cur, "result_output"); + cb(cur, "result_output", -1); ggml_build_forward_expand(gf, cur); @@ -4225,9 +3903,11 @@ static struct ggml_cgraph * llm_build_refact( return gf; } -static struct ggml_cgraph * llm_build_falcon( +static struct ggml_cgraph * llm_build_starcoder( llama_context & lctx, - const llama_batch & batch) { + const llama_batch & batch, + const llm_build_cb & cb, + bool worst_case) { const auto & model = lctx.model; const auto & hparams = model.hparams; const auto & cparams = lctx.cparams; @@ -4240,26 +3920,16 @@ static struct ggml_cgraph * llm_build_falcon( const int64_t n_layer = hparams.n_layer; const int64_t n_ctx = cparams.n_ctx; const int64_t n_head = hparams.n_head; - const int64_t n_head_kv = hparams.n_head_kv; const int64_t n_embd_head = hparams.n_embd_head(); const int64_t n_embd_gqa = hparams.n_embd_gqa(); GGML_ASSERT(n_embd_head == hparams.n_rot); - const float freq_base = cparams.rope_freq_base; - const float freq_scale = cparams.rope_freq_scale; - const float norm_eps = hparams.f_norm_eps; - - const int n_gpu_layers = model.n_gpu_layers; + const float norm_eps = hparams.f_norm_eps; const int32_t n_tokens = batch.n_tokens; - const int32_t n_kv = ggml_allocr_is_measure(lctx.alloc) ? n_ctx : kv_self.n; - const int32_t kv_head = ggml_allocr_is_measure(lctx.alloc) ? n_ctx - n_tokens : kv_self.head; - - const bool do_rope_shift = ggml_allocr_is_measure(lctx.alloc) || kv_self.has_shift; - - //printf("kv_head = %d, n_kv = %d, n_tokens = %d, n_ctx = %d, is_measure = %d, has_shift = %d\n", - // kv_head, n_kv, n_tokens, n_ctx, ggml_allocr_is_measure(lctx.alloc), kv_self.has_shift); + const int32_t n_kv = worst_case ? n_ctx : kv_self.n; + const int32_t kv_head = worst_case ? n_ctx - n_tokens : kv_self.head; auto & buf_compute = lctx.buf_compute; @@ -4274,352 +3944,133 @@ static struct ggml_cgraph * llm_build_falcon( ggml_cgraph * gf = ggml_new_graph(ctx0); struct ggml_tensor * cur; + struct ggml_tensor * pos; struct ggml_tensor * inpL; - if (batch.token) { - struct ggml_tensor * inp_tokens = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); - - ggml_allocr_alloc(lctx.alloc, inp_tokens); - if (!ggml_allocr_is_measure(lctx.alloc)) { - memcpy(inp_tokens->data, batch.token, n_tokens*ggml_element_size(inp_tokens)); - } - ggml_set_name(inp_tokens, "inp_tokens"); - - inpL = ggml_get_rows(ctx0, model.tok_embeddings, inp_tokens); - } else { -#ifdef GGML_USE_MPI - GGML_ASSERT(false && "not implemented"); -#endif - - inpL = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_embd, n_tokens); + inpL = llm_build_inp_embd(ctx0, batch, model.tok_embd, n_embd, n_tokens, cb); + cb(inpL, "inp_embd", -1); - ggml_allocr_alloc(lctx.alloc, inpL); - if (!ggml_allocr_is_measure(lctx.alloc)) { - memcpy(inpL->data, batch.embd, n_tokens * n_embd * ggml_element_size(inpL)); - } - } - - const int i_gpu_start = n_layer - n_gpu_layers; - (void) i_gpu_start; - - // offload functions set the tensor output backend to GPU - // tensors are GPU-accelerated if any input or the output has been offloaded - offload_func_t offload_func_nr = llama_nop; // nr = non-repeating - offload_func_t offload_func_kq = llama_nop; - offload_func_t offload_func_v = llama_nop; - -#ifdef GGML_USE_CUBLAS - if (n_gpu_layers > n_layer) { - offload_func_nr = ggml_cuda_assign_buffers_no_alloc; - } - if (n_gpu_layers > n_layer + 1) { - offload_func_v = ggml_cuda_assign_buffers_no_alloc; - } - if (n_gpu_layers > n_layer + 2) { - offload_func_kq = ggml_cuda_assign_buffers_no_alloc; - } -#endif // GGML_USE_CUBLAS + // inp_pos - contains the positions + struct ggml_tensor * inp_pos = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); + cb(inp_pos, "inp_pos", -1); // KQ_scale struct ggml_tensor * KQ_scale = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); - ggml_set_name(KQ_scale, "1/sqrt(n_embd_head)"); - ggml_allocr_alloc(lctx.alloc, KQ_scale); - if (!ggml_allocr_is_measure(lctx.alloc)) { - ggml_set_f32(KQ_scale, 1.0f/sqrtf(float(n_embd)/n_head)); - } + cb(KQ_scale, "KQ_scale", -1); // KQ_mask (mask for 1 head, it will be broadcasted to all heads) struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); - offload_func_kq(KQ_mask); - ggml_set_name(KQ_mask, "KQ_mask"); - ggml_allocr_alloc(lctx.alloc, KQ_mask); - if (!ggml_allocr_is_measure(lctx.alloc)) { - float * data = (float *) KQ_mask->data; - memset(data, 0, ggml_nbytes(KQ_mask)); - - for (int h = 0; h < 1; ++h) { - for (int j = 0; j < n_tokens; ++j) { - const llama_pos pos = batch.pos[j]; - const llama_seq_id seq_id = batch.seq_id[j][0]; - - for (int i = 0; i < n_kv; ++i) { - if (!kv_self.cells[i].has_seq_id(seq_id) || kv_self.cells[i].pos > pos) { - data[h*(n_kv*n_tokens) + j*n_kv + i] = -INFINITY; - } - } - } - } - } + cb(KQ_mask, "KQ_mask", -1); - // KQ_pos - contains the positions - struct ggml_tensor * KQ_pos = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); - offload_func_kq(KQ_pos); - ggml_set_name(KQ_pos, "KQ_pos"); - ggml_allocr_alloc(lctx.alloc, KQ_pos); - if (!ggml_allocr_is_measure(lctx.alloc)) { - int * data = (int *) KQ_pos->data; - for (int i = 0; i < n_tokens; ++i) { - data[i] = batch.pos[i]; - } - } - - // shift the entire K-cache if needed - if (do_rope_shift) { - struct ggml_tensor * K_shift = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_ctx); - offload_func_kq(K_shift); - ggml_set_name(K_shift, "K_shift"); - ggml_allocr_alloc(lctx.alloc, K_shift); - if (!ggml_allocr_is_measure(lctx.alloc)) { - int * data = (int *) K_shift->data; - for (int i = 0; i < n_ctx; ++i) { - data[i] = kv_self.cells[i].delta; - } - } + pos = ggml_get_rows(ctx0, model.pos_embd, inp_pos); + cb(pos, "pos_embd", -1); - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * tmp = - ggml_rope_custom_inplace(ctx0, - ggml_view_3d(ctx0, kv_self.k, - n_embd_head, n_head_kv, n_ctx, - ggml_element_size(kv_self.k)*n_embd_head, - ggml_element_size(kv_self.k)*n_embd_gqa, - ggml_element_size(kv_self.k)*n_embd_gqa*n_ctx*il), - K_shift, n_embd_head, 2, 0, freq_base, freq_scale); - offload_func_kq(tmp); - ggml_build_forward_expand(gf, tmp); - } - } + inpL = ggml_add(ctx0, inpL, pos); + cb(inpL, "inpL", -1); for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * attn_norm; - - offload_func_t offload_func = llama_nop; - -#ifdef GGML_USE_CUBLAS - if (il >= i_gpu_start) { - offload_func = ggml_cuda_assign_buffers_no_alloc; - } -#endif // GGML_USE_CUBLAS + cur = llm_build_norm(ctx0, inpL, + model.layers[il].attn_norm, + model.layers[il].attn_norm_b, + LLM_NORM, norm_eps, cb, il); + cb(cur, "attn_norm", il); // self-attention - // TODO: refactor into common function (shared with LLaMA) { - attn_norm = ggml_norm(ctx0, inpL, norm_eps); - offload_func(attn_norm); - - attn_norm = ggml_add(ctx0, - ggml_mul(ctx0, attn_norm, model.layers[il].attn_norm), - model.layers[il].attn_norm_b); - offload_func(attn_norm->src[0]); - offload_func(attn_norm); - - if (model.layers[il].attn_norm_2) { // Falcon-40B - cur = ggml_norm(ctx0, inpL, norm_eps); - offload_func(cur); - - cur = ggml_add(ctx0, - ggml_mul(ctx0, cur, model.layers[il].attn_norm_2), - model.layers[il].attn_norm_2_b); - offload_func(cur->src[0]); - offload_func(cur); - } else { // Falcon 7B - cur = attn_norm; - } - - // compute QKV - cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); - offload_func_kq(cur); - - // Note that the strides for Kcur, Vcur are set up so that the - // resulting views are misaligned with the tensor's storage - // (by applying the K/V offset we shift the tensor's original - // view to stick out behind the viewed QKV tensor's allocated - // memory, so to say). This is ok because no actual accesses - // happen to that out-of-range memory, but it can require some - // trickery when trying to accurately dump these views for - // debugging. - - const size_t wsize = ggml_type_size(cur->type); - - // TODO: these 2 ggml_conts are technically not needed, but we add them until CUDA support for - // non-contiguous views is added for the rope operator - struct ggml_tensor * tmpq = ggml_cont(ctx0, ggml_view_3d( - ctx0, cur, n_embd_head, n_head, n_tokens, - wsize * n_embd_head, - wsize * n_embd_head * (n_head + 2 * n_head_kv), - 0)); - offload_func_kq(tmpq); - - struct ggml_tensor * tmpk = ggml_cont(ctx0, ggml_view_3d( - ctx0, cur, n_embd_head, n_head_kv, n_tokens, - wsize * n_embd_head, - wsize * n_embd_head * (n_head + 2 * n_head_kv), - wsize * n_embd_head * n_head)); - offload_func_kq(tmpk); - - struct ggml_tensor * tmpv = ggml_view_3d( - ctx0, cur, n_embd_head, n_head_kv, n_tokens, - wsize * n_embd_head, - wsize * n_embd_head * (n_head + 2 * n_head_kv), - wsize * n_embd_head * (n_head + n_head_kv)); - offload_func_v(tmpv); - - // using mode = 2 for neox mode - struct ggml_tensor * Qcur = ggml_rope_custom(ctx0, tmpq, KQ_pos, n_embd_head, 2, 0, freq_base, freq_scale); - offload_func_kq(Qcur); - struct ggml_tensor * Kcur = ggml_rope_custom(ctx0, tmpk, KQ_pos, n_embd_head, 2, 0, freq_base, freq_scale); - offload_func_kq(Kcur); - - { - struct ggml_tensor * Vcur = ggml_transpose(ctx0, ggml_reshape_2d(ctx0, ggml_cont(ctx0, tmpv), n_embd_gqa, n_tokens)); - offload_func_v(Vcur); - offload_func_v(Vcur->src[0]->src[0]); - ggml_set_name(Vcur, "Vcur"); - - struct ggml_tensor * k = ggml_view_1d(ctx0, kv_self.k, n_tokens*n_embd_gqa, (ggml_element_size(kv_self.k)*n_embd_gqa)*(il*n_ctx + kv_head)); - offload_func_kq(k); - ggml_set_name(k, "k"); - - struct ggml_tensor * v = ggml_view_2d(ctx0, kv_self.v, n_tokens, n_embd_gqa, - ( n_ctx)*ggml_element_size(kv_self.v), - (il*n_ctx)*ggml_element_size(kv_self.v)*n_embd_gqa + kv_head*ggml_element_size(kv_self.v)); - offload_func_v(v); - - ggml_build_forward_expand(gf, ggml_cpy(ctx0, Kcur, k)); - ggml_build_forward_expand(gf, ggml_cpy(ctx0, Vcur, v)); - } + cb(cur, "wqkv", il); - struct ggml_tensor * Q = ggml_permute(ctx0, Qcur, 0, 2, 1, 3); - offload_func_kq(Q); - ggml_set_name(Q, "Q"); - - struct ggml_tensor * K = - ggml_view_3d(ctx0, kv_self.k, - n_embd_head, n_kv, n_head_kv, - ggml_element_size(kv_self.k)*n_embd_gqa, - ggml_element_size(kv_self.k)*n_embd_head, - ggml_element_size(kv_self.k)*n_embd_gqa*n_ctx*il); - offload_func_kq(K); - ggml_set_name(K, "K"); - - struct ggml_tensor * KQ = ggml_mul_mat(ctx0, K, Q); - offload_func_kq(KQ); - ggml_set_name(KQ, "KQ"); - - struct ggml_tensor * KQ_scaled = ggml_scale(ctx0, KQ, KQ_scale); - offload_func_kq(KQ_scaled); - ggml_set_name(KQ_scaled, "KQ_scaled"); - - struct ggml_tensor * KQ_masked = ggml_add(ctx0, KQ_scaled, KQ_mask); - offload_func_kq(KQ_masked); - ggml_set_name(KQ_masked, "KQ_masked"); - - struct ggml_tensor * KQ_soft_max = ggml_soft_max(ctx0, KQ_masked); - offload_func_v(KQ_soft_max); - ggml_set_name(KQ_soft_max, "KQ_soft_max"); + cur = ggml_add(ctx0, cur, model.layers[il].bqkv); + cb(cur, "bqkv", il); - struct ggml_tensor * V = - ggml_view_3d(ctx0, kv_self.v, - n_kv, n_embd_head, n_head_kv, - ggml_element_size(kv_self.v)*n_ctx, - ggml_element_size(kv_self.v)*n_ctx*n_embd_head, - ggml_element_size(kv_self.v)*n_ctx*n_embd_gqa*il); - offload_func_v(V); - ggml_set_name(V, "V"); + struct ggml_tensor * Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); + struct ggml_tensor * Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); + struct ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); - struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V, KQ_soft_max); - offload_func_v(KQV); - ggml_set_name(KQV, "KQV"); + cb(Qcur, "Qcur", il); + cb(Kcur, "Kcur", il); + cb(Vcur, "Vcur", il); - struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3); - offload_func_v(KQV_merged); - ggml_set_name(KQV_merged, "KQV_merged"); + Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); - cur = ggml_cont_2d(ctx0, KQV_merged, n_embd, n_tokens); - offload_func_v(cur); - ggml_set_name(cur, "KQV_merged_contiguous"); + llm_build_kv_store(lctx, ctx0, gf, Kcur, Vcur, n_tokens, kv_head, cb, il); - cur = ggml_mul_mat(ctx0, model.layers[il].wo, cur); - offload_func(cur); - ggml_set_name(cur, "result_wo"); + cur = llm_build_kqv(lctx, ctx0, cur, + model.layers[il].wo, model.layers[il].bo, + Qcur, KQ_scale, KQ_mask, n_tokens, n_kv, -1.0f, cb, il); + cb(cur, "kqv_out", il); } - struct ggml_tensor * attn_out = cur; + // add the input + struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpL); + cb(ffn_inp, "ffn_inp", il); - // feed forward + // FF { - struct ggml_tensor * inpFF = attn_norm; + cur = llm_build_norm(ctx0, ffn_inp, + model.layers[il].ffn_norm, + model.layers[il].ffn_norm_b, + LLM_NORM, norm_eps, cb, il); + cb(cur, "ffn_norm", il); - cur = ggml_mul_mat(ctx0, model.layers[il].w3, inpFF); - offload_func(cur); - - cur = ggml_gelu(ctx0, cur); - offload_func(cur); - cur = ggml_mul_mat(ctx0, model.layers[il].w2, cur); - offload_func(cur); + cur = llm_build_ffn(ctx0, cur, + model.layers[il].ffn_up, model.layers[il].ffn_up_b, + NULL, NULL, + model.layers[il].ffn_down, model.layers[il].ffn_down_b, + LLM_FFN_GELU, LLM_FFN_SEQ, cb, il); + cb(cur, "ffn_out", il); } - cur = ggml_add(ctx0, cur, attn_out); - offload_func(cur); - cur = ggml_add(ctx0, cur, inpL); - offload_func(cur); - - // input for next layer - inpL = cur; + inpL = ggml_add(ctx0, cur, ffn_inp); + cb(inpL, "l_out", il); } - cur = inpL; - - // norm - { - cur = ggml_norm(ctx0, cur, norm_eps); - offload_func_nr(cur); - - cur = ggml_add(ctx0, - ggml_mul(ctx0, cur, model.output_norm), - model.output_norm_b); - ggml_set_name(cur, "result_norm"); - } + cur = llm_build_norm(ctx0, inpL, + model.output_norm, + model.output_norm_b, + LLM_NORM, norm_eps, cb, -1); + cb(cur, "result_norm", -1); cur = ggml_mul_mat(ctx0, model.output, cur); - ggml_set_name(cur, "result_output"); + cb(cur, "result_output", -1); ggml_build_forward_expand(gf, cur); - ggml_free(ctx0); return gf; } -static struct ggml_cgraph * llm_build_starcoder( +static struct ggml_cgraph * llm_build_persimmon( llama_context & lctx, - const llama_batch & batch) { - const auto & model = lctx.model; + const llama_batch & batch, + const llm_build_cb & cb, + bool worst_case) { + const auto & model = lctx.model; const auto & hparams = model.hparams; - const auto & cparams = lctx.cparams; const auto & kv_self = lctx.kv_self; GGML_ASSERT(!!kv_self.ctx); + const auto & cparams = lctx.cparams; + const int64_t n_embd = hparams.n_embd; const int64_t n_layer = hparams.n_layer; const int64_t n_ctx = cparams.n_ctx; - const int64_t n_head = hparams.n_head; const int64_t n_head_kv = hparams.n_head_kv; + const int64_t n_head = hparams.n_head; const int64_t n_embd_head = hparams.n_embd_head(); - const int64_t n_embd_gqa = hparams.n_embd_gqa(); - - GGML_ASSERT(n_embd_head == hparams.n_rot); + const int64_t n_rot = n_embd_head / 2; - const float norm_eps = hparams.f_norm_eps; + const float freq_base = cparams.rope_freq_base; + const float freq_scale = cparams.rope_freq_scale; + const float norm_eps = hparams.f_norm_eps; - const int n_gpu_layers = model.n_gpu_layers; + const int32_t n_tokens = batch.n_tokens; + const int32_t n_kv = worst_case ? n_ctx : kv_self.n; + const int32_t kv_head = worst_case ? n_ctx - n_tokens : kv_self.head; - const int32_t n_tokens = batch.n_tokens; - const int32_t n_kv = ggml_allocr_is_measure(lctx.alloc) ? n_ctx : kv_self.n; - const int32_t kv_head = ggml_allocr_is_measure(lctx.alloc) ? n_ctx - n_tokens : kv_self.head; + const bool do_rope_shift = worst_case || kv_self.has_shift; auto & buf_compute = lctx.buf_compute; @@ -4634,313 +4085,376 @@ static struct ggml_cgraph * llm_build_starcoder( ggml_cgraph * gf = ggml_new_graph(ctx0); struct ggml_tensor * cur; - struct ggml_tensor * token; - struct ggml_tensor * position; struct ggml_tensor * inpL; - if (batch.token) { - struct ggml_tensor * inp_tokens = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); - - ggml_allocr_alloc(lctx.alloc, inp_tokens); - if (!ggml_allocr_is_measure(lctx.alloc)) { - memcpy(inp_tokens->data, batch.token, n_tokens*ggml_element_size(inp_tokens)); - } - ggml_set_name(inp_tokens, "inp_tokens"); - - token = ggml_get_rows(ctx0, model.tok_embeddings, inp_tokens); - } else { -#ifdef GGML_USE_MPI - GGML_ASSERT(false && "not implemented"); -#endif - - token = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_embd, n_tokens); - - ggml_allocr_alloc(lctx.alloc, token); - if (!ggml_allocr_is_measure(lctx.alloc)) { - memcpy(token->data, batch.embd, n_tokens * n_embd * ggml_element_size(token)); - } - } - - const int i_gpu_start = n_layer - n_gpu_layers; - (void) i_gpu_start; - - // offload functions set the tensor output backend to GPU - // tensors are GPU-accelerated if any input or the output has been offloaded - offload_func_t offload_func_nr = llama_nop; // nr = non-repeating - offload_func_t offload_func_kq = llama_nop; - offload_func_t offload_func_v = llama_nop; - -#ifdef GGML_USE_CUBLAS - if (n_gpu_layers > n_layer) { - offload_func_nr = ggml_cuda_assign_buffers_no_alloc; - } - if (n_gpu_layers > n_layer + 1) { - offload_func_v = ggml_cuda_assign_buffers_no_alloc; - } - if (n_gpu_layers > n_layer + 2) { - offload_func_kq = ggml_cuda_assign_buffers_no_alloc; - } -#endif // GGML_USE_CUBLAS - - { - // Compute position embeddings. - struct ggml_tensor * inp_positions = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); - ggml_allocr_alloc(lctx.alloc, inp_positions); - if (!ggml_allocr_is_measure(lctx.alloc)) { - for (int i = 0; i < n_tokens; ++i) { - ((int32_t *) inp_positions->data)[i] = batch.pos[i]; - } - } - ggml_set_name(inp_positions, "inp_positions"); + inpL = llm_build_inp_embd(ctx0, batch, model.tok_embd, n_embd, n_tokens, cb); + cb(inpL, "imp_embd", -1); - position = ggml_get_rows(ctx0, model.pos_embeddings, inp_positions); - } + struct ggml_tensor * inp_pos = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); + cb(inp_pos, "inp_pos", -1); // KQ_scale struct ggml_tensor * KQ_scale = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); - ggml_set_name(KQ_scale, "1/sqrt(n_embd_head)"); - ggml_allocr_alloc(lctx.alloc, KQ_scale); - if (!ggml_allocr_is_measure(lctx.alloc)) { - ggml_set_f32(KQ_scale, 1.0f/sqrtf(float(n_embd)/n_head)); - } + cb(KQ_scale, "KQ_scale", -1); - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); - ggml_set_name(KQ_mask, "KQ_mask"); - offload_func_kq(KQ_mask); - ggml_allocr_alloc(lctx.alloc, KQ_mask); - if (!ggml_allocr_is_measure(lctx.alloc)) { - float * data = (float *) KQ_mask->data; - memset(data, 0, ggml_nbytes(KQ_mask)); - - for (int h = 0; h < 1; ++h) { - for (int j = 0; j < n_tokens; ++j) { - const llama_pos pos = batch.pos[j]; - const llama_seq_id seq_id = batch.seq_id[j][0]; - - for (int i = 0; i < n_kv; ++i) { - if (!kv_self.cells[i].has_seq_id(seq_id) || kv_self.cells[i].pos > pos) { - data[h*(n_kv*n_tokens) + j*n_kv + i] = -INFINITY; - } - } - } - } - } + cb(KQ_mask, "KQ_mask", -1); - inpL = ggml_add(ctx0, token, position); - ggml_set_name(inpL, "inpL"); + if (do_rope_shift) { + llm_build_k_shift(lctx, ctx0, gf, n_rot, LLM_ROPE_NEOX, cb); + } for (int il = 0; il < n_layer; ++il) { - offload_func_t offload_func = llama_nop; + struct ggml_tensor * residual = inpL; -#ifdef GGML_USE_CUBLAS - if (il >= i_gpu_start) { - offload_func = ggml_cuda_assign_buffers_no_alloc; - } -#endif // GGML_USE_CUBLAS + cur = llm_build_norm(ctx0, inpL, + model.layers[il].attn_norm, + model.layers[il].attn_norm_b, + LLM_NORM, norm_eps, cb, il); + cb(cur, "attn_norm", il); + // self attention { - // Norm - cur = ggml_norm(ctx0, inpL, norm_eps); - offload_func(cur); + cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); + cb(cur, "wqkv", il); + + cur = ggml_add(ctx0, cur, model.layers[il].bqkv); + cb(cur, "bqkv", il); + + // split qkv + GGML_ASSERT(n_head_kv == n_head); + + struct ggml_tensor * tmpqkv = ggml_reshape_4d(ctx0, cur, n_embd_head, 3, n_head, n_tokens); + cb(tmpqkv, "tmpqkv", il); + + struct ggml_tensor * tmpqkv_perm = ggml_cont(ctx0, ggml_permute(ctx0, tmpqkv, 0, 3, 1, 2)); + cb(tmpqkv_perm, "tmpqkv", il); + + struct ggml_tensor * tmpq = ggml_view_3d( + ctx0, tmpqkv_perm, n_embd_head, n_head, n_tokens, + ggml_element_size(tmpqkv_perm) * n_embd_head, + ggml_element_size(tmpqkv_perm) * n_embd_head * n_head, + 0 + ); + cb(tmpq, "tmpq", il); + + struct ggml_tensor * tmpk = ggml_view_3d( + ctx0, tmpqkv_perm, n_embd_head, n_head, n_tokens, + ggml_element_size(tmpqkv_perm) * n_embd_head, + ggml_element_size(tmpqkv_perm) * n_embd_head * n_head, + ggml_element_size(tmpqkv_perm) * n_embd_head * n_head * n_tokens + ); + cb(tmpk, "tmpk", il); + + // Q/K Layernorm + tmpq = llm_build_norm(ctx0, tmpq, + model.layers[il].attn_q_norm, + model.layers[il].attn_q_norm_b, + LLM_NORM, norm_eps, cb, il); + cb(tmpq, "tmpq", il); + + tmpk = llm_build_norm(ctx0, tmpk, + model.layers[il].attn_k_norm, + model.layers[il].attn_k_norm_b, + LLM_NORM, norm_eps, cb, il); + cb(tmpk, "tmpk", il); + + // RoPE the first n_rot of q/k, pass the other half, and concat. + struct ggml_tensor * qrot = ggml_view_3d( + ctx0, tmpq, n_rot, n_head, n_tokens, + ggml_element_size(tmpq) * n_embd_head, + ggml_element_size(tmpq) * n_embd_head * n_head, + 0 + ); + cb(qrot, "qrot", il); + + struct ggml_tensor * krot = ggml_view_3d( + ctx0, tmpk, n_rot, n_head, n_tokens, + ggml_element_size(tmpk) * n_embd_head, + ggml_element_size(tmpk) * n_embd_head * n_head, + 0 + ); + cb(krot, "krot", il); + + // get the second half of tmpq, e.g tmpq[n_rot:, :, :] + struct ggml_tensor * qpass = ggml_view_3d( + ctx0, tmpq, n_rot, n_head, n_tokens, + ggml_element_size(tmpq) * n_embd_head, + ggml_element_size(tmpq) * n_embd_head * n_head, + ggml_element_size(tmpq) * n_rot + ); + cb(qpass, "qpass", il); + + struct ggml_tensor * kpass = ggml_view_3d( + ctx0, tmpk, n_rot, n_head, n_tokens, + ggml_element_size(tmpk) * n_embd_head, + ggml_element_size(tmpk) * n_embd_head * n_head, + ggml_element_size(tmpk) * n_rot + ); + cb(kpass, "kpass", il); + + struct ggml_tensor * qrotated = ggml_rope_custom( + ctx0, qrot, inp_pos, n_rot, 2, 0, freq_base, freq_scale + ); + cb(qrotated, "qrotated", il); + + struct ggml_tensor * krotated = ggml_rope_custom( + ctx0, krot, inp_pos, n_rot, 2, 0, freq_base, freq_scale + ); + cb(krotated, "krotated", il); + + // ggml currently only supports concatenation on dim=2 + // so we need to permute qrot, qpass, concat, then permute back. + qrotated = ggml_cont(ctx0, ggml_permute(ctx0, qrotated, 2, 1, 0, 3)); + cb(qrotated, "qrotated", il); + + krotated = ggml_cont(ctx0, ggml_permute(ctx0, krotated, 2, 1, 0, 3)); + cb(krotated, "krotated", il); + + qpass = ggml_cont(ctx0, ggml_permute(ctx0, qpass, 2, 1, 0, 3)); + cb(qpass, "qpass", il); + + kpass = ggml_cont(ctx0, ggml_permute(ctx0, kpass, 2, 1, 0, 3)); + cb(kpass, "kpass", il); + + struct ggml_tensor * Qcur = ggml_concat(ctx0, qrotated, qpass); + cb(Qcur, "Qcur", il); - cur = ggml_add(ctx0, ggml_mul(ctx0, cur, model.layers[il].attn_norm), model.layers[il].attn_norm_b); - offload_func(cur); + struct ggml_tensor * Kcur = ggml_concat(ctx0, krotated, kpass); + cb(Kcur, "Kcur", il); + + struct ggml_tensor * Q = ggml_cont(ctx0, ggml_permute(ctx0, Qcur, 1, 2, 0, 3)); + cb(Q, "Q", il); + + Kcur = ggml_cont(ctx0, ggml_permute(ctx0, Kcur, 2, 1, 0, 3)); + cb(Kcur, "Kcur", il); + + struct ggml_tensor * Vcur = ggml_view_3d( + ctx0, tmpqkv_perm, n_embd_head, n_head, n_tokens, + ggml_element_size(tmpqkv_perm) * n_embd_head, + ggml_element_size(tmpqkv_perm) * n_embd_head * n_head, + ggml_element_size(tmpqkv_perm) * n_embd_head * n_head * n_tokens * 2 + ); + cb(Vcur, "Vcur", il); + + llm_build_kv_store(lctx, ctx0, gf, Kcur, Vcur, n_tokens, kv_head, cb, il); + + // TODO: not tested, could be broken + cur = llm_build_kqv(lctx, ctx0, Q, + model.layers[il].wo, model.layers[il].bo, + Q, KQ_scale, KQ_mask, n_tokens, n_kv, -1.0f, cb, il); + cb(cur, "kqv_out", il); } + struct ggml_tensor * ffn_inp = ggml_add(ctx0, residual, cur); + cb(ffn_inp, "ffn_inp", il); + + // feed-forward network { - // Self Attention - cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); - offload_func_kq(cur); + cur = llm_build_norm(ctx0, ffn_inp, + model.layers[il].ffn_norm, + model.layers[il].ffn_norm_b, + LLM_NORM, norm_eps, cb, il); + cb(cur, "ffn_norm", il); - cur = ggml_add(ctx0, cur, model.layers[il].bqkv); - offload_func_kq(cur); + cur = llm_build_ffn(ctx0, cur, + model.layers[il].ffn_up, model.layers[il].ffn_up_b, + NULL, NULL, + model.layers[il].ffn_down, model.layers[il].ffn_down_b, + LLM_FFN_RELU_SQR, LLM_FFN_SEQ, cb, il); + cb(cur, "ffn_out", il); + } + + cur = ggml_add(ctx0, cur, ffn_inp); + cb(cur, "l_out", il); - struct ggml_tensor * tmpq = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); - struct ggml_tensor * tmpk = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); - struct ggml_tensor * tmpv = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); + inpL = cur; + } - ggml_set_name(tmpq, "tmpq"); - ggml_set_name(tmpk, "tmpk"); - ggml_set_name(tmpv, "tmpv"); + cur = inpL; - offload_func_kq(tmpq); - offload_func_kq(tmpk); - offload_func_v (tmpv); + cur = llm_build_norm(ctx0, cur, + model.output_norm, + model.output_norm_b, + LLM_NORM, norm_eps, cb, -1); + cb(cur, "result_norm", -1); - struct ggml_tensor * Qcur = ggml_reshape_3d(ctx0, tmpq, n_embd_head, n_head, n_tokens); - struct ggml_tensor * Kcur = tmpk; + cur = ggml_mul_mat(ctx0, model.output, cur); + cb(cur, "result_output", -1); - { - struct ggml_tensor * Vcur = ggml_transpose(ctx0, tmpv); - offload_func_v(Vcur); - ggml_set_name(Vcur, "Vcur"); - - struct ggml_tensor * k = ggml_view_1d(ctx0, kv_self.k, n_tokens*n_embd_gqa, (ggml_element_size(kv_self.k)*n_embd_gqa)*(il*n_ctx + kv_head)); - offload_func_kq(k); - ggml_set_name(k, "k"); - - struct ggml_tensor * v = ggml_view_2d(ctx0, kv_self.v, n_tokens, n_embd_gqa, - ( n_ctx)*ggml_element_size(kv_self.v), - (il*n_ctx)*ggml_element_size(kv_self.v)*n_embd_gqa + kv_head*ggml_element_size(kv_self.v)); - offload_func_v(v); - ggml_set_name(v, "v"); - - ggml_build_forward_expand(gf, ggml_cpy(ctx0, Kcur, k)); - ggml_build_forward_expand(gf, ggml_cpy(ctx0, Vcur, v)); - } + ggml_build_forward_expand(gf, cur); - struct ggml_tensor * Q = ggml_permute(ctx0, Qcur, 0, 2, 1, 3); - offload_func_kq(Q); - ggml_set_name(Q, "Q"); + ggml_free(ctx0); - struct ggml_tensor * K = - ggml_view_3d(ctx0, kv_self.k, - n_embd_head, n_kv, n_head_kv, - ggml_element_size(kv_self.k)*n_embd_gqa, - ggml_element_size(kv_self.k)*n_embd_head, - ggml_element_size(kv_self.k)*n_embd_gqa*n_ctx*il); - offload_func_kq(K); - ggml_set_name(K, "K"); - - // K * Q - struct ggml_tensor * KQ = ggml_mul_mat(ctx0, K, Q); - offload_func_kq(KQ); - ggml_set_name(KQ, "KQ"); - - // KQ_scaled = KQ / sqrt(n_embd_head) - // KQ_scaled shape [n_past + n_tokens, n_tokens, n_head, 1] - struct ggml_tensor * KQ_scaled = ggml_scale_inplace(ctx0, KQ, KQ_scale); - offload_func_kq(KQ_scaled); - ggml_set_name(KQ_scaled, "KQ_scaled"); - - // KQ_masked = mask_past(KQ_scaled) - struct ggml_tensor * KQ_masked = ggml_add(ctx0, KQ_scaled, KQ_mask); - offload_func_kq(KQ_masked); - ggml_set_name(KQ_masked, "KQ_masked"); - - // KQ = soft_max(KQ_masked) - struct ggml_tensor * KQ_soft_max = ggml_soft_max_inplace(ctx0, KQ_masked); - offload_func_v(KQ_soft_max); - ggml_set_name(KQ_soft_max, "KQ_soft_max"); - - // split cached V into n_head heads - struct ggml_tensor * V = - ggml_view_3d(ctx0, kv_self.v, - n_kv, n_embd_head, n_head_kv, - ggml_element_size(kv_self.v)*n_ctx, - ggml_element_size(kv_self.v)*n_ctx*n_embd_head, - ggml_element_size(kv_self.v)*n_ctx*n_embd_gqa*il); - ggml_set_name(V, "V"); - - struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V, KQ_soft_max); - offload_func_v(KQV); - ggml_set_name(KQV, "KQV"); - - struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3); - offload_func_v(KQV_merged); - ggml_set_name(KQV_merged, "KQV_merged"); - - cur = ggml_cont_2d(ctx0, KQV_merged, n_embd, n_tokens); - offload_func_v(cur); - ggml_set_name(cur, "KQV_merged_contiguous"); - } - - // Projection - cur = ggml_add(ctx0, ggml_mul_mat(ctx0, model.layers[il].wo, cur), model.layers[il].bo); - offload_func(cur); + return gf; +} - // Add the input - cur = ggml_add(ctx0, cur, inpL); - offload_func(cur); +static struct ggml_cgraph * llm_build_refact( + llama_context & lctx, + const llama_batch & batch, + const llm_build_cb & cb, + bool worst_case) { + const auto & model = lctx.model; + const auto & hparams = model.hparams; + const auto & cparams = lctx.cparams; - struct ggml_tensor * inpFF = cur; + const auto & kv_self = lctx.kv_self; - // FF + GGML_ASSERT(!!kv_self.ctx); + + const int64_t n_embd = hparams.n_embd; + const int64_t n_layer = hparams.n_layer; + const int64_t n_ctx = cparams.n_ctx; + const int64_t n_head = hparams.n_head; + const int64_t n_head_kv = hparams.n_head_kv; + const int64_t n_embd_head = hparams.n_embd_head(); + + const float norm_rms_eps = hparams.f_norm_rms_eps; + + const int32_t n_tokens = batch.n_tokens; + const int32_t n_kv = worst_case ? n_ctx : kv_self.n; + const int32_t kv_head = worst_case ? n_ctx - n_tokens : kv_self.head; + + auto & buf_compute = lctx.buf_compute; + + struct ggml_init_params params = { + /*.mem_size =*/ buf_compute.size, + /*.mem_buffer =*/ buf_compute.data, + /*.no_alloc =*/ true, + }; + + struct ggml_context * ctx0 = ggml_init(params); + + ggml_cgraph * gf = ggml_new_graph(ctx0); + + struct ggml_tensor * cur; + struct ggml_tensor * inpL; + + inpL = llm_build_inp_embd(ctx0, batch, model.tok_embd, n_embd, n_tokens, cb); + cb(inpL, "inp_embd", -1); + + // KQ_scale + struct ggml_tensor * KQ_scale = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); + cb(KQ_scale, "KQ_scale", -1); + + // KQ_mask (mask for 1 head, it will be broadcasted to all heads) + struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); + cb(KQ_mask, "KQ_mask", -1); + + for (int il = 0; il < n_layer; ++il) { + struct ggml_tensor * inpSA = inpL; + + cur = llm_build_norm(ctx0, inpL, + model.layers[il].attn_norm, NULL, + LLM_NORM_RMS, norm_rms_eps, cb, il); + cb(cur, "attn_norm", il); + + // self-attention { - // Norm - { - cur = ggml_norm(ctx0, inpFF, norm_eps); - offload_func_nr(cur); + struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); + cb(Qcur, "Qcur", il); - cur = ggml_add(ctx0, ggml_mul(ctx0, cur, model.layers[il].ffn_norm), model.layers[il].ffn_norm_b); - offload_func_nr(cur); - } + struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); + cb(Kcur, "Kcur", il); + + struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); + cb(Vcur, "Vcur", il); - cur = ggml_add(ctx0, ggml_mul_mat(ctx0, model.layers[il].w3, cur), model.layers[il].b3); - offload_func(cur); + Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); + cb(Kcur, "Kcur", il); - // GELU activation - cur = ggml_gelu(ctx0, cur); - offload_func(cur); + Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); + cb(Qcur, "Qcur", il); - // Projection - cur = ggml_add(ctx0, ggml_mul_mat(ctx0, model.layers[il].w2, cur), model.layers[il].b2); - offload_func(cur); + llm_build_kv_store(lctx, ctx0, gf, Kcur, Vcur, n_tokens, kv_head, cb, il); + + cur = llm_build_kqv(lctx, ctx0, Qcur, + model.layers[il].wo, NULL, + Qcur, KQ_scale, KQ_mask, n_tokens, n_kv, 8.0f, cb, il); + cb(cur, "kqv_out", il); } - inpL = ggml_add(ctx0, cur, inpFF); + struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); + cb(ffn_inp, "ffn_inp", il); - } + // feed-forward network + { + cur = llm_build_norm(ctx0, ffn_inp, + model.layers[il].ffn_norm, NULL, + LLM_NORM_RMS, norm_rms_eps, cb, il); + cb(cur, "ffn_norm", il); - // Output Norm - { - cur = ggml_norm(ctx0, inpL, norm_eps); - offload_func_nr(cur); + cur = llm_build_ffn(ctx0, cur, + model.layers[il].ffn_up, NULL, + model.layers[il].ffn_gate, NULL, + model.layers[il].ffn_down, NULL, + LLM_FFN_SILU, LLM_FFN_PAR, cb, il); + cb(cur, "ffn_out", il); + } + + cur = ggml_add(ctx0, cur, ffn_inp); + cb(cur, "l_out", il); - cur = ggml_add(ctx0, ggml_mul(ctx0, cur, model.output_norm), model.output_norm_b); - ggml_set_name(cur, "result_norm"); + // input for next layer + inpL = cur; } + cur = inpL; + + cur = llm_build_norm(ctx0, cur, + model.output_norm, NULL, + LLM_NORM_RMS, norm_rms_eps, cb, -1); + cb(cur, "result_norm", -1); + + // lm_head cur = ggml_mul_mat(ctx0, model.output, cur); - ggml_set_name(cur, "result_output"); + cb(cur, "result_output", -1); ggml_build_forward_expand(gf, cur); + ggml_free(ctx0); return gf; } -static struct ggml_cgraph * llm_build_persimmon( +static struct ggml_cgraph * llm_build_bloom( llama_context & lctx, - const llama_batch & batch) { - const auto & model = lctx.model; + const llama_batch & batch, + const llm_build_cb & cb, + bool worst_case) { + const auto & model = lctx.model; const auto & hparams = model.hparams; + const auto & cparams = lctx.cparams; const auto & kv_self = lctx.kv_self; GGML_ASSERT(!!kv_self.ctx); - const auto & cparams = lctx.cparams; const int64_t n_embd = hparams.n_embd; const int64_t n_layer = hparams.n_layer; const int64_t n_ctx = cparams.n_ctx; - const int64_t n_head_kv = hparams.n_head_kv; const int64_t n_head = hparams.n_head; const int64_t n_embd_head = hparams.n_embd_head(); const int64_t n_embd_gqa = hparams.n_embd_gqa(); - const size_t n_rot = n_embd_head / 2; - - const float freq_base = cparams.rope_freq_base; - const float freq_scale = cparams.rope_freq_scale; - const float norm_eps = hparams.f_norm_eps; - - const int n_gpu_layers = model.n_gpu_layers; + GGML_ASSERT(n_embd_head == hparams.n_rot); - const int32_t n_tokens = batch.n_tokens; - const int32_t n_kv = ggml_allocr_is_measure(lctx.alloc) ? n_ctx : kv_self.n; - const int32_t kv_head = ggml_allocr_is_measure(lctx.alloc) ? n_ctx - n_tokens : kv_self.head; + const float norm_eps = hparams.f_norm_eps; - const bool do_rope_shift = ggml_allocr_is_measure(lctx.alloc) || kv_self.has_shift; + const int32_t n_tokens = batch.n_tokens; + const int32_t n_kv = worst_case ? n_ctx : kv_self.n; + const int32_t kv_head = worst_case ? n_ctx - n_tokens : kv_self.head; auto & buf_compute = lctx.buf_compute; + struct ggml_init_params params = { /*.mem_size =*/ buf_compute.size, /*.mem_buffer =*/ buf_compute.data, - /*.no_alloc =*/ true, + /*.no_alloc =*/ false, }; + params.no_alloc = true; + struct ggml_context * ctx0 = ggml_init(params); ggml_cgraph * gf = ggml_new_graph(ctx0); @@ -4948,359 +4462,101 @@ static struct ggml_cgraph * llm_build_persimmon( struct ggml_tensor * cur; struct ggml_tensor * inpL; - if (batch.token) { - struct ggml_tensor * inp_tokens = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); + inpL = llm_build_inp_embd(ctx0, batch, model.tok_embd, n_embd, n_tokens, cb); + cb(inpL, "inp_embd", -1); - ggml_allocr_alloc(lctx.alloc, inp_tokens); - if (!ggml_allocr_is_measure(lctx.alloc)) { - memcpy(inp_tokens->data, batch.token, n_tokens*ggml_element_size(inp_tokens)); - } - ggml_set_name(inp_tokens, "inp_tokens"); - inpL = ggml_get_rows(ctx0, model.tok_embeddings, inp_tokens); - } else { - inpL = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_embd, n_tokens); - ggml_allocr_alloc(lctx.alloc, inpL); - if (!ggml_allocr_is_measure(lctx.alloc)) { - memcpy(inpL->data, batch.embd, n_tokens * n_embd * ggml_element_size(inpL)); - } - } - const int i_gpu_start = n_layer - n_gpu_layers; - (void) i_gpu_start; - offload_func_t offload_func_nr = llama_nop; // nr = non-repeating - offload_func_t offload_func_kq = llama_nop; - offload_func_t offload_func_v = llama_nop; // KQ_scale struct ggml_tensor * KQ_scale = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); - ggml_allocr_alloc(lctx.alloc, KQ_scale); - if (!ggml_allocr_is_measure(lctx.alloc)) { - ggml_set_f32(KQ_scale, 1.0f/sqrtf(float(n_embd_head))); - } - ggml_set_name(KQ_scale, "1/sqrt(n_embd_head)"); + cb(KQ_scale, "KQ_scale", -1); + + // KQ_mask (mask for 1 head, it will be broadcasted to all heads) struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); - offload_func_kq(KQ_mask); - ggml_set_name(KQ_mask, "KQ_mask"); - ggml_allocr_alloc(lctx.alloc, KQ_mask); - - if (!ggml_allocr_is_measure(lctx.alloc)) { - float * data = (float *) KQ_mask->data; - memset(data, 0, ggml_nbytes(KQ_mask)); - for (int h = 0; h < 1; ++h) { - for (int j = 0; j < n_tokens; ++j) { - const llama_pos pos = batch.pos[j]; - const llama_seq_id seq_id = batch.seq_id[j][0]; - for (int i = 0; i < n_kv; ++i) { - if (!kv_self.cells[i].has_seq_id(seq_id) || kv_self.cells[i].pos > pos) { - data[h*(n_kv*n_tokens) + j*n_kv + i] = -INFINITY; - } - } - } - } - } + cb(KQ_mask, "KQ_mask", -1); - struct ggml_tensor * KQ_pos = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); - offload_func_kq(KQ_pos); - ggml_set_name(KQ_pos, "KQ_pos"); - ggml_allocr_alloc(lctx.alloc, KQ_pos); - if (!ggml_allocr_is_measure(lctx.alloc)) { - int * data = (int *) KQ_pos->data; - for (int i = 0; i < n_tokens; ++i) { - data[i] = batch.pos[i]; - } - } - if (do_rope_shift) { - struct ggml_tensor * K_shift = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_ctx); - offload_func_kq(K_shift); - ggml_set_name(K_shift, "K_shift"); - ggml_allocr_alloc(lctx.alloc, K_shift); - if (!ggml_allocr_is_measure(lctx.alloc)) { - int * data = (int *) K_shift->data; - for (int i = 0; i < n_ctx; ++i) { - data[i] = kv_self.cells[i].delta; - } - } - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * tmp = - // we rotate only the first n_rot dimensions. - ggml_rope_custom_inplace(ctx0, - ggml_view_3d(ctx0, kv_self.k, - n_rot, n_head, n_ctx, - ggml_element_size(kv_self.k)*n_embd_gqa, - ggml_element_size(kv_self.k)*n_embd_head, - ggml_element_size(kv_self.k)*(n_embd_head*n_ctx*il) - ), - K_shift, n_rot, 2, 0, freq_base, freq_scale); - offload_func_kq(tmp); - ggml_build_forward_expand(gf, tmp); - } - } - for (int il=0; il < n_layer; ++il) { - struct ggml_tensor * residual = inpL; - offload_func_t offload_func = llama_nop; - { - cur = ggml_norm(ctx0, inpL, norm_eps); - offload_func(cur); - cur = ggml_mul(ctx0, cur, model.layers[il].attn_norm); - offload_func(cur); - cur = ggml_add(ctx0, cur, model.layers[il].attn_norm_b); - offload_func(cur); - ggml_format_name(cur, "input_layernorm_%d", il); - } - // self attention + inpL = llm_build_norm(ctx0, inpL, + model.tok_norm, + model.tok_norm_b, + LLM_NORM, norm_eps, cb, -1); + cb(inpL, "inp_norm", -1); + + for (int il = 0; il < n_layer; ++il) { + cur = llm_build_norm(ctx0, inpL, + model.layers[il].attn_norm, + model.layers[il].attn_norm_b, + LLM_NORM, norm_eps, cb, il); + cb(cur, "attn_norm", il); + + // self-attention { cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); - offload_func_kq(cur); - cur = ggml_add(ctx0, cur, model.layers[il].bqkv); - offload_func_kq(cur); + cb(cur, "wqkv", il); - // split qkv - GGML_ASSERT(n_head_kv == n_head); - ggml_set_name(cur, format("qkv_%d", il).c_str()); - struct ggml_tensor * tmpqkv = ggml_reshape_4d(ctx0, cur, n_embd_head, 3, n_head, n_tokens); - offload_func_kq(tmpqkv); - struct ggml_tensor * tmpqkv_perm = ggml_cont(ctx0, ggml_permute(ctx0, tmpqkv, 0, 3, 1, 2)); - offload_func_kq(tmpqkv_perm); - ggml_format_name(tmpqkv_perm, "tmpqkv_perm_%d", il); - struct ggml_tensor * tmpq = ggml_view_3d( - ctx0, tmpqkv_perm, n_embd_head, n_head, n_tokens, - ggml_element_size(tmpqkv_perm) * n_embd_head, - ggml_element_size(tmpqkv_perm) * n_embd_head * n_head, - 0 - ); - offload_func_kq(tmpq); - struct ggml_tensor * tmpk = ggml_view_3d( - ctx0, tmpqkv_perm, n_embd_head, n_head, n_tokens, - ggml_element_size(tmpqkv_perm) * n_embd_head, - ggml_element_size(tmpqkv_perm) * n_embd_head * n_head, - ggml_element_size(tmpqkv_perm) * n_embd_head * n_head * n_tokens - ); - offload_func_kq(tmpk); - // Q/K Layernorm - tmpq = ggml_norm(ctx0, tmpq, norm_eps); - offload_func_kq(tmpq); - tmpq = ggml_mul(ctx0, tmpq, model.layers[il].attn_q_norm); - offload_func_kq(tmpq); - tmpq = ggml_add(ctx0, tmpq, model.layers[il].attn_q_norm_b); - offload_func_kq(tmpq); - - tmpk = ggml_norm(ctx0, tmpk, norm_eps); - offload_func_v(tmpk); - tmpk = ggml_mul(ctx0, tmpk, model.layers[il].attn_k_norm); - offload_func_v(tmpk); - tmpk = ggml_add(ctx0, tmpk, model.layers[il].attn_k_norm_b); - offload_func_v(tmpk); + cur = ggml_add(ctx0, cur, model.layers[il].bqkv); + cb(cur, "bqkv", il); - // RoPE the first n_rot of q/k, pass the other half, and concat. - struct ggml_tensor * qrot = ggml_view_3d( - ctx0, tmpq, n_rot, n_head, n_tokens, - ggml_element_size(tmpq) * n_embd_head, - ggml_element_size(tmpq) * n_embd_head * n_head, - 0 - ); - offload_func_kq(qrot); - ggml_format_name(qrot, "qrot_%d", il); - struct ggml_tensor * krot = ggml_view_3d( - ctx0, tmpk, n_rot, n_head, n_tokens, - ggml_element_size(tmpk) * n_embd_head, - ggml_element_size(tmpk) * n_embd_head * n_head, - 0 - ); - offload_func_kq(krot); - ggml_format_name(krot, "krot_%d", il); + struct ggml_tensor * Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); + struct ggml_tensor * Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); + struct ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); - // get the second half of tmpq, e.g tmpq[n_rot:, :, :] - struct ggml_tensor * qpass = ggml_view_3d( - ctx0, tmpq, n_rot, n_head, n_tokens, - ggml_element_size(tmpq) * n_embd_head, - ggml_element_size(tmpq) * n_embd_head * n_head, - ggml_element_size(tmpq) * n_rot - ); - offload_func_kq(qpass); - ggml_format_name(qpass, "qpass_%d", il); - struct ggml_tensor * kpass = ggml_view_3d( - ctx0, tmpk, n_rot, n_head, n_tokens, - ggml_element_size(tmpk) * n_embd_head, - ggml_element_size(tmpk) * n_embd_head * n_head, - ggml_element_size(tmpk) * n_rot - ); - offload_func_kq(kpass); - ggml_format_name(kpass, "kpass_%d", il); + cb(Qcur, "Qcur", il); + cb(Kcur, "Kcur", il); + cb(Vcur, "Vcur", il); - struct ggml_tensor * qrotated = ggml_rope_custom( - ctx0, qrot, KQ_pos, n_rot, 2, 0, freq_base, freq_scale - ); - offload_func_kq(qrotated); - struct ggml_tensor * krotated = ggml_rope_custom( - ctx0, krot, KQ_pos, n_rot, 2, 0, freq_base, freq_scale - ); - offload_func_kq(krotated); - // ggml currently only supports concatenation on dim=2 - // so we need to permute qrot, qpass, concat, then permute back. - qrotated = ggml_cont(ctx0, ggml_permute(ctx0, qrotated, 2, 1, 0, 3)); - offload_func_kq(qrotated); - krotated = ggml_cont(ctx0, ggml_permute(ctx0, krotated, 2, 1, 0, 3)); - offload_func_kq(krotated); + Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); - qpass = ggml_cont(ctx0, ggml_permute(ctx0, qpass, 2, 1, 0, 3)); - offload_func_kq(qpass); - kpass = ggml_cont(ctx0, ggml_permute(ctx0, kpass, 2, 1, 0, 3)); - offload_func_kq(kpass); + llm_build_kv_store(lctx, ctx0, gf, Kcur, Vcur, n_tokens, kv_head, cb, il); - struct ggml_tensor * Qcur = ggml_concat(ctx0, qrotated, qpass); - offload_func_kq(Qcur); - struct ggml_tensor * Kcur = ggml_concat(ctx0, krotated, kpass); - offload_func_kq(Kcur); + cur = llm_build_kqv(lctx, ctx0, Qcur, + model.layers[il].wo, model.layers[il].bo, + Qcur, KQ_scale, KQ_mask, n_tokens, n_kv, 8.0f, cb, il); + cb(cur, "kqv_out", il); + } - struct ggml_tensor * Q = ggml_cont(ctx0, ggml_permute(ctx0, Qcur, 1, 2, 0, 3)); - offload_func_kq(Q); + // Add the input + struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpL); + cb(ffn_inp, "ffn_inp", il); - Kcur = ggml_cont(ctx0, ggml_permute(ctx0, Kcur, 2, 1, 0, 3)); - offload_func_kq(Kcur); - { - struct ggml_tensor * tmpv = ggml_view_3d( - ctx0, tmpqkv_perm, n_embd_head, n_head, n_tokens, - ggml_element_size(tmpqkv_perm) * n_embd_head, - ggml_element_size(tmpqkv_perm) * n_embd_head * n_head, - ggml_element_size(tmpqkv_perm) * n_embd_head * n_head * n_tokens * 2 - ); - offload_func_v(tmpv); - // store K, V in cache - struct ggml_tensor * Vcur = ggml_transpose(ctx0, ggml_reshape_2d(ctx0, tmpv, n_embd_gqa, n_tokens)); - offload_func_v(Vcur); - ggml_set_name(Vcur, "Vcur"); - - struct ggml_tensor * k = ggml_view_1d( - ctx0, kv_self.k, n_tokens*n_embd_gqa, - (ggml_element_size(kv_self.k)*n_embd_gqa)*(il*n_ctx + kv_head) - ); - offload_func_kq(k); - ggml_set_name(k, "k"); - - struct ggml_tensor * v = ggml_view_2d(ctx0, kv_self.v, n_tokens, n_embd_gqa, - ( n_ctx)*ggml_element_size(kv_self.v), - (il*n_ctx)*ggml_element_size(kv_self.v)*n_embd_gqa + kv_head*ggml_element_size(kv_self.v)); - offload_func_v(v); - ggml_set_name(v, "v"); - - // important: storing RoPE-ed version of K in the KV cache! - ggml_build_forward_expand(gf, ggml_cpy(ctx0, Kcur, k)); - ggml_build_forward_expand(gf, ggml_cpy(ctx0, Vcur, v)); - } - struct ggml_tensor * K = ggml_view_3d(ctx0, kv_self.k, - n_embd_head, n_kv, n_head_kv, - ggml_element_size(kv_self.k)*n_embd_gqa, - ggml_element_size(kv_self.k)*n_embd_head, - ggml_element_size(kv_self.k)*n_embd_gqa*n_ctx*il); - - offload_func_kq(K); - ggml_format_name(K, "K_%d", il); - - struct ggml_tensor * KQ = ggml_mul_mat(ctx0, K, Q); - offload_func_kq(KQ); - ggml_set_name(KQ, "KQ"); - - struct ggml_tensor * KQ_scaled = ggml_scale(ctx0, KQ, KQ_scale); - offload_func_kq(KQ_scaled); - ggml_set_name(KQ_scaled, "KQ_scaled"); - - struct ggml_tensor * KQ_masked = ggml_add(ctx0, KQ_scaled, KQ_mask); - offload_func_kq(KQ_masked); - ggml_set_name(KQ_masked, "KQ_masked"); - - struct ggml_tensor * KQ_soft_max = ggml_soft_max_inplace(ctx0, KQ_masked); - offload_func_kq(KQ_soft_max); - ggml_set_name(KQ_soft_max, "KQ_soft_max"); - - struct ggml_tensor * V = - ggml_view_3d(ctx0, kv_self.v, - n_kv, n_embd_head, n_head_kv, - ggml_element_size(kv_self.v)*n_ctx, - ggml_element_size(kv_self.v)*n_ctx*n_embd_head, - ggml_element_size(kv_self.v)*n_ctx*n_embd_gqa*il); - offload_func_v(V); - ggml_set_name(V, "V"); - - struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V, KQ_soft_max); - offload_func_v(KQV); - ggml_set_name(KQV, "KQV"); - - struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3); - offload_func_v(KQV_merged); - ggml_set_name(KQV_merged, "KQV_merged"); - - cur = ggml_cont_2d(ctx0, KQV_merged, n_embd, n_tokens); - offload_func_v(cur); - ggml_set_name(cur, "KQV_merged_contiguous"); - - cur = ggml_mul_mat(ctx0, model.layers[il].wo, cur); - offload_func(cur); - cur = ggml_add(ctx0, cur, model.layers[il].bo); - offload_func(cur); - ggml_set_name(cur, "result_wo"); - } - - struct ggml_tensor * inpFF = ggml_add(ctx0, residual, cur); - offload_func(inpFF); - ggml_set_name(inpFF, "inpFF"); + // FF { - // MLP - { - // Norm - cur = ggml_norm(ctx0, inpFF, norm_eps); - offload_func(cur); - cur = ggml_add(ctx0, - ggml_mul(ctx0, cur, model.layers[il].ffn_norm), - model.layers[il].ffn_norm_b - ); - ggml_set_name(cur, "ffn_norm"); - offload_func(cur); - } - cur = ggml_mul_mat(ctx0, model.layers[il].w3, cur); - offload_func(cur); - - cur = ggml_add(ctx0, cur, model.layers[il].b3); - offload_func(cur); - ggml_set_name(cur, "result_ffn_up"); - - cur = ggml_sqr(ctx0, ggml_relu(ctx0, cur)); - ggml_set_name(cur, "result_ffn_act"); - offload_func(cur); - offload_func(cur->src[0]); - - cur = ggml_mul_mat(ctx0, model.layers[il].w2, cur); - offload_func(cur); - cur = ggml_add(ctx0, - cur, - model.layers[il].b2); - offload_func(cur); - ggml_set_name(cur, "outFF"); - } - cur = ggml_add(ctx0, cur, inpFF); - offload_func(cur); - ggml_set_name(cur, "inpFF_+_outFF"); - inpL = cur; - } - cur = inpL; - { - cur = ggml_norm(ctx0, cur, norm_eps); - offload_func_nr(cur); - cur = ggml_mul(ctx0, cur, model.output_norm); - offload_func_nr(cur); + cur = llm_build_norm(ctx0, ffn_inp, + model.layers[il].ffn_norm, + model.layers[il].ffn_norm_b, + LLM_NORM, norm_eps, cb, il); + cb(cur, "ffn_norm", il); - cur = ggml_add(ctx0, cur, model.output_norm_b); - // offload_func_nr(cur); + cur = llm_build_ffn(ctx0, cur, + model.layers[il].ffn_up, model.layers[il].ffn_up_b, + NULL, NULL, + model.layers[il].ffn_down, model.layers[il].ffn_down_b, + LLM_FFN_GELU, LLM_FFN_SEQ, cb, il); + cb(cur, "ffn_out", il); + } - ggml_set_name(cur, "result_norm"); + inpL = ggml_add(ctx0, cur, ffn_inp); + cb(inpL, "l_out", il); } + + cur = llm_build_norm(ctx0, inpL, + model.output_norm, + model.output_norm_b, + LLM_NORM, norm_eps, cb, -1); + cb(cur, "result_norm", -1); + cur = ggml_mul_mat(ctx0, model.output, cur); - ggml_set_name(cur, "result_output"); + cb(cur, "result_output", -1); + ggml_build_forward_expand(gf, cur); + ggml_free(ctx0); + return gf; } -static struct ggml_cgraph * llm_build_bloom( +static struct ggml_cgraph * llm_build_mpt( llama_context & lctx, - const llama_batch & batch) { + const llama_batch & batch, + const llm_build_cb & cb, + bool worst_case) { const auto & model = lctx.model; const auto & hparams = model.hparams; const auto & cparams = lctx.cparams; @@ -5313,17 +4569,16 @@ static struct ggml_cgraph * llm_build_bloom( const int64_t n_layer = hparams.n_layer; const int64_t n_ctx = cparams.n_ctx; const int64_t n_head = hparams.n_head; - const int64_t n_head_kv = hparams.n_head_kv; const int64_t n_embd_head = hparams.n_embd_head(); const int64_t n_embd_gqa = hparams.n_embd_gqa(); - GGML_ASSERT(n_embd_head == hparams.n_rot); - - const float norm_eps = hparams.f_norm_eps; + const float norm_eps = hparams.f_norm_eps; + const float clamp_kqv = hparams.f_clamp_kqv; + const float max_alibi_bias = hparams.f_max_alibi_bias; const int32_t n_tokens = batch.n_tokens; - const int32_t n_kv = ggml_allocr_is_measure(lctx.alloc) ? n_ctx : kv_self.n; - const int32_t kv_head = ggml_allocr_is_measure(lctx.alloc) ? n_ctx - n_tokens : kv_self.head; + const int32_t n_kv = worst_case ? n_ctx : kv_self.n; + const int32_t kv_head = worst_case ? n_ctx - n_tokens : kv_self.head; auto & buf_compute = lctx.buf_compute; @@ -5340,567 +4595,591 @@ static struct ggml_cgraph * llm_build_bloom( ggml_cgraph * gf = ggml_new_graph(ctx0); struct ggml_tensor * cur; - struct ggml_tensor * token; struct ggml_tensor * inpL; - if (batch.token) { - struct ggml_tensor * inp_tokens = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); - - ggml_allocr_alloc(lctx.alloc, inp_tokens); - if (!ggml_allocr_is_measure(lctx.alloc)) { - memcpy(inp_tokens->data, batch.token, n_tokens*ggml_element_size(inp_tokens)); - } - ggml_set_name(inp_tokens, "inp_tokens"); - - token = ggml_get_rows(ctx0, model.tok_embeddings, inp_tokens); - } else { -#ifdef GGML_USE_MPI - GGML_ASSERT(false && "not implemented"); -#endif - - token = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_embd, n_tokens); - - ggml_allocr_alloc(lctx.alloc, token); - if (!ggml_allocr_is_measure(lctx.alloc)) { - memcpy(token->data, batch.embd, n_tokens * n_embd * ggml_element_size(token)); - } - } + inpL = llm_build_inp_embd(ctx0, batch, model.tok_embd, n_embd, n_tokens, cb); + cb(inpL, "inp_embd", -1); // KQ_scale struct ggml_tensor * KQ_scale = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); - ggml_set_name(KQ_scale, "1/sqrt(n_embd_head)"); - ggml_allocr_alloc(lctx.alloc, KQ_scale); - if (!ggml_allocr_is_measure(lctx.alloc)) { - ggml_set_f32(KQ_scale, 1.0f/sqrtf(float(n_embd)/n_head)); - } + cb(KQ_scale, "KQ_scale", -1); // KQ_mask (mask for 1 head, it will be broadcasted to all heads) struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); - ggml_set_name(KQ_mask, "KQ_mask"); - ggml_allocr_alloc(lctx.alloc, KQ_mask); - if (!ggml_allocr_is_measure(lctx.alloc)) { - float * data = (float *) KQ_mask->data; - memset(data, 0, ggml_nbytes(KQ_mask)); - - for (int h = 0; h < 1; ++h) { - for (int j = 0; j < n_tokens; ++j) { - const llama_pos pos = batch.pos[j]; - const llama_seq_id seq_id = batch.seq_id[j][0]; - - for (int i = 0; i < n_kv; ++i) { - if (!kv_self.cells[i].has_seq_id(seq_id) || kv_self.cells[i].pos > pos) { - data[h*(n_kv*n_tokens) + j*n_kv + i] = -INFINITY; - } - } - } - } - } + cb(KQ_mask, "KQ_mask", -1); - // norm - { - inpL = ggml_norm(ctx0, token, norm_eps); - inpL = ggml_add(ctx0, ggml_mul(ctx0, inpL, model.tok_norm), model.tok_norm_b); - } + for (int il = 0; il < n_layer; ++il) { + struct ggml_tensor * attn_norm; - ggml_set_name(inpL, "inpL"); + attn_norm = llm_build_norm(ctx0, inpL, + model.layers[il].attn_norm, + NULL, + LLM_NORM, norm_eps, cb, il); + cb(attn_norm, "attn_norm", il); - for (int il = 0; il < n_layer; ++il) { + // self-attention { - // Norm - cur = ggml_norm(ctx0, inpL, norm_eps); - cur = ggml_add(ctx0, ggml_mul(ctx0, cur, model.layers[il].attn_norm), model.layers[il].attn_norm_b); + cur = attn_norm; + + cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); + cb(cur, "wqkv", il); + + if (clamp_kqv > 0.0f) { + cur = ggml_clamp(ctx0, cur, -clamp_kqv, clamp_kqv); + cb(cur, "wqkv_clamped", il); + } + + struct ggml_tensor * Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); + struct ggml_tensor * Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); + struct ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); + + cb(Qcur, "Qcur", il); + cb(Kcur, "Kcur", il); + cb(Vcur, "Vcur", il); + + Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); + + llm_build_kv_store(lctx, ctx0, gf, Kcur, Vcur, n_tokens, kv_head, cb, il); + + cur = llm_build_kqv(lctx, ctx0, Qcur, + model.layers[il].wo, NULL, + Qcur, KQ_scale, KQ_mask, n_tokens, n_kv, max_alibi_bias, cb, il); + cb(cur, "kqv_out", il); } - { - // Self Attention - cur = ggml_add(ctx0, ggml_mul_mat(ctx0, model.layers[il].wqkv, cur), model.layers[il].bqkv); + // Add the input + struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpL); + cb(ffn_inp, "ffn_inp", il); - struct ggml_tensor * tmpq = ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*n_embd); - struct ggml_tensor * tmpk = ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], sizeof(float)*n_embd); - struct ggml_tensor * tmpv = ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], sizeof(float)*(n_embd + n_embd_gqa)); + // feed forward + { + cur = llm_build_norm(ctx0, ffn_inp, + model.layers[il].ffn_norm, + NULL, + LLM_NORM, norm_eps, cb, il); + cb(cur, "ffn_norm", il); - struct ggml_tensor * Qcur = tmpq; - struct ggml_tensor * Kcur = tmpk; + cur = llm_build_ffn(ctx0, cur, + model.layers[il].ffn_up, NULL, + NULL, NULL, + model.layers[il].ffn_down, NULL, + LLM_FFN_GELU, LLM_FFN_SEQ, cb, il); + cb(cur, "ffn_out", il); + } - // store key and value to memory - { - struct ggml_tensor * Vcur = ggml_transpose(ctx0, ggml_reshape_2d(ctx0, ggml_cont(ctx0, tmpv), n_embd_gqa, n_tokens)); - ggml_set_name(Vcur, "Vcur"); + cur = ggml_add(ctx0, cur, ffn_inp); + cb(cur, "l_out", il); - struct ggml_tensor * k = ggml_view_1d(ctx0, kv_self.k, n_tokens*n_embd_gqa, (ggml_element_size(kv_self.k)*n_embd_gqa)*(il*n_ctx + kv_head)); - ggml_set_name(k, "k"); + // input for next layer + inpL = cur; + } - struct ggml_tensor * v = ggml_view_2d(ctx0, kv_self.v, n_tokens, n_embd_gqa, - ( n_ctx)*ggml_element_size(kv_self.v), - (il*n_ctx)*ggml_element_size(kv_self.v)*n_embd_gqa + kv_head*ggml_element_size(kv_self.v)); + cur = inpL; - ggml_build_forward_expand(gf, ggml_cpy(ctx0, Kcur, k)); - ggml_build_forward_expand(gf, ggml_cpy(ctx0, Vcur, v)); - } + cur = llm_build_norm(ctx0, cur, + model.output_norm, + NULL, + LLM_NORM, norm_eps, cb, -1); + cb(cur, "result_norm", -1); - struct ggml_tensor * Q = - ggml_permute(ctx0, - ggml_cpy(ctx0, - Qcur, - ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_embd_head, n_head, n_tokens)), - 0, 2, 1, 3); - ggml_set_name(Q, "Q"); - - struct ggml_tensor * K = - ggml_view_3d(ctx0, kv_self.k, - n_embd_head, n_kv, n_head_kv, - ggml_element_size(kv_self.k)*n_embd_gqa, - ggml_element_size(kv_self.k)*n_embd_head, - ggml_element_size(kv_self.k)*n_embd_gqa*n_ctx*il); - ggml_set_name(K, "K"); + cur = ggml_mul_mat(ctx0, model.output, cur); + cb(cur, "result_output", -1); - // K * Q - struct ggml_tensor * KQ = ggml_mul_mat(ctx0, K, Q); - ggml_set_name(KQ, "KQ"); + ggml_build_forward_expand(gf, cur); - // KQ_scaled = KQ / sqrt(n_embd_head) - // KQ_scaled shape [n_past + n_tokens, n_tokens, n_head, 1] - struct ggml_tensor * KQ_scaled = ggml_scale_inplace(ctx0, KQ, KQ_scale); - ggml_set_name(KQ_scaled, "KQ_scaled"); + ggml_free(ctx0); - struct ggml_tensor * KQ_scaled_alibi = ggml_alibi(ctx0, KQ_scaled, /*n_past*/ kv_head, n_head, 8); - ggml_set_name(KQ_scaled_alibi, "KQ_scaled_alibi"); + return gf; +} - // KQ_masked = mask_past(KQ_scaled) - struct ggml_tensor * KQ_masked = ggml_add(ctx0, KQ_scaled_alibi, KQ_mask); - ggml_set_name(KQ_masked, "KQ_masked"); +// +// tensor offloading helpers +// +// TODO: will be removed with backend v2 + +enum llm_offload_func_e { + OFFLOAD_FUNC_NOP, + OFFLOAD_FUNC, + OFFLOAD_FUNC_KQ, + OFFLOAD_FUNC_V, + OFFLOAD_FUNC_NR, + OFFLOAD_FUNC_EMB, + OFFLOAD_FUNC_OUT, +}; - // KQ = soft_max(KQ_masked) - struct ggml_tensor * KQ_soft_max = ggml_soft_max_inplace(ctx0, KQ_masked); - ggml_set_name(KQ_soft_max, "KQ_soft_max"); +// TODO: will be removed with backend v2 +struct llm_offload_trie { + struct node { + ~node() { + for (int i = 0; i < 256; ++i) { + if (children[i]) { + delete children[i]; + } + } + } - // split cached V into n_head heads - struct ggml_tensor * V = - ggml_view_3d(ctx0, kv_self.v, - n_kv, n_embd_head, n_head_kv, - ggml_element_size(kv_self.v)*n_ctx, - ggml_element_size(kv_self.v)*n_ctx*n_embd_head, - ggml_element_size(kv_self.v)*n_ctx*n_embd_gqa*il); - ggml_set_name(V, "V"); + node * children[256] = { nullptr }; + llm_offload_func_e func = OFFLOAD_FUNC_NOP; + }; - struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V, KQ_soft_max); - ggml_set_name(KQV, "KQV"); + llm_offload_trie() { + root = new node; + } - // KQV_merged = KQV.permute(0, 2, 1, 3) - struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3); - ggml_set_name(KQV_merged, "KQV_merged"); + llm_offload_trie(const std::unordered_map & map) { + root = new node; - // cur = KQV_merged.contiguous().view(n_embd, n_tokens) - cur = ggml_cont_2d(ctx0, KQV_merged, n_embd, n_tokens); - ggml_set_name(cur, "KQV_merged_contiguous"); + for (const auto & kv : map) { + add(kv.first, kv.second); } + } - // Projection - cur = ggml_add(ctx0, ggml_mul_mat(ctx0, model.layers[il].wo, cur), model.layers[il].bo); + ~llm_offload_trie() { + delete root; + } - // Add the input - cur = ggml_add(ctx0, cur, inpL); + void add(const char * name, llm_offload_func_e func) { + node * cur = root; - struct ggml_tensor * inpFF = cur; + for (int i = 0; ; ++i) { + const uint8_t c = name[i]; - // FF - { - // Norm - { - cur = ggml_norm(ctx0, inpFF, norm_eps); - cur = ggml_add(ctx0, ggml_mul(ctx0, cur, model.layers[il].ffn_norm), model.layers[il].ffn_norm_b); + if (!c) { + break; } - cur = ggml_add(ctx0, ggml_mul_mat(ctx0, model.layers[il].w3, cur), model.layers[il].b3); - - // GELU activation - cur = ggml_gelu(ctx0, cur); + if (!cur->children[c]) { + cur->children[c] = new node; + } - // Projection - cur = ggml_add(ctx0, ggml_mul_mat(ctx0, model.layers[il].w2, cur), model.layers[il].b2); + cur = cur->children[c]; } - inpL = ggml_add(ctx0, cur, inpFF); + cur->func = func; } - // Output Norm - { - cur = ggml_norm(ctx0, inpL, norm_eps); - cur = ggml_add(ctx0, ggml_mul(ctx0, cur, model.output_norm), model.output_norm_b); - } - ggml_set_name(cur, "result_norm"); + llm_offload_func_e find(const char * name) const { + const node * cur = root; - cur = ggml_mul_mat(ctx0, model.output, cur); - ggml_set_name(cur, "result_output"); + for (int i = 0; ; ++i) { + const uint8_t c = name[i]; - ggml_build_forward_expand(gf, cur); + if (!c) { + break; + } - ggml_free(ctx0); + if (!cur->children[c]) { + return OFFLOAD_FUNC_NOP; + } - return gf; -} + cur = cur->children[c]; + } -static struct ggml_cgraph * llm_build_mpt( - llama_context & lctx, - const llama_batch & batch) { - const auto & model = lctx.model; - const auto & hparams = model.hparams; - const auto & cparams = lctx.cparams; + return cur->func; + } - const auto & kv_self = lctx.kv_self; + node * root = nullptr; +}; - GGML_ASSERT(!!kv_self.ctx); +// TODO: will be removed with backend v2 +static const std::unordered_map k_offload_map = { + //{ "inp_tokens", OFFLOAD_FUNC_NR }, // TODO: missing K-quants get_rows kernel + //{ "inp_embd", OFFLOAD_FUNC_NR }, // TODO: missing K-quants get_rows kernel + { "pos_embd", OFFLOAD_FUNC_NR }, + + { "inp_pos", OFFLOAD_FUNC_KQ }, // this is often used for KQ ops (e.g. rope) + { "KQ_scale", OFFLOAD_FUNC_KQ }, + { "KQ_mask", OFFLOAD_FUNC_KQ }, + { "K_shift", OFFLOAD_FUNC_KQ }, + { "K_shifted", OFFLOAD_FUNC_KQ }, + + { "inp_norm", OFFLOAD_FUNC_NR }, + { "inp_norm_w", OFFLOAD_FUNC_NR }, + { "inp_norm_wb", OFFLOAD_FUNC_NR }, + + { "norm", OFFLOAD_FUNC }, + { "norm_w", OFFLOAD_FUNC }, + { "norm_wb", OFFLOAD_FUNC }, + + { "attn_norm", OFFLOAD_FUNC }, + { "attn_norm_2", OFFLOAD_FUNC }, + + { "wqkv", OFFLOAD_FUNC_KQ }, + { "bqkv", OFFLOAD_FUNC_KQ }, + { "wqkv_clamped", OFFLOAD_FUNC_KQ }, + + { "tmpk", OFFLOAD_FUNC_KQ }, + { "tmpq", OFFLOAD_FUNC_KQ }, + { "tmpv", OFFLOAD_FUNC_V }, + { "Kcur", OFFLOAD_FUNC_KQ }, + { "Qcur", OFFLOAD_FUNC_KQ }, + { "Vcur", OFFLOAD_FUNC_V }, + + { "krot", OFFLOAD_FUNC_KQ }, + { "qrot", OFFLOAD_FUNC_KQ }, + { "kpass", OFFLOAD_FUNC_KQ }, + { "qpass", OFFLOAD_FUNC_KQ }, + { "krotated", OFFLOAD_FUNC_KQ }, + { "qrotated", OFFLOAD_FUNC_KQ }, + + { "q", OFFLOAD_FUNC_KQ }, + { "k", OFFLOAD_FUNC_KQ }, + { "kq", OFFLOAD_FUNC_KQ }, + { "kq_scaled", OFFLOAD_FUNC_KQ }, + { "kq_scaled_alibi", OFFLOAD_FUNC_KQ }, + { "kq_masked", OFFLOAD_FUNC_KQ }, + { "kq_soft_max", OFFLOAD_FUNC_V }, + { "v", OFFLOAD_FUNC_V }, + { "kqv", OFFLOAD_FUNC_V }, + { "kqv_merged", OFFLOAD_FUNC_V }, + { "kqv_merged_cont", OFFLOAD_FUNC_V }, + { "kqv_wo", OFFLOAD_FUNC_V }, + { "kqv_out", OFFLOAD_FUNC_V }, + + { "ffn_inp", OFFLOAD_FUNC }, + { "ffn_norm", OFFLOAD_FUNC }, + + { "ffn_up", OFFLOAD_FUNC }, + { "ffn_up_b", OFFLOAD_FUNC }, + { "ffn_gate", OFFLOAD_FUNC }, + { "ffn_gate_b", OFFLOAD_FUNC }, + { "ffn_gate_par", OFFLOAD_FUNC }, + { "ffn_down", OFFLOAD_FUNC }, + { "ffn_down_b", OFFLOAD_FUNC }, + { "ffn_out", OFFLOAD_FUNC }, + + { "ffn_silu", OFFLOAD_FUNC }, + { "ffn_gelu", OFFLOAD_FUNC }, + { "ffn_relu", OFFLOAD_FUNC }, + { "ffn_sqr(relu)", OFFLOAD_FUNC }, + + { "l_out", OFFLOAD_FUNC }, + + { "result_norm", OFFLOAD_FUNC_EMB }, + { "result_output", OFFLOAD_FUNC_OUT }, +}; - const int64_t n_embd = hparams.n_embd; - const int64_t n_layer = hparams.n_layer; - const int64_t n_ctx = cparams.n_ctx; - const int64_t n_head = hparams.n_head; - const int64_t n_head_kv = hparams.n_head_kv; - const int64_t n_embd_head = hparams.n_embd_head(); - const int64_t n_embd_gqa = hparams.n_embd_gqa(); +static llm_offload_trie k_offload_func_trie(k_offload_map); - const float norm_eps = hparams.f_norm_eps; - const float clamp_kqv = hparams.f_clamp_kqv; - const float max_alibi_bias = hparams.f_max_alibi_bias; +static struct ggml_cgraph * llama_build_graph( + llama_context & lctx, + const llama_batch & batch) { + const auto & model = lctx.model; - const int n_gpu_layers = model.n_gpu_layers; + // check if we should build the worst-case graph (for memory measurement) + const bool worst_case = ggml_allocr_is_measure(lctx.alloc); - const int32_t n_tokens = batch.n_tokens; - const int32_t n_kv = ggml_allocr_is_measure(lctx.alloc) ? n_ctx : kv_self.n; - const int32_t kv_head = ggml_allocr_is_measure(lctx.alloc) ? n_ctx - n_tokens : kv_self.head; + // keep track of the input that has already been allocated + bool alloc_inp_tokens = false; + bool alloc_inp_embd = false; + bool alloc_inp_pos = false; + bool alloc_inp_KQ_scale = false; + bool alloc_inp_KQ_mask = false; + bool alloc_inp_K_shift = false; - auto & buf_compute = lctx.buf_compute; +#ifdef GGML_USE_CUBLAS + const bool do_offload = true; +#else + const bool do_offload = true; // TODO: set to false after finishing refactoring +#endif - struct ggml_init_params params = { - /*.mem_size =*/ buf_compute.size, - /*.mem_buffer =*/ buf_compute.data, - /*.no_alloc =*/ false, - }; + int n_non_view = 0; // number of non-view tensors that have been processed by the callback - params.no_alloc = true; + // this callback allows us to apply custom logic to each tensor (e.g. ggml-alloc, offloading, etc.) + // TODO: will be removed with backend v2 + llm_build_cb cb = [&](struct ggml_tensor * cur, const char * name, int il) { + if (il >= 0) { + ggml_format_name(cur, "%s-%d", name, il); + } else { + ggml_set_name(cur, name); + } - struct ggml_context * ctx0 = ggml_init(params); + // + // allocate input tensors and set input data + // + // TODO: will be removed with backend v2 - ggml_cgraph * gf = ggml_new_graph(ctx0); + if (!alloc_inp_tokens && strcmp(name, "inp_tokens") == 0) { + ggml_allocr_alloc(lctx.alloc, cur); - struct ggml_tensor * cur; - struct ggml_tensor * inpL; + if (!ggml_allocr_is_measure(lctx.alloc) && batch.token) { + const int64_t n_tokens = cur->ne[0]; - //int warmup = 0; - if (batch.token) { - struct ggml_tensor * inp_tokens = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); + memcpy(cur->data, batch.token, n_tokens*ggml_element_size(cur)); + } - ggml_allocr_alloc(lctx.alloc, inp_tokens); - if (!ggml_allocr_is_measure(lctx.alloc)) { - memcpy(inp_tokens->data, batch.token, n_tokens*ggml_element_size(inp_tokens)); - //warmup = ((uint32_t*) inp_tokens->data)[0] == 0; + alloc_inp_tokens = true; } - ggml_set_name(inp_tokens, "inp_tokens"); + if (!alloc_inp_embd && strcmp(name, "inp_embd") == 0) { + ggml_allocr_alloc(lctx.alloc, cur); - inpL = ggml_get_rows(ctx0, model.tok_embeddings, inp_tokens); - } else { -#ifdef GGML_USE_MPI - GGML_ASSERT(false && "not implemented"); -#endif + if (!ggml_allocr_is_measure(lctx.alloc) && batch.embd) { + const int64_t n_embd = cur->ne[0]; + const int64_t n_tokens = cur->ne[1]; - inpL = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_embd, n_tokens); + memcpy(cur->data, batch.embd, n_tokens*n_embd*ggml_element_size(cur)); + } - ggml_allocr_alloc(lctx.alloc, inpL); - if (!ggml_allocr_is_measure(lctx.alloc)) { - memcpy(inpL->data, batch.embd, n_tokens * n_embd * ggml_element_size(inpL)); + alloc_inp_embd = true; } - } - const int i_gpu_start = n_layer - n_gpu_layers; - (void) i_gpu_start; + if (!alloc_inp_pos && strcmp(name, "inp_pos") == 0) { + ggml_allocr_alloc(lctx.alloc, cur); - // offload functions set the tensor output backend to GPU - // tensors are GPU-accelerated if any input or the output has been offloaded - offload_func_t offload_func_nr = llama_nop; // nr = non-repeating - offload_func_t offload_func_kq = llama_nop; - offload_func_t offload_func_v = llama_nop; - -#ifdef GGML_USE_CUBLAS - if (n_gpu_layers > n_layer) { - offload_func_nr = ggml_cuda_assign_buffers_no_alloc; - } - if (n_gpu_layers > n_layer + 1) { - offload_func_v = ggml_cuda_assign_buffers_no_alloc; - } - if (n_gpu_layers > n_layer + 2) { - offload_func_kq = ggml_cuda_assign_buffers_no_alloc; - } -#endif // GGML_USE_CUBLAS + if (!ggml_allocr_is_measure(lctx.alloc) && batch.pos) { + const int64_t n_tokens = cur->ne[0]; - // KQ_scale - struct ggml_tensor * KQ_scale = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); - ggml_set_name(KQ_scale, "1/sqrt(n_embd_head)"); - ggml_allocr_alloc(lctx.alloc, KQ_scale); - if (!ggml_allocr_is_measure(lctx.alloc)) { - ggml_set_f32(KQ_scale, 1.0f/sqrtf(float(n_embd)/n_head)); - } + int32_t * data = (int32_t *) cur->data; - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); - offload_func_kq(KQ_mask); - ggml_set_name(KQ_mask, "KQ_mask"); - ggml_allocr_alloc(lctx.alloc, KQ_mask); - if (!ggml_allocr_is_measure(lctx.alloc)) { - float * data = (float *) KQ_mask->data; - memset(data, 0, ggml_nbytes(KQ_mask)); - - for (int h = 0; h < 1; ++h) { - for (int j = 0; j < n_tokens; ++j) { - const llama_pos pos = batch.pos[j]; - const llama_seq_id seq_id = batch.seq_id[j][0]; - - for (int i = 0; i < n_kv; ++i) { - if (!kv_self.cells[i].has_seq_id(seq_id) || kv_self.cells[i].pos > pos) { - data[h*(n_kv*n_tokens) + j*n_kv + i] = -INFINITY; - } + for (int i = 0; i < n_tokens; ++i) { + data[i] = batch.pos[i]; } } + + alloc_inp_pos = true; } - } - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * attn_norm; + if (!alloc_inp_KQ_scale && strcmp(name, "KQ_scale") == 0) { + ggml_allocr_alloc(lctx.alloc, cur); - offload_func_t offload_func = llama_nop; + if (!ggml_allocr_is_measure(lctx.alloc)) { + const int64_t n_embd_head = model.hparams.n_embd_head(); + ggml_set_f32(cur, 1.0f/sqrtf(float(n_embd_head))); + } -#ifdef GGML_USE_CUBLAS - if (il >= i_gpu_start) { - offload_func = ggml_cuda_assign_buffers_no_alloc; + alloc_inp_KQ_scale = true; } -#endif // GGML_USE_CUBLAS - - // self-attention - // TODO: refactor into common function (shared with LLaMA) - { - attn_norm = ggml_norm(ctx0, inpL, norm_eps); - offload_func(attn_norm); - attn_norm = ggml_mul(ctx0, attn_norm, model.layers[il].attn_norm); - offload_func(attn_norm); + if (!alloc_inp_KQ_mask && strcmp(name, "KQ_mask") == 0) { + ggml_allocr_alloc(lctx.alloc, cur); - if (1) { - cur = attn_norm; - } + if (!ggml_allocr_is_measure(lctx.alloc)) { + const int64_t n_kv = cur->ne[0]; + const int64_t n_tokens = cur->ne[1]; - // compute QKV + float * data = (float *) cur->data; + memset(data, 0, ggml_nbytes(cur)); - cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); - offload_func_kq(cur); + for (int h = 0; h < 1; ++h) { + for (int j = 0; j < n_tokens; ++j) { + const llama_pos pos = batch.pos[j]; + const llama_seq_id seq_id = batch.seq_id[j][0]; - if (clamp_kqv > 0.0f) { - cur = ggml_clamp(ctx0, cur, -clamp_kqv, clamp_kqv); - offload_func_kq(cur); + for (int i = 0; i < n_kv; ++i) { + if (!lctx.kv_self.cells[i].has_seq_id(seq_id) || lctx.kv_self.cells[i].pos > pos) { + data[h*(n_kv*n_tokens) + j*n_kv + i] = -INFINITY; + } + } + } + } } - const size_t wsize = ggml_type_size(cur->type); - - struct ggml_tensor * Qcur = ggml_view_3d( - ctx0, cur, n_embd_head, n_head, n_tokens, - wsize * n_embd_head, - wsize * n_embd_head * (n_head + 2 * n_head_kv), - 0); - offload_func_kq(Qcur); + alloc_inp_KQ_mask = true; + } - struct ggml_tensor * Kcur = ggml_view_3d( - ctx0, cur, n_embd_head, n_head_kv, n_tokens, - wsize * n_embd_head, - wsize * n_embd_head * (n_head + 2 * n_head_kv), - wsize * n_embd_head * n_head); - offload_func_kq(Kcur); + if (!alloc_inp_K_shift && strcmp(name, "K_shift") == 0) { + ggml_allocr_alloc(lctx.alloc, cur); - struct ggml_tensor * tmpv = ggml_view_3d( - ctx0, cur, n_embd_head, n_head_kv, n_tokens, - wsize * n_embd_head, - wsize * n_embd_head * (n_head + 2 * n_head_kv), - wsize * n_embd_head * (n_head + n_head_kv)); - offload_func_kq(Kcur); + if (!ggml_allocr_is_measure(lctx.alloc)) { + const int64_t n_ctx = cur->ne[0]; - ggml_set_name(Qcur, "Qcur"); - ggml_set_name(Kcur, "Kcur"); + int32_t * data = (int32_t *) cur->data; - { - struct ggml_tensor * Vcur = ggml_transpose(ctx0, ggml_reshape_2d(ctx0, ggml_cont(ctx0, tmpv), n_embd_gqa, n_tokens)); - offload_func_v(Vcur); - offload_func_v(Vcur->src[0]->src[0]); - ggml_set_name(Vcur, "Vcur"); - - struct ggml_tensor * k = ggml_view_1d(ctx0, kv_self.k, n_tokens*n_embd_gqa, (ggml_element_size(kv_self.k)*n_embd_gqa)*(il*n_ctx + kv_head)); - offload_func_kq(k); - ggml_set_name(k, "k"); - - struct ggml_tensor * v = ggml_view_2d(ctx0, kv_self.v, n_tokens, n_embd_gqa, - ( n_ctx)*ggml_element_size(kv_self.v), - (il*n_ctx)*ggml_element_size(kv_self.v)*n_embd_gqa + kv_head*ggml_element_size(kv_self.v)); - offload_func_v(v); - - ggml_build_forward_expand(gf, ggml_cpy(ctx0, Kcur, k)); - ggml_build_forward_expand(gf, ggml_cpy(ctx0, Vcur, v)); + for (int i = 0; i < n_ctx; ++i) { + data[i] = lctx.kv_self.cells[i].delta; + } } - struct ggml_tensor * Q = ggml_permute(ctx0, Qcur, 0, 2, 1, 3); - offload_func_kq(Q); - ggml_set_name(Q, "Q"); + alloc_inp_K_shift = true; + } - struct ggml_tensor * K = - ggml_view_3d(ctx0, kv_self.k, - n_embd_head, n_kv, n_head_kv, - ggml_element_size(kv_self.k)*n_embd_gqa, - ggml_element_size(kv_self.k)*n_embd_head, - ggml_element_size(kv_self.k)*n_embd_gqa*n_ctx*il); - offload_func_kq(K); - ggml_set_name(K, "K"); - - struct ggml_tensor * KQ = ggml_mul_mat(ctx0, K, Q); - offload_func_kq(KQ); - ggml_set_name(KQ, "KQ"); - - struct ggml_tensor * KQ_scaled = ggml_scale(ctx0, KQ, KQ_scale); - offload_func_kq(KQ_scaled); - ggml_set_name(KQ_scaled, "KQ_scaled"); - - // TODO: replace with ggml_add() - struct ggml_tensor * KQ_scaled_alibi = - ggml_alibi(ctx0, KQ_scaled, 0, n_head, max_alibi_bias); - offload_func_kq(KQ_scaled_alibi); - ggml_set_name(KQ_scaled_alibi, "KQ_scaled_alibi"); - - struct ggml_tensor * KQ_masked = ggml_add(ctx0, KQ_scaled_alibi, KQ_mask); - offload_func_kq(KQ_masked); - ggml_set_name(KQ_masked, "KQ_masked"); - - struct ggml_tensor * KQ_soft_max = ggml_soft_max(ctx0, KQ_masked); - offload_func_v(KQ_soft_max); - ggml_set_name(KQ_soft_max, "KQ_soft_max"); - - struct ggml_tensor * V = - ggml_view_3d(ctx0, kv_self.v, - n_kv, n_embd_head, n_head_kv, - ggml_element_size(kv_self.v)*n_ctx, - ggml_element_size(kv_self.v)*n_ctx*n_embd_head, - ggml_element_size(kv_self.v)*n_ctx*n_embd_gqa*il); - offload_func_v(V); - ggml_set_name(V, "V"); - - struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V, KQ_soft_max); - offload_func_v(KQV); - ggml_set_name(KQV, "KQV"); - - struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3); - offload_func_v(KQV_merged); - ggml_set_name(KQV_merged, "KQV_merged"); - - cur = ggml_cont_2d(ctx0, KQV_merged, n_embd, n_tokens); - offload_func_v(cur); - ggml_set_name(cur, "KQV_merged_contiguous"); - - cur = ggml_mul_mat(ctx0, model.layers[il].wo, cur); - offload_func(cur); - ggml_set_name(cur, "result_wo"); + // view tensors are not processed further + if (cur->view_src != nullptr) { + return; } - // Add the input - cur = ggml_add(ctx0, cur, inpL); - offload_func(cur); + if (cur->op != GGML_OP_NONE) { + n_non_view++; + } - struct ggml_tensor * attn_out = cur; + // + // offload layers + // + // TODO: will be removed with backend v2 - // feed forward - { - // Norm - { - cur = ggml_norm(ctx0, attn_out, norm_eps); - offload_func(cur); +//#define LLAMA_OFFLOAD_DEBUG - cur = ggml_mul(ctx0, cur, model.layers[il].ffn_norm); - offload_func(cur); - } + if (!do_offload) { + return; + } - cur = ggml_mul_mat(ctx0, model.layers[il].w3, cur); - offload_func(cur); + const int n_layer = model.hparams.n_layer; - cur = ggml_gelu(ctx0, cur); - offload_func(cur); - cur = ggml_mul_mat(ctx0, model.layers[il].w2, cur); - offload_func(cur); - } + const int n_gpu_layers = model.n_gpu_layers; + const int i_gpu_start = n_layer - n_gpu_layers; - cur = ggml_add(ctx0, cur, attn_out); - offload_func(cur); - // input for next layer - inpL = cur; - } + // should we offload the final norm? yes if we are not computing embeddings + const bool offload_emb = lctx.embedding.empty(); - cur = inpL; + static const std::unordered_map> k_offload_func_name = { + { OFFLOAD_FUNC_NOP, "CPU" }, + { OFFLOAD_FUNC_OUT, "CPU" }, +#ifdef GGML_USE_CUBLAS + { OFFLOAD_FUNC, "GPU (CUDA)" }, + { OFFLOAD_FUNC_KQ, "GPU (CUDA) KQ" }, + { OFFLOAD_FUNC_V, "GPU (CUDA) V" }, + { OFFLOAD_FUNC_NR, "GPU (CUDA) NR" }, + { OFFLOAD_FUNC_EMB, "GPU (CUDA) EMB" }, +#else + { OFFLOAD_FUNC, "CPU" }, + { OFFLOAD_FUNC_KQ, "CPU" }, + { OFFLOAD_FUNC_V, "CPU" }, + { OFFLOAD_FUNC_NR, "CPU" }, + { OFFLOAD_FUNC_EMB, "CPU" }, +#endif // GGML_USE_CUBLAS + }; - // norm - { - cur = ggml_norm(ctx0, cur, norm_eps); - offload_func_nr(cur); + // check the global map for what offload function to use for this tensor + llm_offload_func_e func_e = k_offload_func_trie.find(name); - cur = ggml_mul(ctx0, cur, model.output_norm); - ggml_set_name(cur, "result_norm"); - } + if (func_e == OFFLOAD_FUNC_NOP) { +#ifdef LLAMA_OFFLOAD_DEBUG + // if a tensor hasn't been offloaded, we warn the user + if (worst_case) { + LLAMA_LOG_WARN("%s: %32s: not offloaded (ref: %s)\n", __func__, + cur->name, "https://github.com/ggerganov/llama.cpp/pull/3837"); + } +#endif - cur = ggml_mul_mat(ctx0, model.output, cur); - ggml_set_name(cur, "result_output"); + return; + } - ggml_build_forward_expand(gf, cur); + // count the number of layers and respect the provided n_gpu_layers + switch (func_e) { + case OFFLOAD_FUNC_NOP: + case OFFLOAD_FUNC_OUT: + break; + case OFFLOAD_FUNC: + if (n_gpu_layers < n_layer) { + if (il < i_gpu_start) { + func_e = OFFLOAD_FUNC_NOP; + } + } + break; + case OFFLOAD_FUNC_NR: + if (n_gpu_layers <= n_layer + 0) { + func_e = OFFLOAD_FUNC_NOP; + } + break; + case OFFLOAD_FUNC_V: + if (n_gpu_layers <= n_layer + 1) { + func_e = OFFLOAD_FUNC_NOP; + } + break; + case OFFLOAD_FUNC_KQ: + if (n_gpu_layers <= n_layer + 2) { + func_e = OFFLOAD_FUNC_NOP; + } + break; + case OFFLOAD_FUNC_EMB: + if (!offload_emb || n_gpu_layers < n_layer) { + func_e = OFFLOAD_FUNC_NOP; + } + break; + default: GGML_ASSERT(false); + } - ggml_free(ctx0); + offload_func_t func = ggml_offload_nop; - return gf; -} + // this is needed for compatibility with Metal for example +#ifdef GGML_USE_CUBLAS + static offload_func_t ggml_offload_gpu = ggml_cuda_assign_buffers_no_alloc; +#else + static offload_func_t ggml_offload_gpu = ggml_offload_nop; +#endif -static struct ggml_cgraph * llama_build_graph( - llama_context & lctx, - const llama_batch & batch) { - const auto & model = lctx.model; + switch (func_e) { + case OFFLOAD_FUNC_NOP: + case OFFLOAD_FUNC_OUT: func = ggml_offload_nop; break; + case OFFLOAD_FUNC: + case OFFLOAD_FUNC_KQ: + case OFFLOAD_FUNC_V: + case OFFLOAD_FUNC_NR: + case OFFLOAD_FUNC_EMB: func = ggml_offload_gpu; break; + default: GGML_ASSERT(false); + } + + // apply offload function to the tensor + func(cur); + +#ifdef LLAMA_OFFLOAD_DEBUG + if (worst_case) { + LLAMA_LOG_INFO("%s: %32s: %s\n", __func__, cur->name, k_offload_func_name.at(func_e).c_str()); + } +#endif + }; struct ggml_cgraph * result = NULL; switch (model.arch) { case LLM_ARCH_LLAMA: { - result = llm_build_llama(lctx, batch); + result = llm_build_llama(lctx, batch, cb, worst_case); } break; case LLM_ARCH_BAICHUAN: { - result = llm_build_baichaun(lctx, batch); + result = llm_build_baichaun(lctx, batch, cb, worst_case); } break; case LLM_ARCH_FALCON: { - result = llm_build_falcon(lctx, batch); + result = llm_build_falcon(lctx, batch, cb, worst_case); } break; case LLM_ARCH_STARCODER: { - result = llm_build_starcoder(lctx, batch); + result = llm_build_starcoder(lctx, batch, cb, worst_case); } break; case LLM_ARCH_PERSIMMON: { - result = llm_build_persimmon(lctx, batch); + result = llm_build_persimmon(lctx, batch, cb, worst_case); } break; case LLM_ARCH_REFACT: { - result = llm_build_refact(lctx, batch); + result = llm_build_refact(lctx, batch, cb, worst_case); } break; case LLM_ARCH_BLOOM: { - result = llm_build_bloom(lctx, batch); + result = llm_build_bloom(lctx, batch, cb, worst_case); } break; case LLM_ARCH_MPT: { - result = llm_build_mpt(lctx, batch); + result = llm_build_mpt(lctx, batch, cb, worst_case); } break; default: GGML_ASSERT(false); } + if (worst_case) { + int n_non_view_total = 0; + + for (int i = 0; i < result->n_nodes; ++i) { + if (result->nodes[i]->view_src == nullptr) { + n_non_view_total++; + } + } + + LLAMA_LOG_INFO("%s: non-view tensors processed: %d/%d\n", __func__, n_non_view, n_non_view_total); + + if (n_non_view != n_non_view_total) { + LLAMA_LOG_WARN("%s: ****************************************************************\n", __func__); + LLAMA_LOG_WARN("%s: not all non-view tensors have been processed with a callback\n", __func__); + LLAMA_LOG_WARN("%s: this can indicate an inefficiency in the graph implementation\n", __func__); + LLAMA_LOG_WARN("%s: build with LLAMA_OFFLOAD_DEBUG for more info\n", __func__); + LLAMA_LOG_WARN("%s: ref: https://github.com/ggerganov/llama.cpp/pull/3837\n", __func__); + LLAMA_LOG_WARN("%s: ****************************************************************\n", __func__); + } + } + return result; } @@ -6043,11 +5322,13 @@ static int llama_decode_internal( } // If all tensors can be run on the GPU then using more than 1 thread is detrimental. - const bool full_offload_supported = model.arch == LLM_ARCH_LLAMA || + const bool full_offload_supported = + model.arch == LLM_ARCH_LLAMA || model.arch == LLM_ARCH_BAICHUAN || - model.arch == LLM_ARCH_FALCON || - model.arch == LLM_ARCH_REFACT || + model.arch == LLM_ARCH_FALCON || + model.arch == LLM_ARCH_REFACT || model.arch == LLM_ARCH_MPT; + const bool fully_offloaded = model.n_gpu_layers >= (int) hparams.n_layer + 3; if (ggml_cpu_has_cublas() && full_offload_supported && fully_offloaded) { n_threads = 1; @@ -6102,6 +5383,8 @@ static int llama_decode_internal( //} // extract logits + // TODO: do not compute and extract logits if only embeddings are needed + // need to update the graphs to skip "result_output" { auto & logits_out = lctx.logits; @@ -8713,8 +7996,8 @@ static int llama_apply_lora_from_file_internal( ggml_tensor * dest_t = model_tensors[base_name]; - offload_func_t offload_func = llama_nop; - offload_func_t offload_func_force_inplace = llama_nop; + offload_func_t offload_func = ggml_offload_nop; + offload_func_t offload_func_force_inplace = ggml_offload_nop; #ifdef GGML_USE_CUBLAS if (dest_t->backend == GGML_BACKEND_GPU || dest_t->backend == GGML_BACKEND_GPU_SPLIT) { From ca190bca8e844d171020d6147687e71472d71734 Mon Sep 17 00:00:00 2001 From: Adrian Hesketh Date: Wed, 1 Nov 2023 09:28:28 +0000 Subject: [PATCH 36/79] server : re-enable completion and embedded at the same time (#3876) --- .gitignore | 1 + examples/server/server.cpp | 16 ++++++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 545c2872632234..5d7c5479ef67ae 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ .DS_Store .build/ .cache/ +.ccls-cache/ .direnv/ .envrc .swiftpm diff --git a/examples/server/server.cpp b/examples/server/server.cpp index c163c7f8ec0dd1..47ae0d55856cf8 100644 --- a/examples/server/server.cpp +++ b/examples/server/server.cpp @@ -149,6 +149,7 @@ struct task_server { task_type type; json data; bool infill_mode = false; + bool embedding_mode = false; }; struct task_result { @@ -371,6 +372,7 @@ struct llama_client_slot std::vector generated_token_probs; bool infill = false; + bool embedding = false; bool has_next_token = true; bool truncated = false; bool stopped_eos = false; @@ -1244,13 +1246,14 @@ struct llama_server_context queue_results.push_back(res); } - int request_completion(json data, bool infill) + int request_completion(json data, bool infill, bool embedding) { std::lock_guard lock(mutex_tasks); task_server task; task.id = id_gen++; task.data = data; task.infill_mode = infill; + task.embedding_mode = embedding; task.type = COMPLETION_TASK; queue_tasks.push_back(task); return task.id; @@ -1376,7 +1379,7 @@ struct llama_server_context { LOG_TEE("slot unavailable\n"); // send error result - send_error(task.id, "slot unavaliable"); + send_error(task.id, "slot unavailable"); return; } @@ -1388,6 +1391,7 @@ struct llama_server_context slot->reset(); slot->infill = task.infill_mode; + slot->embedding = task.embedding_mode; slot->task_id = task.id; if (!launch_slot_with_data(slot, task.data)) @@ -1695,7 +1699,7 @@ struct llama_server_context } // prompt evaluated for embedding - if (params.embedding) + if (slot.embedding) { send_embedding(slot); slot.release(); @@ -2274,7 +2278,7 @@ int main(int argc, char **argv) svr.Post("/completion", [&llama](const httplib::Request &req, httplib::Response &res) { json data = json::parse(req.body); - const int task_id = llama.request_completion(data, false); + const int task_id = llama.request_completion(data, false, false); if (!json_value(data, "stream", false)) { std::string completion_text; task_result result = llama.next_result(task_id); @@ -2329,7 +2333,7 @@ int main(int argc, char **argv) svr.Post("/infill", [&llama](const httplib::Request &req, httplib::Response &res) { json data = json::parse(req.body); - const int task_id = llama.request_completion(data, true); + const int task_id = llama.request_completion(data, true, false); if (!json_value(data, "stream", false)) { std::string completion_text; task_result result = llama.next_result(task_id); @@ -2433,7 +2437,7 @@ int main(int argc, char **argv) { prompt = ""; } - const int task_id = llama.request_completion({ {"prompt", prompt}, { "n_predict", 0} }, false); + const int task_id = llama.request_completion({ {"prompt", prompt}, { "n_predict", 0} }, false, true); task_result result = llama.next_result(task_id); return res.set_content(result.result_json.dump(), "application/json"); }); From f0e209324a7f663225791897877bf610f1af152d Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Wed, 1 Nov 2023 11:29:07 +0200 Subject: [PATCH 37/79] scripts : add server-llm.sh (#3868) * scripts : add deploy-server.sh * scripts : rename to server-llm.sh * scripts : working curl pipe --- scripts/server-llm.sh | 391 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 391 insertions(+) create mode 100644 scripts/server-llm.sh diff --git a/scripts/server-llm.sh b/scripts/server-llm.sh new file mode 100644 index 00000000000000..7bf0929bb8ca11 --- /dev/null +++ b/scripts/server-llm.sh @@ -0,0 +1,391 @@ +#!/bin/bash +# +# Helper script for deploying llama.cpp server with a single Bash command +# +# - Works on Linux and macOS +# - Supports: CPU, CUDA, Metal, OpenCL +# - Can run all GGUF models from HuggingFace +# - Can serve requests in parallel +# - Always builds latest llama.cpp from GitHub +# +# Limitations +# +# - Chat templates are poorly supported (base models recommended) +# - Might be unstable! +# +# Usage: +# ./server-llm.sh [--port] [--repo] [--wtype] [--backend] [--gpu-id] [--n-parallel] [--n-kv] [--verbose] +# +# --port: port number, default is 8888 +# --repo: path to a repo containing GGUF model files +# --wtype: weights type (f16, q8_0, q4_0, q4_1), default is user-input +# --backend: cpu, cuda, metal, opencl, depends on the OS +# --gpu-id: gpu id, default is 0 +# --n-parallel: number of parallel requests, default is 8 +# --n-kv: KV cache size, default is 4096 +# --verbose: verbose output +# +# Example: +# +# bash -c "$(curl -s https://ggml.ai/server-llm.sh)" +# + +set -e + +# required utils: curl, git, make +if ! command -v curl &> /dev/null; then + printf "[-] curl not found\n" + exit 1 +fi +if ! command -v git &> /dev/null; then + printf "[-] git not found\n" + exit 1 +fi +if ! command -v make &> /dev/null; then + printf "[-] make not found\n" + exit 1 +fi + +# parse arguments +port=8888 +repo="" +wtype="" +backend="cpu" + +# if macOS, use metal backend by default +if [[ "$OSTYPE" == "darwin"* ]]; then + backend="metal" +elif command -v nvcc &> /dev/null; then + backend="cuda" +fi + +gpu_id=0 +n_parallel=8 +n_kv=4096 +verbose=0 + +function print_usage { + printf "Usage:\n" + printf " ./server-llm.sh [--port] [--repo] [--wtype] [--backend] [--gpu-id] [--n-parallel] [--n-kv] [--verbose]\n\n" + printf " --port: port number, default is 8888\n" + printf " --repo: path to a repo containing GGUF model files\n" + printf " --wtype: weights type (f16, q8_0, q4_0, q4_1), default is user-input\n" + printf " --backend: cpu, cuda, metal, opencl, depends on the OS\n" + printf " --gpu-id: gpu id, default is 0\n" + printf " --n-parallel: number of parallel requests, default is 8\n" + printf " --n-kv: KV cache size, default is 4096\n" + printf " --verbose: verbose output\n\n" + printf "Example:\n\n" + printf ' bash -c "$(curl -s https://ggml.ai/server-llm.sh)"\n\n' +} + +while [[ $# -gt 0 ]]; do + key="$1" + case $key in + --port) + port="$2" + shift + shift + ;; + --repo) + repo="$2" + shift + shift + ;; + --wtype) + wtype="$2" + shift + shift + ;; + --backend) + backend="$2" + shift + shift + ;; + --gpu-id) + gpu_id="$2" + shift + shift + ;; + --n-parallel) + n_parallel="$2" + shift + shift + ;; + --n-kv) + n_kv="$2" + shift + shift + ;; + --verbose) + verbose=1 + shift + ;; + --help) + print_usage + exit 0 + ;; + *) + echo "Unknown argument: $key" + print_usage + exit 1 + ;; + esac +done + +# available weights types +wtypes=("F16" "Q8_0" "Q4_0" "Q4_1" "Q5_0" "Q5_1" "Q6_K" "Q5_K_M" "Q5_K_S" "Q4_K_M" "Q4_K_S" "Q3_K_L" "Q3_K_M" "Q3_K_S" "Q2_K") + +wfiles=() +for wt in "${wtypes[@]}"; do + wfiles+=("") +done + +# sample repos +repos=( + "https://huggingface.co/TheBloke/Llama-2-7B-GGUF" + "https://huggingface.co/TheBloke/Llama-2-13B-GGUF" + "https://huggingface.co/TheBloke/Llama-2-70B-GGUF" + "https://huggingface.co/TheBloke/CodeLlama-7B-GGUF" + "https://huggingface.co/TheBloke/CodeLlama-13B-GGUF" + "https://huggingface.co/TheBloke/CodeLlama-34B-GGUF" + "https://huggingface.co/TheBloke/Mistral-7B-v0.1-GGUF" + "https://huggingface.co/TheBloke/zephyr-7B-beta-GGUF" + "https://huggingface.co/TheBloke/OpenHermes-2-Mistral-7B-GGUF" + "https://huggingface.co/TheBloke/CausalLM-7B-GGUF" +) + +printf "\n" +printf "[I] This is a helper script for deploying llama.cpp's server on this machine.\n\n" +printf " Based on the options that follow, the script might download a model file\n" +printf " from the internet, which can be a few GBs in size. The script will also\n" +printf " build the latest llama.cpp source code from GitHub, which can be unstable.\n" +printf "\n" +printf " Upon success, an HTTP server will be started and it will serve the selected\n" +printf " model using llama.cpp for demonstration purposes.\n" +printf "\n" +printf " Please note:\n" +printf "\n" +printf " - All new data will be stored in the current folder\n" +printf " - The server will be listening on all network interfaces\n" +printf " - The server will run with default settings which are not always optimal\n" +printf " - Do not judge the quality of a model based on the results from this script\n" +printf " - Do not use this script to benchmark llama.cpp\n" +printf " - Do not use this script in production\n" +printf " - This script is only for demonstration purposes\n" +printf "\n" +printf " If you don't know what you are doing, please press Ctrl-C to abort now\n" +printf "\n" +printf " Press Enter to continue ...\n\n" + +read + +if [[ -z "$repo" ]]; then + printf "[+] No repo provided from the command line\n" + printf " Please select a number from the list below or enter an URL:\n\n" + + is=0 + for r in "${repos[@]}"; do + printf " %2d) %s\n" $is "$r" + is=$((is+1)) + done + + # ask for repo until index of sample repo is provided or an URL + while [[ -z "$repo" ]]; do + printf "\n Or choose one from: https://huggingface.co/models?sort=trending&search=gguf\n\n" + read -p "[+] Select repo: " repo + + # check if the input is a number + if [[ "$repo" =~ ^[0-9]+$ ]]; then + if [[ "$repo" -ge 0 && "$repo" -lt ${#repos[@]} ]]; then + repo="${repos[$repo]}" + else + printf "[-] Invalid repo index: %s\n" "$repo" + repo="" + fi + elif [[ "$repo" =~ ^https?:// ]]; then + repo="$repo" + else + printf "[-] Invalid repo URL: %s\n" "$repo" + repo="" + fi + done +fi + +# remove suffix +repo=$(echo "$repo" | sed -E 's/\/tree\/main$//g') + +printf "[+] Checking for GGUF model files in %s\n" "$repo" + +# find GGUF files in the source +# TODO: better logic +model_tree="${repo%/}/tree/main" +model_files=$(curl -s "$model_tree" | grep -i "\\.gguf" | sed -E 's/.*(.*)<\/span><\/a>/\1/g') + +# list all files in the provided git repo +printf "[+] Model files:\n\n" +for file in $model_files; do + # determine iw by grepping the filename with wtypes + iw=-1 + is=0 + for wt in "${wtypes[@]}"; do + # uppercase + ufile=$(echo "$file" | tr '[:lower:]' '[:upper:]') + if [[ "$ufile" =~ "$wt" ]]; then + iw=$is + break + fi + is=$((is+1)) + done + + if [[ $iw -eq -1 ]]; then + continue + fi + + wfiles[$iw]="$file" + + have=" " + if [[ -f "$file" ]]; then + have="*" + fi + + printf " %2d) %s %s\n" $iw "$have" "$file" +done + +# ask for weights type until provided and available +while [[ -z "$wtype" ]]; do + printf "\n" + read -p "[+] Select weight type: " wtype + wfile="${wfiles[$wtype]}" + + if [[ -z "$wfile" ]]; then + printf "[-] Invalid weight type: %s\n" "$wtype" + wtype="" + fi +done + +printf "[+] Selected weight type: %s (%s)\n" "$wtype" "$wfile" + +url="${repo%/}/resolve/main/$wfile" + +# check file if the model has been downloaded before +chk="$wfile.chk" + +# check if we should download the file +# - if $wfile does not exist +# - if $wfile exists but $chk does not exist +# - if $wfile exists and $chk exists but $wfile is newer than $chk +# TODO: better logic using git lfs info + +do_download=0 + +if [[ ! -f "$wfile" ]]; then + do_download=1 +elif [[ ! -f "$chk" ]]; then + do_download=1 +elif [[ "$wfile" -nt "$chk" ]]; then + do_download=1 +fi + +if [[ $do_download -eq 1 ]]; then + printf "[+] Downloading weights from %s\n" "$url" + + # download the weights file + curl -o "$wfile" -# -L "$url" + + # create a check file if successful + if [[ $? -eq 0 ]]; then + printf "[+] Creating check file %s\n" "$chk" + touch "$chk" + fi +else + printf "[+] Using cached weights %s\n" "$wfile" +fi + +# get latest llama.cpp and build + +printf "[+] Downloading latest llama.cpp\n" + +llama_cpp_dir="__llama_cpp_port_${port}__" + +if [[ -d "$llama_cpp_dir" && ! -f "$llama_cpp_dir/__ggml_script__" ]]; then + # if the dir exists and there isn't a file "__ggml_script__" in it, abort + printf "[-] Directory %s already exists\n" "$llama_cpp_dir" + printf "[-] Please remove it and try again\n" + exit 1 +elif [[ -d "$llama_cpp_dir" ]]; then + printf "[+] Directory %s already exists\n" "$llama_cpp_dir" + printf "[+] Using cached llama.cpp\n" + + cd "$llama_cpp_dir" + git reset --hard + git fetch + git checkout origin/master + + cd .. +else + printf "[+] Cloning llama.cpp\n" + + git clone https://github.com/ggerganov/llama.cpp "$llama_cpp_dir" +fi + +# mark that that the directory is made by this script +touch "$llama_cpp_dir/__ggml_script__" + +if [[ $verbose -eq 1 ]]; then + set -x +fi + +# build +cd "$llama_cpp_dir" + +make clean + +log="--silent" +if [[ $verbose -eq 1 ]]; then + log="" +fi + +if [[ "$backend" == "cuda" ]]; then + printf "[+] Building with CUDA backend\n" + LLAMA_CUBLAS=1 make -j server $log +elif [[ "$backend" == "cpu" ]]; then + printf "[+] Building with CPU backend\n" + make -j server $log +elif [[ "$backend" == "metal" ]]; then + printf "[+] Building with Metal backend\n" + make -j server $log +elif [[ "$backend" == "opencl" ]]; then + printf "[+] Building with OpenCL backend\n" + LLAMA_CLBLAST=1 make -j server $log +else + printf "[-] Unknown backend: %s\n" "$backend" + exit 1 +fi + +# run the server + +printf "[+] Running server\n" + +args="" +if [[ "$backend" == "cuda" ]]; then + export CUDA_VISIBLE_DEVICES=$gpu_id + args="-ngl 999" +elif [[ "$backend" == "cpu" ]]; then + args="-ngl 0" +elif [[ "$backend" == "metal" ]]; then + args="-ngl 999" +elif [[ "$backend" == "opencl" ]]; then + args="-ngl 999" +else + printf "[-] Unknown backend: %s\n" "$backend" + exit 1 +fi + +if [[ $verbose -eq 1 ]]; then + args="$args --verbose" +fi + +./server -m "../$wfile" --host 0.0.0.0 --port "$port" -c $n_kv -np "$n_parallel" $args + +exit 0 From 73bdcb395ef9a997d9c02950c7cd4249546162cd Mon Sep 17 00:00:00 2001 From: Andrew Godfrey Date: Wed, 1 Nov 2023 04:49:04 -0700 Subject: [PATCH 38/79] finetune : add -ngl parameter (#3762) * Add '-ngl' support to finetune.cpp * Add fprintf in ggml_cuda_op_add When I tried CUDA offloading during finetuning following the readme, I got an assert here. This probably isn't an important case because inference later gives a warning saying you should use f16 or f32 instead when using lora * Add 'finetune.sh', which currently fails when using GPU "error: operator (): Finetuning on tensors with type 'f16' is not yet supported" * tweak finetune.sh * Suppress some warnings in ggml.c * Add f16 implementation to ggml_compute_forward_add_f16_f32 * Add an f16 case to ggml_add_cast_impl and llama_build_lora_finetune_graphs * finetune.sh: Edit comments * Add "add_f16_f32_f32_cuda" * Tweak an error message * finetune.sh: Add an optional LLAMA_MODEL_DIR variable * finetune.sh: Add an optional LLAMA_TRAINING_DIR variable * train : minor * tabs to spaces --------- Co-authored-by: Georgi Gerganov Co-authored-by: cebtenzzre --- common/train.cpp | 2 ++ common/train.h | 1 + examples/finetune/finetune.cpp | 14 ++++++++- examples/finetune/finetune.sh | 34 ++++++++++++++++++++++ ggml-cuda.cu | 17 +++++++++++ ggml-quants.c | 2 ++ ggml.c | 53 ++++++++++++++++++++++++---------- llama.cpp | 2 +- 8 files changed, 108 insertions(+), 17 deletions(-) create mode 100644 examples/finetune/finetune.sh diff --git a/common/train.cpp b/common/train.cpp index 3cce5da269637e..bc15b7a03c0cd4 100644 --- a/common/train.cpp +++ b/common/train.cpp @@ -1045,6 +1045,7 @@ struct train_params_common get_default_train_params_common() { params.n_batch = 8; params.n_gradient_accumulation = 1; params.n_epochs = -1; + params.n_gpu_layers = 0; params.custom_n_ctx = false; @@ -1080,6 +1081,7 @@ struct train_params_common get_default_train_params_common() { params.adam_beta2 = 0.999f; params.adam_gclip = 1.0f; params.adam_eps_f = 0.0f; + return params; } diff --git a/common/train.h b/common/train.h index 42fa704b897ae5..d86c93cc4f1472 100644 --- a/common/train.h +++ b/common/train.h @@ -44,6 +44,7 @@ struct train_params_common { int n_batch; int n_gradient_accumulation; int n_epochs; + int n_gpu_layers; bool custom_n_ctx; diff --git a/examples/finetune/finetune.cpp b/examples/finetune/finetune.cpp index 35824cd2d786a7..60c7faa797028a 100644 --- a/examples/finetune/finetune.cpp +++ b/examples/finetune/finetune.cpp @@ -652,7 +652,7 @@ static struct ggml_tensor * llama_build_lora_finetune_graphs( GGML_ASSERT(tokens_input->type == GGML_TYPE_I32); auto add_to_f32 = [] (struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b) { - if (ggml_is_quantized(a->type)) { + if (ggml_is_quantized(a->type) || a->type == GGML_TYPE_F16) { return ggml_add_cast(ctx, a, b, GGML_TYPE_F32); } else if (a->type == GGML_TYPE_F32) { return ggml_add(ctx, a, b); @@ -1459,6 +1459,17 @@ static bool train_params_parse(int argc, char ** argv, struct train_params * par } params->n_rank_w3 = std::stoi(argv[i]); params->custom_n_rank_w3 = true; + } else if (arg == "--gpu-layers" || arg == "-ngl" || arg == "--n-gpu-layers") { + if (++i >= argc) { + invalid_param = true; + break; + } +#ifdef LLAMA_SUPPORTS_GPU_OFFLOAD + params->common.n_gpu_layers = std::stoi(argv[i]); +#else + fprintf(stderr, "warning: not compiled with GPU offload support, --n-gpu-layers option will be ignored\n"); + fprintf(stderr, "warning: see main README.md for information on enabling GPU BLAS support\n"); +#endif } else { fprintf(stderr, "error: unknown argument: %s\n", arg.c_str()); train_print_usage(argc, argv, &default_params); @@ -1545,6 +1556,7 @@ int main(int argc, char ** argv) { srand(params.common.seed); struct llama_model_params llama_mparams = llama_model_default_params(); + llama_mparams.n_gpu_layers = params.common.n_gpu_layers; llama_mparams.vocab_only = false; printf("%s: model base = '%s'\n", __func__, params.fn_model_base); diff --git a/examples/finetune/finetune.sh b/examples/finetune/finetune.sh new file mode 100644 index 00000000000000..079bfa1139d5b5 --- /dev/null +++ b/examples/finetune/finetune.sh @@ -0,0 +1,34 @@ +#!/bin/bash +cd `dirname $0` +cd ../.. + +EXE="./finetune" + +if [[ ! $LLAMA_MODEL_DIR ]]; then LLAMA_MODEL_DIR="./models"; fi +if [[ ! $LLAMA_TRAINING_DIR ]]; then LLAMA_TRAINING_DIR="."; fi + +# MODEL="$LLAMA_MODEL_DIR/openllama-3b-v2-q8_0.gguf" # This is the model the readme uses. +MODEL="$LLAMA_MODEL_DIR/openllama-3b-v2.gguf" # An f16 model. Note in this case with "-g", you get an f32-format .BIN file that isn't yet supported if you use it with "main --lora" with GPU inferencing. + +while getopts "dg" opt; do + case $opt in + d) + DEBUGGER="gdb --args" + ;; + g) + EXE="./build/bin/Release/finetune" + GPUARG="--gpu-layers 25" + ;; + esac +done + +$DEBUGGER $EXE \ + --model-base $MODEL \ + $GPUARG \ + --checkpoint-in chk-ol3b-shakespeare-LATEST.gguf \ + --checkpoint-out chk-ol3b-shakespeare-ITERATION.gguf \ + --lora-out lora-ol3b-shakespeare-ITERATION.bin \ + --train-data "$LLAMA_TRAINING_DIR\shakespeare.txt" \ + --save-every 10 \ + --threads 10 --adam-iter 30 --batch 4 --ctx 64 \ + --use-checkpointing diff --git a/ggml-cuda.cu b/ggml-cuda.cu index 1ba951f688d82c..4e6e7cd94892b1 100644 --- a/ggml-cuda.cu +++ b/ggml-cuda.cu @@ -513,6 +513,15 @@ static __global__ void add_f16_f32_f16(const half * x, const float * y, half * d dst[i] = __hadd(x[i], __float2half(y[i])); } +static __global__ void add_f16_f32_f32(const half * x, const float * y, float * dst, const int k) { + const int i = blockDim.x*blockIdx.x + threadIdx.x; + + if (i >= k) { + return; + } + dst[i] = __half2float(x[i]) + y[i]; +} + static __global__ void mul_f32(const float * x, const float * y, float * dst, const int kx, const int ky) { const int i = blockDim.x*blockIdx.x + threadIdx.x; @@ -4693,6 +4702,11 @@ static void add_f16_f32_f16_cuda(const half * x, const float * y, half * dst, co add_f16_f32_f16<<>>(x, y, dst, k); } +static void add_f16_f32_f32_cuda(const half * x, const float * y, float * dst, const int k, cudaStream_t stream) { + const int num_blocks = (k + CUDA_ADD_BLOCK_SIZE - 1) / CUDA_ADD_BLOCK_SIZE; + add_f16_f32_f32<<>>(x, y, dst, k); +} + static void mul_f32_cuda(const float * x, const float * y, float * dst, const int kx, const int ky, cudaStream_t stream) { const int num_blocks = (kx + CUDA_MUL_BLOCK_SIZE - 1) / CUDA_MUL_BLOCK_SIZE; mul_f32<<>>(x, y, dst, kx, ky); @@ -5996,7 +6010,10 @@ inline void ggml_cuda_op_add( add_f32_cuda(src0_dd, src1_dd, dst_dd, ggml_nelements(src0), ne10*ne11, main_stream); } else if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F16) { add_f16_f32_f16_cuda((const half *) src0_dd, src1_dd, (half *) dst_dd, ggml_nelements(src0), main_stream); + } else if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F32) { + add_f16_f32_f32_cuda((const half *) src0_dd, src1_dd, dst_dd, ggml_nelements(src0), main_stream); } else { + fprintf(stderr, "src0->type: %d dst->type: %d\n", src0->type, dst->type); GGML_ASSERT(false); } diff --git a/ggml-quants.c b/ggml-quants.c index 72159446738e30..255c89b6a7ab84 100644 --- a/ggml-quants.c +++ b/ggml-quants.c @@ -716,6 +716,7 @@ void quantize_row_q8_0(const float * restrict x, void * restrict vy, int k) { __riscv_vse8_v_i8m1(y[i].qs , vs, vl); } #else + UNUSED(nb); // scalar quantize_row_q8_0_reference(x, y, k); #endif @@ -969,6 +970,7 @@ void quantize_row_q8_1(const float * restrict x, void * restrict vy, int k) { y[i].s = sum*d; } #else + UNUSED(nb); // scalar quantize_row_q8_1_reference(x, y, k); #endif diff --git a/ggml.c b/ggml.c index 84407b1224226f..80d682255328c3 100644 --- a/ggml.c +++ b/ggml.c @@ -3153,7 +3153,7 @@ static struct ggml_tensor * ggml_add_cast_impl( // TODO: support less-strict constraint // GGML_ASSERT(ggml_can_repeat(b, a)); GGML_ASSERT(ggml_can_repeat_rows(b, a)); - GGML_ASSERT(ggml_is_quantized(a->type)); // currently only supported for quantized input + GGML_ASSERT(ggml_is_quantized(a->type) || a->type == GGML_TYPE_F16); // currently only supported for quantized input and f16 bool is_node = false; @@ -6927,9 +6927,15 @@ static void ggml_compute_forward_add_f16_f32( GGML_ASSERT(src0->type == GGML_TYPE_F16); GGML_ASSERT(src1->type == GGML_TYPE_F32); - GGML_ASSERT(dst->type == GGML_TYPE_F16); - GGML_ASSERT( nb0 == sizeof(ggml_fp16_t)); + if (dst->type == GGML_TYPE_F32) { + GGML_ASSERT( nb0 == sizeof(float)); + } + else { + GGML_ASSERT(dst->type == GGML_TYPE_F16); + GGML_ASSERT( nb0 == sizeof(ggml_fp16_t)); + } + GGML_ASSERT(nb00 == sizeof(ggml_fp16_t)); // rows per thread @@ -6940,18 +6946,35 @@ static void ggml_compute_forward_add_f16_f32( const int ir1 = MIN(ir0 + dr, nr); if (nb10 == sizeof(float)) { - for (int ir = ir0; ir < ir1; ++ir) { - // src0, src1 and dst are same shape => same indices - const int i3 = ir/(ne2*ne1); - const int i2 = (ir - i3*ne2*ne1)/ne1; - const int i1 = (ir - i3*ne2*ne1 - i2*ne1); - - ggml_fp16_t * dst_ptr = (ggml_fp16_t *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1); - ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01); - float * src1_ptr = (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11); - - for (int i = 0; i < ne0; i++) { - dst_ptr[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(src0_ptr[i]) + src1_ptr[i]); + if (dst->type == GGML_TYPE_F16) { + for (int ir = ir0; ir < ir1; ++ir) { + // src0, src1 and dst are same shape => same indices + const int i3 = ir/(ne2*ne1); + const int i2 = (ir - i3*ne2*ne1)/ne1; + const int i1 = (ir - i3*ne2*ne1 - i2*ne1); + + ggml_fp16_t * dst_ptr = (ggml_fp16_t *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1); + ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01); + float * src1_ptr = (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11); + + for (int i = 0; i < ne0; i++) { + dst_ptr[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(src0_ptr[i]) + src1_ptr[i]); + } + } + } else { + for (int ir = ir0; ir < ir1; ++ir) { + // src0, src1 and dst are same shape => same indices + const int i3 = ir/(ne2*ne1); + const int i2 = (ir - i3*ne2*ne1)/ne1; + const int i1 = (ir - i3*ne2*ne1 - i2*ne1); + + float * dst_ptr = (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1); + ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01); + float * src1_ptr = (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11); + + for (int i = 0; i < ne0; i++) { + dst_ptr[i] = GGML_FP16_TO_FP32(src0_ptr[i]) + src1_ptr[i]; + } } } } diff --git a/llama.cpp b/llama.cpp index ead1d421d243dc..42cedc7a1cd592 100644 --- a/llama.cpp +++ b/llama.cpp @@ -8003,7 +8003,7 @@ static int llama_apply_lora_from_file_internal( if (dest_t->backend == GGML_BACKEND_GPU || dest_t->backend == GGML_BACKEND_GPU_SPLIT) { if (dest_t->type != GGML_TYPE_F16) { throw std::runtime_error(format( - "%s: error: the simultaneous use of LoRAs and GPU acceleration is only supported for f16 models", __func__)); + "%s: error: the simultaneous use of LoRAs and GPU acceleration is only supported for f16 models. dest_t->type: %d", __func__, dest_t->type)); } offload_func = ggml_cuda_assign_buffers; offload_func_force_inplace = ggml_cuda_assign_buffers_force_inplace; From 9a3b4f6c86503c9cfc049d4d0fdeafef12806f5e Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Wed, 1 Nov 2023 13:50:45 +0200 Subject: [PATCH 39/79] ggml : fix UNUSED macro (#3762) --- ggml-quants.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ggml-quants.c b/ggml-quants.c index 255c89b6a7ab84..740be6dc5c7981 100644 --- a/ggml-quants.c +++ b/ggml-quants.c @@ -716,7 +716,7 @@ void quantize_row_q8_0(const float * restrict x, void * restrict vy, int k) { __riscv_vse8_v_i8m1(y[i].qs , vs, vl); } #else - UNUSED(nb); + GGML_UNUSED(nb); // scalar quantize_row_q8_0_reference(x, y, k); #endif @@ -970,7 +970,7 @@ void quantize_row_q8_1(const float * restrict x, void * restrict vy, int k) { y[i].s = sum*d; } #else - UNUSED(nb); + GGML_UNUSED(nb); // scalar quantize_row_q8_1_reference(x, y, k); #endif From e75dfdd31b6a3dfa0627ba4ac3bb4b36e9db588e Mon Sep 17 00:00:00 2001 From: l3utterfly Date: Wed, 1 Nov 2023 21:40:43 +0800 Subject: [PATCH 40/79] sampling : null grammar field after reset (#3885) --- common/sampling.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/common/sampling.cpp b/common/sampling.cpp index 673d67a6d5380e..1317024c2c11cf 100644 --- a/common/sampling.cpp +++ b/common/sampling.cpp @@ -39,6 +39,7 @@ void llama_sampling_free(struct llama_sampling_context * ctx) { void llama_sampling_reset(llama_sampling_context * ctx) { if (ctx->grammar != NULL) { llama_grammar_free(ctx->grammar); + ctx->grammar = NULL; } if (!ctx->parsed_grammar.rules.empty()) { From a2758d08e44ce3624d233af4d23c6843e2e735b5 Mon Sep 17 00:00:00 2001 From: staviq Date: Wed, 1 Nov 2023 15:18:27 +0100 Subject: [PATCH 41/79] log : make generating separate log files optional (#3787) * impl --log-new, --log-append * Update common/log.h Co-authored-by: cebtenzzre * Update common/log.h Co-authored-by: cebtenzzre * Apply suggestions from code review Co-authored-by: cebtenzzre --------- Co-authored-by: cebtenzzre --- common/log.h | 122 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 82 insertions(+), 40 deletions(-) diff --git a/common/log.h b/common/log.h index d2c864ceab7be6..c0e814861e0c69 100644 --- a/common/log.h +++ b/common/log.h @@ -97,38 +97,56 @@ #define LOG_TEE_TARGET stderr #endif -// NOTE: currently disabled as it produces too many log files +// Utility for synchronizing log configuration state +// since std::optional was introduced only in c++17 +enum LogTriState +{ + LogTriStateSame, + LogTriStateFalse, + LogTriStateTrue +}; + // Utility to obtain "pid" like unique process id and use it when creating log files. -//inline std::string log_get_pid() -//{ -// static std::string pid; -// if (pid.empty()) -// { -// // std::this_thread::get_id() is the most portable way of obtaining a "process id" -// // it's not the same as "pid" but is unique enough to solve multiple instances -// // trying to write to the same log. -// std::stringstream ss; -// ss << std::this_thread::get_id(); -// pid = ss.str(); -// } -// -// return pid; -//} +inline std::string log_get_pid() +{ + static std::string pid; + if (pid.empty()) + { + // std::this_thread::get_id() is the most portable way of obtaining a "process id" + // it's not the same as "pid" but is unique enough to solve multiple instances + // trying to write to the same log. + std::stringstream ss; + ss << std::this_thread::get_id(); + pid = ss.str(); + } + + return pid; +} // Utility function for generating log file names with unique id based on thread id. // invocation with log_filename_generator( "llama", "log" ) creates a string "llama..log" // where the number is a runtime id of the current thread. -#define log_filename_generator(log_file_basename, log_file_extension) log_filename_generator_impl(log_file_basename, log_file_extension) +#define log_filename_generator(log_file_basename, log_file_extension) log_filename_generator_impl(LogTriStateSame, log_file_basename, log_file_extension) // INTERNAL, DO NOT USE -inline std::string log_filename_generator_impl(const std::string & log_file_basename, const std::string & log_file_extension) +inline std::string log_filename_generator_impl(LogTriState multilog, const std::string & log_file_basename, const std::string & log_file_extension) { + static bool _multilog = false; + + if (multilog != LogTriStateSame) + { + _multilog = multilog == LogTriStateTrue; + } + std::stringstream buf; buf << log_file_basename; - //buf << "."; - //buf << log_get_pid(); + if (_multilog) + { + buf << "."; + buf << log_get_pid(); + } buf << "."; buf << log_file_extension; @@ -213,15 +231,6 @@ inline std::string log_filename_generator_impl(const std::string & log_file_base #define LOG_TEE_FLF_VAL ,"" #endif -// Utility for synchronizing log configuration state -// since std::optional was introduced only in c++17 -enum LogTriState -{ - LogTriStateSame, - LogTriStateFalse, - LogTriStateTrue -}; - // INTERNAL, DO NOT USE // USE LOG() INSTEAD // @@ -315,16 +324,23 @@ enum LogTriState #endif // INTERNAL, DO NOT USE -inline FILE *log_handler1_impl(bool change = false, LogTriState disable = LogTriStateSame, const std::string & filename = LOG_DEFAULT_FILE_NAME, FILE *target = nullptr) +inline FILE *log_handler1_impl(bool change = false, LogTriState append = LogTriStateSame, LogTriState disable = LogTriStateSame, const std::string & filename = LOG_DEFAULT_FILE_NAME, FILE *target = nullptr) { - static bool _initialized{false}; - static bool _disabled{(filename.empty() && target == nullptr)}; + static bool _initialized = false; + static bool _append = false; + static bool _disabled = filename.empty() && target == nullptr; static std::string log_current_filename{filename}; static FILE *log_current_target{target}; static FILE *logfile = nullptr; if (change) { + if (append != LogTriStateSame) + { + _append = append == LogTriStateTrue; + return logfile; + } + if (disable == LogTriStateTrue) { // Disable primary target @@ -377,7 +393,7 @@ inline FILE *log_handler1_impl(bool change = false, LogTriState disable = LogTri } } - logfile = fopen(filename.c_str(), "w"); + logfile = fopen(filename.c_str(), _append ? "a" : "w"); } if (!logfile) @@ -398,9 +414,9 @@ inline FILE *log_handler1_impl(bool change = false, LogTriState disable = LogTri } // INTERNAL, DO NOT USE -inline FILE *log_handler2_impl(bool change = false, LogTriState disable = LogTriStateSame, FILE *target = nullptr, const std::string & filename = LOG_DEFAULT_FILE_NAME) +inline FILE *log_handler2_impl(bool change = false, LogTriState append = LogTriStateSame, LogTriState disable = LogTriStateSame, FILE *target = nullptr, const std::string & filename = LOG_DEFAULT_FILE_NAME) { - return log_handler1_impl(change, disable, filename, target); + return log_handler1_impl(change, append, disable, filename, target); } // Disables logs entirely at runtime. @@ -411,7 +427,7 @@ inline FILE *log_handler2_impl(bool change = false, LogTriState disable = LogTri // INTERNAL, DO NOT USE inline FILE *log_disable_impl() { - return log_handler1_impl(true, LogTriStateTrue); + return log_handler1_impl(true, LogTriStateSame, LogTriStateTrue); } // Enables logs at runtime. @@ -420,19 +436,31 @@ inline FILE *log_disable_impl() // INTERNAL, DO NOT USE inline FILE *log_enable_impl() { - return log_handler1_impl(true, LogTriStateFalse); + return log_handler1_impl(true, LogTriStateSame, LogTriStateFalse); } // Sets target fir logs, either by a file name or FILE* pointer (stdout, stderr, or any valid FILE*) #define log_set_target(target) log_set_target_impl(target) // INTERNAL, DO NOT USE -inline FILE *log_set_target_impl(const std::string & filename) { return log_handler1_impl(true, LogTriStateSame, filename); } -inline FILE *log_set_target_impl(FILE *target) { return log_handler2_impl(true, LogTriStateSame, target); } +inline FILE *log_set_target_impl(const std::string & filename) { return log_handler1_impl(true, LogTriStateSame, LogTriStateSame, filename); } +inline FILE *log_set_target_impl(FILE *target) { return log_handler2_impl(true, LogTriStateSame, LogTriStateSame, target); } // INTERNAL, DO NOT USE inline FILE *log_handler() { return log_handler1_impl(); } +// Enable or disable creating separate log files for each run. +// can ONLY be invoked BEFORE first log use. +#define log_multilog(enable) log_filename_generator_impl((enable) ? LogTriStateTrue : LogTriStateFalse, "", "") +// Enable or disable append mode for log file. +// can ONLY be invoked BEFORE first log use. +#define log_append(enable) log_append_impl(enable) +// INTERNAL, DO NOT USE +inline FILE *log_append_impl(bool enable) +{ + return log_handler1_impl(true, enable ? LogTriStateTrue : LogTriStateFalse, LogTriStateSame); +} + inline void log_test() { log_disable(); @@ -494,6 +522,18 @@ inline bool log_param_single_parse(const std::string & param) return true; } + if (param == "--log-new") + { + log_multilog(true); + return true; + } + + if (param == "--log-append") + { + log_append(true); + return true; + } + return false; } @@ -523,7 +563,9 @@ inline void log_print_usage() printf(" --log-disable Disable trace logs\n"); printf(" --log-enable Enable trace logs\n"); printf(" --log-file Specify a log filename (without extension)\n"); - printf(" Log file will be tagged with unique ID and written as \"..log\"\n"); /* */ + printf(" --log-new Create a separate new log file on start. " + "Each log file will have unique name: \"..log\"\n"); + printf(" --log-append Don't truncate the old log file.\n"); } #define log_dump_cmdline(argc, argv) log_dump_cmdline_impl(argc, argv) From 0e40806c1cb3bdf9955ed807ffbe212be85b4c67 Mon Sep 17 00:00:00 2001 From: bandoti <141645996+bandoti@users.noreply.github.com> Date: Wed, 1 Nov 2023 14:42:01 -0300 Subject: [PATCH 42/79] common : allow caller to handle help/argument exceptions (#3715) * Allow caller to handle help/argument exceptions * Prepend newline to usage output * Add new gpt_params_parse_ex function to hide arg-parse impl * Fix issue blocking success case * exit instead of returning false * Update common/common.h Co-authored-by: Georgi Gerganov * Update common/common.cpp Co-authored-by: Georgi Gerganov --------- Co-authored-by: Georgi Gerganov --- common/common.cpp | 41 ++++++++++++++++++++++++++--------------- common/common.h | 2 ++ 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/common/common.cpp b/common/common.cpp index dc4865e80b1544..89be4126185db5 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -103,9 +103,24 @@ void process_escapes(std::string& input) { } bool gpt_params_parse(int argc, char ** argv, gpt_params & params) { + bool result = true; + try { + if (!gpt_params_parse_ex(argc, argv, params)) { + gpt_print_usage(argc, argv, gpt_params()); + exit(0); + } + } + catch (const std::invalid_argument& ex) { + fprintf(stderr, ex.what()); + gpt_print_usage(argc, argv, gpt_params()); + exit(1); + } + return result; +} + +bool gpt_params_parse_ex(int argc, char ** argv, gpt_params & params) { bool invalid_param = false; std::string arg; - gpt_params default_params; const std::string arg_prefix = "--"; llama_sampling_params & sparams = params.sparams; @@ -554,11 +569,8 @@ bool gpt_params_parse(int argc, char ** argv, gpt_params & params) { break; } } else if (arg == "-h" || arg == "--help") { - gpt_print_usage(argc, argv, default_params); -#ifndef LOG_DISABLE_LOGS - log_print_usage(); -#endif // LOG_DISABLE_LOGS - exit(0); + return false; + } else if (arg == "--random-prompt") { params.random_prompt = true; } else if (arg == "--in-prefix-bos") { @@ -617,22 +629,17 @@ bool gpt_params_parse(int argc, char ** argv, gpt_params & params) { // End of Parse args for logging parameters #endif // LOG_DISABLE_LOGS } else { - fprintf(stderr, "error: unknown argument: %s\n", arg.c_str()); - gpt_print_usage(argc, argv, default_params); - exit(1); + throw std::invalid_argument("error: unknown argument: " + arg); } } if (invalid_param) { - fprintf(stderr, "error: invalid parameter for argument: %s\n", arg.c_str()); - gpt_print_usage(argc, argv, default_params); - exit(1); + throw std::invalid_argument("error: invalid parameter for argument: " + arg); } if (params.prompt_cache_all && (params.interactive || params.interactive_first || params.instruct)) { - fprintf(stderr, "error: --prompt-cache-all not supported in interactive mode yet\n"); - gpt_print_usage(argc, argv, default_params); - exit(1); + + throw std::invalid_argument("error: --prompt-cache-all not supported in interactive mode yet\n"); } if (params.escape) { @@ -651,6 +658,7 @@ bool gpt_params_parse(int argc, char ** argv, gpt_params & params) { void gpt_print_usage(int /*argc*/, char ** argv, const gpt_params & params) { const llama_sampling_params & sparams = params.sparams; + printf("\n"); printf("usage: %s [options]\n", argv[0]); printf("\n"); printf("options:\n"); @@ -762,6 +770,9 @@ void gpt_print_usage(int /*argc*/, char ** argv, const gpt_params & params) { printf(" -ld LOGDIR, --logdir LOGDIR\n"); printf(" path under which to save YAML logs (no logging if unset)\n"); printf("\n"); +#ifndef LOG_DISABLE_LOGS + log_print_usage(); +#endif // LOG_DISABLE_LOGS } std::string get_system_info(const gpt_params & params) { diff --git a/common/common.h b/common/common.h index 84523a4fbf460a..343b272177c7ec 100644 --- a/common/common.h +++ b/common/common.h @@ -110,6 +110,8 @@ struct gpt_params { std::string image = ""; // path to an image file }; +bool gpt_params_parse_ex(int argc, char ** argv, gpt_params & params); + bool gpt_params_parse(int argc, char ** argv, gpt_params & params); void gpt_print_usage(int argc, char ** argv, const gpt_params & params); From 50337961a678fce4081554b24e56e86b67660163 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Wed, 1 Nov 2023 20:11:02 +0200 Subject: [PATCH 43/79] llm : add llm_build_context (#3881) * llm : add llm_build_context * llm : deduce norm eps based on type + explict max_alibi_bias, clamp_kqv * llm : restore the non-graph llm_build_ functional API ggml-ci * llm : cleanup + comments --- llama.cpp | 1986 +++++++++++++++++++++++------------------------------ 1 file changed, 866 insertions(+), 1120 deletions(-) diff --git a/llama.cpp b/llama.cpp index 42cedc7a1cd592..d0c4ef10151828 100644 --- a/llama.cpp +++ b/llama.cpp @@ -3090,6 +3090,10 @@ static bool llama_model_load( return true; } +// +// llm_build +// + using llm_build_cb = std::function; enum llm_rope_type { @@ -3098,17 +3102,35 @@ enum llm_rope_type { LLM_ROPE_GLM, }; +enum llm_ffn_op_type { + LLM_FFN_SILU, + LLM_FFN_GELU, + LLM_FFN_RELU, + LLM_FFN_RELU_SQR, +}; + +enum llm_ffn_gate_type { + LLM_FFN_SEQ, + LLM_FFN_PAR, // ffn_gate is parallel to ffn_up +}; + +enum llm_norm_type { + LLM_NORM, + LLM_NORM_RMS, +}; + static struct ggml_tensor * llm_build_inp_embd( struct ggml_context * ctx, + const llama_hparams & hparams, const llama_batch & batch, struct ggml_tensor * tok_embd, - int64_t n_embd, - int32_t n_tokens, const llm_build_cb & cb) { + const int64_t n_embd = hparams.n_embd; + struct ggml_tensor * inpL; if (batch.token) { - struct ggml_tensor * inp_tokens = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, n_tokens); + struct ggml_tensor * inp_tokens = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, batch.n_tokens); cb(inp_tokens, "inp_tokens", -1); inpL = ggml_get_rows(ctx, tok_embd, inp_tokens); @@ -3117,7 +3139,7 @@ static struct ggml_tensor * llm_build_inp_embd( GGML_ASSERT(false && "not implemented"); #endif - inpL = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, n_embd, n_tokens); + inpL = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, n_embd, batch.n_tokens); } return inpL; @@ -3126,28 +3148,21 @@ static struct ggml_tensor * llm_build_inp_embd( // Persimmon: n_rot = n_embd_head/2 // Other: n_rot = n_embd_head static void llm_build_k_shift( - const llama_context & lctx, - struct ggml_context * ctx, - struct ggml_cgraph * graph, - int64_t n_rot, - llm_rope_type type, - const llm_build_cb & cb) { - const auto & model = lctx.model; - const auto & kv_self = lctx.kv_self; - const auto & cparams = lctx.cparams; - - const auto & hparams = model.hparams; - + struct ggml_context * ctx, + const llama_hparams & hparams, + const llama_kv_cache & kv, + struct ggml_cgraph * graph, + llm_rope_type type, + int64_t n_ctx, + int64_t n_rot, + float freq_base, + float freq_scale, + const llm_build_cb & cb) { const int64_t n_layer = hparams.n_layer; const int64_t n_head_kv = hparams.n_head_kv; const int64_t n_embd_gqa = hparams.n_embd_gqa(); const int64_t n_embd_head = hparams.n_embd_head(); - const int64_t n_ctx = lctx.cparams.n_ctx; - - const float freq_base = cparams.rope_freq_base; - const float freq_scale = cparams.rope_freq_scale; - GGML_ASSERT(n_embd_head % n_rot == 0); struct ggml_tensor * K_shift = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, n_ctx); @@ -3165,11 +3180,11 @@ static void llm_build_k_shift( struct ggml_tensor * tmp = // we rotate only the first n_rot dimensions ggml_rope_custom_inplace(ctx, - ggml_view_3d(ctx, kv_self.k, + ggml_view_3d(ctx, kv.k, n_rot, n_head_kv, n_ctx, - ggml_element_size(kv_self.k)*n_embd_head, - ggml_element_size(kv_self.k)*n_embd_gqa, - ggml_element_size(kv_self.k)*n_embd_gqa*n_ctx*il), + ggml_element_size(kv.k)*n_embd_head, + ggml_element_size(kv.k)*n_embd_gqa, + ggml_element_size(kv.k)*n_embd_gqa*n_ctx*il), K_shift, n_rot, rope_type, 0, freq_base, freq_scale); cb(tmp, "K_shifted", il); ggml_build_forward_expand(graph, tmp); @@ -3177,22 +3192,17 @@ static void llm_build_k_shift( } static void llm_build_kv_store( - const llama_context & lctx, struct ggml_context * ctx, + const llama_hparams & hparams, + const llama_kv_cache & kv, struct ggml_cgraph * graph, struct ggml_tensor * k_cur, struct ggml_tensor * v_cur, + int64_t n_ctx, int32_t n_tokens, int32_t kv_head, const llm_build_cb & cb, int64_t il) { - const auto & model = lctx.model; - const auto & kv_self = lctx.kv_self; - const auto & cparams = lctx.cparams; - - const auto & hparams = model.hparams; - - const int64_t n_ctx = cparams.n_ctx; const int64_t n_embd_gqa = hparams.n_embd_gqa(); // compute the transposed [n_tokens, n_embd] V matrix @@ -3200,13 +3210,13 @@ static void llm_build_kv_store( //struct ggml_tensor * v_cur_t = ggml_transpose(ctx, v_cur); // TODO: reshape above is likely not needed cb(v_cur_t, "v_cur_t", il); - struct ggml_tensor * k_cache_view = ggml_view_1d(ctx, kv_self.k, n_tokens*n_embd_gqa, - (ggml_element_size(kv_self.k)*n_embd_gqa)*(il*n_ctx + kv_head)); + struct ggml_tensor * k_cache_view = ggml_view_1d(ctx, kv.k, n_tokens*n_embd_gqa, + (ggml_element_size(kv.k)*n_embd_gqa)*(il*n_ctx + kv_head)); cb(k_cache_view, "k_cache_view", il); - struct ggml_tensor * v_cache_view = ggml_view_2d(ctx, kv_self.v, n_tokens, n_embd_gqa, - ( n_ctx)*ggml_element_size(kv_self.v), - (il*n_ctx)*ggml_element_size(kv_self.v)*n_embd_gqa + kv_head*ggml_element_size(kv_self.v)); + struct ggml_tensor * v_cache_view = ggml_view_2d(ctx, kv.v, n_tokens, n_embd_gqa, + ( n_ctx)*ggml_element_size(kv.v), + (il*n_ctx)*ggml_element_size(kv.v)*n_embd_gqa + kv_head*ggml_element_size(kv.v)); cb(v_cache_view, "v_cache_view", il); // important: storing RoPE-ed version of K in the KV cache! @@ -3214,23 +3224,18 @@ static void llm_build_kv_store( ggml_build_forward_expand(graph, ggml_cpy(ctx, v_cur_t, v_cache_view)); } -enum llm_norm_type { - LLM_NORM, - LLM_NORM_RMS, -}; - static struct ggml_tensor * llm_build_norm( struct ggml_context * ctx, struct ggml_tensor * cur, + const llama_hparams & hparams, struct ggml_tensor * mw, struct ggml_tensor * mb, llm_norm_type type, - float eps, const llm_build_cb & cb, int il) { switch (type) { - case LLM_NORM: cur = ggml_norm (ctx, cur, eps); break; - case LLM_NORM_RMS: cur = ggml_rms_norm(ctx, cur, eps); break; + case LLM_NORM: cur = ggml_norm (ctx, cur, hparams.f_norm_eps); break; + case LLM_NORM_RMS: cur = ggml_rms_norm(ctx, cur, hparams.f_norm_rms_eps); break; } if (mw || mb) { @@ -3251,18 +3256,6 @@ static struct ggml_tensor * llm_build_norm( return cur; } -enum llm_ffn_op_type { - LLM_FFN_SILU, - LLM_FFN_GELU, - LLM_FFN_RELU, - LLM_FFN_RELU_SQR, -}; - -enum llm_ffn_gate_type { - LLM_FFN_SEQ, - LLM_FFN_PAR, // ffn_gate is parallel to ffn_up -}; - static struct ggml_tensor * llm_build_ffn( struct ggml_context * ctx, struct ggml_tensor * cur, @@ -3351,26 +3344,21 @@ static struct ggml_tensor * llm_build_ffn( // if max_alibi_bias > 0 then apply ALiBi static struct ggml_tensor * llm_build_kqv( - const llama_context & lctx, struct ggml_context * ctx, struct ggml_tensor * cur, + const llama_hparams & hparams, + const llama_kv_cache & kv, struct ggml_tensor * wo, struct ggml_tensor * wo_b, struct ggml_tensor * q_cur, struct ggml_tensor * kq_scale, struct ggml_tensor * kq_mask, + int64_t n_ctx, int32_t n_tokens, int32_t n_kv, - float alibi_bias_max, + float max_alibi_bias, const llm_build_cb & cb, - int il) { - const auto & model = lctx.model; - const auto & kv_self = lctx.kv_self; - const auto & cparams = lctx.cparams; - - const auto & hparams = model.hparams; - - const int64_t n_ctx = cparams.n_ctx; + int il) { const int64_t n_embd = hparams.n_embd; const int64_t n_head = hparams.n_head; const int64_t n_head_kv = hparams.n_head_kv; @@ -3381,11 +3369,11 @@ static struct ggml_tensor * llm_build_kqv( cb(q, "q", il); struct ggml_tensor * k = - ggml_view_3d(ctx, kv_self.k, + ggml_view_3d(ctx, kv.k, n_embd_head, n_kv, n_head_kv, - ggml_element_size(kv_self.k)*n_embd_gqa, - ggml_element_size(kv_self.k)*n_embd_head, - ggml_element_size(kv_self.k)*n_embd_gqa*n_ctx*il); + ggml_element_size(kv.k)*n_embd_gqa, + ggml_element_size(kv.k)*n_embd_head, + ggml_element_size(kv.k)*n_embd_gqa*n_ctx*il); cb(k, "k", il); struct ggml_tensor * kq = ggml_mul_mat(ctx, k, q); @@ -3394,11 +3382,11 @@ static struct ggml_tensor * llm_build_kqv( kq = ggml_scale(ctx, kq, kq_scale); cb(kq, "kq_scaled", il); - if (alibi_bias_max > 0.0f) { + if (max_alibi_bias > 0.0f) { // TODO: n_head or n_head_kv // TODO: K-shift is likely not working // TODO: change to ggml_add - kq = ggml_alibi(ctx, kq, /*n_past*/ 0, n_head, alibi_bias_max); + kq = ggml_alibi(ctx, kq, /*n_past*/ 0, n_head, max_alibi_bias); cb(kq, "kq_scaled_alibi", il); } @@ -3410,11 +3398,11 @@ static struct ggml_tensor * llm_build_kqv( // split cached v into n_head heads struct ggml_tensor * v = - ggml_view_3d(ctx, kv_self.v, + ggml_view_3d(ctx, kv.v, n_kv, n_embd_head, n_head_kv, - ggml_element_size(kv_self.v)*n_ctx, - ggml_element_size(kv_self.v)*n_ctx*n_embd_head, - ggml_element_size(kv_self.v)*n_ctx*n_embd_gqa*il); + ggml_element_size(kv.v)*n_ctx, + ggml_element_size(kv.v)*n_ctx*n_embd_head, + ggml_element_size(kv.v)*n_ctx*n_embd_gqa*il); cb(v, "v", il); struct ggml_tensor * kqv = ggml_mul_mat(ctx, v, kq); @@ -3438,1259 +3426,1011 @@ static struct ggml_tensor * llm_build_kqv( return cur; } -static struct ggml_cgraph * llm_build_llama( - llama_context & lctx, - const llama_batch & batch, - const llm_build_cb & cb, - bool worst_case) { - const auto & model = lctx.model; - const auto & hparams = model.hparams; - const auto & cparams = lctx.cparams; - - const auto & kv_self = lctx.kv_self; +struct llm_build_context { + const llama_model & model; + const llama_hparams & hparams; + const llama_cparams & cparams; + const llama_batch & batch; + const llama_kv_cache & kv_self; - GGML_ASSERT(!!kv_self.ctx); + const int64_t n_embd; + const int64_t n_layer; + const int64_t n_ctx; // user-specified context size (can be different from n_ctx_train) + const int64_t n_head; + const int64_t n_head_kv; + const int64_t n_embd_head; + const int64_t n_embd_gqa; - const int64_t n_embd = hparams.n_embd; - const int64_t n_layer = hparams.n_layer; - const int64_t n_ctx = cparams.n_ctx; - const int64_t n_head = hparams.n_head; - const int64_t n_head_kv = hparams.n_head_kv; - const int64_t n_embd_head = hparams.n_embd_head(); + const float freq_base; + const float freq_scale; + const float norm_eps; + const float norm_rms_eps; - GGML_ASSERT(n_embd_head == hparams.n_rot); + const int32_t n_tokens; + const int32_t n_kv; // size of KV cache to consider (n_kv <= n_ctx) + const int32_t kv_head; // index of where we store new KV data in the cache - const float freq_base = cparams.rope_freq_base; - const float freq_scale = cparams.rope_freq_scale; - const float norm_rms_eps = hparams.f_norm_rms_eps; + const bool do_rope_shift; - const int32_t n_tokens = batch.n_tokens; - const int32_t n_kv = worst_case ? n_ctx : kv_self.n; - const int32_t kv_head = worst_case ? n_ctx - n_tokens : kv_self.head; + const llm_build_cb & cb; - const bool do_rope_shift = worst_case || kv_self.has_shift; + llama_buffer & buf_compute; - //printf("n_kv = %d\n", n_kv); + struct ggml_context * ctx0 = nullptr; - auto & buf_compute = lctx.buf_compute; - - struct ggml_init_params params = { - /*.mem_size =*/ buf_compute.size, - /*.mem_buffer =*/ buf_compute.data, - /*.no_alloc =*/ true, - }; - - struct ggml_context * ctx0 = ggml_init(params); - - ggml_cgraph * gf = ggml_new_graph(ctx0); - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; - - inpL = llm_build_inp_embd(ctx0, batch, model.tok_embd, n_embd, n_tokens, cb); - cb(inpL, "inp_embd", -1); - - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); - cb(inp_pos, "inp_pos", -1); - - // KQ_scale - struct ggml_tensor * KQ_scale = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); - cb(KQ_scale, "KQ_scale", -1); - - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); - cb(KQ_mask, "KQ_mask", -1); + // TODO: consider making the entire interface noexcept + llm_build_context( + llama_context & lctx, + const llama_batch & batch, + const llm_build_cb & cb, + bool worst_case) : + model (lctx.model), + hparams (model.hparams), + cparams (lctx.cparams), + batch (batch), + kv_self (lctx.kv_self), + n_embd (hparams.n_embd), + n_layer (hparams.n_layer), + n_ctx (cparams.n_ctx), + n_head (hparams.n_head), + n_head_kv (hparams.n_head_kv), + n_embd_head (hparams.n_embd_head()), + n_embd_gqa (hparams.n_embd_gqa()), + freq_base (cparams.rope_freq_base), + freq_scale (cparams.rope_freq_scale), + norm_eps (hparams.f_norm_eps), + norm_rms_eps (hparams.f_norm_rms_eps), + n_tokens (batch.n_tokens), + n_kv (worst_case ? n_ctx : kv_self.n), + kv_head (worst_case ? n_ctx - n_tokens : kv_self.head), + do_rope_shift (worst_case || kv_self.has_shift), + cb (cb), + buf_compute (lctx.buf_compute) { + GGML_ASSERT(!!kv_self.ctx); + + // all initializations should be done in init() + } + + void init() { + struct ggml_init_params params = { + /*.mem_size =*/ buf_compute.size, + /*.mem_buffer =*/ buf_compute.data, + /*.no_alloc =*/ true, + }; - // shift the entire K-cache if needed - if (do_rope_shift) { - llm_build_k_shift(lctx, ctx0, gf, n_embd_head, LLM_ROPE, cb); + ctx0 = ggml_init(params); } - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * inpSA = inpL; - - // norm - cur = llm_build_norm(ctx0, inpL, - model.layers[il].attn_norm, NULL, - LLM_NORM_RMS, norm_rms_eps, cb, il); - cb(cur, "attn_norm", il); - - // self-attention - { - // compute Q and K and RoPE them - struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); - cb(Qcur, "Qcur", il); - - struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); - cb(Kcur, "Kcur", il); - - struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); - cb(Vcur, "Vcur", il); - - Qcur = ggml_rope_custom(ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens), inp_pos, n_embd_head, 0, 0, freq_base, freq_scale); - cb(Qcur, "Qcur", il); - - Kcur = ggml_rope_custom(ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens), inp_pos, n_embd_head, 0, 0, freq_base, freq_scale); - cb(Kcur, "Kcur", il); - - llm_build_kv_store(lctx, ctx0, gf, Kcur, Vcur, n_tokens, kv_head, cb, il); - - cur = llm_build_kqv(lctx, ctx0, cur, - model.layers[il].wo, NULL, - Qcur, KQ_scale, KQ_mask, n_tokens, n_kv, -1.0f, cb, il); - cb(cur, "kqv_out", il); - } - - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); - cb(ffn_inp, "ffn_inp", il); - - // feed-forward network - { - cur = llm_build_norm(ctx0, ffn_inp, - model.layers[il].ffn_norm, NULL, - LLM_NORM_RMS, norm_rms_eps, cb, il); - cb(cur, "ffn_norm", il); - - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, NULL, - model.layers[il].ffn_gate, NULL, - model.layers[il].ffn_down, NULL, - LLM_FFN_SILU, LLM_FFN_PAR, cb, il); - cb(cur, "ffn_out", il); + void free() { + if (ctx0) { + ggml_free(ctx0); + ctx0 = nullptr; } - - cur = ggml_add(ctx0, cur, ffn_inp); - cb(cur, "l_out", il); - - // input for next layer - inpL = cur; } - cur = inpL; - - cur = llm_build_norm(ctx0, cur, - model.output_norm, NULL, - LLM_NORM_RMS, norm_rms_eps, cb, -1); - cb(cur, "result_norm", -1); - - // lm_head - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - ggml_free(ctx0); - - return gf; -} - -static struct ggml_cgraph * llm_build_baichaun( - llama_context & lctx, - const llama_batch & batch, - const llm_build_cb & cb, - bool worst_case) { - const auto & model = lctx.model; - const auto & hparams = model.hparams; - const auto & cparams = lctx.cparams; - - const auto & kv_self = lctx.kv_self; - - GGML_ASSERT(!!kv_self.ctx); - - const int64_t n_embd = hparams.n_embd; - const int64_t n_layer = hparams.n_layer; - const int64_t n_ctx = cparams.n_ctx; - const int64_t n_head = hparams.n_head; - const int64_t n_head_kv = hparams.n_head_kv; - const int64_t n_embd_head = hparams.n_embd_head(); - - GGML_ASSERT(n_embd_head == hparams.n_rot); - - const float freq_base = cparams.rope_freq_base; - const float freq_scale = cparams.rope_freq_scale; - const float norm_rms_eps = hparams.f_norm_rms_eps; + struct ggml_cgraph * build_llama() { + struct ggml_cgraph * gf = ggml_new_graph(ctx0); - const int32_t n_tokens = batch.n_tokens; - const int32_t n_kv = worst_case ? n_ctx : kv_self.n; - const int32_t kv_head = worst_case ? n_ctx - n_tokens : kv_self.head; + GGML_ASSERT(n_embd_head == hparams.n_rot); - const bool do_rope_shift = worst_case || kv_self.has_shift; + struct ggml_tensor * cur; + struct ggml_tensor * inpL; - auto & buf_compute = lctx.buf_compute; + inpL = llm_build_inp_embd(ctx0, hparams, batch, model.tok_embd, cb); + cb(inpL, "inp_embd", -1); - struct ggml_init_params params = { - /*.mem_size =*/ buf_compute.size, - /*.mem_buffer =*/ buf_compute.data, - /*.no_alloc =*/ true, - }; + // inp_pos - contains the positions + struct ggml_tensor * inp_pos = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); + cb(inp_pos, "inp_pos", -1); - struct ggml_context * ctx0 = ggml_init(params); + // KQ_scale + struct ggml_tensor * KQ_scale = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); + cb(KQ_scale, "KQ_scale", -1); - ggml_cgraph * gf = ggml_new_graph(ctx0); + // KQ_mask (mask for 1 head, it will be broadcasted to all heads) + struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); + cb(KQ_mask, "KQ_mask", -1); - struct ggml_tensor * cur; - struct ggml_tensor * inpL; + // shift the entire K-cache if needed + if (do_rope_shift) { + llm_build_k_shift(ctx0, hparams, kv_self, gf, LLM_ROPE, n_ctx, n_embd_head, freq_base, freq_scale, cb); + } - inpL = llm_build_inp_embd(ctx0, batch, model.tok_embd, n_embd, n_tokens, cb); - cb(inpL, "inp_embd", -1); + for (int il = 0; il < n_layer; ++il) { + struct ggml_tensor * inpSA = inpL; - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); - cb(inp_pos, "inp_pos", -1); + // norm + cur = llm_build_norm(ctx0, inpL, hparams, + model.layers[il].attn_norm, NULL, + LLM_NORM_RMS, cb, il); + cb(cur, "attn_norm", il); - // KQ_scale - struct ggml_tensor * KQ_scale = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); - cb(KQ_scale, "KQ_scale", -1); + // self-attention + { + // compute Q and K and RoPE them + struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); + cb(Qcur, "Qcur", il); - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); - cb(KQ_mask, "KQ_mask", -1); + struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); + cb(Kcur, "Kcur", il); - // shift the entire K-cache if needed - if (do_rope_shift) { - llm_build_k_shift(lctx, ctx0, gf, n_embd_head, LLM_ROPE, cb); - } + struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); + cb(Vcur, "Vcur", il); - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * inpSA = inpL; + Qcur = ggml_rope_custom(ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens), inp_pos, n_embd_head, 0, 0, freq_base, freq_scale); + cb(Qcur, "Qcur", il); - cur = llm_build_norm(ctx0, inpL, - model.layers[il].attn_norm, NULL, - LLM_NORM_RMS, norm_rms_eps, cb, il); - cb(cur, "attn_norm", il); + Kcur = ggml_rope_custom(ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens), inp_pos, n_embd_head, 0, 0, freq_base, freq_scale); + cb(Kcur, "Kcur", il); - // self-attention - { - struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); - cb(Qcur, "Qcur", il); + llm_build_kv_store(ctx0, hparams, kv_self, gf, Kcur, Vcur, n_ctx, n_tokens, kv_head, cb, il); - struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); - cb(Kcur, "Kcur", il); + cur = llm_build_kqv(ctx0, cur, hparams, kv_self, + model.layers[il].wo, NULL, + Qcur, KQ_scale, KQ_mask, n_ctx, n_tokens, n_kv, -1.0f, cb, il); + cb(cur, "kqv_out", il); + } - struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); - cb(Vcur, "Vcur", il); + struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); + cb(ffn_inp, "ffn_inp", il); - switch (model.type) { - case MODEL_7B: - Qcur = ggml_rope_custom(ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens), inp_pos, n_embd_head, 0, 0, freq_base, freq_scale); - Kcur = ggml_rope_custom(ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens), inp_pos, n_embd_head, 0, 0, freq_base, freq_scale); - break; - case MODEL_13B: - Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd/n_head, n_head, n_tokens); - Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd/n_head, n_head, n_tokens); - break; - default: - GGML_ASSERT(false); + // feed-forward network + { + cur = llm_build_norm(ctx0, ffn_inp, hparams, + model.layers[il].ffn_norm, NULL, + LLM_NORM_RMS, cb, il); + cb(cur, "ffn_norm", il); + + cur = llm_build_ffn(ctx0, cur, + model.layers[il].ffn_up, NULL, + model.layers[il].ffn_gate, NULL, + model.layers[il].ffn_down, NULL, + LLM_FFN_SILU, LLM_FFN_PAR, cb, il); + cb(cur, "ffn_out", il); } - cb(Qcur, "Qcur", il); - cb(Kcur, "Kcur", il); - llm_build_kv_store(lctx, ctx0, gf, Kcur, Vcur, n_tokens, kv_head, cb, il); + cur = ggml_add(ctx0, cur, ffn_inp); + cb(cur, "l_out", il); - // apply ALiBi for 13B model - const float alibi_bias_max = model.type == MODEL_13B ? 8.0f : -1.0f; - - cur = llm_build_kqv(lctx, ctx0, cur, - model.layers[il].wo, NULL, - Qcur, KQ_scale, KQ_mask, n_tokens, n_kv, alibi_bias_max, cb, il); - cb(cur, "kqv_out", il); + // input for next layer + inpL = cur; } - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); - cb(ffn_inp, "ffn_inp", il); + cur = inpL; - // feed-forward network - { - cur = llm_build_norm(ctx0, ffn_inp, - model.layers[il].ffn_norm, NULL, - LLM_NORM_RMS, norm_rms_eps, cb, il); - cb(cur, "ffn_norm", il); + cur = llm_build_norm(ctx0, cur, hparams, + model.output_norm, NULL, + LLM_NORM_RMS, cb, -1); + cb(cur, "result_norm", -1); - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, NULL, - model.layers[il].ffn_gate, NULL, - model.layers[il].ffn_down, NULL, - LLM_FFN_SILU, LLM_FFN_PAR, cb, il); - cb(cur, "ffn_out", il); - } + // lm_head + cur = ggml_mul_mat(ctx0, model.output, cur); + cb(cur, "result_output", -1); - cur = ggml_add(ctx0, cur, ffn_inp); - cb(cur, "l_out", il); + ggml_build_forward_expand(gf, cur); - // input for next layer - inpL = cur; + return gf; } - cur = inpL; + struct ggml_cgraph * build_baichuan() { + struct ggml_cgraph * gf = ggml_new_graph(ctx0); - cur = llm_build_norm(ctx0, cur, - model.output_norm, NULL, - LLM_NORM_RMS, norm_rms_eps, cb, -1); - cb(cur, "result_norm", -1); + struct ggml_tensor * cur; + struct ggml_tensor * inpL; - // lm_head - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); + inpL = llm_build_inp_embd(ctx0, hparams, batch, model.tok_embd, cb); + cb(inpL, "inp_embd", -1); - ggml_build_forward_expand(gf, cur); + // inp_pos - contains the positions + struct ggml_tensor * inp_pos = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); + cb(inp_pos, "inp_pos", -1); - ggml_free(ctx0); + // KQ_scale + struct ggml_tensor * KQ_scale = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); + cb(KQ_scale, "KQ_scale", -1); - return gf; -} - -static struct ggml_cgraph * llm_build_falcon( - llama_context & lctx, - const llama_batch & batch, - const llm_build_cb & cb, - bool worst_case) { - const auto & model = lctx.model; - const auto & hparams = model.hparams; - const auto & cparams = lctx.cparams; - - const auto & kv_self = lctx.kv_self; - - GGML_ASSERT(!!kv_self.ctx); - - const int64_t n_embd = hparams.n_embd; - const int64_t n_layer = hparams.n_layer; - const int64_t n_ctx = cparams.n_ctx; - const int64_t n_head = hparams.n_head; - const int64_t n_head_kv = hparams.n_head_kv; - const int64_t n_embd_head = hparams.n_embd_head(); - const int64_t n_embd_gqa = hparams.n_embd_gqa(); - - GGML_ASSERT(n_embd_head == hparams.n_rot); + // KQ_mask (mask for 1 head, it will be broadcasted to all heads) + struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); + cb(KQ_mask, "KQ_mask", -1); - const float freq_base = cparams.rope_freq_base; - const float freq_scale = cparams.rope_freq_scale; - const float norm_eps = hparams.f_norm_eps; - - const int32_t n_tokens = batch.n_tokens; - const int32_t n_kv = worst_case ? n_ctx : kv_self.n; - const int32_t kv_head = worst_case ? n_ctx - n_tokens : kv_self.head; - - const bool do_rope_shift = worst_case || kv_self.has_shift; - - //printf("kv_head = %d, n_kv = %d, n_tokens = %d, n_ctx = %d, is_measure = %d, has_shift = %d\n", - // kv_head, n_kv, n_tokens, n_ctx, ggml_allocr_is_measure(lctx.alloc), kv_self.has_shift); - - auto & buf_compute = lctx.buf_compute; - - struct ggml_init_params params = { - /*.mem_size =*/ buf_compute.size, - /*.mem_buffer =*/ buf_compute.data, - /*.no_alloc =*/ true, - }; - - struct ggml_context * ctx0 = ggml_init(params); - - ggml_cgraph * gf = ggml_new_graph(ctx0); + // shift the entire K-cache if needed + if (do_rope_shift) { + llm_build_k_shift(ctx0, hparams, kv_self, gf, LLM_ROPE, n_ctx, n_embd_head, freq_base, freq_scale, cb); + } - struct ggml_tensor * cur; - struct ggml_tensor * inpL; + for (int il = 0; il < n_layer; ++il) { + struct ggml_tensor * inpSA = inpL; - inpL = llm_build_inp_embd(ctx0, batch, model.tok_embd, n_embd, n_tokens, cb); - cb(inpL, "inp_embd", -1); + cur = llm_build_norm(ctx0, inpL, hparams, + model.layers[il].attn_norm, NULL, + LLM_NORM_RMS, cb, il); + cb(cur, "attn_norm", il); - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); - cb(inp_pos, "inp_pos", -1); + // self-attention + { + struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); + cb(Qcur, "Qcur", il); - // KQ_scale - struct ggml_tensor * KQ_scale = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); - cb(KQ_scale, "KQ_scale", -1); + struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); + cb(Kcur, "Kcur", il); - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); - cb(KQ_mask, "KQ_mask", -1); + struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); + cb(Vcur, "Vcur", il); - // shift the entire K-cache if needed - if (do_rope_shift) { - llm_build_k_shift(lctx, ctx0, gf, n_embd_head, LLM_ROPE_NEOX, cb); - } + switch (model.type) { + case MODEL_7B: + Qcur = ggml_rope_custom(ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens), inp_pos, n_embd_head, 0, 0, freq_base, freq_scale); + Kcur = ggml_rope_custom(ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens), inp_pos, n_embd_head, 0, 0, freq_base, freq_scale); + break; + case MODEL_13B: + Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd/n_head, n_head, n_tokens); + Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd/n_head, n_head, n_tokens); + break; + default: + GGML_ASSERT(false); + } + cb(Qcur, "Qcur", il); + cb(Kcur, "Kcur", il); - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * attn_norm; + llm_build_kv_store(ctx0, hparams, kv_self, gf, Kcur, Vcur, n_ctx, n_tokens, kv_head, cb, il); - attn_norm = llm_build_norm(ctx0, inpL, - model.layers[il].attn_norm, - model.layers[il].attn_norm_b, - LLM_NORM, norm_eps, cb, il); - cb(attn_norm, "attn_norm", il); + // apply ALiBi for 13B model + const float max_alibi_bias = model.type == MODEL_13B ? 8.0f : -1.0f; - // self-attention - { - if (model.layers[il].attn_norm_2) { - // Falcon-40B - cur = llm_build_norm(ctx0, attn_norm, - model.layers[il].attn_norm_2, - model.layers[il].attn_norm_2_b, - LLM_NORM, norm_eps, cb, il); - cb(cur, "attn_norm_2", il); - } else { - cur = attn_norm; + cur = llm_build_kqv(ctx0, cur, hparams, kv_self, + model.layers[il].wo, NULL, + Qcur, KQ_scale, KQ_mask, n_ctx, n_tokens, n_kv, max_alibi_bias, cb, il); + cb(cur, "kqv_out", il); } - cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); - cb(cur, "wqkv", il); - - struct ggml_tensor * Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); - struct ggml_tensor * Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); - struct ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); - - cb(Qcur, "Qcur", il); - cb(Kcur, "Kcur", il); - cb(Vcur, "Vcur", il); + struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); + cb(ffn_inp, "ffn_inp", il); - Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); - Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); - - // using mode = 2 for neox mode - Qcur = ggml_rope_custom(ctx0, Qcur, inp_pos, n_embd_head, 2, 0, freq_base, freq_scale); - cb(Qcur, "Qcur", il); - - Kcur = ggml_rope_custom(ctx0, Kcur, inp_pos, n_embd_head, 2, 0, freq_base, freq_scale); - cb(Kcur, "Kcur", il); + // feed-forward network + { + cur = llm_build_norm(ctx0, ffn_inp, hparams, + model.layers[il].ffn_norm, NULL, + LLM_NORM_RMS, cb, il); + cb(cur, "ffn_norm", il); + + cur = llm_build_ffn(ctx0, cur, + model.layers[il].ffn_up, NULL, + model.layers[il].ffn_gate, NULL, + model.layers[il].ffn_down, NULL, + LLM_FFN_SILU, LLM_FFN_PAR, cb, il); + cb(cur, "ffn_out", il); + } - llm_build_kv_store(lctx, ctx0, gf, Kcur, Vcur, n_tokens, kv_head, cb, il); + cur = ggml_add(ctx0, cur, ffn_inp); + cb(cur, "l_out", il); - cur = llm_build_kqv(lctx, ctx0, attn_norm, - model.layers[il].wo, NULL, - Qcur, KQ_scale, KQ_mask, n_tokens, n_kv, -1.0f, cb, il); - cb(cur, "kqv_out", il); + // input for next layer + inpL = cur; } - struct ggml_tensor * ffn_inp = cur; + cur = inpL; - // feed forward - { - cur = llm_build_ffn(ctx0, attn_norm, // !! use the attn norm, not the result - model.layers[il].ffn_up, NULL, - NULL, NULL, - model.layers[il].ffn_down, NULL, - LLM_FFN_GELU, LLM_FFN_SEQ, cb, il); - cb(cur, "ffn_out", il); - } + cur = llm_build_norm(ctx0, cur, hparams, + model.output_norm, NULL, + LLM_NORM_RMS, cb, -1); + cb(cur, "result_norm", -1); - cur = ggml_add(ctx0, cur, ffn_inp); - cb(cur, "l_out", il); + // lm_head + cur = ggml_mul_mat(ctx0, model.output, cur); + cb(cur, "result_output", -1); - cur = ggml_add(ctx0, cur, inpL); - cb(cur, "l_out", il); + ggml_build_forward_expand(gf, cur); - // input for next layer - inpL = cur; + return gf; } - cur = inpL; - - // norm - cur = llm_build_norm(ctx0, cur, - model.output_norm, - model.output_norm_b, - LLM_NORM, norm_eps, cb, -1); - cb(cur, "result_norm", -1); - - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); + struct ggml_cgraph * build_falcon() { + struct ggml_cgraph * gf = ggml_new_graph(ctx0); - ggml_build_forward_expand(gf, cur); + struct ggml_tensor * cur; + struct ggml_tensor * inpL; - ggml_free(ctx0); + inpL = llm_build_inp_embd(ctx0, hparams, batch, model.tok_embd, cb); + cb(inpL, "inp_embd", -1); - return gf; -} - -static struct ggml_cgraph * llm_build_starcoder( - llama_context & lctx, - const llama_batch & batch, - const llm_build_cb & cb, - bool worst_case) { - const auto & model = lctx.model; - const auto & hparams = model.hparams; - const auto & cparams = lctx.cparams; - - const auto & kv_self = lctx.kv_self; - - GGML_ASSERT(!!kv_self.ctx); - - const int64_t n_embd = hparams.n_embd; - const int64_t n_layer = hparams.n_layer; - const int64_t n_ctx = cparams.n_ctx; - const int64_t n_head = hparams.n_head; - const int64_t n_embd_head = hparams.n_embd_head(); - const int64_t n_embd_gqa = hparams.n_embd_gqa(); - - GGML_ASSERT(n_embd_head == hparams.n_rot); - - const float norm_eps = hparams.f_norm_eps; + // inp_pos - contains the positions + struct ggml_tensor * inp_pos = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); + cb(inp_pos, "inp_pos", -1); - const int32_t n_tokens = batch.n_tokens; - const int32_t n_kv = worst_case ? n_ctx : kv_self.n; - const int32_t kv_head = worst_case ? n_ctx - n_tokens : kv_self.head; + // KQ_scale + struct ggml_tensor * KQ_scale = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); + cb(KQ_scale, "KQ_scale", -1); - auto & buf_compute = lctx.buf_compute; + // KQ_mask (mask for 1 head, it will be broadcasted to all heads) + struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); + cb(KQ_mask, "KQ_mask", -1); - struct ggml_init_params params = { - /*.mem_size =*/ buf_compute.size, - /*.mem_buffer =*/ buf_compute.data, - /*.no_alloc =*/ true, - }; - - struct ggml_context * ctx0 = ggml_init(params); + // shift the entire K-cache if needed + if (do_rope_shift) { + llm_build_k_shift(ctx0, hparams, kv_self, gf, LLM_ROPE_NEOX, n_ctx, n_embd_head, freq_base, freq_scale, cb); + } - ggml_cgraph * gf = ggml_new_graph(ctx0); + for (int il = 0; il < n_layer; ++il) { + struct ggml_tensor * attn_norm; - struct ggml_tensor * cur; - struct ggml_tensor * pos; - struct ggml_tensor * inpL; + attn_norm = llm_build_norm(ctx0, inpL, hparams, + model.layers[il].attn_norm, + model.layers[il].attn_norm_b, + LLM_NORM, cb, il); + cb(attn_norm, "attn_norm", il); - inpL = llm_build_inp_embd(ctx0, batch, model.tok_embd, n_embd, n_tokens, cb); - cb(inpL, "inp_embd", -1); + // self-attention + { + if (model.layers[il].attn_norm_2) { + // Falcon-40B + cur = llm_build_norm(ctx0, attn_norm, hparams, + model.layers[il].attn_norm_2, + model.layers[il].attn_norm_2_b, + LLM_NORM, cb, il); + cb(cur, "attn_norm_2", il); + } else { + cur = attn_norm; + } - // inp_pos - contains the positions - struct ggml_tensor * inp_pos = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); - cb(inp_pos, "inp_pos", -1); + cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); + cb(cur, "wqkv", il); - // KQ_scale - struct ggml_tensor * KQ_scale = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); - cb(KQ_scale, "KQ_scale", -1); + struct ggml_tensor * Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); + struct ggml_tensor * Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); + struct ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); - cb(KQ_mask, "KQ_mask", -1); + cb(Qcur, "Qcur", il); + cb(Kcur, "Kcur", il); + cb(Vcur, "Vcur", il); - pos = ggml_get_rows(ctx0, model.pos_embd, inp_pos); - cb(pos, "pos_embd", -1); + Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); + Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); - inpL = ggml_add(ctx0, inpL, pos); - cb(inpL, "inpL", -1); + // using mode = 2 for neox mode + Qcur = ggml_rope_custom(ctx0, Qcur, inp_pos, n_embd_head, 2, 0, freq_base, freq_scale); + cb(Qcur, "Qcur", il); - for (int il = 0; il < n_layer; ++il) { - cur = llm_build_norm(ctx0, inpL, - model.layers[il].attn_norm, - model.layers[il].attn_norm_b, - LLM_NORM, norm_eps, cb, il); - cb(cur, "attn_norm", il); + Kcur = ggml_rope_custom(ctx0, Kcur, inp_pos, n_embd_head, 2, 0, freq_base, freq_scale); + cb(Kcur, "Kcur", il); - // self-attention - { - cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); - cb(cur, "wqkv", il); + llm_build_kv_store(ctx0, hparams, kv_self, gf, Kcur, Vcur, n_ctx, n_tokens, kv_head, cb, il); - cur = ggml_add(ctx0, cur, model.layers[il].bqkv); - cb(cur, "bqkv", il); + cur = llm_build_kqv(ctx0, attn_norm, hparams, kv_self, + model.layers[il].wo, NULL, + Qcur, KQ_scale, KQ_mask, n_ctx, n_tokens, n_kv, -1.0f, cb, il); + cb(cur, "kqv_out", il); + } - struct ggml_tensor * Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); - struct ggml_tensor * Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); - struct ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); + struct ggml_tensor * ffn_inp = cur; - cb(Qcur, "Qcur", il); - cb(Kcur, "Kcur", il); - cb(Vcur, "Vcur", il); + // feed forward + { + cur = llm_build_ffn(ctx0, attn_norm, // !! use the attn norm, not the result + model.layers[il].ffn_up, NULL, + NULL, NULL, + model.layers[il].ffn_down, NULL, + LLM_FFN_GELU, LLM_FFN_SEQ, cb, il); + cb(cur, "ffn_out", il); + } - Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); + cur = ggml_add(ctx0, cur, ffn_inp); + cb(cur, "l_out", il); - llm_build_kv_store(lctx, ctx0, gf, Kcur, Vcur, n_tokens, kv_head, cb, il); + cur = ggml_add(ctx0, cur, inpL); + cb(cur, "l_out", il); - cur = llm_build_kqv(lctx, ctx0, cur, - model.layers[il].wo, model.layers[il].bo, - Qcur, KQ_scale, KQ_mask, n_tokens, n_kv, -1.0f, cb, il); - cb(cur, "kqv_out", il); + // input for next layer + inpL = cur; } - // add the input - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpL); - cb(ffn_inp, "ffn_inp", il); + cur = inpL; - // FF - { - cur = llm_build_norm(ctx0, ffn_inp, - model.layers[il].ffn_norm, - model.layers[il].ffn_norm_b, - LLM_NORM, norm_eps, cb, il); - cb(cur, "ffn_norm", il); - - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, model.layers[il].ffn_up_b, - NULL, NULL, - model.layers[il].ffn_down, model.layers[il].ffn_down_b, - LLM_FFN_GELU, LLM_FFN_SEQ, cb, il); - cb(cur, "ffn_out", il); - } + // norm + cur = llm_build_norm(ctx0, cur, hparams, + model.output_norm, + model.output_norm_b, + LLM_NORM, cb, -1); + cb(cur, "result_norm", -1); - inpL = ggml_add(ctx0, cur, ffn_inp); - cb(inpL, "l_out", il); - } + cur = ggml_mul_mat(ctx0, model.output, cur); + cb(cur, "result_output", -1); - cur = llm_build_norm(ctx0, inpL, - model.output_norm, - model.output_norm_b, - LLM_NORM, norm_eps, cb, -1); - cb(cur, "result_norm", -1); + ggml_build_forward_expand(gf, cur); - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); + return gf; + } - ggml_build_forward_expand(gf, cur); - ggml_free(ctx0); + struct ggml_cgraph * build_starcoder() { + struct ggml_cgraph * gf = ggml_new_graph(ctx0); - return gf; -} + struct ggml_tensor * cur; + struct ggml_tensor * pos; + struct ggml_tensor * inpL; -static struct ggml_cgraph * llm_build_persimmon( - llama_context & lctx, - const llama_batch & batch, - const llm_build_cb & cb, - bool worst_case) { - const auto & model = lctx.model; - const auto & hparams = model.hparams; + inpL = llm_build_inp_embd(ctx0, hparams, batch, model.tok_embd, cb); + cb(inpL, "inp_embd", -1); - const auto & kv_self = lctx.kv_self; + // inp_pos - contains the positions + struct ggml_tensor * inp_pos = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); + cb(inp_pos, "inp_pos", -1); - GGML_ASSERT(!!kv_self.ctx); + // KQ_scale + struct ggml_tensor * KQ_scale = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); + cb(KQ_scale, "KQ_scale", -1); - const auto & cparams = lctx.cparams; + // KQ_mask (mask for 1 head, it will be broadcasted to all heads) + struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); + cb(KQ_mask, "KQ_mask", -1); - const int64_t n_embd = hparams.n_embd; - const int64_t n_layer = hparams.n_layer; - const int64_t n_ctx = cparams.n_ctx; - const int64_t n_head_kv = hparams.n_head_kv; - const int64_t n_head = hparams.n_head; - const int64_t n_embd_head = hparams.n_embd_head(); - const int64_t n_rot = n_embd_head / 2; + pos = ggml_get_rows(ctx0, model.pos_embd, inp_pos); + cb(pos, "pos_embd", -1); - const float freq_base = cparams.rope_freq_base; - const float freq_scale = cparams.rope_freq_scale; - const float norm_eps = hparams.f_norm_eps; + inpL = ggml_add(ctx0, inpL, pos); + cb(inpL, "inpL", -1); - const int32_t n_tokens = batch.n_tokens; - const int32_t n_kv = worst_case ? n_ctx : kv_self.n; - const int32_t kv_head = worst_case ? n_ctx - n_tokens : kv_self.head; + for (int il = 0; il < n_layer; ++il) { + cur = llm_build_norm(ctx0, inpL, hparams, + model.layers[il].attn_norm, + model.layers[il].attn_norm_b, + LLM_NORM, cb, il); + cb(cur, "attn_norm", il); - const bool do_rope_shift = worst_case || kv_self.has_shift; + // self-attention + { + cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); + cb(cur, "wqkv", il); - auto & buf_compute = lctx.buf_compute; + cur = ggml_add(ctx0, cur, model.layers[il].bqkv); + cb(cur, "bqkv", il); - struct ggml_init_params params = { - /*.mem_size =*/ buf_compute.size, - /*.mem_buffer =*/ buf_compute.data, - /*.no_alloc =*/ true, - }; + struct ggml_tensor * Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); + struct ggml_tensor * Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); + struct ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); - struct ggml_context * ctx0 = ggml_init(params); + cb(Qcur, "Qcur", il); + cb(Kcur, "Kcur", il); + cb(Vcur, "Vcur", il); - ggml_cgraph * gf = ggml_new_graph(ctx0); + Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); - struct ggml_tensor * cur; - struct ggml_tensor * inpL; + llm_build_kv_store(ctx0, hparams, kv_self, gf, Kcur, Vcur, n_ctx, n_tokens, kv_head, cb, il); - inpL = llm_build_inp_embd(ctx0, batch, model.tok_embd, n_embd, n_tokens, cb); - cb(inpL, "imp_embd", -1); + cur = llm_build_kqv(ctx0, cur, hparams, kv_self, + model.layers[il].wo, model.layers[il].bo, + Qcur, KQ_scale, KQ_mask, n_ctx, n_tokens, n_kv, -1.0f, cb, il); + cb(cur, "kqv_out", il); + } - struct ggml_tensor * inp_pos = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); - cb(inp_pos, "inp_pos", -1); + // add the input + struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpL); + cb(ffn_inp, "ffn_inp", il); - // KQ_scale - struct ggml_tensor * KQ_scale = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); - cb(KQ_scale, "KQ_scale", -1); + // FF + { + cur = llm_build_norm(ctx0, ffn_inp, hparams, + model.layers[il].ffn_norm, + model.layers[il].ffn_norm_b, + LLM_NORM, cb, il); + cb(cur, "ffn_norm", il); + + cur = llm_build_ffn(ctx0, cur, + model.layers[il].ffn_up, model.layers[il].ffn_up_b, + NULL, NULL, + model.layers[il].ffn_down, model.layers[il].ffn_down_b, + LLM_FFN_GELU, LLM_FFN_SEQ, cb, il); + cb(cur, "ffn_out", il); + } - struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); - cb(KQ_mask, "KQ_mask", -1); + inpL = ggml_add(ctx0, cur, ffn_inp); + cb(inpL, "l_out", il); + } - if (do_rope_shift) { - llm_build_k_shift(lctx, ctx0, gf, n_rot, LLM_ROPE_NEOX, cb); - } + cur = llm_build_norm(ctx0, inpL, hparams, + model.output_norm, + model.output_norm_b, + LLM_NORM, cb, -1); + cb(cur, "result_norm", -1); - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * residual = inpL; + cur = ggml_mul_mat(ctx0, model.output, cur); + cb(cur, "result_output", -1); - cur = llm_build_norm(ctx0, inpL, - model.layers[il].attn_norm, - model.layers[il].attn_norm_b, - LLM_NORM, norm_eps, cb, il); - cb(cur, "attn_norm", il); + ggml_build_forward_expand(gf, cur); - // self attention - { - cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); - cb(cur, "wqkv", il); - - cur = ggml_add(ctx0, cur, model.layers[il].bqkv); - cb(cur, "bqkv", il); - - // split qkv - GGML_ASSERT(n_head_kv == n_head); - - struct ggml_tensor * tmpqkv = ggml_reshape_4d(ctx0, cur, n_embd_head, 3, n_head, n_tokens); - cb(tmpqkv, "tmpqkv", il); - - struct ggml_tensor * tmpqkv_perm = ggml_cont(ctx0, ggml_permute(ctx0, tmpqkv, 0, 3, 1, 2)); - cb(tmpqkv_perm, "tmpqkv", il); - - struct ggml_tensor * tmpq = ggml_view_3d( - ctx0, tmpqkv_perm, n_embd_head, n_head, n_tokens, - ggml_element_size(tmpqkv_perm) * n_embd_head, - ggml_element_size(tmpqkv_perm) * n_embd_head * n_head, - 0 - ); - cb(tmpq, "tmpq", il); - - struct ggml_tensor * tmpk = ggml_view_3d( - ctx0, tmpqkv_perm, n_embd_head, n_head, n_tokens, - ggml_element_size(tmpqkv_perm) * n_embd_head, - ggml_element_size(tmpqkv_perm) * n_embd_head * n_head, - ggml_element_size(tmpqkv_perm) * n_embd_head * n_head * n_tokens - ); - cb(tmpk, "tmpk", il); - - // Q/K Layernorm - tmpq = llm_build_norm(ctx0, tmpq, - model.layers[il].attn_q_norm, - model.layers[il].attn_q_norm_b, - LLM_NORM, norm_eps, cb, il); - cb(tmpq, "tmpq", il); - - tmpk = llm_build_norm(ctx0, tmpk, - model.layers[il].attn_k_norm, - model.layers[il].attn_k_norm_b, - LLM_NORM, norm_eps, cb, il); - cb(tmpk, "tmpk", il); - - // RoPE the first n_rot of q/k, pass the other half, and concat. - struct ggml_tensor * qrot = ggml_view_3d( - ctx0, tmpq, n_rot, n_head, n_tokens, - ggml_element_size(tmpq) * n_embd_head, - ggml_element_size(tmpq) * n_embd_head * n_head, - 0 - ); - cb(qrot, "qrot", il); + return gf; + } - struct ggml_tensor * krot = ggml_view_3d( - ctx0, tmpk, n_rot, n_head, n_tokens, - ggml_element_size(tmpk) * n_embd_head, - ggml_element_size(tmpk) * n_embd_head * n_head, - 0 - ); - cb(krot, "krot", il); - - // get the second half of tmpq, e.g tmpq[n_rot:, :, :] - struct ggml_tensor * qpass = ggml_view_3d( - ctx0, tmpq, n_rot, n_head, n_tokens, - ggml_element_size(tmpq) * n_embd_head, - ggml_element_size(tmpq) * n_embd_head * n_head, - ggml_element_size(tmpq) * n_rot - ); - cb(qpass, "qpass", il); + struct ggml_cgraph * build_persimmon() { + struct ggml_cgraph * gf = ggml_new_graph(ctx0); - struct ggml_tensor * kpass = ggml_view_3d( - ctx0, tmpk, n_rot, n_head, n_tokens, - ggml_element_size(tmpk) * n_embd_head, - ggml_element_size(tmpk) * n_embd_head * n_head, - ggml_element_size(tmpk) * n_rot - ); - cb(kpass, "kpass", il); + const int64_t n_rot = n_embd_head / 2; - struct ggml_tensor * qrotated = ggml_rope_custom( - ctx0, qrot, inp_pos, n_rot, 2, 0, freq_base, freq_scale - ); - cb(qrotated, "qrotated", il); + struct ggml_tensor * cur; + struct ggml_tensor * inpL; - struct ggml_tensor * krotated = ggml_rope_custom( - ctx0, krot, inp_pos, n_rot, 2, 0, freq_base, freq_scale - ); - cb(krotated, "krotated", il); + inpL = llm_build_inp_embd(ctx0, hparams, batch, model.tok_embd, cb); + cb(inpL, "imp_embd", -1); - // ggml currently only supports concatenation on dim=2 - // so we need to permute qrot, qpass, concat, then permute back. - qrotated = ggml_cont(ctx0, ggml_permute(ctx0, qrotated, 2, 1, 0, 3)); - cb(qrotated, "qrotated", il); + struct ggml_tensor * inp_pos = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens); + cb(inp_pos, "inp_pos", -1); - krotated = ggml_cont(ctx0, ggml_permute(ctx0, krotated, 2, 1, 0, 3)); - cb(krotated, "krotated", il); + // KQ_scale + struct ggml_tensor * KQ_scale = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); + cb(KQ_scale, "KQ_scale", -1); - qpass = ggml_cont(ctx0, ggml_permute(ctx0, qpass, 2, 1, 0, 3)); - cb(qpass, "qpass", il); + struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); + cb(KQ_mask, "KQ_mask", -1); - kpass = ggml_cont(ctx0, ggml_permute(ctx0, kpass, 2, 1, 0, 3)); - cb(kpass, "kpass", il); + if (do_rope_shift) { + llm_build_k_shift(ctx0, hparams, kv_self, gf, LLM_ROPE_NEOX, n_ctx, n_embd_head, freq_base, freq_scale, cb); + } - struct ggml_tensor * Qcur = ggml_concat(ctx0, qrotated, qpass); - cb(Qcur, "Qcur", il); + for (int il = 0; il < n_layer; ++il) { + struct ggml_tensor * residual = inpL; - struct ggml_tensor * Kcur = ggml_concat(ctx0, krotated, kpass); - cb(Kcur, "Kcur", il); + cur = llm_build_norm(ctx0, inpL, hparams, + model.layers[il].attn_norm, + model.layers[il].attn_norm_b, + LLM_NORM, cb, il); + cb(cur, "attn_norm", il); - struct ggml_tensor * Q = ggml_cont(ctx0, ggml_permute(ctx0, Qcur, 1, 2, 0, 3)); - cb(Q, "Q", il); + // self attention + { + cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); + cb(cur, "wqkv", il); + + cur = ggml_add(ctx0, cur, model.layers[il].bqkv); + cb(cur, "bqkv", il); + + // split qkv + GGML_ASSERT(n_head_kv == n_head); + + struct ggml_tensor * tmpqkv = ggml_reshape_4d(ctx0, cur, n_embd_head, 3, n_head, n_tokens); + cb(tmpqkv, "tmpqkv", il); + + struct ggml_tensor * tmpqkv_perm = ggml_cont(ctx0, ggml_permute(ctx0, tmpqkv, 0, 3, 1, 2)); + cb(tmpqkv_perm, "tmpqkv", il); + + struct ggml_tensor * tmpq = ggml_view_3d( + ctx0, tmpqkv_perm, n_embd_head, n_head, n_tokens, + ggml_element_size(tmpqkv_perm) * n_embd_head, + ggml_element_size(tmpqkv_perm) * n_embd_head * n_head, + 0 + ); + cb(tmpq, "tmpq", il); + + struct ggml_tensor * tmpk = ggml_view_3d( + ctx0, tmpqkv_perm, n_embd_head, n_head, n_tokens, + ggml_element_size(tmpqkv_perm) * n_embd_head, + ggml_element_size(tmpqkv_perm) * n_embd_head * n_head, + ggml_element_size(tmpqkv_perm) * n_embd_head * n_head * n_tokens + ); + cb(tmpk, "tmpk", il); + + // Q/K Layernorm + tmpq = llm_build_norm(ctx0, tmpq, hparams, + model.layers[il].attn_q_norm, + model.layers[il].attn_q_norm_b, + LLM_NORM, cb, il); + cb(tmpq, "tmpq", il); + + tmpk = llm_build_norm(ctx0, tmpk, hparams, + model.layers[il].attn_k_norm, + model.layers[il].attn_k_norm_b, + LLM_NORM, cb, il); + cb(tmpk, "tmpk", il); + + // RoPE the first n_rot of q/k, pass the other half, and concat. + struct ggml_tensor * qrot = ggml_view_3d( + ctx0, tmpq, n_rot, n_head, n_tokens, + ggml_element_size(tmpq) * n_embd_head, + ggml_element_size(tmpq) * n_embd_head * n_head, + 0 + ); + cb(qrot, "qrot", il); + + struct ggml_tensor * krot = ggml_view_3d( + ctx0, tmpk, n_rot, n_head, n_tokens, + ggml_element_size(tmpk) * n_embd_head, + ggml_element_size(tmpk) * n_embd_head * n_head, + 0 + ); + cb(krot, "krot", il); + + // get the second half of tmpq, e.g tmpq[n_rot:, :, :] + struct ggml_tensor * qpass = ggml_view_3d( + ctx0, tmpq, n_rot, n_head, n_tokens, + ggml_element_size(tmpq) * n_embd_head, + ggml_element_size(tmpq) * n_embd_head * n_head, + ggml_element_size(tmpq) * n_rot + ); + cb(qpass, "qpass", il); + + struct ggml_tensor * kpass = ggml_view_3d( + ctx0, tmpk, n_rot, n_head, n_tokens, + ggml_element_size(tmpk) * n_embd_head, + ggml_element_size(tmpk) * n_embd_head * n_head, + ggml_element_size(tmpk) * n_rot + ); + cb(kpass, "kpass", il); + + struct ggml_tensor * qrotated = ggml_rope_custom( + ctx0, qrot, inp_pos, n_rot, 2, 0, freq_base, freq_scale + ); + cb(qrotated, "qrotated", il); + + struct ggml_tensor * krotated = ggml_rope_custom( + ctx0, krot, inp_pos, n_rot, 2, 0, freq_base, freq_scale + ); + cb(krotated, "krotated", il); + + // ggml currently only supports concatenation on dim=2 + // so we need to permute qrot, qpass, concat, then permute back. + qrotated = ggml_cont(ctx0, ggml_permute(ctx0, qrotated, 2, 1, 0, 3)); + cb(qrotated, "qrotated", il); + + krotated = ggml_cont(ctx0, ggml_permute(ctx0, krotated, 2, 1, 0, 3)); + cb(krotated, "krotated", il); + + qpass = ggml_cont(ctx0, ggml_permute(ctx0, qpass, 2, 1, 0, 3)); + cb(qpass, "qpass", il); + + kpass = ggml_cont(ctx0, ggml_permute(ctx0, kpass, 2, 1, 0, 3)); + cb(kpass, "kpass", il); + + struct ggml_tensor * Qcur = ggml_concat(ctx0, qrotated, qpass); + cb(Qcur, "Qcur", il); + + struct ggml_tensor * Kcur = ggml_concat(ctx0, krotated, kpass); + cb(Kcur, "Kcur", il); + + struct ggml_tensor * Q = ggml_cont(ctx0, ggml_permute(ctx0, Qcur, 1, 2, 0, 3)); + cb(Q, "Q", il); + + Kcur = ggml_cont(ctx0, ggml_permute(ctx0, Kcur, 2, 1, 0, 3)); + cb(Kcur, "Kcur", il); + + struct ggml_tensor * Vcur = ggml_view_3d( + ctx0, tmpqkv_perm, n_embd_head, n_head, n_tokens, + ggml_element_size(tmpqkv_perm) * n_embd_head, + ggml_element_size(tmpqkv_perm) * n_embd_head * n_head, + ggml_element_size(tmpqkv_perm) * n_embd_head * n_head * n_tokens * 2 + ); + cb(Vcur, "Vcur", il); + + llm_build_kv_store(ctx0, hparams, kv_self, gf, Kcur, Vcur, n_ctx, n_tokens, kv_head, cb, il); + + // TODO: not tested, could be broken + cur = llm_build_kqv(ctx0, Q, hparams, kv_self, + model.layers[il].wo, model.layers[il].bo, + Q, KQ_scale, KQ_mask, n_ctx, n_tokens, n_kv, -1.0f, cb, il); + cb(cur, "kqv_out", il); + } - Kcur = ggml_cont(ctx0, ggml_permute(ctx0, Kcur, 2, 1, 0, 3)); - cb(Kcur, "Kcur", il); + struct ggml_tensor * ffn_inp = ggml_add(ctx0, residual, cur); + cb(ffn_inp, "ffn_inp", il); - struct ggml_tensor * Vcur = ggml_view_3d( - ctx0, tmpqkv_perm, n_embd_head, n_head, n_tokens, - ggml_element_size(tmpqkv_perm) * n_embd_head, - ggml_element_size(tmpqkv_perm) * n_embd_head * n_head, - ggml_element_size(tmpqkv_perm) * n_embd_head * n_head * n_tokens * 2 - ); - cb(Vcur, "Vcur", il); + // feed-forward network + { + cur = llm_build_norm(ctx0, ffn_inp, hparams, + model.layers[il].ffn_norm, + model.layers[il].ffn_norm_b, + LLM_NORM, cb, il); + cb(cur, "ffn_norm", il); + + cur = llm_build_ffn(ctx0, cur, + model.layers[il].ffn_up, model.layers[il].ffn_up_b, + NULL, NULL, + model.layers[il].ffn_down, model.layers[il].ffn_down_b, + LLM_FFN_RELU_SQR, LLM_FFN_SEQ, cb, il); + cb(cur, "ffn_out", il); + } - llm_build_kv_store(lctx, ctx0, gf, Kcur, Vcur, n_tokens, kv_head, cb, il); + cur = ggml_add(ctx0, cur, ffn_inp); + cb(cur, "l_out", il); - // TODO: not tested, could be broken - cur = llm_build_kqv(lctx, ctx0, Q, - model.layers[il].wo, model.layers[il].bo, - Q, KQ_scale, KQ_mask, n_tokens, n_kv, -1.0f, cb, il); - cb(cur, "kqv_out", il); + inpL = cur; } - struct ggml_tensor * ffn_inp = ggml_add(ctx0, residual, cur); - cb(ffn_inp, "ffn_inp", il); + cur = inpL; - // feed-forward network - { - cur = llm_build_norm(ctx0, ffn_inp, - model.layers[il].ffn_norm, - model.layers[il].ffn_norm_b, - LLM_NORM, norm_eps, cb, il); - cb(cur, "ffn_norm", il); + cur = llm_build_norm(ctx0, cur, hparams, + model.output_norm, + model.output_norm_b, + LLM_NORM, cb, -1); + cb(cur, "result_norm", -1); - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, model.layers[il].ffn_up_b, - NULL, NULL, - model.layers[il].ffn_down, model.layers[il].ffn_down_b, - LLM_FFN_RELU_SQR, LLM_FFN_SEQ, cb, il); - cb(cur, "ffn_out", il); - } + cur = ggml_mul_mat(ctx0, model.output, cur); + cb(cur, "result_output", -1); - cur = ggml_add(ctx0, cur, ffn_inp); - cb(cur, "l_out", il); + ggml_build_forward_expand(gf, cur); - inpL = cur; + return gf; } - cur = inpL; - - cur = llm_build_norm(ctx0, cur, - model.output_norm, - model.output_norm_b, - LLM_NORM, norm_eps, cb, -1); - cb(cur, "result_norm", -1); - - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - ggml_free(ctx0); - - return gf; -} - -static struct ggml_cgraph * llm_build_refact( - llama_context & lctx, - const llama_batch & batch, - const llm_build_cb & cb, - bool worst_case) { - const auto & model = lctx.model; - const auto & hparams = model.hparams; - const auto & cparams = lctx.cparams; - - const auto & kv_self = lctx.kv_self; - - GGML_ASSERT(!!kv_self.ctx); - - const int64_t n_embd = hparams.n_embd; - const int64_t n_layer = hparams.n_layer; - const int64_t n_ctx = cparams.n_ctx; - const int64_t n_head = hparams.n_head; - const int64_t n_head_kv = hparams.n_head_kv; - const int64_t n_embd_head = hparams.n_embd_head(); - - const float norm_rms_eps = hparams.f_norm_rms_eps; - - const int32_t n_tokens = batch.n_tokens; - const int32_t n_kv = worst_case ? n_ctx : kv_self.n; - const int32_t kv_head = worst_case ? n_ctx - n_tokens : kv_self.head; + struct ggml_cgraph * build_refact() { + struct ggml_cgraph * gf = ggml_new_graph(ctx0); - auto & buf_compute = lctx.buf_compute; + struct ggml_tensor * cur; + struct ggml_tensor * inpL; - struct ggml_init_params params = { - /*.mem_size =*/ buf_compute.size, - /*.mem_buffer =*/ buf_compute.data, - /*.no_alloc =*/ true, - }; + inpL = llm_build_inp_embd(ctx0, hparams, batch, model.tok_embd, cb); + cb(inpL, "inp_embd", -1); - struct ggml_context * ctx0 = ggml_init(params); + // KQ_scale + struct ggml_tensor * KQ_scale = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); + cb(KQ_scale, "KQ_scale", -1); - ggml_cgraph * gf = ggml_new_graph(ctx0); + // KQ_mask (mask for 1 head, it will be broadcasted to all heads) + struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); + cb(KQ_mask, "KQ_mask", -1); - struct ggml_tensor * cur; - struct ggml_tensor * inpL; + for (int il = 0; il < n_layer; ++il) { + struct ggml_tensor * inpSA = inpL; - inpL = llm_build_inp_embd(ctx0, batch, model.tok_embd, n_embd, n_tokens, cb); - cb(inpL, "inp_embd", -1); + cur = llm_build_norm(ctx0, inpL, hparams, + model.layers[il].attn_norm, NULL, + LLM_NORM_RMS, cb, il); + cb(cur, "attn_norm", il); - // KQ_scale - struct ggml_tensor * KQ_scale = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); - cb(KQ_scale, "KQ_scale", -1); + // self-attention + { + struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); + cb(Qcur, "Qcur", il); - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); - cb(KQ_mask, "KQ_mask", -1); + struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); + cb(Kcur, "Kcur", il); - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * inpSA = inpL; + struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); + cb(Vcur, "Vcur", il); - cur = llm_build_norm(ctx0, inpL, - model.layers[il].attn_norm, NULL, - LLM_NORM_RMS, norm_rms_eps, cb, il); - cb(cur, "attn_norm", il); + Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); + cb(Kcur, "Kcur", il); - // self-attention - { - struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); - cb(Qcur, "Qcur", il); + Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); + cb(Qcur, "Qcur", il); - struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); - cb(Kcur, "Kcur", il); + llm_build_kv_store(ctx0, hparams, kv_self, gf, Kcur, Vcur, n_ctx, n_tokens, kv_head, cb, il); - struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); - cb(Vcur, "Vcur", il); + cur = llm_build_kqv(ctx0, Qcur, hparams, kv_self, + model.layers[il].wo, NULL, + Qcur, KQ_scale, KQ_mask, n_ctx, n_tokens, n_kv, 8.0f, cb, il); + cb(cur, "kqv_out", il); + } - Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); - cb(Kcur, "Kcur", il); + struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); + cb(ffn_inp, "ffn_inp", il); - Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); - cb(Qcur, "Qcur", il); + // feed-forward network + { + cur = llm_build_norm(ctx0, ffn_inp, hparams, + model.layers[il].ffn_norm, NULL, + LLM_NORM_RMS, cb, il); + cb(cur, "ffn_norm", il); + + cur = llm_build_ffn(ctx0, cur, + model.layers[il].ffn_up, NULL, + model.layers[il].ffn_gate, NULL, + model.layers[il].ffn_down, NULL, + LLM_FFN_SILU, LLM_FFN_PAR, cb, il); + cb(cur, "ffn_out", il); + } - llm_build_kv_store(lctx, ctx0, gf, Kcur, Vcur, n_tokens, kv_head, cb, il); + cur = ggml_add(ctx0, cur, ffn_inp); + cb(cur, "l_out", il); - cur = llm_build_kqv(lctx, ctx0, Qcur, - model.layers[il].wo, NULL, - Qcur, KQ_scale, KQ_mask, n_tokens, n_kv, 8.0f, cb, il); - cb(cur, "kqv_out", il); + // input for next layer + inpL = cur; } - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); - cb(ffn_inp, "ffn_inp", il); + cur = inpL; - // feed-forward network - { - cur = llm_build_norm(ctx0, ffn_inp, - model.layers[il].ffn_norm, NULL, - LLM_NORM_RMS, norm_rms_eps, cb, il); - cb(cur, "ffn_norm", il); + cur = llm_build_norm(ctx0, cur, hparams, + model.output_norm, NULL, + LLM_NORM_RMS, cb, -1); + cb(cur, "result_norm", -1); - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, NULL, - model.layers[il].ffn_gate, NULL, - model.layers[il].ffn_down, NULL, - LLM_FFN_SILU, LLM_FFN_PAR, cb, il); - cb(cur, "ffn_out", il); - } + // lm_head + cur = ggml_mul_mat(ctx0, model.output, cur); + cb(cur, "result_output", -1); - cur = ggml_add(ctx0, cur, ffn_inp); - cb(cur, "l_out", il); + ggml_build_forward_expand(gf, cur); - // input for next layer - inpL = cur; + return gf; } - cur = inpL; - - cur = llm_build_norm(ctx0, cur, - model.output_norm, NULL, - LLM_NORM_RMS, norm_rms_eps, cb, -1); - cb(cur, "result_norm", -1); - - // lm_head - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - ggml_free(ctx0); - - return gf; -} - -static struct ggml_cgraph * llm_build_bloom( - llama_context & lctx, - const llama_batch & batch, - const llm_build_cb & cb, - bool worst_case) { - const auto & model = lctx.model; - const auto & hparams = model.hparams; - const auto & cparams = lctx.cparams; - - const auto & kv_self = lctx.kv_self; - - GGML_ASSERT(!!kv_self.ctx); - - const int64_t n_embd = hparams.n_embd; - const int64_t n_layer = hparams.n_layer; - const int64_t n_ctx = cparams.n_ctx; - const int64_t n_head = hparams.n_head; - const int64_t n_embd_head = hparams.n_embd_head(); - const int64_t n_embd_gqa = hparams.n_embd_gqa(); - - GGML_ASSERT(n_embd_head == hparams.n_rot); - - const float norm_eps = hparams.f_norm_eps; - - const int32_t n_tokens = batch.n_tokens; - const int32_t n_kv = worst_case ? n_ctx : kv_self.n; - const int32_t kv_head = worst_case ? n_ctx - n_tokens : kv_self.head; - - auto & buf_compute = lctx.buf_compute; - - struct ggml_init_params params = { - /*.mem_size =*/ buf_compute.size, - /*.mem_buffer =*/ buf_compute.data, - /*.no_alloc =*/ false, - }; + struct ggml_cgraph * build_bloom() { + struct ggml_cgraph * gf = ggml_new_graph(ctx0); - params.no_alloc = true; + struct ggml_tensor * cur; + struct ggml_tensor * inpL; - struct ggml_context * ctx0 = ggml_init(params); + inpL = llm_build_inp_embd(ctx0, hparams, batch, model.tok_embd, cb); + cb(inpL, "inp_embd", -1); - ggml_cgraph * gf = ggml_new_graph(ctx0); + // KQ_scale + struct ggml_tensor * KQ_scale = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); + cb(KQ_scale, "KQ_scale", -1); - struct ggml_tensor * cur; - struct ggml_tensor * inpL; + // KQ_mask (mask for 1 head, it will be broadcasted to all heads) + struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); + cb(KQ_mask, "KQ_mask", -1); - inpL = llm_build_inp_embd(ctx0, batch, model.tok_embd, n_embd, n_tokens, cb); - cb(inpL, "inp_embd", -1); + inpL = llm_build_norm(ctx0, inpL, hparams, + model.tok_norm, + model.tok_norm_b, + LLM_NORM, cb, -1); + cb(inpL, "inp_norm", -1); - // KQ_scale - struct ggml_tensor * KQ_scale = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); - cb(KQ_scale, "KQ_scale", -1); + for (int il = 0; il < n_layer; ++il) { + cur = llm_build_norm(ctx0, inpL, hparams, + model.layers[il].attn_norm, + model.layers[il].attn_norm_b, + LLM_NORM, cb, il); + cb(cur, "attn_norm", il); - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); - cb(KQ_mask, "KQ_mask", -1); + // self-attention + { + cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); + cb(cur, "wqkv", il); - inpL = llm_build_norm(ctx0, inpL, - model.tok_norm, - model.tok_norm_b, - LLM_NORM, norm_eps, cb, -1); - cb(inpL, "inp_norm", -1); + cur = ggml_add(ctx0, cur, model.layers[il].bqkv); + cb(cur, "bqkv", il); - for (int il = 0; il < n_layer; ++il) { - cur = llm_build_norm(ctx0, inpL, - model.layers[il].attn_norm, - model.layers[il].attn_norm_b, - LLM_NORM, norm_eps, cb, il); - cb(cur, "attn_norm", il); + struct ggml_tensor * Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); + struct ggml_tensor * Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); + struct ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); - // self-attention - { - cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); - cb(cur, "wqkv", il); + cb(Qcur, "Qcur", il); + cb(Kcur, "Kcur", il); + cb(Vcur, "Vcur", il); - cur = ggml_add(ctx0, cur, model.layers[il].bqkv); - cb(cur, "bqkv", il); + Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); - struct ggml_tensor * Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); - struct ggml_tensor * Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); - struct ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); + llm_build_kv_store(ctx0, hparams, kv_self, gf, Kcur, Vcur, n_ctx, n_tokens, kv_head, cb, il); - cb(Qcur, "Qcur", il); - cb(Kcur, "Kcur", il); - cb(Vcur, "Vcur", il); + cur = llm_build_kqv(ctx0, Qcur, hparams, kv_self, + model.layers[il].wo, model.layers[il].bo, + Qcur, KQ_scale, KQ_mask, n_ctx, n_tokens, n_kv, 8.0f, cb, il); + cb(cur, "kqv_out", il); + } - Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); + // Add the input + struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpL); + cb(ffn_inp, "ffn_inp", il); - llm_build_kv_store(lctx, ctx0, gf, Kcur, Vcur, n_tokens, kv_head, cb, il); + // FF + { + cur = llm_build_norm(ctx0, ffn_inp, hparams, + model.layers[il].ffn_norm, + model.layers[il].ffn_norm_b, + LLM_NORM, cb, il); + cb(cur, "ffn_norm", il); + + cur = llm_build_ffn(ctx0, cur, + model.layers[il].ffn_up, model.layers[il].ffn_up_b, + NULL, NULL, + model.layers[il].ffn_down, model.layers[il].ffn_down_b, + LLM_FFN_GELU, LLM_FFN_SEQ, cb, il); + cb(cur, "ffn_out", il); + } - cur = llm_build_kqv(lctx, ctx0, Qcur, - model.layers[il].wo, model.layers[il].bo, - Qcur, KQ_scale, KQ_mask, n_tokens, n_kv, 8.0f, cb, il); - cb(cur, "kqv_out", il); + inpL = ggml_add(ctx0, cur, ffn_inp); + cb(inpL, "l_out", il); } - // Add the input - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpL); - cb(ffn_inp, "ffn_inp", il); + cur = llm_build_norm(ctx0, inpL, hparams, + model.output_norm, + model.output_norm_b, + LLM_NORM, cb, -1); + cb(cur, "result_norm", -1); - // FF - { - cur = llm_build_norm(ctx0, ffn_inp, - model.layers[il].ffn_norm, - model.layers[il].ffn_norm_b, - LLM_NORM, norm_eps, cb, il); - cb(cur, "ffn_norm", il); + cur = ggml_mul_mat(ctx0, model.output, cur); + cb(cur, "result_output", -1); - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, model.layers[il].ffn_up_b, - NULL, NULL, - model.layers[il].ffn_down, model.layers[il].ffn_down_b, - LLM_FFN_GELU, LLM_FFN_SEQ, cb, il); - cb(cur, "ffn_out", il); - } + ggml_build_forward_expand(gf, cur); - inpL = ggml_add(ctx0, cur, ffn_inp); - cb(inpL, "l_out", il); + return gf; } - cur = llm_build_norm(ctx0, inpL, - model.output_norm, - model.output_norm_b, - LLM_NORM, norm_eps, cb, -1); - cb(cur, "result_norm", -1); + struct ggml_cgraph * build_mpt() { + struct ggml_cgraph * gf = ggml_new_graph(ctx0); - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); + struct ggml_tensor * cur; + struct ggml_tensor * inpL; - ggml_build_forward_expand(gf, cur); + inpL = llm_build_inp_embd(ctx0, hparams, batch, model.tok_embd, cb); + cb(inpL, "inp_embd", -1); - ggml_free(ctx0); + // KQ_scale + struct ggml_tensor * KQ_scale = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); + cb(KQ_scale, "KQ_scale", -1); - return gf; -} + // KQ_mask (mask for 1 head, it will be broadcasted to all heads) + struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); + cb(KQ_mask, "KQ_mask", -1); -static struct ggml_cgraph * llm_build_mpt( - llama_context & lctx, - const llama_batch & batch, - const llm_build_cb & cb, - bool worst_case) { - const auto & model = lctx.model; - const auto & hparams = model.hparams; - const auto & cparams = lctx.cparams; - - const auto & kv_self = lctx.kv_self; - - GGML_ASSERT(!!kv_self.ctx); - - const int64_t n_embd = hparams.n_embd; - const int64_t n_layer = hparams.n_layer; - const int64_t n_ctx = cparams.n_ctx; - const int64_t n_head = hparams.n_head; - const int64_t n_embd_head = hparams.n_embd_head(); - const int64_t n_embd_gqa = hparams.n_embd_gqa(); - - const float norm_eps = hparams.f_norm_eps; - const float clamp_kqv = hparams.f_clamp_kqv; - const float max_alibi_bias = hparams.f_max_alibi_bias; - - const int32_t n_tokens = batch.n_tokens; - const int32_t n_kv = worst_case ? n_ctx : kv_self.n; - const int32_t kv_head = worst_case ? n_ctx - n_tokens : kv_self.head; - - auto & buf_compute = lctx.buf_compute; - - struct ggml_init_params params = { - /*.mem_size =*/ buf_compute.size, - /*.mem_buffer =*/ buf_compute.data, - /*.no_alloc =*/ false, - }; + for (int il = 0; il < n_layer; ++il) { + struct ggml_tensor * attn_norm; - params.no_alloc = true; - - struct ggml_context * ctx0 = ggml_init(params); - - ggml_cgraph * gf = ggml_new_graph(ctx0); - - struct ggml_tensor * cur; - struct ggml_tensor * inpL; + attn_norm = llm_build_norm(ctx0, inpL, hparams, + model.layers[il].attn_norm, + NULL, + LLM_NORM, cb, il); + cb(attn_norm, "attn_norm", il); - inpL = llm_build_inp_embd(ctx0, batch, model.tok_embd, n_embd, n_tokens, cb); - cb(inpL, "inp_embd", -1); + // self-attention + { + cur = attn_norm; - // KQ_scale - struct ggml_tensor * KQ_scale = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); - cb(KQ_scale, "KQ_scale", -1); + cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); + cb(cur, "wqkv", il); - // KQ_mask (mask for 1 head, it will be broadcasted to all heads) - struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, n_tokens, 1); - cb(KQ_mask, "KQ_mask", -1); + if (hparams.f_clamp_kqv > 0.0f) { + cur = ggml_clamp(ctx0, cur, -hparams.f_clamp_kqv, hparams.f_clamp_kqv); + cb(cur, "wqkv_clamped", il); + } - for (int il = 0; il < n_layer; ++il) { - struct ggml_tensor * attn_norm; + struct ggml_tensor * Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); + struct ggml_tensor * Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); + struct ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); - attn_norm = llm_build_norm(ctx0, inpL, - model.layers[il].attn_norm, - NULL, - LLM_NORM, norm_eps, cb, il); - cb(attn_norm, "attn_norm", il); + cb(Qcur, "Qcur", il); + cb(Kcur, "Kcur", il); + cb(Vcur, "Vcur", il); - // self-attention - { - cur = attn_norm; + Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); - cur = ggml_mul_mat(ctx0, model.layers[il].wqkv, cur); - cb(cur, "wqkv", il); + llm_build_kv_store(ctx0, hparams, kv_self, gf, Kcur, Vcur, n_ctx, n_tokens, kv_head, cb, il); - if (clamp_kqv > 0.0f) { - cur = ggml_clamp(ctx0, cur, -clamp_kqv, clamp_kqv); - cb(cur, "wqkv_clamped", il); + cur = llm_build_kqv(ctx0, Qcur, hparams, kv_self, + model.layers[il].wo, NULL, + Qcur, KQ_scale, KQ_mask, n_ctx, n_tokens, n_kv, hparams.f_max_alibi_bias, cb, il); + cb(cur, "kqv_out", il); } - struct ggml_tensor * Qcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd, n_tokens, cur->nb[1], 0*sizeof(float)*(n_embd))); - struct ggml_tensor * Kcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd))); - struct ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_2d(ctx0, cur, n_embd_gqa, n_tokens, cur->nb[1], 1*sizeof(float)*(n_embd + n_embd_gqa))); - - cb(Qcur, "Qcur", il); - cb(Kcur, "Kcur", il); - cb(Vcur, "Vcur", il); + // Add the input + struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpL); + cb(ffn_inp, "ffn_inp", il); - Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens); + // feed forward + { + cur = llm_build_norm(ctx0, ffn_inp, hparams, + model.layers[il].ffn_norm, + NULL, + LLM_NORM, cb, il); + cb(cur, "ffn_norm", il); + + cur = llm_build_ffn(ctx0, cur, + model.layers[il].ffn_up, NULL, + NULL, NULL, + model.layers[il].ffn_down, NULL, + LLM_FFN_GELU, LLM_FFN_SEQ, cb, il); + cb(cur, "ffn_out", il); + } - llm_build_kv_store(lctx, ctx0, gf, Kcur, Vcur, n_tokens, kv_head, cb, il); + cur = ggml_add(ctx0, cur, ffn_inp); + cb(cur, "l_out", il); - cur = llm_build_kqv(lctx, ctx0, Qcur, - model.layers[il].wo, NULL, - Qcur, KQ_scale, KQ_mask, n_tokens, n_kv, max_alibi_bias, cb, il); - cb(cur, "kqv_out", il); + // input for next layer + inpL = cur; } - // Add the input - struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpL); - cb(ffn_inp, "ffn_inp", il); + cur = inpL; - // feed forward - { - cur = llm_build_norm(ctx0, ffn_inp, - model.layers[il].ffn_norm, - NULL, - LLM_NORM, norm_eps, cb, il); - cb(cur, "ffn_norm", il); + cur = llm_build_norm(ctx0, cur, hparams, + model.output_norm, + NULL, + LLM_NORM, cb, -1); + cb(cur, "result_norm", -1); - cur = llm_build_ffn(ctx0, cur, - model.layers[il].ffn_up, NULL, - NULL, NULL, - model.layers[il].ffn_down, NULL, - LLM_FFN_GELU, LLM_FFN_SEQ, cb, il); - cb(cur, "ffn_out", il); - } + cur = ggml_mul_mat(ctx0, model.output, cur); + cb(cur, "result_output", -1); - cur = ggml_add(ctx0, cur, ffn_inp); - cb(cur, "l_out", il); + ggml_build_forward_expand(gf, cur); - // input for next layer - inpL = cur; + return gf; } - - cur = inpL; - - cur = llm_build_norm(ctx0, cur, - model.output_norm, - NULL, - LLM_NORM, norm_eps, cb, -1); - cb(cur, "result_norm", -1); - - cur = ggml_mul_mat(ctx0, model.output, cur); - cb(cur, "result_output", -1); - - ggml_build_forward_expand(gf, cur); - - ggml_free(ctx0); - - return gf; -} +}; // // tensor offloading helpers @@ -5122,43 +4862,49 @@ static struct ggml_cgraph * llama_build_graph( struct ggml_cgraph * result = NULL; + struct llm_build_context llm(lctx, batch, cb, worst_case); + + llm.init(); + switch (model.arch) { case LLM_ARCH_LLAMA: { - result = llm_build_llama(lctx, batch, cb, worst_case); + result = llm.build_llama(); } break; case LLM_ARCH_BAICHUAN: { - result = llm_build_baichaun(lctx, batch, cb, worst_case); + result = llm.build_baichuan(); } break; case LLM_ARCH_FALCON: { - result = llm_build_falcon(lctx, batch, cb, worst_case); + result = llm.build_falcon(); } break; case LLM_ARCH_STARCODER: { - result = llm_build_starcoder(lctx, batch, cb, worst_case); + result = llm.build_starcoder(); } break; case LLM_ARCH_PERSIMMON: { - result = llm_build_persimmon(lctx, batch, cb, worst_case); + result = llm.build_persimmon(); } break; case LLM_ARCH_REFACT: { - result = llm_build_refact(lctx, batch, cb, worst_case); + result = llm.build_refact(); } break; case LLM_ARCH_BLOOM: { - result = llm_build_bloom(lctx, batch, cb, worst_case); + result = llm.build_bloom(); } break; case LLM_ARCH_MPT: { - result = llm_build_mpt(lctx, batch, cb, worst_case); + result = llm.build_mpt(); } break; default: GGML_ASSERT(false); } + llm.free(); + if (worst_case) { int n_non_view_total = 0; From ff8f9a88da0018972dfdf6fe64b5c8992caabd9c Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Wed, 1 Nov 2023 21:15:55 +0200 Subject: [PATCH 44/79] common : minor (#3715) --- common/common.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/common.cpp b/common/common.cpp index 89be4126185db5..7a48e9d11e8593 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -110,8 +110,8 @@ bool gpt_params_parse(int argc, char ** argv, gpt_params & params) { exit(0); } } - catch (const std::invalid_argument& ex) { - fprintf(stderr, ex.what()); + catch (const std::invalid_argument & ex) { + fprintf(stderr, "%s\n", ex.what()); gpt_print_usage(argc, argv, gpt_params()); exit(1); } From e16b9fa4baa8a09c6619b116159830e898050942 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Wed, 1 Nov 2023 21:25:00 +0200 Subject: [PATCH 45/79] metal : multi-simd softmax (#3710) ggml-ci --- ggml-metal.m | 9 +++- ggml-metal.metal | 129 +++++++++++++++++++++++++++++++++++++---------- 2 files changed, 108 insertions(+), 30 deletions(-) diff --git a/ggml-metal.m b/ggml-metal.m index bc881395a7aadc..1f034150788e26 100644 --- a/ggml-metal.m +++ b/ggml-metal.m @@ -1001,11 +1001,15 @@ void ggml_metal_graph_compute( } break; case GGML_OP_SOFT_MAX: { - const int nth = MIN(32, ne00); + int nth = 32; // SIMD width if (ne00%4 == 0) { [encoder setComputePipelineState:ctx->pipeline_soft_max_4]; } else { + do { + nth *= 2; + } while (nth <= ne00 && nth <= 1024); + nth /= 2; [encoder setComputePipelineState:ctx->pipeline_soft_max]; } [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; @@ -1013,8 +1017,9 @@ void ggml_metal_graph_compute( [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:2]; [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:3]; [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:4]; + [encoder setThreadgroupMemoryLength:nth/32*sizeof(float) atIndex:0]; - [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)]; + [encoder dispatchThreadgroups:MTLSizeMake(ne01*ne02*ne03, 1, 1) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)]; } break; case GGML_OP_DIAG_MASK_INF: { diff --git a/ggml-metal.metal b/ggml-metal.metal index f4b460564453c5..f3152778ae48c3 100644 --- a/ggml-metal.metal +++ b/ggml-metal.metal @@ -184,36 +184,73 @@ kernel void kernel_soft_max( constant int64_t & ne00, constant int64_t & ne01, constant int64_t & ne02, - uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tpitg[[thread_position_in_threadgroup]], - uint3 ntg[[threads_per_threadgroup]]) { - const int64_t i03 = tgpig[2]; - const int64_t i02 = tgpig[1]; - const int64_t i01 = tgpig[0]; + threadgroup float * buf [[threadgroup(0)]], + uint tgpig[[threadgroup_position_in_grid]], + uint tpitg[[thread_position_in_threadgroup]], + uint sgitg[[simdgroup_index_in_threadgroup]], + uint tiisg[[thread_index_in_simdgroup]], + uint ntg[[threads_per_threadgroup]]) { + const int64_t i03 = (tgpig) / (ne02*ne01); + const int64_t i02 = (tgpig - i03*ne02*ne01) / ne01; + const int64_t i01 = (tgpig - i03*ne02*ne01 - i02*ne01); device const float * psrc0 = src0 + i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00; device float * pdst = dst + i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00; // parallel max - float lmax = tpitg[0] < ne00 ? psrc0[tpitg[0]] : -INFINITY; - for (int i00 = tpitg[0] + ntg[0]; i00 < ne00; i00 += ntg[0]) { + float lmax = tpitg < ne00 ? psrc0[tpitg] : -INFINITY; + + for (int i00 = tpitg + ntg; i00 < ne00; i00 += ntg) { lmax = MAX(lmax, psrc0[i00]); } - const float max = simd_max(lmax); + + float max = simd_max(lmax); + if (tiisg == 0) { + buf[sgitg] = max; + } + + threadgroup_barrier(mem_flags::mem_threadgroup); + + // broadcast, simd group number is ntg / 32 + for (uint i = ntg / 32 / 2; i > 0; i /= 2) { + if (tpitg < i) { + buf[tpitg] = MAX(buf[tpitg], buf[tpitg + i]); + } + } + + threadgroup_barrier(mem_flags::mem_threadgroup); + + max = buf[0]; // parallel sum float lsum = 0.0f; - for (int i00 = tpitg[0]; i00 < ne00; i00 += ntg[0]) { + for (int i00 = tpitg; i00 < ne00; i00 += ntg) { const float exp_psrc0 = exp(psrc0[i00] - max); lsum += exp_psrc0; // Remember the result of exp here. exp is expensive, so we really do not - // whish to compute it twice. + // wish to compute it twice. pdst[i00] = exp_psrc0; } - const float sum = simd_sum(lsum); + float sum = simd_sum(lsum); + if (tiisg == 0) { + buf[sgitg] = sum; + } + + threadgroup_barrier(mem_flags::mem_threadgroup); + + // broadcast, simd group number is ntg / 32 + for (uint i = ntg / 32 / 2; i > 0; i /= 2) { + if (tpitg < i) { + buf[tpitg] += buf[tpitg + i]; + } + } + + threadgroup_barrier(mem_flags::mem_threadgroup); + + sum = buf[0]; - for (int i00 = tpitg[0]; i00 < ne00; i00 += ntg[0]) { + for (int i00 = tpitg; i00 < ne00; i00 += ntg) { pdst[i00] /= sum; } } @@ -224,37 +261,73 @@ kernel void kernel_soft_max_4( constant int64_t & ne00, constant int64_t & ne01, constant int64_t & ne02, - uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tpitg[[thread_position_in_threadgroup]], - uint3 ntg[[threads_per_threadgroup]]) { - const int64_t i03 = tgpig[2]; - const int64_t i02 = tgpig[1]; - const int64_t i01 = tgpig[0]; + threadgroup float * buf [[threadgroup(0)]], + uint tgpig[[threadgroup_position_in_grid]], + uint tpitg[[thread_position_in_threadgroup]], + uint sgitg[[simdgroup_index_in_threadgroup]], + uint tiisg[[thread_index_in_simdgroup]], + uint ntg[[threads_per_threadgroup]]) { + const int64_t i03 = (tgpig) / (ne02*ne01); + const int64_t i02 = (tgpig - i03*ne02*ne01) / ne01; + const int64_t i01 = (tgpig - i03*ne02*ne01 - i02*ne01); device const float4 * psrc4 = (device const float4 *)(src0 + i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00); device float4 * pdst4 = (device float4 *)(dst + i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00); // parallel max - float4 lmax4 = tpitg[0] < ne00/4 ? psrc4[tpitg[0]] : -INFINITY; - for (int i00 = tpitg[0] + ntg[0]; i00 < ne00/4; i00 += ntg[0]) { + float4 lmax4 = tpitg < ne00/4 ? psrc4[tpitg] : -INFINITY; + + for (int i00 = tpitg + ntg; i00 < ne00/4; i00 += ntg) { lmax4 = fmax(lmax4, psrc4[i00]); } - float lmax = MAX(MAX(lmax4[0], lmax4[1]), MAX(lmax4[2], lmax4[3])); - const float max = simd_max(lmax); + const float lmax = MAX(MAX(lmax4[0], lmax4[1]), MAX(lmax4[2], lmax4[3])); + float max = simd_max(lmax); + if (tiisg == 0) { + buf[sgitg] = max; + } + + threadgroup_barrier(mem_flags::mem_threadgroup); + + // broadcast, simd group number is ntg / 32 + for (uint i = ntg / 32 / 2; i > 0; i /= 2) { + if (tpitg < i) { + buf[tpitg] = MAX(buf[tpitg], buf[tpitg + i]); + } + } + + threadgroup_barrier(mem_flags::mem_threadgroup); + + max = buf[0]; // parallel sum float4 lsum4 = 0.0f; - for (int i00 = tpitg[0]; i00 < ne00/4; i00 += ntg[0]) { + for (int i00 = tpitg; i00 < ne00/4; i00 += ntg) { const float4 exp_psrc4 = exp(psrc4[i00] - max); lsum4 += exp_psrc4; pdst4[i00] = exp_psrc4; } - float lsum = lsum4[0] + lsum4[1] + lsum4[2] + lsum4[3]; - const float sum = simd_sum(lsum); + const float lsum = lsum4[0] + lsum4[1] + lsum4[2] + lsum4[3]; + float sum = simd_sum(lsum); + if (tiisg == 0) { + buf[sgitg] = sum; + } + + threadgroup_barrier(mem_flags::mem_threadgroup); + + // broadcast, simd group number is ntg / 32 + for (uint i = ntg / 32 / 2; i > 0; i /= 2) { + if (tpitg < i) { + buf[tpitg] += buf[tpitg + i]; + } + } + + threadgroup_barrier(mem_flags::mem_threadgroup); + + sum = buf[0]; - for (int i00 = tpitg[0]; i00 < ne00/4; i00 += ntg[0]) { + for (int i00 = tpitg; i00 < ne00/4; i00 += ntg) { pdst4[i00] /= sum; } } @@ -274,7 +347,7 @@ kernel void kernel_diag_mask_inf( dst[i02*ne01*ne00 + i01*ne00 + i00] = -INFINITY; } else { dst[i02*ne01*ne00 + i01*ne00 + i00] = src0[i02*ne01*ne00 + i01*ne00 + i00]; - } + } } kernel void kernel_diag_mask_inf_8( From 523e49b11174368cd73460fa5eae7b39d856f300 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Wed, 1 Nov 2023 23:00:50 +0200 Subject: [PATCH 46/79] llm : fix falcon norm after refactoring (#3837) --- llama.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llama.cpp b/llama.cpp index d0c4ef10151828..17cf364bb20eac 100644 --- a/llama.cpp +++ b/llama.cpp @@ -3763,7 +3763,7 @@ struct llm_build_context { { if (model.layers[il].attn_norm_2) { // Falcon-40B - cur = llm_build_norm(ctx0, attn_norm, hparams, + cur = llm_build_norm(ctx0, inpL, hparams, model.layers[il].attn_norm_2, model.layers[il].attn_norm_2_b, LLM_NORM, cb, il); From c43c2da8afacaddfe51c09b21dbd9922cd0ea46b Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Wed, 1 Nov 2023 23:08:30 +0200 Subject: [PATCH 47/79] llm : fix llm_build_kqv taking unused tensor (benign, #3837) --- llama.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/llama.cpp b/llama.cpp index 17cf364bb20eac..1c6d482f8fe1bc 100644 --- a/llama.cpp +++ b/llama.cpp @@ -3345,7 +3345,6 @@ static struct ggml_tensor * llm_build_ffn( // if max_alibi_bias > 0 then apply ALiBi static struct ggml_tensor * llm_build_kqv( struct ggml_context * ctx, - struct ggml_tensor * cur, const llama_hparams & hparams, const llama_kv_cache & kv, struct ggml_tensor * wo, @@ -3411,7 +3410,7 @@ static struct ggml_tensor * llm_build_kqv( struct ggml_tensor * kqv_merged = ggml_permute(ctx, kqv, 0, 2, 1, 3); cb(kqv_merged, "kqv_merged", il); - cur = ggml_cont_2d(ctx, kqv_merged, n_embd, n_tokens); + struct ggml_tensor * cur = ggml_cont_2d(ctx, kqv_merged, n_embd, n_tokens); cb(cur, "kqv_merged_cont", il); cur = ggml_mul_mat(ctx, wo, cur); @@ -3565,7 +3564,7 @@ struct llm_build_context { llm_build_kv_store(ctx0, hparams, kv_self, gf, Kcur, Vcur, n_ctx, n_tokens, kv_head, cb, il); - cur = llm_build_kqv(ctx0, cur, hparams, kv_self, + cur = llm_build_kqv(ctx0, hparams, kv_self, model.layers[il].wo, NULL, Qcur, KQ_scale, KQ_mask, n_ctx, n_tokens, n_kv, -1.0f, cb, il); cb(cur, "kqv_out", il); @@ -3677,7 +3676,7 @@ struct llm_build_context { // apply ALiBi for 13B model const float max_alibi_bias = model.type == MODEL_13B ? 8.0f : -1.0f; - cur = llm_build_kqv(ctx0, cur, hparams, kv_self, + cur = llm_build_kqv(ctx0, hparams, kv_self, model.layers[il].wo, NULL, Qcur, KQ_scale, KQ_mask, n_ctx, n_tokens, n_kv, max_alibi_bias, cb, il); cb(cur, "kqv_out", il); @@ -3795,7 +3794,7 @@ struct llm_build_context { llm_build_kv_store(ctx0, hparams, kv_self, gf, Kcur, Vcur, n_ctx, n_tokens, kv_head, cb, il); - cur = llm_build_kqv(ctx0, attn_norm, hparams, kv_self, + cur = llm_build_kqv(ctx0, hparams, kv_self, model.layers[il].wo, NULL, Qcur, KQ_scale, KQ_mask, n_ctx, n_tokens, n_kv, -1.0f, cb, il); cb(cur, "kqv_out", il); @@ -3895,7 +3894,7 @@ struct llm_build_context { llm_build_kv_store(ctx0, hparams, kv_self, gf, Kcur, Vcur, n_ctx, n_tokens, kv_head, cb, il); - cur = llm_build_kqv(ctx0, cur, hparams, kv_self, + cur = llm_build_kqv(ctx0, hparams, kv_self, model.layers[il].wo, model.layers[il].bo, Qcur, KQ_scale, KQ_mask, n_ctx, n_tokens, n_kv, -1.0f, cb, il); cb(cur, "kqv_out", il); @@ -4100,7 +4099,7 @@ struct llm_build_context { llm_build_kv_store(ctx0, hparams, kv_self, gf, Kcur, Vcur, n_ctx, n_tokens, kv_head, cb, il); // TODO: not tested, could be broken - cur = llm_build_kqv(ctx0, Q, hparams, kv_self, + cur = llm_build_kqv(ctx0, hparams, kv_self, model.layers[il].wo, model.layers[il].bo, Q, KQ_scale, KQ_mask, n_ctx, n_tokens, n_kv, -1.0f, cb, il); cb(cur, "kqv_out", il); @@ -4191,7 +4190,7 @@ struct llm_build_context { llm_build_kv_store(ctx0, hparams, kv_self, gf, Kcur, Vcur, n_ctx, n_tokens, kv_head, cb, il); - cur = llm_build_kqv(ctx0, Qcur, hparams, kv_self, + cur = llm_build_kqv(ctx0, hparams, kv_self, model.layers[il].wo, NULL, Qcur, KQ_scale, KQ_mask, n_ctx, n_tokens, n_kv, 8.0f, cb, il); cb(cur, "kqv_out", il); @@ -4288,7 +4287,7 @@ struct llm_build_context { llm_build_kv_store(ctx0, hparams, kv_self, gf, Kcur, Vcur, n_ctx, n_tokens, kv_head, cb, il); - cur = llm_build_kqv(ctx0, Qcur, hparams, kv_self, + cur = llm_build_kqv(ctx0, hparams, kv_self, model.layers[il].wo, model.layers[il].bo, Qcur, KQ_scale, KQ_mask, n_ctx, n_tokens, n_kv, 8.0f, cb, il); cb(cur, "kqv_out", il); @@ -4382,7 +4381,7 @@ struct llm_build_context { llm_build_kv_store(ctx0, hparams, kv_self, gf, Kcur, Vcur, n_ctx, n_tokens, kv_head, cb, il); - cur = llm_build_kqv(ctx0, Qcur, hparams, kv_self, + cur = llm_build_kqv(ctx0, hparams, kv_self, model.layers[il].wo, NULL, Qcur, KQ_scale, KQ_mask, n_ctx, n_tokens, n_kv, hparams.f_max_alibi_bias, cb, il); cb(cur, "kqv_out", il); From 898aeca90a9bb992f506234cf3b8b7f7fa28a1df Mon Sep 17 00:00:00 2001 From: cebtenzzre Date: Wed, 1 Nov 2023 18:04:33 -0400 Subject: [PATCH 48/79] llama : implement YaRN RoPE scaling (#2268) Co-authored-by: cebtenzzre Co-authored-by: Jeffrey Quesnelle --- common/common.cpp | 79 +++++- common/common.h | 7 + convert-baichuan-hf-to-gguf.py | 3 +- convert.py | 97 ++++--- examples/finetune/finetune.cpp | 5 +- examples/server/server.cpp | 59 ++++- .../train-text-from-scratch.cpp | 6 +- ggml-cuda.cu | 153 ++++++++--- ggml-metal.m | 24 +- ggml-metal.metal | 61 ++++- ggml.c | 241 +++++++++++++----- ggml.h | 20 +- gguf-py/gguf/gguf.py | 29 ++- llama.cpp | 220 ++++++++++++---- llama.h | 18 +- 15 files changed, 764 insertions(+), 258 deletions(-) diff --git a/common/common.cpp b/common/common.cpp index 7a48e9d11e8593..b182ffaaef48ec 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -219,12 +219,52 @@ bool gpt_params_parse_ex(int argc, char ** argv, gpt_params & params) { break; } params.rope_freq_scale = std::stof(argv[i]); + } else if (arg == "--rope-scaling") { + if (++i >= argc) { + invalid_param = true; + break; + } + std::string value(argv[i]); + /**/ if (value == "none") { params.rope_scaling_type = LLAMA_ROPE_SCALING_NONE; } + else if (value == "linear") { params.rope_scaling_type = LLAMA_ROPE_SCALING_LINEAR; } + else if (value == "yarn") { params.rope_scaling_type = LLAMA_ROPE_SCALING_YARN; } + else { invalid_param = true; break; } } else if (arg == "--rope-scale") { if (++i >= argc) { invalid_param = true; break; } params.rope_freq_scale = 1.0f/std::stof(argv[i]); + } else if (arg == "--yarn-orig-ctx") { + if (++i >= argc) { + invalid_param = true; + break; + } + params.yarn_orig_ctx = std::stoi(argv[i]); + } else if (arg == "--yarn-ext-factor") { + if (++i >= argc) { + invalid_param = true; + break; + } + params.yarn_ext_factor = std::stof(argv[i]); + } else if (arg == "--yarn-attn-factor") { + if (++i >= argc) { + invalid_param = true; + break; + } + params.yarn_attn_factor = std::stof(argv[i]); + } else if (arg == "--yarn-beta-fast") { + if (++i >= argc) { + invalid_param = true; + break; + } + params.yarn_beta_fast = std::stof(argv[i]); + } else if (arg == "--yarn-beta-slow") { + if (++i >= argc) { + invalid_param = true; + break; + } + params.yarn_beta_slow = std::stof(argv[i]); } else if (arg == "--memory-f32") { params.memory_f16 = false; } else if (arg == "--top-p") { @@ -716,9 +756,16 @@ void gpt_print_usage(int /*argc*/, char ** argv, const gpt_params & params) { printf(" --cfg-negative-prompt-file FNAME\n"); printf(" negative prompt file to use for guidance. (default: empty)\n"); printf(" --cfg-scale N strength of guidance (default: %f, 1.0 = disable)\n", sparams.cfg_scale); - printf(" --rope-scale N RoPE context linear scaling factor, inverse of --rope-freq-scale\n"); + printf(" --rope-scaling {none,linear,yarn}\n"); + printf(" RoPE frequency scaling method, defaults to linear unless specified by the model\n"); + printf(" --rope-scale N RoPE context scaling factor, expands context by a factor of N\n"); printf(" --rope-freq-base N RoPE base frequency, used by NTK-aware scaling (default: loaded from model)\n"); - printf(" --rope-freq-scale N RoPE frequency linear scaling factor (default: loaded from model)\n"); + printf(" --rope-freq-scale N RoPE frequency scaling factor, expands context by a factor of 1/N\n"); + printf(" --yarn-orig-ctx N YaRN: original context size of model (default: 0 = model training context size)\n"); + printf(" --yarn-ext-factor N YaRN: extrapolation mix factor (default: 1.0, 0.0 = full interpolation)\n"); + printf(" --yarn-attn-factor N YaRN: scale sqrt(t) or attention magnitude (default: 1.0)\n"); + printf(" --yarn-beta-slow N YaRN: high correction dim or alpha (default: %.1f)\n", params.yarn_beta_slow); + printf(" --yarn-beta-fast N YaRN: low correction dim or beta (default: %.1f)\n", params.yarn_beta_fast); printf(" --ignore-eos ignore end of stream token and continue generating (implies --logit-bias 2-inf)\n"); printf(" --no-penalize-nl do not penalize newline token\n"); printf(" --memory-f32 use f32 instead of f16 for memory key+value (default: disabled)\n"); @@ -826,17 +873,23 @@ struct llama_model_params llama_model_params_from_gpt_params(const gpt_params & struct llama_context_params llama_context_params_from_gpt_params(const gpt_params & params) { auto cparams = llama_context_default_params(); - cparams.n_ctx = params.n_ctx; - cparams.n_batch = params.n_batch; - cparams.n_threads = params.n_threads; - cparams.n_threads_batch = params.n_threads_batch == -1 ? params.n_threads : params.n_threads_batch; - cparams.mul_mat_q = params.mul_mat_q; - cparams.seed = params.seed; - cparams.f16_kv = params.memory_f16; - cparams.logits_all = params.logits_all; - cparams.embedding = params.embedding; - cparams.rope_freq_base = params.rope_freq_base; - cparams.rope_freq_scale = params.rope_freq_scale; + cparams.n_ctx = params.n_ctx; + cparams.n_batch = params.n_batch; + cparams.n_threads = params.n_threads; + cparams.n_threads_batch = params.n_threads_batch == -1 ? params.n_threads : params.n_threads_batch; + cparams.mul_mat_q = params.mul_mat_q; + cparams.seed = params.seed; + cparams.f16_kv = params.memory_f16; + cparams.logits_all = params.logits_all; + cparams.embedding = params.embedding; + cparams.rope_scaling_type = params.rope_scaling_type; + cparams.rope_freq_base = params.rope_freq_base; + cparams.rope_freq_scale = params.rope_freq_scale; + cparams.yarn_ext_factor = params.yarn_ext_factor; + cparams.yarn_attn_factor = params.yarn_attn_factor; + cparams.yarn_beta_fast = params.yarn_beta_fast; + cparams.yarn_beta_slow = params.yarn_beta_slow; + cparams.yarn_orig_ctx = params.yarn_orig_ctx; return cparams; } diff --git a/common/common.h b/common/common.h index 343b272177c7ec..7be69f925bc2be 100644 --- a/common/common.h +++ b/common/common.h @@ -9,6 +9,7 @@ #define LOG_NO_FILE_LINE_FUNCTION #include "log.h" +#include #include #include #include @@ -54,6 +55,12 @@ struct gpt_params { int32_t n_beams = 0; // if non-zero then use beam search of given width. float rope_freq_base = 0.0f; // RoPE base frequency float rope_freq_scale = 0.0f; // RoPE frequency scaling factor + float yarn_ext_factor = NAN; // YaRN extrapolation mix factor + float yarn_attn_factor = 1.0f; // YaRN magnitude scaling factor + float yarn_beta_fast = 32.0f;// YaRN low correction dim + float yarn_beta_slow = 1.0f; // YaRN high correction dim + int32_t yarn_orig_ctx = 0; // YaRN original context length + int8_t rope_scaling_type = LLAMA_ROPE_SCALING_UNSPECIFIED; // // sampling parameters struct llama_sampling_params sparams; diff --git a/convert-baichuan-hf-to-gguf.py b/convert-baichuan-hf-to-gguf.py index 5ee99be73134e6..67ccbe99f132af 100755 --- a/convert-baichuan-hf-to-gguf.py +++ b/convert-baichuan-hf-to-gguf.py @@ -163,7 +163,8 @@ def parse_args() -> argparse.Namespace: if "rope_scaling" in hparams and hparams["rope_scaling"] != None and "factor" in hparams["rope_scaling"]: if "type" in hparams["rope_scaling"]: if hparams["rope_scaling"]["type"] == "linear": - gguf_writer.add_rope_scale_linear(hparams["rope_scaling"]["factor"]) + gguf_writer.add_rope_scaling_type(gguf.RopeScalingType.LINEAR) + gguf_writer.add_rope_scaling_factor(hparams["rope_scaling"]["factor"]) # TOKENIZATION diff --git a/convert.py b/convert.py index bfbfab283f6ae7..9110f15806c6bc 100755 --- a/convert.py +++ b/convert.py @@ -151,8 +151,11 @@ class Params: n_head_kv: int f_norm_eps: float + rope_scaling_type: gguf.RopeScalingType | None = None f_rope_freq_base: float | None = None f_rope_scale: float | None = None + n_orig_ctx: int | None = None + rope_finetuned: bool | None = None ftype: GGMLFileType | None = None @@ -198,20 +201,20 @@ def guessed(model: LazyModel) -> Params: def loadHFTransformerJson(model: LazyModel, config_path: Path) -> Params: config = json.load(open(config_path)) - n_vocab = config["vocab_size"] - n_embd = config["hidden_size"] - n_layer = config["num_hidden_layers"] - n_ff = config["intermediate_size"] - n_head = config["num_attention_heads"] - n_head_kv = config["num_key_value_heads"] if "num_key_value_heads" in config else n_head - f_norm_eps = config["rms_norm_eps"] - f_rope_freq_base = config["rope_theta"] if "rope_theta" in config else None - + rope_scaling_type = f_rope_scale = n_orig_ctx = rope_finetuned = None rope_scaling = config.get("rope_scaling") - if isinstance(rope_scaling, dict) and rope_scaling.get("type") == "linear": - f_rope_scale = config["rope_scaling"].get("factor") - else: - f_rope_scale = None + + if rope_scaling is not None and (typ := rope_scaling.get("type")): + rope_factor = rope_scaling.get("factor") + f_rope_scale = rope_factor + if typ == "linear": + rope_scaling_type = gguf.RopeScalingType.LINEAR + elif typ == "yarn": + rope_scaling_type = gguf.RopeScalingType.YARN + n_orig_ctx = rope_scaling['original_max_position_embeddings'] + rope_finetuned = rope_scaling['finetuned'] + else: + raise NotImplementedError(f'Unknown rope scaling type: {typ}') if "max_sequence_length" in config: n_ctx = config["max_sequence_length"] @@ -222,16 +225,19 @@ def loadHFTransformerJson(model: LazyModel, config_path: Path) -> Params: "Suggestion: provide 'config.json' of the model in the same directory containing model files.") return Params( - n_vocab = n_vocab, - n_embd = n_embd, - n_layer = n_layer, - n_ctx = n_ctx, - n_ff = n_ff, - n_head = n_head, - n_head_kv = n_head_kv, - f_norm_eps = f_norm_eps, - f_rope_freq_base = f_rope_freq_base, - f_rope_scale = f_rope_scale, + n_vocab = config["vocab_size"], + n_embd = config["hidden_size"], + n_layer = config["num_hidden_layers"], + n_ctx = n_ctx, + n_ff = config["intermediate_size"], + n_head = (n_head := config["num_attention_heads"]), + n_head_kv = config.get("num_key_value_heads", n_head), + f_norm_eps = config["rms_norm_eps"], + f_rope_freq_base = config.get("rope_theta"), + rope_scaling_type = rope_scaling_type, + f_rope_scale = f_rope_scale, + n_orig_ctx = n_orig_ctx, + rope_finetuned = rope_finetuned, ) # LLaMA v2 70B params.json @@ -240,17 +246,8 @@ def loadHFTransformerJson(model: LazyModel, config_path: Path) -> Params: def loadOriginalParamsJson(model: LazyModel, config_path: Path) -> Params: config = json.load(open(config_path)) - n_vocab = config["vocab_size"] if "vocab_size" in config else -1 - n_embd = config["dim"] - n_layer = config["n_layers"] - n_ff = -1 - n_head = config["n_heads"] - n_head_kv = config["n_kv_heads"] if "n_kv_heads" in config else n_head - f_norm_eps = config["norm_eps"] - f_rope_freq_base = config["rope_theta"] if "rope_theta" in config else None - # hack to determine LLaMA v1 vs v2 vs CodeLlama - if f_rope_freq_base == 1000000: + if config.get("rope_theta") == 1000000: # CodeLlama n_ctx = 16384 elif config["norm_eps"] == 1e-05: @@ -260,22 +257,16 @@ def loadOriginalParamsJson(model: LazyModel, config_path: Path) -> Params: # LLaMA v1 n_ctx = 2048 - if n_vocab == -1: - n_vocab = model["tok_embeddings.weight"].shape[0] - - if n_ff == -1: - n_ff = model["layers.0.feed_forward.w1.weight"].shape[0] - return Params( - n_vocab = n_vocab, - n_embd = n_embd, - n_layer = n_layer, + n_vocab = config.get("vocab_size", model["tok_embeddings.weight"].shape[0]), + n_embd = config["dim"], + n_layer = config["n_layers"], n_ctx = n_ctx, - n_ff = n_ff, - n_head = n_head, - n_head_kv = n_head_kv, - f_norm_eps = f_norm_eps, - f_rope_freq_base = f_rope_freq_base, + n_ff = model["layers.0.feed_forward.w1.weight"].shape[0], + n_head = (n_head := config["n_heads"]), + n_head_kv = config.get("n_kv_heads", n_head), + f_norm_eps = config["norm_eps"], + f_rope_freq_base = config.get("rope_theta"), ) @staticmethod @@ -831,8 +822,16 @@ def add_meta_arch(self, params: Params) -> None: if params.f_rope_freq_base is not None: self.gguf.add_rope_freq_base(params.f_rope_freq_base) - if params.f_rope_scale is not None: - self.gguf.add_rope_scale_linear(params.f_rope_scale) + if params.rope_scaling_type: + assert params.f_rope_scale is not None + self.gguf.add_rope_scaling_type(params.rope_scaling_type) + self.gguf.add_rope_scaling_factor(params.f_rope_scale) + + if params.n_orig_ctx is not None: + self.gguf.add_rope_scaling_orig_ctx_len(params.n_orig_ctx) + + if params.rope_finetuned is not None: + self.gguf.add_rope_scaling_finetuned(params.rope_finetuned) if params.ftype is not None: self.gguf.add_file_type(params.ftype) diff --git a/examples/finetune/finetune.cpp b/examples/finetune/finetune.cpp index 60c7faa797028a..649a3b7c1941e5 100644 --- a/examples/finetune/finetune.cpp +++ b/examples/finetune/finetune.cpp @@ -642,8 +642,9 @@ static struct ggml_tensor * llama_build_lora_finetune_graphs( const int rope_mode = 0; return ggml_rope_custom(ctx, - t, KQ_pos, n_rot, rope_mode, n_ctx, - rope_freq_base, rope_freq_scale); + t, KQ_pos, n_rot, rope_mode, n_ctx, 0, + rope_freq_base, rope_freq_scale, 0.0f, 0.0f, 0.0f, 0.0f + ); }; set_name(tokens_input, "tokens_input"); diff --git a/examples/server/server.cpp b/examples/server/server.cpp index 47ae0d55856cf8..84b04d5a0493a6 100644 --- a/examples/server/server.cpp +++ b/examples/server/server.cpp @@ -1755,12 +1755,18 @@ static void server_print_usage(const char *argv0, const gpt_params ¶ms, printf("options:\n"); printf(" -h, --help show this help message and exit\n"); printf(" -v, --verbose verbose output (default: %s)\n", server_verbose ? "enabled" : "disabled"); - printf(" -t N, --threads N number of threads to use during computation (default: %d)\n", params.n_threads); + printf(" -t N, --threads N number of threads to use during computation (default: %d)\n", params.n_threads); printf(" -tb N, --threads-batch N number of threads to use during batch and prompt processing (default: same as --threads)\n"); - printf(" -c N, --ctx-size N size of the prompt context (default: %d)\n", params.n_ctx); + printf(" -c N, --ctx-size N size of the prompt context (default: %d)\n", params.n_ctx); + printf(" --rope-scaling {none,linear,yarn}\n"); + printf(" RoPE frequency scaling method, defaults to linear unless specified by the model\n"); printf(" --rope-freq-base N RoPE base frequency (default: loaded from model)\n"); - printf(" --rope-freq-scale N RoPE frequency scaling factor (default: loaded from model)\n"); - printf(" -b N, --batch-size N batch size for prompt processing (default: %d)\n", params.n_batch); + printf(" --rope-freq-scale N RoPE frequency scaling factor, expands context by a factor of 1/N\n"); + printf(" --yarn-ext-factor N YaRN: extrapolation mix factor (default: 1.0, 0.0 = full interpolation)\n"); + printf(" --yarn-attn-factor N YaRN: scale sqrt(t) or attention magnitude (default: 1.0)\n"); + printf(" --yarn-beta-slow N YaRN: high correction dim or alpha (default: %.1f)\n", params.yarn_beta_slow); + printf(" --yarn-beta-fast N YaRN: low correction dim or beta (default: %.1f)\n", params.yarn_beta_fast); + printf(" -b N, --batch-size N batch size for prompt processing (default: %d)\n", params.n_batch); printf(" --memory-f32 use f32 instead of f16 for memory key+value (default: disabled)\n"); printf(" not recommended: doubles context memory required and no measurable increase in quality\n"); if (llama_mlock_supported()) @@ -1881,6 +1887,19 @@ static void server_params_parse(int argc, char **argv, server_params &sparams, } params.n_ctx = std::stoi(argv[i]); } + else if (arg == "--rope-scaling") + { + if (++i >= argc) + { + invalid_param = true; + break; + } + std::string value(argv[i]); + /**/ if (value == "none") { params.rope_scaling_type = LLAMA_ROPE_SCALING_NONE; } + else if (value == "linear") { params.rope_scaling_type = LLAMA_ROPE_SCALING_LINEAR; } + else if (value == "yarn") { params.rope_scaling_type = LLAMA_ROPE_SCALING_YARN; } + else { invalid_param = true; break; } + } else if (arg == "--rope-freq-base") { if (++i >= argc) @@ -1899,6 +1918,38 @@ static void server_params_parse(int argc, char **argv, server_params &sparams, } params.rope_freq_scale = std::stof(argv[i]); } + else if (arg == "--yarn-ext-factor") + { + if (++i >= argc) { + invalid_param = true; + break; + } + params.yarn_ext_factor = std::stof(argv[i]); + } + else if (arg == "--yarn-attn-factor") + { + if (++i >= argc) { + invalid_param = true; + break; + } + params.yarn_attn_factor = std::stof(argv[i]); + } + else if (arg == "--yarn-beta-fast") + { + if (++i >= argc) { + invalid_param = true; + break; + } + params.yarn_beta_fast = std::stof(argv[i]); + } + else if (arg == "--yarn-beta-slow") + { + if (++i >= argc) { + invalid_param = true; + break; + } + params.yarn_beta_slow = std::stof(argv[i]); + } else if (arg == "--memory-f32" || arg == "--memory_f32") { params.memory_f16 = false; diff --git a/examples/train-text-from-scratch/train-text-from-scratch.cpp b/examples/train-text-from-scratch/train-text-from-scratch.cpp index 1ce6cef29cfd06..2a257e63215e3c 100644 --- a/examples/train-text-from-scratch/train-text-from-scratch.cpp +++ b/examples/train-text-from-scratch/train-text-from-scratch.cpp @@ -349,9 +349,9 @@ static struct ggml_tensor * llama_build_train_graphs( // not capturing these, to silcence warnings const int rope_mode = 0; - return ggml_rope_custom(ctx, - t, KQ_pos, n_rot, rope_mode, n_ctx, - rope_freq_base, rope_freq_scale); + return ggml_rope_custom( + ctx, t, KQ_pos, n_rot, rope_mode, n_ctx, 0, rope_freq_base, rope_freq_scale, 0.0f, 1.0f, 0.0f, 0.0f + ); }; set_name(tokens_input, "tokens_input"); diff --git a/ggml-cuda.cu b/ggml-cuda.cu index 4e6e7cd94892b1..12ee10e3d9bdcd 100644 --- a/ggml-cuda.cu +++ b/ggml-cuda.cu @@ -4493,11 +4493,41 @@ static __global__ void cpy_f32_f16(const char * cx, char * cdst, const int ne, cpy_1(cx + x_offset, cdst + dst_offset); } -// rope == RoPE == rotary positional embedding +static __device__ float rope_yarn_ramp(const float low, const float high, const int i0) { + const float y = (i0 / 2 - low) / max(0.001f, high - low); + return 1.0f - min(1.0f, max(0.0f, y)); +} + +struct rope_corr_dims { + float v[4]; +}; + +// YaRN algorithm based on LlamaYaRNScaledRotaryEmbedding.py from https://github.com/jquesnelle/yarn +// MIT licensed. Copyright (c) 2023 Jeffrey Quesnelle and Bowen Peng. +static __device__ void rope_yarn( + float theta_extrap, float freq_scale, rope_corr_dims corr_dims, int64_t i0, float ext_factor, float mscale, + float * cos_theta, float * sin_theta +) { + // Get n-d rotational scaling corrected for extrapolation + float theta_interp = freq_scale * theta_extrap; + float theta = theta_interp; + if (ext_factor != 0.0f) { + float ramp_mix = rope_yarn_ramp(corr_dims.v[0], corr_dims.v[1], i0) * ext_factor; + theta = theta_interp * (1 - ramp_mix) + theta_extrap * ramp_mix; + // Get n-d magnitude scaling corrected for interpolation + mscale *= 1.0f + 0.1f * logf(1.0f / freq_scale); + } + *cos_theta = cosf(theta) * mscale; + *sin_theta = sinf(theta) * mscale; +} + +// rope == RoPE == rotary positional embedding template -static __global__ void rope(const T * x, T * dst, const int ncols, const int32_t * pos, const float freq_scale, - const int p_delta_rows, const float theta_scale) { +static __global__ void rope( + const T * x, T * dst, int ncols, const int32_t * pos, float freq_scale, int p_delta_rows, float freq_base, + float ext_factor, float attn_factor, rope_corr_dims corr_dims +) { const int col = 2*(blockDim.y*blockIdx.y + threadIdx.y); if (col >= ncols) { @@ -4509,10 +4539,10 @@ static __global__ void rope(const T * x, T * dst, const int ncols, const int32_t const int i2 = row/p_delta_rows; const int p = has_pos ? pos[i2] : 0; - const float p0 = p*freq_scale; - const float theta = p0*powf(theta_scale, col/2); - const float sin_theta = sinf(theta); - const float cos_theta = cosf(theta); + const float theta_base = p*powf(freq_base, -col/ncols); + + float cos_theta, sin_theta; + rope_yarn(theta_base, freq_scale, corr_dims, col, ext_factor, attn_factor, &cos_theta, &sin_theta); const float x0 = x[i + 0]; const float x1 = x[i + 1]; @@ -4522,8 +4552,10 @@ static __global__ void rope(const T * x, T * dst, const int ncols, const int32_t } template -static __global__ void rope_neox(const T * x, T * dst, const int ncols, const int32_t * pos, const float freq_scale, - const int p_delta_rows, const float theta_scale) { +static __global__ void rope_neox( + const T * x, T * dst, int ncols, const int32_t * pos, float freq_scale, int p_delta_rows, float freq_base, + float ext_factor, float attn_factor, rope_corr_dims corr_dims +) { const int col = 2*(blockDim.y*blockIdx.y + threadIdx.y); if (col >= ncols) { @@ -4534,11 +4566,14 @@ static __global__ void rope_neox(const T * x, T * dst, const int ncols, const in const int i = row*ncols + col/2; const int i2 = row/p_delta_rows; + // simplified from `(row * ncols + col) * (-1 / ncols)` + const float cur_rot = -col/ncols - row; + const int p = has_pos ? pos[i2] : 0; - const float p0 = p*freq_scale; - const float theta = p0*powf(theta_scale, col/2); - const float sin_theta = sinf(theta); - const float cos_theta = cosf(theta); + const float theta_base = p*powf(freq_base, cur_rot); + + float cos_theta, sin_theta; + rope_yarn(theta_base, freq_scale, corr_dims, cur_rot, ext_factor, attn_factor, &cos_theta, &sin_theta); const float x0 = x[i + 0]; const float x1 = x[i + ncols/2]; @@ -4547,8 +4582,10 @@ static __global__ void rope_neox(const T * x, T * dst, const int ncols, const in dst[i + ncols/2] = x0*sin_theta + x1*cos_theta; } -static __global__ void rope_glm_f32(const float * x, float * dst, const int ncols, const int32_t * pos, const float freq_scale, - const int p_delta_rows, const float theta_scale, const int n_ctx) { +static __global__ void rope_glm_f32( + const float * x, float * dst, int ncols, const int32_t * pos, float freq_scale, int p_delta_rows, float freq_base, + int n_ctx +) { const int col = blockDim.x*blockIdx.x + threadIdx.x; const int half_n_dims = ncols/4; @@ -4560,7 +4597,7 @@ static __global__ void rope_glm_f32(const float * x, float * dst, const int ncol const int i = row*ncols + col; const int i2 = row/p_delta_rows; - const float col_theta_scale = powf(theta_scale, col); + const float col_theta_scale = powf(freq_base, -2.0f*col/ncols); // FIXME: this is likely wrong const int p = pos != nullptr ? pos[i2] : 0; @@ -5584,40 +5621,54 @@ static void clamp_f32_cuda(const float * x, float * dst, const float min, const } template -static void rope_cuda(const T * x, T * dst, const int ncols, const int nrows, const int32_t * pos, const float freq_scale, - const int p_delta_rows, const float theta_scale, cudaStream_t stream) { +static void rope_cuda( + const T * x, T * dst, int ncols, int nrows, const int32_t * pos, float freq_scale, int p_delta_rows, + float freq_base, float ext_factor, float attn_factor, rope_corr_dims corr_dims, cudaStream_t stream +) { GGML_ASSERT(ncols % 2 == 0); const dim3 block_dims(1, CUDA_ROPE_BLOCK_SIZE, 1); const int num_blocks_x = (ncols + 2*CUDA_ROPE_BLOCK_SIZE - 1) / (2*CUDA_ROPE_BLOCK_SIZE); const dim3 block_nums(nrows, num_blocks_x, 1); if (pos == nullptr) { - rope<<>>(x, dst, ncols, pos, freq_scale, p_delta_rows, theta_scale); + rope<<>>( + x, dst, ncols, pos, freq_scale, p_delta_rows, freq_base, ext_factor, attn_factor, corr_dims + ); } else { - rope<<>>(x, dst, ncols, pos, freq_scale, p_delta_rows, theta_scale); + rope<<>>( + x, dst, ncols, pos, freq_scale, p_delta_rows, freq_base, ext_factor, attn_factor, corr_dims + ); } } template -static void rope_neox_cuda(const T * x, T * dst, const int ncols, const int nrows, const int32_t * pos, const float freq_scale, - const int p_delta_rows, const float theta_scale, cudaStream_t stream) { +static void rope_neox_cuda( + const T * x, T * dst, int ncols, int nrows, const int32_t * pos, float freq_scale, int p_delta_rows, + float freq_base, float ext_factor, float attn_factor, rope_corr_dims corr_dims, cudaStream_t stream +) { GGML_ASSERT(ncols % 2 == 0); const dim3 block_dims(1, CUDA_ROPE_BLOCK_SIZE, 1); const int num_blocks_x = (ncols + 2*CUDA_ROPE_BLOCK_SIZE - 1) / (2*CUDA_ROPE_BLOCK_SIZE); const dim3 block_nums(nrows, num_blocks_x, 1); if (pos == nullptr) { - rope_neox<<>>(x, dst, ncols, pos, freq_scale, p_delta_rows, theta_scale); + rope_neox<<>>( + x, dst, ncols, pos, freq_scale, p_delta_rows, freq_base, ext_factor, attn_factor, corr_dims + ); } else { - rope_neox<<>>(x, dst, ncols, pos, freq_scale, p_delta_rows, theta_scale); + rope_neox<<>>( + x, dst, ncols, pos, freq_scale, p_delta_rows, freq_base, ext_factor, attn_factor, corr_dims + ); } } -static void rope_glm_f32_cuda(const float * x, float * dst, const int ncols, const int nrows, const int32_t * pos, const float freq_scale, - const int p_delta_rows, const float theta_scale, const int n_ctx, cudaStream_t stream) { +static void rope_glm_f32_cuda( + const float * x, float * dst, int ncols, int nrows, const int32_t * pos, float freq_scale, int p_delta_rows, + float freq_base, int n_ctx, cudaStream_t stream +) { GGML_ASSERT(ncols % 4 == 0); const dim3 block_dims(CUDA_ROPE_BLOCK_SIZE/4, 1, 1); const int num_blocks_x = (ncols + CUDA_ROPE_BLOCK_SIZE - 1) / CUDA_ROPE_BLOCK_SIZE; const dim3 block_nums(num_blocks_x, nrows, 1); - rope_glm_f32<<>>(x, dst, ncols, pos, freq_scale, p_delta_rows, theta_scale, n_ctx); + rope_glm_f32<<>>(x, dst, ncols, pos, freq_scale, p_delta_rows, freq_base, n_ctx); } static void alibi_f32_cuda(const float * x, float * dst, const int ncols, const int nrows, @@ -6477,17 +6528,20 @@ inline void ggml_cuda_op_rope( const int64_t ne2 = dst->ne[2]; const int64_t nrows = ggml_nrows(src0); - //const int n_past = ((int32_t *) dst->op_params)[0]; - const int n_dims = ((int32_t *) dst->op_params)[1]; - const int mode = ((int32_t *) dst->op_params)[2]; - const int n_ctx = ((int32_t *) dst->op_params)[3]; - // RoPE alteration for extended context - - float freq_base, freq_scale; - memcpy(&freq_base, (int32_t *) dst->op_params + 4, sizeof(float)); - memcpy(&freq_scale, (int32_t *) dst->op_params + 5, sizeof(float)); + //const int n_past = ((int32_t *) dst->op_params)[0]; + const int n_dims = ((int32_t *) dst->op_params)[1]; + const int mode = ((int32_t *) dst->op_params)[2]; + const int n_ctx = ((int32_t *) dst->op_params)[3]; + const int n_orig_ctx = ((int32_t *) dst->op_params)[4]; - const float theta_scale = powf(freq_base, -2.0f/n_dims); + // RoPE alteration for extended context + float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow; + memcpy(&freq_base, (int32_t *) dst->op_params + 5, sizeof(float)); + memcpy(&freq_scale, (int32_t *) dst->op_params + 6, sizeof(float)); + memcpy(&ext_factor, (int32_t *) dst->op_params + 7, sizeof(float)); + memcpy(&attn_factor, (int32_t *) dst->op_params + 8, sizeof(float)); + memcpy(&beta_fast, (int32_t *) dst->op_params + 9, sizeof(float)); + memcpy(&beta_slow, (int32_t *) dst->op_params + 10, sizeof(float)); const int32_t * pos = nullptr; if ((mode & 1) == 0) { @@ -6499,24 +6553,39 @@ inline void ggml_cuda_op_rope( const bool is_neox = mode & 2; const bool is_glm = mode & 4; + rope_corr_dims corr_dims; + ggml_rope_yarn_corr_dims(n_dims, n_orig_ctx, freq_base, beta_fast, beta_slow, corr_dims.v); + // compute if (is_glm) { GGML_ASSERT(false); - rope_glm_f32_cuda(src0_dd, dst_dd, ne00, nrows, pos, freq_scale, ne01, theta_scale, n_ctx, main_stream); + rope_glm_f32_cuda(src0_dd, dst_dd, ne00, nrows, pos, freq_scale, ne01, freq_base, n_ctx, main_stream); } else if (is_neox) { GGML_ASSERT(ne00 == n_dims && "ne00 != n_dims is not implemented for CUDA yet"); if (src0->type == GGML_TYPE_F32) { - rope_neox_cuda((const float *)src0_dd, (float *)dst_dd, ne00, nrows, pos, freq_scale, ne01, theta_scale, main_stream); + rope_neox_cuda( + (const float *)src0_dd, (float *)dst_dd, ne00, nrows, pos, freq_scale, ne01, freq_base, ext_factor, + attn_factor, corr_dims, main_stream + ); } else if (src0->type == GGML_TYPE_F16) { - rope_neox_cuda((const half *)src0_dd, (half *)dst_dd, ne00, nrows, pos, freq_scale, ne01, theta_scale, main_stream); + rope_neox_cuda( + (const half *)src0_dd, (half *)dst_dd, ne00, nrows, pos, freq_scale, ne01, freq_base, ext_factor, + attn_factor, corr_dims, main_stream + ); } else { GGML_ASSERT(false); } } else { if (src0->type == GGML_TYPE_F32) { - rope_cuda((const float *)src0_dd, (float *)dst_dd, ne00, nrows, pos, freq_scale, ne01, theta_scale, main_stream); + rope_cuda( + (const float *)src0_dd, (float *)dst_dd, ne00, nrows, pos, freq_scale, ne01, freq_base, ext_factor, + attn_factor, corr_dims, main_stream + ); } else if (src0->type == GGML_TYPE_F16) { - rope_cuda((const half *)src0_dd, (half *)dst_dd, ne00, nrows, pos, freq_scale, ne01, theta_scale, main_stream); + rope_cuda( + (const half *)src0_dd, (half *)dst_dd, ne00, nrows, pos, freq_scale, ne01, freq_base, ext_factor, + attn_factor, corr_dims, main_stream + ); } else { GGML_ASSERT(false); } diff --git a/ggml-metal.m b/ggml-metal.m index 1f034150788e26..611d5e173681eb 100644 --- a/ggml-metal.m +++ b/ggml-metal.m @@ -1400,14 +1400,18 @@ void ggml_metal_graph_compute( const int nth = MIN(1024, ne00); - const int n_past = ((int32_t *) dst->op_params)[0]; - const int n_dims = ((int32_t *) dst->op_params)[1]; - const int mode = ((int32_t *) dst->op_params)[2]; - - float freq_base; - float freq_scale; - memcpy(&freq_base, (int32_t *) dst->op_params + 4, sizeof(float)); - memcpy(&freq_scale, (int32_t *) dst->op_params + 5, sizeof(float)); + const int n_past = ((int32_t *) dst->op_params)[0]; + const int n_dims = ((int32_t *) dst->op_params)[1]; + const int mode = ((int32_t *) dst->op_params)[2]; + const int n_orig_ctx = ((int32_t *) dst->op_params)[3]; + + float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow; + memcpy(&freq_base, (int32_t *) dst->op_params + 5, sizeof(float)); + memcpy(&freq_scale, (int32_t *) dst->op_params + 6, sizeof(float)); + memcpy(&ext_factor, (int32_t *) dst->op_params + 7, sizeof(float)); + memcpy(&attn_factor, (int32_t *) dst->op_params + 8, sizeof(float)); + memcpy(&beta_fast, (int32_t *) dst->op_params + 9, sizeof(float)); + memcpy(&beta_slow, (int32_t *) dst->op_params + 10, sizeof(float)); switch (src0->type) { case GGML_TYPE_F32: [encoder setComputePipelineState:ctx->pipeline_rope_f32]; break; @@ -1439,6 +1443,10 @@ void ggml_metal_graph_compute( [encoder setBytes:&mode length:sizeof( int) atIndex:21]; [encoder setBytes:&freq_base length:sizeof(float) atIndex:22]; [encoder setBytes:&freq_scale length:sizeof(float) atIndex:23]; + [encoder setBytes:&ext_factor length:sizeof(float) atIndex:24]; + [encoder setBytes:&attn_factor length:sizeof(float) atIndex:25]; + [encoder setBytes:&beta_fast length:sizeof(float) atIndex:26]; + [encoder setBytes:&beta_slow length:sizeof(float) atIndex:27]; [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)]; } break; diff --git a/ggml-metal.metal b/ggml-metal.metal index f3152778ae48c3..471d7d390f8138 100644 --- a/ggml-metal.metal +++ b/ggml-metal.metal @@ -1061,6 +1061,45 @@ kernel void kernel_alibi_f32( } } +static float rope_yarn_ramp(const float low, const float high, const int i0) { + const float y = (i0 / 2 - low) / max(0.001f, high - low); + return 1.0f - min(1.0f, max(0.0f, y)); +} + +// YaRN algorithm based on LlamaYaRNScaledRotaryEmbedding.py from https://github.com/jquesnelle/yarn +// MIT licensed. Copyright (c) 2023 Jeffrey Quesnelle and Bowen Peng. +static void rope_yarn( + float theta_extrap, float freq_scale, float corr_dims[2], int64_t i0, float ext_factor, float mscale, + float * cos_theta, float * sin_theta +) { + // Get n-d rotational scaling corrected for extrapolation + float theta_interp = freq_scale * theta_extrap; + float theta = theta_interp; + if (ext_factor != 0.0f) { + ramp_mix = rope_yarn_ramp(corr_dims[0], corr_dims[1], i0) * ext_factor; + theta = theta_interp * (1 - ramp_mix) + theta_extrap * ramp_mix; + + // Get n-d magnitude scaling corrected for interpolation + mscale *= 1.0f + 0.1f * logf(1.0f / freq_scale); + } + *cos_theta = cosf(theta) * mscale; + *sin_theta = sinf(theta) * mscale; +} + +// Apparently solving `n_rot = 2pi * x * base^((2 * max_pos_emb) / n_dims)` for x, we get +// `corr_fac(n_rot) = n_dims * log(max_pos_emb / (n_rot * 2pi)) / (2 * log(base))` +static float rope_yarn_corr_factor(int n_dims, int n_orig_ctx, float n_rot, float base) { + return n_dims * log(n_orig_ctx / (n_rot * 2 * M_PI_F)) / (2 * log(base)); +} + +static void rope_yarn_corr_dims( + int n_dims, int n_orig_ctx, float freq_base, float beta_fast, float beta_slow, float dims[2] +) { + // start and end correction dims + dims[0] = max(0.0f, floor(rope_yarn_corr_factor(n_dims, n_orig_ctx, beta_fast, freq_base))); + dims[1] = min(n_dims - 1.0f, ceil(rope_yarn_corr_factor(n_dims, n_orig_ctx, beta_slow, freq_base))); +} + typedef void (rope_t)( device const void * src0, device const int32_t * src1, @@ -1116,6 +1155,10 @@ kernel void kernel_rope( constant int & mode, constant float & freq_base, constant float & freq_scale, + constant float & ext_factor, + constant float & attn_factor, + constant float & beta_fast, + constant float & beta_slow, uint tiitg[[thread_index_in_threadgroup]], uint3 tptg[[threads_per_threadgroup]], uint3 tgpig[[threadgroup_position_in_grid]]) { @@ -1125,19 +1168,22 @@ kernel void kernel_rope( const bool is_neox = mode & 2; + float corr_dims[2]; + rope_yarn_corr_dims(n_dims, n_orig_ctx, freq_base, beta_fast, beta_slow, corr_dims); + device const int32_t * pos = src1; const int64_t p = pos[i2]; - const float theta_0 = freq_scale * (float)p; + const float theta_0 = (float)p; const float inv_ndims = -1.f/n_dims; if (!is_neox) { for (int64_t i0 = 2*tiitg; i0 < ne0; i0 += 2*tptg.x) { const float theta = theta_0 * pow(freq_base, inv_ndims*i0); - const float cos_theta = cos(theta); - const float sin_theta = sin(theta); + float cos_theta, sin_theta; + rope_yarn(theta, freq_scale, corr_dims, i0, ext_factor, attn_factor, &cos_theta, &sin_theta); device const T * const src = (device T *)((device char *) src0 + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); device T * dst_data = (device T *)((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); @@ -1152,9 +1198,12 @@ kernel void kernel_rope( for (int64_t ib = 0; ib < ne0/n_dims; ++ib) { for (int64_t ic = 2*tiitg; ic < n_dims; ic += 2*tptg.x) { - const float theta = theta_0 * pow(freq_base, inv_ndims*ic - ib); - const float cos_theta = cos(theta); - const float sin_theta = sin(theta); + // simplified from `(ib * n_dims + ic) * inv_ndims` + const float cur_rot = inv_ndims*ic - ib; + + const float theta = theta_0 * pow(freq_base, cur_rot); + float cos_theta, sin_theta; + rope_yarn(theta, freq_scale, corr_dims, cur_rot, ext_factor, attn_factor, &cos_theta, &sin_theta); const int64_t i0 = ib*n_dims + ic/2; diff --git a/ggml.c b/ggml.c index 80d682255328c3..2c7fe476b176d5 100644 --- a/ggml.c +++ b/ggml.c @@ -1,4 +1,5 @@ #define _CRT_SECURE_NO_DEPRECATE // Disables ridiculous "unsafe" warnigns on Windows +#define _USE_MATH_DEFINES // For M_PI on MSVC #include "ggml-impl.h" #include "ggml-quants.h" @@ -4845,8 +4846,13 @@ static struct ggml_tensor * ggml_rope_impl( int n_dims, int mode, int n_ctx, + int n_orig_ctx, float freq_base, float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow, float xpos_base, bool xpos_down, bool inplace) { @@ -4862,11 +4868,15 @@ static struct ggml_tensor * ggml_rope_impl( struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - int32_t params[8] = { /*n_past*/ 0, n_dims, mode, n_ctx }; - memcpy(params + 4, &freq_base, sizeof(float)); - memcpy(params + 5, &freq_scale, sizeof(float)); - memcpy(params + 6, &xpos_base, sizeof(float)); - memcpy(params + 7, &xpos_down, sizeof(bool)); + int32_t params[13] = { /*n_past*/ 0, n_dims, mode, n_ctx, n_orig_ctx }; + memcpy(params + 5, &freq_base, sizeof(float)); + memcpy(params + 6, &freq_scale, sizeof(float)); + memcpy(params + 7, &ext_factor, sizeof(float)); + memcpy(params + 8, &attn_factor, sizeof(float)); + memcpy(params + 9, &beta_fast, sizeof(float)); + memcpy(params + 10, &beta_slow, sizeof(float)); + memcpy(params + 11, &xpos_base, sizeof(float)); + memcpy(params + 12, &xpos_down, sizeof(bool)); ggml_set_op_params(result, params, sizeof(params)); result->op = GGML_OP_ROPE; @@ -4884,7 +4894,9 @@ struct ggml_tensor * ggml_rope( int n_dims, int mode, int n_ctx) { - return ggml_rope_impl(ctx, a, b, n_dims, mode, n_ctx, 10000.0f, 1.0f, 0.0f, false, false); + return ggml_rope_impl( + ctx, a, b, n_dims, mode, n_ctx, 0, 10000.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, false, false + ); } struct ggml_tensor * ggml_rope_inplace( @@ -4894,7 +4906,9 @@ struct ggml_tensor * ggml_rope_inplace( int n_dims, int mode, int n_ctx) { - return ggml_rope_impl(ctx, a, b, n_dims, mode, n_ctx, 10000.0f, 1.0f, 0.0f, false, true); + return ggml_rope_impl( + ctx, a, b, n_dims, mode, n_ctx, 0, 10000.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, false, true + ); } struct ggml_tensor * ggml_rope_custom( @@ -4904,9 +4918,17 @@ struct ggml_tensor * ggml_rope_custom( int n_dims, int mode, int n_ctx, + int n_orig_ctx, float freq_base, - float freq_scale) { - return ggml_rope_impl(ctx, a, b, n_dims, mode, n_ctx, freq_base, freq_scale, 0.0f, false, false); + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow) { + return ggml_rope_impl( + ctx, a, b, n_dims, mode, n_ctx, n_orig_ctx, freq_base, freq_scale, + ext_factor, attn_factor, beta_fast, beta_slow, 0.0f, false, false + ); } struct ggml_tensor * ggml_rope_custom_inplace( @@ -4916,9 +4938,17 @@ struct ggml_tensor * ggml_rope_custom_inplace( int n_dims, int mode, int n_ctx, + int n_orig_ctx, float freq_base, - float freq_scale) { - return ggml_rope_impl(ctx, a, b, n_dims, mode, n_ctx, freq_base, freq_scale, 0.0f, false, true); + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow) { + return ggml_rope_impl( + ctx, a, b, n_dims, mode, n_ctx, n_orig_ctx, freq_base, freq_scale, + ext_factor, attn_factor, beta_fast, beta_slow, 0.0f, false, true + ); } struct ggml_tensor * ggml_rope_xpos_inplace( @@ -4928,7 +4958,7 @@ struct ggml_tensor * ggml_rope_xpos_inplace( int n_dims, float base, bool down) { - return ggml_rope_impl(ctx, a, b, n_dims, 0, 0, 10000.0f, 1.0f, base, down, true); + return ggml_rope_impl(ctx, a, b, n_dims, 0, 0, 0, 10000.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, base, down, true); } // ggml_rope_back @@ -10901,6 +10931,45 @@ static void ggml_compute_forward_clamp( // ggml_compute_forward_rope +static float rope_yarn_ramp(const float low, const float high, const int i0) { + const float y = (i0 / 2 - low) / MAX(0.001f, high - low); + return 1 - MIN(1, MAX(0, y)); +} + +// YaRN algorithm based on LlamaYaRNScaledRotaryEmbedding.py from https://github.com/jquesnelle/yarn +// MIT licensed. Copyright (c) 2023 Jeffrey Quesnelle and Bowen Peng. +static void rope_yarn( + float theta_extrap, float freq_scale, float corr_dims[2], int64_t i0, float ext_factor, float mscale, + float * cos_theta, float * sin_theta +) { + // Get n-d rotational scaling corrected for extrapolation + float theta_interp = freq_scale * theta_extrap; + float theta = theta_interp; + if (ext_factor != 0.0f) { + float ramp_mix = rope_yarn_ramp(corr_dims[0], corr_dims[1], i0) * ext_factor; + theta = theta_interp * (1 - ramp_mix) + theta_extrap * ramp_mix; + + // Get n-d magnitude scaling corrected for interpolation + mscale *= 1.0f + 0.1f * logf(1.0f / freq_scale); + } + *cos_theta = cosf(theta) * mscale; + *sin_theta = sinf(theta) * mscale; +} + +// Apparently solving `n_rot = 2pi * x * base^((2 * max_pos_emb) / n_dims)` for x, we get +// `corr_dim(n_rot) = n_dims * log(max_pos_emb / (n_rot * 2pi)) / (2 * log(base))` +static float ggml_rope_yarn_corr_dim(int n_dims, int n_orig_ctx, float n_rot, float base) { + return n_dims * logf(n_orig_ctx / (n_rot * 2 * (float)M_PI)) / (2 * logf(base)); +} + +void ggml_rope_yarn_corr_dims( + int n_dims, int n_orig_ctx, float freq_base, float beta_fast, float beta_slow, float dims[2] +) { + // start and end correction dims + dims[0] = MAX(0, floorf(ggml_rope_yarn_corr_dim(n_dims, n_orig_ctx, beta_fast, freq_base))); + dims[1] = MIN(n_dims - 1, ceilf(ggml_rope_yarn_corr_dim(n_dims, n_orig_ctx, beta_slow, freq_base))); +} + static void ggml_compute_forward_rope_f32( const struct ggml_compute_params * params, const struct ggml_tensor * src0, @@ -10910,21 +10979,26 @@ static void ggml_compute_forward_rope_f32( return; } - float freq_base; - float freq_scale; + float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow; // these two only relevant for xPos RoPE: float xpos_base; bool xpos_down; - //const int n_past = ((int32_t *) dst->op_params)[0]; - const int n_dims = ((int32_t *) dst->op_params)[1]; - const int mode = ((int32_t *) dst->op_params)[2]; - const int n_ctx = ((int32_t *) dst->op_params)[3]; - memcpy(&freq_base, (int32_t *) dst->op_params + 4, sizeof(float)); - memcpy(&freq_scale, (int32_t *) dst->op_params + 5, sizeof(float)); - memcpy(&xpos_base, (int32_t *) dst->op_params + 6, sizeof(float)); - memcpy(&xpos_down, (int32_t *) dst->op_params + 7, sizeof(bool)); + //const int n_past = ((int32_t *) dst->op_params)[0]; + const int n_dims = ((int32_t *) dst->op_params)[1]; + const int mode = ((int32_t *) dst->op_params)[2]; + const int n_ctx = ((int32_t *) dst->op_params)[3]; + const int n_orig_ctx = ((int32_t *) dst->op_params)[4]; + + memcpy(&freq_base, (int32_t *) dst->op_params + 5, sizeof(float)); + memcpy(&freq_scale, (int32_t *) dst->op_params + 6, sizeof(float)); + memcpy(&ext_factor, (int32_t *) dst->op_params + 7, sizeof(float)); + memcpy(&attn_factor, (int32_t *) dst->op_params + 8, sizeof(float)); + memcpy(&beta_fast, (int32_t *) dst->op_params + 9, sizeof(float)); + memcpy(&beta_slow, (int32_t *) dst->op_params + 10, sizeof(float)); + memcpy(&xpos_base, (int32_t *) dst->op_params + 11, sizeof(float)); + memcpy(&xpos_down, (int32_t *) dst->op_params + 12, sizeof(bool)); GGML_TENSOR_UNARY_OP_LOCALS @@ -10952,6 +11026,9 @@ static void ggml_compute_forward_rope_f32( int ir = 0; const float theta_scale = powf(freq_base, -2.0f/n_dims); + const float inv_ndims = -1.f/n_dims; + float corr_dims[2]; + ggml_rope_yarn_corr_dims(n_dims, n_orig_ctx, freq_base, beta_fast, beta_slow, corr_dims); const bool is_neox = mode & 2; const bool is_glm = mode & 4; @@ -10965,18 +11042,18 @@ static void ggml_compute_forward_rope_f32( if (ir++ < ir0) continue; if (ir > ir1) break; - float theta = freq_scale * (float)p; + float theta_base = (float)p; if (is_glm) { - theta = MIN(p, n_ctx - 2); + theta_base = MIN(p, n_ctx - 2); float block_theta = MAX(p - (n_ctx - 2), 0); for (int64_t i0 = 0; i0 < ne0 / 4; i0++) { - const float cos_theta = cosf(theta); - const float sin_theta = sinf(theta); + const float cos_theta = cosf(theta_base); + const float sin_theta = sinf(theta_base); const float cos_block_theta = cosf(block_theta); const float sin_block_theta = sinf(block_theta); - theta *= theta_scale; + theta_base *= theta_scale; block_theta *= theta_scale; const float * const src = (float *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); @@ -10994,13 +11071,16 @@ static void ggml_compute_forward_rope_f32( } } else if (!is_neox) { for (int64_t i0 = 0; i0 < ne0; i0 += 2) { - const float cos_theta = cosf(theta); - const float sin_theta = sinf(theta); + float cos_theta, sin_theta; + rope_yarn( + theta_base, freq_scale, corr_dims, i0, ext_factor, attn_factor, &cos_theta, &sin_theta + ); + // zeta scaling for xPos only: float zeta = xpos_base != 0.0f ? powf((i0 + 0.4f * ne0) / (1.4f * ne0), p / xpos_base) : 1.0f; if (xpos_down) zeta = 1.0f / zeta; - theta *= theta_scale; + theta_base *= theta_scale; const float * const src = (float *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); float * dst_data = (float *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); @@ -11014,12 +11094,19 @@ static void ggml_compute_forward_rope_f32( } else { // TODO: this might be wrong for ne0 != n_dims - need double check // ref: https://github.com/huggingface/transformers/blob/main/src/transformers/models/gpt_neox/modeling_gpt_neox.py#LL251C1-L294C28 + theta_base *= freq_scale; for (int64_t ib = 0; ib < ne0/n_dims; ++ib) { for (int64_t ic = 0; ic < n_dims; ic += 2) { - const float cos_theta = cosf(theta); - const float sin_theta = sinf(theta); + // simplified from `(ib * n_dims + ic) * inv_ndims` + float cur_rot = inv_ndims * ic - ib; + + float cos_theta, sin_theta; + rope_yarn( + theta_base, freq_scale, corr_dims, cur_rot, ext_factor, attn_factor, + &cos_theta, &sin_theta + ); - theta *= theta_scale; + theta_base *= theta_scale; const int64_t i0 = ib*n_dims + ic/2; @@ -11048,15 +11135,19 @@ static void ggml_compute_forward_rope_f16( return; } - float freq_base; - float freq_scale; + float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow; - //const int n_past = ((int32_t *) dst->op_params)[0]; - const int n_dims = ((int32_t *) dst->op_params)[1]; - const int mode = ((int32_t *) dst->op_params)[2]; - const int n_ctx = ((int32_t *) dst->op_params)[3]; - memcpy(&freq_base, (int32_t *) dst->op_params + 4, sizeof(float)); - memcpy(&freq_scale, (int32_t *) dst->op_params + 5, sizeof(float)); + //const int n_past = ((int32_t *) dst->op_params)[0]; + const int n_dims = ((int32_t *) dst->op_params)[1]; + const int mode = ((int32_t *) dst->op_params)[2]; + const int n_ctx = ((int32_t *) dst->op_params)[3]; + const int n_orig_ctx = ((int32_t *) dst->op_params)[4]; + memcpy(&freq_base, (int32_t *) dst->op_params + 5, sizeof(float)); + memcpy(&freq_scale, (int32_t *) dst->op_params + 6, sizeof(float)); + memcpy(&ext_factor, (int32_t *) dst->op_params + 7, sizeof(float)); + memcpy(&attn_factor, (int32_t *) dst->op_params + 8, sizeof(float)); + memcpy(&beta_fast, (int32_t *) dst->op_params + 9, sizeof(float)); + memcpy(&beta_slow, (int32_t *) dst->op_params + 10, sizeof(float)); GGML_TENSOR_UNARY_OP_LOCALS @@ -11084,6 +11175,9 @@ static void ggml_compute_forward_rope_f16( int ir = 0; const float theta_scale = powf(freq_base, -2.0f/n_dims); + const float inv_ndims = -1.f/n_dims; + float corr_dims[2]; + ggml_rope_yarn_corr_dims(n_dims, n_orig_ctx, freq_base, beta_fast, beta_slow, corr_dims); const bool is_neox = mode & 2; const bool is_glm = mode & 4; @@ -11097,18 +11191,18 @@ static void ggml_compute_forward_rope_f16( if (ir++ < ir0) continue; if (ir > ir1) break; - float theta = freq_scale * (float)p; + float theta_base = (float)p; if (is_glm) { - theta = MIN(p, n_ctx - 2); + theta_base = MIN(p, n_ctx - 2); float block_theta = MAX(p - (n_ctx - 2), 0); for (int64_t i0 = 0; i0 < ne0 / 4; i0++) { - const float cos_theta = cosf(theta); - const float sin_theta = sinf(theta); + const float cos_theta = cosf(theta_base); + const float sin_theta = sinf(theta_base); const float cos_block_theta = cosf(block_theta); const float sin_block_theta = sinf(block_theta); - theta *= theta_scale; + theta_base *= theta_scale; block_theta *= theta_scale; const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); @@ -11126,10 +11220,12 @@ static void ggml_compute_forward_rope_f16( } } else if (!is_neox) { for (int64_t i0 = 0; i0 < ne0; i0 += 2) { - const float cos_theta = cosf(theta); - const float sin_theta = sinf(theta); + float cos_theta, sin_theta; + rope_yarn( + theta_base, freq_scale, corr_dims, i0, ext_factor, attn_factor, &cos_theta, &sin_theta + ); - theta *= theta_scale; + theta_base *= theta_scale; const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); ggml_fp16_t * dst_data = (ggml_fp16_t *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); @@ -11143,12 +11239,19 @@ static void ggml_compute_forward_rope_f16( } else { // TODO: this might be wrong for ne0 != n_dims - need double check // ref: https://github.com/huggingface/transformers/blob/main/src/transformers/models/gpt_neox/modeling_gpt_neox.py#LL251C1-L294C28 + theta_base *= freq_scale; for (int64_t ib = 0; ib < ne0/n_dims; ++ib) { for (int64_t ic = 0; ic < n_dims; ic += 2) { - const float cos_theta = cosf(theta); - const float sin_theta = sinf(theta); + // simplified from `(ib * n_dims + ic) * inv_ndims` + float cur_rot = inv_ndims * ic - ib; - theta *= theta_scale; + float cos_theta, sin_theta; + rope_yarn( + theta_base, freq_scale, corr_dims, cur_rot, ext_factor, attn_factor, + &cos_theta, &sin_theta + ); + + theta_base *= theta_scale; const int64_t i0 = ib*n_dims + ic/2; @@ -11256,17 +11359,18 @@ static void ggml_compute_forward_rope_back_f32( if (ir++ < ir0) continue; if (ir > ir1) break; - float theta = freq_scale * (float)p; + float theta_base = freq_scale * (float)p; if (!is_neox) { for (int64_t i0 = 0; i0 < ne0; i0 += 2) { - const float cos_theta = cosf(theta); - const float sin_theta = sinf(theta); + const float cos_theta = cosf(theta_base); + const float sin_theta = sinf(theta_base); + // zeta scaling for xPos only: float zeta = xpos_base != 0.0f ? powf((i0 + 0.4f * ne0) / (1.4f * ne0), p / xpos_base) : 1.0f; if (xpos_down) zeta = 1.0f / zeta; - theta *= theta_scale; + theta_base *= theta_scale; const float * const dy = (float *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); float * dx = (float *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); @@ -11280,10 +11384,10 @@ static void ggml_compute_forward_rope_back_f32( } else { for (int64_t ib = 0; ib < ne0/n_dims; ++ib) { for (int64_t ic = 0; ic < n_dims; ic += 2) { - const float cos_theta = cosf(theta); - const float sin_theta = sinf(theta); + const float cos_theta = cosf(theta_base); + const float sin_theta = sinf(theta_base); - theta *= theta_scale; + theta_base *= theta_scale; const int64_t i0 = ib*n_dims + ic/2; @@ -11356,14 +11460,14 @@ static void ggml_compute_forward_rope_back_f16( if (ir++ < ir0) continue; if (ir > ir1) break; - float theta = (float)p; + float theta_base = (float)p; if (!is_neox) { for (int64_t i0 = 0; i0 < ne0; i0 += 2) { - const float cos_theta = cosf(theta); - const float sin_theta = sinf(theta); + const float cos_theta = cosf(theta_base); + const float sin_theta = sinf(theta_base); - theta *= theta_scale; + theta_base *= theta_scale; const ggml_fp16_t * const dy = (ggml_fp16_t *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); ggml_fp16_t * dx = (ggml_fp16_t *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); @@ -11377,10 +11481,10 @@ static void ggml_compute_forward_rope_back_f16( } else { for (int64_t ib = 0; ib < ne0/n_dims; ++ib) { for (int64_t ic = 0; ic < n_dims; ic += 2) { - const float cos_theta = cosf(theta); - const float sin_theta = sinf(theta); + const float cos_theta = cosf(theta_base); + const float sin_theta = sinf(theta_base); - theta *= theta_scale; + theta_base *= theta_scale; const int64_t i0 = ib*n_dims + ic/2; @@ -15505,9 +15609,14 @@ static void ggml_compute_backward(struct ggml_context * ctx, struct ggml_tensor src1, n_dims, mode, + 0, n_ctx, freq_base, freq_scale, + 0.0f, + 1.0f, + 0.0f, + 0.0f, xpos_base, xpos_down, false), diff --git a/ggml.h b/ggml.h index 9d16c5a72fda0e..70eb25a6bf3afc 100644 --- a/ggml.h +++ b/ggml.h @@ -219,7 +219,7 @@ #define GGML_MAX_CONTEXTS 64 #define GGML_MAX_SRC 6 #define GGML_MAX_NAME 64 -#define GGML_MAX_OP_PARAMS 32 +#define GGML_MAX_OP_PARAMS 64 #define GGML_DEFAULT_N_THREADS 4 #if UINTPTR_MAX == 0xFFFFFFFF @@ -1326,8 +1326,13 @@ extern "C" { int n_dims, int mode, int n_ctx, + int n_orig_ctx, float freq_base, - float freq_scale); + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow); // in-place, returns view(a) GGML_API struct ggml_tensor * ggml_rope_custom_inplace( @@ -1337,8 +1342,17 @@ extern "C" { int n_dims, int mode, int n_ctx, + int n_orig_ctx, float freq_base, - float freq_scale); + float freq_scale, + float ext_factor, + float attn_factor, + float beta_fast, + float beta_slow); + + // compute correction dims for YaRN RoPE scaling + void ggml_rope_yarn_corr_dims( + int n_dims, int n_orig_ctx, float freq_base, float beta_fast, float beta_slow, float dims[2]); // xPos RoPE, in-place, returns view(a) GGML_API struct ggml_tensor * ggml_rope_xpos_inplace( diff --git a/gguf-py/gguf/gguf.py b/gguf-py/gguf/gguf.py index 6b7d654294a3e0..727b4e55495a76 100644 --- a/gguf-py/gguf/gguf.py +++ b/gguf-py/gguf/gguf.py @@ -7,7 +7,7 @@ import struct import sys import tempfile -from enum import IntEnum, auto +from enum import Enum, IntEnum, auto from io import BufferedWriter from pathlib import Path from typing import IO, Any, BinaryIO, Callable, Sequence @@ -53,9 +53,12 @@ KEY_ATTENTION_LAYERNORM_RMS_EPS = "{arch}.attention.layer_norm_rms_epsilon" # RoPE -KEY_ROPE_DIMENSION_COUNT = "{arch}.rope.dimension_count" -KEY_ROPE_FREQ_BASE = "{arch}.rope.freq_base" -KEY_ROPE_SCALE_LINEAR = "{arch}.rope.scale_linear" +KEY_ROPE_DIMENSION_COUNT = "{arch}.rope.dimension_count" +KEY_ROPE_FREQ_BASE = "{arch}.rope.freq_base" +KEY_ROPE_SCALING_TYPE = "{arch}.rope.scaling.type" +KEY_ROPE_SCALING_FACTOR = "{arch}.rope.scaling.factor" +KEY_ROPE_SCALING_ORIG_CTX_LEN = "{arch}.rope.scaling.original_context_length" +KEY_ROPE_SCALING_FINETUNED = "{arch}.rope.scaling.finetuned" # tokenization KEY_TOKENIZER_MODEL = "tokenizer.ggml.model" @@ -577,6 +580,11 @@ class TokenType(IntEnum): UNUSED = 5 BYTE = 6 +class RopeScalingType(Enum): + NONE = 'none' + LINEAR = 'linear' + YARN = 'yarn' + # # implementation # @@ -948,8 +956,17 @@ def add_rope_dimension_count(self, count: int): def add_rope_freq_base(self, value: float): self.add_float32(KEY_ROPE_FREQ_BASE.format(arch=self.arch), value) - def add_rope_scale_linear(self, value: float): - self.add_float32(KEY_ROPE_SCALE_LINEAR.format(arch=self.arch), value) + def add_rope_scaling_type(self, value: RopeScalingType): + self.add_string(KEY_ROPE_SCALING_TYPE.format(arch=self.arch), value.value) + + def add_rope_scaling_factor(self, value: float): + self.add_float32(KEY_ROPE_SCALING_FACTOR.format(arch=self.arch), value) + + def add_rope_scaling_orig_ctx_len(self, value: int): + self.add_uint32(KEY_ROPE_SCALING_ORIG_CTX_LEN.format(arch=self.arch), value) + + def add_rope_scaling_finetuned(self, value: bool): + self.add_bool(KEY_ROPE_SCALING_FINETUNED.format(arch=self.arch), value) def add_tokenizer_model(self, model: str): self.add_string(KEY_TOKENIZER_MODEL, model) diff --git a/llama.cpp b/llama.cpp index 1c6d482f8fe1bc..685882c201921d 100644 --- a/llama.cpp +++ b/llama.cpp @@ -54,6 +54,7 @@ #include #include #include +#include #include #include #include @@ -235,6 +236,10 @@ enum llm_kv { LLM_KV_ROPE_DIMENSION_COUNT, LLM_KV_ROPE_FREQ_BASE, LLM_KV_ROPE_SCALE_LINEAR, + LLM_KV_ROPE_SCALING_TYPE, + LLM_KV_ROPE_SCALING_FACTOR, + LLM_KV_ROPE_SCALING_ORIG_CTX_LEN, + LLM_KV_ROPE_SCALING_FINETUNED, LLM_KV_TOKENIZER_MODEL, LLM_KV_TOKENIZER_LIST, @@ -276,9 +281,13 @@ static std::map LLM_KV_NAMES = { { LLM_KV_ATTENTION_LAYERNORM_EPS, "%s.attention.layer_norm_epsilon" }, { LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, "%s.attention.layer_norm_rms_epsilon" }, - { LLM_KV_ROPE_DIMENSION_COUNT, "%s.rope.dimension_count" }, - { LLM_KV_ROPE_FREQ_BASE, "%s.rope.freq_base" }, - { LLM_KV_ROPE_SCALE_LINEAR, "%s.rope.scale_linear" }, + { LLM_KV_ROPE_DIMENSION_COUNT, "%s.rope.dimension_count" }, + { LLM_KV_ROPE_FREQ_BASE, "%s.rope.freq_base" }, + { LLM_KV_ROPE_SCALE_LINEAR, "%s.rope.scale_linear" }, + { LLM_KV_ROPE_SCALING_TYPE, "%s.rope.scaling.type" }, + { LLM_KV_ROPE_SCALING_FACTOR, "%s.rope.scaling.factor" }, + { LLM_KV_ROPE_SCALING_ORIG_CTX_LEN, "%s.rope.scaling.original_context_length" }, + { LLM_KV_ROPE_SCALING_FINETUNED, "%s.rope.scaling.finetuned" }, { LLM_KV_TOKENIZER_MODEL, "tokenizer.ggml.model" }, { LLM_KV_TOKENIZER_LIST, "tokenizer.ggml.tokens" }, @@ -552,6 +561,22 @@ do { \ } \ } while (0) +static std::map LLAMA_ROPE_SCALING_TYPES = { + { LLAMA_ROPE_SCALING_NONE, "none" }, + { LLAMA_ROPE_SCALING_LINEAR, "linear" }, + { LLAMA_ROPE_SCALING_YARN, "yarn" }, +}; + +static int8_t llama_rope_scaling_type_from_string(const std::string & name) { + for (const auto & kv : LLAMA_ROPE_SCALING_TYPES) { + if (kv.second == name) { + return kv.first; + } + } + + return LLAMA_ROPE_SCALING_UNSPECIFIED; +} + // // ggml helpers // @@ -1035,8 +1060,11 @@ struct llama_hparams { float f_norm_eps; float f_norm_rms_eps; - float rope_freq_base_train; - float rope_freq_scale_train; + float rope_freq_base_train; + float rope_freq_scale_train; + uint32_t n_yarn_orig_ctx; + int8_t rope_scaling_type_train : 3; + bool rope_finetuned : 1; float f_clamp_kqv; float f_max_alibi_bias; @@ -1051,6 +1079,8 @@ struct llama_hparams { if (this->n_layer != other.n_layer) return true; if (this->n_rot != other.n_rot) return true; if (this->n_ff != other.n_ff) return true; + if (this->rope_finetuned != other.rope_finetuned) return true; + if (this->n_yarn_orig_ctx != other.n_yarn_orig_ctx) return true; const float EPSILON = 1e-9; @@ -1081,8 +1111,16 @@ struct llama_cparams { uint32_t n_threads; // number of threads to use for generation uint32_t n_threads_batch; // number of threads to use for batch processing - float rope_freq_base; - float rope_freq_scale; + float rope_freq_base; + float rope_freq_scale; + + uint32_t n_yarn_orig_ctx; + // These hyperparameters are not exposed in GGUF, because all + // existing YaRN models use the same values for them. + float yarn_ext_factor; + float yarn_attn_factor; + float yarn_beta_fast; + float yarn_beta_slow; bool mul_mat_q; }; @@ -2014,14 +2052,30 @@ static void llm_load_hparams( hparams.n_head_kv = hparams.n_head; GGUF_GET_KEY(ctx, hparams.n_head_kv, gguf_get_val_u32, GGUF_TYPE_UINT32, false, kv(LLM_KV_ATTENTION_HEAD_COUNT_KV)); + hparams.rope_finetuned = false; + GGUF_GET_KEY(ctx, hparams.rope_finetuned, gguf_get_val_bool, GGUF_TYPE_BOOL, false, + kv(LLM_KV_ROPE_SCALING_FINETUNED)); + + hparams.n_yarn_orig_ctx = hparams.n_ctx_train; + GGUF_GET_KEY(ctx, hparams.n_yarn_orig_ctx, gguf_get_val_u32, GGUF_TYPE_UINT32, false, + kv(LLM_KV_ROPE_SCALING_ORIG_CTX_LEN)); + // rope_freq_base (optional) hparams.rope_freq_base_train = 10000.0f; GGUF_GET_KEY(ctx, hparams.rope_freq_base_train, gguf_get_val_f32, GGUF_TYPE_FLOAT32, false, kv(LLM_KV_ROPE_FREQ_BASE)); + std::string rope_scaling("linear"); + GGUF_GET_KEY(ctx, rope_scaling, gguf_get_val_str, GGUF_TYPE_STRING, false, kv(LLM_KV_ROPE_SCALING_TYPE)); + hparams.rope_scaling_type_train = llama_rope_scaling_type_from_string(rope_scaling); + GGML_ASSERT(hparams.rope_scaling_type_train != LLAMA_ROPE_SCALING_UNSPECIFIED); + // rope_freq_scale (inverse of the kv) is optional - float ropescale = 1.0f; - GGUF_GET_KEY(ctx, ropescale, gguf_get_val_f32, GGUF_TYPE_FLOAT32, false, kv(LLM_KV_ROPE_SCALE_LINEAR)); - hparams.rope_freq_scale_train = 1.0f/ropescale; + float ropescale = 0.0f; + GGUF_GET_KEY(ctx, ropescale, gguf_get_val_f32, GGUF_TYPE_FLOAT32, false, kv(LLM_KV_ROPE_SCALING_FACTOR)); + if (ropescale == 0.0f) { // try the old key name + GGUF_GET_KEY(ctx, ropescale, gguf_get_val_f32, GGUF_TYPE_FLOAT32, false, kv(LLM_KV_ROPE_SCALE_LINEAR)); + } + hparams.rope_freq_scale_train = ropescale == 0.0f ? 1.0f : 1.0f/ropescale; // sanity check for n_rot (optional) { @@ -2371,6 +2425,8 @@ static void llm_load_print_meta(llama_model_loader & ml, llama_model & model) { const auto & hparams = model.hparams; const auto & vocab = model.vocab; + const auto rope_scaling_type = LLAMA_ROPE_SCALING_TYPES.at(hparams.rope_scaling_type_train); + // hparams LLAMA_LOG_INFO("%s: format = %s\n", __func__, llama_file_version_name(ml.fver)); LLAMA_LOG_INFO("%s: arch = %s\n", __func__, LLM_ARCH_NAMES.at(model.arch).c_str()); @@ -2389,8 +2445,11 @@ static void llm_load_print_meta(llama_model_loader & ml, llama_model & model) { LLAMA_LOG_INFO("%s: f_clamp_kqv = %.1e\n", __func__, hparams.f_clamp_kqv); LLAMA_LOG_INFO("%s: f_max_alibi_bias = %.1e\n", __func__, hparams.f_max_alibi_bias); LLAMA_LOG_INFO("%s: n_ff = %u\n", __func__, hparams.n_ff); + LLAMA_LOG_INFO("%s: rope scaling = %s\n", __func__, rope_scaling_type.c_str()); LLAMA_LOG_INFO("%s: freq_base_train = %.1f\n", __func__, hparams.rope_freq_base_train); LLAMA_LOG_INFO("%s: freq_scale_train = %g\n", __func__, hparams.rope_freq_scale_train); + LLAMA_LOG_INFO("%s: n_yarn_orig_ctx = %u\n", __func__, hparams.n_yarn_orig_ctx); + LLAMA_LOG_INFO("%s: rope_finetuned = %s\n", __func__, hparams.rope_finetuned ? "yes" : "unknown"); LLAMA_LOG_INFO("%s: model type = %s\n", __func__, llama_model_type_name(model.type)); LLAMA_LOG_INFO("%s: model ftype = %s\n", __func__, llama_model_ftype_name(model.ftype).c_str()); LLAMA_LOG_INFO("%s: model params = %.2f B\n", __func__, ml.n_elements*1e-9); @@ -3047,21 +3106,11 @@ static void llm_load_tensors( model.t_load_us = ggml_time_us() - model.t_start_us; } -static bool llama_model_load( - const std::string & fname, - llama_model & model, - int n_gpu_layers, - int main_gpu, - const float * tensor_split, - bool use_mmap, - bool use_mlock, - bool vocab_only, - llama_progress_callback progress_callback, - void *progress_callback_user_data) { +static bool llama_model_load(const std::string & fname, llama_model & model, const llama_model_params & params) { try { - llama_model_loader ml(fname, use_mmap); + llama_model_loader ml(fname, params.use_mmap); - model.hparams.vocab_only = vocab_only; + model.hparams.vocab_only = params.vocab_only; llm_load_arch (ml, model); llm_load_hparams(ml, model); @@ -3073,15 +3122,15 @@ static bool llama_model_load( throw std::runtime_error("vocab size mismatch"); } - if (vocab_only) { + if (params.vocab_only) { LLAMA_LOG_INFO("%s: vocab only - skipping tensors\n", __func__); return true; } llm_load_tensors( - ml, model, n_gpu_layers, - main_gpu, tensor_split, - use_mlock, progress_callback, progress_callback_user_data); + ml, model, params.n_gpu_layers, params.main_gpu, params.tensor_split, params.use_mlock, + params.progress_callback, params.progress_callback_user_data + ); } catch (const std::exception & err) { LLAMA_LOG_ERROR("error loading model: %s\n", err.what()); return false; @@ -3150,6 +3199,7 @@ static struct ggml_tensor * llm_build_inp_embd( static void llm_build_k_shift( struct ggml_context * ctx, const llama_hparams & hparams, + const llama_cparams & cparams, const llama_kv_cache & kv, struct ggml_cgraph * graph, llm_rope_type type, @@ -3162,6 +3212,11 @@ static void llm_build_k_shift( const int64_t n_head_kv = hparams.n_head_kv; const int64_t n_embd_gqa = hparams.n_embd_gqa(); const int64_t n_embd_head = hparams.n_embd_head(); + const int32_t n_orig_ctx = cparams.n_yarn_orig_ctx; + const float ext_factor = cparams.yarn_ext_factor; + const float attn_factor = cparams.yarn_attn_factor; + const float beta_fast = cparams.yarn_beta_fast; + const float beta_slow = cparams.yarn_beta_slow; GGML_ASSERT(n_embd_head % n_rot == 0); @@ -3185,7 +3240,8 @@ static void llm_build_k_shift( ggml_element_size(kv.k)*n_embd_head, ggml_element_size(kv.k)*n_embd_gqa, ggml_element_size(kv.k)*n_embd_gqa*n_ctx*il), - K_shift, n_rot, rope_type, 0, freq_base, freq_scale); + K_shift, n_rot, rope_type, 0, n_orig_ctx, freq_base, freq_scale, + ext_factor, attn_factor, beta_fast, beta_slow); cb(tmp, "K_shifted", il); ggml_build_forward_expand(graph, tmp); } @@ -3442,12 +3498,17 @@ struct llm_build_context { const float freq_base; const float freq_scale; + const float ext_factor; + const float attn_factor; + const float beta_fast; + const float beta_slow; const float norm_eps; const float norm_rms_eps; const int32_t n_tokens; const int32_t n_kv; // size of KV cache to consider (n_kv <= n_ctx) const int32_t kv_head; // index of where we store new KV data in the cache + const int32_t n_orig_ctx; const bool do_rope_shift; @@ -3477,11 +3538,16 @@ struct llm_build_context { n_embd_gqa (hparams.n_embd_gqa()), freq_base (cparams.rope_freq_base), freq_scale (cparams.rope_freq_scale), + ext_factor (cparams.yarn_ext_factor), + attn_factor (cparams.yarn_attn_factor), + beta_fast (cparams.yarn_beta_fast), + beta_slow (cparams.yarn_beta_slow), norm_eps (hparams.f_norm_eps), norm_rms_eps (hparams.f_norm_rms_eps), n_tokens (batch.n_tokens), n_kv (worst_case ? n_ctx : kv_self.n), kv_head (worst_case ? n_ctx - n_tokens : kv_self.head), + n_orig_ctx (cparams.n_yarn_orig_ctx), do_rope_shift (worst_case || kv_self.has_shift), cb (cb), buf_compute (lctx.buf_compute) { @@ -3532,7 +3598,7 @@ struct llm_build_context { // shift the entire K-cache if needed if (do_rope_shift) { - llm_build_k_shift(ctx0, hparams, kv_self, gf, LLM_ROPE, n_ctx, n_embd_head, freq_base, freq_scale, cb); + llm_build_k_shift(ctx0, hparams, cparams, kv_self, gf, LLM_ROPE, n_ctx, n_embd_head, freq_base, freq_scale, cb); } for (int il = 0; il < n_layer; ++il) { @@ -3556,10 +3622,18 @@ struct llm_build_context { struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); cb(Vcur, "Vcur", il); - Qcur = ggml_rope_custom(ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens), inp_pos, n_embd_head, 0, 0, freq_base, freq_scale); + Qcur = ggml_rope_custom( + ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens), inp_pos, + n_embd_head, 0, 0, n_orig_ctx, freq_base, freq_scale, + ext_factor, attn_factor, beta_fast, beta_slow + ); cb(Qcur, "Qcur", il); - Kcur = ggml_rope_custom(ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens), inp_pos, n_embd_head, 0, 0, freq_base, freq_scale); + Kcur = ggml_rope_custom( + ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens), inp_pos, + n_embd_head, 0, 0, n_orig_ctx, freq_base, freq_scale, + ext_factor, attn_factor, beta_fast, beta_slow + ); cb(Kcur, "Kcur", il); llm_build_kv_store(ctx0, hparams, kv_self, gf, Kcur, Vcur, n_ctx, n_tokens, kv_head, cb, il); @@ -3634,7 +3708,7 @@ struct llm_build_context { // shift the entire K-cache if needed if (do_rope_shift) { - llm_build_k_shift(ctx0, hparams, kv_self, gf, LLM_ROPE, n_ctx, n_embd_head, freq_base, freq_scale, cb); + llm_build_k_shift(ctx0, hparams, cparams, kv_self, gf, LLM_ROPE, n_ctx, n_embd_head, freq_base, freq_scale, cb); } for (int il = 0; il < n_layer; ++il) { @@ -3658,8 +3732,16 @@ struct llm_build_context { switch (model.type) { case MODEL_7B: - Qcur = ggml_rope_custom(ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens), inp_pos, n_embd_head, 0, 0, freq_base, freq_scale); - Kcur = ggml_rope_custom(ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens), inp_pos, n_embd_head, 0, 0, freq_base, freq_scale); + Qcur = ggml_rope_custom( + ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens), inp_pos, + n_embd_head, 0, 0, n_orig_ctx, freq_base, freq_scale, + ext_factor, attn_factor, beta_fast, beta_slow + ); + Kcur = ggml_rope_custom( + ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens), inp_pos, + n_embd_head, 0, 0, n_orig_ctx, freq_base, freq_scale, + ext_factor, attn_factor, beta_fast, beta_slow + ); break; case MODEL_13B: Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd/n_head, n_head, n_tokens); @@ -3746,7 +3828,7 @@ struct llm_build_context { // shift the entire K-cache if needed if (do_rope_shift) { - llm_build_k_shift(ctx0, hparams, kv_self, gf, LLM_ROPE_NEOX, n_ctx, n_embd_head, freq_base, freq_scale, cb); + llm_build_k_shift(ctx0, hparams, cparams, kv_self, gf, LLM_ROPE_NEOX, n_ctx, n_embd_head, freq_base, freq_scale, cb); } for (int il = 0; il < n_layer; ++il) { @@ -3786,10 +3868,16 @@ struct llm_build_context { Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens); // using mode = 2 for neox mode - Qcur = ggml_rope_custom(ctx0, Qcur, inp_pos, n_embd_head, 2, 0, freq_base, freq_scale); + Qcur = ggml_rope_custom( + ctx0, Qcur, inp_pos, n_embd_head, 2, 0, n_orig_ctx, + freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow + ); cb(Qcur, "Qcur", il); - Kcur = ggml_rope_custom(ctx0, Kcur, inp_pos, n_embd_head, 2, 0, freq_base, freq_scale); + Kcur = ggml_rope_custom( + ctx0, Kcur, inp_pos, n_embd_head, 2, 0, n_orig_ctx, + freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow + ); cb(Kcur, "Kcur", il); llm_build_kv_store(ctx0, hparams, kv_self, gf, Kcur, Vcur, n_ctx, n_tokens, kv_head, cb, il); @@ -3960,7 +4048,7 @@ struct llm_build_context { cb(KQ_mask, "KQ_mask", -1); if (do_rope_shift) { - llm_build_k_shift(ctx0, hparams, kv_self, gf, LLM_ROPE_NEOX, n_ctx, n_embd_head, freq_base, freq_scale, cb); + llm_build_k_shift(ctx0, hparams, cparams, kv_self, gf, LLM_ROPE_NEOX, n_ctx, n_embd_head, freq_base, freq_scale, cb); } for (int il = 0; il < n_layer; ++il) { @@ -4053,13 +4141,15 @@ struct llm_build_context { cb(kpass, "kpass", il); struct ggml_tensor * qrotated = ggml_rope_custom( - ctx0, qrot, inp_pos, n_rot, 2, 0, freq_base, freq_scale - ); + ctx0, qrot, inp_pos, n_rot, 2, 0, n_orig_ctx, + freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow + ); cb(qrotated, "qrotated", il); struct ggml_tensor * krotated = ggml_rope_custom( - ctx0, krot, inp_pos, n_rot, 2, 0, freq_base, freq_scale - ); + ctx0, krot, inp_pos, n_rot, 2, 0, n_orig_ctx, + freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow + ); cb(krotated, "krotated", il); // ggml currently only supports concatenation on dim=2 @@ -7883,8 +7973,13 @@ struct llama_context_params llama_context_default_params() { /*.n_batch =*/ 512, /*.n_threads =*/ GGML_DEFAULT_N_THREADS, // TODO: better default /*.n_threads_batch =*/ GGML_DEFAULT_N_THREADS, + /*.rope_scaling_type =*/ LLAMA_ROPE_SCALING_UNSPECIFIED, /*.rope_freq_base =*/ 0.0f, /*.rope_freq_scale =*/ 0.0f, + /*.yarn_ext_factor =*/ NAN, + /*.yarn_attn_factor =*/ 1.0f, + /*.yarn_beta_fast =*/ 32.0f, + /*.yarn_beta_slow =*/ 1.0f, /*.mul_mat_q =*/ true, /*.f16_kv =*/ true, /*.logits_all =*/ false, @@ -7971,10 +8066,7 @@ struct llama_model * llama_load_model_from_file( }; } - if (!llama_model_load(path_model, *model, params.n_gpu_layers, - params.main_gpu, params.tensor_split, - params.use_mmap, params.use_mlock, params.vocab_only, - params.progress_callback, params.progress_callback_user_data)) { + if (!llama_model_load(path_model, *model, params)) { LLAMA_LOG_ERROR("%s: failed to load model\n", __func__); delete model; return nullptr; @@ -8000,13 +8092,35 @@ struct llama_context * llama_new_context_with_model( const auto & hparams = model->hparams; auto & cparams = ctx->cparams; - cparams.n_batch = params.n_batch; - cparams.n_ctx = params.n_ctx == 0 ? hparams.n_ctx_train : params.n_ctx; - cparams.rope_freq_base = params.rope_freq_base == 0 ? hparams.rope_freq_base_train : params.rope_freq_base; - cparams.rope_freq_scale = params.rope_freq_scale == 0 ? hparams.rope_freq_scale_train : params.rope_freq_scale; - cparams.n_threads = params.n_threads; - cparams.n_threads_batch = params.n_threads_batch; - cparams.mul_mat_q = params.mul_mat_q; + cparams.n_batch = params.n_batch; + cparams.n_threads = params.n_threads; + cparams.n_threads_batch = params.n_threads_batch; + cparams.yarn_ext_factor = params.yarn_ext_factor; + cparams.yarn_attn_factor = params.yarn_attn_factor; + cparams.yarn_beta_fast = params.yarn_beta_fast; + cparams.yarn_beta_slow = params.yarn_beta_slow; + cparams.mul_mat_q = params.mul_mat_q; + + cparams.n_ctx = params.n_ctx == 0 ? hparams.n_ctx_train : params.n_ctx; + cparams.rope_freq_base = params.rope_freq_base == 0.0f ? hparams.rope_freq_base_train : params.rope_freq_base; + cparams.rope_freq_scale = params.rope_freq_scale == 0.0f ? hparams.rope_freq_scale_train : params.rope_freq_scale; + + cparams.n_yarn_orig_ctx = params.yarn_orig_ctx != 0 ? params.yarn_orig_ctx : + hparams.n_yarn_orig_ctx != 0 ? hparams.n_yarn_orig_ctx : + hparams.n_ctx_train; + + auto rope_scaling_type = params.rope_scaling_type; + if (rope_scaling_type == LLAMA_ROPE_SCALING_UNSPECIFIED) { + rope_scaling_type = hparams.rope_scaling_type_train; + } + + if (rope_scaling_type == LLAMA_ROPE_SCALING_NONE) { + cparams.rope_freq_scale = 1.0f; // never scale if scaling type is none + } + + if (std::isnan(cparams.yarn_ext_factor)) { // NaN indicates 'not set' + cparams.yarn_ext_factor = rope_scaling_type == LLAMA_ROPE_SCALING_YARN ? 1.0f : 0.0f; + } if (params.seed == LLAMA_DEFAULT_SEED) { params.seed = time(NULL); diff --git a/llama.h b/llama.h index 75fe391ef2e733..3f1becd7616885 100644 --- a/llama.h +++ b/llama.h @@ -106,6 +106,14 @@ extern "C" { LLAMA_FTYPE_GUESSED = 1024, // not specified in the model file }; + enum llama_rope_scaling_type { + LLAMA_ROPE_SCALING_UNSPECIFIED = -1, + LLAMA_ROPE_SCALING_NONE = 0, + LLAMA_ROPE_SCALING_LINEAR = 1, + LLAMA_ROPE_SCALING_YARN = 2, + LLAMA_ROPE_SCALING_MAX_VALUE = LLAMA_ROPE_SCALING_YARN, + }; + typedef struct llama_token_data { llama_token id; // token id float logit; // log-odds of the token @@ -172,10 +180,16 @@ extern "C" { uint32_t n_batch; // prompt processing maximum batch size uint32_t n_threads; // number of threads to use for generation uint32_t n_threads_batch; // number of threads to use for batch processing + int8_t rope_scaling_type; // RoPE scaling type, from `enum llama_rope_scaling_type` // ref: https://github.com/ggerganov/llama.cpp/pull/2054 - float rope_freq_base; // RoPE base frequency, 0 = from model - float rope_freq_scale; // RoPE frequency scaling factor, 0 = from model + float rope_freq_base; // RoPE base frequency, 0 = from model + float rope_freq_scale; // RoPE frequency scaling factor, 0 = from model + float yarn_ext_factor; // YaRN extrapolation mix factor, NaN = from model + float yarn_attn_factor; // YaRN magnitude scaling factor + float yarn_beta_fast; // YaRN low correction dim + float yarn_beta_slow; // YaRN high correction dim + uint32_t yarn_orig_ctx; // YaRN original context size // Keep the booleans together to avoid misalignment during copy-by-value. bool mul_mat_q; // if true, use experimental mul_mat_q kernels (DEPRECATED - always true) From d02e98cde035d91ed8032ab943d1d504fe9da394 Mon Sep 17 00:00:00 2001 From: slaren Date: Wed, 1 Nov 2023 23:10:09 +0100 Subject: [PATCH 49/79] ggml-cuda : compute ptrs for cublasGemmBatchedEx in a kernel (#3891) * ggml-cuda : compute ptrs for cublasGemmBatchedEx in a kernel * fix warnings --- ggml-cuda.cu | 80 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 46 insertions(+), 34 deletions(-) diff --git a/ggml-cuda.cu b/ggml-cuda.cu index 12ee10e3d9bdcd..61cd1747cac4fc 100644 --- a/ggml-cuda.cu +++ b/ggml-cuda.cu @@ -6696,8 +6696,10 @@ inline void ggml_cuda_op_clamp( GGML_ASSERT(src0->type == GGML_TYPE_F32); GGML_ASSERT( dst->type == GGML_TYPE_F32); - const float min = ((float *) dst->op_params)[0]; - const float max = ((float *) dst->op_params)[1]; + float min; + float max; + memcpy(&min, dst->op_params, sizeof(float)); + memcpy(&max, (float *) dst->op_params + 1, sizeof(float)); clamp_f32_cuda(src0_dd, dst_dd, min, max, ggml_nelements(src0), main_stream); CUDA_CHECK(cudaGetLastError()); @@ -7221,6 +7223,30 @@ static void ggml_cuda_mul_mat_vec_nc(const ggml_tensor * src0, const ggml_tensor ggml_mul_mat_vec_nc_f16_f32_cuda(src0_ddq, src1_ddf, dst_ddf, ne00, ne01, row_stride_x, ne02, ne12, channel_stride_x, main_stream); } +__global__ void k_compute_batched_ptrs( + const half * src0_as_f16, const half * src1_as_f16, half * dst_f16, + void ** ptrs, + int ne12, int ne13, + int ne23, + int nb02, int nb03, + int nb12, int nb13, + int nb2, int nb3, + int r2, int r3) { + int i13 = blockIdx.x * blockDim.x + threadIdx.x; + int i12 = blockIdx.y * blockDim.y + threadIdx.y; + + if (i13 >= ne13 || i12 >= ne12) { + return; + } + + int i03 = i13 / r3; + int i02 = i12 / r2; + + ptrs[0*ne23 + i12 + i13*ne12] = (char *) src0_as_f16 + i02*nb02 + i03*nb03; + ptrs[1*ne23 + i12 + i13*ne12] = (char *) src1_as_f16 + i12*nb12/2 + i13*nb13/2; + ptrs[2*ne23 + i12 + i13*ne12] = (char *) dst_f16 + i12* nb2/2 + i13* nb3/2; +} + static void ggml_cuda_mul_mat_mat_batched_cublas(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { GGML_ASSERT(!ggml_is_transposed(src0)); GGML_ASSERT(!ggml_is_transposed(src1)); @@ -7322,49 +7348,35 @@ static void ggml_cuda_mul_mat_mat_batched_cublas(const ggml_tensor * src0, const CUBLAS_GEMM_DEFAULT_TENSOR_OP)); } else { // use cublasGemmBatchedEx - // TODO: https://github.com/ggerganov/llama.cpp/pull/3749#discussion_r1369997000 const int ne23 = ne12*ne13; - // TODO: avoid this alloc - void ** ptrs = (void **) malloc(3*ne23*sizeof(void *)); - - for (int i13 = 0; i13 < ne13; ++i13) { - for (int i12 = 0; i12 < ne12; ++i12) { - int i03 = i13 / r3; - int i02 = i12 / r2; - - ptrs[0*ne23 + i12 + i13*ne12] = (char *) src0_as_f16 + i02*src0->nb[2] + i03*src0->nb[3]; - ptrs[1*ne23 + i12 + i13*ne12] = (char *) src1_as_f16 + i12*src1->nb[2]/2 + i13*src1->nb[3]/2; - ptrs[2*ne23 + i12 + i13*ne12] = (char *) dst_f16 + i12* dst->nb[2]/2 + i13* dst->nb[3]/2; - } - } - - // allocate device memory for pointers void ** ptrs_as = nullptr; - CUDA_CHECK(cudaMalloc(&ptrs_as, 3*ne23*sizeof(void *))); - - // TODO: this does not work for some reason -- not sure why? - //size_t ptrs_s = 0; - //ptrs_as = (void **) ggml_cuda_pool_malloc(3*ne23*sizeof(void *), &ptrs_s); - - // copy pointers to device - CUDA_CHECK(cudaMemcpy(ptrs_as, ptrs, 3*ne23*sizeof(void *), cudaMemcpyHostToDevice)); - - free(ptrs); + size_t ptrs_s = 0; + ptrs_as = (void **) ggml_cuda_pool_malloc(3*ne23*sizeof(void *), &ptrs_s); + + dim3 block_dims(ne13, ne12); + k_compute_batched_ptrs<<<1, block_dims, 0, main_stream>>>( + src0_as_f16, src1_as_f16, dst_f16, + ptrs_as, + ne12, ne13, + ne23, + nb02, nb03, + nb12, nb13, + dst->nb[2], dst->nb[3], + r2, r3); + CUDA_CHECK(cudaGetLastError()); CUBLAS_CHECK( cublasGemmBatchedEx(g_cublas_handles[id], CUBLAS_OP_T, CUBLAS_OP_N, ne01, ne11, ne10, - &alpha_f16, (const void **) (ptrs_as + 0*ne23), CUDA_R_16F, nb01/sizeof(half), - (const void **) (ptrs_as + 1*ne23), CUDA_R_16F, nb11/sizeof(float), - &beta_f16, ( void **) (ptrs_as + 2*ne23), CUDA_R_16F, ne01, + &alpha_f16, (const void * const *) (ptrs_as + 0*ne23), CUDA_R_16F, nb01/sizeof(half), + (const void * const *) (ptrs_as + 1*ne23), CUDA_R_16F, nb11/sizeof(float), + &beta_f16, ( void ** ) (ptrs_as + 2*ne23), CUDA_R_16F, ne01, ne23, CUBLAS_COMPUTE_16F, CUBLAS_GEMM_DEFAULT_TENSOR_OP)); - // free device memory for pointers - CUDA_CHECK(cudaFree(ptrs_as)); - //ggml_cuda_pool_free(ptrs_as, ptrs_s); + ggml_cuda_pool_free(ptrs_as, ptrs_s); } #endif From 0eb332a10f3f14a3746c391bf80ff5e7bdf29d5d Mon Sep 17 00:00:00 2001 From: cebtenzzre Date: Wed, 1 Nov 2023 19:29:14 -0400 Subject: [PATCH 50/79] llama : fix llama_context_default_params after #2268 (#3893) --- llama.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/llama.cpp b/llama.cpp index 685882c201921d..32d7d23de6afb1 100644 --- a/llama.cpp +++ b/llama.cpp @@ -7980,6 +7980,7 @@ struct llama_context_params llama_context_default_params() { /*.yarn_attn_factor =*/ 1.0f, /*.yarn_beta_fast =*/ 32.0f, /*.yarn_beta_slow =*/ 1.0f, + /*.yarn_orig_ctx =*/ 0, /*.mul_mat_q =*/ true, /*.f16_kv =*/ true, /*.logits_all =*/ false, From 2fffa0d61fa10e4b466e78cabcc6a4e16717b580 Mon Sep 17 00:00:00 2001 From: cebtenzzre Date: Thu, 2 Nov 2023 01:49:44 -0400 Subject: [PATCH 51/79] cuda : fix RoPE after #2268 (#3897) --- ggml-cuda.cu | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ggml-cuda.cu b/ggml-cuda.cu index 61cd1747cac4fc..57a528ede23ed2 100644 --- a/ggml-cuda.cu +++ b/ggml-cuda.cu @@ -4539,7 +4539,7 @@ static __global__ void rope( const int i2 = row/p_delta_rows; const int p = has_pos ? pos[i2] : 0; - const float theta_base = p*powf(freq_base, -col/ncols); + const float theta_base = p*powf(freq_base, -float(col)/ncols); float cos_theta, sin_theta; rope_yarn(theta_base, freq_scale, corr_dims, col, ext_factor, attn_factor, &cos_theta, &sin_theta); @@ -4566,8 +4566,8 @@ static __global__ void rope_neox( const int i = row*ncols + col/2; const int i2 = row/p_delta_rows; - // simplified from `(row * ncols + col) * (-1 / ncols)` - const float cur_rot = -col/ncols - row; + // simplified from `(ib * ncols + col) * (-1 / ncols)`, where ib is assumed to be zero + const float cur_rot = -float(col)/ncols; const int p = has_pos ? pos[i2] : 0; const float theta_base = p*powf(freq_base, cur_rot); From 183b3fac6c28e65d23ac0230c1dd6fb84bf0154d Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 2 Nov 2023 08:33:37 +0200 Subject: [PATCH 52/79] metal : fix build errors and kernel sig after #2268 (#3898) --- ggml-metal.m | 57 ++++++++++++++++++++++++------------------------ ggml-metal.metal | 16 +++++++++----- 2 files changed, 40 insertions(+), 33 deletions(-) diff --git a/ggml-metal.m b/ggml-metal.m index 611d5e173681eb..b33a3cb8fd0128 100644 --- a/ggml-metal.m +++ b/ggml-metal.m @@ -1419,34 +1419,35 @@ void ggml_metal_graph_compute( default: GGML_ASSERT(false); }; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:2]; - [encoder setBytes:&ne00 length:sizeof( int64_t) atIndex:3]; - [encoder setBytes:&ne01 length:sizeof( int64_t) atIndex:4]; - [encoder setBytes:&ne02 length:sizeof( int64_t) atIndex:5]; - [encoder setBytes:&ne03 length:sizeof( int64_t) atIndex:6]; - [encoder setBytes:&nb00 length:sizeof(uint64_t) atIndex:7]; - [encoder setBytes:&nb01 length:sizeof(uint64_t) atIndex:8]; - [encoder setBytes:&nb02 length:sizeof(uint64_t) atIndex:9]; - [encoder setBytes:&nb03 length:sizeof(uint64_t) atIndex:10]; - [encoder setBytes:&ne0 length:sizeof( int64_t) atIndex:11]; - [encoder setBytes:&ne1 length:sizeof( int64_t) atIndex:12]; - [encoder setBytes:&ne2 length:sizeof( int64_t) atIndex:13]; - [encoder setBytes:&ne3 length:sizeof( int64_t) atIndex:14]; - [encoder setBytes:&nb0 length:sizeof(uint64_t) atIndex:15]; - [encoder setBytes:&nb1 length:sizeof(uint64_t) atIndex:16]; - [encoder setBytes:&nb2 length:sizeof(uint64_t) atIndex:17]; - [encoder setBytes:&nb3 length:sizeof(uint64_t) atIndex:18]; - [encoder setBytes:&n_past length:sizeof( int) atIndex:19]; - [encoder setBytes:&n_dims length:sizeof( int) atIndex:20]; - [encoder setBytes:&mode length:sizeof( int) atIndex:21]; - [encoder setBytes:&freq_base length:sizeof(float) atIndex:22]; - [encoder setBytes:&freq_scale length:sizeof(float) atIndex:23]; - [encoder setBytes:&ext_factor length:sizeof(float) atIndex:24]; - [encoder setBytes:&attn_factor length:sizeof(float) atIndex:25]; - [encoder setBytes:&beta_fast length:sizeof(float) atIndex:26]; - [encoder setBytes:&beta_slow length:sizeof(float) atIndex:27]; + [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; + [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1]; + [encoder setBuffer:id_dst offset:offs_dst atIndex:2]; + [encoder setBytes:&ne00 length:sizeof( int64_t) atIndex:3]; + [encoder setBytes:&ne01 length:sizeof( int64_t) atIndex:4]; + [encoder setBytes:&ne02 length:sizeof( int64_t) atIndex:5]; + [encoder setBytes:&ne03 length:sizeof( int64_t) atIndex:6]; + [encoder setBytes:&nb00 length:sizeof(uint64_t) atIndex:7]; + [encoder setBytes:&nb01 length:sizeof(uint64_t) atIndex:8]; + [encoder setBytes:&nb02 length:sizeof(uint64_t) atIndex:9]; + [encoder setBytes:&nb03 length:sizeof(uint64_t) atIndex:10]; + [encoder setBytes:&ne0 length:sizeof( int64_t) atIndex:11]; + [encoder setBytes:&ne1 length:sizeof( int64_t) atIndex:12]; + [encoder setBytes:&ne2 length:sizeof( int64_t) atIndex:13]; + [encoder setBytes:&ne3 length:sizeof( int64_t) atIndex:14]; + [encoder setBytes:&nb0 length:sizeof(uint64_t) atIndex:15]; + [encoder setBytes:&nb1 length:sizeof(uint64_t) atIndex:16]; + [encoder setBytes:&nb2 length:sizeof(uint64_t) atIndex:17]; + [encoder setBytes:&nb3 length:sizeof(uint64_t) atIndex:18]; + [encoder setBytes:&n_past length:sizeof( int) atIndex:19]; + [encoder setBytes:&n_dims length:sizeof( int) atIndex:20]; + [encoder setBytes:&mode length:sizeof( int) atIndex:21]; + [encoder setBytes:&n_orig_ctx length:sizeof( int) atIndex:22]; + [encoder setBytes:&freq_base length:sizeof( float) atIndex:23]; + [encoder setBytes:&freq_scale length:sizeof( float) atIndex:24]; + [encoder setBytes:&ext_factor length:sizeof( float) atIndex:25]; + [encoder setBytes:&attn_factor length:sizeof( float) atIndex:26]; + [encoder setBytes:&beta_fast length:sizeof( float) atIndex:27]; + [encoder setBytes:&beta_slow length:sizeof( float) atIndex:28]; [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)]; } break; diff --git a/ggml-metal.metal b/ggml-metal.metal index 471d7d390f8138..7c35f23a7612fd 100644 --- a/ggml-metal.metal +++ b/ggml-metal.metal @@ -1070,20 +1070,20 @@ static float rope_yarn_ramp(const float low, const float high, const int i0) { // MIT licensed. Copyright (c) 2023 Jeffrey Quesnelle and Bowen Peng. static void rope_yarn( float theta_extrap, float freq_scale, float corr_dims[2], int64_t i0, float ext_factor, float mscale, - float * cos_theta, float * sin_theta + thread float * cos_theta, thread float * sin_theta ) { // Get n-d rotational scaling corrected for extrapolation float theta_interp = freq_scale * theta_extrap; float theta = theta_interp; if (ext_factor != 0.0f) { - ramp_mix = rope_yarn_ramp(corr_dims[0], corr_dims[1], i0) * ext_factor; + float ramp_mix = rope_yarn_ramp(corr_dims[0], corr_dims[1], i0) * ext_factor; theta = theta_interp * (1 - ramp_mix) + theta_extrap * ramp_mix; // Get n-d magnitude scaling corrected for interpolation - mscale *= 1.0f + 0.1f * logf(1.0f / freq_scale); + mscale *= 1.0f + 0.1f * log(1.0f / freq_scale); } - *cos_theta = cosf(theta) * mscale; - *sin_theta = sinf(theta) * mscale; + *cos_theta = cos(theta) * mscale; + *sin_theta = sin(theta) * mscale; } // Apparently solving `n_rot = 2pi * x * base^((2 * max_pos_emb) / n_dims)` for x, we get @@ -1123,8 +1123,13 @@ typedef void (rope_t)( constant int & n_past, constant int & n_dims, constant int & mode, + constant int & n_orig_ctx, constant float & freq_base, constant float & freq_scale, + constant float & ext_factor, + constant float & attn_factor, + constant float & beta_fast, + constant float & beta_slow, uint tiitg[[thread_index_in_threadgroup]], uint3 tptg[[threads_per_threadgroup]], uint3 tgpig[[threadgroup_position_in_grid]]); @@ -1153,6 +1158,7 @@ kernel void kernel_rope( constant int & n_past, constant int & n_dims, constant int & mode, + constant int & n_orig_ctx, constant float & freq_base, constant float & freq_scale, constant float & ext_factor, From 4d719a6d4e74b9a98e75f826f865f3153717d54b Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 2 Nov 2023 08:35:10 +0200 Subject: [PATCH 53/79] cuda : check if this fixes Pascal card regression (#3882) --- ggml-cuda.cu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ggml-cuda.cu b/ggml-cuda.cu index 57a528ede23ed2..e4629512611b6c 100644 --- a/ggml-cuda.cu +++ b/ggml-cuda.cu @@ -7420,7 +7420,7 @@ static void ggml_cuda_mul_mat(const ggml_tensor * src0, const ggml_tensor * src1 } else if (all_on_device && !use_tensor_cores && src0->type == GGML_TYPE_F16 && !ggml_is_contiguous(src0) && !ggml_is_transposed(src1) && src1->ne[1] == 1) { // KQV single-batch ggml_cuda_mul_mat_vec_nc(src0, src1, dst); - } else if (all_on_device && src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F32 && !ggml_is_transposed(src0) && !ggml_is_transposed(src1)) { + } else if (all_on_device && use_tensor_cores && src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F32 && !ggml_is_transposed(src0) && !ggml_is_transposed(src1)) { // KQ + KQV multi-batch ggml_cuda_mul_mat_mat_batched_cublas(src0, src1, dst); } else if (src0->type == GGML_TYPE_F32) { From b12fa0d1c13596869c512f49a526b979c94787cc Mon Sep 17 00:00:00 2001 From: cebtenzzre Date: Thu, 2 Nov 2023 02:50:16 -0400 Subject: [PATCH 54/79] build : link against build info instead of compiling against it (#3879) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * cmake : fix build when .git does not exist * cmake : simplify BUILD_INFO target * cmake : add missing dependencies on BUILD_INFO * build : link against build info instead of compiling against it * zig : make build info a .cpp source instead of a header Co-authored-by: Matheus C. França * cmake : revert change to CMP0115 --------- Co-authored-by: Matheus C. França --- .gitignore | 2 +- CMakeLists.txt | 33 --------- Makefile | 71 ++++++++++---------- build.zig | 38 +++++------ common/CMakeLists.txt | 42 +++++++++++- common/build-info.cpp.in | 4 ++ common/common.cpp | 5 +- common/common.h | 12 +++- examples/benchmark/CMakeLists.txt | 5 +- examples/benchmark/benchmark-matmult.cpp | 1 - examples/embedding/CMakeLists.txt | 3 - examples/embedding/embedding.cpp | 1 - examples/infill/CMakeLists.txt | 3 - examples/infill/infill.cpp | 5 +- examples/llama-bench/CMakeLists.txt | 3 - examples/llama-bench/llama-bench.cpp | 5 +- examples/llava/CMakeLists.txt | 6 -- examples/main/CMakeLists.txt | 3 - examples/main/main.cpp | 5 +- examples/parallel/CMakeLists.txt | 3 - examples/parallel/parallel.cpp | 2 - examples/perplexity/CMakeLists.txt | 3 - examples/perplexity/perplexity.cpp | 1 - examples/quantize-stats/CMakeLists.txt | 2 +- examples/quantize-stats/quantize-stats.cpp | 1 - examples/quantize/CMakeLists.txt | 5 +- examples/quantize/quantize.cpp | 1 - examples/save-load-state/CMakeLists.txt | 3 - examples/save-load-state/save-load-state.cpp | 1 - examples/server/CMakeLists.txt | 3 - examples/server/server.cpp | 5 +- examples/speculative/CMakeLists.txt | 3 - examples/speculative/speculative.cpp | 2 - scripts/build-info.cmake | 30 +++++---- scripts/build-info.h.in | 9 --- scripts/build-info.sh | 13 ++-- 36 files changed, 143 insertions(+), 191 deletions(-) create mode 100644 common/build-info.cpp.in delete mode 100644 scripts/build-info.h.in diff --git a/.gitignore b/.gitignore index 5d7c5479ef67ae..50cbd0b47cae36 100644 --- a/.gitignore +++ b/.gitignore @@ -65,7 +65,7 @@ models-mnt /parallel /train-text-from-scratch /vdot -build-info.h +/common/build-info.cpp arm_neon.h compile_commands.json CMakeSettings.json diff --git a/CMakeLists.txt b/CMakeLists.txt index 3659279e2d7d09..611ed3f4d2a64d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -100,39 +100,6 @@ option(LLAMA_BUILD_TESTS "llama: build tests" ${LLAMA_STANDALO option(LLAMA_BUILD_EXAMPLES "llama: build examples" ${LLAMA_STANDALONE}) option(LLAMA_BUILD_SERVER "llama: build server example" ON) -# -# Build info header -# - -# Generate initial build-info.h -include(${CMAKE_CURRENT_SOURCE_DIR}/scripts/build-info.cmake) - -if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") - set(GIT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/.git") - - # Is git submodule - if(NOT IS_DIRECTORY "${GIT_DIR}") - file(READ ${GIT_DIR} REAL_GIT_DIR_LINK) - string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" REAL_GIT_DIR ${REAL_GIT_DIR_LINK}) - set(GIT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${REAL_GIT_DIR}") - endif() - - # Add a custom target for build-info.h - add_custom_target(BUILD_INFO ALL DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/build-info.h") - - # Add a custom command to rebuild build-info.h when .git/index changes - add_custom_command( - OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/build-info.h" - COMMENT "Generating build details from Git" - COMMAND ${CMAKE_COMMAND} -DMSVC=${MSVC} -DCMAKE_C_COMPILER_VERSION=${CMAKE_C_COMPILER_VERSION} -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID} -DCMAKE_VS_PLATFORM_NAME=${CMAKE_VS_PLATFORM_NAME} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -P "${CMAKE_CURRENT_SOURCE_DIR}/scripts/build-info.cmake" - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS "${GIT_DIR}/index" - VERBATIM - ) -else() - message(WARNING "Git repository not found; to enable automatic generation of build info, make sure Git is installed and the project is a Git repository.") -endif() - # # Compile flags # diff --git a/Makefile b/Makefile index c53c1e7260fef4..300c1e6c7e1276 100644 --- a/Makefile +++ b/Makefile @@ -542,9 +542,9 @@ llama.o: llama.cpp ggml.h ggml-alloc.h ggml-backend.h ggml-cuda.h ggml-metal.h l $(CXX) $(CXXFLAGS) -c $< -o $@ COMMON_H_DEPS = common/common.h common/sampling.h common/log.h -COMMON_DEPS = common.o sampling.o grammar-parser.o +COMMON_DEPS = common.o sampling.o grammar-parser.o build-info.o -common.o: common/common.cpp build-info.h $(COMMON_H_DEPS) +common.o: common/common.cpp $(COMMON_H_DEPS) $(CXX) $(CXXFLAGS) -c $< -o $@ sampling.o: common/sampling.cpp $(COMMON_H_DEPS) @@ -563,46 +563,46 @@ libllama.so: llama.o ggml.o $(OBJS) $(CXX) $(CXXFLAGS) -shared -fPIC -o $@ $^ $(LDFLAGS) clean: - rm -vrf *.o tests/*.o *.so *.dll benchmark-matmult build-info.h *.dot $(COV_TARGETS) $(BUILD_TARGETS) $(TEST_TARGETS) + rm -vrf *.o tests/*.o *.so *.dll benchmark-matmult common/build-info.cpp *.dot $(COV_TARGETS) $(BUILD_TARGETS) $(TEST_TARGETS) # # Examples # -main: examples/main/main.cpp build-info.h ggml.o llama.o $(COMMON_DEPS) console.o grammar-parser.o $(OBJS) +main: examples/main/main.cpp ggml.o llama.o $(COMMON_DEPS) console.o grammar-parser.o $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) @echo @echo '==== Run ./main -h for help. ====' @echo -infill: examples/infill/infill.cpp build-info.h ggml.o llama.o $(COMMON_DEPS) console.o grammar-parser.o $(OBJS) +infill: examples/infill/infill.cpp ggml.o llama.o $(COMMON_DEPS) console.o grammar-parser.o $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -simple: examples/simple/simple.cpp build-info.h ggml.o llama.o $(COMMON_DEPS) $(OBJS) +simple: examples/simple/simple.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -batched: examples/batched/batched.cpp build-info.h ggml.o llama.o $(COMMON_DEPS) $(OBJS) +batched: examples/batched/batched.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -batched-bench: examples/batched-bench/batched-bench.cpp build-info.h ggml.o llama.o common.o $(OBJS) +batched-bench: examples/batched-bench/batched-bench.cpp build-info.o ggml.o llama.o common.o $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -quantize: examples/quantize/quantize.cpp build-info.h ggml.o llama.o $(OBJS) +quantize: examples/quantize/quantize.cpp build-info.o ggml.o llama.o $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -quantize-stats: examples/quantize-stats/quantize-stats.cpp build-info.h ggml.o llama.o $(OBJS) +quantize-stats: examples/quantize-stats/quantize-stats.cpp build-info.o ggml.o llama.o $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -perplexity: examples/perplexity/perplexity.cpp build-info.h ggml.o llama.o $(COMMON_DEPS) $(OBJS) +perplexity: examples/perplexity/perplexity.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -embedding: examples/embedding/embedding.cpp build-info.h ggml.o llama.o $(COMMON_DEPS) $(OBJS) +embedding: examples/embedding/embedding.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -save-load-state: examples/save-load-state/save-load-state.cpp build-info.h ggml.o llama.o $(COMMON_DEPS) $(OBJS) +save-load-state: examples/save-load-state/save-load-state.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -server: examples/server/server.cpp examples/server/httplib.h examples/server/json.hpp examples/server/index.html.hpp examples/server/index.js.hpp examples/server/completion.js.hpp examples/llava/clip.cpp examples/llava/clip.h common/stb_image.h build-info.h ggml.o llama.o $(COMMON_DEPS) grammar-parser.o $(OBJS) +server: examples/server/server.cpp examples/server/httplib.h examples/server/json.hpp examples/server/index.html.hpp examples/server/index.js.hpp examples/server/completion.js.hpp examples/llava/clip.cpp examples/llava/clip.h common/stb_image.h ggml.o llama.o $(COMMON_DEPS) grammar-parser.o $(OBJS) $(CXX) $(CXXFLAGS) -Iexamples/server $(filter-out %.h,$(filter-out %.hpp,$^)) -o $@ $(LDFLAGS) $(LWINSOCK2) -Wno-cast-qual gguf: examples/gguf/gguf.cpp ggml.o llama.o $(OBJS) @@ -614,7 +614,7 @@ train-text-from-scratch: examples/train-text-from-scratch/train-text-from-scratc convert-llama2c-to-ggml: examples/convert-llama2c-to-ggml/convert-llama2c-to-ggml.cpp ggml.o llama.o $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -llama-bench: examples/llama-bench/llama-bench.cpp build-info.h ggml.o llama.o $(COMMON_DEPS) $(OBJS) +llama-bench: examples/llama-bench/llama-bench.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) llava: examples/llava/llava.cpp examples/llava/llava-utils.h examples/llava/clip.cpp examples/llava/clip.h common/stb_image.h ggml.o llama.o $(COMMON_DEPS) $(OBJS) @@ -623,19 +623,19 @@ llava: examples/llava/llava.cpp examples/llava/llava-utils.h examples/llava/clip baby-llama: examples/baby-llama/baby-llama.cpp ggml.o llama.o $(COMMON_DEPS) train.o $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -beam-search: examples/beam-search/beam-search.cpp build-info.h ggml.o llama.o $(COMMON_DEPS) $(OBJS) +beam-search: examples/beam-search/beam-search.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -finetune: examples/finetune/finetune.cpp build-info.h ggml.o llama.o $(COMMON_DEPS) train.o $(OBJS) +finetune: examples/finetune/finetune.cpp ggml.o llama.o $(COMMON_DEPS) train.o $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -export-lora: examples/export-lora/export-lora.cpp build-info.h ggml.o llama.o $(COMMON_DEPS) $(OBJS) +export-lora: examples/export-lora/export-lora.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -speculative: examples/speculative/speculative.cpp build-info.h ggml.o llama.o $(COMMON_DEPS) grammar-parser.o $(OBJS) +speculative: examples/speculative/speculative.cpp ggml.o llama.o $(COMMON_DEPS) grammar-parser.o $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -parallel: examples/parallel/parallel.cpp build-info.h ggml.o llama.o $(COMMON_DEPS) $(OBJS) +parallel: examples/parallel/parallel.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) ifdef LLAMA_METAL @@ -648,7 +648,7 @@ swift: examples/batched.swift (cd examples/batched.swift; make build) endif -build-info.h: $(wildcard .git/index) scripts/build-info.sh +common/build-info.cpp: $(wildcard .git/index) scripts/build-info.sh @sh scripts/build-info.sh $(CC) > $@.tmp @if ! cmp -s $@.tmp $@; then \ mv $@.tmp $@; \ @@ -656,13 +656,16 @@ build-info.h: $(wildcard .git/index) scripts/build-info.sh rm $@.tmp; \ fi +build-info.o: common/build-info.cpp + $(CXX) $(CXXFLAGS) -c $(filter-out %.h,$^) -o $@ + # # Tests # tests: $(TEST_TARGETS) -benchmark-matmult: examples/benchmark/benchmark-matmult.cpp build-info.h ggml.o $(OBJS) +benchmark-matmult: examples/benchmark/benchmark-matmult.cpp build-info.o ggml.o $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) run-benchmark-matmult: benchmark-matmult @@ -676,40 +679,40 @@ vdot: pocs/vdot/vdot.cpp ggml.o $(OBJS) q8dot: pocs/vdot/q8dot.cpp ggml.o $(OBJS) $(CXX) $(CXXFLAGS) $^ -o $@ $(LDFLAGS) -tests/test-llama-grammar: tests/test-llama-grammar.cpp build-info.h ggml.o $(COMMON_DEPS) grammar-parser.o $(OBJS) +tests/test-llama-grammar: tests/test-llama-grammar.cpp ggml.o $(COMMON_DEPS) grammar-parser.o $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -tests/test-grammar-parser: tests/test-grammar-parser.cpp build-info.h ggml.o llama.o $(COMMON_DEPS) grammar-parser.o $(OBJS) +tests/test-grammar-parser: tests/test-grammar-parser.cpp ggml.o llama.o $(COMMON_DEPS) grammar-parser.o $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -tests/test-double-float: tests/test-double-float.cpp build-info.h ggml.o llama.o $(COMMON_DEPS) $(OBJS) +tests/test-double-float: tests/test-double-float.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -tests/test-grad0: tests/test-grad0.cpp build-info.h ggml.o llama.o $(COMMON_DEPS) $(OBJS) +tests/test-grad0: tests/test-grad0.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -tests/test-opt: tests/test-opt.cpp build-info.h ggml.o llama.o $(COMMON_DEPS) $(OBJS) +tests/test-opt: tests/test-opt.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -tests/test-quantize-fns: tests/test-quantize-fns.cpp build-info.h ggml.o llama.o $(COMMON_DEPS) $(OBJS) +tests/test-quantize-fns: tests/test-quantize-fns.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -tests/test-quantize-perf: tests/test-quantize-perf.cpp build-info.h ggml.o llama.o $(COMMON_DEPS) $(OBJS) +tests/test-quantize-perf: tests/test-quantize-perf.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -tests/test-sampling: tests/test-sampling.cpp build-info.h ggml.o llama.o $(COMMON_DEPS) $(OBJS) +tests/test-sampling: tests/test-sampling.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -tests/test-tokenizer-0-falcon: tests/test-tokenizer-0-falcon.cpp build-info.h ggml.o llama.o $(COMMON_DEPS) $(OBJS) +tests/test-tokenizer-0-falcon: tests/test-tokenizer-0-falcon.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -tests/test-tokenizer-0-llama: tests/test-tokenizer-0-llama.cpp build-info.h ggml.o llama.o $(COMMON_DEPS) $(OBJS) +tests/test-tokenizer-0-llama: tests/test-tokenizer-0-llama.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -tests/test-tokenizer-1-bpe: tests/test-tokenizer-1-bpe.cpp build-info.h ggml.o llama.o $(COMMON_DEPS) $(OBJS) +tests/test-tokenizer-1-bpe: tests/test-tokenizer-1-bpe.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -tests/test-tokenizer-1-llama: tests/test-tokenizer-1-llama.cpp build-info.h ggml.o llama.o $(COMMON_DEPS) $(OBJS) +tests/test-tokenizer-1-llama: tests/test-tokenizer-1-llama.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS) $(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) tests/test-c.o: tests/test-c.c llama.h diff --git a/build.zig b/build.zig index 9b58b74ca858b6..699738f3dd5092 100644 --- a/build.zig +++ b/build.zig @@ -10,7 +10,6 @@ const Maker = struct { builder: *std.build.Builder, target: CrossTarget, optimize: Mode, - config_header: *ConfigHeader, enable_lto: bool, include_dirs: ArrayList([]const u8), @@ -41,26 +40,24 @@ const Maker = struct { const commit_hash = try std.ChildProcess.exec( .{ .allocator = builder.allocator, .argv = &.{ "git", "rev-parse", "HEAD" } }, ); - const config_header = builder.addConfigHeader( - .{ .style = .blank, .include_path = "build-info.h" }, - .{ - .BUILD_NUMBER = 0, - .BUILD_COMMIT = commit_hash.stdout[0 .. commit_hash.stdout.len - 1], // omit newline - .BUILD_COMPILER = builder.fmt("Zig {s}", .{zig_version}), - .BUILD_TARGET = try target.allocDescription(builder.allocator), - }, - ); + try std.fs.cwd().writeFile("common/build-info.cpp", builder.fmt( + \\int LLAMA_BUILD_NUMBER = {}; + \\char const *LLAMA_COMMIT = "{s}"; + \\char const *LLAMA_COMPILER = "Zig {s}"; + \\char const *LLAMA_BUILD_TARGET = "{s}"; + \\ + , .{ 0, commit_hash.stdout[0 .. commit_hash.stdout.len - 1], zig_version, try target.allocDescription(builder.allocator) })); var m = Maker{ .builder = builder, .target = target, .optimize = builder.standardOptimizeOption(.{}), - .config_header = config_header, .enable_lto = false, .include_dirs = ArrayList([]const u8).init(builder.allocator), .cflags = ArrayList([]const u8).init(builder.allocator), .cxxflags = ArrayList([]const u8).init(builder.allocator), .objs = ArrayList(*Compile).init(builder.allocator), }; + try m.addCFlag("-std=c11"); try m.addCxxFlag("-std=c++11"); try m.addProjectInclude(&.{}); @@ -72,7 +69,7 @@ const Maker = struct { const o = m.builder.addObject(.{ .name = name, .target = m.target, .optimize = m.optimize }); if (o.target.getAbi() != .msvc) o.defineCMacro("_GNU_SOURCE", null); - o.addConfigHeader(m.config_header); + if (std.mem.endsWith(u8, src, ".c")) { o.addCSourceFiles(&.{src}, m.cflags.items); o.linkLibC(); @@ -85,7 +82,6 @@ const Maker = struct { o.linkLibCpp(); } } - o.addConfigHeader(m.config_header); for (m.include_dirs.items) |i| o.addIncludePath(.{ .path = i }); o.want_lto = m.enable_lto; return o; @@ -105,7 +101,6 @@ const Maker = struct { // linkLibCpp already add (libc++ + libunwind + libc) e.linkLibCpp(); } - e.addConfigHeader(m.config_header); m.builder.installArtifact(e); e.want_lto = m.enable_lto; return e; @@ -121,6 +116,7 @@ pub fn build(b: *std.build.Builder) !void { const ggml_backend = make.obj("ggml-backend", "ggml-backend.c"); const ggml_quants = make.obj("ggml-quants", "ggml-quants.c"); const llama = make.obj("llama", "llama.cpp"); + const buildinfo = make.obj("common", "common/build-info.cpp"); const common = make.obj("common", "common/common.cpp"); const console = make.obj("console", "common/console.cpp"); const sampling = make.obj("sampling", "common/sampling.cpp"); @@ -128,14 +124,14 @@ pub fn build(b: *std.build.Builder) !void { const train = make.obj("train", "common/train.cpp"); const clip = make.obj("clip", "examples/llava/clip.cpp"); - _ = make.exe("main", "examples/main/main.cpp", &.{ ggml, ggml_alloc, ggml_backend, ggml_quants, llama, common, sampling, console, grammar_parser }); - _ = make.exe("quantize", "examples/quantize/quantize.cpp", &.{ ggml, ggml_alloc, ggml_backend, ggml_quants, llama, common }); - _ = make.exe("perplexity", "examples/perplexity/perplexity.cpp", &.{ ggml, ggml_alloc, ggml_backend, ggml_quants, llama, common }); - _ = make.exe("embedding", "examples/embedding/embedding.cpp", &.{ ggml, ggml_alloc, ggml_backend, ggml_quants, llama, common }); - _ = make.exe("finetune", "examples/finetune/finetune.cpp", &.{ ggml, ggml_alloc, ggml_backend, ggml_quants, llama, common, train }); - _ = make.exe("train-text-from-scratch", "examples/train-text-from-scratch/train-text-from-scratch.cpp", &.{ ggml, ggml_alloc, ggml_backend, ggml_quants, llama, common, train }); + _ = make.exe("main", "examples/main/main.cpp", &.{ ggml, ggml_alloc, ggml_backend, ggml_quants, llama, common, buildinfo, sampling, console, grammar_parser }); + _ = make.exe("quantize", "examples/quantize/quantize.cpp", &.{ ggml, ggml_alloc, ggml_backend, ggml_quants, llama, common, buildinfo }); + _ = make.exe("perplexity", "examples/perplexity/perplexity.cpp", &.{ ggml, ggml_alloc, ggml_backend, ggml_quants, llama, common, buildinfo }); + _ = make.exe("embedding", "examples/embedding/embedding.cpp", &.{ ggml, ggml_alloc, ggml_backend, ggml_quants, llama, common, buildinfo }); + _ = make.exe("finetune", "examples/finetune/finetune.cpp", &.{ ggml, ggml_alloc, ggml_backend, ggml_quants, llama, common, buildinfo, train }); + _ = make.exe("train-text-from-scratch", "examples/train-text-from-scratch/train-text-from-scratch.cpp", &.{ ggml, ggml_alloc, ggml_backend, ggml_quants, llama, common, buildinfo, train }); - const server = make.exe("server", "examples/server/server.cpp", &.{ ggml, ggml_alloc, ggml_backend, ggml_quants, llama, common, sampling, grammar_parser, clip }); + const server = make.exe("server", "examples/server/server.cpp", &.{ ggml, ggml_alloc, ggml_backend, ggml_quants, llama, common, buildinfo, sampling, grammar_parser, clip }); if (server.target.isWindows()) { server.linkSystemLibrary("ws2_32"); } diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index fbb0ff0952ac7a..0150114e3bd2ce 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -1,8 +1,46 @@ # common + +# Build info header +# + +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../.git") + set(GIT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../.git") + + # Is git submodule + if(NOT IS_DIRECTORY "${GIT_DIR}") + file(READ ${GIT_DIR} REAL_GIT_DIR_LINK) + string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" REAL_GIT_DIR ${REAL_GIT_DIR_LINK}) + set(GIT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${REAL_GIT_DIR}") + endif() + + set(GIT_INDEX "${GIT_DIR}/index") +else() + message(WARNING "Git repository not found; to enable automatic generation of build info, make sure Git is installed and the project is a Git repository.") + set(GIT_INDEX "") +endif() + +# Add a custom command to rebuild build-info.cpp when .git/index changes +add_custom_command( + OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/build-info.cpp" + COMMENT "Generating build details from Git" + COMMAND ${CMAKE_COMMAND} -DMSVC=${MSVC} -DCMAKE_C_COMPILER_VERSION=${CMAKE_C_COMPILER_VERSION} + -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID} -DCMAKE_VS_PLATFORM_NAME=${CMAKE_VS_PLATFORM_NAME} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -P "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/build-info.cmake" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/.." + DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/build-info.cpp.in" ${GIT_INDEX} + VERBATIM +) +set(TARGET build_info) +add_library(${TARGET} OBJECT build-info.cpp) +if (BUILD_SHARED_LIBS) + set_target_properties(${TARGET} PROPERTIES POSITION_INDEPENDENT_CODE ON) +endif() + + set(TARGET common) -add_library(${TARGET} OBJECT +add_library(${TARGET} STATIC common.h common.cpp sampling.h @@ -21,4 +59,4 @@ endif() target_include_directories(${TARGET} PUBLIC .) target_compile_features(${TARGET} PUBLIC cxx_std_11) -target_link_libraries(${TARGET} PRIVATE llama) +target_link_libraries(${TARGET} PRIVATE llama build_info) diff --git a/common/build-info.cpp.in b/common/build-info.cpp.in new file mode 100644 index 00000000000000..0b945aa68fff3e --- /dev/null +++ b/common/build-info.cpp.in @@ -0,0 +1,4 @@ +int LLAMA_BUILD_NUMBER = @BUILD_NUMBER@; +char const *LLAMA_COMMIT = "@BUILD_COMMIT@"; +char const *LLAMA_COMPILER = "@BUILD_COMPILER@"; +char const *LLAMA_BUILD_TARGET = "@BUILD_TARGET@"; diff --git a/common/common.cpp b/common/common.cpp index b182ffaaef48ec..e938dee165d9da 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -1,5 +1,4 @@ #include "common.h" -#include "build-info.h" #include "llama.h" #include @@ -1199,8 +1198,8 @@ void dump_non_result_info_yaml(FILE * stream, const gpt_params & params, const l const std::string & timestamp, const std::vector & prompt_tokens, const char * model_desc) { const llama_sampling_params & sparams = params.sparams; - fprintf(stream, "build_commit: %s\n", BUILD_COMMIT); - fprintf(stream, "build_number: %d\n", BUILD_NUMBER); + fprintf(stream, "build_commit: %s\n", LLAMA_COMMIT); + fprintf(stream, "build_number: %d\n", LLAMA_BUILD_NUMBER); fprintf(stream, "cpu_has_arm_fma: %s\n", ggml_cpu_has_arm_fma() ? "true" : "false"); fprintf(stream, "cpu_has_avx: %s\n", ggml_cpu_has_avx() ? "true" : "false"); fprintf(stream, "cpu_has_avx2: %s\n", ggml_cpu_has_avx2() ? "true" : "false"); diff --git a/common/common.h b/common/common.h index 7be69f925bc2be..72a49b8901f26e 100644 --- a/common/common.h +++ b/common/common.h @@ -26,11 +26,17 @@ #define die(msg) do { fputs("error: " msg "\n", stderr); exit(1); } while (0) #define die_fmt(fmt, ...) do { fprintf(stderr, "error: " fmt "\n", __VA_ARGS__); exit(1); } while (0) -#define print_build_info() do { \ - fprintf(stderr, "%s: build = %d (%s)\n", __func__, BUILD_NUMBER, BUILD_COMMIT); \ - fprintf(stderr, "%s: built with %s for %s\n", __func__, BUILD_COMPILER, BUILD_TARGET); \ +#define print_build_info() do { \ + fprintf(stderr, "%s: build = %d (%s)\n", __func__, LLAMA_BUILD_NUMBER, LLAMA_COMMIT); \ + fprintf(stderr, "%s: built with %s for %s\n", __func__, LLAMA_COMPILER, LLAMA_BUILD_TARGET); \ } while(0) +// build info +extern int LLAMA_BUILD_NUMBER; +extern char const *LLAMA_COMMIT; +extern char const *LLAMA_COMPILER; +extern char const *LLAMA_BUILD_TARGET; + // // CLI argument parsing // diff --git a/examples/benchmark/CMakeLists.txt b/examples/benchmark/CMakeLists.txt index 14916d83134633..2bb47bab5a868b 100644 --- a/examples/benchmark/CMakeLists.txt +++ b/examples/benchmark/CMakeLists.txt @@ -1,9 +1,6 @@ set(TARGET benchmark) add_executable(${TARGET} benchmark-matmult.cpp) install(TARGETS ${TARGET} RUNTIME) -target_link_libraries(${TARGET} PRIVATE llama ${CMAKE_THREAD_LIBS_INIT}) +target_link_libraries(${TARGET} PRIVATE llama build_info ${CMAKE_THREAD_LIBS_INIT}) target_include_directories(${TARGET} PRIVATE ../../common) target_compile_features(${TARGET} PRIVATE cxx_std_11) -if(TARGET BUILD_INFO) - add_dependencies(${TARGET} BUILD_INFO) -endif() diff --git a/examples/benchmark/benchmark-matmult.cpp b/examples/benchmark/benchmark-matmult.cpp index f1c382aa9b9557..76e3f57ccce8e0 100644 --- a/examples/benchmark/benchmark-matmult.cpp +++ b/examples/benchmark/benchmark-matmult.cpp @@ -1,4 +1,3 @@ -#include "build-info.h" #include "common.h" #include "ggml.h" diff --git a/examples/embedding/CMakeLists.txt b/examples/embedding/CMakeLists.txt index 0c752c7bbb59f8..8ffc33868401f8 100644 --- a/examples/embedding/CMakeLists.txt +++ b/examples/embedding/CMakeLists.txt @@ -3,6 +3,3 @@ add_executable(${TARGET} embedding.cpp) install(TARGETS ${TARGET} RUNTIME) target_link_libraries(${TARGET} PRIVATE common llama ${CMAKE_THREAD_LIBS_INIT}) target_compile_features(${TARGET} PRIVATE cxx_std_11) -if(TARGET BUILD_INFO) - add_dependencies(${TARGET} BUILD_INFO) -endif() diff --git a/examples/embedding/embedding.cpp b/examples/embedding/embedding.cpp index 14075609ebfd91..3295cd2400ac3d 100644 --- a/examples/embedding/embedding.cpp +++ b/examples/embedding/embedding.cpp @@ -1,4 +1,3 @@ -#include "build-info.h" #include "common.h" #include "llama.h" diff --git a/examples/infill/CMakeLists.txt b/examples/infill/CMakeLists.txt index 57d01cb0b5a8fd..e4e8028da09da6 100644 --- a/examples/infill/CMakeLists.txt +++ b/examples/infill/CMakeLists.txt @@ -3,6 +3,3 @@ add_executable(${TARGET} infill.cpp) install(TARGETS ${TARGET} RUNTIME) target_link_libraries(${TARGET} PRIVATE common llama ${CMAKE_THREAD_LIBS_INIT}) target_compile_features(${TARGET} PRIVATE cxx_std_11) -if(TARGET BUILD_INFO) - add_dependencies(${TARGET} BUILD_INFO) -endif() diff --git a/examples/infill/infill.cpp b/examples/infill/infill.cpp index 9c52b7bbad1dba..62f5ce3c16a322 100644 --- a/examples/infill/infill.cpp +++ b/examples/infill/infill.cpp @@ -2,7 +2,6 @@ #include "console.h" #include "llama.h" -#include "build-info.h" #include "grammar-parser.h" #include @@ -184,8 +183,8 @@ int main(int argc, char ** argv) { LOG_TEE("%s: warning: scaling RoPE frequency by %g.\n", __func__, params.rope_freq_scale); } - LOG_TEE("%s: build = %d (%s)\n", __func__, BUILD_NUMBER, BUILD_COMMIT); - LOG_TEE("%s: built with %s for %s\n", __func__, BUILD_COMPILER, BUILD_TARGET); + LOG_TEE("%s: build = %d (%s)\n", __func__, LLAMA_BUILD_NUMBER, LLAMA_COMMIT); + LOG_TEE("%s: built with %s for %s\n", __func__, LLAMA_COMPILER, LLAMA_BUILD_TARGET); if (params.seed == LLAMA_DEFAULT_SEED) { params.seed = time(NULL); diff --git a/examples/llama-bench/CMakeLists.txt b/examples/llama-bench/CMakeLists.txt index 7e395afd05f755..5bdbea4e28187e 100644 --- a/examples/llama-bench/CMakeLists.txt +++ b/examples/llama-bench/CMakeLists.txt @@ -3,6 +3,3 @@ add_executable(${TARGET} llama-bench.cpp) install(TARGETS ${TARGET} RUNTIME) target_link_libraries(${TARGET} PRIVATE common llama ${CMAKE_THREAD_LIBS_INIT}) target_compile_features(${TARGET} PRIVATE cxx_std_11) -if(TARGET BUILD_INFO) - add_dependencies(${TARGET} BUILD_INFO) -endif() diff --git a/examples/llama-bench/llama-bench.cpp b/examples/llama-bench/llama-bench.cpp index 780398184d2215..9bd82d565834a9 100644 --- a/examples/llama-bench/llama-bench.cpp +++ b/examples/llama-bench/llama-bench.cpp @@ -19,7 +19,6 @@ #include "ggml.h" #include "llama.h" #include "common.h" -#include "build-info.h" #include "ggml-cuda.h" // utils @@ -641,8 +640,8 @@ struct test { } }; -const std::string test::build_commit = BUILD_COMMIT; -const int test::build_number = BUILD_NUMBER; +const std::string test::build_commit = LLAMA_COMMIT; +const int test::build_number = LLAMA_BUILD_NUMBER; const bool test::cuda = !!ggml_cpu_has_cublas(); const bool test::opencl = !!ggml_cpu_has_clblast(); const bool test::metal = !!ggml_cpu_has_metal(); diff --git a/examples/llava/CMakeLists.txt b/examples/llava/CMakeLists.txt index 2d7979ecd89527..03d32c26efaddd 100644 --- a/examples/llava/CMakeLists.txt +++ b/examples/llava/CMakeLists.txt @@ -5,9 +5,6 @@ target_link_libraries(${TARGET} PRIVATE common ggml ${CMAKE_THREAD_LIBS_INIT}) target_compile_features(${TARGET} PRIVATE cxx_std_11) if (NOT MSVC) target_compile_options(${TARGET} PRIVATE -Wno-cast-qual) # stb_image.h - endif() -if(TARGET BUILD_INFO) - add_dependencies(${TARGET} BUILD_INFO) endif() set(TARGET llava) @@ -15,6 +12,3 @@ add_executable(${TARGET} llava.cpp) install(TARGETS ${TARGET} RUNTIME) target_link_libraries(${TARGET} PRIVATE common llama clip ${CMAKE_THREAD_LIBS_INIT}) target_compile_features(${TARGET} PRIVATE cxx_std_11) -if(TARGET BUILD_INFO) - add_dependencies(${TARGET} BUILD_INFO) -endif() diff --git a/examples/main/CMakeLists.txt b/examples/main/CMakeLists.txt index cc188894804bab..d532980b76da83 100644 --- a/examples/main/CMakeLists.txt +++ b/examples/main/CMakeLists.txt @@ -3,6 +3,3 @@ add_executable(${TARGET} main.cpp) install(TARGETS ${TARGET} RUNTIME) target_link_libraries(${TARGET} PRIVATE common llama ${CMAKE_THREAD_LIBS_INIT}) target_compile_features(${TARGET} PRIVATE cxx_std_11) -if(TARGET BUILD_INFO) - add_dependencies(${TARGET} BUILD_INFO) -endif() diff --git a/examples/main/main.cpp b/examples/main/main.cpp index 8a43b6ab878a5f..8d985c82ac21a9 100644 --- a/examples/main/main.cpp +++ b/examples/main/main.cpp @@ -2,7 +2,6 @@ #include "console.h" #include "llama.h" -#include "build-info.h" #include #include @@ -153,8 +152,8 @@ int main(int argc, char ** argv) { LOG_TEE("%s: warning: scaling RoPE frequency by %g.\n", __func__, params.rope_freq_scale); } - LOG_TEE("%s: build = %d (%s)\n", __func__, BUILD_NUMBER, BUILD_COMMIT); - LOG_TEE("%s: built with %s for %s\n", __func__, BUILD_COMPILER, BUILD_TARGET); + LOG_TEE("%s: build = %d (%s)\n", __func__, LLAMA_BUILD_NUMBER, LLAMA_COMMIT); + LOG_TEE("%s: built with %s for %s\n", __func__, LLAMA_COMPILER, LLAMA_BUILD_TARGET); if (params.seed == LLAMA_DEFAULT_SEED) { params.seed = time(NULL); diff --git a/examples/parallel/CMakeLists.txt b/examples/parallel/CMakeLists.txt index 0bbf89eaefce6f..319535a6e9054d 100644 --- a/examples/parallel/CMakeLists.txt +++ b/examples/parallel/CMakeLists.txt @@ -3,6 +3,3 @@ add_executable(${TARGET} parallel.cpp) install(TARGETS ${TARGET} RUNTIME) target_link_libraries(${TARGET} PRIVATE common llama ${CMAKE_THREAD_LIBS_INIT}) target_compile_features(${TARGET} PRIVATE cxx_std_11) -if(TARGET BUILD_INFO) - add_dependencies(${TARGET} BUILD_INFO) -endif() diff --git a/examples/parallel/parallel.cpp b/examples/parallel/parallel.cpp index 9a0b9c183d1070..a78df305f415c3 100644 --- a/examples/parallel/parallel.cpp +++ b/examples/parallel/parallel.cpp @@ -1,8 +1,6 @@ // A basic application simulating a server with multiple clients. // The clients submite requests to the server and they are processed in parallel. -#include "build-info.h" - #include "common.h" #include "llama.h" diff --git a/examples/perplexity/CMakeLists.txt b/examples/perplexity/CMakeLists.txt index af00b4e1650162..3c76d3221416b7 100644 --- a/examples/perplexity/CMakeLists.txt +++ b/examples/perplexity/CMakeLists.txt @@ -3,6 +3,3 @@ add_executable(${TARGET} perplexity.cpp) install(TARGETS ${TARGET} RUNTIME) target_link_libraries(${TARGET} PRIVATE common llama ${CMAKE_THREAD_LIBS_INIT}) target_compile_features(${TARGET} PRIVATE cxx_std_11) -if(TARGET BUILD_INFO) - add_dependencies(${TARGET} BUILD_INFO) -endif() diff --git a/examples/perplexity/perplexity.cpp b/examples/perplexity/perplexity.cpp index bd2c73d87875fe..de60c5227f7c17 100644 --- a/examples/perplexity/perplexity.cpp +++ b/examples/perplexity/perplexity.cpp @@ -1,4 +1,3 @@ -#include "build-info.h" #include "common.h" #include "llama.h" diff --git a/examples/quantize-stats/CMakeLists.txt b/examples/quantize-stats/CMakeLists.txt index db182e2633f1fb..e31cf5e3809c1e 100644 --- a/examples/quantize-stats/CMakeLists.txt +++ b/examples/quantize-stats/CMakeLists.txt @@ -1,6 +1,6 @@ set(TARGET quantize-stats) add_executable(${TARGET} quantize-stats.cpp) install(TARGETS ${TARGET} RUNTIME) -target_link_libraries(${TARGET} PRIVATE llama ${CMAKE_THREAD_LIBS_INIT}) +target_link_libraries(${TARGET} PRIVATE llama build_info ${CMAKE_THREAD_LIBS_INIT}) target_include_directories(${TARGET} PRIVATE ../../common) target_compile_features(${TARGET} PRIVATE cxx_std_11) diff --git a/examples/quantize-stats/quantize-stats.cpp b/examples/quantize-stats/quantize-stats.cpp index dd76b1ceef134d..2712824774ae74 100644 --- a/examples/quantize-stats/quantize-stats.cpp +++ b/examples/quantize-stats/quantize-stats.cpp @@ -1,5 +1,4 @@ #define LLAMA_API_INTERNAL -#include "build-info.h" #include "common.h" #include "ggml.h" #include "llama.h" diff --git a/examples/quantize/CMakeLists.txt b/examples/quantize/CMakeLists.txt index 4a8eed544cb04a..6f374a2bd3b467 100644 --- a/examples/quantize/CMakeLists.txt +++ b/examples/quantize/CMakeLists.txt @@ -1,9 +1,6 @@ set(TARGET quantize) add_executable(${TARGET} quantize.cpp) install(TARGETS ${TARGET} RUNTIME) -target_link_libraries(${TARGET} PRIVATE llama ${CMAKE_THREAD_LIBS_INIT}) +target_link_libraries(${TARGET} PRIVATE llama build_info ${CMAKE_THREAD_LIBS_INIT}) target_include_directories(${TARGET} PRIVATE ../../common) target_compile_features(${TARGET} PRIVATE cxx_std_11) -if(TARGET BUILD_INFO) - add_dependencies(${TARGET} BUILD_INFO) -endif() diff --git a/examples/quantize/quantize.cpp b/examples/quantize/quantize.cpp index be0b2fe1eb963f..d27ea5e9132fdc 100644 --- a/examples/quantize/quantize.cpp +++ b/examples/quantize/quantize.cpp @@ -1,4 +1,3 @@ -#include "build-info.h" #include "common.h" #include "llama.h" diff --git a/examples/save-load-state/CMakeLists.txt b/examples/save-load-state/CMakeLists.txt index eadd13cdf7930a..cc6ed8554a6e34 100644 --- a/examples/save-load-state/CMakeLists.txt +++ b/examples/save-load-state/CMakeLists.txt @@ -3,6 +3,3 @@ add_executable(${TARGET} save-load-state.cpp) install(TARGETS ${TARGET} RUNTIME) target_link_libraries(${TARGET} PRIVATE common llama ${CMAKE_THREAD_LIBS_INIT}) target_compile_features(${TARGET} PRIVATE cxx_std_11) -if(TARGET BUILD_INFO) - add_dependencies(${TARGET} BUILD_INFO) -endif() diff --git a/examples/save-load-state/save-load-state.cpp b/examples/save-load-state/save-load-state.cpp index 38d05f4d328e7a..48d80111010dfa 100644 --- a/examples/save-load-state/save-load-state.cpp +++ b/examples/save-load-state/save-load-state.cpp @@ -1,4 +1,3 @@ -#include "build-info.h" #include "common.h" #include "llama.h" diff --git a/examples/server/CMakeLists.txt b/examples/server/CMakeLists.txt index a23ddcc550274f..1f0d26f7776894 100644 --- a/examples/server/CMakeLists.txt +++ b/examples/server/CMakeLists.txt @@ -11,6 +11,3 @@ if (WIN32) TARGET_LINK_LIBRARIES(${TARGET} PRIVATE ws2_32) endif() target_compile_features(${TARGET} PRIVATE cxx_std_11) -if(TARGET BUILD_INFO) - add_dependencies(${TARGET} BUILD_INFO) -endif() diff --git a/examples/server/server.cpp b/examples/server/server.cpp index 84b04d5a0493a6..fd755327a511db 100644 --- a/examples/server/server.cpp +++ b/examples/server/server.cpp @@ -1,6 +1,5 @@ #include "common.h" #include "llama.h" -#include "build-info.h" #include "grammar-parser.h" #include "../llava/clip.h" @@ -2264,8 +2263,8 @@ int main(int argc, char **argv) llama_backend_init(params.numa); - LOG_INFO("build info", {{"build", BUILD_NUMBER}, - {"commit", BUILD_COMMIT}}); + LOG_INFO("build info", {{"build", LLAMA_BUILD_NUMBER}, + {"commit", LLAMA_COMMIT}}); LOG_INFO("system info", { {"n_threads", params.n_threads}, diff --git a/examples/speculative/CMakeLists.txt b/examples/speculative/CMakeLists.txt index 6c5c9456e62344..810f3c46ac4aab 100644 --- a/examples/speculative/CMakeLists.txt +++ b/examples/speculative/CMakeLists.txt @@ -3,6 +3,3 @@ add_executable(${TARGET} speculative.cpp) install(TARGETS ${TARGET} RUNTIME) target_link_libraries(${TARGET} PRIVATE common llama ${CMAKE_THREAD_LIBS_INIT}) target_compile_features(${TARGET} PRIVATE cxx_std_11) -if(TARGET BUILD_INFO) - add_dependencies(${TARGET} BUILD_INFO) -endif() diff --git a/examples/speculative/speculative.cpp b/examples/speculative/speculative.cpp index 323c74652c9a69..798684f66678e2 100644 --- a/examples/speculative/speculative.cpp +++ b/examples/speculative/speculative.cpp @@ -1,5 +1,3 @@ -#include "build-info.h" - #include "common.h" #include "llama.h" diff --git a/scripts/build-info.cmake b/scripts/build-info.cmake index c86ab43790c753..73853dfa47f41e 100644 --- a/scripts/build-info.cmake +++ b/scripts/build-info.cmake @@ -1,5 +1,5 @@ -set(TEMPLATE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/scripts/build-info.h.in") -set(HEADER_FILE "${CMAKE_CURRENT_SOURCE_DIR}/build-info.h") +set(TEMPLATE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/common/build-info.cpp.in") +set(OUTPUT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/common/build-info.cpp") set(BUILD_NUMBER 0) set(BUILD_COMMIT "unknown") set(BUILD_COMPILER "unknown") @@ -24,15 +24,21 @@ if(Git_FOUND) WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE HEAD OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE RES ) + if (RES EQUAL 0) + set(BUILD_COMMIT ${HEAD}) + endif() execute_process( COMMAND ${GIT_EXECUTABLE} rev-list --count HEAD WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE COUNT OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE RES ) - set(BUILD_COMMIT ${HEAD}) - set(BUILD_NUMBER ${COUNT}) + if (RES EQUAL 0) + set(BUILD_NUMBER ${COUNT}) + endif() endif() if(MSVC) @@ -53,22 +59,22 @@ else() set(BUILD_TARGET ${OUT}) endif() -# Only write the header if it's changed to prevent unnecessary recompilation -if(EXISTS ${HEADER_FILE}) - file(READ ${HEADER_FILE} CONTENTS) - string(REGEX MATCH "BUILD_COMMIT \"([^\"]*)\"" _ ${CONTENTS}) +# Only write the build info if it changed +if(EXISTS ${OUTPUT_FILE}) + file(READ ${OUTPUT_FILE} CONTENTS) + string(REGEX MATCH "LLAMA_COMMIT = \"([^\"]*)\";" _ ${CONTENTS}) set(OLD_COMMIT ${CMAKE_MATCH_1}) - string(REGEX MATCH "BUILD_COMPILER \"([^\"]*)\"" _ ${CONTENTS}) + string(REGEX MATCH "LLAMA_COMPILER = \"([^\"]*)\";" _ ${CONTENTS}) set(OLD_COMPILER ${CMAKE_MATCH_1}) - string(REGEX MATCH "BUILD_TARGET \"([^\"]*)\"" _ ${CONTENTS}) + string(REGEX MATCH "LLAMA_BUILD_TARGET = \"([^\"]*)\";" _ ${CONTENTS}) set(OLD_TARGET ${CMAKE_MATCH_1}) if ( NOT OLD_COMMIT STREQUAL BUILD_COMMIT OR NOT OLD_COMPILER STREQUAL BUILD_COMPILER OR NOT OLD_TARGET STREQUAL BUILD_TARGET ) - configure_file(${TEMPLATE_FILE} ${HEADER_FILE}) + configure_file(${TEMPLATE_FILE} ${OUTPUT_FILE}) endif() else() - configure_file(${TEMPLATE_FILE} ${HEADER_FILE}) + configure_file(${TEMPLATE_FILE} ${OUTPUT_FILE}) endif() diff --git a/scripts/build-info.h.in b/scripts/build-info.h.in deleted file mode 100644 index e996faef039748..00000000000000 --- a/scripts/build-info.h.in +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef BUILD_INFO_H -#define BUILD_INFO_H - -#define BUILD_NUMBER @BUILD_NUMBER@ -#define BUILD_COMMIT "@BUILD_COMMIT@" -#define BUILD_COMPILER "@BUILD_COMPILER@" -#define BUILD_TARGET "@BUILD_TARGET@" - -#endif // BUILD_INFO_H diff --git a/scripts/build-info.sh b/scripts/build-info.sh index 3c8b1fb850eef0..32682afbdbd520 100755 --- a/scripts/build-info.sh +++ b/scripts/build-info.sh @@ -24,12 +24,7 @@ if out=$($CC -dumpmachine); then build_target=$out fi -echo "#ifndef BUILD_INFO_H" -echo "#define BUILD_INFO_H" -echo -echo "#define BUILD_NUMBER $build_number" -echo "#define BUILD_COMMIT \"$build_commit\"" -echo "#define BUILD_COMPILER \"$build_compiler\"" -echo "#define BUILD_TARGET \"$build_target\"" -echo -echo "#endif // BUILD_INFO_H" +echo "int LLAMA_BUILD_NUMBER = ${build_number};" +echo "char const *LLAMA_COMMIT = \"${build_commit}\";" +echo "char const *LLAMA_COMPILER = \"${build_compiler}\";" +echo "char const *LLAMA_BUILD_TARGET = \"${build_target}\";" From 1efae9b7dca2a5cc5aa21c1997b538022964ea19 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 2 Nov 2023 09:54:18 +0200 Subject: [PATCH 55/79] llm : prevent from 1-D tensors being GPU split (#3697) --- llama.cpp | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/llama.cpp b/llama.cpp index 32d7d23de6afb1..bb60044b4707f7 100644 --- a/llama.cpp +++ b/llama.cpp @@ -1837,6 +1837,12 @@ struct llama_model_loader { throw std::runtime_error(format("%s: tensor '%s' not found", __func__, name.c_str())); } + if (backend == GGML_BACKEND_GPU_SPLIT) { + if (ne.size() == 1) { + throw std::runtime_error(format("%s: 1-dimensional tensor '%s' cannot be split on the GPU", __func__, name.c_str())); + } + } + { bool is_ok = true; for (size_t i = 0; i < ne.size(); ++i) { @@ -2817,8 +2823,8 @@ static void llm_load_tensors( layer.ffn_down = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, backend_split); layer.ffn_down_b = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, backend); - layer.ffn_up = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, backend_split); - layer.ffn_up_b = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, backend); + layer.ffn_up = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, backend_split); + layer.ffn_up_b = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, backend); if (backend == GGML_BACKEND_GPU) { vram_weights += @@ -2877,13 +2883,13 @@ static void llm_load_tensors( layer.attn_norm = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd}, backend); layer.attn_norm_b = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}, backend); layer.wqkv = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}, backend_split); - layer.bqkv = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd + 2*n_embd_gqa}, backend_split); + layer.bqkv = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd + 2*n_embd_gqa}, backend); layer.wo = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, backend_split); - layer.bo = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, backend_split); + layer.bo = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, backend); layer.ffn_down = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, backend_split); - layer.ffn_down_b = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, backend_split); + layer.ffn_down_b = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, backend); layer.ffn_up = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, backend_split); - layer.ffn_up_b = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, backend_split); + layer.ffn_up_b = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, backend); layer.ffn_norm = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, backend); layer.ffn_norm_b = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}, backend); layer.attn_q_norm = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_Q_NORM, "weight", i), {64}, backend); @@ -2949,19 +2955,19 @@ static void llm_load_tensors( layer.attn_norm_b = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_NORM, "bias", i), {n_embd}, backend); layer.wqkv = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_QKV, "weight", i), {n_embd, n_embd + 2*n_embd_gqa}, backend_split); - layer.bqkv = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd + 2*n_embd_gqa}, backend_split); + layer.bqkv = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_QKV, "bias", i), {n_embd + 2*n_embd_gqa}, backend); layer.wo = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd}, backend_split); - layer.bo = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, backend_split); + layer.bo = ml.create_tensor(ctx, tn(LLM_TENSOR_ATTN_OUT, "bias", i), {n_embd}, backend); layer.ffn_norm = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd}, backend); layer.ffn_norm_b = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_NORM, "bias", i), {n_embd}, backend); layer.ffn_down = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, backend_split); - layer.ffn_down_b = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, backend_split); + layer.ffn_down_b = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, backend); - layer.ffn_up = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, backend_split); - layer.ffn_up_b = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, backend_split); + layer.ffn_up = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, n_ff}, backend_split); + layer.ffn_up_b = ml.create_tensor(ctx, tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ff}, backend); if (backend == GGML_BACKEND_GPU) { vram_weights += From 2756c4fbffab097736d5116007872d86456a544a Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 2 Nov 2023 11:20:21 +0200 Subject: [PATCH 56/79] gguf : remove special-case code for GGUFv1 (#3901) ggml-ci --- ggml.c | 58 +++-------------------------------- models/ggml-vocab-llama.gguf | Bin 595423 -> 723676 bytes 2 files changed, 5 insertions(+), 53 deletions(-) diff --git a/ggml.c b/ggml.c index 2c7fe476b176d5..d5a49d8e4f3148 100644 --- a/ggml.c +++ b/ggml.c @@ -18811,8 +18811,7 @@ static bool gguf_fread_el(FILE * file, void * dst, size_t size, size_t * offset) return n == size; } -// NOTE: temporary handling of GGUFv1 >> remove after Oct 2023 -static bool gguf_fread_str_cur(FILE * file, struct gguf_str * p, size_t * offset) { +static bool gguf_fread_str(FILE * file, struct gguf_str * p, size_t * offset) { p->n = 0; p->data = NULL; @@ -18824,19 +18823,6 @@ static bool gguf_fread_str_cur(FILE * file, struct gguf_str * p, size_t * offset return ok; } -static bool gguf_fread_str_v1(FILE * file, struct gguf_str * p, size_t * offset) { - p->n = 0; - p->data = NULL; - - bool ok = true; - - uint32_t n = 0; - ok = ok && gguf_fread_el(file, &n, sizeof(n), offset); p->data = calloc(n + 1, 1); p->n = n; - ok = ok && gguf_fread_el(file, p->data, p->n, offset); - - return ok; -} - struct gguf_context * gguf_init_empty(void) { struct gguf_context * ctx = GGML_ALIGNED_MALLOC(sizeof(struct gguf_context)); @@ -18895,21 +18881,8 @@ struct gguf_context * gguf_init_from_file(const char * fname, struct gguf_init_p ctx->data = NULL; ok = ok && gguf_fread_el(file, &ctx->header.version, sizeof(ctx->header.version), &offset); - - if (ctx->header.version == 1) { - // NOTE: temporary handling of GGUFv1 >> remove after Oct 2023 - uint32_t n_tensors = 0; - uint32_t n_kv = 0; - - ok = ok && gguf_fread_el(file, &n_tensors, sizeof(n_tensors), &offset); - ok = ok && gguf_fread_el(file, &n_kv, sizeof(n_kv), &offset); - - ctx->header.n_tensors = n_tensors; - ctx->header.n_kv = n_kv; - } else { - ok = ok && gguf_fread_el(file, &ctx->header.n_tensors, sizeof(ctx->header.n_tensors), &offset); - ok = ok && gguf_fread_el(file, &ctx->header.n_kv, sizeof(ctx->header.n_kv), &offset); - } + ok = ok && gguf_fread_el(file, &ctx->header.n_tensors, sizeof(ctx->header.n_tensors), &offset); + ok = ok && gguf_fread_el(file, &ctx->header.n_kv, sizeof(ctx->header.n_kv), &offset); if (!ok) { fprintf(stderr, "%s: failed to read header\n", __func__); @@ -18919,12 +18892,6 @@ struct gguf_context * gguf_init_from_file(const char * fname, struct gguf_init_p } } - // NOTE: temporary handling of GGUFv1 >> remove after Oct 2023 - bool (* gguf_fread_str)(FILE *, struct gguf_str *, size_t *) = gguf_fread_str_cur; - if (ctx->header.version == 1) { - gguf_fread_str = gguf_fread_str_v1; - } - // read the kv pairs { ctx->kv = malloc(ctx->header.n_kv * sizeof(struct gguf_kv)); @@ -18955,15 +18922,7 @@ struct gguf_context * gguf_init_from_file(const char * fname, struct gguf_init_p case GGUF_TYPE_ARRAY: { ok = ok && gguf_fread_el(file, &kv->value.arr.type, sizeof(kv->value.arr.type), &offset); - - if (ctx->header.version == 1) { - // NOTE: temporary handling of GGUFv1 >> remove after Oct 2023 - uint32_t n = 0; - ok = ok && gguf_fread_el(file, &n, sizeof(n), &offset); - kv->value.arr.n = n; - } else { - ok = ok && gguf_fread_el(file, &kv->value.arr.n, sizeof(kv->value.arr.n), &offset); - } + ok = ok && gguf_fread_el(file, &kv->value.arr.n, sizeof(kv->value.arr.n), &offset); switch (kv->value.arr.type) { case GGUF_TYPE_UINT8: @@ -19022,14 +18981,7 @@ struct gguf_context * gguf_init_from_file(const char * fname, struct gguf_init_p ok = ok && gguf_fread_str(file, &info->name, &offset); ok = ok && gguf_fread_el (file, &info->n_dims, sizeof(info->n_dims), &offset); for (uint32_t j = 0; j < info->n_dims; ++j) { - if (ctx->header.version == 1) { - // NOTE: temporary handling of GGUFv1 >> remove after Oct 2023 - uint32_t t = 0; - ok = ok && gguf_fread_el(file, &t, sizeof(t), &offset); - info->ne[j] = t; - } else { - ok = ok && gguf_fread_el(file, &info->ne[j], sizeof(info->ne[j]), &offset); - } + ok = ok && gguf_fread_el(file, &info->ne[j], sizeof(info->ne[j]), &offset); } ok = ok && gguf_fread_el (file, &info->type, sizeof(info->type), &offset); ok = ok && gguf_fread_el (file, &info->offset, sizeof(info->offset), &offset); diff --git a/models/ggml-vocab-llama.gguf b/models/ggml-vocab-llama.gguf index 63bfaf672f382c0f5bbcffe54736e2698ef3ac55..549eed8c53f438a61f1b00c9bd3b7d02325f2479 100644 GIT binary patch literal 723676 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 z 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 literal 595423 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 zXdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEa zhz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p> zfoLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~2 z8i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34U zqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvz zAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh z2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8 zXdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEa zhz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p> zfoLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~2 z8i)p>foLEahz6p8XdoJh2BLvzAR34UqJd~28i)p>foLEahz6p8XdoJh2BLvzAR34U WqJd~28i)p>foLEahz9;&4g535-DSc6 From 21958bb393a654591ed26f339791b752d58f5c8b Mon Sep 17 00:00:00 2001 From: slaren Date: Thu, 2 Nov 2023 13:10:33 +0100 Subject: [PATCH 57/79] cmake : disable LLAMA_NATIVE by default (#3906) --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 611ed3f4d2a64d..3c49d645c3196f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,7 +44,7 @@ endif() # general option(LLAMA_STATIC "llama: static link libraries" OFF) -option(LLAMA_NATIVE "llama: enable -march=native flag" ON) +option(LLAMA_NATIVE "llama: enable -march=native flag" OFF) option(LLAMA_LTO "llama: enable link time optimization" OFF) # debug From 4ff1046d75e64f0e556d8dcd930ea25c23eb8b18 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 2 Nov 2023 16:22:30 +0200 Subject: [PATCH 58/79] gguf : print error for GGUFv1 files (#3908) --- ggml.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ggml.c b/ggml.c index d5a49d8e4f3148..605a27940fc81f 100644 --- a/ggml.c +++ b/ggml.c @@ -18884,6 +18884,13 @@ struct gguf_context * gguf_init_from_file(const char * fname, struct gguf_init_p ok = ok && gguf_fread_el(file, &ctx->header.n_tensors, sizeof(ctx->header.n_tensors), &offset); ok = ok && gguf_fread_el(file, &ctx->header.n_kv, sizeof(ctx->header.n_kv), &offset); + if (ctx->header.version == 1) { + fprintf(stderr, "%s: GGUFv1 is no longer supported. please use a more up-to-date version\n", __func__); + fclose(file); + gguf_free(ctx); + return NULL; + } + if (!ok) { fprintf(stderr, "%s: failed to read header\n", __func__); fclose(file); From d6069051de7165a4e06662c89257f5d2905bb156 Mon Sep 17 00:00:00 2001 From: Oleksii Maryshchenko Date: Thu, 2 Nov 2023 18:10:39 +0100 Subject: [PATCH 59/79] cuda : use CUDA memory pool with async memory allocation/deallocation when available (#3903) * Using cuda memory pools for async alloc/dealloc. * If cuda device doesnt support memory pool than use old implementation. * Removed redundant cublasSetStream --------- Co-authored-by: Oleksii Maryshchenko --- ggml-cuda.cu | 128 +++++++++++++++++++++++++++++++-------------------- 1 file changed, 77 insertions(+), 51 deletions(-) diff --git a/ggml-cuda.cu b/ggml-cuda.cu index e4629512611b6c..58b58f33154286 100644 --- a/ggml-cuda.cu +++ b/ggml-cuda.cu @@ -181,11 +181,11 @@ static_assert(sizeof(half) == sizeof(ggml_fp16_t), "wrong fp16 size"); do { \ cudaError_t err_ = (err); \ if (err_ != cudaSuccess) { \ - int id; \ - cudaGetDevice(&id); \ + int dev_id; \ + cudaGetDevice(&dev_id); \ fprintf(stderr, "\nCUDA error %d at %s:%d: %s\n", err_, __FILE__, __LINE__, \ cudaGetErrorString(err_)); \ - fprintf(stderr, "current device: %d\n", id); \ + fprintf(stderr, "current device: %d\n", dev_id); \ exit(1); \ } \ } while (0) @@ -195,11 +195,11 @@ static_assert(sizeof(half) == sizeof(ggml_fp16_t), "wrong fp16 size"); do { \ cublasStatus_t err_ = (err); \ if (err_ != CUBLAS_STATUS_SUCCESS) { \ - int id; \ - cudaGetDevice(&id); \ + int dev_id; \ + cudaGetDevice(&dev_id); \ fprintf(stderr, "\ncuBLAS error %d at %s:%d: %s\n", \ err_, __FILE__, __LINE__, cublasGetStatusString(err_)); \ - fprintf(stderr, "current device: %d\n", id); \ + fprintf(stderr, "current device: %d\n", dev_id); \ exit(1); \ } \ } while (0) @@ -465,6 +465,7 @@ static_assert(K_QUANTS_PER_ITERATION == 1 || K_QUANTS_PER_ITERATION == 2, "K_QUA #define MAX_STREAMS 8 static cudaStream_t g_cudaStreams[GGML_CUDA_MAX_DEVICES][MAX_STREAMS] = { nullptr }; +static cudaMemPool_t g_cudaMemPools[GGML_CUDA_MAX_DEVICES] = { nullptr }; struct ggml_tensor_extra_gpu { void * data_device[GGML_CUDA_MAX_DEVICES]; // 1 pointer for each device for split tensors @@ -5772,6 +5773,16 @@ static void * ggml_cuda_pool_malloc(size_t size, size_t * actual_size) { return ptr; } +static void * ggml_cuda_pool_malloc_async(size_t size, size_t * actual_size, int id, cudaStream_t stream) { + if (g_cudaMemPools[id] == nullptr) { + return ggml_cuda_pool_malloc(size, actual_size); + } + void *ptr; + CUDA_CHECK(cudaMallocFromPoolAsync(&ptr, size, g_cudaMemPools[id], stream)); + *actual_size = size; + return ptr; +} + static void ggml_cuda_pool_free(void * ptr, size_t size) { scoped_spin_lock lock(g_cuda_pool_lock); int id; @@ -5790,6 +5801,13 @@ static void ggml_cuda_pool_free(void * ptr, size_t size) { } +static void ggml_cuda_pool_free_async(void * ptr, size_t actual_size, int id, cudaStream_t stream) { + if (g_cudaMemPools[id] == nullptr) { + return ggml_cuda_pool_free(ptr, actual_size); + } + CUDA_CHECK(cudaFreeAsync(ptr, stream)); +} + void ggml_init_cublas() { static bool initialized = false; @@ -5844,6 +5862,13 @@ void ggml_init_cublas() { // create cublas handle CUBLAS_CHECK(cublasCreate(&g_cublas_handles[id])); CUBLAS_CHECK(cublasSetMathMode(g_cublas_handles[id], CUBLAS_TF32_TENSOR_OP_MATH)); + + // configure memory pool + cudaError_t err = cudaDeviceGetMemPool(&g_cudaMemPools[id], id); + if (err == cudaSuccess) { + size_t treshold = UINT64_MAX; + CUDA_CHECK(cudaMemPoolSetAttribute(g_cudaMemPools[id], cudaMemPoolAttrReleaseThreshold, &treshold)); + } } // configure logging to stdout @@ -6437,7 +6462,7 @@ inline void ggml_cuda_op_mul_mat_cublas( const to_fp16_cuda_t to_fp16_cuda = ggml_get_to_fp16_cuda(src0->type); GGML_ASSERT(to_fp16_cuda != nullptr); size_t ne = row_diff*ne00; - src0_as_f16 = (half *) ggml_cuda_pool_malloc(ne * sizeof(half), &src0_as); + src0_as_f16 = (half *) ggml_cuda_pool_malloc_async(ne * sizeof(half), &src0_as, id, stream); to_fp16_cuda(src0_dd_i, src0_as_f16, ne, stream); } const half * src0_ptr = src0->type == GGML_TYPE_F16 ? (const half *) src0_dd_i : src0_as_f16; @@ -6448,13 +6473,12 @@ inline void ggml_cuda_op_mul_mat_cublas( const to_fp16_cuda_t to_fp16_cuda = ggml_get_to_fp16_cuda(src1->type); GGML_ASSERT(to_fp16_cuda != nullptr); size_t ne = src1_ncols*ne10; - src1_as_f16 = (half *) ggml_cuda_pool_malloc(ne * sizeof(half), &src1_as); + src1_as_f16 = (half *) ggml_cuda_pool_malloc_async(ne * sizeof(half), &src1_as, id, stream); to_fp16_cuda(src1_ddf_i, src1_as_f16, ne, stream); } const half * src1_ptr = src1->type == GGML_TYPE_F16 ? (const half *) src1_ddq_i : src1_as_f16; - - size_t dst_as = 0; - half * dst_f16 = (half *) ggml_cuda_pool_malloc(row_diff*src1_ncols * sizeof(half), &dst_as); + size_t dst_f16_as = 0; + half * dst_f16 = (half *) ggml_cuda_pool_malloc_async(row_diff*src1_ncols * sizeof(half), &dst_f16_as, id, stream); const half alpha_f16 = 1.0f; const half beta_f16 = 0.0f; @@ -6472,14 +6496,15 @@ inline void ggml_cuda_op_mul_mat_cublas( const to_fp32_cuda_t to_fp32_cuda = ggml_get_to_fp32_cuda(GGML_TYPE_F16); to_fp32_cuda(dst_f16, dst_dd_i, row_diff*src1_ncols, stream); - ggml_cuda_pool_free(dst_f16, dst_as); + if (dst_f16_as != 0) { + ggml_cuda_pool_free_async(dst_f16, dst_f16_as, id, stream); + } if (src0_as != 0) { - ggml_cuda_pool_free(src0_as_f16, src0_as); + ggml_cuda_pool_free_async(src0_as_f16, src0_as, id, stream); } - if (src1_as != 0) { - ggml_cuda_pool_free(src1_as_f16, src1_as); + ggml_cuda_pool_free_async(src1_as_f16, src1_as, id, stream); } } else { @@ -6489,7 +6514,7 @@ inline void ggml_cuda_op_mul_mat_cublas( if (src0->type != GGML_TYPE_F32) { const to_fp32_cuda_t to_fp32_cuda = ggml_get_to_fp32_cuda(src0->type); GGML_ASSERT(to_fp32_cuda != nullptr); - src0_ddq_as_f32 = (float *) ggml_cuda_pool_malloc(row_diff*ne00 * sizeof(float), &src0_as); // NOLINT + src0_ddq_as_f32 = (float *) ggml_cuda_pool_malloc_async(row_diff*ne00 * sizeof(float), &src0_as, id, stream); // NOLINT to_fp32_cuda(src0_dd_i, src0_ddq_as_f32, row_diff*ne00, stream); } const float * src0_ddf_i = src0->type == GGML_TYPE_F32 ? (const float *) src0_dd_i : src0_ddq_as_f32; @@ -6506,7 +6531,7 @@ inline void ggml_cuda_op_mul_mat_cublas( &beta, dst_dd_i, ldc)); if (src0_as != 0) { - ggml_cuda_pool_free(src0_ddq_as_f32, src0_as); + ggml_cuda_pool_free_async(src0_ddq_as_f32, src0_as, id, stream); } } @@ -6929,21 +6954,22 @@ static void ggml_cuda_op_mul_mat( src0_dd[id] = (char *) src0_extra->data_device[id]; } else { const size_t size_src0_ddq = split ? (row_high[id]-row_low[id])*ne00 * src0_ts/src0_bs : ggml_nbytes(src0); - src0_dd[id] = (char *) ggml_cuda_pool_malloc(ggml_nbytes(src0), &src0_as[id]); + src0_dd[id] = (char *) ggml_cuda_pool_malloc_async(ggml_nbytes(src0), &src0_as[id], id, stream); } if (src1_on_device && src1_is_contiguous) { src1_ddf[id] = (float *) src1_extra->data_device[id]; } else { - src1_ddf[id] = (float *) ggml_cuda_pool_malloc(ggml_nbytes(src1), &src1_asf[id]); + src1_ddf[id] = (float *) ggml_cuda_pool_malloc_async(ggml_nbytes(src1), &src1_asf[id], id, stream); } if (convert_src1_to_q8_1) { - src1_ddq[id] = (char *) ggml_cuda_pool_malloc(nrows1*src1_padded_col_size*q8_1_ts/q8_1_bs, &src1_asq[id]); + const size_t size_dst_ddq = nrows1*src1_padded_col_size*q8_1_ts/q8_1_bs; + src1_ddq[id] = (char *) ggml_cuda_pool_malloc_async(size_dst_ddq, &src1_asq[id], id, stream); if (src1_on_device && src1_is_contiguous) { quantize_row_q8_1_cuda(src1_ddf[id], src1_ddq[id], ne10, nrows1, src1_padded_col_size, stream); - CUDA_CHECK(cudaGetLastError()); + // CUDA_CHECK(cudaGetLastError()); } } @@ -6951,7 +6977,7 @@ static void ggml_cuda_op_mul_mat( dst_dd[id] = (float *) dst_extra->data_device[id]; } else { const size_t size_dst_ddf = split ? (row_high[id]-row_low[id])*ne1*sizeof(float) : ggml_nbytes(dst); - dst_dd[id] = (float *) ggml_cuda_pool_malloc(size_dst_ddf, &dst_as[id]); + dst_dd[id] = (float *) ggml_cuda_pool_malloc_async(size_dst_ddf, &dst_as[id], id, stream); } } @@ -7077,24 +7103,6 @@ static void ggml_cuda_op_mul_mat( } } - for (int64_t id = 0; id < g_device_count; ++id) { - CUDA_CHECK(ggml_cuda_set_device(id)); - - // free buffers again when done - if (src0_as[id] > 0) { - ggml_cuda_pool_free(src0_dd[id], src0_as[id]); - } - if (src1_asf[id] > 0) { - ggml_cuda_pool_free(src1_ddf[id], src1_asf[id]); - } - if (src1_asq[id] > 0) { - ggml_cuda_pool_free(src1_ddq[id], src1_asq[id]); - } - if (dst_as[id] > 0) { - ggml_cuda_pool_free(dst_dd[id], dst_as[id]); - } - } - // main device waits for all other devices to be finished if (split && g_device_count > 1) { int64_t is_max = (ne11 + MUL_MAT_SRC1_COL_STRIDE - 1) / MUL_MAT_SRC1_COL_STRIDE; @@ -7112,6 +7120,21 @@ static void ggml_cuda_op_mul_mat( CUDA_CHECK(ggml_cuda_set_device(g_main_device)); CUDA_CHECK(cudaDeviceSynchronize()); } + + for (int64_t id = 0; id < g_device_count; ++id) { + if (src0_as[id] > 0) { + ggml_cuda_pool_free_async(src0_dd[id], src0_as[id], id, g_cudaStreams[id][0]); + } + if (src1_asf[id] > 0) { + ggml_cuda_pool_free_async(src1_ddf[id], src1_asf[id], id, g_cudaStreams[id][0]); + } + if (src1_asq[id] > 0) { + ggml_cuda_pool_free_async(src1_ddq[id], src1_asq[id], id, g_cudaStreams[id][0]); + } + if (dst_as[id] > 0) { + ggml_cuda_pool_free_async(dst_dd[id], dst_as[id], id, g_cudaStreams[id][0]); + } + } } static void ggml_cuda_repeat(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { @@ -7298,11 +7321,11 @@ static void ggml_cuda_mul_mat_mat_batched_cublas(const ggml_tensor * src0, const GGML_ASSERT(to_fp16_cuda != nullptr); size_t src1_as = 0; - half * src1_as_f16 = (half *) ggml_cuda_pool_malloc(ne1 * sizeof(half), &src1_as); + half * src1_as_f16 = (half *) ggml_cuda_pool_malloc_async(ne1 * sizeof(half), &src1_as, id, main_stream); to_fp16_cuda(src1_ddf, src1_as_f16, ne1, main_stream); size_t dst_as = 0; - half * dst_f16 = (half *) ggml_cuda_pool_malloc(ne * sizeof(half), &dst_as); + half * dst_f16 = (half *) ggml_cuda_pool_malloc_async(ne * sizeof(half), &dst_as, id, main_stream); GGML_ASSERT(ne12 % ne02 == 0); GGML_ASSERT(ne13 % ne03 == 0); @@ -7349,10 +7372,9 @@ static void ggml_cuda_mul_mat_mat_batched_cublas(const ggml_tensor * src0, const } else { // use cublasGemmBatchedEx const int ne23 = ne12*ne13; - - void ** ptrs_as = nullptr; + // allocate device memory for pointers size_t ptrs_s = 0; - ptrs_as = (void **) ggml_cuda_pool_malloc(3*ne23*sizeof(void *), &ptrs_s); + void ** ptrs_as = (void **)ggml_cuda_pool_malloc_async(3*ne23*sizeof(void *), &ptrs_s, id, main_stream); dim3 block_dims(ne13, ne12); k_compute_batched_ptrs<<<1, block_dims, 0, main_stream>>>( @@ -7365,7 +7387,6 @@ static void ggml_cuda_mul_mat_mat_batched_cublas(const ggml_tensor * src0, const dst->nb[2], dst->nb[3], r2, r3); CUDA_CHECK(cudaGetLastError()); - CUBLAS_CHECK( cublasGemmBatchedEx(g_cublas_handles[id], CUBLAS_OP_T, CUBLAS_OP_N, ne01, ne11, ne10, @@ -7375,16 +7396,21 @@ static void ggml_cuda_mul_mat_mat_batched_cublas(const ggml_tensor * src0, const ne23, CUBLAS_COMPUTE_16F, CUBLAS_GEMM_DEFAULT_TENSOR_OP)); - - ggml_cuda_pool_free(ptrs_as, ptrs_s); + // free device memory for pointers + if (ptrs_s != 0) { + ggml_cuda_pool_free_async(ptrs_as, ptrs_s, id, main_stream); + } } #endif const to_fp32_cuda_t to_fp32_cuda = ggml_get_to_fp32_cuda(GGML_TYPE_F16); to_fp32_cuda(dst_f16, dst_ddf, ne, main_stream); - - ggml_cuda_pool_free(src1_as_f16, src1_as); - ggml_cuda_pool_free(dst_f16, dst_as); + if (src1_as != 0) { + ggml_cuda_pool_free_async(src1_as_f16, src1_as, id, main_stream); + } + if (dst_as != 0) { + ggml_cuda_pool_free_async(dst_f16, dst_as, id, main_stream); + } } static void ggml_cuda_mul_mat(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { From c7743fe1c1cbda5a886362aa371480360580fdf0 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 2 Nov 2023 20:32:11 +0200 Subject: [PATCH 60/79] cuda : fix const ptrs warning causing ROCm build issues (#3913) --- ggml-cuda.cu | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/ggml-cuda.cu b/ggml-cuda.cu index 58b58f33154286..06c28f5651b72f 100644 --- a/ggml-cuda.cu +++ b/ggml-cuda.cu @@ -7248,7 +7248,7 @@ static void ggml_cuda_mul_mat_vec_nc(const ggml_tensor * src0, const ggml_tensor __global__ void k_compute_batched_ptrs( const half * src0_as_f16, const half * src1_as_f16, half * dst_f16, - void ** ptrs, + const void ** ptrs_src, void ** ptrs_dst, int ne12, int ne13, int ne23, int nb02, int nb03, @@ -7265,9 +7265,9 @@ __global__ void k_compute_batched_ptrs( int i03 = i13 / r3; int i02 = i12 / r2; - ptrs[0*ne23 + i12 + i13*ne12] = (char *) src0_as_f16 + i02*nb02 + i03*nb03; - ptrs[1*ne23 + i12 + i13*ne12] = (char *) src1_as_f16 + i12*nb12/2 + i13*nb13/2; - ptrs[2*ne23 + i12 + i13*ne12] = (char *) dst_f16 + i12* nb2/2 + i13* nb3/2; + ptrs_src[0*ne23 + i12 + i13*ne12] = (const char *) src0_as_f16 + i02*nb02 + i03*nb03; + ptrs_src[1*ne23 + i12 + i13*ne12] = (const char *) src1_as_f16 + i12*nb12/2 + i13*nb13/2; + ptrs_dst[0*ne23 + i12 + i13*ne12] = ( char *) dst_f16 + i12* nb2/2 + i13* nb3/2; } static void ggml_cuda_mul_mat_mat_batched_cublas(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { @@ -7372,14 +7372,20 @@ static void ggml_cuda_mul_mat_mat_batched_cublas(const ggml_tensor * src0, const } else { // use cublasGemmBatchedEx const int ne23 = ne12*ne13; - // allocate device memory for pointers - size_t ptrs_s = 0; - void ** ptrs_as = (void **)ggml_cuda_pool_malloc_async(3*ne23*sizeof(void *), &ptrs_s, id, main_stream); + + const void ** ptrs_src = nullptr; + void ** ptrs_dst = nullptr; + + size_t ptrs_src_s = 0; + size_t ptrs_dst_s = 0; + + ptrs_src = (const void **) ggml_cuda_pool_malloc_async(2*ne23*sizeof(void *), &ptrs_src_s, id, main_stream); + ptrs_dst = ( void **) ggml_cuda_pool_malloc_async(1*ne23*sizeof(void *), &ptrs_dst_s, id, main_stream); dim3 block_dims(ne13, ne12); k_compute_batched_ptrs<<<1, block_dims, 0, main_stream>>>( src0_as_f16, src1_as_f16, dst_f16, - ptrs_as, + ptrs_src, ptrs_dst, ne12, ne13, ne23, nb02, nb03, @@ -7390,15 +7396,18 @@ static void ggml_cuda_mul_mat_mat_batched_cublas(const ggml_tensor * src0, const CUBLAS_CHECK( cublasGemmBatchedEx(g_cublas_handles[id], CUBLAS_OP_T, CUBLAS_OP_N, ne01, ne11, ne10, - &alpha_f16, (const void * const *) (ptrs_as + 0*ne23), CUDA_R_16F, nb01/sizeof(half), - (const void * const *) (ptrs_as + 1*ne23), CUDA_R_16F, nb11/sizeof(float), - &beta_f16, ( void ** ) (ptrs_as + 2*ne23), CUDA_R_16F, ne01, + &alpha_f16, (const void **) (ptrs_src + 0*ne23), CUDA_R_16F, nb01/sizeof(half), + (const void **) (ptrs_src + 1*ne23), CUDA_R_16F, nb11/sizeof(float), + &beta_f16, ( void **) (ptrs_dst + 0*ne23), CUDA_R_16F, ne01, ne23, CUBLAS_COMPUTE_16F, CUBLAS_GEMM_DEFAULT_TENSOR_OP)); - // free device memory for pointers - if (ptrs_s != 0) { - ggml_cuda_pool_free_async(ptrs_as, ptrs_s, id, main_stream); + + if (ptrs_src_s != 0) { + ggml_cuda_pool_free_async(ptrs_src, ptrs_src_s, id, main_stream); + } + if (ptrs_dst_s != 0) { + ggml_cuda_pool_free_async(ptrs_dst, ptrs_dst_s, id, main_stream); } } #endif From 224e7d5b14cbabab7ae45c64db2cfde979c8455d Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 2 Nov 2023 20:44:12 +0200 Subject: [PATCH 61/79] readme : add notice about #3912 --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index b56ecaec74b434..9c9e36ad07accf 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,6 @@ ![llama](https://user-images.githubusercontent.com/1991296/230134379-7181e485-c521-4d23-a0d6-f7b3b61ba524.png) -[![Actions Status](https://github.com/ggerganov/llama.cpp/workflows/CI/badge.svg)](https://github.com/ggerganov/llama.cpp/actions) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT) [Roadmap](https://github.com/users/ggerganov/projects/7) / [Project status](https://github.com/ggerganov/llama.cpp/discussions/3471) / [Manifesto](https://github.com/ggerganov/llama.cpp/discussions/205) / [ggml](https://github.com/ggerganov/ggml) @@ -11,8 +10,7 @@ Inference of [LLaMA](https://arxiv.org/abs/2302.13971) model in pure C/C++ ### Hot topics -- LLaVA support: https://github.com/ggerganov/llama.cpp/pull/3436 -- ‼️ BPE tokenizer update: existing Falcon and Starcoder `.gguf` models will need to be reconverted: [#3252](https://github.com/ggerganov/llama.cpp/pull/3252) +- ⚠️ **Upcoming change that might break functionality. Help with testing is needed:** https://github.com/ggerganov/llama.cpp/pull/3912 ---- From 51b2fc11f7f605fff49725a4540e9a6ef7b51b70 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 2 Nov 2023 15:40:31 -0400 Subject: [PATCH 62/79] cmake : fix relative path to git submodule index (#3915) --- common/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 0150114e3bd2ce..ac594b2ca84ea8 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -11,7 +11,7 @@ if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../.git") if(NOT IS_DIRECTORY "${GIT_DIR}") file(READ ${GIT_DIR} REAL_GIT_DIR_LINK) string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" REAL_GIT_DIR ${REAL_GIT_DIR_LINK}) - set(GIT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${REAL_GIT_DIR}") + set(GIT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../${REAL_GIT_DIR}") endif() set(GIT_INDEX "${GIT_DIR}/index") From 629f917cd6b96ba1274c49a8aab163b1b189229d Mon Sep 17 00:00:00 2001 From: Kerfuffle <44031344+KerfuffleV2@users.noreply.github.com> Date: Thu, 2 Nov 2023 13:58:22 -0600 Subject: [PATCH 63/79] cuda : add ROCM aliases for CUDA pool stuff (#3918) --- ggml-cuda.cu | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ggml-cuda.cu b/ggml-cuda.cu index 06c28f5651b72f..baf02df2b22948 100644 --- a/ggml-cuda.cu +++ b/ggml-cuda.cu @@ -39,6 +39,10 @@ #define cudaDeviceCanAccessPeer hipDeviceCanAccessPeer #define cudaDeviceDisablePeerAccess hipDeviceDisablePeerAccess #define cudaDeviceEnablePeerAccess hipDeviceEnablePeerAccess +#define cudaDeviceGetMemPool hipDeviceGetMemPool +#define cudaMemPoolAttrReleaseThreshold hipMemPoolAttrReleaseThreshold +#define cudaMemPoolSetAttribute hipMemPoolSetAttribute +#define cudaMemPool_t hipMemPool_t #define cudaDeviceProp hipDeviceProp_t #define cudaDeviceSynchronize hipDeviceSynchronize #define cudaError_t hipError_t @@ -48,6 +52,7 @@ #define cudaEvent_t hipEvent_t #define cudaEventDestroy hipEventDestroy #define cudaFree hipFree +#define cudaFreeAsync hipFreeAsync #define cudaFreeHost hipHostFree #define cudaGetDevice hipGetDevice #define cudaGetDeviceCount hipGetDeviceCount @@ -55,6 +60,7 @@ #define cudaGetErrorString hipGetErrorString #define cudaGetLastError hipGetLastError #define cudaMalloc hipMalloc +#define cudaMallocFromPoolAsync hipMallocFromPoolAsync #define cudaMallocHost(ptr, size) hipHostMalloc(ptr, size, hipHostMallocDefault) #define cudaMemcpy hipMemcpy #define cudaMemcpy2DAsync hipMemcpy2DAsync From 3fdbe6b66b7b5c6ad3b2f245cbad1517c27ff776 Mon Sep 17 00:00:00 2001 From: cebtenzzre Date: Fri, 3 Nov 2023 02:31:58 -0400 Subject: [PATCH 64/79] llama : change yarn_ext_factor placeholder to -1 (#3922) --- llama.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/llama.cpp b/llama.cpp index bb60044b4707f7..cc0211ceb02113 100644 --- a/llama.cpp +++ b/llama.cpp @@ -7982,7 +7982,7 @@ struct llama_context_params llama_context_default_params() { /*.rope_scaling_type =*/ LLAMA_ROPE_SCALING_UNSPECIFIED, /*.rope_freq_base =*/ 0.0f, /*.rope_freq_scale =*/ 0.0f, - /*.yarn_ext_factor =*/ NAN, + /*.yarn_ext_factor =*/ -1.0f, /*.yarn_attn_factor =*/ 1.0f, /*.yarn_beta_fast =*/ 32.0f, /*.yarn_beta_slow =*/ 1.0f, @@ -8125,7 +8125,7 @@ struct llama_context * llama_new_context_with_model( cparams.rope_freq_scale = 1.0f; // never scale if scaling type is none } - if (std::isnan(cparams.yarn_ext_factor)) { // NaN indicates 'not set' + if (cparams.yarn_ext_factor < 0.0f) { // negative indicates 'not set' cparams.yarn_ext_factor = rope_scaling_type == LLAMA_ROPE_SCALING_YARN ? 1.0f : 0.0f; } From 05816027d649f977468fc804cdb54e99eac246d1 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Fri, 3 Nov 2023 09:24:00 +0200 Subject: [PATCH 65/79] common : YAYF (yet another YARN fix) (#3925) ggml-ci --- common/common.h | 44 ++++++++++++++++++++++---------------------- llama.h | 10 +++++----- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/common/common.h b/common/common.h index 72a49b8901f26e..9ad62563302872 100644 --- a/common/common.h +++ b/common/common.h @@ -43,29 +43,29 @@ extern char const *LLAMA_BUILD_TARGET; int32_t get_num_physical_cores(); struct gpt_params { - uint32_t seed = -1; // RNG seed + uint32_t seed = -1; // RNG seed int32_t n_threads = get_num_physical_cores(); - int32_t n_threads_batch = -1; // number of threads to use for batch processing (-1 = use n_threads) - int32_t n_predict = -1; // new tokens to predict - int32_t n_ctx = 512; // context size - int32_t n_batch = 512; // batch size for prompt processing (must be >=32 to use BLAS) - int32_t n_keep = 0; // number of tokens to keep from initial prompt - int32_t n_draft = 16; // number of tokens to draft during speculative decoding - int32_t n_chunks = -1; // max number of chunks to process (-1 = unlimited) - int32_t n_parallel = 1; // number of parallel sequences to decode - int32_t n_sequences = 1; // number of sequences to decode - int32_t n_gpu_layers = -1; // number of layers to store in VRAM (-1 - use default) - int32_t n_gpu_layers_draft = -1; // number of layers to store in VRAM for the draft model (-1 - use default) - int32_t main_gpu = 0; // the GPU that is used for scratch and small tensors - float tensor_split[LLAMA_MAX_DEVICES] = {0}; // how split tensors should be distributed across GPUs - int32_t n_beams = 0; // if non-zero then use beam search of given width. - float rope_freq_base = 0.0f; // RoPE base frequency - float rope_freq_scale = 0.0f; // RoPE frequency scaling factor - float yarn_ext_factor = NAN; // YaRN extrapolation mix factor - float yarn_attn_factor = 1.0f; // YaRN magnitude scaling factor - float yarn_beta_fast = 32.0f;// YaRN low correction dim - float yarn_beta_slow = 1.0f; // YaRN high correction dim - int32_t yarn_orig_ctx = 0; // YaRN original context length + int32_t n_threads_batch = -1; // number of threads to use for batch processing (-1 = use n_threads) + int32_t n_predict = -1; // new tokens to predict + int32_t n_ctx = 512; // context size + int32_t n_batch = 512; // batch size for prompt processing (must be >=32 to use BLAS) + int32_t n_keep = 0; // number of tokens to keep from initial prompt + int32_t n_draft = 16; // number of tokens to draft during speculative decoding + int32_t n_chunks = -1; // max number of chunks to process (-1 = unlimited) + int32_t n_parallel = 1; // number of parallel sequences to decode + int32_t n_sequences = 1; // number of sequences to decode + int32_t n_gpu_layers = -1; // number of layers to store in VRAM (-1 - use default) + int32_t n_gpu_layers_draft = -1; // number of layers to store in VRAM for the draft model (-1 - use default) + int32_t main_gpu = 0; // the GPU that is used for scratch and small tensors + float tensor_split[LLAMA_MAX_DEVICES] = {0}; // how split tensors should be distributed across GPUs + int32_t n_beams = 0; // if non-zero then use beam search of given width. + float rope_freq_base = 0.0f; // RoPE base frequency + float rope_freq_scale = 0.0f; // RoPE frequency scaling factor + float yarn_ext_factor = -1.0f; // YaRN extrapolation mix factor + float yarn_attn_factor = 1.0f; // YaRN magnitude scaling factor + float yarn_beta_fast = 32.0f; // YaRN low correction dim + float yarn_beta_slow = 1.0f; // YaRN high correction dim + int32_t yarn_orig_ctx = 0; // YaRN original context length int8_t rope_scaling_type = LLAMA_ROPE_SCALING_UNSPECIFIED; // // sampling parameters diff --git a/llama.h b/llama.h index 3f1becd7616885..e8dc04bb54b81c 100644 --- a/llama.h +++ b/llama.h @@ -175,11 +175,11 @@ extern "C" { }; struct llama_context_params { - uint32_t seed; // RNG seed, -1 for random - uint32_t n_ctx; // text context, 0 = from model - uint32_t n_batch; // prompt processing maximum batch size - uint32_t n_threads; // number of threads to use for generation - uint32_t n_threads_batch; // number of threads to use for batch processing + uint32_t seed; // RNG seed, -1 for random + uint32_t n_ctx; // text context, 0 = from model + uint32_t n_batch; // prompt processing maximum batch size + uint32_t n_threads; // number of threads to use for generation + uint32_t n_threads_batch; // number of threads to use for batch processing int8_t rope_scaling_type; // RoPE scaling type, from `enum llama_rope_scaling_type` // ref: https://github.com/ggerganov/llama.cpp/pull/2054 From 8f961abdc4e134c83bf8c2ad618ab256b4cae0f9 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Fri, 3 Nov 2023 09:41:17 +0200 Subject: [PATCH 66/79] speculative : change default p_accept to 0.5 + CLI args (#3919) ggml-ci --- common/common.cpp | 14 ++++++++++++++ common/common.h | 8 ++++++-- examples/speculative/speculative.cpp | 8 +++++--- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/common/common.cpp b/common/common.cpp index e938dee165d9da..20cc4a081b2225 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -403,6 +403,18 @@ bool gpt_params_parse_ex(int argc, char ** argv, gpt_params & params) { break; } params.n_sequences = std::stoi(argv[i]); + } else if (arg == "--p-accept" || arg == "-pa") { + if (++i >= argc) { + invalid_param = true; + break; + } + params.p_accept = std::stof(argv[i]); + } else if (arg == "--p-split" || arg == "-ps") { + if (++i >= argc) { + invalid_param = true; + break; + } + params.p_split = std::stof(argv[i]); } else if (arg == "-m" || arg == "--model") { if (++i >= argc) { invalid_param = true; @@ -778,6 +790,8 @@ void gpt_print_usage(int /*argc*/, char ** argv, const gpt_params & params) { printf(" --chunks N max number of chunks to process (default: %d, -1 = all)\n", params.n_chunks); printf(" -np N, --parallel N number of parallel sequences to decode (default: %d)\n", params.n_parallel); printf(" -ns N, --sequences N number of sequences to decode (default: %d)\n", params.n_sequences); + printf(" -pa N, --p-accept N speculative decoding accept probability (default: %.1f)\n", (double)params.p_accept); + printf(" -ps N, --p-split N speculative decoding split probability (default: %.1f)\n", (double)params.p_split); printf(" -cb, --cont-batching enable continuous batching (a.k.a dynamic batching) (default: disabled)\n"); printf(" --mmproj MMPROJ_FILE path to a multimodal projector file for LLaVA. see examples/llava/README.md\n"); printf(" --image IMAGE_FILE path to an image file. use with multimodal models\n"); diff --git a/common/common.h b/common/common.h index 9ad62563302872..dd6b002eb94ba2 100644 --- a/common/common.h +++ b/common/common.h @@ -44,6 +44,7 @@ int32_t get_num_physical_cores(); struct gpt_params { uint32_t seed = -1; // RNG seed + int32_t n_threads = get_num_physical_cores(); int32_t n_threads_batch = -1; // number of threads to use for batch processing (-1 = use n_threads) int32_t n_predict = -1; // new tokens to predict @@ -54,6 +55,8 @@ struct gpt_params { int32_t n_chunks = -1; // max number of chunks to process (-1 = unlimited) int32_t n_parallel = 1; // number of parallel sequences to decode int32_t n_sequences = 1; // number of sequences to decode + float p_accept = 0.5f; // speculative decoding accept probability + float p_split = 0.1f; // speculative decoding split probability int32_t n_gpu_layers = -1; // number of layers to store in VRAM (-1 - use default) int32_t n_gpu_layers_draft = -1; // number of layers to store in VRAM for the draft model (-1 - use default) int32_t main_gpu = 0; // the GPU that is used for scratch and small tensors @@ -66,7 +69,8 @@ struct gpt_params { float yarn_beta_fast = 32.0f; // YaRN low correction dim float yarn_beta_slow = 1.0f; // YaRN high correction dim int32_t yarn_orig_ctx = 0; // YaRN original context length - int8_t rope_scaling_type = LLAMA_ROPE_SCALING_UNSPECIFIED; + int8_t rope_scaling_type = LLAMA_ROPE_SCALING_UNSPECIFIED; // TODO: better to be int32_t for alignment + // pinging @cebtenzzre // // sampling parameters struct llama_sampling_params sparams; @@ -90,7 +94,7 @@ struct gpt_params { int ppl_output_type = 0; // = 0 -> ppl output is as usual, = 1 -> ppl output is num_tokens, ppl, one per line // (which is more convenient to use for plotting) // - bool hellaswag = false; // compute HellaSwag score over random tasks from datafile supplied in prompt + bool hellaswag = false; // compute HellaSwag score over random tasks from datafile supplied in prompt size_t hellaswag_tasks = 400; // number of tasks to use when computing the HellaSwag score bool mul_mat_q = true; // if true, use mul_mat_q kernels instead of cuBLAS diff --git a/examples/speculative/speculative.cpp b/examples/speculative/speculative.cpp index 798684f66678e2..3a8e278110c20e 100644 --- a/examples/speculative/speculative.cpp +++ b/examples/speculative/speculative.cpp @@ -37,9 +37,11 @@ int main(int argc, char ** argv) { // max number of parallel drafting sequences (i.e. tree branches) const int n_seq_dft = params.n_parallel; - // TODO: make this configurable - const float p_accept = 0.80f; - const float p_split = 0.10f; + // probability threshold for accepting a token from the draft model + const float p_accept = params.p_accept; + + // probability threshold for splitting a draft branch (only for n_seq_dft > 1) + const float p_split = params.p_split; #ifndef LOG_DISABLE_LOGS log_set_target(log_filename_generator("speculative", "log")); From abb77e7319aabc0b5cfb7c22da690a692489b6b7 Mon Sep 17 00:00:00 2001 From: slaren Date: Fri, 3 Nov 2023 12:13:09 +0100 Subject: [PATCH 67/79] ggml-cuda : move row numbers to x grid dim in mmv kernels (#3921) --- ggml-cuda.cu | 53 ++++++++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/ggml-cuda.cu b/ggml-cuda.cu index baf02df2b22948..bdbcca0cabb88e 100644 --- a/ggml-cuda.cu +++ b/ggml-cuda.cu @@ -989,7 +989,7 @@ static __global__ void dequantize_mul_mat_vec_q2_k(const void * __restrict__ vx, static_assert(16%K_QUANTS_PER_ITERATION == 0, "16 must be divisible by K_QUANTS_PER_ITERATION"); - const int row = blockIdx.y*blockDim.y + threadIdx.y; + const int row = blockIdx.x*blockDim.y + threadIdx.y; if (row > nrows) return; const int num_blocks_per_row = ncols / QK_K; @@ -1093,7 +1093,7 @@ static __global__ void dequantize_mul_mat_vec_q2_k(const void * __restrict__ vx, static __global__ void dequantize_mul_mat_vec_q3_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols, int nrows) { - const int row = blockIdx.y*blockDim.y + threadIdx.y; + const int row = blockIdx.x*blockDim.y + threadIdx.y; if (row > nrows) return; const int num_blocks_per_row = ncols / QK_K; @@ -1197,7 +1197,7 @@ static __global__ void dequantize_mul_mat_vec_q3_k(const void * __restrict__ vx, static __global__ void dequantize_mul_mat_vec_q4_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols, int nrows) { - const int row = blockIdx.y*blockDim.y + threadIdx.y; + const int row = blockIdx.x*blockDim.y + threadIdx.y; if (row > nrows) return; const int num_blocks_per_row = ncols / QK_K; const int ib0 = row*num_blocks_per_row; @@ -1451,7 +1451,7 @@ static __global__ void dequantize_mul_mat_vec_q6_k(const void * __restrict__ vx, static_assert(16%K_QUANTS_PER_ITERATION == 0, "16 must be divisible by K_QUANTS_PER_ITERATION"); - const int row = blockIdx.y*blockDim.y + threadIdx.y; + const int row = blockIdx.x*blockDim.y + threadIdx.y; if (row > nrows) return; const int num_blocks_per_row = ncols / QK_K; @@ -4261,7 +4261,7 @@ template static __global__ void template static __global__ void mul_mat_vec_q(const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, const int ncols, const int nrows) { - const int row = blockIdx.y*blockDim.y + threadIdx.y; + const int row = blockIdx.x*blockDim.y + threadIdx.y; if (row >= nrows) { return; @@ -4301,7 +4301,7 @@ template static __global__ void dequantize_mul_mat_vec(const void * __restrict__ vx, const dfloat * __restrict__ y, float * __restrict__ dst, const int ncols, const int nrows) { // qk = quantized weights per x block // qr = number of quantized weights per data value in x block - const int row = blockIdx.y*blockDim.y + threadIdx.y; + const int row = blockIdx.x*blockDim.y + threadIdx.y; if (row >= nrows) { return; @@ -4874,7 +4874,8 @@ static void dequantize_row_q6_K_cuda(const void * vx, dst_t * y, const int k, cu static void dequantize_mul_mat_vec_q4_0_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0); const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; - const dim3 block_nums(1, block_num_y, 1); + // the number of rows may exceed maximum grid size in the y or z dimensions, use the x dimension instead + const dim3 block_nums(block_num_y, 1, 1); const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); dequantize_mul_mat_vec <<>>(vx, y, dst, ncols, nrows); @@ -4883,7 +4884,7 @@ static void dequantize_mul_mat_vec_q4_0_cuda(const void * vx, const dfloat * y, static void dequantize_mul_mat_vec_q4_1_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0); const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; - const dim3 block_nums(1, block_num_y, 1); + const dim3 block_nums(block_num_y, 1, 1); const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); dequantize_mul_mat_vec <<>>(vx, y, dst, ncols, nrows); @@ -4892,7 +4893,7 @@ static void dequantize_mul_mat_vec_q4_1_cuda(const void * vx, const dfloat * y, static void dequantize_mul_mat_vec_q5_0_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0); const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; - const dim3 block_nums(1, block_num_y, 1); + const dim3 block_nums(block_num_y, 1, 1); const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); dequantize_mul_mat_vec <<>>(vx, y, dst, ncols, nrows); @@ -4901,7 +4902,7 @@ static void dequantize_mul_mat_vec_q5_0_cuda(const void * vx, const dfloat * y, static void dequantize_mul_mat_vec_q5_1_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0); const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; - const dim3 block_nums(1, block_num_y, 1); + const dim3 block_nums(block_num_y, 1, 1); const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); dequantize_mul_mat_vec <<>>(vx, y, dst, ncols, nrows); @@ -4910,7 +4911,7 @@ static void dequantize_mul_mat_vec_q5_1_cuda(const void * vx, const dfloat * y, static void dequantize_mul_mat_vec_q8_0_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0); const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; - const dim3 block_nums(1, block_num_y, 1); + const dim3 block_nums(block_num_y, 1, 1); const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); dequantize_mul_mat_vec <<>>(vx, y, dst, ncols, nrows); @@ -4920,7 +4921,7 @@ static void dequantize_mul_mat_vec_q2_K_cuda(const void * vx, const float * y, f GGML_ASSERT(ncols % QK_K == 0); const int ny = 2; // very slightly faster than 1 even when K_QUANTS_PER_ITERATION = 2 const int block_num_y = (nrows + ny - 1) / ny; - const dim3 block_nums(1, block_num_y, 1); + const dim3 block_nums(block_num_y, 1, 1); const dim3 block_dims(32, ny, 1); dequantize_mul_mat_vec_q2_k<<>>(vx, y, dst, ncols, nrows); } @@ -4929,7 +4930,7 @@ static void dequantize_mul_mat_vec_q3_K_cuda(const void * vx, const float * y, f GGML_ASSERT(ncols % QK_K == 0); const int ny = 2 / K_QUANTS_PER_ITERATION; const int block_num_y = (nrows + ny - 1) / ny; - const dim3 block_nums(1, block_num_y, 1); + const dim3 block_nums(block_num_y, 1, 1); const dim3 block_dims(32, ny, 1); dequantize_mul_mat_vec_q3_k<<>>(vx, y, dst, ncols, nrows); } @@ -4938,7 +4939,7 @@ static void dequantize_mul_mat_vec_q4_K_cuda(const void * vx, const float * y, f GGML_ASSERT(ncols % QK_K == 0); const int ny = 2 / K_QUANTS_PER_ITERATION; const int block_num_y = (nrows + ny - 1) / ny; - const dim3 block_nums(1, block_num_y, 1); + const dim3 block_nums(block_num_y, 1, 1); const dim3 block_dims(32, ny, 1); dequantize_mul_mat_vec_q4_k<<>>(vx, y, dst, ncols, nrows); } @@ -4953,7 +4954,7 @@ static void dequantize_mul_mat_vec_q6_K_cuda(const void * vx, const float * y, f GGML_ASSERT(ncols % QK_K == 0); const int ny = 2 / K_QUANTS_PER_ITERATION; const int block_num_y = (nrows + ny - 1) / ny; - const dim3 block_nums(1, block_num_y, 1); + const dim3 block_nums(block_num_y, 1, 1); const dim3 block_dims(32, ny, 1); dequantize_mul_mat_vec_q6_k<<>>(vx, y, dst, ncols, nrows); } @@ -4961,7 +4962,7 @@ static void dequantize_mul_mat_vec_q6_K_cuda(const void * vx, const float * y, f static void mul_mat_vec_q4_0_q8_1_cuda(const void * vx, const void * vy, float * dst, const int ncols, const int nrows, cudaStream_t stream) { GGML_ASSERT(ncols % QK4_0 == 0); const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; - const dim3 block_nums(1, block_num_y, 1); + const dim3 block_nums(block_num_y, 1, 1); const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); mul_mat_vec_q <<>>(vx, vy, dst, ncols, nrows); @@ -4970,7 +4971,7 @@ static void mul_mat_vec_q4_0_q8_1_cuda(const void * vx, const void * vy, float * static void mul_mat_vec_q4_1_q8_1_cuda(const void * vx, const void * vy, float * dst, const int ncols, const int nrows, cudaStream_t stream) { GGML_ASSERT(ncols % QK4_1 == 0); const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; - const dim3 block_nums(1, block_num_y, 1); + const dim3 block_nums(block_num_y, 1, 1); const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); mul_mat_vec_q <<>>(vx, vy, dst, ncols, nrows); @@ -4979,7 +4980,7 @@ static void mul_mat_vec_q4_1_q8_1_cuda(const void * vx, const void * vy, float * static void mul_mat_vec_q5_0_q8_1_cuda(const void * vx, const void * vy, float * dst, const int ncols, const int nrows, cudaStream_t stream) { GGML_ASSERT(ncols % QK5_0 == 0); const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; - const dim3 block_nums(1, block_num_y, 1); + const dim3 block_nums(block_num_y, 1, 1); const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); mul_mat_vec_q <<>>(vx, vy, dst, ncols, nrows); @@ -4988,7 +4989,7 @@ static void mul_mat_vec_q5_0_q8_1_cuda(const void * vx, const void * vy, float * static void mul_mat_vec_q5_1_q8_1_cuda(const void * vx, const void * vy, float * dst, const int ncols, const int nrows, cudaStream_t stream) { GGML_ASSERT(ncols % QK5_1 == 0); const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; - const dim3 block_nums(1, block_num_y, 1); + const dim3 block_nums(block_num_y, 1, 1); const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); mul_mat_vec_q <<>>(vx, vy, dst, ncols, nrows); @@ -4997,7 +4998,7 @@ static void mul_mat_vec_q5_1_q8_1_cuda(const void * vx, const void * vy, float * static void mul_mat_vec_q8_0_q8_1_cuda(const void * vx, const void * vy, float * dst, const int ncols, const int nrows, cudaStream_t stream) { GGML_ASSERT(ncols % QK8_0 == 0); const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; - const dim3 block_nums(1, block_num_y, 1); + const dim3 block_nums(block_num_y, 1, 1); const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); mul_mat_vec_q <<>>(vx, vy, dst, ncols, nrows); @@ -5006,7 +5007,7 @@ static void mul_mat_vec_q8_0_q8_1_cuda(const void * vx, const void * vy, float * static void mul_mat_vec_q2_K_q8_1_cuda(const void * vx, const void * vy, float * dst, const int ncols, const int nrows, cudaStream_t stream) { GGML_ASSERT(ncols % QK_K == 0); const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; - const dim3 block_nums(1, block_num_y, 1); + const dim3 block_nums(block_num_y, 1, 1); const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); mul_mat_vec_q <<>>(vx, vy, dst, ncols, nrows); @@ -5015,7 +5016,7 @@ static void mul_mat_vec_q2_K_q8_1_cuda(const void * vx, const void * vy, float * static void mul_mat_vec_q3_K_q8_1_cuda(const void * vx, const void * vy, float * dst, const int ncols, const int nrows, cudaStream_t stream) { GGML_ASSERT(ncols % QK_K == 0); const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; - const dim3 block_nums(1, block_num_y, 1); + const dim3 block_nums(block_num_y, 1, 1); const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); mul_mat_vec_q <<>>(vx, vy, dst, ncols, nrows); @@ -5024,7 +5025,7 @@ static void mul_mat_vec_q3_K_q8_1_cuda(const void * vx, const void * vy, float * static void mul_mat_vec_q4_K_q8_1_cuda(const void * vx, const void * vy, float * dst, const int ncols, const int nrows, cudaStream_t stream) { GGML_ASSERT(ncols % QK_K == 0); const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; - const dim3 block_nums(1, block_num_y, 1); + const dim3 block_nums(block_num_y, 1, 1); const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); mul_mat_vec_q <<>>(vx, vy, dst, ncols, nrows); @@ -5033,7 +5034,7 @@ static void mul_mat_vec_q4_K_q8_1_cuda(const void * vx, const void * vy, float * static void mul_mat_vec_q5_K_q8_1_cuda(const void * vx, const void * vy, float * dst, const int ncols, const int nrows, cudaStream_t stream) { GGML_ASSERT(ncols % QK_K == 0); const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; - const dim3 block_nums(1, block_num_y, 1); + const dim3 block_nums(block_num_y, 1, 1); const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); mul_mat_vec_q <<>>(vx, vy, dst, ncols, nrows); @@ -5042,7 +5043,7 @@ static void mul_mat_vec_q5_K_q8_1_cuda(const void * vx, const void * vy, float * static void mul_mat_vec_q6_K_q8_1_cuda(const void * vx, const void * vy, float * dst, const int ncols, const int nrows, cudaStream_t stream) { GGML_ASSERT(ncols % QK_K == 0); const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; - const dim3 block_nums(1, block_num_y, 1); + const dim3 block_nums(block_num_y, 1, 1); const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); mul_mat_vec_q <<>>(vx, vy, dst, ncols, nrows); @@ -5061,7 +5062,7 @@ static void convert_fp32_to_fp16_cuda(const void * vx, half * y, const int k, cu static void convert_mul_mat_vec_f16_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0); const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; - const dim3 block_nums(1, block_num_y, 1); + const dim3 block_nums(block_num_y, 1, 1); const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); dequantize_mul_mat_vec<1, 1, convert_f16> <<>>(vx, y, dst, ncols, nrows); From 5ba37461711095c0284233dbd14f0d9010cdbf56 Mon Sep 17 00:00:00 2001 From: Xiao-Yong Jin Date: Fri, 3 Nov 2023 13:00:31 -0500 Subject: [PATCH 68/79] ggml-metal: fix yarn rope (#3937) --- ggml-metal.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ggml-metal.m b/ggml-metal.m index b33a3cb8fd0128..acdb8384316862 100644 --- a/ggml-metal.m +++ b/ggml-metal.m @@ -1403,7 +1403,8 @@ void ggml_metal_graph_compute( const int n_past = ((int32_t *) dst->op_params)[0]; const int n_dims = ((int32_t *) dst->op_params)[1]; const int mode = ((int32_t *) dst->op_params)[2]; - const int n_orig_ctx = ((int32_t *) dst->op_params)[3]; + // skip 3, n_ctx, used in GLM RoPE, unimplemented in metal + const int n_orig_ctx = ((int32_t *) dst->op_params)[4]; float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow; memcpy(&freq_base, (int32_t *) dst->op_params + 5, sizeof(float)); From d9b33fe95bd257b36c84ee5769cc048230067d6f Mon Sep 17 00:00:00 2001 From: Peter Sugihara Date: Fri, 3 Nov 2023 12:18:18 -0700 Subject: [PATCH 69/79] metal : round up to 16 to fix MTLDebugComputeCommandEncoder assertion (#3938) --- ggml-metal.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ggml-metal.m b/ggml-metal.m index acdb8384316862..78ae4485da8e27 100644 --- a/ggml-metal.m +++ b/ggml-metal.m @@ -1017,7 +1017,7 @@ void ggml_metal_graph_compute( [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:2]; [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:3]; [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:4]; - [encoder setThreadgroupMemoryLength:nth/32*sizeof(float) atIndex:0]; + [encoder setThreadgroupMemoryLength:MAX(16, nth/32*sizeof(float)) atIndex:0]; [encoder dispatchThreadgroups:MTLSizeMake(ne01*ne02*ne03, 1, 1) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)]; } break; @@ -1348,7 +1348,7 @@ void ggml_metal_graph_compute( [encoder setBytes:&ne00 length:sizeof( int64_t) atIndex:2]; [encoder setBytes:&nb01 length:sizeof(uint64_t) atIndex:3]; [encoder setBytes:&eps length:sizeof( float) atIndex:4]; - [encoder setThreadgroupMemoryLength:nth*sizeof(float) atIndex:0]; + [encoder setThreadgroupMemoryLength:MAX(16, nth*sizeof(float)) atIndex:0]; const int64_t nrows = ggml_nrows(src0); From f28af0d81aa1010afa5de74cf627dcb04bea3157 Mon Sep 17 00:00:00 2001 From: Kerfuffle <44031344+KerfuffleV2@users.noreply.github.com> Date: Sat, 4 Nov 2023 16:20:34 -0600 Subject: [PATCH 70/79] gguf-py: Support 01.AI Yi models (#3943) --- gguf-py/gguf/gguf.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gguf-py/gguf/gguf.py b/gguf-py/gguf/gguf.py index 727b4e55495a76..a2271d225d0012 100644 --- a/gguf-py/gguf/gguf.py +++ b/gguf-py/gguf/gguf.py @@ -393,6 +393,7 @@ class TensorNameMap: "layers.{bid}.attention_norm", # llama-pth "encoder.layer.{bid}.attention.output.LayerNorm", # bert "language_model.encoder.layers.{bid}.input_layernorm", # persimmon + "model.layers.{bid}.ln1", # yi ), # Attention norm 2 @@ -464,6 +465,7 @@ class TensorNameMap: "layers.{bid}.ffn_norm", # llama-pth "encoder.layer.{bid}.output.LayerNorm", # bert "language_model.encoder.layers.{bid}.post_attention_layernorm", # persimmon + "model.layers.{bid}.ln2", # yi ), # Feed-forward up From 48ade94538fa509465d71023e49d07aab0ec8cd5 Mon Sep 17 00:00:00 2001 From: slaren Date: Sun, 5 Nov 2023 08:12:13 +0100 Subject: [PATCH 71/79] cuda : revert CUDA pool stuff (#3944) * Revert "cuda : add ROCM aliases for CUDA pool stuff (#3918)" This reverts commit 629f917cd6b96ba1274c49a8aab163b1b189229d. * Revert "cuda : use CUDA memory pool with async memory allocation/deallocation when available (#3903)" This reverts commit d6069051de7165a4e06662c89257f5d2905bb156. ggml-ci --- ggml-cuda.cu | 131 ++++++++++++++++++++------------------------------- 1 file changed, 50 insertions(+), 81 deletions(-) diff --git a/ggml-cuda.cu b/ggml-cuda.cu index bdbcca0cabb88e..dc14f2f5d76c66 100644 --- a/ggml-cuda.cu +++ b/ggml-cuda.cu @@ -39,10 +39,6 @@ #define cudaDeviceCanAccessPeer hipDeviceCanAccessPeer #define cudaDeviceDisablePeerAccess hipDeviceDisablePeerAccess #define cudaDeviceEnablePeerAccess hipDeviceEnablePeerAccess -#define cudaDeviceGetMemPool hipDeviceGetMemPool -#define cudaMemPoolAttrReleaseThreshold hipMemPoolAttrReleaseThreshold -#define cudaMemPoolSetAttribute hipMemPoolSetAttribute -#define cudaMemPool_t hipMemPool_t #define cudaDeviceProp hipDeviceProp_t #define cudaDeviceSynchronize hipDeviceSynchronize #define cudaError_t hipError_t @@ -52,7 +48,6 @@ #define cudaEvent_t hipEvent_t #define cudaEventDestroy hipEventDestroy #define cudaFree hipFree -#define cudaFreeAsync hipFreeAsync #define cudaFreeHost hipHostFree #define cudaGetDevice hipGetDevice #define cudaGetDeviceCount hipGetDeviceCount @@ -60,7 +55,6 @@ #define cudaGetErrorString hipGetErrorString #define cudaGetLastError hipGetLastError #define cudaMalloc hipMalloc -#define cudaMallocFromPoolAsync hipMallocFromPoolAsync #define cudaMallocHost(ptr, size) hipHostMalloc(ptr, size, hipHostMallocDefault) #define cudaMemcpy hipMemcpy #define cudaMemcpy2DAsync hipMemcpy2DAsync @@ -187,11 +181,11 @@ static_assert(sizeof(half) == sizeof(ggml_fp16_t), "wrong fp16 size"); do { \ cudaError_t err_ = (err); \ if (err_ != cudaSuccess) { \ - int dev_id; \ - cudaGetDevice(&dev_id); \ + int id; \ + cudaGetDevice(&id); \ fprintf(stderr, "\nCUDA error %d at %s:%d: %s\n", err_, __FILE__, __LINE__, \ cudaGetErrorString(err_)); \ - fprintf(stderr, "current device: %d\n", dev_id); \ + fprintf(stderr, "current device: %d\n", id); \ exit(1); \ } \ } while (0) @@ -201,11 +195,11 @@ static_assert(sizeof(half) == sizeof(ggml_fp16_t), "wrong fp16 size"); do { \ cublasStatus_t err_ = (err); \ if (err_ != CUBLAS_STATUS_SUCCESS) { \ - int dev_id; \ - cudaGetDevice(&dev_id); \ + int id; \ + cudaGetDevice(&id); \ fprintf(stderr, "\ncuBLAS error %d at %s:%d: %s\n", \ err_, __FILE__, __LINE__, cublasGetStatusString(err_)); \ - fprintf(stderr, "current device: %d\n", dev_id); \ + fprintf(stderr, "current device: %d\n", id); \ exit(1); \ } \ } while (0) @@ -471,7 +465,6 @@ static_assert(K_QUANTS_PER_ITERATION == 1 || K_QUANTS_PER_ITERATION == 2, "K_QUA #define MAX_STREAMS 8 static cudaStream_t g_cudaStreams[GGML_CUDA_MAX_DEVICES][MAX_STREAMS] = { nullptr }; -static cudaMemPool_t g_cudaMemPools[GGML_CUDA_MAX_DEVICES] = { nullptr }; struct ggml_tensor_extra_gpu { void * data_device[GGML_CUDA_MAX_DEVICES]; // 1 pointer for each device for split tensors @@ -5780,16 +5773,6 @@ static void * ggml_cuda_pool_malloc(size_t size, size_t * actual_size) { return ptr; } -static void * ggml_cuda_pool_malloc_async(size_t size, size_t * actual_size, int id, cudaStream_t stream) { - if (g_cudaMemPools[id] == nullptr) { - return ggml_cuda_pool_malloc(size, actual_size); - } - void *ptr; - CUDA_CHECK(cudaMallocFromPoolAsync(&ptr, size, g_cudaMemPools[id], stream)); - *actual_size = size; - return ptr; -} - static void ggml_cuda_pool_free(void * ptr, size_t size) { scoped_spin_lock lock(g_cuda_pool_lock); int id; @@ -5808,13 +5791,6 @@ static void ggml_cuda_pool_free(void * ptr, size_t size) { } -static void ggml_cuda_pool_free_async(void * ptr, size_t actual_size, int id, cudaStream_t stream) { - if (g_cudaMemPools[id] == nullptr) { - return ggml_cuda_pool_free(ptr, actual_size); - } - CUDA_CHECK(cudaFreeAsync(ptr, stream)); -} - void ggml_init_cublas() { static bool initialized = false; @@ -5869,13 +5845,6 @@ void ggml_init_cublas() { // create cublas handle CUBLAS_CHECK(cublasCreate(&g_cublas_handles[id])); CUBLAS_CHECK(cublasSetMathMode(g_cublas_handles[id], CUBLAS_TF32_TENSOR_OP_MATH)); - - // configure memory pool - cudaError_t err = cudaDeviceGetMemPool(&g_cudaMemPools[id], id); - if (err == cudaSuccess) { - size_t treshold = UINT64_MAX; - CUDA_CHECK(cudaMemPoolSetAttribute(g_cudaMemPools[id], cudaMemPoolAttrReleaseThreshold, &treshold)); - } } // configure logging to stdout @@ -6469,7 +6438,7 @@ inline void ggml_cuda_op_mul_mat_cublas( const to_fp16_cuda_t to_fp16_cuda = ggml_get_to_fp16_cuda(src0->type); GGML_ASSERT(to_fp16_cuda != nullptr); size_t ne = row_diff*ne00; - src0_as_f16 = (half *) ggml_cuda_pool_malloc_async(ne * sizeof(half), &src0_as, id, stream); + src0_as_f16 = (half *) ggml_cuda_pool_malloc(ne * sizeof(half), &src0_as); to_fp16_cuda(src0_dd_i, src0_as_f16, ne, stream); } const half * src0_ptr = src0->type == GGML_TYPE_F16 ? (const half *) src0_dd_i : src0_as_f16; @@ -6480,12 +6449,13 @@ inline void ggml_cuda_op_mul_mat_cublas( const to_fp16_cuda_t to_fp16_cuda = ggml_get_to_fp16_cuda(src1->type); GGML_ASSERT(to_fp16_cuda != nullptr); size_t ne = src1_ncols*ne10; - src1_as_f16 = (half *) ggml_cuda_pool_malloc_async(ne * sizeof(half), &src1_as, id, stream); + src1_as_f16 = (half *) ggml_cuda_pool_malloc(ne * sizeof(half), &src1_as); to_fp16_cuda(src1_ddf_i, src1_as_f16, ne, stream); } const half * src1_ptr = src1->type == GGML_TYPE_F16 ? (const half *) src1_ddq_i : src1_as_f16; - size_t dst_f16_as = 0; - half * dst_f16 = (half *) ggml_cuda_pool_malloc_async(row_diff*src1_ncols * sizeof(half), &dst_f16_as, id, stream); + + size_t dst_as = 0; + half * dst_f16 = (half *) ggml_cuda_pool_malloc(row_diff*src1_ncols * sizeof(half), &dst_as); const half alpha_f16 = 1.0f; const half beta_f16 = 0.0f; @@ -6503,15 +6473,14 @@ inline void ggml_cuda_op_mul_mat_cublas( const to_fp32_cuda_t to_fp32_cuda = ggml_get_to_fp32_cuda(GGML_TYPE_F16); to_fp32_cuda(dst_f16, dst_dd_i, row_diff*src1_ncols, stream); - if (dst_f16_as != 0) { - ggml_cuda_pool_free_async(dst_f16, dst_f16_as, id, stream); - } + ggml_cuda_pool_free(dst_f16, dst_as); if (src0_as != 0) { - ggml_cuda_pool_free_async(src0_as_f16, src0_as, id, stream); + ggml_cuda_pool_free(src0_as_f16, src0_as); } + if (src1_as != 0) { - ggml_cuda_pool_free_async(src1_as_f16, src1_as, id, stream); + ggml_cuda_pool_free(src1_as_f16, src1_as); } } else { @@ -6521,7 +6490,7 @@ inline void ggml_cuda_op_mul_mat_cublas( if (src0->type != GGML_TYPE_F32) { const to_fp32_cuda_t to_fp32_cuda = ggml_get_to_fp32_cuda(src0->type); GGML_ASSERT(to_fp32_cuda != nullptr); - src0_ddq_as_f32 = (float *) ggml_cuda_pool_malloc_async(row_diff*ne00 * sizeof(float), &src0_as, id, stream); // NOLINT + src0_ddq_as_f32 = (float *) ggml_cuda_pool_malloc(row_diff*ne00 * sizeof(float), &src0_as); // NOLINT to_fp32_cuda(src0_dd_i, src0_ddq_as_f32, row_diff*ne00, stream); } const float * src0_ddf_i = src0->type == GGML_TYPE_F32 ? (const float *) src0_dd_i : src0_ddq_as_f32; @@ -6538,7 +6507,7 @@ inline void ggml_cuda_op_mul_mat_cublas( &beta, dst_dd_i, ldc)); if (src0_as != 0) { - ggml_cuda_pool_free_async(src0_ddq_as_f32, src0_as, id, stream); + ggml_cuda_pool_free(src0_ddq_as_f32, src0_as); } } @@ -6961,22 +6930,21 @@ static void ggml_cuda_op_mul_mat( src0_dd[id] = (char *) src0_extra->data_device[id]; } else { const size_t size_src0_ddq = split ? (row_high[id]-row_low[id])*ne00 * src0_ts/src0_bs : ggml_nbytes(src0); - src0_dd[id] = (char *) ggml_cuda_pool_malloc_async(ggml_nbytes(src0), &src0_as[id], id, stream); + src0_dd[id] = (char *) ggml_cuda_pool_malloc(ggml_nbytes(src0), &src0_as[id]); } if (src1_on_device && src1_is_contiguous) { src1_ddf[id] = (float *) src1_extra->data_device[id]; } else { - src1_ddf[id] = (float *) ggml_cuda_pool_malloc_async(ggml_nbytes(src1), &src1_asf[id], id, stream); + src1_ddf[id] = (float *) ggml_cuda_pool_malloc(ggml_nbytes(src1), &src1_asf[id]); } if (convert_src1_to_q8_1) { - const size_t size_dst_ddq = nrows1*src1_padded_col_size*q8_1_ts/q8_1_bs; - src1_ddq[id] = (char *) ggml_cuda_pool_malloc_async(size_dst_ddq, &src1_asq[id], id, stream); + src1_ddq[id] = (char *) ggml_cuda_pool_malloc(nrows1*src1_padded_col_size*q8_1_ts/q8_1_bs, &src1_asq[id]); if (src1_on_device && src1_is_contiguous) { quantize_row_q8_1_cuda(src1_ddf[id], src1_ddq[id], ne10, nrows1, src1_padded_col_size, stream); - // CUDA_CHECK(cudaGetLastError()); + CUDA_CHECK(cudaGetLastError()); } } @@ -6984,7 +6952,7 @@ static void ggml_cuda_op_mul_mat( dst_dd[id] = (float *) dst_extra->data_device[id]; } else { const size_t size_dst_ddf = split ? (row_high[id]-row_low[id])*ne1*sizeof(float) : ggml_nbytes(dst); - dst_dd[id] = (float *) ggml_cuda_pool_malloc_async(size_dst_ddf, &dst_as[id], id, stream); + dst_dd[id] = (float *) ggml_cuda_pool_malloc(size_dst_ddf, &dst_as[id]); } } @@ -7110,6 +7078,24 @@ static void ggml_cuda_op_mul_mat( } } + for (int64_t id = 0; id < g_device_count; ++id) { + CUDA_CHECK(ggml_cuda_set_device(id)); + + // free buffers again when done + if (src0_as[id] > 0) { + ggml_cuda_pool_free(src0_dd[id], src0_as[id]); + } + if (src1_asf[id] > 0) { + ggml_cuda_pool_free(src1_ddf[id], src1_asf[id]); + } + if (src1_asq[id] > 0) { + ggml_cuda_pool_free(src1_ddq[id], src1_asq[id]); + } + if (dst_as[id] > 0) { + ggml_cuda_pool_free(dst_dd[id], dst_as[id]); + } + } + // main device waits for all other devices to be finished if (split && g_device_count > 1) { int64_t is_max = (ne11 + MUL_MAT_SRC1_COL_STRIDE - 1) / MUL_MAT_SRC1_COL_STRIDE; @@ -7127,21 +7113,6 @@ static void ggml_cuda_op_mul_mat( CUDA_CHECK(ggml_cuda_set_device(g_main_device)); CUDA_CHECK(cudaDeviceSynchronize()); } - - for (int64_t id = 0; id < g_device_count; ++id) { - if (src0_as[id] > 0) { - ggml_cuda_pool_free_async(src0_dd[id], src0_as[id], id, g_cudaStreams[id][0]); - } - if (src1_asf[id] > 0) { - ggml_cuda_pool_free_async(src1_ddf[id], src1_asf[id], id, g_cudaStreams[id][0]); - } - if (src1_asq[id] > 0) { - ggml_cuda_pool_free_async(src1_ddq[id], src1_asq[id], id, g_cudaStreams[id][0]); - } - if (dst_as[id] > 0) { - ggml_cuda_pool_free_async(dst_dd[id], dst_as[id], id, g_cudaStreams[id][0]); - } - } } static void ggml_cuda_repeat(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { @@ -7328,11 +7299,11 @@ static void ggml_cuda_mul_mat_mat_batched_cublas(const ggml_tensor * src0, const GGML_ASSERT(to_fp16_cuda != nullptr); size_t src1_as = 0; - half * src1_as_f16 = (half *) ggml_cuda_pool_malloc_async(ne1 * sizeof(half), &src1_as, id, main_stream); + half * src1_as_f16 = (half *) ggml_cuda_pool_malloc(ne1 * sizeof(half), &src1_as); to_fp16_cuda(src1_ddf, src1_as_f16, ne1, main_stream); size_t dst_as = 0; - half * dst_f16 = (half *) ggml_cuda_pool_malloc_async(ne * sizeof(half), &dst_as, id, main_stream); + half * dst_f16 = (half *) ggml_cuda_pool_malloc(ne * sizeof(half), &dst_as); GGML_ASSERT(ne12 % ne02 == 0); GGML_ASSERT(ne13 % ne03 == 0); @@ -7386,8 +7357,8 @@ static void ggml_cuda_mul_mat_mat_batched_cublas(const ggml_tensor * src0, const size_t ptrs_src_s = 0; size_t ptrs_dst_s = 0; - ptrs_src = (const void **) ggml_cuda_pool_malloc_async(2*ne23*sizeof(void *), &ptrs_src_s, id, main_stream); - ptrs_dst = ( void **) ggml_cuda_pool_malloc_async(1*ne23*sizeof(void *), &ptrs_dst_s, id, main_stream); + ptrs_src = (const void **) ggml_cuda_pool_malloc(2*ne23*sizeof(void *), &ptrs_src_s); + ptrs_dst = ( void **) ggml_cuda_pool_malloc(1*ne23*sizeof(void *), &ptrs_dst_s); dim3 block_dims(ne13, ne12); k_compute_batched_ptrs<<<1, block_dims, 0, main_stream>>>( @@ -7400,6 +7371,7 @@ static void ggml_cuda_mul_mat_mat_batched_cublas(const ggml_tensor * src0, const dst->nb[2], dst->nb[3], r2, r3); CUDA_CHECK(cudaGetLastError()); + CUBLAS_CHECK( cublasGemmBatchedEx(g_cublas_handles[id], CUBLAS_OP_T, CUBLAS_OP_N, ne01, ne11, ne10, @@ -7411,22 +7383,19 @@ static void ggml_cuda_mul_mat_mat_batched_cublas(const ggml_tensor * src0, const CUBLAS_GEMM_DEFAULT_TENSOR_OP)); if (ptrs_src_s != 0) { - ggml_cuda_pool_free_async(ptrs_src, ptrs_src_s, id, main_stream); + ggml_cuda_pool_free(ptrs_src, ptrs_src_s); } if (ptrs_dst_s != 0) { - ggml_cuda_pool_free_async(ptrs_dst, ptrs_dst_s, id, main_stream); + ggml_cuda_pool_free(ptrs_dst, ptrs_dst_s); } } #endif const to_fp32_cuda_t to_fp32_cuda = ggml_get_to_fp32_cuda(GGML_TYPE_F16); to_fp32_cuda(dst_f16, dst_ddf, ne, main_stream); - if (src1_as != 0) { - ggml_cuda_pool_free_async(src1_as_f16, src1_as, id, main_stream); - } - if (dst_as != 0) { - ggml_cuda_pool_free_async(dst_f16, dst_as, id, main_stream); - } + + ggml_cuda_pool_free(src1_as_f16, src1_as); + ggml_cuda_pool_free(dst_f16, dst_as); } static void ggml_cuda_mul_mat(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { From a7fac013cf1cc7bbc0160a226aa2412e9f22e78a Mon Sep 17 00:00:00 2001 From: Eve <139727413+netrunnereve@users.noreply.github.com> Date: Sun, 5 Nov 2023 07:46:44 +0000 Subject: [PATCH 72/79] ci : use intel sde when ci cpu doesn't support avx512 (#3949) --- .github/workflows/build.yml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5af497a3ce3214..bc295d52d2d5d2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -288,6 +288,7 @@ jobs: OPENBLAS_VERSION: 0.3.23 OPENCL_VERSION: 2023.04.17 CLBLAST_VERSION: 1.6.0 + SDE_VERSION: 9.21.1-2023-04-24 strategy: matrix: @@ -383,11 +384,23 @@ jobs: - name: Test id: cmake_test - if: ${{ matrix.build != 'clblast' && (matrix.build != 'avx512' || env.HAS_AVX512F == '1') }} # Test AVX-512 only when possible + if: ${{ matrix.build != 'clblast' && (matrix.build != 'avx512' || env.HAS_AVX512F == '1') }} # not all machines have native AVX-512 run: | cd build ctest -C Release --verbose --timeout 900 + - name: Test (Intel SDE) + id: cmake_test_sde + if: ${{ matrix.build == 'avx512' && env.HAS_AVX512F == '0' }} # use Intel SDE for AVX-512 emulation + run: | + curl.exe -o $env:RUNNER_TEMP/sde.tar.xz -L "https://downloadmirror.intel.com/777395/sde-external-${env:SDE_VERSION}-win.tar.xz" + # for some weird reason windows tar doesn't like sde tar.xz + 7z x "-o${env:RUNNER_TEMP}" $env:RUNNER_TEMP/sde.tar.xz + 7z x "-o${env:RUNNER_TEMP}" $env:RUNNER_TEMP/sde.tar + $sde = $(join-path $env:RUNNER_TEMP sde-external-${env:SDE_VERSION}-win/sde.exe) + cd build + & $sde -future -- ctest -C Release --verbose --timeout 900 + - name: Determine tag name id: tag shell: bash From c41ea36eaa3548776de4cb3d5d49b925cd3fc0f2 Mon Sep 17 00:00:00 2001 From: Eve <139727413+netrunnereve@users.noreply.github.com> Date: Sun, 5 Nov 2023 08:03:09 +0000 Subject: [PATCH 73/79] cmake : MSVC instruction detection (fixed up #809) (#3923) * Add detection code for avx * Only check hardware when option is ON * Modify per code review sugguestions * Build locally will detect CPU * Fixes CMake style to use lowercase like everywhere else * cleanup * fix merge * linux/gcc version for testing * msvc combines avx2 and fma into /arch:AVX2 so check for both * cleanup * msvc only version * style * Update FindSIMD.cmake --------- Co-authored-by: Howard Su Co-authored-by: Jeremy Dunn --- CMakeLists.txt | 8 +++- cmake/FindSIMD.cmake | 100 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 cmake/FindSIMD.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 3c49d645c3196f..7b4eb18403c0bf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ endif() set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) -if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) +if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) set(LLAMA_STANDALONE ON) # configure project version @@ -44,7 +44,7 @@ endif() # general option(LLAMA_STATIC "llama: static link libraries" OFF) -option(LLAMA_NATIVE "llama: enable -march=native flag" OFF) +option(LLAMA_NATIVE "llama: enable -march=native flag" ON) option(LLAMA_LTO "llama: enable link time optimization" OFF) # debug @@ -510,6 +510,10 @@ if ((${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm") OR (${CMAKE_SYSTEM_PROCESSOR} MATC elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^(x86_64|i686|AMD64)$" OR "${CMAKE_GENERATOR_PLATFORM_LWR}" MATCHES "^(x86_64|i686|amd64|x64)$" ) message(STATUS "x86 detected") if (MSVC) + # instruction set detection for MSVC only + if (LLAMA_NATIVE) + include(cmake/FindSIMD.cmake) + endif () if (LLAMA_AVX512) add_compile_options($<$:/arch:AVX512>) add_compile_options($<$:/arch:AVX512>) diff --git a/cmake/FindSIMD.cmake b/cmake/FindSIMD.cmake new file mode 100644 index 00000000000000..33377ec44de12c --- /dev/null +++ b/cmake/FindSIMD.cmake @@ -0,0 +1,100 @@ +include(CheckCSourceRuns) + +set(AVX_CODE " + #include + int main() + { + __m256 a; + a = _mm256_set1_ps(0); + return 0; + } +") + +set(AVX512_CODE " + #include + int main() + { + __m512i a = _mm512_set_epi8(0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0); + __m512i b = a; + __mmask64 equality_mask = _mm512_cmp_epi8_mask(a, b, _MM_CMPINT_EQ); + return 0; + } +") + +set(AVX2_CODE " + #include + int main() + { + __m256i a = {0}; + a = _mm256_abs_epi16(a); + __m256i x; + _mm256_extract_epi64(x, 0); // we rely on this in our AVX2 code + return 0; + } +") + +set(FMA_CODE " + #include + int main() + { + __m256 acc = _mm256_setzero_ps(); + const __m256 d = _mm256_setzero_ps(); + const __m256 p = _mm256_setzero_ps(); + acc = _mm256_fmadd_ps( d, p, acc ); + return 0; + } +") + +macro(check_sse type flags) + set(__FLAG_I 1) + set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS}) + foreach (__FLAG ${flags}) + if (NOT ${type}_FOUND) + set(CMAKE_REQUIRED_FLAGS ${__FLAG}) + check_c_source_runs("${${type}_CODE}" HAS_${type}_${__FLAG_I}) + if (HAS_${type}_${__FLAG_I}) + set(${type}_FOUND TRUE CACHE BOOL "${type} support") + set(${type}_FLAGS "${__FLAG}" CACHE STRING "${type} flags") + endif() + math(EXPR __FLAG_I "${__FLAG_I}+1") + endif() + endforeach() + set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE}) + + if (NOT ${type}_FOUND) + set(${type}_FOUND FALSE CACHE BOOL "${type} support") + set(${type}_FLAGS "" CACHE STRING "${type} flags") + endif() + + mark_as_advanced(${type}_FOUND ${type}_FLAGS) +endmacro() + +# flags are for MSVC only! +check_sse("AVX" " ;/arch:AVX") +if (NOT ${AVX_FOUND}) + set(LLAMA_AVX OFF) +else() + set(LLAMA_AVX ON) +endif() + +check_sse("AVX2" " ;/arch:AVX2") +check_sse("FMA" " ;/arch:AVX2") +if ((NOT ${AVX2_FOUND}) OR (NOT ${FMA_FOUND})) + set(LLAMA_AVX2 OFF) +else() + set(LLAMA_AVX2 ON) +endif() + +check_sse("AVX512" " ;/arch:AVX512") +if (NOT ${AVX512_FOUND}) + set(LLAMA_AVX512 OFF) +else() + set(LLAMA_AVX512 ON) +endif() From 3d48f42efcd05381221654376e9f6f69d76af739 Mon Sep 17 00:00:00 2001 From: Meng Zhang Date: Sun, 5 Nov 2023 04:40:08 -0800 Subject: [PATCH 74/79] llama : mark LLM_ARCH_STARCODER as full offload supported (#3945) as done in https://github.com/ggerganov/llama.cpp/pull/3827 --- llama.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/llama.cpp b/llama.cpp index cc0211ceb02113..e165390005c850 100644 --- a/llama.cpp +++ b/llama.cpp @@ -5164,11 +5164,12 @@ static int llama_decode_internal( // If all tensors can be run on the GPU then using more than 1 thread is detrimental. const bool full_offload_supported = - model.arch == LLM_ARCH_LLAMA || - model.arch == LLM_ARCH_BAICHUAN || - model.arch == LLM_ARCH_FALCON || - model.arch == LLM_ARCH_REFACT || - model.arch == LLM_ARCH_MPT; + model.arch == LLM_ARCH_LLAMA || + model.arch == LLM_ARCH_BAICHUAN || + model.arch == LLM_ARCH_FALCON || + model.arch == LLM_ARCH_REFACT || + model.arch == LLM_ARCH_MPT || + model.arch == LLM_ARCH_STARCODER; const bool fully_offloaded = model.n_gpu_layers >= (int) hparams.n_layer + 3; if (ggml_cpu_has_cublas() && full_offload_supported && fully_offloaded) { From 132d25b8a62ea084447e0014a0112c1b371fb3f8 Mon Sep 17 00:00:00 2001 From: Jared Van Bortel Date: Sun, 5 Nov 2023 10:08:57 -0500 Subject: [PATCH 75/79] cuda : fix disabling device with --tensor-split 1,0 (#3951) Co-authored-by: slaren --- ggml-cuda.cu | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/ggml-cuda.cu b/ggml-cuda.cu index dc14f2f5d76c66..9f873035ad0c05 100644 --- a/ggml-cuda.cu +++ b/ggml-cuda.cu @@ -6893,6 +6893,8 @@ static void ggml_cuda_op_mul_mat( int64_t row_low[GGML_CUDA_MAX_DEVICES]; int64_t row_high[GGML_CUDA_MAX_DEVICES]; + int used_devices = 0; + for (int64_t id = 0; id < g_device_count; ++id) { // by default, use all rows row_low[id] = 0; @@ -6920,6 +6922,8 @@ static void ggml_cuda_op_mul_mat( continue; } + used_devices++; + const bool src1_on_device = src1->backend == GGML_BACKEND_GPU && id == g_main_device; const bool dst_on_device = dst->backend == GGML_BACKEND_GPU && id == g_main_device; @@ -6958,12 +6962,12 @@ static void ggml_cuda_op_mul_mat( // if multiple devices are used they need to wait for the main device // here an event is recorded that signals that the main device has finished calculating the input data - if (split && g_device_count > 1) { + if (split && used_devices > 1) { CUDA_CHECK(ggml_cuda_set_device(g_main_device)); CUDA_CHECK(cudaEventRecord(src0_extra->events[g_main_device][0], g_cudaStreams[g_main_device][0])); } - const int64_t src1_col_stride = split && g_device_count > 1 ? MUL_MAT_SRC1_COL_STRIDE : ne11; + const int64_t src1_col_stride = split && used_devices > 1 ? MUL_MAT_SRC1_COL_STRIDE : ne11; for (int64_t src1_col_0 = 0; src1_col_0 < ne11; src1_col_0 += src1_col_stride) { const int64_t is = split ? (src1_col_0/src1_col_stride) % MAX_STREAMS : 0; const int64_t src1_ncols = src1_col_0 + src1_col_stride > ne11 ? ne11 - src1_col_0 : src1_col_stride; @@ -7079,6 +7083,9 @@ static void ggml_cuda_op_mul_mat( } for (int64_t id = 0; id < g_device_count; ++id) { + if ((!split && id != g_main_device) || row_low[id] == row_high[id]) { + continue; + } CUDA_CHECK(ggml_cuda_set_device(id)); // free buffers again when done @@ -7103,6 +7110,9 @@ static void ggml_cuda_op_mul_mat( CUDA_CHECK(ggml_cuda_set_device(g_main_device)); for (int64_t id = 0; id < g_device_count; ++id) { + if (row_low[id] == row_high[id]) { + continue; + } for (int64_t is = 0; is < is_max; ++is) { CUDA_CHECK(cudaStreamWaitEvent(g_cudaStreams[g_main_device][0], src0_extra->events[id][is], 0)); } @@ -7400,7 +7410,7 @@ static void ggml_cuda_mul_mat_mat_batched_cublas(const ggml_tensor * src0, const static void ggml_cuda_mul_mat(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { const bool all_on_device = - (src0->backend == GGML_BACKEND_GPU) && + (src0->backend == GGML_BACKEND_GPU || src0->backend == GGML_BACKEND_GPU_SPLIT) && (src1->backend == GGML_BACKEND_GPU) && ( dst->backend == GGML_BACKEND_GPU); From bb60fd0bf6bb270744d86dd45b3a95af01b7de45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A1i=20Ho=C3=A0ng=20T=C3=A2m?= <75922889+RoyalHeart@users.noreply.github.com> Date: Sun, 5 Nov 2023 23:15:27 +0700 Subject: [PATCH 76/79] server : fix typo for --alias shortcut from -m to -a (#3958) --- examples/server/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/server/README.md b/examples/server/README.md index 715007735c122f..089ebe2d1533f8 100644 --- a/examples/server/README.md +++ b/examples/server/README.md @@ -7,7 +7,7 @@ Command line options: - `--threads N`, `-t N`: Set the number of threads to use during generation. - `-tb N, --threads-batch N`: Set the number of threads to use during batch and prompt processing. If not specified, the number of threads will be set to the number of threads used for generation. - `-m FNAME`, `--model FNAME`: Specify the path to the LLaMA model file (e.g., `models/7B/ggml-model.gguf`). -- `-m ALIAS`, `--alias ALIAS`: Set an alias for the model. The alias will be returned in API responses. +- `-a ALIAS`, `--alias ALIAS`: Set an alias for the model. The alias will be returned in API responses. - `-c N`, `--ctx-size N`: Set the size of the prompt context. The default is 512, but LLaMA models were built with a context of 2048, which will provide better results for longer input/inference. The size may differ in other models, for example, baichuan models were build with a context of 4096. - `-ngl N`, `--n-gpu-layers N`: When compiled with appropriate support (currently CLBlast or cuBLAS), this option allows offloading some layers to the GPU for computation. Generally results in increased performance. - `-mg i, --main-gpu i`: When using multiple GPUs this option controls which GPU is used for small tensors for which the overhead of splitting the computation across all GPUs is not worthwhile. The GPU in question will use slightly more VRAM to store a scratch buffer for temporary results. By default GPU 0 is used. Requires cuBLAS. From d9ccce2e339ca0396560d18b8637f2c848d72a08 Mon Sep 17 00:00:00 2001 From: Kerfuffle <44031344+KerfuffleV2@users.noreply.github.com> Date: Sun, 5 Nov 2023 10:06:06 -0700 Subject: [PATCH 77/79] Allow common process_escapes to handle \x sequences (#3928) * Allow common process_escapes to handle \x sequences * Fix edge case when second hex digit is NUL --- common/common.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/common/common.cpp b/common/common.cpp index 20cc4a081b2225..37e3ace8ac5d92 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -90,6 +90,19 @@ void process_escapes(std::string& input) { case '\'': input[output_idx++] = '\''; break; case '\"': input[output_idx++] = '\"'; break; case '\\': input[output_idx++] = '\\'; break; + case 'x': + // Handle \x12, etc + if (input_idx + 2 < input_len) { + const char x[3] = { input[input_idx + 1], input[input_idx + 2], 0 }; + char *err_p = nullptr; + const long val = std::strtol(x, &err_p, 16); + if (err_p == x + 2) { + input_idx += 2; + input[output_idx++] = char(val); + break; + } + // Intentionally fall through to default. + } default: input[output_idx++] = '\\'; input[output_idx++] = input[input_idx]; break; } From 2833a6f63c1b87c7f4ac574bcf7a15a2f3bf3ede Mon Sep 17 00:00:00 2001 From: slaren Date: Sun, 5 Nov 2023 18:45:16 +0100 Subject: [PATCH 78/79] ggml-cuda : fix f16 mul mat (#3961) * ggml-cuda : fix f16 mul mat ggml-ci * silence common.cpp warning (bonus) --- common/common.cpp | 2 +- ggml-cuda.cu | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/common/common.cpp b/common/common.cpp index 37e3ace8ac5d92..6a711420004b48 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -101,8 +101,8 @@ void process_escapes(std::string& input) { input[output_idx++] = char(val); break; } - // Intentionally fall through to default. } + // fall through default: input[output_idx++] = '\\'; input[output_idx++] = input[input_idx]; break; } diff --git a/ggml-cuda.cu b/ggml-cuda.cu index 9f873035ad0c05..2d9ffffbf74966 100644 --- a/ggml-cuda.cu +++ b/ggml-cuda.cu @@ -7414,6 +7414,8 @@ static void ggml_cuda_mul_mat(const ggml_tensor * src0, const ggml_tensor * src1 (src1->backend == GGML_BACKEND_GPU) && ( dst->backend == GGML_BACKEND_GPU); + const bool split = src0->backend == GGML_BACKEND_GPU_SPLIT; + int64_t min_compute_capability = INT_MAX; for (int64_t id = 0; id < g_device_count; ++id) { if (min_compute_capability > g_compute_capabilities[id] && g_tensor_split[id] < (id + 1 < g_device_count ? g_tensor_split[id + 1] : 1.0f)) { @@ -7435,13 +7437,13 @@ static void ggml_cuda_mul_mat(const ggml_tensor * src0, const ggml_tensor * src1 //printf("src0 is contiguous %d, transposed %d, type = %s, name = %s\n", ggml_is_contiguous(src0), ggml_is_transposed(src0), ggml_type_name(src0->type), src0->name); //printf("src1 is contiguous %d, transposed %d, type = %s, name = %s\n", ggml_is_contiguous(src1), ggml_is_transposed(src1), ggml_type_name(src1->type), src1->name); - if (all_on_device && !use_tensor_cores && src0->type == GGML_TYPE_F16 && ggml_is_permuted(src0) && ggml_is_permuted(src1) && src1->ne[1] == 1) { + if (!split && all_on_device && !use_tensor_cores && src0->type == GGML_TYPE_F16 && ggml_is_permuted(src0) && ggml_is_permuted(src1) && src1->ne[1] == 1) { // KQ single-batch ggml_cuda_mul_mat_vec_p021(src0, src1, dst); - } else if (all_on_device && !use_tensor_cores && src0->type == GGML_TYPE_F16 && !ggml_is_contiguous(src0) && !ggml_is_transposed(src1) && src1->ne[1] == 1) { + } else if (!split && all_on_device && !use_tensor_cores && src0->type == GGML_TYPE_F16 && !ggml_is_contiguous(src0) && !ggml_is_transposed(src1) && src1->ne[1] == 1) { // KQV single-batch ggml_cuda_mul_mat_vec_nc(src0, src1, dst); - } else if (all_on_device && use_tensor_cores && src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F32 && !ggml_is_transposed(src0) && !ggml_is_transposed(src1)) { + } else if (!split && all_on_device && use_tensor_cores && src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F32 && !ggml_is_transposed(src0) && !ggml_is_transposed(src1)) { // KQ + KQV multi-batch ggml_cuda_mul_mat_mat_batched_cublas(src0, src1, dst); } else if (src0->type == GGML_TYPE_F32) { From fb8e2fe606f1e1013c7e6b315db433e9f389c16f Mon Sep 17 00:00:00 2001 From: KerfuffleV2 Date: Mon, 23 Oct 2023 06:27:28 -0600 Subject: [PATCH 79/79] Add support for loading merges.txt Add --padvocab option to convert.py Other minor cleanups --- convert.py | 36 +++++++++++++++++++++++++++++------- gguf-py/gguf/gguf.py | 32 ++++++++++++++++++++++++++++++++ gguf-py/pyproject.toml | 2 +- 3 files changed, 62 insertions(+), 8 deletions(-) diff --git a/convert.py b/convert.py index 9110f15806c6bc..433dbe95eb1fde 100755 --- a/convert.py +++ b/convert.py @@ -779,7 +779,7 @@ def bounded_parallel_map(func: Callable[[In], Out], iterable: Iterable[In], conc break yield result -def check_vocab_size(params: Params, vocab: Vocab) -> None: +def check_vocab_size(params: Params, vocab: Vocab, pad_vocab: bool = False) -> None: if params.n_vocab != vocab.vocab_size: assert isinstance(vocab, BpeVocab) or isinstance(vocab, SentencePieceVocab) if params.n_vocab == vocab.vocab_size_base: @@ -787,12 +787,21 @@ def check_vocab_size(params: Params, vocab: Vocab) -> None: vocab.added_tokens_list = [] vocab.vocab_size = vocab.vocab_size_base return + if pad_vocab and params.n_vocab > vocab.vocab_size: + pad_count = params.n_vocab - vocab.vocab_size + print(f'Padding vocab with {pad_count} token(s) - through ') + for i in range(1, (params.n_vocab - vocab.vocab_size) + 1): + vocab.added_tokens_list.append(f'') + vocab.vocab_size = params.n_vocab + return msg = f"Vocab size mismatch (model has {params.n_vocab}, but {vocab.fname_tokenizer}" if vocab.fname_added_tokens is not None: msg += f" combined with {vocab.fname_added_tokens}" msg += f" has {vocab.vocab_size})." if vocab.vocab_size < params.n_vocab < vocab.vocab_size + 20 and vocab.fname_added_tokens is None: msg += f" Most likely you are missing added_tokens.json (should be in {vocab.fname_tokenizer.parent})." + if vocab.vocab_size < params.n_vocab: + msg += " Possibly try using the --padvocab option." raise Exception(msg) @@ -877,8 +886,12 @@ def close(self) -> None: self.gguf.close() @staticmethod - def write_vocab_only(fname_out: Path, params: Params, vocab: Vocab, svocab: gguf.SpecialVocab, endianess:gguf.GGUFEndian=gguf.GGUFEndian.LITTLE) -> None: - check_vocab_size(params, vocab) + def write_vocab_only( + fname_out: Path, params: Params, vocab: Vocab, svocab: gguf.SpecialVocab, + endianess: gguf.GGUFEndian = gguf.GGUFEndian.LITTLE, + pad_vocab: bool = False, + ) -> None: + check_vocab_size(params, vocab, pad_vocab = pad_vocab) of = OutputFile(fname_out, endianess=endianess) @@ -905,8 +918,14 @@ def maybe_do_quantize(item: tuple[DataType, NDArray]) -> NDArray: return dt.quantize(arr) @staticmethod - def write_all(fname_out: Path, ftype: GGMLFileType, params: Params, model: LazyModel, vocab: Vocab, svocab: gguf.SpecialVocab, concurrency: int = DEFAULT_CONCURRENCY, endianess=gguf.GGUFEndian.LITTLE) -> None: - check_vocab_size(params, vocab) + def write_all( + fname_out : Path, ftype: GGMLFileType, params: Params, + model : LazyModel, vocab: Vocab, svocab: gguf.SpecialVocab, + concurrency: int = DEFAULT_CONCURRENCY, + endianess : gguf.GGUFEndian = gguf.GGUFEndian.LITTLE, + pad_vocab : bool = False, + ) -> None: + check_vocab_size(params, vocab, pad_vocab = pad_vocab) of = OutputFile(fname_out, endianess=endianess) @@ -1126,6 +1145,7 @@ def main(args_in: list[str] | None = None) -> None: parser.add_argument("--ctx", type=int, help="model training context (default: based on input)") parser.add_argument("--concurrency", type=int, help=f"concurrency used for conversion (default: {DEFAULT_CONCURRENCY})", default = DEFAULT_CONCURRENCY) parser.add_argument("--bigendian", action="store_true", help="model is executed on big endian machine") + parser.add_argument("--padvocab", action="store_true", help="add pad tokens when model vocab expects more than tokenizer metadata provides") args = parser.parse_args(args_in) if args.dump_single: @@ -1173,7 +1193,8 @@ def main(args_in: list[str] | None = None) -> None: load_merges = args.vocabtype == 'bpe', n_vocab = vocab.vocab_size) outfile = args.outfile - OutputFile.write_vocab_only(outfile, params, vocab, special_vocab) + OutputFile.write_vocab_only(outfile, params, vocab, special_vocab, + endianess = endianess, pad_vocab = args.padvocab) print(f"Wrote {outfile}") return @@ -1196,7 +1217,8 @@ def main(args_in: list[str] | None = None) -> None: params.ftype = ftype print(f"Writing {outfile}, format {ftype}") - OutputFile.write_all(outfile, ftype, params, model, vocab, special_vocab, concurrency = args.concurrency, endianess=endianess) + OutputFile.write_all(outfile, ftype, params, model, vocab, special_vocab, + concurrency = args.concurrency, endianess = endianess, pad_vocab = args.padvocab) print(f"Wrote {outfile}") diff --git a/gguf-py/gguf/gguf.py b/gguf-py/gguf/gguf.py index a2271d225d0012..36d8a2ef84e7ac 100644 --- a/gguf-py/gguf/gguf.py +++ b/gguf-py/gguf/gguf.py @@ -1023,6 +1023,35 @@ def __init__( def _load(self, path: Path) -> None: if not self._try_load_from_tokenizer_json(path): self._try_load_from_config_json(path) + if self.load_merges and len(self.merges) == 0: + self._try_load_merges_txt(path) + + def _try_load_merges_txt(self, path: Path) -> bool: + merges_file = path / 'merges.txt' + if not merges_file.is_file(): + return False + with open(merges_file, 'r') as fp: + first_line = next(fp, '').strip() + if not first_line.startswith('#'): + fp.seek(0) + line_num = 0 + else: + line_num = 1 + merges = [] + for line in fp: + line_num += 1 + line = line.strip() + if len(line) == 0: + continue + parts = line.split(None, 3) + if len(parts) != 2: + print(f'gguf: WARNING: {merges_file.name}: Line {line_num}: Entry malformed, ignoring', + file = sys.stderr) + continue + merges.append(f'{parts[0]} {parts[1]}') + self.merges = merges + return True + def _set_special_token(self, typ: str, tid: Any): if not isinstance(tid, int) or tid < 0: @@ -1083,6 +1112,9 @@ def add_to_gguf(self, gw: GGUFWriter, quiet: bool = False) -> None: if not quiet: print(f'gguf: Adding {len(self.merges)} merge(s).') gw.add_token_merges(self.merges) + elif self.load_merges: + print('gguf: WARNING: Adding merges requested but no merges found, output may be non-functional.', + file = sys.stderr) for typ, tokid in self.special_token_ids.items(): handler: Callable[[int], None] | None = getattr(gw, f'add_{typ}_token_id', None) if handler is None: diff --git a/gguf-py/pyproject.toml b/gguf-py/pyproject.toml index f0741a7c23e034..c6cb2c37a0e0a1 100644 --- a/gguf-py/pyproject.toml +++ b/gguf-py/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "gguf" -version = "0.4.5" +version = "0.4.6" description = "Write ML models in GGUF for GGML" authors = ["GGML "] packages = [

  • nA^SH$tz#Qo( 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�MFvH za8c?b1_Ny(A#jN2|3s!%e1&0Bj_f(;x$)LQt?(O5L}i2XU!w3L(eCw3YYbmVmNT*@b?4I@xHQ~xL_cG2>Ey;7LdMUlf z9rG5Gf()|5*b?b@%#=#Y10}{XNZb$wA9F+Z7Ck9Agj*v@pkdLbhMrSsHIfR$fqwELOqQ68G%J7DT;}w($WuHsugOR|^;Lq9_*B_A}&*^rY#JoGvV{ z#ijV$cxc5+poa@SVnzex7<5)itQBlsR85J|sw_1H-F`{BO%}|0pZr^(x6uQMwc!Ken`^f43?FOeca|+&R z?`O3pSu`bvd@^EDRfNf6P8%RW+tv!#A=brE*7$k6+k8uVV-4l!6b)=dP7$x=F=Z}u z83d}}^uf;YD|ghO&vN_-wwz*LzC`%^4zT56F)ddDIPnoRSn{X`?ACPuu-Z_GWrpy! z(f8Qnp$upszlD)mU_Z2nnkC?`di`iItgN&65ytt(-Kl89e^Rn|LNH(*h~w6YM~9U; z*&sM4D?h0qw^(ZB%fxLl<&^ta)_8e*a&p|(sdBR$7h&M=O058!RCazPW{+oZ(iUbd z1L;+low36}@ibGcy5s%#o^HI-1I!opXb8r@O%q|Yn11Zry)(8#Ttt!dJ}wvqAu*i0 zNy2AY$Ud#0*&%uz45bJQ9{*0!G1Tr-$1IPmBjw$*^}@WTL`v_MLr{mzRr(k15AkAy_8S57b7(XmR0+guq)&tHu-Ahko}$P$^H{yRx4%PXic=*bETZ?~lh`$;$uSR)ad?&uy*lsy<0K^!m z*rM^}Jlr`8GP({Y&j%AtZslF--19{+_R#Bb1Cnd35h+C!<69kQIg?@@lMSTC*EyZ2S(8RU zg*pBnD%wFsV?Vl+O4{yzq_rHj^DNKhd6xcgOC3 zGyaY7o5Zwt+OzSTt!{sLdx|MG*SiG94=FWr$=_4@o!XqT*}N1pSODfeWWC*(F*XeD z&-$c5%+SILhYZ>-zL(`sYgxi`-Bkc&E|M+xKjd+qlU4Lph7>QQkYDv}_p!s|{KZd1 ztp%c#OBREi#pLa6PvaV%*TXMU!LPRmJSK*^3S_@k8#vr)Gplh&39^E}DWe1r3`k-z zK_kmodjEZO@`(GQH7EPdntrzZetZLTE~lzI1L-V_!68bq?a`jqI5u#wQ*uvYP7wqd zr|!oQl7kly(Xofb=SSW2v;>+j=w-i^I=j-cN-c;pwtCz|dvam1gqon60OD;Wd`^|r ztPl@BlU<22^RGE1j!Sjdb=r+>V^um)dUZ&Kj4i=yw{=ew318^2bXUL!?mBumB1jw3 z9F>^;)5UpWb@L@y*A)P_xA`h49ka98({Hn_w;s}ACU(&bb?1H0O`_yrQSs&b?YS32 zc6%iL^-xg&5GYJuG>yRbxO05V&O#tT!irOiy(nrYG7(eJnXDn!Z~;M#35|I42r6VG zYi#b?p8WCo*FphfMMp1Dt5N~l03$JNva|`V6s5SK_Ej(?{NTkX|KWL1%K~08Mv9A9 zUCNv7+H8E)Un)KbO#6ZFat-x@(GjNSN?VSJMW|khf8TGrC0fU%JpQW?FVyKjqE2H8 z#jQWuUW&(dCCJzloZ(mQLk@V*-t()&Kh!b!Fa=Phd&Vhr*j_yHG=nV) z){nOtL)?LMEM;4&3}mc|Qs~ZqJS0s0ZM+Ehn|5yej8*C7FR|GCCt=E%BYVZCA?HqB zGB`r4CmNXA5$=fu;`29vb}^UqhkYe3<+Ky?rvwBAQ<1(=G=>@t5yQ<1M#0rqe?uQ) z<$YGEq{0*!XFLW?D>$y4<%9x{vReya%lt(E`P$h+E{Z56_hQtSKhi!D|EB&}y4+ff zNugX204;vhn9WVOMNhHJqe53(B6u2tsgiRQq-5HN;yC}dl1tLq(W-=PO6!u=03p) z42WI`K9D!A8Ad?7w0dup`+%B)8^xDTeHN;r^%avfm72n?04s=hoLy|6^ke2E%f{wj zY@hvo->4s1%wvd@*z^Z^nyUg3;d4qVX>G!S)1c57{yfd zwi^>1omiSxW-tDId$rB@UW?Lf<g!#MBX&WmPL%jftVIWlXG6SLv4HwIatw z>=4W5GCp=~FuNotBGDtIavza+?lEcg5yHe|z@s^i;(l^D(17W{Ewz;eKOBdEfM1s5 zWh`5T4Nd9b&WI`}u3(kXUac^6(76{e9A%-wAq57D7e4>9^FJkA7E|$i?WqtrEku?W z8-mT3;wj~;-HG`*f25>6 zw>9aJBLNEWM%pU`hk5ImHla6A@C{tfwjDKjeOVuo7Xe*616 z{R$I%nZ}iIFL*n%Z6O}SAq>U;r~c{CoyJ4!B|kJT@r%v_IZOInR~VDMiWdx20qC%K zQ4io;TbwVCLGjq*;`}01j{O-k+LOMhaX-25VING|Jx{>_W~DHEbBK7znX=d`M*}rV zbJR2n(3w!ZYo$J_6S2>{vPwPRt|59Fc7y|7K5)6 z26y(Lt4}fI`x6j{%H*R2DszY0^t^FTjF88JbaL1Pf-nBJ)45ckvRSJ`Gz zk5}emJx}*=6DvoLs$8CcIksMr^BE|8M0(Qe>!tR}t~%r-U_OhZKo|~wdHKO-(4ir< zbXF`e#tpTdF^3g=`~YjDOp=b4B*neg-iz5dlYJ8(j)dLBn-9_)EuD!ZF-u5<6dE|m zR21N*G=|Nh?H(PA83hCBZRdQ}s(?Mmnk>3dZ!ff$Vp6;RXAt`Mo)hV0tEHUJv<>y$ z!1(lzql}`sHWlY4T1I+|Hi!oVvW8O^Z>{RDr4$XZxG#iI@1AY)$|zh9?uM*9-%96q z^_~{V&>S6vcRZv>E00?>(Mjr#)w_$}#7)l7UhKU*0=M}O0{-@PTzvU*%QA4iYV`Tv z$5*tkc{lEZEYnNE_$#g*`oEneR8n33Cu4>JjvOp}$i;sxD$u(2g7UwS?|KxFPt zcBfEDGDF32bUh$xpX>3a=Z|O!mp;oWlS18#96rbHR(m^UlzP=yV#2`eK}vHMb=KPB zAA5Ad!*m!I_vc#g1YX-54HkgHlOgOMZoe1*Txg&4AUTNA$X(Vod63UUesNyeAo1N69CWHEUh7-|ygDA4K}gzVd^J~KoMA3aq3JMJl$f*qTaLtW*P1UEni zlfp@ca(0wv{gZD{_};UHJBdBhV*)XwE7H}j_CzM33@p@aTyXw~TtmZU>Pc)V6c3vW z&&gqIH^u65?RxQxbk`u`I}SHm@1-q0F@xP!999Z-f~?Vh*~ybkOYLmQrmKY`QJ$kT z?HM(@d-8h$75-U}z<%BT{>CDBo{N3hKE+Sk<}gy(WWU%dMdiy!$WA+0lfD7dUt?c{ zQCgmXFqm8eNL3==_DnDD(syloe~AYWqO8`|H9L3_)DW1=m12D&S2tzF~&Wm z9MgkW^r!HuslL_uLw1ryYS{djkGsD-|9*L8PLG`eBPfhUb*&hg3ISH_F%2q*X)7Z{ zF0_(dVLxNdQGuw$%ttEBGz zod07i;H}#*>gK&r+ejjczvzNJQd-k%m$RY%Cw`fEq>!V*uP!=qnF;l&C~o8pKH{wV za=~huoPxhiN*L3FY{c6F&z)q;k0_{6yQ%@o)+mv5A1x*=>T=f#%rMJ*5vVx$%)eT_ z{W`T5fB!Y=&*2=6U`IX#A{-OHrpQu4?+VRIz^l8CIo=B~#auu6@?)T5{!jct$wV*^ z#~WV0C4Qq6Om7}-4(5}4TfwZVogH9J8YY;yzf_R=E3v`Y9XU3R1CSh*)%SBKzu5Uo zcViO&M^OOIAH@XjGpMZx79@_a!*cL0v&eaT_P~L6gwUW0O1CH9`_&)Ds{^`~I(4jC zC!@|*eH`i&%LKHAzV2ump?sfZ z$lrL~D7*n8Fn^S8aJD}SkzgTz(95~SEYY1FJleOI5hY7aOgwQMcgJbSE7pFTE{#A6 zk+n+RFhDpb+uj~~E=I|QA07QKDG4-vp88K+pksW9?1nhj>4~x95&hczK(_9y9vvS) z@|wkYM(ty8?Q6>HlC}voO1V$!%jeqDFM7cV6#%xzoNzhI7mt80_)V5AK7y39hjN>8 zC6PMc3H9~qaRw(SnNeblxHlJ#3`3U2Y*25SSulCwH}MyFkIeRDJIVRLuyPb=J9^Bu z;HK0+#L(bm%DV%2zSgdK`lLq^e(z}LzH%D!@pl6isnIiCC znrhBS6PJ~EJ$Z>&K4K9+JyaI-)P%@xqgjTRaTXzRcLC;*bx!$Uu1{-Y8$kzjXY{YR z|JY$RT>G!I^MCMgn2%R|F&g_vEh+!9(ioaoZ&jo)js{P}hFJ4<$Y2X$i%bAB)G;w8 zk5k%5MLgT~_)s`o@m*fif`fa`%w^;ct{=-E=Q`}u;xN7R#!fLG= z14xTiYGXr|&#je=L5%RfY~?U0l2iNJ+O$>0XA!Zxxfi2Y&4h2Gd4&#e6|3gtb&-bkCo!A{8f7(rP4$yS#qhx@x8#p(b_ZeUY zTiVms%S^-hRDHtu>w=;>0x-L&6>EO!YI`jvR*cGPmLX0%90z;l!W_2>_&Zc^b=%e% z_%fbUon3Eugx6T5qkLZ}9V9fZdSxXQS;LygE-3l;+w8nNI&fH&-+>?D{X~2a)T?X0 zc;>a)$?C;3Vl(R;tQFOuTwxf}nL1tpgM)LV=qA}*MU5^}d)I~cCZ`-bTbs2q zCDH1GQqNySS-Z*VWO32$`+Af^R=DGFp=U~`)KKF!wBLhqv7xp}%wT0>5s4(Yqrj)z zeu+`-LttX>`MlrLDce%efspn~DYb2kA;c=?qc^@ZU_>e^%eFVIxVlbI`=D&-RE={sd=7-AzUcOqZSkjIqmvi9#CwTv{ z_I|t=VY-G55rggEE&3s+rANU-s)Tci#u1~JnQ)qOB#!5J<1FmKDN~RSvIbvz$vM!}nH{u2HBiTF%RZIZ7 z1+`p6N_@GgLhHJM?NwY?%2PRUN$_|H0^^h(Ck=+J&OSNXh=)nZa8kx=!-yji8afJY zz}C)KErO;U?c+1N4!1s)QBvrb18p%j0Q;j7+u*u_D6yU~wKKDA)z6cMGiVOGrz*ZR z`*w^_13oRK*xw{_joCgrh#Ec0cC7!k`a%DWC(nVjg?e419^`Q+4aB!BXn~wBESI7P z$eW^xfky>X>=myx30l%$gEsL>tLiCrKm5MiqxD`{L8n063&aI>U5o?z*z0k?^*|*j zoG6?za{h)cpRP)PZX**q4)pnU%?~7b=OP?$gia9Ub>D9n6J1Iy#zR1btf%;%lq*h8 z)#Qs67WkNM1D(nLIeH{)(32pqiD12d{(O5eVuXE1mjA;R^;V~d&dxZU2SmQu!IXF} ztvt?@H5wv50V`+1;y&xj3#TW&pWlA3mQCzF_NebKujf>9a@>i11{m(bd3cn9!%}Mq zNQp^AiL&kd%#Bu{EbQ!;a8N5uxfib*A*D2OG+it=s;3tD}2FS^6Vnv!S>$=J5rVz*8=VvWHzfCQ@AX548by>C#x#p^g@?xT)WE z9aJ_Qpn+gM=dTY8hxH=r3aU-H!x*9^jIq4y-o`TTm*-=4JK`|f_ZjmZ8Cg3WJdAf+ zop(OWTf~z5Q>d;c{fgEl|K3{@j%4vY5f@XsD6xH*Ol;X$Hq zi51Dc(Ye;B~cV*&3b#_Ly8 zMQm`rjH@mog86(_@vB7eef2ulp^7D0wkRxxnSyTfMaRMl4-1P8l;Jxuu`slgVz|t4 z^x(|vjo+i2buONt079=S7`5uf8eVtG`x)rTF43qEJ?u1TQsmE{&*x*MQ;DltvD9k)#zf)0dD}mr^Dic&37G`!cqsz}d*Pi>B z-%(BXpne>uOf6$}6tMCeZ4Skw1|ctn@J60*N= zWo+PL(;QVngUZ%(zG9u(=sP=(H^0Jv_%g3}c?W2=JN6dNedsTolv%sxOYNC>e-0-s zLbc*b<-aioUEM3PEu&Kysb32OiY@N*alF(G@L(QFP=$!!i*%JJai&%7slNbuztN}7gV@Z zOELuDdxaoi!O@yEJ^7ACF`n{!c{HW9!UmwWhoe%TShkiM)(&7${Vme@l8FHFSRzpr ztKc2o)DPh0y%-RVn$i&BBOB`PNFs`lJz422H4aIf<;B3cPfPa39trLY!%`$#V=t}Y z;Zim7sQ|W!>qV2f*j)e@g2cegnYnO&eRqxk z%5szY;)x)8L9r8g?S4(_R$yQXx$*qp;1Amt4^)D%n}QsxRt#rz-BIgDSQeG4e`jW8 zW#;Bu`%LU27-dIE#}Ns0Quf0f^BL1bcHUKsU)K}|xy==L@QHYUORH3OOrD$yutHvQ z-&3&z0!`+1y+Vd)$s>_ja8R7(T>*@nqqB0)SuzKTA*jfYY4ogpIe$rt`+0l(a}VIc zjI5~j+q8+h9xn`@xa}1om4s7N4eCP_*w4gQTnOv@(PvsY8HmXLut(&*WZN)ywJ|)6 zL;ZpBLW*ttwa17tBy#S?mNj*C;cTsZAb;vu=FUa|(3aTuN0aa>=h}L_B?e*|8kG8a z{GE_{rN#W}k3#%({Fa;rm~)CCqMke(Z*utC6c7=upcX^F)!GS?_)&NSX5`C|DxnYM zAs0Rv`i_^lj}sKqOPKmFt&b=F2W752+ov2ZM8{H`sq}zAdhV4%2jmd%D-z}xPUFVd zVil1DxBzdT>Vb^`H_Fb{G`_bMhxTkL}xRPkt2gcDmVS;q3MbO zE&cPg*n1GjMily^Q~5F1+ zG?jQ#xt3zz7joP&#~cn`jPDwVk>zk^Q$gA!o8M`RMTj6kPLv`;(`-+iSd*e+cig>%PL?Z4rfJv{)jq58rBZ|@ml^E@0XV#PD>(i1?ni{dT|Fi>JU zs|07^5ACVjm=|Gh>l7`#Kh6d-@DE2>slMN4akBN|%OMl|y8uG)ZL z#~gw$u(irrxs2A43tvLkP;teuEPxSwmCNxiM4#HN(Dpcm%3O_AP)umK#Du77kZN;_ z9td7_9MQdO&kR-#t_YS9bIENxkn8!**1ly_GjL|($;TX9r&&S`Z2%_=jzn@ql?}D$ zsUUVo(<&Lb<&-`K@ZU%|Wl*eIZKQkydL(MU~!x;CTd8rVD={WQ3VXtGL2EwyT<;)njfVix<)RE zWI3Iv^GBE4rB`w_*{N90pr}4#8!8>2`@8uAuUybabRF5og@M(D^)$~ifM>ug@6x0rS zUr^AlC5Ad;KPBD}lXCuuGq#Ah2&M30@`i8Y<*xZ+ypv2Ic=EMh{ZZ+RHKTSU<8>gH zlw6G7Z_t(1YFEX5Skd?cK;6C0o(cgGQSbTqRs=WI4*i+m82nr-ySmYlYjqf z{dV6F6Iwos--n*Mg`=(X03d+s9#L*p5gk;#e}rJ<*+PJoj6T>Te#j!h8dOxg69J1+ z9+jA-Jm1$2U6o7f)_ve05*@su39pfS93s(6qt{S0hDd?Dh#H^*3)hG8)rh6DXLTq=MGQ9fQ2 zoG7?VQK&$Ddn4b9r#-C?%E8I-Bn*dr;-&O zuv*U53|riS<2>9{NQ*6A^fWoH+22QelGS)I%mJOe4%@S9vAz8u@+$#TV;iraIu2tm z5U`M*})&)^t+OQ2AHE9fSZWfsTL#7 zVru?*qIl5O=70DNVd|GWR5>NWWUF1jMd@>fI`LJ?Bo)cadctpXwyAs#Z1YvEaPwb838PT=+8_?zDLVI9Y|TOFjA`LXDa zinb;7Pr@97>ukmgg;gX5Vt~DN7PK0_dt+oTR!ei3^1-&cddX`+!bFX(2yISFoaohl zW?zzAzPgro@P=^Ujj-z5xBY2ObZv$dx0sw(JG zMt2pFzy(snj{M=^xJk ziTYZ6+wuN-466rm-iXzGxxMq*SbISSqho3XR3$mo8;&0X))Z%fN^UM?(A%KI>VfZm zAEgpM%?RSd<1>B2qZ`s^(Fx`W?lzL_CV0tO(?eHO2zYd+9}s zO}?(szhMX^WLz#}0sPAn`~ju%7NO88fP@^ic+AR-wDzR;eDc{^nq zLD+UZCv!l*URaRAQ8_K3%MyJB)~KK)RhTd-?7A>7wek(I^~v77BF%!ZXq^lgdI~6gHZFFo__+??P&VPJMQoc!<6S6Xdc`l|l-c%Y+O80piJ@SS;F+_0-iX_x z8w_jeG03dU?bZiiBJ}H2MDbj{)835_K-{&H4&^_Q*GhDzbalKmL_}mcKZ$Ey%u+gr zVnLr24^BOJiowA7DiG4NC0U+GrU|0Ze}U)xMoV0r(R4Nr=t2#{fyM|B;m|1RYk{zW z?|}JXJ|`l#pT-}vJ`~F+Mu8Gz6qqfgz&A$Jp6Td&Y?Alem)mIG{r>SdeE^OmaJRbwAbe7EkG3O zi4}EHXkXZ9rny_>mYG`@f~QXQZ5z`Rm5pg zyc^uE$peNQD|V4z;c@lG6=^@H)KmUAt)|b+FQ12I`qYc`V|8|~@tA_%+xRKtNJCL@O{IIoE#0skbuX^jaxT@sZ zV@~)%yC5u3cl{tB%k?~Dm+_(I=i+T{ueEtEx{A#MKbp=$S=7`5LK@$^widr+vF^nJ zsVM!c@dZv(c{T|p$Hk2R@ATtNP62x&RoDsB@2M4BLkY={VmQJ767DA^LTfXp0~ zKnf)nn|nIYH-#O>1Y3?-Cj5R783tB?iwzJqnVH*_pR8HR^>e9Eq!S7=(}V<)`7U#h5q>r%Hw6_Mh#YCih@_4@Z6q&6+uEZ`ssS z)jwK60zgFk3W_A9Vz=0b09U6a93b!Az9yl(N$KmR1Z^{p)L5!|bG;k1rnwdmRMz;E z?=jO8;|ZF_i=$a41pkVeN>m}X>U-@lmPyrb;4JxP3u^yROaK*weg63uLuX)=U-3fy ziz@a=K#NuERwp%O;Uz+;7xh-lC5PCNyBXQ|Tr1^g*T-7!<1~fef2O??zdVC^+_OeQ zGLBEq1PASIxsQ`*s~f4GMVhp$(ml-D_jl-QKconU$Ph<&dA%8k+O>7YirjPWI!Hm} z9=gztLY_qb;#LB_)?%trvcj~}HUnSV+uA{}#YgkN!ngqNfq$wkJI0;tF`_Jf~Q| zUP2_^eh3DA$4~zZ9PV16YnAoOk)A*L?e@NB3QQuu5`{MPJ12tMBccdLdyzZyFOA-o z1l|x4S=oyJH+65@T=#jLdDhl`gWY|xJF_qD$Z{;ok}Q!FCE2kZ5Clm`00{%2D95z4 z2T#Ni0UQ{>Ap|PQCibLilB$`^zM9#0v@Jh7jvdFgGJdKeq3^Z7>ptkd`Y7>arZ$`1 zb;>aTob&(R4}JIDef8DdHIxrwxY9Nj2k`q8VDzBx%jYRd?>Z;l;PkaNZwbP;qmT%f zYk?cMoLqBt(gLkGTnyiK75$me{wUs9Kye(gvn;eks8rpuGy>}G5Vl@tXonCDHhOYx zwM10y28L%UQXxycE>Gp-f74F?-ZK$tgLr1w&))xIb*9)EZsh=V^JA99?kgCT`$Ud( zD@<|{QRO12nrv!s;(Zn1R_VSm6=xD@dQ7p^WUolE5Il%?>2H4>3#AhDRMC(5t9lkV zS=}`nKXJ2!y2q$_$v55(Z9jI^h9PaM@s>De@wk3S6`u*ASXPr47zgos`Sb{t7YcAe zj-lH?0eFtdIP}ryz6j7Wt}lvI#Q0_x+HAZ`I)n~=xvn5L6(_}wq=-auKwjhLQrk== z)$R{+$7KBsHw%g&=NJLcJrwX$d}r=`e2J1J%fPW>4tDeAxdq#tA1M1aEoj6bbhuf@D?@E93G@t9TYwDo&F3YX8ws$O)`73OK8Y>kjD{7wA z|Lu9Y@fE^oDhQGemO`M^<;X`y>Ae`_T?Nu&Ckb0&Ca0#=kGYL1z2W>7^{SxcNkIm# z@z;W4^eR*NR`UI^_3POOFLeDg*}#zETwrDs@LW2$-bY8Hf}27X$!11`-ej9d?S=Gy zsyz`4!rvM|*XHQIxQ2B-|I7dW9o6Q3*O$Ds+#m<{>W^T|K4NEgap(|X_%9^#bRBv0 zH#s(Mmo_M{yC}I3(?yd&bvW7%RmJ`BvUNE*FgT?m+Z9BbaX>eZrF*+&jej~{yzGni z?5dtJI(r(^xX8#_J1Si>Y0siui^1I!4`Jd-wPWxDdu?pemJBq`b@lcImVDh4Uy+db zM<5HAy?ETS&EEGhR>R3&Vj?7cP9djQ-$@i8{xpmJ&PiYyOmVh>D5#wq>pMEb{ak!b z;aWXr2r1)ZsyQ1 zulu4Kuz4h;Dfk6Ai04$j5 z8KC^2SP~8K__k$G*6+ldIrJ|BX9Vf0t44aG$9D)fi0sXfB77(sgvL6mykNt2kCU`& zikQ&hzdHS%A9U6%BzBJ@?E>S90oBsaz(&*sucN}juWge)?{=A^UTPMIFa|+7ucx?+ zVGCd)IrS7}=cHwWUaf&eaV&SLX?#L5j4Bdh#CzXywscda&RGR|@j*OfReF`5nElyd zsT0C(ZF$5{8dG9%p92G;a8yzdFzvd+_l=?aph@Yn(0rh-IW3aZR$`mhuyrWxly)AV z_;Kt5igv&F!1p)X15a~~wG_KNc3(wo#%nPv;=f~MGNka3_aZ&(g9{}$N7V<4(oDM-6q2L%pg z3DHB;`y=`5|A|+wE9z#{0msChHsHTgTmo)L=|RXJ!hLF36z|6zxXwo#U(XR zhqkbFRQGC7DjRQzN{+9T`V1=7I~-KM6}g6Xs!Ac{Ehrkk7jMOD;gHpW9|Y#O(z}rx za>?iSiYu+q7#f@VlDs_&ARq-dL#n-AP+?SfDb$w7gzfd2d`ls5ql1nu3rLPpf#y^X-jDeH(m_Qo?_A`o6y_cxZ2!(6{gu z&eN2AJ$O(U&6C(|SLHEPw1@jrAPFw(LcSwLL}FoR8b#geB_Mcw&4XOwmOlhuXBR5L zW=W|U7%-XG0h=R(`jDJ|L*`eGW=Iq>e(0qOV$trjCq8XCTiI7_l=xr|)mk|Bgk7(x zs^vC$it#0q!)c>Y$pWg+wtg?wJ!-s|)+iHsx3SisikK8rq40e&Wt9#PAGx}@1|y`@ zus(hGMtj3jB-qT0g{_}Ge|W&^b2Jx$LD*Xvtm2)DAY?dl}7I}B{V*y^^cwWgW|); z`hJe-2d6)z9fsb1*%o5h_*Z^@qGYq5S~ zA>-slgltgh#I=seQ23yXYjWf-##;ikS;!c3HD)Z=%gQuf5K)cjtGJ}DutKtk9R0UOrO+`6yfNZT~r70L{PvY zGkC>GL!rMT=_6jxv&!JS!QT^xwRta9B&91*M+J24?$RcOb3=FlxVhljhGH4Kj`aA= z6rtDIv5~2A6Lft~7L%3$*1H#d_2!j!Gai7a)8($sCm|C9J-1tQKwz-a6r7s1Dca!S zz22;&j%e#w;?V+zFkeYPO`4+`UrcPT7|y~Z`76YUj4Ve8<)iH%6-XTM+)pD7a{C9$ zv;QC-CE$^yT`ygPTSG9w4sKc$7TT5MBOG81skmc&lCmagaXkH0d)iYP?}+MH2y)2l zT9t%D*iW2gQ=n$~cs!RJ(p5{yfG7u00{X*aCO-XrC~{LWp+G;-PRvtjPeiLc6Rgjd ztSD9KOlZ8Ip?EJzDd~N}tGy79QZhgNgJbmxhraus$2X#gC4mLJ#(0kU+S%6_Koo@Q zH0|8)OI|JUz08@xc!&>$tGg&o`0hUwO!~X<(BJj@0;|US6%@G=Yl9|GHNTjOirg!g z;{DKsGM}b(EV>QTf6AvJ&lo)sU!mfjT6rZhrwV)-&^vwj<@RKZ!zKyE6t%tHjJO zn5QYFj|EpTZe(qcElf`MOHpj9sF@}N5D|xlic7Ji@Oe!GQGV+4rRjv&It4ephhWOk z$jg^@hOvAq!r(L~`OOA0=>l0(kOpS}O5uKEfA#7YY?C*S*aJFaQUX6-bNcYfXDtu& zSK8`zi;?QAJLF2Z41dMP_=!)qcQYCx`a2DsidsY@f#m#gMM-mZOEb%DW--w@$^xb$s9cQI{5h5kS59k!S9hMTFt_4u;HLK6@1$Ej@>;!%brOX^ANs z$?n*0p>XI2_?@8{KrV!G*0`bcgzlyv^WXnmE)PmlqVC-SmS{!~-I~s!i1tdzzykM3 zz3Y3kEsexFIDr|9O!MhaVB z@mkqhp&rnP6~GXC8a}g6ir_`adaC_qrK36`*em?b+Jo{mo%hk9E`J|KvV$(%`QELS zV%~>A`gbAW@^4^d#*e6t-;$H>NgZrX?ERdy=vzOCE#%wiPqRdovSgOd>m=%09y+xO z?HUssO_;>JIABN+*||ozzk||_ah*Q=Be4(S#~#-_{YA`C_fmCz)Wf2XOjXk0xA9tq zM7RPJGDuvPqea$Sbx$ZMzOz$OU0DXM8DMgwaN8#oY)7X~XqlcTZC9o+re)S=qZYtX z$KuXmi{W4H)y%!Q0!X=LMt2oZ@=`A-Af0F&%7dUonMBlz@JNmU?(c5bf~7c0n<`{D zEld+y9ezBLP%ghUaEi6^vyuiz#cXD9pysJ7JJj{z*DQ>TO`I_$<;F~T0(VgCHrM!K z>}Ur?#w9eNvnC1_=%IC6&&8>T`-bwPj2BKohabfYmfFo^X9MpZo`@|}8!mV0%^3(3 zfk+>R_4MIQcei5u%ehuWNu8@>^cdyK?bcj;liE72PCwUHR^xL@_~O9F_%6IydsLxG z_m3=J_&pSM3i*l^eEe@uf7ymUpNC}bcDFD-pb{seV!eN<-HAW(2O8Y_4g0-*n_MHI zEZ(>SVcduy8yGV}RWB^WEY5=LF$)B|v=_mI&DuOdXLr+cBfeA1)`-P_9M4!N&)CNr ztlf-6C6L%yv9MAlFh=4x{JI!iC#{}-5D&gc2j-Z>oA0)#GTRobkPzCp;&a#9!kp!d z8U~^t#ve%rPM{Gi$@Ur>_)5H3iLZkP1>2^{39`SDn)CGGXWF^=^a=tqf1^~W-{Nw_ zlPw7SGUsn^Gn37gA$L?*0o}f~R}ZTMj#iI-#eQ@C3y`B`Z2%XZq?%xI%Hq=~8`4)S z1;f2#j@Y@C8*{i`Oc+p7&V~PAN_dlRrKHCgO;}D)JBqx9157A*^T|AzyY- zNUj%FR-bAG#J*}CJZ#f$jdU|~Au2q!U!{I(5F8T6 zQR=sz#ONA!xVd?EN=t50xZhhdhpwEeG6S$<7kD2N=+M;;NYHeX`7F@jhsl~97pU>< z@-DiV{pwXUVj?14)Q)RQn68xGN(cUYd!?M&B}{?Z5=UpI6fC@@4#5SD1?j8~IyHP> zj`s>Ear>N3Rl8)tLX!gp6iK_%snR*B;k|Y*_ILr=4tc$T=ZmZ71wm87g$_BAH6xN7 z`Z~UW(gniZusK18`{6pB1}NEDug;G7*Hpbj>hnH;m?j2*HwcG#C*wpn+Au_01=~uj zt=EYq3$MOG402SK$9kFT?;ecz)B)t`KI?(1z+zYRx{_is$R8}l13L>{O+UOKy>Dus zSQS1M(Kv<)&HT|%4*!`P2YUtob^pTA@HiJx7B=T5fzSDxRQpnU!Ej55G4vrWkXQb|c0BQD{usYCa7kxL5%@n|pUfAFv>F-3B6q9!z*c z-Y!!T?fwV68_+gq1Z(85xF6F)KQ~tH-Rinac}v_7hQ%Vi@7{c|lahLUCn3 zg#1;ks6ypE77}+j600a=m`b(2!7sk(axuDeGq8)@OIfg(9PZRN+v%@k<$KYtot@kX z^c)O?t>Q4z9u}(tCZeP1s`Sv{V_7D8!#WxKb&Z7ll$x{y+5SC-9plI6|M1T|edC06)%un*Lwed_qb>OjFF!Fc@-P0adSXq!O$H zO%IvFPrz7!&Vj+|O}yCwFDVpnB5TysAw!BOVQ|Oaz`|0G5jfYLpo+}l#`+P1oi*%? zse~Xp5ujVfWa`GU$sSKe8()W!WePfX?6&uX&YjhWn-Yqve>Nh#i9yt2_Ro{#mUMG30tZf3xWX(^PW1_uxz_$s_Eq!QY?0PlF; z3}nmrH@-pvOw?ej!xLUuhR+nm&Wx{|Ywx|~;coSe+*00{Xn&7z$n}d+%OY1=cFdpn z{Zu%Yz`?r8Q0M)@RkW73%ReaWgNKv%BJmX{AU?IKW>D&$`$ElVx52eB$F8<5KS z$HL6`%a57|Q%&Ra$C&l;Bn{d4@CAxVSuEHP+6iOv?G%#~<5t>R>3*i_3Bv@!`B37iz@>EuJQ$bA6(p^Ne<0;RWx;Yk&{2SNK{=b;$F8 z!~N)&vG@3r*L-q?C3U7)Tzrys@cr>e15VHaZp7OdJJz@#LM&cA*lYEG83jNqbU?P- zB_HGU(f$;M#vXSfu4jNMqf0y#FCKkvl8N;*pGau=iVv?< zZ{aRQR}Xsr6?a5vGWZ0;%o5q+P_CB@Me%ac{$5oX4WiG-J_&hPx)nAOet-P)srK=B z!xa&pLN*BhpO3S}MTeDeKPG`e+_k=+O)%nOJn)n4nRuX5yNj1Nv$Qk^hP4uZ#*M03 zGiySz;~fx|RX93zjN(iN6vpTYF4}kyj#~{Z;Wi%^C=Kji>@BRva&upyqTQer^i&pY z>4Qg>E(-2$&&&3r;^h%bs2rQ?ZDGcOfoCc?k6$QRUK#U$<0p`-h<2|muod=|Is&om z^Gh|HjqlMR!1(J?+e$~63QyRDWrJ5(lGu`4TnfV!9VzTwNp3lSy!fDs!;P}p1OLuA ziOjqkvBGprdhbn7L-{nLyJpyKbBnRO<$RscYLK!X$y(sj875(lSe8)Lb!onMgIvfm z83>6PAwGusUVMc2o}sy4tO!(qmn^1Nk%MH>i{LbxYJkG6#0`mYX6=rSJA|tvWe|_V z_}KCJoG3rp9x+mNXUlnM{np|ySdS;U=-h%w$qS&4seNqT3G0B02a+WVJX#&B-ao5I zQp-!1P&5xQp$?PUaZ7nXdE4sWi9|rTJc6SeDjfrZomdB9<20qiacjBV2%*J2VX|D_ zmJo5t{S%o}rC|250_<2w`9j7iYGo`5X`91>lo0#+Td`xl8GpasW|nVQu)r3u++7;r zk6q3HZGj5+&cQnB4FkCeW9O(q@^T2nyvoy6CxH? zK?fRinl?USyFXvzyNa1i2ZI4P_sRpg6OM6OQ=n9#Ce6oZKiAS8>lupDDc&6Pk9uOo zEY)^&3JqID_j#|bwJS@p(n@75nW?lMZWQBOPj4Uq-tYSq_eLPpi!I~~G9=8E7O;u8 zFJmO$xl84TucY;Xa|bEWU1&}p-f2(8fLLZXpu|0&jY&Zd{Xu*5emt_9H>K+`1^I+7 zPthAV+51B2ics@YIp<5@3j9LduPj3NDr_cZW33&|3MRrcyXZchFso2mKE;tjf!X99 zGGa9h3h$9fOz+YZbH)@p*zo`;)CVB1ffWFylYs!B{VFOmp6rqfgBCn27NvZPO@T)7 z^cj}4teb1mE@8QPRhllvXib6ASqP=Qb)+-#{z!}E-PfDHT;qXJ{B^LNV5nV zWWN;>l$wFHyk{uT(mopt_V_Q_=`Ss3i*07M{xnMOLiBES(nmx5EWA$x(Fg|;>2Cu| z7nA%VEHW_~IlJ?>i2nCiG z(f)*@*bI@3rpr7t0ZN6~vpjv+fhk{pBw)cded}NVK2KR>) z{PcCENsrdzIgh{d=!d15loBqydb9#%$K#`zg3P%XyT_Ot%+^al^4|!Iv?HqVt;gS@ z$>-^>LLz|rW7A1_9j54XvqNZ?|9Yd1J!-rW@&w{%?hv-a!gRaMuU?Ngitt2>J2CIvMF1TmwJRRST`6;R}FP@TpI zog3c~D1cQ2RuV6s@c0XgrQ!=y0(nHk%GL( z1*V0LF3cmWn0MQgNf#i73nL^nYUj;N6722$Q^%a_I!|k2;BlqJ^U&$%%fJY>mPL|} z6`L#`eQ(t5zu%ZyZ8u}$*U{6(MJQVmX`|fnQa1u z3oUWncH-+$E)lkvdUqgwAQP?6_gk^ll_7YhK4PI?Ysp>0ce`^qx>OIrx@#{i?zH9O0v7z<=I#xlU7ldGJsgjI(Bee)Q3u&Vz}pX z@$oFXXC6qA7d|eG#THBNJLuZ~J!DW+^Q4AlETGs}S^)3$774w2e?cV_*fpY zOZ?P*1+cgQ0EQdY4y1T8LAMyF>c=I?3+y4U^6jHmPOD56(Ue1}p1247iZ(L?>Cf2d zevPc()Kl>92+jXCX1k9ip{h1<)Ua-E)R|A!#R6YZ%?j@aDppWL%z)31@nN(&EC1ktW^m~kX&SFum)22R-I1Y0iT#87;sN*O1| zh}AA~jVARFmTtAn3!WGYiTzU2aPWVCJi1cIJGtM&7d#OB3g)X#^@DV^5rB_hP%>NC zgHdhStW?*CqoEM+sMKe`odfqE(L=FEk5;*PB}_`t6eW;wlBycV3n#VCIOIOT&?WDa zUU)Fv&)2S^muko7*XG(6iz4X7UPj7Z%v**SlY-d^RbEq?DFPp&K$y-D7Ac179khsP z63isr5i&@L`Qah+i|@*VC|nU*@np&cXy1A7veXk;l!M)Xzv^`3g;L}-?WA!}maP3} zsrJn{$2n?6`%5-E0e2O!N%>ah#6pbn^dW5H5bhbg1;4c;Rq-cy2bbbI?Cv0+_8z?0 zPg)OsVJsWZF30J^PqdGRz<;5AA)W_T@N)i}J}8#I2}w)s;l0^hikK}O`3;fa$l~Q; zulQ4RYg7V+;$Z6PF1{L`A%vxR|n*OI~w^{rYL zRTtKypLi`W{xQwpDUSZ6gD59C-moD}T5Rx@;X9?GOOKbA2CeM%;4Tkk8$vixo`Xbl z&I$$avG}uEB&@_-=h&?deZ<>U`)*h|!DD<8FFY(p(oK#h=BrQTilB5-%*&a^Nu$xC z1({23x3DtBQ*bXNQO4}^WyCj5HJWXT6|JbrAhDp8Nww>koGK6$g{IWlvY0(AcT{gz zl`Qc6s{-+OS}azq4`rL^&&w}88o)a|l6axuro4M^3ulR=cGOB=D-gZJMgcx_qxgx3 z#LitAc*1}*HyYLR(hJ@mYW)-iPA8SUQcjCQ#L`2o&Rbt8PO%R&D=W3%Ckrz*F-!vD z!dBPhOLf<^GRRTK8Sn#`$ha3c!G&0oePyV|I}t`qsUpsVp}1o_pBwGkthK-~h#|J9 zEnS+UV{OKxRk9>`;tPZ;%u<|h8B}-CMVEb04L-&N0MeCM9PN1sH!;)`O2C0udN7-N z*n9vKMfkZXz>x}>5L6&BkX~;_u$DDl4>ZZNOz-x!8ZLvvPieZ+A_I9Hko=lgn(!mJ zhc<_$^-z2SL(WekWsWuSnh{~GH)7F$(VL9Tqx_E7_z0zZOthfkyR zj}vvS{a(Bd<8HX)Md2=)_-4AGVqU~t0LtT-O`xrMSat^EJ(1{b5Rnc>SgDMG^55W8 zN(t~lvEKBdc#Dj;m$Dh@UD<;NY0bc-6=^I7K?rqQ<;}g2XZ#@pX{a~O*uiF|)?h58 zx<(!0pq7f?OX58FdO@)YZAn{s{jm05IlB+br7Nq2+tge@JYbAy$}xDK9{)$`zW5bt z#;OiU2|zEiAn=Pg7c1I=gmpiFq=Aj%L@YrL#0T}?mpNZq_fu)%b0r^EkUKAP>BeguP=EI_ zx1cdB4)3T$upsr7BD<)U+~$f1Z4_Yw*8=!*4@0UzU?ugD#v1y4>7lY|0tboP7jr6zmk3l{=xda z&9Wz}ZGLesFTKB{COH2m@?!tLSOHWec5!S3jy!QzxyHZrulDe9r9BJnraQ;I+C|6! zvWTId`WDj^Qzc%aGcp{-MBz3UwJI~E7gtEjNuX$&OUgKHMM_7oG19DG$rbe-hdNfd z&3@n58JYa9bFo5|bYE-lZtBMsn0qlqwk-=;pF8&{>Ki;87thn}Gv4`qb$zc2^2s}e zQ$*5Wj+}}B1Q*LSrSx$19O*@j{luODWGG1iI4NN#+FrtXj480_fSki5io($@M`ESj zT8s%%EGkVR1Qydr92Tz{EDrj0%4M!iAhrcYDjw|dsgCAU-TotT4#*X<(az($RaBl% z-UF8C8h4c`94kas7ULi&5k1p9ZxG(~3ws5d{WLC#;1SdJMrATXJ#L zKT#m(hNmVMgCY3(>osP8og9`>ypf3QD9dKj@B`o5X!!z$`cz7!n)H3sf-j$~XQOUz z6kYHTCGc=UWab|+qB)XGMgjt3z-mwBj#^y)AO30lNf**rGP4bW5qdK56;Wu`6FLGL zD$%Of6~l`?=!v_JzTqEnw@pK#L`Lm)A*K4H-k|YaJfBqTr@#Ev$6`4Ivy2K+_*FTZ z&WWYC(A;vIMPlG(&*>5_q!EC{r?ETQNQUkT%jXGvSrs74vw)jZ6z;q2z0df=vlyQc z4r-DyrI5jWbBgM#l9ns5F(*G}54>n1gJ?wq3lw)XdSXwIm>0Ka66D%InV=!e`*9ww zx62-vGI~%m2KH6QgqzMJ7OIMxMkVUv=5CA&s%ouWhCkUOD8Bb636w_eWx?_NoaSv3 zwO8lzajM-AlQ@eL7nqCu8e)cH(zw#bk}2ofMVQ}HB1KrO?w5!HV=2_w_?HV>&4O$#7Af(FOd5!M-x|MsVNb5D<>w8KF%U6$stHFO2D*JJ+6$e-n^;#gF2! zkQxT8Sjri0pKO5Pj(Kf-=R!MQ(kZy-DRJLUP*?Frd~S3jew@W^{;U*eDkIc(ijxRD zQ}_w7tC$O!VK{4X+Qng}o0LZkPRJoqeW3gTPd-Y;f0ykzENX6kWvYG(YRIg+XDnNs$GKINf;DgDO*uE@2KZN98T@-0nG21uq*iDuLfnuJt%7_(A zJkK-5##rA$jO~(fs8CnM3#R>p-1S%qU3!CD32DaRS{ym0jr=$^l+qeSv9Mn7uTT#4 z&YhkTkxK++y^z*ap^Ba92Dx`#ksAE>TF+@6TSgG|-T2fM8eC!fS96@Q810K*p&BLn z#c|{Vk?`{``G0NlvRE<B4r=MZr!|c zi*gz9%pS+H3Is#po{gF}H6mJtkta zPDruOq9X5!=Zw0M>gpu;B9MntRt~YCTgPeUqm>@SYA&D*Ea@U`>xQgxZ`CV7&EWge z7&}f$r`$+ed6fy>(!!nb#!7)({07{@_vSj8CxCf`L#j2+4RK)L?D2QnqaRsEYi4#I zyV;Iav0hH}tL@bol)##f-g`pP*RxV`s2PcqyHiLgP@P!m9k8DeiH@=tP=_1a;jq(( zWIf+aTz#y%SCzO88iU6WD>LHhBynOJmEIPREyR*ROk?o9?CgLR=l%tapfJ{#QhtxyM;XLYEfJ^I%O!^Rx5UkiyBnirgM~fXbX_8{3SK%)S#-_~S36I0# zibudx;uV!hj30vu8Osbxk?4I`fos!C#h!<<#E5O zT5({s&)8GC6}&!pG=+k)O?-{e3#!nqgmAOdW?#i0kDZ(Emf%LZ9T3e>Ns5rhiU`Nc z<1}-*&02UNzOfuzC7RsLfvE&36wn4{K)RtS6q(Tmy^T!2skxkQ=g+6aU2HGLYC&G@ z89Ib_V`%Dkk4pD0dqdqWowg4_Hkb16QK0msEeg3&?CjxFUHtL)UsDN%#U7#ebX(Fm@}BK zvOE0=XkMMLowR)k`Eb1yT*u=Zmb>Q`(RF1-#k>~g+UqfJ1@4chpTj@$Ie|R8AMaXfgv;ZH@q_lDm`^=y+uJR~O?AC3#y{uV ztMN~gU}IsHbmA)i5n)iI8^>$g^S_z4}jctCU@+yAsEYYK!$YV-A{VA5iyF6L&=ued1MHDOnD!Fhjaw) zh3d9}_7glVcM4Vwl$m%aXHq=L@&q|MAoAA8@;|A%F#T?RgJzkMYR>ZgqAUq#q6_&% zEGe$vhkq8!k9vSf8KdYO5AC@02syU>@1-a3yYYw)@q4hWDj2c?b-D2ZbJ*>87rKE6 z{%>QmsJK}YW^bT;jyLa;r5%5#f9fT#&a5ahXk2f?#6$puit`S26kMAs7%^3$(6*q( zPb}GFs_OaU5EfLrLV-mcUZwFI7(d;KVmuQ5c=GAPm)eWZd-CYmQI8^i5_0j$SbC{;A1ix5)1GwkUx*;p@`cL&AH;X}GU z)3{?Ls(U~kLN1kf!748CZoC=e|7EX-vJqHOuZOO+`X0iEmEVjx{CAz49RpkB^9Px~ z2#opouPt+H!*$w9RZ52ZGUcDdXr8~=Ua=JPI=MU$UEyEi;xZfHY=@TRZt){FoCkia zn<;)&5;rC6y-B!dGR_>ko0axJw-jI$)INi2162hn-yiRB!}88df#9rAhs|wZDXu9s z6Z4Ws>2)B6P91_;B?aU~mHSd@pFVt|y%}FdCiA9~%!K zqH)9`_!q@M|G)RP5CY|fV&sN_veil^%&K06>lWp+TN6 zjouanONHA3aDzSuWyQzx6Ueb(4F-AGu|3q*(nEU<=qoi2x8{Kpy@)CnPe&IO71XBh z)iaN?vWZnLD-E-&SKIuuCHHWb^mT!qvFI`qMxFueF6|K=M*SUZL|zIK7T-C2_w;v&bMlQmtsdYp5aFbL1AfA=jaial8}0ZFCe)w1-KRL zWU}~m$`9)IKpo%9$z{Z7sdpt&{Jm6m6pMGO5as1Jw8sB@CcwX|4qIKWvolw2znONB zX1c=1QyGk)y2Sf1MGGzn3o+MH(kQ(h6Yp&lES?HN?q$cBC9cu?QsiD{M1zMP9KIH3 z@E;Tj{BJ#Zd8*=wV~;$D;Ym7Qu7^r>UsVB`P^kw+j9wA7{LLAqd4G@=p|pEEQyGaj zLtODm75TDYEDL+6jBHQ_6m1EXiHqH>o#HyoU@#Wn4l@k1Dqgrox7IwfpQgXDBN-LK z5RMhYq8*1Qs-8JYW75Bl{VA?q4;|Lb1mTk2PGO3++aRa>4Yyvr1D8noDVFIusu}qw z@*1*=2CVli5jL}TqI)h@pWN_6!a7rE=2dx1AbdVSG6wtI;^$K%ES(pge=#0N>J3a8 z7Pxp$kd>Kt!m*PmWF?$zp+Ykwi>V4Qe7;Crbaz-%b16gvdoQh)r8GzGM;qJW}FJ9q~+DT7mOP)1ONUX*r2@w(Yc2jg6gE{+1KKI<6#(!gU z%UWHV?32=loWqI}5GPab0{fFAS-=`&>r-%MH z?*pPrGUMG6vm0!XVjvkT()tcXU!>$^PQ-&|;FatYp3a=^0a6C9=y5ek1?Mv*OTxv|bqzTZoQ8DzPviZZ&aFL*%|yxu7s?Z@SGI zGI>xMtFVguMZRWxFd+^X(c1T^Wf5~{jo)e8@l#)j0vpXJptMs%$z8%T#b}8`9pA+} zrVpfNsi@A;2>N8~5Ji6ptz+JK(FlmC><8vvd`S7G1hXpx6S0)KV9ER;1}&D8?<1A* z<|rO$tg(iGheri}rk1BvsJ1@N1Z00Q6Kb3`sC34tLDG~Aof}W-5MXVeA}Hj&=&ol) z1~Pnf%`|R~_u9F09xG9(4j2*MFWUsw0qKd=nfYI*kxpqQy*%4VF} zbq+VzV$9`>Fc7a@UyUC-PyU6{cLKs~>R8Ym!UB6GoO!7H$n{cE{t+8KjG$ z2>MduajJwmp~|Gmrxey#^Bny{De)^5c|5uhz{@`s|kwm3CHHUNo9{=Mi@R$A;Oka$T zSRqhhorSPIDdYB$|Fr&dY&8_MbnidY{vc*fsU;AXc&3v5Pzo{YN%4;oIGb-XH{zQU z5HrO~g}OOlFpJ%AhcMU7%AC(QRs^IAVW07a(}y6PVzb3lPaoph=1up)1=2*l05>?_ zRS!YE$FuZtQpF&xNz8c&V>`|%DAh0xGU);`*y3+$CsKSI>h>gkLDg!NuJUV-n9_PM zR0|y6FDB*?k5ki?Li{Ix9Br6J=}K>QfR^yOOb|K}M2FUQ6#kJ{-`gj6aWF;qV|FCX zCiEpt?8$e%5}<<}Lye78y`l7KGT(-rQ85IJGWjgUGnnblwf4w^cuJzrgNmipE2{xsv=kX5Sf5FmBndZTyIzCKCn}Y-K?pnAVO0f z)N^p3iOKd#xHgMtAaz3W^~e@DljsA*VPYN%lYZbey*506x)Z}>wV<_GWL0#T)G=qG z&d_}pW?ZR^2vv?Nw-_Eb8=V6Xr8s;?7)h+pR09!U{$lWR47n-}(tkOlmbsZJUVFC7 zAS=97QozsYRN%zzq+ho!BI_d>Q%B`D&+?CWf2<**t@bcpv|x#`>LEqonR|D~9Nkz& z5uUOZ>3i+tA^z9eY+IKsd3+1;cD(w4cv46OQ*|3C~J}bwP+{ zDP)l44B%L8urXFFS+Sx_f)EyZmF|*W2m0Wo%MYNFso=NTuGbI_rY;>hapqSrm6BpW zh&7YoZcj>Q`z2t|s}{J+n57mD5W2G~um&@(s$~0IEXJhFMqW8sEmc`=k{9b!2hC$d32B+^63a$A1z>q=U)(tDdHbrs!^uG@KFE$(_C(BRH zZXbwZ%wdc7=#J3ojR9&6?|GNR?7=*Ro4Q_V=B{8E?F{b^@&pM5#E(#0z>T?oP8=y# zn7Am0b7^M7`$Xkef>%s*rfqG-GzbG3Nmms3+p*i2p+u_VJL_#f2|09NC`HsDlR*ux z>FW^sX>3{`cQ#;hLlmnKG6Jq2kX*b^WvhI@pbhT2T)D`~#eqXcF;7bt0TzSMV|n7f z)|WS7D-}#1X*J#LQmK=xsGkhnyi|K;UtSl_QvvfupCKHevl|xE%!5aXteaPhXEN#K z*l_@V3OwP3SkmpbkzgirA>|yxCQA?C`u!jb!o#Hb#~}jR>7yn<2rPmd9=k8T=GY*n z@FceXL5BGh#K0Q!c;M2Ntz4nHGD}$Q5R8v>Voo2vLDiCy^uEG%0dd%O%ynUnRHMmL zyfY+SFy=c$_w*1uw3khKH4uYmVimbY1PPI0C|`>+@^E6Hf5dA4m;5n?uB_D`dZXZQ z(+4PS7w9|d>!7BEDmJNtsEno9B}xQQ#O|B^&enl;`&(Xs8BG6^wtxzXt%thXg+GQJgohFPgC&$Q&n;A&2lO(|iF+btBRMoR zpFp#mP~m<1cJ~~XBq+Ma1~x|%EGtf>Uyv%)3r+g$ZsR_a4pri0ghz?A$5^rTJ{e1+ zt74qynMzRF0;ln!Qpe+?tn#mFE$B%tj#8E#ZHX#5>NNf`=xYtAH)DTP=&#U=@)Nz* zs1Xbda2DadJ{mZDnEoKUme>)I@is)JzL$OyA3>J^NruFo zK76J<`DC0qRd2!DJ1Y8Oh8@INiO+L=v*4jA)HHqbAft23n;ezOir*n7I;{PPk^LAy zYuRNmeg;m~HJ63VAAgSm=OG!?(O8bHL5GotLgHxJlMucxSUK%&-er<>;V!^DmK)FR zyqDNJ!3N3Sk*?W_St-a^xR7L+Kl)z$4f~jYXTra?R%#mY;pR{+ZY!~Dz1O}>$5U51 zSKwiR4Ue};2F8-{9^jYCB#(ji+$OIQrZJXJjOX#UKm5~n`Wv6YSFt>xv^zx717hph zMd46nX1_~$H277q&d*RVHeR)lil0^z0%$o&m2mZLLz(|Pz5<$zt~=b0q3fr-kZEfq zuC;l30HQlqv}a+Ge&%9!y>6RrT7?`-6+lkn)>dy~6vKasOc?9;D`AdQ3hto2lf?Ql znx9+3tFbdAhH2MYL45*5W%uX=PS#$^u&CmLof@w>Bw0&IQt72mOd74D7ioo73=0dM zI!!hA$w>paHhM=TNl@&P@1{xsd*NWL))u1_7~F{!7o@XbX`l-H#ANcSh~Eh|tk9}Y z)WmVFGhZTxQro&j9llTmy^3o&lPiRkxU$o;7Og~Fw1O^8lC;PGN^R0{j||qorS9o5 z!^QTR_ho?f%%WO_Q`C^Ile&%MDSAv7+Vd~QPs(23Pg76Ps>{9x4>x<+ZQ0~TC_D5O zvV>@qV(PlAz_|=FUZ8K#g?N?pjVt%VLJ~9EyUK9NtGz@4Qy0vz0LLBOrzuyc1It2p5^Wkw%53L@|>p&uCV!{t8Fe_X;(dvYrKfc z3Vse&J9mWTmy1oX6dHG@cy^q1rOV6rig_;(>Vl%+C$Vm*%lNZ+twgUv1m0+0^e1J| znK8D&di(tf)t^~32?MJW%5(m@>Vgb1w)pt_1OR;`Sbc)?9hHpTf4Y6@>DXOTQwIkH zAsK8i&Tjtu0F70NZ+|~gmdAgCCHLW<#Q?a3zbou2ekSLo6RkraKYR9{Hu+y~D|8wm zx%j6sn(JVU)<9&+V7M9m>mF7bo7f}lO|0jiw5Q@B!mfsizMVnsI#1s9!xJ$!24;qII#TaGG4T|`KAnhdN zBA^1Du%3DrX~&gB!pp6{gsOqyLF@8l_VOCVf;jXZ<|-{I8>v~@P6o`s(`<>`yMPu( zL0V#BFr81@1(d~awA1fe7=VefJddUj267L2f6SO&M~l;tgzK`Iu+}8}cG2>Au*o(P z``)NsAF0s_;9AD~Hbe_RRF*O6dP-!a-?J}=t1cGQ-*U;4b`=jm{_%Pl2N@NEv_k~v ze%FWYj4J`bx7q_Dgxwv-B&h;~f{xb{QmU;yFgrLid!rpsbZbD%CRLQEK_wU-2b*TB z(vP>@D^~CAsUncjm&YORueHnZYT|otamO9+(BbNGyOsE#;tRao5REFBTt!EHxsCKX*RgOCQ-*h9Y=BMt{Jmf>;t?k)QESBF*R{ zXRBd=z2wC@+&=5@=*8l@O3{l)Dbl-9fHE`@E<=yj`Y{KpHb(E(%qGGWlfJK|>Q`mv zc8kE@lc$C|UrQAWar1qzYv9NJyed`nN5nb;uUcxl8}BoYZ;Ae~dZ4m%0U%J7c#nn) zp|(&oA=VS+#U5_OU2}=j-Q`d6J^bSWEX6E<$mzy+jY~tdJ26r^HUXyKUkB^vXDSxr zwU-S;cr(@>Sh|Ea`kD%Si^)TdY{R&(P&K43+VPtdk|@pe6vYPss^%W_MAlQ7XFTN) z)MSfyc*)5OkyE=@Ds=b8JN%|Fq}4J$)%v_RH2tPPiN_Ms&o$FZx=R{5;I^yhDkmFq zc+5{%;4P1YZcoVA6cn^B)a$3Q6?hW@AmZy7tIyu?*D+f}NvRjHs@=zzrC1nlEWPlt znbmldx)3dUn`lywZ(J@midXc+;h57}+m3&JtQN^V-(JWDk?KQtcQ*@SXtF>vC9~^W zSSMEg%7O$8MPy@88e-A|6oab33cKAY8{J&iokP0bj&^qpIoqA+_j%kR(7V2gv8Dex{dP!Rw}q$5mMnsy;YsJn zK(cggdq3v{Y@r~C$Uxa6}<_iEWF9ISf1`(e}z&^ zDG|i;Yk7RS7<&OJEU=rFn-Fv$b4qNc;}F59@7Y^ISFH<)nN-*Cn(RuzzZZi-ndq3W zmy2mvN#)1eIHLa23>8qe3)yFvPzZNL-faZ;YEGf5l?|~GGCD&BZn?dMCbVQ%5~)$S z8q45~b~}Ec2+)Ur8k-FMdw56(1WD}SdkMn-w-TKH?|r`2ug5AXSc<>rgEYSktQeEv zU>_vg`Dg$YH>9hZHQ8lh>3Um=zmRFkA&DobhDbV0C~eMHLYR;d+Lxd5sYXlkO>x5G zSt_^n?i~vg=gY@c><=wyb>arpHxfXETzKsXG#+soOtThAIae-1yr~zIDeqOfU91t> z2xc5?`%q)c?Xu4`#tD$Ep5D)OeCftYTVWV>qDNFo;j=z>yA%ZD;5oKUJs2ei#9MaT zJ6@X^($WxHPz3+(cBVL4r-?nWPH6%k06ZsR)c@0&(1qs~|0@s9--d48$uqGk*gIIS zej|)b0fc~R{tj(Z$!VxL6}UQ`{95jW9@T_7>R}z>jP0csz~DrQaGizRzLj1)P)anHX=m@Q_s0Kw30T%(}(6T0b zlVbdgN-kju`*h@DA19qu&UlA}3wJtx?Cq1BaiwJSa>0tDcq2XvNnW&d4+ba{lon9M zDP25$l-su?gr!o4F&X&=wCOkwore52hEOafT{-Z?EJpZe3XrGwf4?ORGq2Lg2Sv}L z`X@MLLh3i#W}*mmYv9qbiBu@o-Ib+2`qe5>8bxElRtY?Llhq)aZ&&6#e0oHI1*JWO zCA(9SDx&BtTUfoQ6=flNB-jU7im?K6WnRfVD~=jErg&h~?Wky)dU@sBDZq5@8IMgA z7cRp11&PWiJgAegpTd2~;){XwPSPy3|2)^OU0wE%%6%+xvL#tPB5R~rf3g-@gpVPp zBX32SGNixzaTs^wG@9mKr;4lZdWHW*$dg1{SHfOFmeZA|@UrvTHcwcWI8Be2LmLz!S8_?|FRiA59AuP?b(HKH6+_TBy@smzTjsG!0X5s)vtv2~ zPq`o}?DD#=8ve?W*d6Rx;+5XD15jO4+UdVa|FlT~nsOK7O}`V*qF`D#G_jCka5{>m z;{hNJzaX(G?y+kviH*V)WC6sAAhvQ+c$n87`)XsuJaQbhq!B3`g-gtLVmP8cZb_xv zGVY*={if$B!90ctNIkaqa zsOn-Y54lpmZl^!9Y>*v6RTNq8gZ+dhU^74@HH_Y;2p!&Zvb zEGUpt{5SBwS8_mKhyHc?w{e6Bo7r5Grnu~>_5j#Uan+gm-sqS>kFftZ3#!0>=MQ{a z40f0;(f;uP_4C?-_{OyI+uf=zlc}nLwty}byT$14KRn)b&tQt z>>hnLzDvNpbPJZ-pY|*Vtg@=;AP(9fBhhD(s!*NZHv}gx`>islOwor48>p*5yA6O5 zY3xi|x|vIg7xVR&0aPwM;c>S6uC&)<1be7fsy^~A?AJU{*W0aFxzmU9Eu+GpIM>dV z>eZLoSrxfT)PWXl&zCWyc{^pI&}vcg3I(A{5+xU#h(!q1uSD(GRN^1x?_|L)R}%47 zL1>_?eI4x^@dJxrgFQ!L%MRi-0vs)d>o~hvTQiN z-oD-&5j)$@zYCR@Y$$((>NHq1ck?5?v8GrVG58)qv&1W$v^A+k7&CbG+4h7VxFID! z1ry7GDqsP%KdQkc14RknTn>JV?n>507iEm&^x>D=6W-H)vqNfeAMVFgL;XpN2~cIt zkHaxIQ2ImZ^UP+07lZbt9j;hwFF<2@I5dLDkcHx9E#yzrRcY8&K5b^5TkOq#BBCq&K4UOEUc zdLsq8GszzP%wwAam8uEZHz;p8<3Dp%L86M`Fy@Ps z0v2j*pVzDex02aqoK?^1wdT_k_(dAhauyy0}TEW8B$Wx9woqRssZ**exuIenZT zhYXcnROM-@Ezfz;FC$SKnN&%|&e(k_=3Mm5XLa80Vp;fC6mwy@5E#Fi!g+FR;xh^r zDBzDg$FG#rilszt{SuT=1;D8?0*Bim1RDhA;uNf7L5@lux1b7}Op{7+g$Tfh*S);t z-)M*OiV#1Yqi2JDrF($s>0t$N{iKeja^Z!TB6rPyW~lZGb;R55T8N$!6%+1xiVLJ9 zzkoi=szmLjGF?V4P{mdvT0aV>X~kmdSnF6Tc3MdpJyC(l1=^v3K;+Nzx?tUnAWnrLOyORlSUUa zAY67a_Nzy*QZ71Q)qTpY2@_*4+`MBEtSTWFNtMG|s$Nzq9AfOKY&iim&vCu&6%?mu z6_FCIYu?AS*Sc0%!>VFcg>v!~fzHq+sU-Po3w(FdiD44SOFAenIV_s8Hsp%yHjA~{ z;Y{WVbYG$}Y}MGIqL63BY^7IYJqhN{`0ag%Jdx7svnc%iX-qyE$_)u3k1wuP= z7?1xP^74AxxD+Qk{ZVY0@*5Ab-OM4Ve}TcI;xC*JLDI2)dz@wlv2+*Klhm7XiTBPG z#PJV}!&#jG_c2S|XPzZsfKF73?_#@oB|dpfRKpueJcTW$ELn`7yPR9c+xxc8Ngk6< zwl6A?OKn_i$Q>1ebS4#RA){}UUsq`NFcAlcS&9^CCbwHy>!8WClvElYhr+| zY9`zh=n&slp{bk20|v^(-H9pRd9!^fo~%+k!;%hv`tS=iY#oj`r&;?_;dc z-qkz0BBv((64XJquEa`xC03cm8EWhQ-d|khPH`QC3AHMVz)y&S9{2TjWx-$F;;U|S zE329iN;!PPUI3~fb@QDyM)Nx_*sNH+1A70(9jCbZYknhYAqmo;tF+og8e(&08wKdM z-rn{jzSQ1~DZ`kbG*^jn&ngGG2(J-J_ zxZI26Y)~vr2(87LYioauVXRuVA;1b!5SHp$4)Gki#9xd_m5eKLN;i*<>2-FQA_z6& z$L_tzJ>n5!xv>fVV_Ijl%jKT!88W&-Z4hF1q~=we49}tjduURlI31?0HLu!d;t0l} z?sS6p#VUCJ^si$81I*DKtSWEJ?KTth#AzrMG-lh4l?WN0K76aa^^yO?cCsIc{&8(6 zc9$+x`!MI?tzyVk$bv+PN8gBX;$4x9xUEuL_tGo^Dk%pxL%In#FF`P*8beG2tDv%L zuWWMj(@|C{8XtL%px~Ecrnk{qv7=~x3-=eHD#SPBYhShys^!wRJ!!5aDBgKHba%|w zDpA7o@mc5%Y{P$e^y7HefR3ZY#$t6~M97@VNA)zBy-|#HWwoV$yFx>#cUluH-K`x!QiOz^cZOQ@&KP`4UHe80`e+AyQ*fu2Jq)+qqKeu3-1-T zYqvPk=i9}?M7>U0F_3}MVtU)Q-%-fYC>~PH8lj) z;wd3LsxVV57?o$>bmpCmgNYiB5rN7XqU97iI7ailLi_ht-#q}Lo$QxY7utu-rl4I4 ziNYl)y@N7#I?z)cyq}FCav%cxIXILcj1a$!N(U;6D;O!3y#tW|0db11`ifv_+HRT= zfIr|OTebT4VJ}u)4RID*)W;$y!m!G{^3*5VbCydWao3HO9k*PnyinYqrB|%7On|g9 zEJ%ur6_X3IVecd@jTLSK!V|HWa`V{WzD%)8RLZ{*+q=(^Ey?P8y?>Jys8Uh3Ff-H$ z3t%k<&jnrm&)KDRE0%P^j5^F+5cq35OQj_YK4Xiua!eFCAG*Hw4Pn!;x%%k+cSj91!=|SLaRu4Fl5#vcCXO5d?|3E7 z;o&_G8|8&a)N?zB=Qqp=f3e-X6-B6m(G>rCmYY)8O+9vfVCo^8HY9jGN~XAqW~`(G zO{gI)BFr?>ue}!1S>D4r?wFzJ3bIE^(ElvblR3Z&i4+|zpp%msD=@_G%WDND!cAyH z@wcm2;Z9gG7buB!d46Gj^^39S@XPqR6MnaFLo$`}@ps#!UwduINrUn0wY@4kgyR&? z;@#Ays$FXj$Lk$#!mx@%DmMQ?B}j@^H_U(v9-%U%tcyXcq9IQR4W9b>m>~MZM*(^l zvl*w&aTz~W;+_{5RjP=Gl$BPtu+*ljqV_IsME`_osuofmi3(y}V|M5&y)&0t^j@j+c=^rSoT@No-fHK(cPn(J_tZMi33o9M zeut$1V~Tx+KL>STXRK?^vSzw^?%OV~mu{9Ky|W?_9JveYt&9K5^Y({_w59-%ZnDwXp@SAuD7^L>H_>1c&N24Riw!?L+0T|%0pAcXW zC)sJ9GNAWMK1(v;3Wz7lQUID5ht;uC6jQ~OjM^_IP0T^nxT7;tW-LQV}8ck=vY+#sj&UQ%R#n)l$fh z0}<9Nt6w}1Q&KAvGku+lpC+X7I1VrHd$)_0a5@Tsuy6i&tSx%DB z6wbirJL{Vw-c&D*+lsh#ZW9GMDJ1?^r+?$qeT@PVCoGyBsox>jg{3dK=LvVk_e?R#oIcjF!*`oEHQa>VU_D)5jNT(Kt96S@c$N zt4yqTfB>eRG#M|z8xRjNmK$6GKWHbp5`yGQfPF44qd1MLQ~d?kse%PMrz*ZV1voRh zdpzRK^#n8aZ|*AHHTh$u6eO*z{Hs7lbMZ$3y~EV)_}UnFF+O-17yVek zOvIq3InUmtGPLEdS1FNLgot%oxnFdrz4fK|6A+_A#0nwL&iYN1a-v?)L0(VzVdD%? zq3hKZH6-Fn`$7yCF@47mxvD4^$1QeGyu7K(wq ziTAzN{vbYh4$9CuF9GflYsAsAT;95eS^<)C?ME2mc!_4tU==?8x2L}>P}1zA5ts31 z^(*e+M6Bi-#Lv;O=XRu&m6}vMqZ%7$C|GVN3z^i>L$vOCxkKCq`d7SbMt0oOcZ+@i@h)GY8&{$MOSm7H zozz8JEd++J#d=CbEF+b;R#yB8Nd+_t@q<11NgeVW9L;>f?GQqA2q4$%^C{qKF`zvs z!gNv;@WJK~q?zoaR6GN`kjgeh;si~HJm5~F@v}qC0{&iFXBS^~k1?(>QF8t6ep7(U z`!{fG=<{MMw410QXqN>srkjkgW}Kqqnz2-%(}NTtB_oyFai*;-87@?|(_oF;m?LQ? zzH39D`=bFi!{CHKRlGn}(R@rEnjHtO*v*W^Cey0Y?2GDRW5qJ`(>XkZs$~e-%fso2 zCcd&A$_{f^^0Su<+yD$@Cog<4*~@C8eF?EtCK-muhW+my0o_hcmkE}RJt8Ahw`TpQ zkbyb^#?&8w?ZdC3ibDX=AA(*>3XmqE>s_-5v7~SG3qGD0#tbll*VoxO&kl=Ep@)2d z^bSH?g5R{0RQ3bH`O%`2y_Q9Wk-Pl&G$E$z#m6YYOg|cLq$iBM^OMef_9(7_k;CCj zYe2s0FXI_XdVuZJE9%9vblG`@mY4hk7Ry{U?FKZ;$VJI6}QXW|7_ zbfFj5%j2Me97&oLY+9L8BnP)nR*a`DVxNNSdZbrazx|y-DXlU`aF6AZ)WkXqQ&A59 zp?z@-_b>troAz}+@L;UU2Jr!*lBo!0x%`tK4P#Vn*rS1KBvCr_yZe#joF@X9J7W39 zcTXSEgRwvbtVj=C`|nVCN-L68aS_UK0;B_|sLh|}C(#sck=mM@&QSoyefe|tEZ0vh zup)uq%@h6d^Q|;`fzbfASnOJPnc%*Oe<&xamO`Z9!vV&3%tHI{Zr1CcT%++fFj$zo zA){cenM_5&J!!I36(~mX-CQe3iXUPSpr`y)ZiU&{JZAc<=7b)sA}oU1eTlPr zDI`p`=wGKIdM{S~42uNVRBt8gihEHu;{JBrH zr=E&=A>Xw?(-ks2b@?&Ym@FO{T9OrxU&wbAPcF?B{+^d9vgiDxuZ#(OhUqrj62}Kv z-3@`H*j+lf!&Z77;cunS@pfCY?z@RGinW|^Cf&er_(L)mMsf-5m2mm7jG(ZF ztI{7_;>@iHjrBxl5Es}97S;n%4)cI_X-wcOSW=xY|GxvFi?C@dS?3l)?R6yrr<2YR@RyYjfFeR8ZhiZFSUuztp|+61#e+G-{Ed2A0; zkZ%ji-Cm0sai`qF)+}Eq9h*u~GI9+F3a7z?k6~*Tq$2u9 zT8-@`YC$RiX6?PQX+6XH$ZAZ>f)wqPkI??L2SYrr#gn%3g@xEigt+!hQmMnlbVZ25 zH;CDNs-+Fm%`*@4GAmmgDp9z`s^4DjnLVW6{9elW!3-(30f0IVKq*wUikQb3xuIN2 zgjc`y?z?v^&imU~z#}};>P{RZ%!fx#w&Be1Kp(f)xu1l;*XAn|yF$K&7psR}%iXJs zwmZ|7MEn}6M^+1)lcX9{|N2a)ezXroX;xux{}6)Jw)$~=r0^1YXC0}r;XKK1jkTvf z0D9zCA+kG-lbDBsBT0F}yv`L?!|4J?Md0HBy74LF;UBM18*j!o1Z&$fu!|Fos-h^B ziV_#&naK0S7zLgL${>DHvSckz(~We+=gJ|PX;-u2mM;5YUS=w(UHQ|{WYW#7{ZSa=D#hg)#O21d|w7M z_Cxm@S!=(H*(>PoMmaZcwH0g49*QOEP-OXFgy(c58T13N3QD93z>64c3~RYL{`9#~VHo6z=bJ{VOWC*0qTNTt;{|Y-AoR+%S9{8b{ zn?LnoIHX_$3R*a2!mUx%q{r;(>rwL`vAA5f^@@0f* z;FN=%K^Z6p7d*j0X^T@$QUavC_{ih;AAKOVf&Y2*eJ|50XE3zE6YUdTiCKtSLhy?t zO_bZl3atu4JV{mCOQtgM1La0oxOxL^Ok4MUh9BcUcanPVvgS(!a-%DgLw)A(mRi{~ zo0$0IrbcxCsBHc$S6A#H4*eLDqHq)@1x?ffH9<4w-PG*6!_A$JL4|BBQ+q!ih<}Yk zdYG`Cu=+%v1m>LNpYEzzkGJrQ(^Ho8hJ?cpM)XzoV%Vm}Ge=AreQkFq5%*9Q~lXz%~v+C!f~@@?KX) z^+w8rfF)f163_7`xZV~x6`(~$?v%n|K#|asdJiC@1&@Dt`u9|9ik)Eza`ADYcZY-c z%iTfCYw!f;t8z;fFKA_&w8cV_c~mF|3~Hn+R`VUwCw)TS#wsbgTV$juw?qXFVo8<` z)IZPlJ`~~pKTf|B;}Zo)Y(^Ele%~sEKv296){+W<#20XLXxc1{9uz!2gTsWn+x7iI zP(~o1za;s>ir38-3h&eH<1tyKm(N~_Aro&P(qfHuyIr-Q;@E?b@EE^)rGZVxmlfI5 z(7d)+Fy}>oxSzK>)T;!Gal2F}Jf5at7e0vxHru|q6ua=b_QYr6gWz4rW5xyFM$~$O zl=aPJD&C-g(#+|JSyTb^6X;a4n}wUXEOtrHCgkd00a9_i`IOgzG7Z!g)D1$igRiW!Gzh>M zxf!uTvu$B6)<$(19j!U&UUB?QbdHx^iW$wl)AsZF0UI5*w>>1aMFxByr#S!!6S|VQ%7;(~mZe2$3YtO#0-iJw7VNt3p0-8cP=_aUdP` z_C!^(L3K_%#9j%ckWHvlLTGBY*j1P|5Je9P)tq7+c=`xfaeV;^5jbxTHOMDHe@n~~ zSU-U&1iKXX#j1MqPOOUFJ@lo*of=xv0zx(4T+x~3R=8|?eEb1T_k6@>?kXi5_65qs zYq^DiTYx*ABYO=3tjeKVP-ae^DgiQs68)WBpk&cXoHE)1_$3&d!|AN;rnm9BaxSxK_--rrIYE_8io8mHdV9`VP}D0P zGh>*{1Mp0IeqZ>?YndWDt7fp_dFbS$`>{u;MpTi<+^cep4)z86?WTuy^G3T8`wonB zF!TYK6rT_gA_g!sAyaK83j~l-pz&eGS4C`G@%#>t!ETk^XlXjDiZsowBH;&dw5hz&$Um)qDk|;@JdeL zFHisS^e;~TqMiPQ_ZatuY=QXh?Y0zuf<@8Ofb!cEanom!H4Ee%cTg%6xRg&n{nWGZ z0Dw&HmO<{#d(X6Y>%cBtibn@=9&0yryR6mNNKomuw3)=!QzAtHIpK_h!tjNvI#lm^ zbnH{Ru4?F_=(P&_Q70{n`)4Y3NhJVsd$6|G;yuS$?a;O2$DRhYQE;baS<%(z zfCJ5C6rX?mgVVomr{9ksdpFQ}!tQTUwtO<=Sb6SxClpiE?NaOlKFP1~N&dQfD?UlR zklj==h`I}5aTTfBnDiToVXSfc(YZO~bw*xot~Eg%ZUw=cA;F5{^p;~bFJ~ccs&ZCr z5FV;}Lm_YR4wZ^23jqwyfw}LEpym@p1pGa~ruUl&9N>_GW`q!RI?;m%j(qkTMPG~4 zG&AEuDT^2sv5+J@Klz-`>ucEVHLiiNtd14sLS`>9?){BJX{|C4QM~T8)Cl-HjC2?S z1)`DVJ1QkHIFpm2Gi82cU&0ujhEHE91gPFoneB*SD7<})q2&$N+yO&jGR6u}gW*%& ziA9*L#{e~<_Fiv^>0y_>7~<3sPDMqDsFgV_&$XGnWk$6mGek8Hiysc8(LFN~;8bkJ z*`ViNa<&3BMLAWj`Lf8r6X!c|fhQFlqfw+CKc;Bz_d?1rS_O5-VofNK z6`{ISbCh&N!y$|nc>Imi4^F?|CjS$w^_5l}#P-~CpNdn`n@h7>)+M6VB|O zUaB#c3(H9Q*vs2{R$%CC6ax5 ze$q7@&ceYH%31Hg!Mf@$al=~v6tIa$oz(s_6YCGuE_V@v+vZ^@nu58qr}&&akk~vH zBd-W9oymFj_)u;H{4@3S`HSs^|2=3m5C3J^Gan)Gct!Tx{%-8v0u+}58HnBjh5~XN zQvywt2W}HtM7bRb183xuuHL0?;b2R|5|!wQ*{NkM;%|*ti3Hv}b$! zH7ta3?_tO!7!pGxc&S1nJ6Xhs+gILUo&kVeG6!QEoqk^3S&%Ximr76|PnHWJMtXSx zd@uXkTveqQyYBK!Yk)~Wipl<5x0l-+K578+SPKlUnos+PPbz5TM3yokmsL{;;33A+ zL-b`0Ik#zTVK5SvO9@p9p_f+$m)O%Z0U-HToXI%2R(C8S74u)~jCaJI2zO_l%FCpVz^1>>! z=vo&U?~eEb^NVq237wY8r#E@0*XOnrC@f{mn&=&h?00k5>wlr0Pi`~)<**ft-9{Yb zyY2Klp+@Cs>`&L`pfDergBRtFlZ$v%fQ&_om~*haQvgwT9(Q9BRPB2u{yjTtugANv zGo_%?c-EOJ;jwXytr-@;$RXaJD zq2pg`iL>J(?RZ~#x?eweZbSvMio{Qihp%uPN&pC#{&#&#AlQdwh)p6$VE*t|HLgc)9ZQJ1ZoG+ac=S;<|PRPO27 z=7}0X_R+=WQ7W=&o+_YOJraaKdU*wunm0kg326wtH_v56jwOp3%eOc=TOK$L&EQA| zfcG4U*&{N2R%W`42q(23Wg;Fb@KwN!#W8~h-YZcJrJm?(X2L!G#_2b(%FaC#V-m5A z<&78VUQ&!ML{bH)Udmi<%ICe{TaGL-rrhtST8ad}c7h2&KJrwlo*+EgBU#>TUm24c zU$8nVSICs{mk`_bw$g`VctD_3mssDnG@O+&EBD@(l55HYV4~$lqXCGWl-%t-bvxca zD$9tvV=u9n{0^LORp{9W1%Q@ybXL(6P>%SU^x5Y&o zGA->yIc!9vx6**(Adb8;94twk(?1BfoiA$WJayq>4^eU02Hx-kE`cPy00O2ZwoCTm zTG=xdPwbgX@ubd?$kM@7Pk;2S_>+jUn;9(bv6h0=Gn1Nk1LzaO*`l@Llo*S2(er4n zy?`lIuLr~DFoAaz@&^K1zbO`oKiV%VQ74gM|CSKlZkKGYe_dqRT6sRsK{=x6K zl|M?U{-=H}l_NuukGx7&{%Tw(v$(kN@6X(6pNW6Z z5cS-J9`)2nu;RWzlc$#-CQ?T*VK%HOsC1WP9p~kHw@h zWq)2vmjWNhpH3f=Mpx=ikr%waZ5<;i!2NN{3=k*iWS~}-lmm)0Z|;;ke@*9Eg@iJC z(JM`5&w;yVhkz*uUp!SKt^{#du9KK^pz~9(}!~EeM8GNlWQ^IHhH-)LP${_?H2SF z8n^sB)N~wpL|9^;rEXQvcK&*dr2{{{An2Ro$HRY6V&Hm7Ss!$wUN<5A{QIIGzaOgu zjhtf8rIX8~=3Y6>BHd$`gx;7V^FO{!php*ycUydvX-08rCr9TcIVLd|9=Di9?j=2A(#E{4^KDhZ5f_DtZ|xX$mQA z9Iudv=!!c)2G`qMiDe4+;S0HHLi@lvd{`zqLwq9E4t)JCyNCN1qgyD26r}0a!e{^E z_F0c>1I!S0;7tXjr|{873iB#afIiI9Eph4L?w^(Iv%B3R(I}sIJZXp%2hb``AsS+S zDsEeI#d@$|C_gB^OS}ed7hOj|6OEV33BNz0-dg{2B4HUTJ7l(_T-aIvreTnI~T6gwPJ%tY7`cH1u|x_jnL zi4wK%wq%L2q=+i$d(H1T7nx5&YE3&PI$~bT^w=iq-uwTbB~PBrC!fsZoi5hco!3%o zh-?Qg9M}E=7C~9YD^*Smadjd**5OGSa<|8NIKJHN77=P=z2`yM%Ho_Ac67acL1n!N zN(j~yoc@yYIg2M>>pRleWO^YU4jtuF-s*eUsjB&tOLIm%=~0nb3Iazo@^!0QtmM4} zwQjYW@xAVkx>y#~IY9TBS3aCpnSvoVE4fEz=s5|UqI37`9%u$?~}v3y%l)OvhVy!0jo&+ArXVC zgI)K^t|*3sl*c&*97m0NTXEHfVwvogm&=Ki|(E2ovrff=wX~vu;2}W zR#*+O+f?Qp#A$uM{fSqMu5m&y&NoEpR}ahpulUAm-AH_Rh&Lg+}A}60T zZci3}Zpw?%6Cd_X;JVnI>z}r#Ll4nin+vq7g@5}8Jc}?<&rH{N6#_*VC!Ry$7#tm8 zP(O*W&CF1ke||cN03Fwg%@n@`BCXd2s+-oOw)g_@FL(z{eu<{V!^y?yIk2(blyghq zx|jHI85VNyios4QgQ|=tnt)r?O9{nhQDQGnH}txl;vh~TGkH;c@Xq_~lQ9^C0qI>Y zzVEU6cTmu|P%bznOCcAN-; zO{G5Q+;9y8#&uv9*LtP=qD?=0g4ifS&^XQZR6KFqozo$)5JPbOwD=F!FCwnnbL_vxUA3h${6+HzUii0@rTTvK)J()!k6~o~% zJfr|pGtxsIKlsu(h7>;-*T5^+I|<39g8DL!n14O)M2eXa6S}X6jX!7g}W|TU=v$7!?};=sguXIy(APQQhUxc%4PGSH)|sv30t10-Z%$KK9&$w)V1g@{11rh z=;WYik|Roo$YwO^FzW2@kSgvLtQ0>$Ss>?ncPT{Gf%#ZcLh%5a2QiHWva%#+>m|@Z zfRy&-{h$=ZtA>DYF3;Y)m2Rc#G$1ByaI6;Tv?)%I9}Y_dk(;VFzlgCCyTLG_v`~x$ zzefduaFSxEqJtHstIUvV@g`USFU6zyC3Rzn5X2A1#V}G~L;z?86v_qFjqBtFc#DqFck#h~y?0vl^kT zTM;Ntmh2*cmyDxv@eGFt9(e~ItCf5MdRHO8z)&E9I^F?X7f^Jdr*BB!;qbtIf`=#&^eQ zJ>T5#g%zf$OkktAQcVMl^IQ}CfYuFqeF;~39ok&C7{ZspD(7e>_K zVN%fe?$!7m;+v|M@W22^)4t-EBW+bo(9G3lg~t`WzA3`L=pEiUq_h`JsKHTTHlhv5 z3JRs(k>gEc-`pS}2vEO5bnt=whb){zmBXG9#n}(!mdu0nIPrrL5H%^JADQK){g7>UjxPR3#we z6S}e$+>E83;rnI1@ca-~FRs=)T zsR;4H2|y$wxUne!vFk~j27;!3re_apOE!D_v{P(roJR&nu`%K7o)j4u8mzi$-Z%&f zBM8>H%@Zqa$#YXP5Wh;MNXg0Fr9R&NMlGnZili4I!JtD!`&|>eG@&6`#s4y=hz*Xt zmuK><*fGm(t$dbaMc+T)4a?f%+HG5A)9k{uMSqeyWp=9PQS^Rsl*A4r=B}L{k%5S_ zL)VWD>FJVQhGn>Yr8IzUp^+{Pgwij#A?2}AQd;r> zotR)X`bwN^Z*5d;lSz5se)k>atCc4!D0dJi5!uW8k!mBV50^Yg`k?*x%U-}6Xuvzg z9q6S6y(`#&poQ!xud>JhcNGhdn1Wqyz+w}IFuc?}$ZwOq?T*LyPyw~1AoL|s;*P+@cPK;78%yfgz$zfomwc#Z_8v{dG}uRRPbx0%uhUcv-9o zz+|``RMRU5x;GFa2y&d=a;8W)Cy)>l2~JjS_*X|bsV7B8tbs_dKq*u!%=w&Gv55<} zn;+kAz#{93qi{N<^A5{J1J&RR6+Q*AWb{cf7FIYw!`*Xwhzv^A z#pa^&2nJiECUzQX`Nz)x-F-lyH^CWbb_uOuMJhGKGo#d*IHu<&+sn_LJNb}eUWg+p zOxzZvQgWY(j}(TREyXB~Iy6`LAS-e=TN!T$P;^9Uq=Fd4At|K$Th>UMhwKW9SGaS$ zP6p(9sh3Ob4X!*Hd+3Nz{|hazsTGB^$X2h(vE)1qO6yXLN}9RG3uM%u6tIYTJha4i z!!zNU0y{$hK=!^$&cW$VtbqvP&d!ENUVWim_0q$E8!`pMcuSg)SPJp}H)Woe5(_LA za6Lb%3kau&K$6npLg$QKw`zW>9SUtCJS<3qmtPK*(ZTZgLtV^18w0pZ2<7s%_}K`{ z5IRxJc1p2NRjKt)Nr#NNKGoiTD}D$-0o;<~W7*XB_aJ^JPrZC7!)8BIDTM0K+Z|M< zGaoGe!~I_CSY)Qy>kryz;`PrHfsBEUxtgGS!PW%t?~(og_y4>7KmXL5e1I>a)T;D7 zbVdd{X>U%nllby1y=->?F0cc0Ww&;LKq}Nbj{X)!H`CYPsP~`=5muBIVfzcq6qbe2KGq925(T z4HWV^G5K1oI{NWwfEr9i)OE>tD?ZA9q-p7p2C-f5h4jx)wAZF%?|YH2G;=XTs8A9z zLR3C4Y*oFdny3e(K7)Bd$owBA(A2r%1s_M6K~poq{8R1S7|MchL7RK3EVN4;IX+&V zZIi2hB@0`(4{i=em*|hrZZFj$dFxAReu6hQsj6I z^Qf@c1V^2tUaZKV?Y2=ojev9s{LewsNsIJ4xLHh-LL82_P*!!i-L$NrU^w>Z%Xlb= zcKY$Bj~3lcwZ|QX$y3p16TW)R&aMAp4x0@VIpm2#T-^B^#mX2HS!+hkBn3RYIx8rY z_=|8BLyWCj8#^1GM9*J;fGrqPe)7%s_+zU9KqDm+;U&cvpjUtTEe}>aFltG}3zQ8* zMzUXk9v%ui$mtN1L$Mr|Y;lBzY_r+|3#&oCBii53#h7rb#?wciXrFi{KAay{iH|=q zvi`1}{@P>M1`33gQ2WPe3@$x|?ej1eYy&&m7K>sSSr(IUAr^hApfLsDN3s0?uGeGF z2rhL0%nR8eQDu>&>|dnsSuHNr4^1kx6@lcKa`ALkgZ$V362_NTL7B5zFZIbslsJ9- zThJU)@Ih{Hmmh>eC+zgu<*+9njc+J_qjb^>`be}I&@bj67}-6nuaGzwjp z^oY|(ud?a*83jik9I1q}8VFeJ^a@Zgdt+}1{y;vm4!yy-$0Pwg&*%&!&6ch+mlBVK z`C55G;{toq^08YSNVr@l2Y#?R1n!O7ZO4jX>AX~+cxu|+@F^HK&rbEYgjHt!Ppw$e zUA6bs$h*~+r)N9@(AaY+icFOhC4b&4o22LwTqN_Wd@P(|FE!Ei7i*{xa79I^DqnJ2 zXfvU@SlCtc>3Zo>Ejw>*Bl!(PLX96hQMaA=q0akG`cG5>#%fTn7O&bQQjx`aL|?=` zEH{gOpun~_eQLVROx&JZjk%K(*i?2X{+3UrXLtw)rMbkos!7POJkeYw;dGM2*fzq2 zzYx*jBM){-j_tnJfvXTesCZ4qS;- z<9L~h;cdYXiQlLR&r2`GoW$Pr!u>rwXGnh^#&;JN+s(OYZ;&kaqLNHLx|+uy&LXp__No36q)@_5Us#|O;T zI%qjDXRP}K8VRb|OXNs5HlF*=`HmTbb7jjUPUK=Zf(+AS=QzVL7@Q;(uN9paBvbFG z7~70&w}c3euzES0uyazLke`!M5`fDQ5SmC%$wnlN32axzWJl>5;uMVvW~8(#5~)J? z>7tJD%jM=}z#t}Zzbf&;rh-Z#1G>^mR?}ePy>=ocAN$TacV>BPin6SS)iGnaVtk?jU60>`c%(X{=-W;VQil`wFR#|b=>4RXUahBqTw@xKpd5xdvD%@Vg`s011mF;D$7&gl7( zMe69Fv&3VBNAQ}2zQnogiF*EXQdN=6Z~0`q^o+L`6-99#rS1FITs8KS0iIs+*QpZD zc_lf%K(|L)F(n&#fMbEqB^R4EpHEwgUqY{l-JG0jxBco{9F?@CdT_SJ`q0;k1eK0~ z0_t2BO*OR_R$^ItHwob4_#1ip4kZv$Uro_Dkz-dbJfsX$(0YURnd7>H9^mJNmBdMq z{gEeqUWa-ISTJ{%Si(tCcwRG^siQ%=wt~>3J>`_QslCZm)T9qIk!LA<10Tqx6Z;-47Mc zv8?ITp%uN)yjCUPbS4Zwwo2C|xHZ zEFkYqObX(%Md!{+7~-Ia%Z9`h7>qDJ*C?5csTJY;jB*w$FwJ%EctnJksSR9FJ%!G8 z$bj)OJl+1iCpq3EbuWpB=nRPNb(mN5#9UkT&o|l)|C}SMvaQ_qvF|guN=^J^3l1@T zB@1ulrmM!9O=ATxTzsYb!lyru$FXZ0s#Z`QH=zh0sfKA=%b|1P;c~mZ5XT9GZK_TB zS&JOL!M#G#AYF1lA%t-{WFAfQfGT~2@&o(5?&nU^?j+Vkjm`3FSSSfmy{$Y&{|3J6 zJy$gA>IfY-CLmSK2dIR)^ySKlk^kxYajmr)a`dG6ZsDdgqOrY`*Be6Bc?XmqBauS)@ z`EVsAtGGTZm^6cfTTan%|Gg0vm_40`K-p`t_7vGPp0*;bR_t}zH{86;HVsIDpO%M7 zctE^9u0Y*(NH1Y#e&ugoJ+QBHeq+G*nAQ1ar~sBv+xISgL^ zSdCd+d*b2;?di8X&Rx7d?ih?D{~IfRNMl5lMvPr?vP=d>2c=r3*^NGm?}1pHej}C- zbnrhBfDMUZMU*|X-#{o&q! z@X#JF!b6S$f)mVksl)KytRJO>HnxcoAb#DDn+#brd+$v{k>F9yTZ({Cx<|~TpvA2i0&dSqC1OHVn z{ul=vcUWA)WmGm$NX`O-AMrZMyg{M|FT{-a>=v|1%EINHm zzDP?!#(6vaX%$o{@g7t+O=cX(!6Cu%Kl(TS5Z zs_#5T>ryMvVq0^byzY1|M_C_NQF97!#ZB1rQS!pPNwg}~O1KPOYQeb{sOam%hs{d# zRvMw2g`!f%(xV8DO9`DhZ02|^=rl`aQKi7B+?S0a(8*m4l?`>K#G=Rttv%PTw3l9t z^*h5mIHi@Jf>t^y2CyimSRB%42_PxmC=LEjdyf%9-HwhUanr2VxYdMg$(T1h+S;A* zXdfQAdQ`{f>alhZkHO)MBLO)RG2$G?TgU7Qx}E;^%W*?sho3PILjDM~{zxEWuf~d> zRx-l~4yW2_rvxe;5ZgKS5kg4@?wJmTm_<&pom$_a1F$`?miY2&n_KZ}tc;07i3td) zU=a(RH?h&)!xZp4#&wfo(eb2ysoEE%J?gqj`-9(vu)@gP9~MP^fyQng0i~Ds@34kG z`cOAWu|F%!6^n$~<{Tuf^urS9TSckX(?B8|m==Yn8m-SOa-@7 z&UVf0$9AmkK~{(tqSIqafRI>v5fmVLej#ATTfBLJ>^h!zSzRkZw=%C#ncFYA?2|3+!Cu~RZBE3p9SrGZI0NsACn zh|h1O!FXv zqaf2nbYkp^1??0E1I$PshtK!e4E1bO8jVeecOyC~MO^MO^B=Rjh8A3;U_Sa5Il{8^ricy6)2#+9fYCud$0j`1Oi+3uVgk z<`NQ4F9}Ld{+1$YvD!Tmy7;(qS^hBu5i2xVM7I z-v!~e@E~I`=inqw#UQYJFoB1qP6(!+@(tqKvLsIY?M*-|lRP_NUJ=*$_9W<9#sers zksokzKg_aABUix2)u%U?g=|`}Vx~JtuWFr>fnYc@mO^xewge>2fJF-SAXR6;rTwJt z2CS3i=VrT|8w=KvJTwv;4z?4|gKMPB_W0RAvBeTxJQntpAr#&Jz0NoP@eA(+M^AQ; zH*c!VuVjTz`L;z*OO;?p?b;4YlD85uLo~<^&$Lrz2HW=&S41c|JnZ-~a6=+*Q)hyL zn;Zi=3qbn-1G-@fpX^%6sb(M-4yk@#iyoLLdKRd^XMu$n&=1s(-$US`c%S?efCE3> z2D#OW@Cl_+#vITDMFM+bdbycEYrvPfBC!}Dm|~I_AeXRS8V0??Lq^TiI`N+79PfJ{ zfXZ9gyDbk3WHc@VuXu+gP6+3Ed15b&UGF!_&QEy}2%etoSx+tXU^)xqw|1}oAl+Kl zupkE`-sZ2eF|-peSHJ=j&lP{t>x&fRWtu8Yx=)hhA-*g=%pkoTv0Nz^8M8YJL6$>G zxey#rF`wgbj7^I81#;NyX@)pRN^e@m#1;VYOAj84pI(dc9vw8oyGx}7ZnH*W9{u{@W#1;P1uT!ZtSnA98eu#SP8U&xw; zt#m*$9s%{osjoR_5*{l$#S9Nr zxb|$B-XQIo_gJwIEEcB{1GcDIzzWyAkrlNh>5UGYob+6KHwMZWc95I+6Q5f6uGb6h zIj)f}OeM9GHLHR?1%K&yRX&8QDbahq$keYt-oXJ8SoXlr0?g>T_dFE#iFPR#9;-2D z%B@^uTXa_#R~_{w08T{=!K*n>*wIn{;uxsa=6JQ+1XE$ z;loxc5)eFLU%yorjNA`ym%t9@TT#3ssHPF1e2+n%1EFqJOo^uv!Z&b8A6BBATtrAJ z1Wyn3RRkkVMu-4pB9(nPBHnB;QiYJGeC=~~c@*EbF212wth^?kf7W(2_5&has%fC% zYCIAa#{nOdwk@=Eg<7Xl!0SU7<49DWx0o=?4b6m4_Ts&g+2V7O4}waG!}R(Ndg{i5 z*&NE{%RphCgbecijopIrU>|Oa)-FK{5m0f@VNO)8_V#i9sUoD1H2usaU1B&(F$S_^ zhzoJh{FS3)^`i5cee#ud`m1;wjxjf9oLW(hN^}oE8l~j?k7ahP_RAQo9iFf+mAnZ= zGOoxtO5CjD(X1k>>~5+;L>HJY-b)60dl+l1Lc{QW;?Ld#<1mk#+_2)cvu(JxX``r| zS+61zPo5CT(38E|uGS5az9^+v2pAm}rVmdd4~1c7(i-nB1!n*!kYeD+So}4#hNLPZ zOp{_dp#Y#KUdns@=E+(HUwh6U$|1sjDQWVt^uso0iC1Kr{0;*~{Q`Z;tgDiJJJs7MV{;D^O*har`9hJexxKmd4T&MqY^Z!ep4y(yLZv&7IiS~M+l zP4_n-6%`dY5YadzOMtblAT)hf#7?nAbB0KRqQ+XR0eOw?gbt*1$z(`9jz+udnPb@5 z?Zk^HUL!gQuBCPF>vFjeV(Px#;~AH(=<7ZA>C+;rK+DupTj~jnZPIm zbF*riqUHs(OozoDouz`gh|@|tEZK2SztvuedG#9oHB5nJgFf=@zI`Hcn)t8Km@JWi zpExZ38@~ouF`jzR%T=ce7yh0I1Bg=6m}c>Q8zrv;@F zAL{O_v?M_*D&XPI5yh)s{?&1wc#yPnBC>o@y0rT!#2Z8xQuOEKwZ5 zn-8o)U}DXU%Cv#=+1UiiA*vq(Q$6YT-->Zi6ksjYxl+Fpuzae$`+m^}GnkJ@+ZOBW zKv9%BPRa?D@s2Xe|k=+WUwo;{w#F@2GxPZ);-yyha-Wo z#{NUW$(zbU>Jm*0hZP^4xTkUMBK1X-@e9IO_ zZ^386@+<1}Xj{Y#2b+Yy_>DWIEt95yjSl=V^d6jWD^<7T@5 z)1PZgi_5Dqa{5NwBFO`3wA+v;tas=rpHkY_|l-TWh z?i*_@Gqz4pLikeE@0u2po*pAHTI&%UC04o;FsZK%Vv_zQb)^PudT~Bzin7t}?c@tl zELaaEkT0OQR;i$A#iYtaoqa@)`4d3rMd?r`JC3QhL} zrYHLcks%|~u++}ol$5z}6j$cZ^0cM$RZw;;hV;PTOy3Vx(JPaVvN#A6uV&TCbX)YQ zQ*LpCW5%lb98%uzT#NT{r51Mc!XF^@{eCMvpILSsv%)8Srrodx$K*jdjtek&OfvPl zJDbtK-bpjm^QvlW3R8%O0)kdV`;NSgwx9RieFN{aH(LgOAp!y5S_E)0)$EWLc9vwXEzT%E*N(EUWSJ!Av}n>T*Pit*ylsClssqj30a!kaQTc&3QR!@djt1W zcOqW;_}7YI~nX=uDy9`1FVh1}0U5~$%r0bB2fy%~tVN5lkpYG0|o z@jf8&@}S;C zP%Gx%=|^7Q()qXEK3w^zzwMaO5~hhW-swvQ+bQn*KX3m&o==>J-p7A``tA5#cW8y}N?IL7RoDqxu_tA7aLYKDcDjv2l#JKyA^;gL9-?)gZXW zIhyJJDy;>3w*U=F1)&!diT8fR8Gj`fb&joZDNk5R#1RflPUM(4Pj!VDlbq$^f<|tTDHKSM?hC6t0?s-b*@-ds4R_#bIPU2Z!Ulu8 zUF2?A6o&ouW$}b5dRTk-kwmUyaCq}Ev(4rzxe9EPpjva^ClRFDp9sM%i%MCRHmK-? zG@-O!K_|x9qlK3|MvOuc?x}@1f>5@yryn1Kq{iOkX0rEQ8G5;NhlV^W|Ex29`^!VX zPaj=sZ^b-mb961+#YiW4 z#9?wM=$Qle_G9Y>_$0#gVjRM~uu8s>cf?1h7{A{NJ^fmHGp4eD?X~I`j}4@|=a%j0 z9?*MFWQ!?-ZxsiVnsVGYaBxz57V%#=&+&B?&5e-|$KrHk97os#auu^gLa@g@iy4Id zB<&KxS^HKcc#aC>4%U=rTObB{F)qggdlv0={|1kN;%i(nJlC15aLH>dL-pJ6xvUlm z;!>WtUL%0Os!(!Xz6dECQkxc|-?Ifna*r&?5Zt=lSmla3z$%e~^NL*39 zb7i;As>bJ8BiHU_Z{mis_Td2BDX&@LX1s$C`no5{fe0JcvTm4IFKh?Eaf>gIl`8Uz zeH35e4yMp~{G~!vgW{FPsY_3071wwFs<{?_{og1@89a*kzwsiVGq`FYwrk3p@seRR zU;}0}{cHn$nM0es=Ifq%9X&Zlk<3vaT2H7Z9fdoH#vIBjVk6HWey~&ah6E!csUk9j$lcCr)Lt2 za2HoK<6b>zLob3Hj9fK%(w5JgDw7doJADMNy->^GhX|OCkJZ-4K&*1WuEv9Q$1bXO zgmWnyD~7r_-xg*))1$NcTJlvg6eBEviKi^0K?s+`8%VaTE{l30!6J*H5kDiUWVvOp zj+LSbju2xCi}XAG&B|1J&A-8*5S8JC^^4V3QGI`XqP?*a6G9iA6wqVb!-E4AZ)4@T zNd^yc#`49Su*ga2}|Xj_((&2vw4I z0k;{NH~PyYJk+AXC-O04mOunf3CCv3=RAKIe9HBbjg$qPX4>ueI$FjG)^1RAY*NhC}GPni$A$57(fw1vS$tsDw~i9kp_E)fO@MaLk=VUwCrh6lttpoyyKrJf=(A*!x{4wAtl#rMl= zWg7x*BwvmLqk4PQDud7_N*xBLCr^nJr%n(F=rE}_NLQlT$lVE1m3kBxyUfNO=h(!HOYY||?%HkjxL zJ|>5C<2#XEUA#$etgK36sCD$wWYeiyS6LN|Uez0!e;2 zCdX*BXPo*>_sF0_n-%+$Hp+7`24UNU=7(a#Cqb{o=PW-btfV%P(X$m5+Nk2hf;P>Iiv#kzs!Q@q=>R~VF+8DJUY-%}(DZ7X!ur`mHdDwSTu zON-6DMqZSkv8lZ)1=4m2HG-|kOwsxq);9Jp89Kh zBO03EJj5`uva@E)(-+&ti=XoD<5B^hrZL8-SX-uL^Na2dn7^vcll}+gDM2j>e=7{` zZ!XFB8e7TnYAVE*TW^-=+Bui%4Q?YUAy|0sVQMDY&m5e6guk-B9RkPY=ikU=OD)>D zB*m=8Q9UTL+rx53zP)LXM=o3VkPxasdUaS<{v{tSn}3j+NI7Dt4F7tWJAXYjw&Iu$ z4n3i5-#_`mO9WD1pPlk=0mGo@d;1Bq>+Z!s@kBB0jx)%>(gWoF?c-m?nk=_le*O&w zx@(^?3WXvl(ul+tEGk5xsn}B4kURT`A)DaWl8)tI9jSg!!V;JB} z@sC1+fStv_jjg-cGFUmg&?c(;e^vvT6#ST~T=v_O@uVkTJ>?jE9DmXQKpHi6m||FK zG4+m{D&x@mF`y(_$5jf+LFM%Y^7NZFc7Bb5TM1|=g*NR!sq~cMci(N#c$l|fVqUvU{OR#0%Yv4N!^(L)4Fe*HLV<_uB{0*d&nnaise=i|tCwTfD+TO<%(`kA;4t zm4hy*N)>*5^jGnUbznmr1o>eweie)U+_UXDKeOkMK-lm~P%lvc z5$K`61>r!}YXS@kx11lzJkIVQ58G|Z<>>nHQeCCIj>Qqc5fRRK?YlkJA3~Fz7-MqygjsiGf_YHo&ojeH87%Ef20ilY z25U5=W5HtMh1H%fWrO+pQb^IOZ8`q)^UjITRl+?HkHBGr3UB5XT@e^yjK6106o`UQ zt@DzVd(8=q!zUnYAvT2TjZ&c482)s=&G;B8tkz@g^_)u|(te8zBz~n}XjbFd@6m`D znm9Y=@?!lE3`}EL0owND|2q9a$OG-blC*mI=#}=$D;5Wp%05JntC(V3yzF(qh5En~ zEMVr|_?EU&2!Z_9?erJci9IYQEyZ$rv1gf(J2r3&gH9Z}rk{L6m8Dd>x7zMgb{xdX zq7#p>e1#+X?&(0J+aTaCcJidxoWsj)460h&GLl{xw6735ZV`nmEcifV=tKZ(uNk7O zWOmMW?8jgq%3mpSP7yMANT>_4&ApQS{%QA1;TcA?M!=JMiHD{5;DoAv%+F#>M0hZv zip2)IgkE3q@d>5yfEZ#d3NIcOlZ*(gN+A_wL;eOhY~3#TbD++JC-&rjfBd6HPp@Cb zYq--;Sb4>vlD^uKNzj9$+HgRGICl@)i5>rrg>p+HZs%+yr)v4TcrrbsT8F{vR9Gd* zNCKIs&`Q1%XN9Q2VOI78J45nZU;^8@(%TNeonZtgt(od8Pd#NxfwJGTd69yc`iO4F zzImm14SP6YYB=VLuEQV`CZnXZX6#L?jD=MardE_>!S$95XOq1|5fR1`XQ__QhLJSGcP!y{y^Z=@;xY z7IX#P*>e26Lm1#c#fu!XHgh|ke8hgA{vsYvNQc{Sx5x)BChV;JSPP2zJRc|PZd(g& zG`lYYYlSf6z`_IhcO%CIq`Fh!7J^Plzu|rL{<6O({!ppkOft(@iN`2@H!Px$5$xj< zD&}9v9*cz-UqtOi%)s294}lW#w!)-4B{ITA;g(gCHB-sJZlm4czV?r^Mm&Q@+$iPasx$y6IGgAZEr43 z$CE$Np1Kq=!Jh9FQWDq~u}2F{qFFoOQg_+6 z;(~1T+K&_%;z8v$t|5a2{i?l3Tdq>IVgYDA-KIrOcW5(3t0re+{#aiCf~v}D5e4rg zIhZRcw&O3_A9;xhbzZ$F&uo3cOeuQp~|cS-W2 z)%mrMzxNoGrs%7PhXTMuP&MgJUhv6YEb#p{Gh@kF?<9%52s!Q$Qc?`iNmu-CF?iC! zg70=E)(dBp5Kp||c>u@w?>}l6FU6`&f@ki)%-=VAN`?>BKKu#@X8VOmpDtL(^O(CUFOAm?mPYy*>#r62$$hVV>#=L`QX{va8|keK33A>!|~ z!rNdl96v%{o)=GrvA zflr)1--!#x!TQ_Ze#K8eQtm^oE+j@=>AtM=!n5QgY_W$n@q;S?Vc|8TI;nLcMb2r*6 zPz>#&lGYDme2~b3j(92j*jXC;v2nxpdTj3LqYLfNtSqJ@YuC5qS^a@nQCR4k2uX|7fd*Jm=IQHqHs9s;Nu*e5pjoy`UEv1eP58?ap6p(w*-qL7_o2EDiYx#4cQ$^M#qfN=or>eB65P9!kt~>N46BA zOP<-67u#EJ`w4>$oSmalX{$4&q_G?Tj{q~2w&MOxQk0jZ=UZkl$F?xa8`$JnVZ|8afqzC{*)t7ZCpwojeY=P6`?O z7ROeFT4Vp|mNYw&JQuy>(c>S)pfD(ar;bVlOe93|K7{An00j8K5~Iji+yi&odtQF> zZ87rK@XTWD97GwV2)e&TO9xhjrzYcJT&Fs#r@R5TfpF+v`3*5@G#QCa$-}+nt8N8H zf=J0QBvy7EHf;RaOZ3{#gs?R5M=KBLvlPnUGTPw9&>1&T*s*jnkYBnMUjyzjosN8V z(F{&vH=(&~52+ZDHnY?+>3xpp!Nmu=iia&M;`UmedKH($5o8Xd)#L^!t;h_O588k5 za$@R2NY|;cEI`%3HU$XwgK_&nJUMd6k#XRTEYOFA?cfQ1=o{i&FG(OguT=!>&^Xo+ ztyhzr*%fX~Nxc+v8DAt)=4AwB+6$4>4M_%9NiN1mT4${=YyDPXbUR1IvgULlVV(ls zOi&n@LW}`T=u%t=CHGp40{@0o-`Hj-Yghd?l96zsc5KSRQ>7_FKLj!ENmbOsd5gaV zh9YtwdHKok;unyW;w9|yYP>`QIK>`*DF^5K zJ;fACk}9S5_h=uWen)W#F@#_zp1;+5RwXDUw_Pd-Ch;8y@;HBXRLOOx1c;Tffz3+ojNcNL8I}DK zEJk&Z8XUt_x_sS_pF{vN2&%Zs$)2yZ+2vMvV`RT%Tyu={LC**|W-T2R;b6UxJ~9XE znpZ(3!g1Bb*zq7ZU-eE#qZ8JW%@ErA?b?$gt8sf7xt5N5y%I?OmL{DCWzG0S=#QNY zo<;6aOkt8#g85i!0W;=t-INvOb?sGPhx?@I_|ccIkgOYjj?fR36ZTMEBUObEKw8;2 zkS^>fJ@k^LZ4+T_Wy|M?L&pA6^V`Nbn?K|}jv;d_zUdxb#QK0w{nYs$?T@)mC?w-u z5ygQmkYgH8g91tiHjCPkE(4uSe*sx5Ax&sO0^IVH%3r%R9Xp5};Ahb~PMOtqWw}L@ zd((sY=k6_C_{HdZjji#Sy^R{~frlO_jtxN5%3F)+gPS#MpTs#fYvGs`05FS^Zprl_ zeNOkc5^Yx#cjoGu&z)pojGTr=pu@|qm+37d@i*e?0 zz8l~Z7`|ASy28-grOxAw2Zp`1=|}C3PE>?3K1L6s3cTw*IQhFd=dhDYugFzVxbwuE zKAHydt5wy6nUM_^&(xhU?q~CNHHUC8hUa4(z;;|A-om4Uu5o2@!v#zK)Q50zJN`kz zi=LhDtyms&q*F0G_4fN8w9w)mapPi#;D%}H))yND( zI77gI@kscZFNKU^27!8S^KFvfJj&i{0wco}a z_AAFIJ{0zzJ15O|lxzvIR*B1C3Y8i~pd0AXco6_FNu{~KGLqyj7b6%qL^$?2WB&~T zr!EsEnk&o%LvdoMBL6CGQ7c~bPRQI0B@amW5?n8@o}!krn>YfoykG`jh{HW@G~&Z8 z&`(CL(im$QQANshlKAJiBObOyA#kDEPAnf&w(lb=Hm^|vdzHck4PtPR3*DmyX*08o zBSOPFS;|Nb5Fy#4f>zUTL4kUATOVw;JH^EYFM>}K!+o_)SbUaHNYV`cm(@cwCs3vr zhC8<0o>!1be|rUNcW-B-{JtMnit1P(@8Yge*%SUn2%2)sbdQFt;K1@{I+&dbXq;@$k3bZm(Fu zN{N^fizs4-;*?Q5?XXeYGXi#qOV@7*$K&2Sqx(7p7b6NGvtI!mAG<)~=Rw_<3YzR;cu zv4zou;Kr8&@Zywv(J;&8@)WydR@G0y+FVOYeHt=Lns%^{Ka3aj%)4}N<$sDiVZnuU z4o2N$qoHW1nt=gzl>27RzXx>$JgDqEZ`LGE2=_$1cXp-CF5Ha2sOv#sI=(zE+JO}i zA9wTbVSJ3ThU7*S;aD)Bpadp?8z6^+5X2_kmhy24kY%po8U*Anyc@FxuKvy`)iA&Q z_?M5r=XYOde{{j`K2c_?TW2c<15$>jDJSMI^YF(;RSa}$x)u7I5-#tgmQ;E+z-+vz z8~SvAO5)O!zi+2M^g*1f88C4(X-(R&T{mv60$4 zvBPKpF0g}w#C3K7ek$eU@_4Y+9LUX0AEV9-!Q#_46^@R2u$Tx)!SHgg_S98fiYy&dgh<|B_EvcBt-^xN9dnWSB|l zj~9-6BrinRi^=@dfq;`&lpQACR#A+>0vBg?5Pb}xnt|K#k%sivyI z^}=`$CvvOv7CZ;QEM>FRM66Abj~POotbQtmPl;X`J1t2dM&|)dvQ+GSnH7+rZ=!2N zy}UGH1;n|Um}{^3lY5-c_~hO8>?>suWCW=P1>zQO#e!AIP>kw$K&OXfR8CnCgq;%G zk{6hoPam=^+^TVmo_rSufM1Azj(-T)>)b5lhI237=ykwzcF=oraiOg)`$LIcu34AV zVIdhQAA7(>bk43IzY*WOVC%2%0w?e6?G%S!OrRbGs`mU@YMT5Up9Nyw*!P8{utsRd zNZLdvxu@a&#ad;Q)m;PXPbEfJ%4m+NjG<17l?2{G+y-ae6*pA_3d_yXHo2_|YUtZA zy+7A-v8HC*^7Q1nLPJXAIO6PjI=ya9MeDHjc2n;X6DGU|T;w0z8z-oE2rEhtk?HM! zf>DQih`RCKLw}IObJ?WPft{I-i~zfYeO8F)?f);qW_a}bl_$^s#g@c9-o?HkMj^Lr zSbol<+dwd?CRst|t%BEdK8t%xq8vB6^q{|knnrHD3^e!<+bsl>LodKQ4w}lE=OOqI z-fnz=@0*85J(Wrc!ASyM70e?+Yc6I3BaMdztfQ+4^~bYiXj218-QQh}NXP%O@5Z+0`- z{hQp-C^Pi`&Hp`D3&|z~@XSAoVERjH9Q@epezjdm_9mRki8XL>aRVrGb zPPhwujpZVfbb@I|Ddk{0?%y^oE%#=u;aNQD+wpLOF9YnnNQL_{V`xdo3imoBLBYfx zA@IYF9{`l(1`)K=)qTe~MYtn0H9(7;@eDotRk(6~j;^*rVb@W)4dYUmSo}gabZufc zw!NuBXGK7*c{zxJW#U)L4%s<(n?nXE1YK3QUZz4uj08C)faf~`jIdxLSi`k-C0r2J zrzkK?Eb0;@{5c_?55LKW>xf?{nYxT`qUaLQ-s z)1Sv_eRiK=xb7iH?T;uTvl~lvup_8H7N8drJsK9|p8$2?=ELG1q^Wnay%BN*^spWO z%?+4olrv)c#8BUAAH4g136R0xq(#0(mDi3I3cOx zvykpWWTkWv0K=^cAT!_c%6&@Fq_XXRgd27%pR@>=@D%MiI~cPdw|_Zj1$}$o%xmM1Z4d@0^_iIQCJHFQ%ixsB0@mZ9y&=uckmGF8GlFY#YTM*mM&C%`W z;=m{b`+R(keb7s#q``m}au6S~i0~NNyn41_mMIKRI^hC zw~;-WLB6af(Nejkb0{6NNnnM@W*1TY7h!9En{SgKWr%@MavsM z(d96i-3_>qVnyD0^5w@rXzzqrBjf@u`wd-2A&3q{qVJeDAB&HStm5lYw}JS+eQ7W| zRW6MW>nY8jQ^auQ1C3+>fzZwD}yEjSIUf?+c~d zl~0^+616HcsN`ZTQXJn`+S3<3I|7x%jjdvjtF(~xSrVjgV8hu`R1HH$#r^Lp#4wgb z+vIm1`jk#wC(4DlG1H2Bu8J<+4aI=Ya=3~p^;|8GMH&dN$3rf(r$ddXjTI_yzt}Sv zwV3W$3znLtegI?c*GO22N4;L%turN_M|@fB0SaQ#fexWzVF`Wu!lg^k<^SLKuNc?s z1b(<>&NF#f<^jd7W8H~df1NTRk3Wt*+d%E7vcszUNap1~htyCdPWPT?wJBagItR)p zEn}rLs;EBu<$vyQwCW!sEMVc0l1&FJ!p4hUP@@@ z5W4~cC-gW$SmI|iTgG-gDW@rr5-T1hqwkS~6th>@jc~u;_&T^yEF8sVh8ZE0Eu3c_ zf)M~fY2npfw+v)_qFsC{-q15cot}e}zL)6YS&n(UPfgbUDSn3t%K3|-CxNmkB$}6| zcE_Q|9LyG@vUoUW@oOx-P7Sqnh#Y`#kMr36F-7>rR-&i9-%kujcn4v2i^(cpgF`W& zYjYu^yi3i;g{AmtD^L4Om870t66q^ees#LtoKDDKOey`2--e2(mrIQE(uMYg7+6oo z7?t~2`3)EyAvQvG_OOA|t`xhYL=3k@LCP@+^C>F~R(TR5yp8hSO3dUKLUA^5n&ySz zDS5YEc%}WRmtNJJ(O)I70RXj$=|y6LPI7F&k~VJ}wgoYVz|_DZg^YVCGeP70spZlc zmPC(D=rz=3t`!oOk@O>T?99mOqp*5iA**<-UOkwxBPpK0K&=?@f{;Nkw61H61Mkci z+tOt2shFtes?p*d?3d^~_I@n2tl+iWlha4DEqhR)tKhT7;tr1Pu-iaw1wh3+q~Ok= zn5%Fm$mp?r!i>cMIR|G^c43sq_u{kdX-^$UNt{RaUh|8oi(;5+V;0oM&DK`&VM`?v zBA}(Zfrv;JYY4m~R)ko;)h;{}O8~W$8^N1G8KcR$+fzhmyu7!>m5Uz}kxJh?vbu^v zHH+<`QpKb6qs7PG-#95G+BHO|7Co4t$_ep?7%r{|$Jz{^IR+>t6H77!jkiR6MBgZ~ zLWWq4sS4gpvqm7!z7$iSQ14+$S%pKXD<>sU1=fCJd7mfrc{0q((^&SOY;S$?txwv{Kw!2h z6Qdxvo8Bnoc3kS)A5#rL0$Z6ad;!-{9g#yIFyGr^$rhUcu`0HMU2^n)mB<67-?hQ`v3`^PrF{WdQuf;^%YW3-jBZpJTwx2hIj@goG5(wU{ zE?4hiyN5FJU})3+@L|?i{ajm(E$AL^OpNQ93%m4b8Q$*|=LPe|Y~kl{cBKQ5-nv>l z<@y_l(D&m}acakG@bvlA=ZCHK=Au7IPPiLp$^DjTEb;`%=Zpd40k#6VaL^R4#l0xA zmDRCR_&{T-MrA^%wBzNHJ~U=P6NNH5qQd@rF~Ocxmfa&rfaU&ANDm@SJ&9d^x%P!D z$TF6*C;gW(N%gZa(sHB5;9`2QOTu!~M1!)XW7kEKQS_X?QzaUoY65>^1dQ zid|DU|NWTFSrk0}RK&2I{xT*fh^!_(b3cx=bmCbeL`-{>LebVwI5J{O#xp0Oo8iF5 zGgWcajhJPHJ}6;9GAxErRVwj`9uK`pQVNxj5BR|OcUR76<2YhyYoZ_4l+uFKYl@{N zTMzxRUE68u_TD-6u_6-L`*XKZQk@a}()(7H)_N8;fATGf#D{TUUUyn2)vsW)l&hih z^45z-M+OoF`BV`;E&+y8j{O*+Z?$<6oAh_>^kd}_5gV>F#=&t>IP;?Ax#=1e zLc8l6&lVT%#iXZ0HbVmPVXWa;G$Zw zyoRZ<%q;6+a{k3O< zCr~SW$#qbGkUKNJ!vcH*eG`8o%(LyaY5xgT(%om~DLL)8Pfd^(adUbl=CwRM-Cm17 zRD=5K76B#u7b8!V!V)c4t^yYMdWq-v#PF|WL2I=EEJ7?IVpO8irVFkTgqRTV*&Z8|rv2>6QlHPZ{U5;F2wR)rQ(hE z6z4{PvI^q}!*ij%Bg%Su9Tf@|aTRQsHjU=S* zdyR_}y}n;g;UV|!n(H83dP41q(_gm!e|{6QA8>lzN<*B*66WG!z^puXLh!x?jK!Wk z*WQmkQ~S@7X{1|nZ0}j+OkzB8_ZEMQGO{>4dEmsU8E$$_dd(-YD$|5nT!SfyN~>MT zk5rZe)#&#`+H$P@4m#kRFTA2_UTXg==KTjL3}+vB*Ktc#c!q_^F>y@Q+kq>>1Ek;SF~D9Rk4|QBY#b1a2KA<~$LKh6%nZYUauJ$Qbm+!nq<4sw>gtQADPj z*|9O4p2FeB%yfM*w8wA%GQP*p22~@YrBSCI9I-;IN&hX1>af^Fy;RSbbN#`x}^S@#S%3@h7pdq+gk0 z2T}iJA0OSP%p1qaWko=`50A0BV@9N3&>hOvDta-2<05tN723UA@t0uw#hcY+_JMT= z?E}@Dw)S`83p?jK%W>J_BdQKpJcZ*uEM-Auec!9lMDNeHfJK!*(5+-qLC+0O6wL5Q zu)fCm{;vKiG|{cPFSci&4H?>b&;550JW@Fhv(P?hZLtf{-mV8v?F0Jp{UDYRs~@+@ zib#z*Uc7GakOUURc&ER}(x(=RsLani8%)sw{A*u)B+_>e&{}f>YMDZG{+Bg?CT!`{ zv_OV1x)&GX8k=%Sdv3tO+YoWpk5N(XrPb->kY}YgI;T+D95m%0O2}=tO-|af!msE( zBx(m#Z1MtLi8LBgEVGH?JO23s8;`VN_IM-j4F`9GIiXZy_uqbt&Qme5&$MT}bSvXz zi5jht(Q0dqqIRh*glE+}lKHkWS%iK?^ta@{eel6E7(PB%a6EcR8kN2cF#;|t=eH*- z#5!WrlCv5U-~jF>u|^Pp4F(bqzSpS6SvYgsfYtu&!ebd)`hpnfBW1;&QCW zBJbsD!ZJv;HzxBZ@4qKvUAB-4&>j-6hIQjqCM6@1W0MM_Czx<^hTM!)t(&6IN9E8? zj^x&BFJmwYt*Wjj5JxPF;=6{HR(s?sb>(U|VbbG}xxbzMk_Hra48Dir3zc#U4yj;e z`tOq3R`6O8q+m$Ks#1smo1qofq1;Ml#i@#wR&&zPnh);ZJ*Mz7OucvpY^bKD;qf>2 zFRSm=^dnhSVmottg~U+otHhjMMM(VX6&&Hpla*9_^T~gXrDG4kl|rK4d8fTohzM}R zAx48F?<{huBdf>Uu%~=hDmNnifvs3QM{sJe*#Fz2u3%fyc40#DN%s>ixVH--q9( zS|P=P6yX7(%3B1&L4q8dL@jp=Y!)soutPkHy;CWc{5AlxO8&+|bd#VMrYdit?8ST& zHDs^GATbABD*MdQjQ0?fR#>ByOhy7FpXt9clCO)OULs2Os7bM7AQx||Jf;NrR6H4S8>8HYUL{(QsYw zLYrF-S)atBL$Z^;Lt~fg@tMjfs^@t;2q$}Ve4GiFXUSgi?N>*{tEdkJEO`+@X~ zaCuLK(z_#4(Y@EQ0(E(IV=*=iPd$&lqAP%dCED_4n=Y~rjThK;Cl4N_sZ#x@m6Avb ze*c;v-s*@>s(ovMXbW z_CSD|*W~rXjF6_~Y z%Fo~h*XYz7<`+4&9xgSw#2QW2hmi%o69c5Y_nlY*LC{>U{q>fqaSXF-!MfGc`v6gS z?cqw%1>^gcq+B>Zs23q4iYn_qBGtgzu0Cq#y65^48QZLj~At zJ_@uEffzJDN^^j_BXMs`l4^f~2;oFq#1y3))%+pNox#dk@q#XKAy7>_1xYS30p?H` zxUwYlhN6A0{Ri*eoGM2YZ=59aI|y7Q!A(KF+<5Rm{tsh>3F6N0Vod*k`#S{UjrLlm z@6VwdydUbgr{G*3KtdZ|_ijvqKzIw*&``%2WaIXjSZc5NSyY4Tw757D(47!FDH;bE z#JdKzkJkZg-YLAfO>)Gs_-e`zj&M zT_A!lfAT=^*YPa@5X!pax!KvoY_S_bD%!am_M0fEyXo{$ubtCJOoGMml&My~;8AXH z5#lFpSeLSoy_m^asc`G1g#pz>6lsj19gXwciifd=jbhCvdkX#USHIMrzY;oJ&4Z|( z5i-iw=0=Efhuaw+sgFV|B0RxfXfE@SMDRE&iO5VC*YAMDG2b$<3{+*&GeL3yY#|WY zNKmaYVanv<#(2?(B<5NP%QU0VSD#ZFDin||{UtXs;o%v_6F^*m1LLpW1i6?1v+12_V|>W;qk2I_)Lgx*@J9Av3qZeSgd^Gz>BtHPs5laU=1 zip_UpSnA2>1|sX2X{7kZ$r5 z5%cHtXXkEXz?r;#@dtTy(dv{?$aE#vZMBtdo;ZRZx81brR@*|U0tYI4Gvp7p59~j# z&ot0P&BW>Sknv++68di`hn*5X6jtAN$lJCy+$NO*DXHv(6`W0gi#YMPAG^g*z|jP? z-`}$G?Hmt0V{zjWtq_?2ht>xnvt{_L#dV2Xj)c|}@LY$&9dlNS4T%|;l738o8GCa= zF+WQhT`nQ4r66Of;Bmxb)c71Zhocbxf}pD*16|YnV9-&P>$n#{^#Y-G(HcED)`Nz! z@u0A%b>hD+mV8|jZX|r{@jhsAcByK5!0M{wA4IP4a5u&%^zPL_R%y zjty9YOC*UH`234rkKWVa+v#jUAQ|N!OtaRo7UiCh4^BgDxKbwa@}HWnWf14s;;rLt zpJ;qAb`S*3?^abddLMXY-BDsaPlehJuP$0vxmFHqdt=xIFPL2|luzYVt3&vKX z@L|fmFpc)0$dyp|J!K?9`-&Alee{WTAzp}>l*2^rR%p6A54*eS^|{4Gceg~(25aPY zW0(QEgw2%v=>r2=3NK)g-jwLMX=+`3u4TI}khrV>gmV6w8&|x_ zFu}=V!Y6Xi@~<_q{|g-e039YtNQq!n1yb{fEwsgj>3EXZFEvMdRY(^#r(+4gabKc^ zfVE2)_uYF4nL>J3iLZBu@GCVW(YAbO_3`Je%At%c%uT@x$o>#2H&GE)2d zS@(wyB00aA+nDXKC8DE!lz+fd{zm*kyG5J*tr1YE;sEiG38}7H-*N&W9^DK5M%aq6kWes4%>M26Twa zHXYwq?Jd|K3+LNAxZL5i!}2RNvs0ezcL^!{%F>IAg#h07KWM=y zA>kDxD@8r$)_43J+DxhRoK>rm$?yP*uI>d{JPC1*?+!8w^+J38a!3lfwuV7Oq2P>q zR-}mf&~q^E#*%_+586Wfh2e)~VH`oUf^mHD946bj(th|Vrg^z?#wpVDuc%nLZiwM= z`4+@g9<90NbY^(f|9W=hPycX%oM&USGxV;RD~)9)F{N0bk|8QLXHYENX(hnrl_Ch5 zrgMo#5u^ZjrbPH1X+eqXlU>(#rE==k)5cHx95FnyY-MY8E>#2H_|bsmAlq$`{(5kxXb14T_>LHuy8 zEjr+gd=R{KmZtdJ<%U^P)(oy@tn_4CSdIT?PZBfgNzb_`Bhhd|R)nPz!YUXRU5&uK zum<@NJW#y!gf5?xkhTRK)HPv6%>4!q;hgyFJ6jY?mSd=fGot`b08jn z7-Qqk=7)P(@ks+Opc2hc@VMwF8Q;fa404{2Q>7k3U#}um%eAdd& zkde5bQvSjF?(&9lhv)7X$I5NXnGC4mZs}u&b*knWU4g}580%EKHRU6EFy=mcbohN} zCP1xP*+UKy!6p9;lv7zG-ke>+l)$BFzd^Cx&2TZQ0s@wiQ!^GmyUrEjb6RA zI2CJ(ZN&{?Y<~gcq`26TGZ|*UpnWm^^I<8edNG-IH&VOW_Gp z8($c!|3UUTRTVtrN$x$}Vle|Qlo2}DX4m>Qv?jEwa#LfYfl00>iYzRxh`X%ZV#eRV zTrD*Q_o&$`?;F}?ED~-gPWsMzJe-KcC=VrtLauo9*d3tAxjPCV7yo=?=PuUxdR?hi zbdrBAZUB@a&yCI%N^awXnXx56*m4By$7*zxBPcp=wp{5ica(QeG8 zCX)`Gh!Nn-@mm6X@#UU|RVhbUA=DG~?(EX33y>zY);=#&;_h(c^4XoxiS0lA{r^4Y zZ~Rw2u({F?NIzH>=BYM48KVPbSE7FGOE1Y8pD7U(pWJui)*;bp9XAhtPefP#B_4qJ zv|n6fs&e_eQy5pGm&JEi=%QW_SgQZvlut~if~JB@QP6-Q`PX2Vu0^HxGbcxtj=-ow z;PBuC%ckR`tGlgxT?V`BBhkJslCUO>cr7c;T7VPEAIG)9Ejx<;zW71=w4VvZPDCP- z-{NyXzxi0rAth76!Q;;xEY!Iu81}!AI&TvKn}`zE98l|K^%)3L%kry*n|e8LDN#QJ z*!8kEkULp{cGvQJvn^#==N?759194kA4OPUj&|{_5OUpT=}X9md>jj9psr)V~bMVczWDyjmgCdPM~;6GW1CYw_e|o#mXHP z@A!g!9>r_mJD28{{sB7?6YohqhlhEmK7FxW%#@ljd&CQ>sQLrSzo+{njDNovrb}|l zy&Vg0o(lx^!eE?&8qG=ooKjPr1m9gF;X5c(wAt8JPS;jd{qF&{|Zz@!TONa~hpwYX|M^CRjJPYrJ+?$Dzs}nt$ z{@wgCRc#~=WXTet0XNhWCK!>>Opha6i`l&2F8TBk=7UCobnkdH7&k-rk>wgk^&ah& zgveDOD^Ri`ba%<>IH_pmnOod-sQ+C)3P0T#7v_yMm7_sWG!z`Aa4IQqii-)K;=I82 zT0kX=(yLm!S{+t$lD6j+0ZJcc%p|Hge&DW~#G);oV>&3uE*2ATWK;?M%a}ejGeX7W zuEppdNSApnh3>EC+d*Lz#vS={JgjpjhFC&bYNDqWpfBRpD_}g2lLYnOxQ7H{)?w z*W^lyhFxHZo*KMC{*lG+WS`vJ4b}3Oj*ijEe*^QZMUJtNiSQg1o-EvJf%;WWLhJmq zPty%@qkBDo+>=!lneU(J`@+Iub?!5tc)x@KbIsJpEv|_oB6MHlM0i_!qcf^9$9aC* z-C?e_mtT%k#a)iD6@zMO&>Z$&>Zzq79)y$wL0x+4sTdTOsuYTYhfhCsKB-5U%JF3m zFuPL%W{Pbr`NUG88hW944=xO&3Z|of9q#*IpZ@i^IET18VL0H_OgX{0t-ieS4gP>?n@KP{u7?uUNQ4$z%YhHE&RM?3_PE>%^g`dB;l2) z4&`@q{|*iXuoMeXA$o^Nkz9Tqn=SNH5a`!EQB|!ZYWbk-RxkWQL^iY)@tK|QIsO2g zpa0zQzs~-{6Q4v!u6bgU0PvhnYL|!01qJ-e<>yh zuXZ?um6%dAH{Dh<0waMi=a%!@i5XVU?>yU{3W=wr*D(1ryO;_{4_9{V{wLc9ekTY$ zf|7xP>m)SAx+#|A>0^-%3;AUh15Ih7@lG9qgm2Njzvh3)t0b+2|M``d4Qz)uC_D8X?V=f{dw;ImJTe<7eO%=aiRep@m0eIJ^{MVgfdp(}Fw!;93_5pC1 zW`?i8eOttM>nu&$<5p+oqS#0+KK-6Q1w+tyVp&fq$NQDo^7U2%1VAt_6H0=wDiZFh zTWIWdkB!zsxmYgS7F=v!pu^my6Nq?Pz`RqrFiGSMF(S`As}wKNy3B?H*;%+!9AAa( zyi~W@aw{ZE>+PMjopP6Pm8rp3Yy|op53Ck;60rkpH8ZNPl(>%1dF9)b@Ww(Ol>K5L z1ur{U1HS-tLF>nh6y{NxY%lq?LaI(iqo^6_YK0!TM~;Xv&{$VOy5b1=0e1(T4;Y^_ zR~7a03QcnJsSR#7)BQ6to5i<^tyYzvZ^biaq>d}8jC{Oayd$H9NE)^tBsrf-v@naz zNlT^qHmxmUONfTke=3$iu?q-xh4zLj9D@!=p=LX%^RwUo-(zU!zw&{HLTON~8QyNZ zUN(VwPU6w##i-k9a>52=4*+rh%VaR-r-SlOe#5pdc=3NrYrNS`{FFTwZ|xUL>UKov zaI`5{7CSIb)t|Iyy(bEgF=($6K1)fgVAXa=KZThT8+BGn!JCb>!yVr1qT1>cgg-h7 z%|Q(4TjO^P}#{?*RDa*HRqGB;4A_<778bo$A|YrD5cf9 z(Wp~rr(&5K7_0P1yPB`~Yn7f+>tQ)yH{jYo@Ng~jtXEo*(RqvRqD3s@;)Ds#F5`9 zvP=~aJZ~-_znU_g>MgaNIk|j?H%ZgkI@G}{%vWA>Vp<~vuHTb+m=Pv4ZOUG#M`{Z5 zsR0G$?qgxzYSRlAFBBS@7BMY(37iexdbN(#S+b$rFfYUm$xhmEPFZZ_XFk(D6MF}f zOTbBSb3mwYQ+gI}-ZGzPPdyX2*y*FE+aJdtkj~xk51#ql?83Bdf;%WlYG0(T0R5$& zP)G#?T?m;aIZq26muMPTVd%F{$I2&m$uloIZVY$Luc! z#>rud)1u5%rJw%NzXep--Thbg>CXy5jmtslT>e#zT#z3nqe?VP)c{L`lyuRD1sTs; zGL=?%I20wIlXX0X*V@A38zC_StFM;v{-8T|vEE9VJW0ZuY!Jy?d|jY$-#r7LR*oN(?{_@mC(sj5fCb2kWq19!^}pp|7LIATFoEG#P;q?DIha2MmVuS@{{Zu zB}dmtIGHMk8J$s89Kc5Ctg_kF z>8U?Hldk_(wjAkoF^ryikr5gK#%Z^dviBZcVXE)p(}snJ#lEDVlTe3v0Dwb_I$WN)FH%>`C3U)Q@^#3R^qv9(7e z<8ld8aM+T$!R3H6sm26_;DxT)RR+`nE^gsiEG(|JX-^+z)_-Y}K%#QHRSido?eI?|cbruDyeT5K_2^($^WVUs+vlx8qqG+`WZbixkvd63%}mUIYe5 z-ZILvQb$n66y)QAh;JqJ*`y|V?i9|kc@wdGcx+-F_?+CrWIEglwT;O{FX3@^VX7S! z$+WOthc*>6f@yMakiINR4hD(KA3~B%k$(1B`mMyc)pDT6JRN*EeMAE_^7})iufJ5u zSrDsO=Ng(&dAqD7_TdOcxA6*=fHQ#SxEz7M0e*FoRt09nQpf;KQ`*Cm8WeD) zhdm2ULS)JRa0AW>Kv=AU_%J(bv9GWTYo;vaRqzy4;?$B4g^Z;^S=9Ul#njV%0louz zv!IO)gct#Js%a~Xl*T_0ccx(;$>yHxB=A)+0#rkdcgBQKpX>48Z+)q~6aRgK>o%q( z8?1sb_+<*|$1AWSAVq&CrcK?Xg=9rx7NLCW{fe$`Ww`3m%%;YVM?@x*0Vn!Zfr54c zTne#p64j<8j1V-S2$D&ZfRiRG-ksKVaFh`76D*z|#Jm(^ot>}|1AdD!P~}t+IFdAC zQP2l@yf961fj7OE!}~PQ9FryDXuaLujYaD8R`-Kcw#cRDylWldv})pd{GIBnf~0fP zsIHTuPu%>W2eBh$qxwn=VuI#FIGaVXRd;jGQG^LH6sr|P+1}s&Wh|SB zOGion?4AOpC}Pg{+l+@pK`!o60#XhxKzLd6WqU*kAxZx*NtYm#rthp^mh2E*@el5C z>@i}?31JuK+Z*0Rq8YI2DH91NwRRt0ok*F%sEKaT}TW3uplPA$YvLDBp zjBxIGjtME*f@m5JLc!p;k*mz%%mD>v&wvY$^KVMxB@tNdpmYW2PA@S zXq2>Gj5#V#?3N*2xnbOkobgi2)M3Qs4pc5yt7jmT@x_fYXO~=ixM#l~l{eCEV6A%z z(8U0F6a^*KE@EjfN%AYUw1eiMRL!m#Dw~*MHh$?jRP|T##P^4ks8dIp;1-7+(mFXh zhS=&PeA{Ia1(t~y*INJJvMx!p9gnVE!4bH&x)2+FrFhTzwab@FJC85zv7A6+tE^xz zxV1*!5Ru_pA$DR+7`Oj6nNAZ>*Qh%+YU1f3dhaCBPr91eb_%i}J;5_3OP71E?(@MA zUJ5}z(q1A!yS)T>FRsVL8ItFt&+^2BG3{ij9mEJXYAD<0=h-3s9mVN2YTN|YP1-bI zE&GX-0-b2$?YBs6AEl$E^)@Ut6ULHJJGe)XCd)f?7QGvPWlNf85pKPq-a7lno*Q}C z(-nuJOibgh1Q22!LE7C@|$mAdGJ3BDTAZ0$*G5rC=lQ561)fpxXX17zt zB$?37&+qgWe2n*JkK|^Oe~qt`XQ*Yr_M1(7H-hWfI7SI1>R66KGCRgZS_ygC&ey@T zIQWaS^l!@jAK7w{e|4y=X$$%osz>=wRkQI+E~+7b;+tc9weh0=8EqHRhp z>Dr1d=K$y2w@;L+SLU6Q)I*|~2NYz#EiX@&i#_`cSgRcS4A4E|1RV54E`eURBTM;DdtVQttp$OA#yy=TSnb5n! zXaQU49$rb>t-R=`jeaoC-;q2s`ayd_{fFMg5@Us19OAvkS#W!z*%uU6JRY5VIKzyi_*4$IR!`9$Avo@^i#h?!c4er2`v6V)?z}gkGqkfjgTne~ej!(Dv_`TS0 zi@_8}YA+I$-BgR>*dX#ZZ4k7isw9FQNKgFGG!C#qp8Qq~58k!cu5H%@w*6T1rF)LL z#AKxb3K)L))-8__9f^ajuYxL8SIkKDE7nff!Z`JHG-oVopR-pZricIOvCt=Naa{3X zH}^l0<+kS~?GjjcNb#=f)z6?x7rAg_=2QeD&mYrw&Z83orDNpK$Xr81jquo^)CZyJ z?BMpLp5qz2%9p12zl`P`+y1!=#pB^LG3kaHVGOforbuc9IW;~N{!i$1$&@>=LF{Yu z5cimLtI-8MI;Orm7KA|fZAll9;ZPN->sNy!Pen8iHcD$K*k|mmnCZ48P`_hhDMId@D@95|I01h zPD+F025tp!5rG(}txCwy21mlpjbDw?MG|Koqy|8)sC!bAD6o;+pzk9 zNIyl;cPpH38WKbm=C!i95xeL9P=0~L34Kc$j!C?68sW07-c!;x#*EyeWQr?Sp_!$z z9uiY(avAU9Xm}aoEPl1#squrzIWo7Q-%k+|QcbT13og>z0qug3AFok&=^1bfz<|A! z&cZ|$1O|;{bR!qKol?_VILaDxp^Fxe-D=9k>@f7x!55m4sPQ=FvnM3zkOk0m&jmj& zQjcfG@@smIgfKqze)6|;rq1R+Rn(L)T1SsNa5YlC)!#!UuuJk8m`m@*}K+iput>y&q zLYYtcz9%eh!hS)d!Cta~sBF#Yw#UC(o(S3~LGF#0iFXfGlA4kRZo-*BsM(f_ajFNZ z{>qKRG+ZaUCID9(nPE@BgiNx5de(A__RaR!m(*-NSx3FjX>~`0Jcz?RbI$GzJq*8O z->veXXTgTUlI)fjSwlLtIaoaP?yVl5Jw;%(0DKNA@CEuB3n)r19gMTE0^LE z5G(e4^okNswkd8ocJq$+*SS`%8JB*!+_d!yI2CQAFD#bvZmaBj<)_^6#Z4o!5QI+{k#HD06Pz|r z7yy}q%`w`8@pX83jr`u$uZ}y^oCFs^WjgPL0$~CLCNEmVUaI^>iYKb@74yeWLO|tc zU5nh#iKeSLSpe>Z?;a>3WUJBkum|i%g#sXiEp7|W=~85DE0OK|ahxpYh?viY&SLGL zVNa{mOYeVR-zGjea;-#c{`Ghgx)({FPn|5r!Es>m!(aVYy2je*YK6qi+bWM!feVrGUuiZNW2*=@MslqQeccLV-)3yBp z^T!0@z>MlmCso{dM+_4~W;uH`8)SEZNXEq=z%E*)_z2PGavuU{e{eu{BZu~G)%o!$ zH279|)LSuigmS4l0ozTJmoQ&XcmZlA)I%{a@N;Sw?M$=@^BIu`Sosdnt+}Leaz+($ zJ{wQ2DG;trO1#wWp%?9xPSI7S!M{@e(iVxnK~dW0)C!#0D{*4|yWBuo$M*Ry6fP;_ zvrCs8-LfQoU&ae$wtV`{6;hPC*72JC4)@xgDK1!U+d+aRfx{7D`1vea2S*BIkK0 z1xQGbL@97ZYd#aZ;n4QnJVye{v$F@O@!%-s&8}l04_ti!poWC|?vp+Ej>Z*zXZlX; zd2+y<4(@lJ-pXnY6cjNED(BD{#f?IrZuPh08Gyi1-!flf(Q>QO1{W8~W-FezKcFi| z+Qdego3}HWCmI!eRl|3*7EmJeJG$Z3c`#9fl4jB!sQuD8Rh-nRQ}G zK|n6snOK>!hqqjIEMUg(xJ$LXST4IILI=>?_YEc+q?9DN!d{y9C}jQQup2%p?G;=z zid3rgvqfN+!&7V9wpgiZ2lM>nf`oG#l9ZX+H@x-h8!d-hB)sY&aQ z1V2`}?4TEh8M41hz^WiZa9Gl2TQU)69l|XxnDkH z(*2E$d*5L#qtxPSt$SM90hq-evCdF#Y&vXJ;|V4Du5B#Ek6TC|H;9Spc@K?c{P8QB zSB(Lh*{HUcrEyFylZ}Vv8aqL0;V2PWFcJIUKTm(7`S5?Rqie}K!b*x|%#(UZ9?A+W zckRujn9C?Z(rcw?^asG^CS_s^V_g{rgGW+xaKY+A>#C|>q|Kf17)U{#9Es%|nrR$L z_cmW6dS^>MO_tk_W1^~5(MB0Ug_Oz426HkK^#`h@oKx!fhgR+T5di5+q(n^J?hATh z?~z7jR6_jNLZT!XM(vOS;3?W0;X)m`Vce6yZQMcj4^tEkI|>~P~? z5opaJp=8!eSr zEU#&Hlr6Tw0~_ZPMRI7i^14lr@3aomk>qXNI)du59O~5CL`TgPsjr${HbvT4r~$}#{h7@RQ!<-p4(;|Qp)?sju* zMBYqHldH4wf}clhllFgfM2jb^P}LEhwr*5=-jt-`xo3kMw^W@3+%DujiC8-0$O{Jp zZnS^=iSl?b8GFY@bLA+5{j9rHdL8kJ_%x-o#0gTY2*Iv|?a(7KEFsxZKybi<*`*WW zk_8$q)zL3fA%Z@77W>+A*=)ya$7-B9NWBoygVI;Acg2+^;BkW$*fUZSel%*Sy@Bgr z;-6_-tuA-($U~{BV3Qn+1@x$V#xyVzGHmUlJys5G_)Bzax*haK-x8(KjO5gA;K951 ze_HN;YHJ@J?jTdu;4>HjI~m~hj9{G2uZ;1?74uHAm0Wy(6f4$H}^Ei zv`yGb;UN!!-Ytu^wT-p1=8%yMEJTn@_BSM0&ISq|luT4w#U%VRZiLL;bPujd)kHf# z8Ym20ah)j_&IkX4IOMxVc*ZNH5GsHbTs&uN^kmn*xUPCC#@re~R>?+OR@yLRE;rv; z#6E@0Jyd4xW1|m|CL~pzwP9Ra6+pT##CVf;uHKJw+Bw;=-8jc33~1cqvlElegm1gV5?+QQ^woJ|0UMUn+Z4rJOKSm4drsKSNi zjfrpcxVNXY34W>38i1V#vgP{@ZrisvWZYt|COOdBDz|~JL|Gz8h0B*0H*BQ}a(!w~ zrm1Qo*;T<>dSt`gq~ZjAP*TU(8*;-b9f%8pNN z0~U7@YPZ5j!gWwpxz=jbRQ> z$hZGmId`A#0_f@OcsB=MT?eDq>#Qwyep_wUY6YSlonqU2GIwryyDTQqf*t*Je5>}} zBMUxATDNmVGZk6v!9YWDJN8;Es1yfe8U{`Pk)^b$7m5Q6)C39JJt=Vdl46~W!s)|& z(*x?E8J)14kQ>P&VKq(7oqb|)74UFtIrvy$m7&`wWYcg>0w6)G@Au{NzqXHK36w<; znf9}0GLWL%3n4&d2SY-tqOezjo&0fPR*Z6wVUuof<$D=pEHTtJH#}|s29_+E)rffy zS#HmlQiV1~nR)U_w*c`pRcFBl+kg4RYw5f+sGbyk#STM2>1a8OAW*5 z^V}JD7z2l~rVRiLSIV8)ewmQU6qw)G@+95PU$Pt3!PInHUXyJJ4%!z9 zaU$BBz9{oPKtWP51hL&1pm6f@zlycsr;zsvY0|6FL|G5<{#7o&y?AWbIMio?1KtabuHz!DT&`}DvaCdAEBAcVJRWnFF(inrbbC24R<^=M?{Qh5Efc^JauL^>;FUx{7 zvUPale#)=`VUk3jV~3IXg}#6FT7qioRc z>?II{;l6M#au1}_Rh?$!)bwp!fM5ur`DC&Lv5tyI{Sjr-G`(GW`vP(yHiUak7BTG* z;)y{+9MkiQU*VH_ybIf>oxvEPV>_m-hfSo0tl3tzwJi+2$IW(@Q9TLS?X<;0 zdzyERqd-_3(DwPRZMhDJ@$5;>3d^=h`6{4Hcmp0UWH#-tUz2kbMF)XtqB+>YZUB~T zi-V%@kuR<(TN}6+LPpug9iWL+PZ-}+z}w-uWQ?8-I_yxhAX5kG``to2Fpaue2F8|a z>oc>;<)__+vEvn_x1;qH$hF#($VdZR13tE&rYEf6Vz?7>EUW#D^m1n!kB$qkmy@>4wk^5m{%J=U7%-BY)=u+@eg>%^U`MMs#t7>N#?8y(@ zAUuG$)8jh>0#@M&Q&W)I#x!Z|Ucf17mK$fwm9JfY(g|Vj>Vn0sRvwtdBg|+A@CaSX zgMcI~&&2}q$CSmm;~Ity!DseWTK=rrR{@Ts!En)+1 zOyGB+UE_pQR;#G8Z+xu8sjZrR6xUA~(*h9RVWt`gh~zJYc-^$M&`@?rv?pZokkyC#aHbKJ-aU=2_Y* zca6EHC*LUFhzHYNx!ehIHb!0#RDFoJIxqteOuS85sW&F+ViVFi+z+}o-a*8zp1fI} z^tp6Pbc-<(OIzDo2>sy{It6Rpdt8WCW4(3gEo1L#V`yT}AQ0^QfcTY*XYGNlJpl5@ zZi2xPfmXXj?!+iU-^5-o9P|D;v+}wO#Z)y|L0s^%?NP?(UfDK&`t#xyB3xTsq=fwk zMUoIWwD$h1GX1+)H{~>U;-?KRyse7os0!F`^F^?b!7*5RBz>R?cQsa3`<2)pVW6^V zBxS0Stf81Tg7e5gxex4A6?j*IWZ%I;4?evAewn_V7uUXSKPikCT?g^Xo7RZLn_ zLdgIxT|iqX{u@mk-nWMlI4`f13(E@}hahERi?uC;S87IJXkHrA~ z9GfYJv9V`b z-Rf7LD6bd+xE+suJ-9{5RQwcX`Q`ZI%eV=*m>-=(E+naCb6|4Bc`%+7=q0RZa-oZ= z#*b>KWlQg1Eko7F^kK#eMvS1hM*)PWGi_#|BUsg!Z42$PHgEi269(9fwxtI@!7zR=jD_fmmr@e}~5*tby}Vji)AVPaJ978!vbw| zK~uZ(J3HpLo-2ydbPQdk! zZ2??Abe*|{Y>4{yt>kgmwyb;3R`@)xyZ9av=SdKL4x(g@Nc@c#q`;H3MQdfz7W&vz zZn`Ri0r7{!Ag=^06Jrr< zZ|%*pV2?+$m9DL}2B)626T&ywfjCK2t(-r3HuddSnHbq%cLLNmIM9SVNx?h%Xdnr%nnK(^(Bvo2=1W87JLgRC)sV6%Us(YgQyt_ zI+qOdiq!JqlH!oL&?%uQBEW)dQX19HszZJk$!COR5MpY-%@`XFKdcwcxJbJq^gzu( zjTzZtU^918=yH`kXTe6N1oHE$s&wvn=~}AwtkWwFT%y-_V$PG}I1)ab**+P-)PT21 zw#|@vT^@%Z6{-7Ui%3HB98vP-+G>zZp(*4|mA}R=C|AY@#NlZkI0_b^RD4fyJtV@8 z`Xbu*^z22aHrXF+ZO`y62lj7`9x!$Y6w##!Ceb4L=Ws)!4blb~fILf`VoI`7!9~c< z3Z6IR@s;w`SS8Pcgk(c=5cY&5MSLIjtr#%d1U)7e7CpU1;+<$mkV5KPyd5o#=J+vp z9j4oqZb^IvO2PR`UD;Iy`=j`Hiq|Y6z}!gZP6#ZP8XL8^Py-JHLfCe@EN&!9zlhbA zz|0h>st>fiZxvOibZcxHRY>t%a0NvJh>ln@Xz1Fqr9b{NkH2d2!XN#Q3E;c@r|7@z z7eblhUEOknO>F^a(t(^vW!=h@BlcW?y@klPLlHpW+4CWe09b&w!Py@4{5GQ9Q|b~Y zzoK-A#XwKvHie$-3y8F`Z6rdk4$-QKL^Uc$P%S<|e1b}O+f&WnXN?BYQ_n> z29-SCM@V6Iqz$l?Y7@s(kO&YLVz3iiA2Geo0?Wi!A- zVVe(j;Cy9JO+Gwdo{YU#A;x#)71$y)%JN!Jp5DcbvL+TXN3bNA{e(J0t!h&gsr!ZD>{VpuIpzVCf@Mhc{D}k)FQFemr zZ97O38OI8@1urh+w^3XYwTY{jH2XrTKMBTKD3J`irtE1el>=5m}y2t#^r<%PNZ%f}Rq{&z3``j!?nRjE8}Q`k%0d5RHC%@@OZ?p~5|t zabydZi}Qy4AUst9Pf=AVGQ zg&BrMS*DGsL4~pOBA9*o|Ms)+jHtO3e~f8>@fqYLClc&Lt4-S2!sGT4#ZeFe34KUq za1OG`0b*;rVAAuRbf4f0tYllSytFi=k1PRfYJ6ki8doF>DAE{JrtcE`!1fFZHPAO{ z=n#Rs$6IWONvGY&kzPfHI?<$`$j#Y7EMS-=t=crDPQTc%u3=(P;&`LD95ez@u*jbd zO61pN`cvB!!6UL>Ov4VYp>057aX@ido-AU%lUfUc75YegWNW4Ld~(;=n_Q~Ldj*N; zxE-@o_5)ymnm8oOdWtY`SA0mcP7Vt_t?iuEBw5niXekICv1b|v-sYxfSE&}J_ur85N9*Yc~E;Kz{d9S8^v=5(-S(uc&mBBZfL|>dmpC=)Z>h8 z8T?zy2H!v-DBqE^UXQlLu%JhmmBLUFCBW)9=@+H-f^U>BWXX0ocLXd;DuT&qht9*Y zOK;oSa6%EOMmi!9(Ym|J58z$4<*$_I?D^Gooq-pfE9cI}QK|An!X~sK{)LqN7p7PP z$|X*pAskercs&y$Hjg~7VJW(l86iOkxei3Bgqu3-DQ};1?h}B_IL5J2=1@QUls$+H zly~VO@UURCsY0Zi%%3RTiqa^J*2cnhpIlB28+EPFM*!r%UIWs9=;~UrtSITkVEJj8 zeqifbENhqTWd4#tnm3KW@^6{D1Ce8KM1S!<6f9#g#wUmaP-t)ak3Xho{pa5akqER$ z!PG=MVQQoWf(F+y^zGcYDJvmCmhdHLz)osA%I;z4$cV`oPm`cXT`PnT>f=D@K_x)r zeSoh$R|pGLWn%AVb?D6E>D6W0x8|A?+A!|yguSI0DBv&K{`5qX?(P~te<_zL)1wu0 znlO{ysZ$*rN7vf}4+w4T14NI9>a6Ur)e5P7V-nO|CmMp?G0M=~tBnG1#{KrU%eTKB zn}?_4YT|BgrNwJ*=M%;oH_KaZ89OLqiEu_U#ZE;zmz~(r9IA$)*$41M70$93BQ5CD z630?YT7WDk7x8skkdHB0Drm~7q}Ig<>D&mUbwJfGy*+KEK%GY>2jr&Sf3H+;^$*6{ zLMJ%V{dKf946&Ex;SefPR}xIHiQzm**f6!eqInOkZ`=$~zd@CS8;!8I@cbkbjRbr` zQr4bIP4WCZ3e|pATZaeVx&OYca)~~FsfDG={w2En`!&qNT@E51QIA=p*Tyj*NF|kX z*C@<2jptK`VEf`_O_^@9r6^BSq5^zXLZ?bJWyHjbJl93gI?SMV#oj4$VLZy=&{iU9 zfMkqD{FuXpK$2eC06!r_kVhDV*k!JO16(m^@q1GW4Z~h`18$#jl`QZK%pvQKwAjj2 zOI2{-vj-4hC8RCZ3 z8!c~?3VG&2kcoLb;`yK?TvV-QV+&>3lDoy~p{q|$gaXI=Y9X$fJMoY%=dG&qSQELl zR~@oSrc)sWFJ(AaE}oAs6Y{HfFsS@S+1QLFui}*=3+&GrOn8L$CTv( z>$9(S1>Ji$@U3$oanqgTXHmBD^ER1w}mBAVH->H zo3V2uAWWm|9E3himT=a0lz_>&iDy$e(Dk|-Tt)y+1Upr%zknm&Fw z>`UoZ`d{Rz5-od~rHO1z_kMmY*ALN;?P;SZ86=zqWtBXfgNXEU8_JLAoi_{r-2x4X zZIUwn&v?dP-uwK9xjIBsPbW6=cxTV*(fhYoc$CqJ&TzNv-*GM-A1EO{a9id|*;rhB z(f9)^ECa_MDUW>J&K#&52Buyea_)346P#%e!1;?1(e&hN*T!_KfiYk@NWI;6Udk5o-5JCd1@bT-K_-6f(^kon$mFWXEUiy;7ctX961__b+8^ zWFb4)O$JmIWWn8Jd;_8{FDYbd&A;|;{rNv9ZvA9jx@HWxtqcVs(ID1LM%IX23*Jj? zf0-_Eu{efmO@A5GCtZOFk=w4w(jhb!1luRrkLlioY3;FKMpGbggXUz5t@dK5<~QmM zQ6engoDBjmSc=#iv7imCTo2Xgx>PSSE+>H<%B$F7ELs6-IUey4fscM;9K;P|PlKKl zMcE~+``pxXm6haO<6SC(YzM3yxGO?59Yrr6*w$%tRMy(|Zg^UZWPhxZD)qY{jZFrl z+)=$itgrD!`a!Nb_JcW;$i*4$-`Qd#FrIz2M#5QYioD&$^cPNI+hxcjNC3MiS4-!P zeHjab+zT#z2qzlLXewhh0fXe&rz7NBycS)B#zkkw8DQ|~DE*~Om`%Z}UFgY;aS~#L z$!<0BE?p;;Y|GNy!J|<%6z!Ri>?P^(#i!q|wCWcxGT5>J6qu#pE zHs=N~8`HD6vL`R+i-htqNZzKsQjX3 z5H?h<2i_rJIul8ijdsfkB?Fa&x3d#c>bB#V9{l+JN5E0j(rB<2*rz4T5=Zc?Z3OTY zGypZL$vjeysMWFqSi^Sb@BKT*G!%L#!+fK(E(fO$2#<`9gy9q*!KhM$2U9oYH1+ET zaR5SC6msLPzxIi-=OIeKzzC$pzNi{XzWRK5sP) zdX&RE+&7{wS8vZgubdRAu6VidsJA=87NhZTjdcxoNVyoz!+@&Dq^84t{8GrmK8+HNc2h|?h2kT+VcT|a_htrODsc&m z1zMf8q7x;DW0RW&x#WhwB023=tacHgV&@>wm_A$1J!|Z-g0~ms#lGRbaFIf)s9%tJ z;7V%8UWgW3qor8K9dv6T?crPiUE*4QrBlHt3~ z5ffANN{9#l$IKjFn#`O+L~}Dc>Y4bh;ygi^(>dav=YHyy@|uwXHihi!Y3LC#EHfO1 zAi=4u*x8Fo@kCAqM*_=g&%qw0Qz@Dt2Xx4ITupEeB#lthvt_0-?+GZTQ13CIePpI_ z3R>*b;&!%ru*)03O8l*jF4m1(jK5mF*3YTqLUTwBWoAxGFPYFC<0kV-sZ z4m=mZBgjP92#9zv%~+p_pXN7WWaSFc9QzAh!uZJ+P>sr&U^2K+3cNt>201nrelhwH zI2j#RD41EZH_O8&=G2?%clJpYkSm*=0XiCDsOBHM(iX%GO7~jS8M&FHSkE9Py9p#c z^zbiTM-EVaA>V4Jq_S^h$En%0eb$f=aW~r(e*CX#ARd3lW;=`;Aevp>vh~$g*yntQ zA5sWnUlXuK$>!KGiXT1D^Wc=mGzs<{`8WE)TsRYgr`z8Jb}Uac$5Go{CJ-MkJ@BQV zM6f8!{|%w^*g63_X2*NYE0Z~%F`K*kb9`I*P$SJw>7^#YwHuiOpBc2_VL}81jW43r zkI0C%3-T^ZRh%RZpoz=ChlmSjCkTd?NN)a) zzZ#by43dIVIH}{zMs*Pie;8b%h&7=%rv)_;WIj#kE@Yg9eF+pRJ^0lG#5j@d^iz~r zAg4VPJ~u0fwkY$tn|f!Q4)1mBb#>AeUk?dH+?0lMh&v-DS)AJ1%9w{HvuADFcgyb4 zzF%covBPc%DS@{XYL+>oCmDm(zA`us- z@&}2u??;VT&M9nQLCT)li;;+O%Suv(We29=*YILt@LL$^LOrLFtHd-p%Y!i~p%i{Nk{Ul^Mhe2+0l9U)(|ohm5|6bd!m^UxnD z`JC`zhdp)YupQCkBUOYdX7Fo!vs%{vC%avBY#cJ0Qni?>qlOvxf2r}V?*>C*v~sJd zqT&d{bEjer_dZ$GZO|UrHAZMG5Lx$jzy*+JT zE%=mbzHl*U%fpp{CDrwdPIyy6#RxQuQb)3v!} zu&pMAgolzj5$q>L6+f+FKF7w|g630PI(8{0kvyT#y6p$aC)FGepv{o`Tk1jnt+(LPF=n#aN@Z&xNAQ?_{serlg*kR-NR|Odd zs$BDApP-W;C@IbLb#gZG8Gxm->!EDy?yBZYhMcG5V~m4J*-lJJ03-$FBjQPoEn`ns+ZEk$&)SM{7Bs!uwlB>a zi5p7hl3^)}3E4>I-43os%!%;WnjVTlAo47;;sjz1#xNM~^576+&gRGd#i|K|4ss?6 zknV7kt32{)IqT)+;C=a2v*1u%sHkUn@IF1yGU3!00A&nh!ia=&ycF)m+oLbiGAfp;4pFFT4~#$me0lzP(}olq0*)bZ5G=le zgo`lfJ)9IHG9DeDv_&@)sBWi_>K+3`b77IL@S)p#G^IFeH-~V=NBqNtQo4A>tLJeU z-LQqvdVP4t0hTw)YVdf~>cBufb4a?F+#xYRzt~C`*d2G z>h^#gb>9txFN4H+5n%lUK9Mox6qZ-z<6Z~qRu|P@=-am49ZBN`A{V7UYK7u4ZuKs6 z7RUKb$$LP8Nv&-UK+#j7mn!-YPL%ng3X^BW3z673v#z&UDhlktXZdgo>M)olr)CVb z40jq6EOQU{Q{%%^cxk{2x&X3`y`(*B2E@*R%qgZ>*bNc{Lq>Q7yI!GIPHblHqi%8i z+NP~!aj~q&XHR3D9?n_3D^VjAVV{4by!C{eXUvzj8PoiWy+GBS?PQmNxVdD@)!(4H z15~ae=-h?J)RVeVkT}IZ|7QA5al!t8-iN=i<8JO6r8rpc!SkC}7t71GTren?OcSpc zx12;Jh1_jfC=VRfp-Y7Rfx=JB1h(g#KVRHV!@~__w*c-s=(mP3tWm4+n;Z17R&>E0 z)WK;_Yt2UK5@a)hCGYL`u}|49fGB6q8HW*H!!9rb{f2~O)u`9@OJKqFN5EA6o;#m1 zT4Vg@X@y3px7t1N{*Pmw^?KU*wz0%QOe`X1nFKuCa;vtEt8f`d-Tcj0pR(;=z(3ROnfZP&O0myy^Fe4O(k zjGiPPkcTmh;dMFb(ZF$09kzCo&c|$HSS>*NAV^n<%*<1dmdBp3GuZ(Y*MJ;@taOcL zn2>nX?O7&br|{S{v~X%V1Qv?|zZ96GpiRJne#&k%EnQMDU1_l#u2mbjAyt`CL$)im zYd1s1e6kd5-3m7#`jL3?8>)k9iYSQ8(dJeg7+1Im(YXiECoXU*S-y;qBb=6T0D66I zVs`?~bIurBIE8l0KDN5WjNo`HGo_Ep5^y!uS}tB$_n(FRAH8 z|E_E5lTPktX{1C7c;gmOPIw(ho^Dmc_EcAH&1zDVU~R6vusFYIw6D=^-2`rUIM3v^ zNHfPOv6yDE1ZT^IbMXYkAKgZ(m*N6YEHX)&t6kO?j5kHN!9C2uI19Z1#&ckb9GSCe zoS9ThbpKQEl#Z6Bw;_ExfJW!ZpOpKFZ5}Q z<&en4u<4bWxP^|+csC!~u}Xlg+V^?;Zy9Wy?K{2+v&6}EBkd6lVRt*Js-qfRGqX0T z)p*OL@ZIBb&)x{R$yuOY;ul2bm3Fa1r1%E^E_>r&eY||h{#uWVzRBTzs(!>FIv!QC ztbCkY9Y({8gH+fzYKR>ZMrjn16z6h-d;Zr6lzoaD}3l~%Ic0I)U6c%Pf$emSkeoay);z3ex{B7YCsJJWHgU}O4A69{CdhdPzP&B;p|)$Z<3crR zA$~0AF~;LjfrDEBf zq!a+B;rvO5r_Fdj+IhU6iVQ$iV3JcE6Q`%5r1-)%D4sj6&pnTrLJngSpMps!d`jZz9}aO!RE+46xuD$!melqx!USU8j$y? z8A1EH+Cq)EYry~uil}AFo50vn*_pU7K}5l}DMZF~)p$e~3tamEwR08a#`ZQv|U-;h&Ey3ddeZ`)ck>^pa6Q zQ`CzKDT&WA+mwxtRitD?b8(_%NCIX~{ntl%wlBnmlil>H$^0xST6`;CHSDCL;cw&y<-sKSvgt<22;79IQfdpW^7%UVN39b zB#f2%qXIB4wK7?L>y)trslVg*YQM%9!{EPH-1O{_2H}0S>XznAc8Kt1?81Ye5y`m! z2Rl>p&c7|orUt&0$GqW!09?=M2x65$QRLhO6Hz`)J1JmC-XHe~MRv_J0ztbQ{C23+ zXtG*rZxBc1%`dmg(u%EKPB%3_LTH4kh&-Vu9VJaS^XrgW5g> zA950-&cG!X6)_ao$DdaOzzeFOb1}zwp;1lQrYN#j6Ee~}CdhDVcTy)htUsMFtM;!~ zyxcRvY;C0*QeGdqDJ^Ah6K*#;dgxtS#_SK{ipR@CvDP{DNANfsQs=FQpD=a@@=ChT%^h+w)1TXeJ93oX=bulqcu_>m z)}=&oy{Wb?!eF=U>ni`iF{~3u;&JNwQhX3E(Exy9V9oe0F>m{0?(Sb=SA zrR-Jh5jJrwAiqCnGhL+aBzb7Xqo|2n_TQnFu=|)`KQPY^DSOZ6!CU zm72S@X+#t{28K&t;?gjvHOWBTfQ;N5_lZ|PyGXb_A*6b&5{t}7o#Myq7P7DqWfjNM zScI{Rr!P{E70+OP%~_-Jt285sONo?+(CVEoTh&P0ikdh4nu~EL#PCETdl4?Z+KR-X z-s^YqfVTl>8P}Qqx1(zHZXFEoG^UVZu!+KaR2HR+Pr-*}0r~9&LQ~ukpf|%z{Ao_@ zV9BgTu9u54#!+(-j-+6~4Yh+A1UDAj7ikd>iV2=Y^dyFYUD3qn6aabw5t0M~M0!U5Lc)O*Y(Fn zV#<5vLWJLHw}EdBo!;2!>`EP%?av6#jt2sf!i1x2dCI9=oe#clN~=Q*UBuim23uPw zFWV#0FUKB=eDzJn#T#D`^RF7p_NXlna(Q_(6ob4*a2L5*>1@2HScwKw$VIS~uH#Zn zJe;9O8Mzg|w6a)s`$vLZICbG7uo~_GLO1_7oWRHz3JrNd2<9H;M|Gkej18%?=>T+Pis z@vVScaCx{4VB!>s2yz{9a*B=`xtcz!@%IjsYK-}Q z7P=EsqpBRG?0VYmV-PI!%5aqRa!01@DL<1v) zLMqOXpn7Jwrzy2+KyS8}7Hv0F>(8LeBf!aKMrn311~V7K`}jOnymJT^@`V0R-1OLc zHCOO~gINhMcL=go9$w(nU{EViG4x=qY1_d~ z3WTUEoVOmf_rb{<_V1LBq(&1XhT9!d5_;&p-(M(mK~z9?YKxM#)uXNUdK^E;C+8r( zaf@0jag^=6s;1s8cj0H?H4YrISBzQoi)?o%6qSIst6 zP`@e%?krJP8hS~o+@Ugm4U*r|OrX36J#5qd0X>U{2V!YkImSK#e^Jnaf3T*P^h<`|-VbG=;leYR!WvJGCoewqu#TTS)_qzyVk=xF4 zN{^<$_aErsyKJ9cho@jl&>0cHq7;Ha%$=ma&`x-HVf{@{7%UQ;1a3wJt1fuv2^gkB zIaT!Gz;WBdZjnyCGmP^>5lR^C9up)>oF?oGa))+^SyON!>o_ty385$slF-~ghC#x( zo=|wz_kxwCxa6H+(IHqPKh)~sB~To8pPHT>^$+Y^33>+4(`o;W$$-kY0HR8}fyBum zWA;$H;(Q@sP~mHKJ^~)N@k#(wQ9awAc&qQe2$&F0{16SSL%}|d3xv}LFB5pSCkt5a zc!18GlF;8GZbM4rMuIt%;t=SKbM7*Ilnwa3VZ^6bn#{=s&MvDQm3zi!vQ`_EV~jC_ ziEtaxSN29~bjVvX58DJFvmt!cwuaP|>8ELTY)<72iA^a17dLn+UF1i1V`JD8A)nV| zlj1-hCRk$?&Zp^N+cdM<`UKe!Z}Da<7H$odY<4QxvV{KPC-Qw>tft_jQmC%>~?YVXT-(2;}-vjEhpS#VUJ4KhLB{R5@ zw}nemJoH7)!5$iC=YKne7EDjR*drP!kNqbIL(!N`68P^MV&TP8H6{hqC`yA9r z#n0j*FmSg9)*M}|4DrByAmtBwwbCjs%AxQZA#fjjzf3>24KC4%(^i1_MLEiB$ILkr zv$1v*VXizQQ>A__VHH%odP$dT5tj(N%q1fdp^2Jssv*T`v`iMSG3;&G6Z~4#*~c?C z<(voMHIoIOJc96W3f~~UBp{11w=z15i$P7M0^So4$@>ZOr#tT18v!kwGeqg zCxnN{z|9_WE`z*;JN5~lV_eL{(w@qWCP1TFc@ zUeZ6H2bCg9j3*ldrDTs#B=^~bfu@c4(&|iWTD-D}bAd7^4)Sj%wtZ%2M&>%YQSZ}3 zPuawH4ESoZZY%i6+Sd1Ul zi{@8BA*^p~p#Hu1%^|uG@+8-ikTg(aXe1vy7+@^$z6Vfi1o2WlM%{=>^0|7zsKw~? zgeh@oF3XPZ?-j5qHy@Av5khf$bsNI$$PNy6p_ES6WDY=TFnlB2O%7Cb*}=PuU(kyV z!^v|^wV=~zv(yy&M>w$Q5~M;=%^oyrlhim$QSo)`wc5QTlV%?aEr3lNE@gk7$0yPS z0)M7<6u}`hPOMWmk9zVTHj58(o=%1QG)E0-$Hq*8u5FJ;?t%cH#9a1Zr1UhYJylrW)q-M(8s88XWjO>a?S+ z6zQRQ*_RqZyBb*`QjYL9PH=c4H3DZ{!A)YaB|=*0OiOB3q(rJpV3or z%i++$8{{j9#j?;0h!xP3_u9@RnCHEEQ%a9fJBeT`zzs|?=zMq}f42)Ichp0CT8SW~ zan(t)i6#2UfJV`V6o1$6STMl9e|mS~|FGAHY8TOh&T9 zLl$Nyo>RbhDF}gOLgdWL|M&s;``m-)pI zd^PpFR~z*kODST)9R)oT8{s#KjuWDZPcg-js+nLs^85oAdJ90G)nfz>auulG{7D}e2KJ|r0^}J*+wfkxuCL!Rl zlj7N0v$w*h{4mXwI-R|2;BJ=XcHFa-ArT`w=yGYTDPq+S3{YqiYH+8-?yOhMBJotn4Q+*>|&zvLH_}iqILnt%{bA9Ez^=w{1~l zrMU%EOqfXq$Zg2$p+#kZ__p#{DkHMveum-lO;m#zU>N zJ&6$b04A{&t~GN);}$FAK=TYc(Y6Mta7pZE@MB+S!iVPu^eWvR+2VpHqA?N`>!4Qv z{3$5XDz{0c*h;j184ONI!ots7c=VrFW&LEVb3s{Whve15i1%uJ#Qpb-+zi#!g|Q!p z1WGx{5DtLKPWyb>M~H_mT`BD#De2;h?L{yf2WYsO2N6O52VcM+kfq!Q2Iga z4K6Y$Bik5+*r61{E*42p6|&M-L!)!QKYb^z!)bA1w6ApV_6@7w)hi_fU=%UugGJaLwo&QPE=Qcoez# zwY?e-`LILVuaFblNFJ~ZF3kx$(bjzE@$M(fn|9CyfyOSwxNGG9EcR2|TD#&5sxN9Z z!k(*4g*Dh}uv0yiy;|yNCnF2=IGe=v0!F+A0^^U#n6UjzoIdOImYZR}a(ShiyaEoD za_)SPVjjLd^k^#u73b`UKr=W*+c#P!`s+1i6Q9OYZV(eLo^~XY$mpF<69veGBE#*; zTgq)Zgsg@hiI@eqwefRnLdaf@UD!_{w$lK8wT$B8qQL znPO4{vX+hFy~AUqVrr&%9ZNDc$VAi5L5fL8p%G+HpKqtC4?)am675hKm2J^PA^L0o z1*q|uK?!Ia6##{L=pb8=ydLs##-xa7Vo%z#5v8SgvwgZ6=TXi}@R?W}B3xyH_8ESO ze=)L<`+m7?k9zQXh%d3IDYP-=Et1{z32SPi>KZY&~(<-F~?jS3{m}^lwnVUj&ES5^_brdjBw(1IDLp zs^-o;pY~X}`AYELisB6Y6pK|;BiJci+qo2M6l(LcxZcFhS&>YUoK_(qpdPxUa{=+& z4S23RWj8?nUJ6K!kvIgK(?CaEri%Eb$~!1=gLMo{)1M~({}>Jb_}~7CEMl)$_-ohu z`JiED<%5*4+n}eFYL2v-Kp~8Q+I~4`@KE`B-18dFWST9~(}a*D2qyOD-*q)TzY>W% z8{qqY`89YNa934Py|@6OxD6DE4tB z0@hY-8;?Fxp89I2fXej^QQdNYa1@`4OwsiuY^kn+hTM=smMIluPGuW4^XJZF`B(n=yA7@4T0*We` z9}((W3Zc$3wuRt`DLNOu*c1=pB~-z%y!hg1fX6Ij+{nzyjLH?`Ao@Z*9qf3!LCa}> z_5r*USAc>z0|2&%1D})_8qBcKK2`G(OCh{TC{oEpxBE^L%+80Za~Y=W&5>HACg-7s zBFo6uvrIn4{+-Hcujgp$d-3r?2+CqcMb;Y0q@Rg{?!}ggEYZyz7{^h%f&0V~6t9dk z>~WnM)PB&BuIOIxD6A48V>@8%?7bA!ZP&h-sYwZj2Xo-#QS8b)Y8{jn984O~g$*g&brVt=a?eQHx5GfgO5FAmm1h;W2iOc0kud+dC0(-#g__pEM zBA}Xr*`TR7%nx*WaviVUzAM9K!z=!gKc!>75D$VkYIZ>3t|-b-!y@o@;9BFHMhAVG z`yC9(ErFcb(%I|2ZR zU|loT86V(T`#xfg7zWePjTYQeid~!*L<-1(8oxeT{`arN;!%^eA|QUF;y-W+*#%Pw zK)1n`vw+%G>n2mL^D#jNU8B^)>n}LIUJ=4_S2_V{rCL|5iNW^|7BC5XoE-sql?&!Xv zpZlq4M7?*$Y;`EcyC$FLCrSj4rn({g=vO-<3jcyX+v%L4@t>^%Q${{pf|+%8u#XVq z?uk-t#`#S~&7|vir#4#?IKjKe5@}4{A~$9$?T`q~+Okb@3k>%q3mD&qs*&bP|z0L(Cn(&BG zt|kbI)VLkd!ys?tyWFc$s1w1I*m;t%HJi2+glQ2xrfQ+#nM$KLr4O)un^ai$Wcz`Qesp!F?W%bfc z=Ga0_gd*ad+c%L*w#0>*DMTbldp>tpT`H&tP3UZNoThih`M*GrILui9*{USWY7&5e z#7$60g+VC}tHQf0Ati9=$BN+5xzBd2n>`HWqPR0=V*GVccrrWjweqqp4$VSOiU`00 z=^NgP3V%%FRJAe3rA_7l!k54tS&~@y4uHQIX|*jpr@IysF6i%J;*Q$?oXA8vE8;Wehw?166aSOb>K)>sNvS#bo5ZUgqo|ItTa~yAz{6<~uEbyG|dZ;uyZ{?M5u0 z;2RXAwTp~(dkiA}4`u4=Yn_3u^)f`vRN3wO?-y5=wHF^wsl6F5No~AxsSIfA!$V=J zGNfEJCb=sSWvZNcP*KqE*%k=$KI|>((~UFZVZB8#Ox&=bG5+d&aL+thxx|ZG{jQiP zaRyfw`x^jnoXbPyF{299q-TGE+*eodbdrmik_Z^p7`;`6_fQO2S6CZSjGaTUFu_q(F_@w))Zv90U2_=BysDSGPc)0q_W14%2Wr9 zg!uQI#@w}X+4%gC5?$rg?8=^jc^P#*=P_AAq{_JF-f-;#l1vf4H>AVzQurbkfN{wd zXjc}$0t!KHf^OciZ#3mN&8mB;VciBGWn|_E@osGGD*BG|9UL@Kju;V(tR$VTX>IOH z4sq3xeFzbcSH1RT@p#p|1P<3BnT2iILv3stS;%RfJ8!G0ar&oCt7u*zjpRq;Walzx zYfGR2+hqqVIt{Sw0W=k$FONN27e8_Li-_bnb9RozjGL{nYz@3=clHFv&Fs0IiB<0U z3aw2tImi!8vDv4Q^305J1{h3*626!{rgi2Xe!wkB^dWnpj`z}_I5j#!=qSHQvdQ+W^63xltu^8qbmvR2M8erKPg(FjER_5YTZ2TSzly z#E-{eZb*zm9f@XBXoOXW1F8>8o7?0#H_;A&kGXK({q zuQC@~He;(D9;CLNdl4WMC=B)P0?Po<9Fx%imHE^1`Cl2&fliK?AB@c9@?eqT-S#!S z*GuKhMO(vlhQh`Qk)L#|jZml(p%6YgB#ek4+zzpePLU7zg`nSQ73oZAhoC2rD1zH- zca%|$SFfov9)i^NvyHm)Ye=>(Mf?#HT*F`vI;u!N*@cq`yzs33#7B9q{iIek(OK-l zf4ctzrf0+-1v0bq1A&Xi81%v)Lk0^Gtly?6sGRz5+G2PY)u#v++XkSyL0CCIl9ls2 z`|zo!9cXT?ZXuNzP?Ux~lj|LH65p!LZk*>fLd;FGe_Ninqs1I@0^;;M6|W`gdk5aP zof6+BpVsr8D*~?!YFr{Rq8Q(@UF@~We-LAjk2FI-)rj2Qf06jAU9W?3&%O!IXk2qh zFAA&xQJ{Qdfh&sOht(w$8CkWT7_T}v90RslJn72tfDY1oea{|sRBlWAA^YM|Z9>xP zmo_|`7GJfrl8#AF3Zf&7VvruiSOcoD&dwL%r(1GNAx$p!Z*9?wKUD#ulx047SohKL zXtMZ5xFolXghY5I!JV-6S^Ep!GS0@v@u`(>?&S$4|1a}NzOP1B6rgc)Sc7m3s^s((jPD`G# zp~kTGHyT8ve(k4vkuTb6ZmAi>j{k9;Bw#O<32sp)M_V!AuWONanqv@bg68BWCcEgI3r9=P-73-2}<+Khss5Yl84JL;Z zXNVC^0NI^1P@*g%E+$HuFlMk|Tk;v<6OSa$hazIKo_&cZ;%=9LkFhuKZOW8Gb(2cO zF5z`AM+S0&4fOvYU{uBQCMv0q%`-f(HwyZO!X&G__HAT|C<-Z*xJL#!PE;xTPqZwxLY0g)+=Q|KK}ixRz$x+Q0R!;$s>f{O9Q}$=TokaqtJ} zb`V$2)!eb@P($)e(M6XlxEYj++k?@R3Cujko$qhuE-9pSUDdxX!%+%MOpr+M8tkIPCsx&`no z-3NVlb^7IR>_-I{F&APdl3=;Tuu#{S8?jtqC2;T_DMOPOwFh>5V3WHKucGMVcbD;& zn+%x=9ch}}DSZ(g8I+ z@&D+5y(rmMh$EE(yUp+ug%PX{hRz4Soc^Nu?~;EoqSRWT*dxqKYTcAwRj9{UfOPoD z0Qfo|EXApbbV-GTHQwZ%ox8!y@dT-vWChSz7v+nrb~wbL>`+fsAf=R!jEok-xG$iq z+cTJl$HIaK+ccd`a=4vK%`@FikViunIOO{_pm!?Ehh9dhQFa~g;ESVCffadc9SuH< z3(&M54U0nX8d23vj4tjjmEV(OBoU3&c$M%zWvX0j2agDtYDXkuZn}c~_tW}+rTL%f zzYk8L?@D0UrRG&yk!Z7p+EgXwEWIicGvd8m*6=cK@fbkTpzySL5qtE|nq6Py%R{4Bc@b3smNYTP=+o)(|dxF$ojFCZf5tI@{sk z&4~VHfS9lgak`i_%s__ViQxBz@=3+G;f8 zSA%vE820({wXY>g!$Xp{_x#c~YcmQdx=N|Ooi7S&H)-2;VYjh`iUrirU|R}b-nJ)U ztP0~3KceOjQsV3?RXbTd_Ku-6+1JCwi>*V1NX|%9<>GM<;Y(6g)H-(^S)gE5_`@XQ z$iHP!JY#gp;3d){G8u+WA0+l|?2bm(_PKjuiBJ^ilc?el=^ z8J7E_*c47F^3&JE!4VD0F3V{a11m3{s0$i5@Tvf`hqItc`~=!L*}2?cps8mpHsqeg zv*=Hm&?h};oG~yj;&=~|>D3gmcI?3$WHsBdnI-s_(aH8#fWJBL#rR)AE}Rq}(4#LW z%(x>-y)%%LG7yd@sk5spO^a&;VhVRV{F0`pZW1R5CfQNZCT4@lo?arVaq(lfX_~q1 z@7n654M^SCR@#f@rEB&BkkfqqiI1_fSXKkX$#Gn{K;++p=u7lVvZp=wWO?pMqoMUX z`Xp}hX(^nH17mJ{Qi|It;}2Oc0kP5!R>!Y8=pTn|qao@~BB%MshNEta>h$ z;hU*R6rMYylkCBbSPs7gxE!XB7j`RUK-k*XxhPIu4We!+pvv$bu2me|IsyeTm2y%D zH|`ca)>76<{aXl6o_Z>Fib9BZLgtHmio40ipCv+6XgL#G8P5OsrotK zydaW1JPHVgDkXH%=Vond?y6eWr(&%i2v2NF9Up1YHRVerP*oZMl&wC?P1>!4k zJhs2$G-UMPVW&cc>`_dK0{h};M-VWb+-M>OAY&uK^yJO*W&5E{T(KV>`&xPKW_bG4 z)yOL$zBf~ei@zXnOK8fuJ|MjSh3okb$9Be!x2Y!S%X+`fdMwNvmnuEsk z5@QZSZT%x~zA7egNQJ&pF_ANZUh|EEUM-M2KqGCR(-Ybg8>{0!a#*q6iYFF;E2vAx zJ;$8M#{RxclT-F0F&2-R3M-8vVT?oU((AF``pfc~9U-O}{Zl@O_pa5+7`PAi2?V#| zKeo<+y7_t(kGGJK0hB??z`n4EsmLI;V18QI_4j<&4?bX~K)mmCI%3}qQn0p3%C=x3 zb;R@=0K(>ce7pAjBPp2LlUouE&agGN(Qk*I*hc>`=mwZ5vz(8+u33=gcnYfv#Bpkl^#eZcTDB$j=lLTG^Jfk1bL??kC$)7 zmYKTrx~w2)Tug+KgWlg{qG}k)Lk2W~_#{vnr-6w;4lRrVxnOmib4f1yEpErBYOs0m z|NLnwWCMZNe&oa7|3!Hs1UfDM1~iYXy9 zyT?EQs!J6#Qy(nx5MVA_2pJ$ERl~#*s{{zPhkI@xouRp6a2SvH0_!|6%mGJ5zt)W#TJ zV&6FR-nvOp!RSgQ_WhrS_)2Ht&0d9_bR zoh9Y+e0l6C+r7GD2dy=(Haf8#6Sj6YcnyfB9U9$$bLl-@z_xTvN7_&x(Ev<-2rQDFvs2DUcw^`}jSfI1o)%f!)A+=$arJXw_)mH6Ioko{ zQ_($&;MCnv?|2wkF|c5;Hq{oMS;P6ohD}&U0m%UG_R>IHa53Jknc7gIb_a3Pbr=US zG9u*9UMd&kycQ`JXBXI5K?stK3Ty;DIe}hIUMoJ_L=^}T8KWb2WVpn)INXDNvLbQ) zkn-Juhaxy83bcZq4Cj>en3QKPp$?GHieb^{-nkM>ST>o_ulA$zKN8%hpXXXIKE2=7 zm(Wc(jHijYzWe13BMb(;KvCSwUJBOK!vg-EmJCCW1&g+$u7LRXJKdV9`1Y)zI*g?t zasRF^P`$oJM@;FD$}|Ni)zo#y_9rOL<@HA{Vrn~rhN8=1@c^5Uvlq_9$s*jvK6XZI zQ6-Nae3ue(@K{qzmWOdrpUZs@=|!mQ-6HrJ@q=H+OYUG{5`(pukkzaBHKWjT50!_W zx6RUcgcO1^KmCkTOK5^@z{w$S9G}vcn%NZ;R^1|<>%*6;HLmdu`ZLL7N{SnyTS2nP z#9X|~k`H8?8XKwP>uds&)0-b{A8dvyAdO_(Xi%j&?O#^b?T-WHR0gS69r$L%J5ISX zEo@pg*Td9VgGsrUlIq5hxOYfBJ!|0gIZaC(x&p*@)j?d%6HP)Lk8_fvR#+e4D&oD` zfhpyoeg(<71P3IEU?-+dm8s-#i)mfA(wVSIKE0Fl57wu$D;0Mfo1*b%Z3DDBNcj4t zl6txK>8ITo%eJAxSO%W-Nj%5e3Gp2J7 zxypy*g5az{!PpGu3@^CtIRa%DVtzFOKHSN!(gXXpF~!VVzA>T%3egz}__5qGBZ1C# zH46v1A+GU)uxJ$-6ZZ?By6J%zzv>dUKO7GC$E{O;?5qFCf671d_pjO#AN!#Qi!3!V}#2e0k*SvCiEZ z_cc1m)TWpBktc|C&tu=GBj6D*ZlQDqqHy?91=+?i$(H5hV$myDc1RC<9X$>j7L8Z1 zTv1MZYkbox*EYRF;GlnWkF?TmHtn$bhz{G0@9z=d-%4PGBN_}y&kTrKmC$fA1ig!Z!ce`=oxF5IL^Tc}|UuyO_o{Ah`67<1iWzC-SIs+!nGkj{*l*rps9bHZMakAy?xz(?Y=x8qOxqz99@&0`lfnt3O` z!4B!AGH<-q!HGRgQ;ukg-9#KAwh_VRiv^qA5z%O(mojZYl`gLZSvj;>MiCTlI2t?a zD%!_YGGfeOGRn&gbOCQgo%$QFhGwVTDgNbEn03I)@a~sgx}5n({sXclIE;J@{87W& zE)mtFV^8gS!`Ft}2Nd>1WPpM6om9K6Yylt$Zu=H zq>E4_O-3;*Fb*Tw3EnL&J3%=Ill@2z5(6I|b}1FDg#-4f2ApU=!8iytJKr0EUZWsv zWr}LW%DUCn*c-a>q^Rfml0AxkM6L32$a*M@UV2%$30g( zH(xDJ+ERAPD3#tZRjcFKf$K8?sTz6(_ilR<6dnpB$PI3;GZS0Dn7VDN205+Ps=rgQ z&nLmdSP4ULx$%o;1b6bfE|+Vo_Ggk|=y=Fzl-Xu7Y#!SMgC)76U zFIYr8fjp}UIpYaJzHhmwQLWr%+sLT{A%LqHkr*0sj|d}F1I$i9PQFmNg6g@$!ENar z#4X)qXTfudA8*d*vai^0#OJxe5ra(1T zN1Hl%q^eR5Vr?tF$=*x^V?NWxBn2o*eIY3Ah?T<(Le?g>gCt`y-iTlZVc`Ng&Dob} zwexiRZA0;Dm-WJE?}l{;A-VkuzsEUTQ|=aJ=+U+ZZ%=6g`@SvxG+y;TyZq!n30UFy z2V2J@<%yd?0gXsNfu*wXqh0iJ4Ti+aNiV@RiBPg4)|MCS<>YODMxk8#f(ooqFR5N- zO;c2C5$mAg+){d%_m9hg9>gdz3)fm(G++DKs@G zgF!41cr}w?uv$1?`#d>{gaA8N&YcVGB(sg%wGE7#Z^TK}W@tS(BUj4RIMcNR`BP2l zkt-6$45cdtb!8&NO;CCSvtx$yuApOGTwN#lH%L8CP+W*`oZKp$;z4NV5q}`DWJd-% z^~fuJn+o8J`Gg?Y=IX5;m!&>|#6~=JSAafV7E$lXPE*Wguc5_SNhV1Pi2wmQ=^41~ z&{N^7xIYj6Rx=m>cKTsR3{0uP8(yWjC;!#>vSLFrG=^}rY%w=_@&1T@{kwhotdJtwBS1%+zZTG359AY*@gsu!R8^PU^n$^<*|5y)KrYiY9P*T z#o8RCVG8jR0E0r4ksI*}D08l{$+P9svvCvV2__y!d1D=I3}n+jj=aSPijTvH<2$)` zB@0A3G+BOQqZX4A+xEkJtF$+b;)GK;0YB;q@{D9i{1rARt~6FqlynvgN?qgL%Lh#? zO)8h0!a>Cn_vC(L{_Fr6g~!7BdF-+BT!=SjjAKciPOGv*pdo#{We3ZwNl(UEw)XfI zsSwqS*!ltQ(SXV??eyd?%Fx!u{b0iQf4Tp@{Q|-v4dCuLY;GUv1G`vQ)>6r8Dqt^A z_=(u6JwgORd}JgQkPBIQX}*MdL`Kmox==X@{AfEL3Ga99oj9l}>72li#sSrna!8*L zxC8E^f1U1%XU@bC^(mDE6qs<7Blf6xu`OEo2{s;$Y03UaAY8pdFig^MF5{D848_+s z@R3pav1Ho25;vX^#S{lqSEO4N-&=>bXfa@FV`;g(Y~ zxpMxTJ*G|SH%@Sa;-;=w-3?1SPL4)ZVXQYWXFmc45_}MAnI|%1kG!I|7j3)ZIk;wn zq;z^UvUd!l*aK>7Os5xrZX8{EqRetx{Pslh$eO@q`+?Z$=``h~h7OUEN&(fJhVUyx zY&=8=?lhIN5$qG`GujpV4#|z+cD~V!00*4zsfN}Tq{E|EjNz zV)!&JE)_2ByBA2X?!DYdyxZSZtDt1)GZk6l`8Idl#LZoP=E_#{E$&rMSmT5jy2>5K zdx^!8B;yjq&-5Z=Ge$%jYYdXHkKc7vc8na@cYlz1CmZh_<06&iAE#?C*A$AyicmE4 zj*AcwNc~9Fs?7?AkQ_JK>A*5Zvo?*SZEd7!M=8=)6+AXk+;6G08V9v+4|j8yR^j+l zvyqBmVFFjS5kz*Bgfn@EAY-uGgYT95Ka7nL)RezrUGTDzUZ4DG5!4xqmbMs3#zf|;JMwK?Y!~>-5b;@FG_g@8U8`_H) z7v2v1EF7g_oJMey0?sNsKQZcRbx8UvQpZlm}lalZ!tIQTi-H{z^3C;#~v2w z=}t%HoJCw0I{TjO3402QbGMWBeI)xUL+CLFScYHr38LKF9@Jb!;XHHkOiN7XK9JNA z7p{L01VL@GGwN2gzc^%=BsWr7Dx2*%a#RXa%L7=xp>ZdJj!{Q8j?7Rs5I1Vja&snD z$BZw0jnw}|>|q~95WHPnEGQYDC#~KnHx}*Kj}?%$RoAcOIqsO=9j2DrF)u6!c0w}u zw$l-oi2flD-Ye7J*j^y&ME)_TV`oqK8mLcO0|?r^#2IQ!tRbRDNvXrUNlT`8?ruo630-p%Z@m&(8{+bNs4;jTiC zJZsMfM7m+NfMxGizhVVPX_(6$epV5#ogJgd==x%ddJHs(y;xA=To3p<*1i3W@}hD~ zgVf+L#FYAprFad4ED1o{lecN}WCuS_-vEm4;;wa-)yA@OEP0KHdqVNS-ssTPb20D^&H_cLEEc7)jrSJ;pE|f$Jz-kqrl_m4GnXMw_&b)YRUuZBiDHV!L%eg z8mG?orc#=C8kussc*g2D^h39kHR)z?^Xi(1YZP0f_Q8%rn1O6~Oa{ghi{(Z<^Q#zf z|JHsa6H4wW*_4$YqZC$cd_Ph-%>8i++eJ7IL}cg)$7>q3e(n3ot_0@ToG0K8BY z!2T^w1tQ5!e(W%Rtfz5=${&XZI>A^g1X&Yhmy>zmY+k<75;dhlKPO?*f7Z2U`HZ^pzcu^KfH zUt-|&E5;UR^NrTa@#ztlu@culp#BIe>+t~;k@A-rthlL+j#{SqO6bcXJlqeb@7({H zF#<`jXa&Z+1Ki>Rzh5tw@&9Fqkg(7e&imK=-xNo*TYDM?h@CuAzF~h;H{vq=eGq6D zH6;2ZkwD$=xD&>mIxf$}O$TF2DlSR$j)LuoJ$nTxb&8WewjYI%5J@SBrY=*~SM7&4CzR&+U?$b(H z-DtH#~&#WT1XTmAVSj5-dsCzPJd$e zKs8#E-fol6vJC+X2nB^DPC(HYcK&?v@EKZ`W{7_~{fQChvWnCiVQd6u8qr29?Q)sC z9-Bri6S&B!@6D@#xEAfZPd!xJ{GOg%E1UC?GEr)ac|UZPs3FCaeNk1J8hs{t`pnr_ z0ut9bu?EteRfMhNq=VOR3XaNwrga$grYA4Z4&99w+B%;JN^ez3?XSg_^(ZkS{L^~n zLdL1O;q9QsK2^fFUCCwV&Lz}g8%1>6Blf!`<&5S0a0P-tFlXp8VQZ${JrFQYtYW7K zMI3(zxQn?utN-tRWM@E8&4xXR-Tyb@-t{@o>qztbCw6vYKh0^iY>~1=NxX@&+wLtC zKoSyeLV=`Y$@WyC3P1@36of*N1l4qG%QF$%9bs>GY;5f8exfguY}vAWx7*hU5cV3~8PoB&tpUgxf`fWT1pT0}+{D`6hu+LojYd7rN$@|65 zaoZg+x)v+9$lO?YlfNBgD4h)yx9ki@2EmL`@l;-$rhU0i`cEqc%JCX)nUHgzeZQ8L zsHOZ$Gie-wWigKCM9ly z*K6FrDwX2LDC%VF&A7r$7Zie*!;#XUb~ zC_mgI7f4hPb4UE+^BXuJ5$P4tZa>m*c{{)8JM3IF+9!W)M`;T9(7+#YkfElI$xUbZ z0>MTi(LQQ6nR7tF*YQLkmmYd}uZ5d=({_CyYj}4b+2+4orqqG76;$u&W&k$P1MUE*0`}t~HLL-;?c3ZRiH%5=h-gKm zgzQ)Y?n$zg;%AKEnVJLpoGqP#n77!YxS2<8dI*Q(ZHfD-Y^wyVQ8hj3(CcM>J*L$g z5b$GJY{LfB4|UrV%K_g)ZH};n;yc&`_y-X%{%rZ2&0Dp%)>drepkELG#mi-->=QtD zY`X0NjwnFyZZ2>IC4j3&}hWzV*x-qK_Dpb7H- z413H>s+S`I(kGt=6^Ay8If|psGd<(1d!U+BW9++l>pb6sB*1HvAwocxws1CdnI+dQ z#bf1Y>l^X+n`N;Rt5NGy=V02x{aWf%7h!UoKo3P%V>GtZQV0!8F@XD9oicBK$1)&Z zMfixlj)Os>r9!v$WZ59KjAH);xYHgL1+oblhMcym>M*I%EtpK2&P;Qf$A8DN$Er2W zCosRrzfbElDBJELRjJ6#CE%H~H}poUY{GCF5i_zNm8Gn$F#SxT*kxN<^*NzcNC^53 zLX>VjvY3RVVpFKdmP8bgUMQ9Q`TjBPZ&GUHmiSM+1;fxJP>4Ael&!2#7YYPpyT^sQ zht$=4*uWNrUST%TMKi|*KvejwKo|$D2u9p>O?&$2FUw!reyo?{96cc=``9H}Q41s% zakpU#ahnkfRubo%3kqa5Hm+)0C}q_%w;5D#@gL+gQv1LrdPY^^nYR4Al=OLG1NISA zlvE8OV51;*kZaf>9#kJAoxu+5y^?5R+*71&=KE1ON_}4q^-l90tl>iD?vZ+uuaAV^cG&|8)f%*9f%Mn)J?-LqwyF6*DXO zfV41HAs59O*Cr4U4!Z%feurhVS?zH=6Ys4BK@iQ2MPvKUJU4SQ$d-s3uBoWW`}Q<> zCe(IJ_cjNQN}uRck6iyndDf21m&$Xt(lndVr|d_iUBI8QAui69r3L$2t6$!tH)+Uw z?Z+YuET*iIgFwNU8zIa%NhlJV)TZh;y3kPs;(2>n3o+{0#}rVB4m*n*rF}Dm6LBVK zAiO=T8}V#=C7P$^A;lMVgtcR7+N*9VaBn|s$U2GlQvCdC=*;FyW>>^%jd?DhA&<%S z>$~hw5KhI*Z49al4yfxYj3{!o92}ma_N(G4na$AAb&wGj*#u(V+enwot);}fp^8nY zCN;Por&bK$E|j*L$xx&*CPvXH+12BwcnWaE$V*x6?YGy}up<*$K6($#V9?zOVjZ^h>`bG=umR+V54&eeDAi^*cB_JDa-uAS%qXERq zc}gw5P{$nahpd%S&4r+d=ysHlbjvJCt^ihZACoo40=)YxmF@Ud{A#%d4+mLrs0);y zOO7fV&TxWDM7oSh2iWK!S#=M0Z9-@h`~;YEuE3x)J$LR|JAIG8Pb-PjADbws+k@vY zSN$Ftw+~aj15rur5v#X0%G#|BdqnLsY=c4Zz#y=nM4OA?21k}dZVH`#!Ya)ogEky- z?i@t|B8z7+M@r5;SYIl;L zFw#iTK~_Avz5~h-Ci8T^t8RdhFXBE@-b6aORJ(%f97mb@n7NDKE!i4-_@#aV?w{;^VG=k-;WshB=2-xQwph>Whtu2!P@%&(UWfj7& zdZlH8`5CJ7#>7-mmo^X&?CXpZ%`2}jQ7x$DT?SG0=iwJ2q9m`Zd)R}R1OHIws7(MS zA~&D6L8by1PO0BfbHH=%m`IP{gWCX?X1XVG52cI@<(@Iwme3@0=}V&`d@>(!DJ>qjS#qTqogA@u8ahlZxF`BR?n~;%6lP{d!qk?`(ucLcKki z3Y@JNDOy`q9%cF1FR2oM2Rq(WEm*&4bY3oAjFGHBTIIyL#=8Oc$o8;B7qR#xBtSgx zD2%L1#^Vres6jU6#w(%M`gXclUmouW^$7QSRb?vYOTaEJf2&S_TusV>7K5Yg*_Q zPxQMO9>t}2_F8G(@R%1WKkc6STN0B9AtD}H5ja}|vLqT7f81YPBHhEyye4~1x_N*p z_{;|faURxGu7PVbY!obFmU=(Z3Z8hV;?(h#&XJOFxO)7Ww%nNd%##hke+sG2J6KIRW-KauVA+*u2?hXca*#u(gwKcw%Br;qTCoUz2oPlN+`7PD-Zq&vCM8AB6~?8a{6g%Y6k=e2Uls3+o}2H6XqTw=P(t zAcn#OyxE2br{Tg2Tz=8BqO zjDah9df1DR;(Ru8mYetWgb87_I_4+*LBib)VtJoablpjdO4^gU1!>^(c4^VAJ!-|BQIsS-91U2VAD zF_iX+xjPgC^_pMXbUCCLo=G;9QpMr1dkgRa2!c(cDpW|c2-MW!v$x~$jnGlE!0qIi z0O%Pq7pDW_HP@2zF-^Xq3(;%d#&cE|#(o4xkf~?tv?6dAAPN0bH&-q>wl;>m1@RY- zHOeX~tMqVbV`=K0P?=p);5L-X3r{@KKFfw>l>i`0@N>)Ca4;;0XC*iull-_m2;rP` zd56lxghz`!dzSp_Iu=5?wQRF}g;l29Tuh`(wFird*oPi}Ku68fAKH)d9k9saoxMSY z6$x9VdugFwyNBbr71yR*?wES@RK)%W`2$xOgpJ%&XP?Xm;`SvF=pNaIOkIweiSC=_ z^c$gL53s2Yy-1+0dWV^|se6~aLK!>YJTi~$QKVbDqQKNkrHHX)xIt1IaRfzE%oo;| zF$sFz-aQB6F^2{oW|0vWf0BlF+nz+qu?^u`YL-m-6CBxb0$!_KOF9zMH+=>1CDN+U zS1RxmQA}bJP}(Z5?bI>hd6_@!Mf=T{Jtg=(stYVM8M_r33#Ey)bAE9kMi6|GxB%Y5E3>C>s!@ev$1&h#;BebPTv4@< zt^=}VM~ulI>hbhctG20OgZ9(~We>+;Qgy8m)|*1B@Vaa&c&kbv2!mrwB(~H;{yL(a z@`MP*RVy$HEf&gIFx>_XHinZ4fhVE=N(38vJp=N}og{w$7*Ya#{v213NtmK71TzUZ zhQ{7tUC(&Nb{;u4DUVbT497g(W|*#CmWNA+=S5S^YOr)&OTifaBN$n2-uwHQkSK+t zF_N0D4s6DzWY*mj3IrR2(G9w9hvpEEAIs58Ct(PVw_W8(BWTBB2V|ff@cmd~IWxi# zHLuuNfJrW%1l)G0Y+x@Xl?KqRxcvq_@AM=4qso!ZX8&v|rAmOSofGAe{yIeY06tVr znw72NcZ?8#XsM1D`FxB{mKyks3AJ47oNosC0zn$N&A*I5k23HoIN`8sBj)x|oW~*a z#f=4AZ&k!I2@nb2K21W7%J2EZMX{O*w|}O5#tr}xR%o)xexuxsD3@C6WFoa?)e_^* z9vU>KOEFd?=yJn)T% zDM^u(bwau|4d+qod$8 z`x%27iH{y7m5&ss9CdNo!Ae5ZOwtxjI#F3FpE4}E*h08uIl=z`w+HCVHh`9pba}0c zFhoR6!EoAQTkn*$_$xOW2zTNNP}>GOT!LWxqw^6$MR6R!xcD1JNIDfa(5)_w@@x*= z_h(jEOL$mO9)c<_X=l$Y)>wrWttMoq;T@Ui^yHz9lQvWv5{^k+$V~z%s4PMDSQj97 zf&sveu{)eapskoln=IS-2^#DJyAs|ho*{&`#VWJWkh=l}EX|i>i5E;(I>1mSnfRS7 zs7_<7{2I7o+1!mWk|&Dw4cHi;S!a8OgRS_*CV6V(LkF(pA-wcbjG9um>o)3FbC#ZR zC*HHsASS#Supn(5&cifu0Vl}7)_CkTA&FwifKV>+C>L#<5CiQo^mxOBGT}e~DX6th zV$?X-+on9u6#KgD*@}rhVozvcF)gm#*jQb$-*8J*C@jOCYU+IC-jn#bJ-=aSPI56; z=F0Qsn!N{m#ccr@U+>u;_>9LV7cp@hC{=r#FUBsc0UJyXc3gRUlVI0B9r3b3(2nCU z=j6ge;W*e|J8E2)E)@I_yhl5=7nLg*qGHk4pN4*JQplA?ZXX*o99N}in@qf17Gf6F zWRBHD9#E4J%+f`uj7R$drhfGeojKSm9>r8OlgjozN*qiQ8bx+Ompeo!Ja}q3iakw%tLnhS>koHmO3$b$0&Z(kLl75DhAIn~s3>NW zNt|xs858yvGG}rQEIxF@oPZom3g`v)*T;{jffF0XbA-Dlhir)*bW>d12kQLUP%xVa zp?9Zro3(?8t?vFbX9N#A>L?T6{SFQLyl8l}I$36$e4Sa%jfLhM2ca(#l!L4Ex}xXb zpJHw1%W7if)}%u>Z)7i|iX(GFFl}G^cd3mCVeDgj6o(5xH*5#+rZc-M+t~D3(=BXY zQhMO}Vl3bta7&q(p^D|E&c;r0`4vFUMQ|m#3HLxvZtghpP#f1zx4nK^PxZS7&aNel zyJ5?(+NriXxReNSna%{I7T~V<3Ve&UVG6OE{&}Ui)ZlcD6Y;e&Uqg!_Eg=DgM} zi#8=ZG29NqT=qwL0Q}X{XL`|$`G4x4VdUH6z&02jSEl`fKnjdO?9LF+ri*w?iJUK7 zb}$J$VvF+&#cL+3VcG5OXqu=CD$;~Wt#rV64G;iQmQ*P?ta`9}#$e}&gwPq{9byJF zGe~ru1!X@UqEAd(Sz1)4ZTFYTJ2pn*L6IcJcV_G;dX`>F^Tlu*CwG}WzC80+N?F=G z#JQ_YXl(!zi7PMKpOH>NIx{>2@GESoOzf=P*5z%-5;y#qlplg|N!Ev{!?U=J{iwW| znIgJE1A{B6RE?%j0(3{4NTrzI=%;sr3}df^rn{D^e_tn(ZC@2FNlA^N0cxnDN3kqV zt3`*3Cy+FyTEA_kQj_boe`7p@_6S1Ew`SmrQb(2imtuQPtLEUyHzcf9qi5h+_1YqEv0x9>0& z0o)lUQqDnqAN^S!^6tna^~v(kWJUlZZA-%%7hgC*Ez4Zpc_CZ8xR+GYRVXwu-Su+4 zZ7<r)Wt-oBu0qTLfaFHXm=Mnowcf^=%YFTmI1$V%m%bvHm#r|Q%``Y zLA7$n;csGq$eahc+8Y_OAr~aWgfdQTyjWsoy0vA8Td7Es|IwoSkA{1D)BW)d!588^ zj5wQO;8+R7+$gWFE!ab;x}vu5whz+6wN{5s<=VA!(U!7b-VOm-mkmgz@c7L#4D)-O z(pXT84weQT=Y~YPy!KjrLwrV7FX6m)XlH{c*KyOxLboxgj!Ud%2ck|$Bva=++jMFG zp5&<1?umEy&=ka-;t|xLc_AzW$V`N?j@ZONRC=;tLncmR_}$@13Kr`jp&&$PB)zr>_eEF+TEgl2 zH!hoGWOG6YRFe7A?uQKrF5!tcbr3Dv zhNgAM9Nrt&s3|_6aCdCV5=wP9t#~cg*&D{t)@oY%WM}Nv$mht9>Dcp#CSQ2+NgG$q zskJF!G5fVJ51_kyGtE zbm7W#oggty0+O-AtW|}~j`b_iQDQ~Tak?J4jO781(g~HigGtJj6!bYPKCxUxYl+2L zL4bjHyF2dvPGsC5cQ!Y)YiXs*6S_Z%(nK}l36WWzoV@j$9I|$-2HDvWZa{VVq%p1$ zlf0Q21JHsTQ)Z^AwV+&FECIDfvK@O!kB3krB=V8e?o0Me`D`pW!P1>0YTDSa9)DYX zdw*`TRKKcop1DZuxMV0+mJ*ZTgxcr3d|=?H)Wc`qEUCLChoc-NKog|W4WuSS|6&+7 zXFT+%$3~&VYLdnZtK&1Rj~rK_(gR$8I1+6!ND^p`$MBXcRJtG7nU~Sd|6qyy{ppWw z^{_Ym98ze0rb5{rEm5KjWhWSJFR0h0`3a{8~Bx1v@eT?H8Yq z9Z{G2?%}p`4RM^a)NvkCz*y`?(C2NxXX$Jz_N_gRDdSwLxqAG1JPv% zew7mq+a7pKQC6~hRtm=Manx)Rx2GV{34u~FL$c7Yn7x?E=_85}?uLPYi`=+&*utSA zxX|e~Pu^7YBJ zj41Do8U{AGlHQu8D|C(f87y+x4N+KzkjN^<>$|v-!Y0FmSSib?(g;Ufj)_bC78crI zF>5GX=h6 zVxp)D=Pjy2V%{XHnGhj|%|6U&6e%u1SHT~+C)nW}bo&&bU~N6}y%1-ViyUpCeKs_T zYp!hAHVF0@`_i8~SI*hP5ITJ|hqK65#T+x$OwpJ>l#@Tklh(^}$N#8KeJ8)LAJN;J zjKtP)ZZV*>&+(t4{|mejVXpUat=1oNQPMvtJ-QTQ!-o5!KA}@hN}nii#1uH1lr~Qk zY7wzn_mpQfIKZt1GmiIcfo!5Kq?BxO*j3#ArlM-~fz&?gIv?KOjQfMS1cdN$yiJ7uYcW^9=VT_ux3S23j=92Ak=`S4BqEPnhY8z1*9G^I!` zK+WYa--HF*q^W@$v}!`o9VH*S*1)J)<0dp}6TBEdyiz*$0|038g1?lNxo9J59c8+l zD*ff+uNbyoONo2(m;4W0A2ZWdL=ukIdW7;lOz{2zB@i};xOJFB_NM1wDqbLVy{wqf zJ^q-kVJF`Xxnf5Kl)snvG;}fMc9e}{(>bp^O@G3BCp1I+C=aQxiLl$Q6?en*BHtbi zG*~Zh)9+|KZAz_D62e&n3~|vlSEY&Z*UMK!prl@rdZqXJO|KkybU@{o#3!T9VZi&# z>b%{F_qJ&ghS?FnIH>Fr4;SH*KK=Ch3-R~LFPS)di!PIKZ?rITKhbmWnxC8EW&x62F z*U$@YP>XP~6S5%8qjpu*nwlWttK10#T*--Dpl}!q8Em7&>qQd~A&$etaePNbInP+q z574KW!R!45`7HwAFfZ>#De=A zNTY1xMSHF?XMlxsFQJ3!g9nQIhKPzE&`k;3ob4J|jG))!AHqLB`Mrth{qi8zf-@bM z7n`dL_j6vPV6O0c^aL{ZL zaJ^4|6L$#K4aa*7_bMGcto30(C4_+v@35%#MPaccdLahl*;C2OrX_QtbjjWyhSwQ2`+ObOWn}*-v8>@cG%VL3|D40K@k0Pv7HTeqm3?-B$xSx5`jBiZ*ysFJ}t~ zGnv#l8HB*%*uWf|da$Uu$2Lnr}l$nFi{WpiBy(rX1Ie7b@`R#uy$ZfxmV7L9| zzw*yGeGB`FAR?xwTtPsthRowBsC>Tf%JxLE@m?$!*Z7h5kA6&K?KdVSHv#T)QNR^0 zC=PMlT8k=0K$TRfzIY>|hNjG?Kq24=L$lcs9RM9eG8)a}>QnOB9Y)_`@N)J%)d^cw z+yfmRK|zQhDwAYFw8CFify$;SJoIjE;Wv>nv!6rw%Q{%V!7(Z<99m>}w1r*J*EJf|<2uNctQZjO=U} z*KZ-rpS)|k3{4*f+zjVj?s)K7RH7vIrYVB%z^w?q)h=+m@#zcYX?ynL_c4$@`9_ST zNg{!K5>_H(-onD;G*myv&QW#g@4ET5tm7IN}hYJ{8?-k*c#eEK7SRVHizGBc-qFrp*KKCXL#Jz+*6$nZtMj+oO6H0eG){V~$_tmabAeHU1Dw$liNjGVNpGs7q^bP08$8v!fj?GLYqN|Ce(npZTR2;L1 zE2QIVue7}xPRz7NaVO2)?fVVT5!*)u-t+&&)x4bgF|SoLJw~xyZm*eqoXh2z@%}vY zIM3cQ`B)6P31e>pAh-cR-uaNW0d|wH4XWPeU|hv7B#R+mn~a1Csy1j$KBv|o#dH&n zLC(>S+&qJb%Idz6|*;+iZ*5Wx*!+a(UVQ_3eyZcFNl+tb>gVW8i)o z>Rn)$9L*qMQ}&mrBR{tdBdRcT?#+6a4V$|4fb6Sct$mbfm-{yF-7@dFAT=X=;%FmlOcRr!!-GN)|w9`{JDZe$u@EIS11WAk9 zolLvXF4a@HZS4$$lj%aTA7xY1(L6rCSQBT%O;9u|64X?VXvV5VrETY&#RYDmk@G%r z;orw48n~mJ$dHuMXVQ zq-aY?cqvi2qFmU6@p||$07Wr>*s!f6b{eSwZxZRFY!I#pVa-;XCE)_BQN-Tuy?q5%1A)rFeA=xqoIC*xPDf z!5rc0QleF8Zh9#ZNmP@Eh=^%^_vD97$%GGWn6wKR+Pw`{e3qM5mA$=cgIP_&!cb6d zX~9OuAXyaEnurC%^1-xGlH+Wgpk3D1VpGV|UF;zObquDm zk|?c4VnsZJYSkDJ-Q!ScU=>G4sqdGf)h4#pwQxv@lBYmpFsU|8>pfMTvq@mJK&$0` z3T}gf#@vL&KhXrXnJ>*G9pQ|+LTEC_{01PBDyCIZ@Tl?efx|2ZQ>lO-qyws0Me6tn zL{4156+Mmv1PGI8ve$B5Npj*4Oa$1b18gcGS8{S_KjgmBY`ga}z}w+HyP0d&5`Z&t z!W%OEJrO)4+R58uJ6ZZAeug~ChWq;XpVg#Tx@w)*`7M)JG9pQKo&9HNgL&{W9>@EW&exv05$I7KI z9(@qI(=7->RY1XS*oI@#9VRG>?I(7kTC7=?oz(bpg zCfH(gv!J8#h{CYO5G9R%J@FsMlm{{0wm_JeSeN~%(q#M)(6tBOMiy-VwdsrfptSXC_Iy@E7;5az9LBu%c88S9&}L^{=M#KeNinBCH!WDt z-r0TfV^hggk>nQXCS>&BSg`-lgEZ8EA^-Zrc+r-U0mxh0bUk(jbK6Es$1j09AqE72$E0%}-*q>B3Twt@Z zks-%V@5i_>k|uChV_s)hHVH}btahz#0lR^t86%+(OLvm;#H8A%Tt<8~p1%%BkSc+8 zKrM0MFvW;P#N`I}iY2-vY7HK(V7v|;N}Z8o4YJA@p>G-P}M;{XfHuxnJf?kE8@uWS$D&fpgd~4!QnU-jY<-n zfIUC07?Tv}wk=mDU)+v3LTug{TojYp24su`<4t&Mpeh)YJbCF`7aJysoYC102d!cSP&>PES_ zkXSN{HT3GQ!!LHDq>|YqlmimXh3RO(wesQ>`OzJGZKg6^b|5 zV&U_!U6n;7XTgFqZkQ_{c!%03KjjE22(>|6ub2eO{L7LzK^OryZ!2@V2q4@n& z;|~dVp%@k6ZogG%)9U^kg2yqKVwX8Cst7*foam4Mk~pi>s)+fjKng_KSfW~SkwAm{ zkesz}$SdNPFtJ;D113X+)pwXJ@u&O97jL$cCG~arTHH+3p5;6r?_mSPt3kg(;Zd?- zIP__AHS+4DPnNGnN30reNaw7U)!0vtX$$5IfM#6ipgesP9u-~kB}sz^Fx0C3ZL~YQ zGwdcVS~c*EHIo~)KXs>`yK>JXa%2-xr@Xp6cJyk5qF+ta@-r+?G@*T#5IiFGE&@{VX~XQzUa%nnPT8`&eV12dAwg|3~JFVB@8qXSS- zj|#sb9{-52_Q@~ex&)y@RX1T9ml0KxdBWz)#TRWnh419D#2QW7v>s>zrjSiTHZT?F z?MaX6iT$e>+X3zzuTNGZRj@}e9(ZWn2K(Ssp5k^E8u)y?0D;}#j_KfRpb;qWeh9C| ze2{7yV;L9w7hBgY1{;ss;Kg1n2Czp~p7H==#L5;{6UBI+^=eU1{~N&%fI1{;9e<8Omf z#Q9XFW2Hox47QhUk@aIEl)J&WzvspV2SX2xQxC2|wVJz`M=X~8)HC83n^H05!`VuZ z*QVpiDw+xqfJ)1LngmqynNW!&kBgOrajai!Lk{52QE-E5r&qj3@w^$S} z0NRRgzFcn2$81S76|pLQQR%Bgzh$LL zm=9$y7{~*^kO@}R+S62ZvuVQVucbciwJivg6dRi|MaQaD#qa9AK-{nxH{p z!cBLM7RsJmiN}p1vo`@HVhiPXql%VvJB`E12NjGgokgJyLN=sI=lwxg0M-doSdRfW2gM< zrF0nY#D>n^=g#p}SESl<^7eHLdf?*qFj5GVMK-c*W(Q={UKj$S=TAKMrE($mAc}