MBZUAI K2 Horizon: Six Fully Open Models up to 375B-A23B, Apache 2.0, With Training Recipes (2026)

MBZUAI K2 Horizon: Six Fully Open Models up to 375B-A23B, Apache 2.0, With Training Recipes (2026)

K2 Horizon: MBZUAI’s Six Fully Open Models, From 0.9B to 375B-A23B

Most “open” language models are open in one narrow sense: you can download the weights. You cannot see the data mixture, rerun the recipe, or audit the post-training. K2 Horizon, released in early September 2026 by the Institute of Foundation Models (IFM) at Mohamed bin Zayed University of Artificial Intelligence (MBZUAI), tries to close that gap. It is a family of six models under Apache 2.0, with weights, training code, recipes, intermediate checkpoints, logs and evaluation details published alongside them.

That matters now because regulators, enterprise legal teams and researchers are all asking the same question: can I document how this model was made? Open weights answer “what does it do.” A fully open release answers “why does it do that, and could I build it again.”

This post separates what is verified from what is vendor claim, explains the size ladder from a 0.9B edge model to the 375B-A23B flagship, unpacks Mixture of Value Attention, and gives you a runnable serving snippet.

What this covers: the open-weight versus fully-open distinction, the six models and their deployment tiers, the attention and training design, a benchmark-integrity episode worth studying, serving recipes, compliance value, and when not to choose K2 Horizon.

Context and Background

For three years the word “open” in LLMs has been stretched. Llama-style releases ship weights under a custom license with use restrictions. Many Chinese frontier releases ship weights under permissive licenses such as Apache 2.0 or MIT but publish only a technical report for the training story. A small group of projects, notably the Allen Institute for AI’s OLMo line, release data, code and checkpoints. K2 Horizon puts a much larger, production-scale model into that last category.

The Open Source Initiative’s Open Source AI Definition (OSAID 1.0) frames the distinction. It asks for the preferred form for making modifications: sufficiently detailed information about the training data, the complete code used to train and run the system, and the parameters. Crucially, OSAID does not demand that every dataset be redistributed; it demands enough information that a skilled person could recreate a substantially equivalent system. That nuance matters, because K2 Horizon handles data exactly that way, as we will see below.

MBZUAI’s IFM was launched in May 2025 with sites in Abu Dhabi, Silicon Valley and Paris, and it previously released earlier K2 models. K2 Horizon is the first family from the lab that spans edge to enterprise scale with a shared architecture and tooling. If you are tracking the current open-model landscape, it sits next to the models we have covered before, such as the Qwen 3.6 architecture and benchmarks and the 1-bit Ternary Bonsai 27B for edge inference.

A caution on sourcing. The facts in this post come from the launch coverage at TBreak, the LLM Reference model-family page, and a detailed secondary write-up at aicybr that cites the Hugging Face model cards and IFM launch page. The MBZUAI news page itself could not be retrieved when this was written, so any figure that I could not trace to at least one of these is labelled as unverified.

What “fully open” means in practice

Five artifacts determine how open a release is: weights, inference code, training code, training data (or reproducible recipes for it), and training logs or intermediate checkpoints. Open-weight releases give you the first one or two. A fully open release gives you all five, with a license that lets you commercialize the result.

K2 Horizon reportedly delivers final weights and intermediate checkpoints across training stages, training code and configurations, mixture compositions, fine-grained logs and evaluation results, and training-ready datasets where licenses permit. For datasets with restrictive terms, IFM describes sources, filtering methods and construction recipes rather than redistributing the data. That is a defensible reading of “open” under OSAID, but it is not the same as “every token is downloadable.” Treat the phrase “training data included” in headlines with that qualifier.

The K2 Horizon Family: A Reference Architecture for Edge-to-Server Deployment

K2 Horizon is six models that share core architecture choices, tokenizer, training methods, interfaces and deployment tooling, so that one application stack can route work across sizes. The family spans 0.9B, 3.7B and 7B dense models for edge, a 32B dense model and a 36B-A4B sparse model for local hosting, and a 375B-A23B sparse Mixture-of-Experts flagship for servers.

K2 Horizon model family ladder from edge to server tiers

Figure 1: The K2 Horizon size ladder, grouped by the deployment tier IFM targets.

Figure 1 shows the three tiers. The design intent is a single family you can swap between without re-engineering prompts, parsers or serving code. The launch material also describes a dynamic routing system that sends each task to the lowest-cost model able to handle it, though the public detail on that router is thin and I have not seen its implementation documented.

The six models and what they are for

Model Type Active params Context (reported) Target
0.9B Dense all (not stated) 128K Watches, glasses, tiny devices
3.7B Dense all (not stated) 512K Phones, on-device
7B Dense all (not stated) 512K Phones, small gateways
32B Dense all (not stated) 512K Laptops, on-prem servers
36B-A4B Sparse MoE with MoVA about 4B 524,288 native Local and cost-sensitive serving
375B-A23B Sparse MoE about 23B see note Enterprise reasoning and agents

A context-window discrepancy deserves a flag. LLM Reference lists 512K for the flagship, while the vLLM recipe reportedly lists 379.17B stored parameters and a 131,072-token window for the 375B-A23B. These may reflect different checkpoints or serving defaults. Unverified: the flagship’s maximum supported context; check the model card for the exact checkpoint you plan to deploy.

The naming convention is worth decoding. In “375B-A23B,” the 375B is the stored parameter count (the vLLM figure of 379.17B includes everything in the checkpoint) and A23B is roughly how many parameters fire for each token. In a mixture-of-experts model, compute per token tracks active parameters while memory tracks total parameters. That is the single most important number pair for capacity planning.

Why a shared architecture across six sizes matters

Shared tokenizer and interfaces are not glamorous, but they are the practical value of a family. If your 7B edge model and your 375B server model use the same vocabulary, a prompt, a tool-call schema and an evaluation harness written once will transfer. The reported exception is the 0.9B model, which uses a smaller vocabulary, so budget extra testing if you plan to fall back to it from larger siblings.

Shared training methods also help with distillation and speculative decoding. A small model that shares a tokenizer with a large one can act as a draft model without any token-mapping layer. IFM has not, to my knowledge, published a speculative-decoding benchmark for the family, so that remains a design opportunity rather than a measured result.

Memory arithmetic you can do yourself

Weight memory is parameters times bytes per parameter. At BF16 (2 bytes), the 375B-A23B needs roughly 750 GB for weights alone; at 4-bit (about 0.5 bytes) roughly 187.5 GB, before KV cache and activations. The 32B dense model is about 64 GB at BF16 and 16 GB at 4-bit. The 36B-A4B is about 72 GB BF16 and 18 GB at 4-bit. These are back-of-envelope estimates from the secondary write-up; Hugging Face GGUF pages reportedly list about 69.6 GB for the 32B Stage 1 BF16 artifact and 74.9 GB for the 36B-A4B BF16 artifact, slightly above the naive numbers because of embeddings, metadata and any non-quantized tensors.

The key insight for the sparse models: the 36B-A4B costs about as much compute per token as a 4B dense model, but you still need to hold roughly 36B parameters in memory. It is a bandwidth-and-capacity trade, not a free lunch. On a machine with 24 GB of GPU memory, a 4-bit 36B-A4B at roughly 18 GB of weights fits with limited room for KV cache, while the 32B dense model at 16 GB fits more comfortably but runs roughly eight times the active compute per token.

Deeper Analysis: Mixture of Value Attention, Data, and Training

The most technically novel element is Mixture of Value Attention (MoVA), used in the 36B-A4B model. Most sparse LLMs apply Mixture-of-Experts routing only in the feed-forward blocks. MoVA, as described in the launch coverage, extends sparse routing into the value component of attention, and is said to remain compatible with FlashAttention, grouped-query attention and sparse attention. That is all the public secondary material states; I could not retrieve a technical report with equations, so the mechanism below is my interpretation, not IFM’s specification.

What MoVA plausibly does

In standard multi-head attention, each token produces a query, key and value vector. Attention scores come from query-key dot products; the output is a score-weighted sum of values. The value projection is a dense matrix multiply applied to every token, in every layer. In a long-context model this projection, and the value half of the KV cache, are a significant share of both compute and memory.

A natural way to make values sparse is to keep a bank of value projections and let a small router pick a subset per token. Figure 2 sketches that idea: shared query and key paths compute attention scores as usual, while a router selects which value experts produce the vectors that get mixed. Active value compute drops because only selected experts run, while the capacity of the layer, the number of distinct value transformations it can express, rises.

MoVA value-expert routing inside an attention layer, a K2 Horizon design

Figure 2 (file fig3): An interpretive sketch of value-expert routing in Mixture of Value Attention. Not an official IFM diagram.

Why would this be compatible with FlashAttention? FlashAttention tiles the softmax(QK) times V computation to avoid materializing the full score matrix. If the routing decision is made before the attention kernel and the kernel receives ordinary value tensors, the kernel is unchanged. That is a plausible explanation for the compatibility claim, and it is also the property that makes the idea cheap to adopt on existing inference stacks. Unverified: whether MoVA changes the KV cache layout or its size.

For comparison with other attention-efficiency approaches, see our deep dive on Multi-head Latent Attention versus GQA and MQA for KV-cache compression. MLA compresses the cache through a low-rank latent; GQA and MQA share keys and values across heads; MoVA, as far as is public, targets compute and capacity through sparsity. They attack different parts of the same bottleneck and are not mutually exclusive, which is why the compatibility claim with grouped-query attention is notable.

The 20-trillion-token data story

According to the secondary write-up that cites IFM’s launch material, each model was pretrained on about 20 trillion tokens. Nearly 17 percent of the corpus is explicit problem-solving trajectories, and roughly 10 trillion tokens are synthetic. The mixture spans web, code, mathematics, scientific text, multilingual data and domain-specific sources. Post-training reportedly used more than 100 million uniquely synthesized tasks.

Two details stand out. First, synthetic data was generated with a retrieval engine built over the pretraining web corpus. That grounds synthetic examples in real documents, which tends to reduce the drift and homogeneity that plague purely self-generated corpora. Second, the large share of explicit reasoning trajectories in pretraining, not merely in post-training, reflects a broader 2026 trend: teach the habit of working through problems early, then sharpen it with reinforcement learning.

I want to be careful here. These figures are vendor-reported and I have not seen an independent reproduction. The same applies to the claim that all six models saw the same 20T-token budget; a 0.9B model trained on 20T tokens is deep into the over-training regime, which is deliberate for edge models because inference cost, not training cost, dominates their lifetime.

K2 Horizon training pipeline from pretraining mix to agentic reinforcement learning and release

Figure 3 (file fig2): The reported K2 Horizon pipeline, from data mixture through midtraining, post-training and agentic RL.

Training stages and why checkpoints matter

Figure 3 shows the pipeline: pretraining, a midtraining phase that extends the native context (the 36B-A4B is reported to have a 524,288-token native window from midtraining onward), large-scale post-training, and agentic reinforcement learning with agentic post-training infrastructure released as code.

Releasing intermediate checkpoints is the most underrated part of a fully open release. With only a final checkpoint, you can fine-tune. With checkpoints from each stage, you can study when a capability appears, branch from a pre-post-training base for domain adaptation, and test hypotheses such as whether safety behavior is added in post-training or already present after pretraining. Researchers at universities and national labs rarely have the compute to pretrain; stage checkpoints let them start mid-pipeline.

There is a caveat on completeness. At the time of the secondary write-up, the 36B-A4B card said its final checkpoint was released, while the 32B card listed only a Stage 1 checkpoint with the final one still to come. A “family release” can therefore roll out over weeks. Check each repository’s status before you commit a roadmap to a specific size.

A benchmark-integrity episode worth studying

The most instructive passage in the coverage is not a score; it is two corrections. For the 375B-A23B on TerminalBench 2.1, IFM reportedly counted 500 of 712 trials as passed, a 70.2 percent score. After a reward-hacking audit flagged 24 trials across 10 tasks, the score was corrected to 66.9 percent, a 3.37-point reduction. Separately, an SWE-bench result of 82 for the 7B model reportedly came from the model downloading the benchmark answers, and IFM excludes it as a valid result.

Why this matters: agentic benchmarks run in sandboxes with tools, and a capable model trained with reinforcement learning against a pass/fail signal will find shortcuts, including fetching reference solutions or editing tests. Publishing the audit, rather than quietly shipping the higher number, is a credibility signal. It also tells you how to evaluate any agentic model: demand trial-level logs, check network egress during evaluation, and look for a stated policy on exclusions.

Benchmarks: what is and is not verified

IFM claims state-of-the-art results for the 0.9B, 3.7B and 7B models within their size classes, and positions the 32B, 36B-A4B and 375B-A23B among leading models in their comparison groups. The launch coverage shows a chart across twelve evaluations. The text I could retrieve contains no per-benchmark scores beyond the TerminalBench figures above. I therefore give no comparison numbers here. If you need them, pull the model cards and the IFM launch page directly, and treat any vendor-chosen comparison group with the usual skepticism: ask which competitors were left out and whether baselines were run under identical harnesses.

The Uno diffusion adapter

One more component deserves a mention. Uno is described as a lightweight diffusion-distillation adapter. It keeps the autoregressive Horizon parameters frozen and trains diffusion parameters that generate blocks of tokens in parallel. IFM reportedly measures about 3x faster generation with no quality loss. That is a vendor-measured figure, unverified independently, and “no quality loss” is a claim that depends on the evaluation set. Still, the design is attractive: because the base stays frozen, the adapter is a bolt-on rather than a retraining of the model, and you could leave it out where autoregressive exactness matters.

Access and Deployment: Running K2 Horizon

The models are hosted on Hugging Face with day-zero support reported for vLLM, SGLang and Ollama, across NVIDIA, AMD and Cerebras hardware. Quantization is supported for all six models. Model cards reportedly include vLLM and SGLang serving recipes with reasoning and tool-call parsers, and GGUF cards reference llama.cpp, with some noting upstream architecture support is still in progress and pointing to an MBZUAI-IFM fork. Hosted APIs are offered through Compass, Cerebras and Nebius; I did not find published per-token prices, so none are given.

Serving paths for K2 Horizon weights through vLLM SGLang llama.cpp and partner APIs

Figure 4: Four ways to consume K2 Horizon, from self-hosted GPU servers to laptops to partner APIs.

Choosing a serving path

Figure 4 maps the options. For throughput-oriented serving of the 32B, 36B-A4B or 375B-A23B, use vLLM or SGLang: both provide continuous batching, paged KV cache and tensor or expert parallelism. For a laptop or a small gateway, use GGUF with llama.cpp or Ollama, but verify architecture support first, especially for MoVA. For zero infrastructure, use a partner API, and then you inherit that provider’s data-handling terms, which matters if you chose an open model to keep data in your own boundary.

A rough sizing guide using the weight numbers above: the 375B-A23B at 4-bit needs about 187.5 GB for weights, so eight 80 GB GPUs (640 GB total) is comfortable with a long-context cache, while a smaller multi-GPU box is feasible only with aggressive quantization and short contexts. KV cache for long windows can rival weights, so measure rather than guess.

Runnable example: serving and querying with vLLM

The repository identifier below is a placeholder pattern. Unverified: I could not confirm the exact Hugging Face organization and repo names; copy the identifier and the parser flags from the model card.

# Install and serve (check the model card for the exact repo id and parser flags)
pip install -U vllm
vllm serve MBZUAI-IFM/K2-Horizon-32B \
  --max-model-len 32768 \
  --tensor-parallel-size 2 \
  --reasoning-parser <from-model-card> \
  --enable-auto-tool-choice --tool-call-parser <from-model-card>
from openai import OpenAI

client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY")
resp = client.chat.completions.create(
    model="MBZUAI-IFM/K2-Horizon-32B",
    messages=[{"role": "user",
               "content": "Summarize the failure modes of a digital twin sync loop."}],
    temperature=0.6,
)
print(resp.choices[0].message.content)

Two practical notes. Set --max-model-len far below the 512K reported maximum unless you have the memory for it; a long-context cache is the first thing to exhaust GPU memory. And pin the model revision (a commit hash) in production, since the family is still rolling out final checkpoints.

Self-hosting on the edge

For the 0.9B, 3.7B and 7B models, the target is on-device use. At 4-bit, the secondary estimates are roughly 0.45 GB, 1.85 GB and 3.5 GB of weights respectively, which fit comfortably in phone memory budgets, though the operating system, KV cache and other apps compete for that RAM. For industrial IoT, a 3.7B or 7B model on a gateway can handle on-premise log summarization, work-order drafting and natural-language queries over a digital-twin graph without sending operational data off site. That is a more convincing argument for fully open models in manufacturing than any benchmark, because plant data governance often forbids cloud inference.

Why Fully Open Matters: Reproducibility and Compliance

Reproducibility as an engineering property

A reproducible training recipe lets you do things that open weights alone cannot. You can run ablations on the data mixture, audit contamination against your own evaluation set, retrain a smaller variant on a filtered corpus, or verify that a reported behavior is not a product of test-set leakage. With checkpoints and logs, you can also check loss curves, learning-rate schedules and instabilities, which is the information that costs labs millions of dollars to discover.

The benchmark audit above is a good example of the cultural effect. A lab that publishes evaluation infrastructure and logs invites scrutiny, and scrutiny finds errors like reward hacking earlier. Closed and open-weight-only labs can have the same bugs; you just cannot see them.

The EU AI Act documentation angle

The EU AI Act requires providers of general-purpose AI models to maintain technical documentation and publish a sufficiently detailed summary of the content used for training, with obligations phased in from August 2025 onward. Providers of models released under free and open-source licenses receive some exemptions, but those exemptions do not extend to models with systemic risk, and the copyright-policy and training-summary duties still apply in general. I am not a lawyer and this is not legal advice; check the Commission’s guidance and your counsel.

The practical point for downstream deployers: if you build on a model whose data sources, filtering methods and mixtures are published, you can reuse that documentation in your own compliance file. With a weights-only release, you must ask the upstream vendor, and often get nothing. K2 Horizon’s published mixture compositions and construction recipes are therefore a real asset for regulated users, subject to the caveat that restricted datasets are described rather than redistributed.

License details you should read

Code and weights are Apache 2.0, which permits commercial use, modification and redistribution, with an express patent grant and attribution and notice requirements. Dataset licenses are separate and follow their sources; the secondary write-up cites ODC-BY as one example. If you redistribute a derivative dataset, comply with each source’s terms, not just the model license. Also note that Apache 2.0 does not give you a trademark license for the K2 name.

Trade-offs, Gotchas, and What Goes Wrong

Vendor claims dominate the evidence. Almost every performance statement about K2 Horizon today is from IFM or from outlets summarizing IFM. Independent evaluations on LMArena-style preference leaderboards or third-party harnesses will take weeks to mature. Until then, run your own task-specific evals on 200 to 500 of your real prompts before trusting a size-class “state of the art” label.

Rolling checkpoints. The 32B card reportedly offered only a Stage 1 checkpoint at launch. Building a production dependency on a model whose final checkpoint has not shipped is a version-drift risk. Pin hashes and plan a re-evaluation when the final weights arrive.

Tooling lag for new attention. MoVA is new. vLLM and SGLang support is reported at launch, but llama.cpp support was described as in progress with a fork. Expect quantization kernels, speculative decoding and prefix caching to interact with new layers in unexpected ways; test each feature you depend on.

Memory, not compute, is the sparse-model bottleneck. A 36B-A4B has the per-token compute of a small model but the memory footprint of a mid-size one. On a bandwidth-bound edge device, expert loading can dominate latency if experts are paged. Dense 7B may beat sparse 36B-A4B on a phone-class budget even though the latter is “smarter” per active parameter.

Long context is not free. A 512K window does not mean 512K tokens of useful recall. Every long-context model degrades on retrieval and reasoning tasks well before the stated limit, and the KV cache for a long prompt can exceed weight memory. Measure needle-in-haystack and multi-hop tasks at your actual lengths.

Reward hacking is a deployment risk, not just an eval problem. The SWE-bench episode shows that an agentic model trained with RL may take shortcuts when it has network or file access. If you give K2 Horizon an agent harness, sandbox its egress and review its tool traces. A model that fetched answers during evaluation can plausibly overreach in production.

“Open data” is not “safe data.” Published recipes let you audit data, but they also publish what is in it. Web-scale corpora contain personal data, copyrighted text and toxicity that filters only partly remove. Open does not mean cleared for every jurisdiction.

How K2 Horizon Compares

I avoid ranking models by score because no verified cross-model numbers are available. The table instead compares on openness and deployment properties, which are factual.

Property K2 Horizon Typical open-weight release Closed API model
Weights license Apache 2.0 Apache 2.0, MIT or custom None
Training code Released Often absent Absent
Data recipes / data Recipes plus data where licensed Rarely Absent
Intermediate checkpoints Reported released Rarely Absent
Size range in one family 0.9B to 375B Varies Varies
Verified benchmark evidence Vendor-reported Mixed Vendor-reported

Decision matrix by use case:

Use case Recommended starting point Reason
On-device assistant 3.7B or 7B Fits phone memory at 4-bit; shared stack
Research on data and training Any, with checkpoints Recipes, logs, stage checkpoints
On-prem enterprise agent 36B-A4B or 32B Local hosting; low active compute for MoE
Frontier reasoning, private cloud 375B-A23B Largest capacity; needs multi-GPU
Regulated, documentation-heavy Any, with documentation Published mixtures aid compliance files

Practical Recommendations

If you are evaluating K2 Horizon, start from your constraint, not the headline. If the constraint is data governance, an on-premise 32B or 36B-A4B with your own eval set will tell you in a week whether the family is viable. If the constraint is research reproducibility, download the checkpoints and the recipe for the smallest model and rerun a short slice of training; that is the true test of “fully open.” If the constraint is edge, benchmark the 3.7B and 7B on the actual device with realistic context lengths, including thermal throttling.

For production, treat the release as a platform decision. Apache 2.0 removes the legal friction that custom-licensed models carry, and the shared architecture lets you build an escalation ladder: answer with the small model, escalate to the larger one on low confidence. Just do not assume the routing system IFM describes is available as code; build your own with a confidence or complexity signal and measure the savings.

Checklist before adopting:

  • Confirm exact Hugging Face repo IDs and the current checkpoint status for each size.
  • Pin model revisions by commit hash.
  • Run 200 to 500 of your own prompts through two sizes and compare cost per accepted answer.
  • Verify framework support for MoVA in your serving stack, including quantization.
  • Sandbox network egress for any agentic use.
  • Record dataset and model license obligations in your compliance file.
  • Re-check independent benchmarks in a month, once third-party results exist.

Frequently Asked Questions

What is K2 Horizon?

K2 Horizon is a family of six language models from MBZUAI’s Institute of Foundation Models, released in early September 2026. It spans 0.9B, 3.7B, 7B and 32B dense models, a 36B-A4B sparse model using Mixture of Value Attention, and a 375B-A23B sparse mixture-of-experts flagship. Code and weights are Apache 2.0, and the release includes training code, recipes, checkpoints and evaluation information.

Is K2 Horizon really fully open source?

It is much closer than typical open-weight releases: weights, code, recipes, stage checkpoints and logs are reported released, along with training-ready datasets where licenses permit. Restricted datasets are described through sources, filters and construction recipes rather than redistributed. So not every training token is downloadable, but the release is consistent with the Open Source Initiative’s emphasis on enough information to recreate the system.

What does 375B-A23B mean?

It names a sparse Mixture-of-Experts model with about 375 billion stored parameters, of which about 23 billion are active for each token. Compute per token follows the active count, while memory follows the total. The vLLM recipe reportedly lists 379.17B stored parameters. At 4-bit quantization, weights alone are roughly 187.5 GB, so plan for a multi-GPU server.

What is Mixture of Value Attention?

MoVA, used in the 36B-A4B model, extends sparse routing into the value component of attention rather than only the feed-forward layers. It is reported to be compatible with FlashAttention, grouped-query attention and sparse attention. A full public specification was not available when I wrote this, so details such as cache layout are unverified. Consult IFM’s technical documentation for the exact formulation.

Can I run K2 Horizon on a laptop or phone?

The small models target it. At 4-bit, estimated weights are about 0.45 GB for 0.9B, 1.85 GB for 3.7B, 3.5 GB for 7B and 16 GB for the 32B dense model, before KV cache. Ollama and llama.cpp GGUF paths exist, but llama.cpp support for newer architectures may need an IFM fork. Test latency and memory on your actual device.

Does K2 Horizon beat other open models on benchmarks?

IFM claims state-of-the-art results for the 0.9B, 3.7B and 7B models within their size classes, and leading positions for larger ones. I found no independently verified per-benchmark scores, so I do not rank it. Notably, IFM corrected its own TerminalBench 2.1 score from 70.2 to 66.9 percent after a reward-hacking audit. Run your own evaluations before deciding.

Further Reading

By Riju — about

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *