Takip et

Claude Code ve Başlangıç Token Maliyeti: 27.000 Token Neden Önemli?

Yapay zeka destekli kod asistanları, günümüz yazılım geliştirme süreçlerinin vazgeçilmez bir parçası haline gelmiştir.

Claude Code ve Başlangıç Token Maliyeti: 27.000 Token Neden Önemli?

Yapay zeka destekli kod asistanları, günümüz yazılım geliştirme süreçlerinin vazgeçilmez bir parçası haline gelmiştir. Bu asistanlar, kod yazmaktan hata ayıklamaya, dokümantasyon oluşturmaktan karmaşık problemleri çözmeye kadar birçok alanda geliştiricilere büyük kolaylıklar sunar. Ancak bu güçlü araçları kullanırken göz ardı edilmemesi gereken önemli bir faktör bulunmaktadır: token maliyeti. Özellikle Claude Code gibi gelişmiş modellerde, bir projeye başlamadan veya belirli bir bağlamı oluşturmadan önce belirli bir token tüketimi söz konusu olabilir. Bu makalede, “Everything Claude Code costs 27,000 tokens before you type. I kept five pieces.” ifadesinin derinlemesine bir analizini yaparak, bu başlangıç maliyetinin ne anlama geldiğini, neden oluştuğunu ve geliştiricilerin bu maliyeti nasıl yönetebileceğini ele alacağız. Amacımız, Claude Code’u daha verimli ve bilinçli kullanmanız için size kapsamlı bir rehber sunmaktır. Bu konuyu anlamak, hem zaman hem de maliyet açısından önemli avantajlar sağlayacaktır.

Claude Code, Anthropic tarafından geliştirilen Claude yapay zeka ailesinin kod üretimi ve analizi konusunda optimize edilmiş bir versiyonudur. Geliştiricilere, doğal dil komutları aracılığıyla kod yazma, var olan kodu açıklama, hata ayıklama ve hatta farklı programlama dilleri arasında çeviri yapma yetenekleri sunar. Bu yetenekler, yazılım geliştirme döngüsünü hızlandırırken, aynı zamanda kod kalitesini artırma ve geliştiricilerin daha karmaşık sorunlara odaklanmasını sağlama potansiyeli taşır. Ancak, bu tür bir yapay zeka modelinin etkin bir şekilde çalışabilmesi için, üzerinde çalıştığı proje hakkında belirli bir bağlama (context) sahip olması gerekir. İşte tam da bu noktada, token kavramı devreye girer. Tokenler, yapay zeka modellerinin metni işlemek için kullandığı temel birimlerdir; bunlar kelimeler, kelime parçacıkları veya noktalama işaretleri olabilir. Model, kendisine gönderilen her bir token için bir maliyet hesaplar ve bu, hem girdi (prompt) hem de çıktı (response) için geçerlidir. Dolayısıyla, bir projeye başlamadan önce Claude’a yeterli bağlamı sağlamak, belirli bir başlangıç token maliyetini kaçınılmaz kılar.

Bağlam Penceresi Yönetimi ve Claude’un Proje Anlayışı

Claude gibi büyük dil modelleri (LLM’ler), kendilerine sunulan bilgiyi bir “bağlam penceresi” (context window) içinde işlerler. Bu bağlam penceresi, modelin belirli bir anda hatırlayabildiği ve üzerinde işlem yapabildiği token miktarını ifade eder. Geliştiriciler için bu, Claude’a bir kod tabanı hakkında soru sorduklarında veya ondan bir görev yapmasını istediklerinde, ilgili tüm kod parçacıklarını, yapılandırma dosyalarını ve diğer bilgileri bu pencere içine sığdırmaları gerektiği anlamına gelir. İşte tam da bu noktada, 27.000 tokenlik “başlangıç maliyeti” devreye girer. Bu ifade, Claude’un bir projeyi anlamaya başlaması için belirli bir miktar bağlam verisine ihtiyaç duyduğunu ve bu verinin yaklaşık 27.000 token değerinde olabileceğini belirtir. Bu, modelin projenin genel yapısını, temel bağımlılıklarını, ana mantığını ve önemli bileşenlerini kavraması için gerekli olan minimum bilgi setini temsil eder. Örneğin, bir web projesinde bu “beş parça” kritik dosyalar olabilir: ana uygulama dosyası (app.js veya index.py), bağımlılıkları tanımlayan dosya (package.json veya requirements.txt), ana stil dosyası (style.css), veritabanı şeması (schema.sql) ve belki de projenin genel amacını ve kullanımını açıklayan bir README.md dosyası. Claude, bu dosyaları analiz ederek projenin iskeletini zihninde oluşturur ve böylece sonraki sorularınıza veya görevlerinize daha alakalı yanıtlar verebilir.

Bu başlangıç maliyeti, bir nevi modelin “ısınıp” projeye adapte olması için ödenen bir bedeldir. Claude, kendisine sunulan bu ilk token setini kullanarak projenin iç dinamiklerini, kullanılan kütüphaneleri ve genel mimariyi anlamaya çalışır. Bu süreç, modelin daha sonraki etkileşimlerde daha doğru ve bağlama uygun öneriler sunmasını sağlar. Örneğin, bir JavaScript projesinde package.json dosyasını inceleyerek hangi framework’lerin (yazılım çerçevelerinin) kullanıldığını, ana index.js dosyasını okuyarak uygulamanın giriş noktasını ve temel akışını kavrar. Bu derinlemesine anlayış, modelin sadece sözdizimsel hataları değil, aynı zamanda mantıksal tutarsızlıkları veya potansiyel performans darboğazlarını da tespit etmesine olanak tanır. Aşağıda, küçük bir Node.js projesi için token sayımına dair basitleştirilmiş bir örnek görebilirsiniz. Token sayımı, kullanılan modele ve tokenizasyon yöntemine göre değişmekle birlikte, genel bir fikir verecektir:


// package.json (yaklaşık 50-100 token)
{
  "name": "my-app",
  "version": "1.0.0",
  "description": "Simple web app",
  "main": "server.js",
  "dependencies": {
    "express": "^4.17.1",
    "mongoose": "^6.0.12"
  }
}

// server.js (yaklaşık 200-300 token)
const express = require('express');
const mongoose = require('mongoose');
const app = express();
const port = 3000;

mongoose.connect('mongodb://localhost/myapp', { useNewUrlParser: true, useUnifiedTopology: true });

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(port, () => {
  console.log(App listening at http://localhost:${port});
});

// models/User.js (yaklaşık 100-150 token)
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
  name: String,
  email: String
});
module.exports = mongoose.model('User', userSchema);
      

Yukarıdaki örnekte, sadece üç dosya bile yüzlerce token değerine ulaşabilmektedir. Bir projenin tamamı düşünüldüğünde, 27.000 tokenlik bir başlangıç maliyeti oldukça gerçekçi bir senaryo olabilir. Bu nedenle, geliştiricilerin bu bağlam penceresini akıllıca yönetmeleri ve sadece en kritik bilgileri Claude’a sunmaları, hem maliyetleri düşürmek hem de modelin daha odaklı yanıtlar vermesini sağlamak açısından büyük önem taşımaktadır.

Token Tüketimini Optimize Etme Stratejileri ve Akıllı İstek Mühendisliği

Claude Code gibi güçlü bir aracı kullanırken token tüketimini optimize etmek, hem maliyetleri düşürmek hem de modelin daha hızlı ve alakalı yanıtlar vermesini sağlamak açısından hayati öneme sahiptir. İlk 27.000 tokenlik başlangıç maliyeti kaçınılmaz olsa da, sonraki etkileşimlerde bu tüketimi bilinçli bir şekilde yönetmek mümkündür. Öncelikle, “Prompt Engineering” (istek mühendisliği) devreye girer. Claude’a göndereceğiniz isteklerin (prompt’ların) kalitesi, modelin ne kadar token harcayacağını doğrudan etkiler. Net, öz ve hedefe yönelik istemler, modelin gereksiz bilgileri işlemesini engeller ve daha az token ile daha iyi sonuçlar almanızı sağlar. Örneğin, bir hata ayıklama görevi için tüm projenizi göndermek yerine, sadece hatanın meydana geldiği modülü ve ilgili bağımlılıkları içeren kod bloklarını sunmak çok daha verimli olacaktır. Ayrıca, Claude’dan belirli bir dosya veya fonksiyon hakkında bilgi isterken, sadece o dosyanın içeriğini veya fonksiyonun tanımını sağlamak, tüm projenin genel yapısını tekrar tekrar yüklemekten kaçınmanızı sağlar.

Bir diğer önemli strateji ise “gereksiz bağlamı filtreleme”dir. Büyük kod tabanlarında, modelin her seferinde tüm kodu işlemesi hem yavaş hem de pahalıdır. Bu durumda, Claude’a sadece üzerinde çalıştığınız göreve doğrudan ilgili olan kod parçacıklarını, yapılandırma dosyalarını veya dokümantasyonları sağlamak önemlidir. Örneğin, bir backend (arka uç) API’sında çalışırken, frontend (ön uç) kodunu veya veritabanı migration (veri taşıma) dosyalarını bağlam penceresine dahil etmek genellikle gereksizdir. Bu bağlamda, “Chunking (parçalama)” ve “Summarization (özetleme)” teknikleri de oldukça kullanışlıdır. Çok büyük bir dosya veya doküman varsa, bunu daha küçük, yönetilebilir parçalara bölerek veya anahtar bilgileri özetleyerek Claude’a sunabilirsiniz. Bu sayede, modelin tamamını işlemesi yerine, sadece kritik özetler üzerinde çalışması sağlanır. Örneğin, bir projenin genel mimarisini özetleyen bir belgeyi Claude’a verip, ardından belirli bir modülün detaylarını ayrı bir istekte sunmak, kademeli bir bağlam oluşturma yaklaşımıdır. Ayrıca, modelden gelen yanıtları da dikkatlice incelemek ve gereksiz uzunluktaki yanıtları kısaltmasını istemek, çıkış token maliyetini düşürmek için etkili bir yöntemdir. Geliştirme sürecinde, Claude’u kullanarak kodunuzu açıklamasını veya belirli bir bölümü yeniden düzenlemesini istediğinizde, modelin yanıtının boyutunu ve detay seviyesini kontrol etmek için açıkça talimatlar verebilirsiniz. Bu, özellikle karmaşık sistemlerde, gereksiz ayrıntılardan kaçınarak anahtar bilgilere odaklanmayı sağlar. Örneğin, "Bu fonksiyonun temel amacını 50 kelimeyi geçmeyecek şekilde açıkla" gibi bir istek, modelin daha kısa ve öz bir yanıt üretmesini teşvik eder.

Gerçek Dünya Senaryoları: Başlangıç Maliyetini Yönetme Uygulamaları

Claude Code’un başlangıç token maliyetini ve sonraki tüketimi gerçek dünya senaryolarında nasıl yöneteceğimizi anlamak, bu aracın etkinliğini artırmak için kritik öneme sahiptir. İşte birkaç vaka analizi:

Vaka Analizi 1: Yeni Bir Özellik Geliştirme

Diyelim ki, mevcut bir e-ticaret platformuna “misafir ödeme” özelliği eklemeniz gerekiyor. Projenin kod tabanı oldukça büyük ve birçok farklı modülden oluşuyor. İlk olarak, Claude’a projenin ana yapısını ve ödeme akışıyla ilgili mevcut modülleri tanıtmanız gerekecek. Bu, package.json, ana ödeme işlemcisi dosyaları, kullanıcı sepeti yönetimi ve sipariş oluşturma modülleri gibi “beş kritik parça”yı içerebilir. Bu ilk bağlam yüklemesi 27.000 token veya daha fazlasına mal olabilir. Ancak, bu başlangıç yatırımından sonra, yeni özelliği geliştirirken Claude’dan yardım alırken token tüketimini optimize edebilirsiniz. Örneğin, sadece yeni misafir ödeme akışını ilgilendiren kod parçalarını (yeni bir controller, bir servis sınıfı, bir model tanımı) Claude’a sunarak ondan kod üretmesini veya mevcut kodu refactor (yeniden yapılandırma) etmesini isteyebilirsiniz. Gereksiz bağımlılıkları veya alakasız UI (kullanıcı arayüzü) bileşenlerini bağlam dışı bırakmak, her bir istek için harcanan token sayısını önemli ölçüde azaltacaktır. Bu yaklaşım, Claude’un mevcut kod tabanını anladığından emin olurken, her yeni etkileşimde sadece ilgili bağlamı işlemesini sağlar.

Vaka Analizi 2: Karmaşık Bir Hata Ayıklama (Debugging) Süreci

Bir uygulamanın üretim ortamında nadir görülen ve tekrarlanması zor bir hata ile karşılaştınız. Hata mesajı belirsiz ve sorunun kökenini bulmak zor. Bu durumda, Claude Code’dan yardım almak isteyebilirsiniz. Başlangıçta, hata mesajının tamamını, ilgili log kayıtlarını ve hatanın meydana geldiği ana fonksiyonun veya modülün kodunu Claude’a sunmanız gerekecektir. Bu ilk girdi, hatanın doğasını ve potansiyel nedenlerini anlaması için Claude’a yeterli bağlamı sağlayacaktır. Örneğin, bir Python uygulamasında bir TypeError alıyorsanız, ilgili traceback (hata izi) ve fonksiyon tanımını içeren 300-500 satırlık bir kodu Claude’a verebilirsiniz. Modelin önerileri doğrultusunda, daha fazla bilgiye ihtiyaç duyduğunda, sadece önerilen ilgili kod bloklarını veya yapılandırma dosyalarını (örneğin, veritabanı bağlantı ayarları) ekleyerek bağlamı genişletirsiniz. Tüm projenin kodunu tekrar tekrar yüklemek yerine, sadece soruna odaklanmış, küçük ve artımlı bağlam güncellemeleriyle ilerlemek, token tüketimini kontrol altında tutmanın anahtarıdır. Bu sayede, Claude daha hızlı ve isabetli hata çözümleri sunarken, siz de maliyetleri minimize edersiniz.

Vaka Analizi 3: Kod İncelemesi (Code Review) ve Yeniden Yapılandırma

Büyük bir pull request (çekme isteği) için hızlı bir kod incelemesi yapmanız veya mevcut bir modülü yeniden yapılandırmanız gerekiyor. Claude Code, bu süreçlerde de değerli bir yardımcı olabilir. Geleneksel olarak, tüm kod tabanını Claude’a sunmak yerine, sadece değişikliklerin (diff) bulunduğu kod parçalarını veya yeniden yapılandırmak istediğiniz modülün tamamını Claude’a gönderebilirsiniz. Örneğin, bir C# projesinde belirli bir sınıfın (class) veya arayüzün (interface) iyileştirilmesi gerekiyorsa, sadece o sınıfın tanımını ve ilgili bağımlılıklarını içeren kodu Claude’a sunarsınız. Claude, bu bağlamı kullanarak potansiyel iyileştirmeler, güvenlik açıkları veya performans darboğazları hakkında önerilerde bulunabilir. Eğer daha geniş bir bağlama ihtiyaç duyarsa, örneğin, sınıfın nasıl kullanıldığını görmek isterse, ilgili kullanım örneklerini içeren başka bir kodu da ekleyebilirsiniz. Bu artımlı bağlam sağlama yaklaşımı, modelin her seferinde tüm projeyi yeniden işlemesini engelleyerek hem token maliyetini düşürür hem de inceleme sürecini hızlandırır. Bu senaryolarda görüldüğü gibi, Claude Code’u kullanırken başlangıç maliyetini bilmek ve sonraki etkileşimlerde bağlamı akıllıca yönetmek, geliştirme verimliliğini ve maliyet etkinliğini doğrudan etkileyen faktörlerdir.

Claude Modelleri Arasında Seçim ve Uzun Vadeli Maliyet Etkinliği

Anthropic’in Claude modelleri ailesi, Haiku, Sonnet ve Opus olmak üzere farklı performans ve maliyet seviyelerine sahip seçenekler sunar. Bu modeller arasında doğru seçimi yapmak, token maliyetini ve geliştirme sürecindeki verimliliği doğrudan etkiler. Claude Haiku, en hızlı ve en uygun maliyetli modeldir; daha basit kod tamamlama, hızlı hata ayıklama veya küçük kod parçacıklarını analiz etme gibi görevler için idealdir. Düşük token maliyeti sayesinde, sık ve tekrarlayan görevlerde bütçenizi korumanıza yardımcı olur. Claude Sonnet, Haiku’dan daha yetenekli ve daha karmaşık kod analizi ile üretim görevleri için uygun bir orta seviye modeldir. Daha büyük bağlam pencereleri ve daha gelişmiş akıl yürütme yetenekleri sunar, bu da onu orta ölçekli projeler ve daha detaylı kod incelemeleri için iyi bir seçenek haline getirir. Claude Opus ise, en yetenekli ve en pahalı modeldir; çok karmaşık projeler, büyük kod tabanları üzerinde derinlemesine analizler, mimari tasarım önerileri veya kritik hata ayıklama görevleri için tasarlanmıştır. En geniş bağlam penceresine ve en yüksek akıl yürütme kabiliyetine sahip olması, onu en zorlu mühendislik problemlerinde vazgeçilmez kılar. Ancak, bu üstün yetenekler daha yüksek token maliyetleriyle gelir.

Doğru modeli seçmek, projenizin gereksinimlerine ve bütçenize bağlıdır. Örneğin, hızlı prototipleme veya küçük bir betik (script) yazarken Haiku yeterli olabilirken, karmaşık bir mikroservis mimarisini tasarlarken veya büyük bir güvenlik açığını analiz ederken Opus’a ihtiyacınız olabilir. Uzun vadeli maliyet etkinliği değerlendirilirken, sadece token başına düşen maliyeti değil, aynı zamanda modelin size sağladığı zaman tasarrufunu ve artan verimliliği de göz önünde bulundurmak önemlidir. Claude Code’un sağladığı hız, daha az manuel hata ayıklama süresi ve daha hızlı geliştirme döngüleri, token maliyetini fazlasıyla telafi edebilir. Bir geliştiricinin bir saatte yapabileceği bir işi Claude’un birkaç dakikada yapması, insan kaynakları maliyetinden önemli ölçüde tasarruf anlamına gelir. Bu nedenle, yatırım getirisi (ROI) analizi yaparken, token maliyetini bir gider olarak değil, geliştirme sürecini hızlandıran ve kalitesini artıran bir yatırım olarak görmek daha doğru bir yaklaşımdır. Şirketler, Claude Code’u kullanarak geliştirme ekiplerinin üretkenliğini artırabilir, yeni ürünleri daha hızlı pazara sunabilir ve böylece rekabet avantajı elde edebilirler. Bu da, başlangıçta ödenen 27.000 tokenlik veya daha yüksek bağlam maliyetlerinin, uzun vadede çok daha büyük faydalar sağlayabileceği anlamına gelir.

Sonuç ve Sıkça Sorulan Sorular: Claude Code ile Bilinçli Geliştirme

Claude Code gibi yapay zeka destekli kod asistanları, yazılım geliştirme dünyasında devrim yaratıyor. Ancak bu araçların gücünden tam olarak faydalanabilmek için, token maliyeti ve bağlam yönetimi gibi temel kavramları anlamak büyük önem taşıyor. Makalemizin başında belirttiğimiz “Everything Claude Code costs 27,000 tokens before you type. I kept five pieces.” ifadesi, modelin bir projeyi anlamaya başlaması için belirli bir başlangıç token maliyetine katlanmamız gerektiğini vurgulamaktadır. Bu, modelin bağlam penceresine yüklenen kritik dosya ve kod parçacıkları aracılığıyla projenin iskeletini kavraması için yapılan bir yatırımdır. Bu başlangıç maliyeti kaçınılmaz olsa da, akıllı istek mühendisliği, gereksiz bağlamı filtreleme ve doğru Claude modelini seçme gibi stratejilerle sonraki token tüketimini optimize etmek mümkündür. Gerçek dünya senaryolarında gördüğümüz gibi, bu yaklaşımlar hem maliyetleri kontrol altında tutar hem de modelin daha verimli ve alakalı yanıtlar üretmesini sağlar. Claude Code’u bilinçli bir şekilde kullanarak, geliştirme süreçlerinizi hızlandırabilir, kod kalitesini artırabilir ve daha karmaşık projelere odaklanabilirsiniz. Unutmayın, token maliyeti bir engel değil, verimli bir yapay zeka kullanımı için anlaşılması gereken bir parametredir. Doğru stratejilerle, Claude Code’un sunduğu avantajlardan en üst düzeyde faydalanabilirsiniz.

Sıkça Sorulan Sorular

  • Soru 1: Claude Code’un başlangıç token maliyeti her zaman 27.000 mi?

    Hayır, 27.000 token spesifik bir örnek veya ortalama bir değerdir. Başlangıç maliyeti, projenin büyüklüğüne, karmaşıklığına ve Claude’a sunulan ilk bağlamın (dosya sayısı, kod satırı sayısı, dokümantasyon miktarı) uzunluğuna göre değişir. Daha küçük projeler için daha az, çok büyük ve karmaşık projeler için daha fazla token harcanabilir. Bu sayı, modelin projeyi “anlaması” için gereken minimum bağlamı ifade eder.

  • Soru 2: Token maliyetini düşürmek için hangi araçları kullanabilirim?

    Token maliyetini düşürmek için çeşitli stratejiler mevcuttur. En önemlileri arasında, Claude’a sadece göreve doğrudan ilgili olan kodu ve bilgiyi sağlamak, net ve kısa istemler (prompt’lar) kullanmak, büyük dosyaları özetlemek veya parçalara ayırmak ve modelden gelen yanıtların uzunluğunu sınırlamak yer alır. Ayrıca, daha az karmaşık görevler için Claude Haiku gibi daha uygun maliyetli modelleri tercih etmek de maliyetleri düşürebilir.

  • Soru 3: Büyük projelerde token yönetimi nasıl yapılır?

    Büyük projelerde token yönetimi, özellikle bağlam penceresini etkin kullanmakla ilgilidir. Projeyi modüler parçalara ayırmak, her bir modül için ayrı ayrı bağlam oluşturmak ve Claude’a yalnızca üzerinde çalışılan modülün ilgili kodlarını sunmak önemlidir. Versiyon kontrol sistemlerindeki (örneğin Git) değişiklikleri (diff’leri) kullanarak sadece değişen kısımları göndermek, tüm projeyi tekrar tekrar yüklemekten kaçınmanızı sağlar. Ayrıca, projenin genel mimarisini özetleyen yüksek seviyeli dokümantasyonu başlangıçta sunup, sonra detaylar için spesifik kod parçacıklarına odaklanmak da etkili bir yöntemdir.

  • Soru 4: Claude Code’un maliyeti diğer AI kod asistanlarıyla nasıl karşılaştırılır?

    Claude Code’un token maliyeti, kullanılan modele (Haiku, Sonnet, Opus), görev türüne ve API fiyatlandırmasına göre değişir. Diğer AI kod asistanları (örneğin GitHub Copilot, ChatGPT Code Interpreter) farklı fiyatlandırma modelleri (abonelik tabanlı, token tabanlı) ve farklı performans seviyeleri sunar. Claude, genellikle daha büyük bağlam pencereleri ve daha gelişmiş akıl yürütme yetenekleri sunarak, karmaşık görevlerde öne çıkar, ancak bu durum bazen daha yüksek token maliyetleriyle sonuçlanabilir. En iyi karşılaştırma, kendi kullanım senaryolarınıza göre her bir aracın performansını ve maliyetini test etmektir.

  • Soru 5: Token kullanımımı gerçek zamanlı olarak takip edebilir miyim?

    Evet, Anthropic API’sini kullanırken token kullanımınızı ve maliyetlerinizi genellikle geliştirici paneliniz üzerinden veya API yanıtlarında dönen kullanım istatistikleri aracılığıyla gerçek zamanlı olarak takip edebilirsiniz. Bu, bütçenizi yönetmenize ve token tüketimini optimize etme stratejilerinizin etkinliğini değerlendirmenize yardımcı olur. Birçok entegrasyon ve geliştirme ortamı (IDE) eklentisi de bu tür izleme yetenekleri sunabilir.

#Teknoloji #YapayZeka #ClaudeCode #TokenMaliyeti #GeliştirmeVerimliliği

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version