  

# AI pogonjen sustav za ocjenjivanje rizika usklađenosti otvorenog koda u stvarnom vremenu  

Poduzeća sve više grade proizvode na temelju komponenti otvorenog koda. Iako to ubrzava inovacije, također uvodi promjenjive zahtjeve za licenciranje, ranjivosti i regulatornu usklađenost. Tradicionalne provjere usklađenosti izvode se noću ili po potrebi, ostavljajući prozor u kojem nova ovisnost može prekršiti politiku prije nego što itko to primijeti.  

**Što ako bi se usklađenost mogla procijeniti u trenutku kada ovisnost uđe u pull request, s ocjenom rizika koja objašnjava *zašto* i *kako* se otklanja?**  

U ovom članku dizajniramo **sustav za ocjenjivanje rizika usklađenosti otvorenog koda u stvarnom vremenu** koji spaja **Softverski popis materijala (SBOM)**, **samopopravljajući graf znanja**, **grafičke neuronske mreže (GNN‑ove)** za strukturnu inferenciju rizika i **velike jezične modele (LLM‑ove)** za kontekstualno tumačenje politika. Rješenje također uključuje **Zero‑Knowledge Proofs (ZKPs)** kako bi zaštitilo vlasnički kod, a istovremeno dokazalo usklađenost.  

> **Ključni zaključci**  
> - Arhitektura koja strujno prenosi SBOM‑ove u živi graf znanja za usklađenost.  
> - GNN‑temeljeno ocjenjivanje koje hvata transitivni rizik kroz stabla ovisnosti.  
> - LLM‑pogonjena transformacija politika koja pravni tekst pretvara u pravila čitljiva za strojeve.  
> - ZKP‑om omogućena verifikacija za siguran, auditable dokaz usklađenosti.  

---  

## 1. Zašto usklađenost otvorenog koda treba inteligenciju u stvarnom vremenu  

| Izazov | Tradicionalni pristup | Praznina u stvarnom vremenu |
|-----------|----------------------|---------------|
| **Klizanje licence** – nova ovisnost uvodi copyleft licencu. | Noćne skenove, ručno otklanjanje. | Prekršaj se može spojiti prije otkrivanja. |
| **Propagacija ranjivosti** – CVE u transitivnoj ovisnosti. | Tjedni bazeni ranjivosti, odgođeno zakrpavanje. | Površina napada postoji tijekom kašnjenja. |
| **Regulatorna ograničenja** – kontrola izvoza, rezidencija podataka. | Kvartalni pregledi politika. | Poslovne jedinice mogu nenamjerno prekršiti regulative. |
| **Podrijetlo lanca opskrbe** – nepoznat izvor komponente. | Ručne provjere podrijetla. | Nema jamstva autentičnosti u trenutku spajanja. |

Ocjenjivanje u stvarnom vremenu uklanja ove praznine **procjenom svake promjene u trenutku integracije koda** i odmah pruža akcijsku ocjenu rizika.  

---  

## 2. Visokorazinska arhitektura  

```mermaid
graph TD
    A["Developer Push (Git)"] --> B["SBOM Generator (Syft/Trivy)"]
    B --> C["Event Stream (Kafka)"]
    C --> D["Knowledge Graph Service"]
    D --> E["GNN Scoring Engine"]
    D --> F["LLM Policy Interpreter"]
    E --> G["Risk Score API"]
    F --> G
    G --> H["CI/CD Gate (GitHub Actions)"]
    H --> I["Zero‑Knowledge Proof Generator"]
    I --> J["Compliance Audit Ledger (Immutable)"]
```  

*Slika 1 – Cjevovod za ocjenjivanje rizika usklađenosti otvorenog koda u stvarnom vremenu.*  

### 2.1 Pregled komponenti  

| Komponenta | Uloga |
|-----------|------|
| **SBOM Generator** | Stvara potpuni popis ovisnosti (uključujući transitive rubove) za svaki commit. |
| **Event Stream** | Osigurava niskog kašnjenja isporuku SBOM ažuriranja prema downstream uslugama. |
| **Knowledge Graph Service** | Pohranjuje entitete (pakete, licence, CVE‑ove, regulative) i odnose; automatski se liječi putem Retrieval‑Augmented Generation (RAG). |
| **GNN Scoring Engine** | Uči propagaciju rizika kroz graf, ispisujući numeričku ocjenu po čvoru i agregiranu za commit. |
| **LLM Policy Interpreter** | Pretvara pravne i regulatorne tekstove u pravila grafa (npr. “GPL‑3.0 ne smije se pojaviti u SaaS proizvodima”). |
| **Risk Score API** | Izlaže ocjenu i objašnjenje CI/CD‑u i alatima za developere. |
| **Zero‑Knowledge Proof Generator** | Stvara kriptografske dokaze da ocjena zadovoljava politiku bez otkrivanja vlasničkog koda. |
| **Compliance Audit Ledger** | Neizmjenjivi zapis (blockchain ili append‑only store) za revizore. |

---  

## 3. Uzimanje podataka – od koda do grafa  

1. **Ekstrakcija SBOM‑a** – Alati poput *Syft* ili *Trivy* pokreću se kao pre‑commit hook, ispisujući CycloneDX ili SPDX dokument.  
2. **Normalizacija** – Pretvaranje identifikatora paketa u kanonički oblik (purl).  
3. **Obogaćivanje** – Upiti prema vanjskim izvorima (NVD, OSV, SPDX License List, liste kontrola izvoza) i dodavanje atributa (ozbiljnost, tip licence, jurisdikcija).  
4. **Strujanje** – Objavljivanje obogaćenog SBOM‑a kao JSON događaja na Kafka teme `sbom.raw` i `sbom.enriched`.  

Cjevovod za unos podataka je **idempotentan**; ponovna obrada istog commita daje isti stanje grafa, što je ključno za reproducibilne revizije.  

---  

## 4. Izgradnja grafa znanja i automatsko liječenje  

Shema grafa uključuje:  

- **Package** čvorove (ime, verzija, purl).  
- **License** čvorove (SPDX identifikator, matrica kompatibilnosti).  
- **Vulnerability** čvorove (CVE, CVSS, verzija zakrpe).  
- **Regulation** čvorove (npr. GDPR Art. 32, US Export Control).  
- **Edge Types**: `DEPENDS_ON`, `HAS_LICENSE`, `HAS_VULNERABILITY`, `SUBJECT_TO`.  

### 4.1 Automatsko liječenje pomoću Retrieval‑Augmented Generation  

Kad se objavi nova regulativa, sustav:  

1. Dohvaća sirovi tekst putem LLM‑pogonjenog web‑croljera.  
2. Generira pravila grafa (npr. `IF package.license = "GPL-3.0" AND product.type = "SaaS" THEN risk += 0.8`).  
3. Umeće ili ažurira čvorove/bridove automatski, osiguravajući da graf ostane aktualan bez ručnih migracija.  

---  

## 5. Ocjenjivanje u stvarnom vremenu pomoću grafičkih neuronskih mreža  

### 5.1 Dizajn modela  

- **Ulaz**: Podgraf ukorijenjen u promijenjenom paketu, obogaćen čvorovnim značajkama (težina licence, CVSS ocjena, regulatorna zastavica).  
- **Arhitektura**: **Graph Convolutional Network (GCN)** praćen **Readout** slojem koji agregira ugrađene čvorove u vektor na razini commita.  
- **Izlaz**:  
  - **Ocjena rizika** ∈ [0, 1] (više = veći rizik).  
  - **Vektor objašnjenja** koji pokazuje doprinose (licenca, CVE, jurisdikcija).  

### 5.2 Podaci za treniranje  

- Povijesni merge događaji označeni prema naknadnim nalazima usklađenosti.  
- Sintetički kontrafaktički primjeri generirani od LLM‑a (npr. “Što ako ovaj paket koristi MIT umjesto GPL?”).  

### 5.3 Latencija inferencije  

GCN inferencija radi na mikro‑servisu s GPU‑akceleracijom, isporučujući ocjene u **<200 ms** po commitu, što zadovoljava zahtjeve CI/CD gate‑a.  

---  

## 6. LLM‑pogonjena kontekstualna interpretacija politika  

Pravni tekstovi su često dvosmisleni. LLM (npr. fino podešeni GPT‑4o) obavlja:  

1. **Ekstrakciju klauzula** – Identificira relevantne sekcije (kompatibilnost licence, ograničenja izvoza).  
2. **Semantičko mapiranje** – Pretvara prirodni jezik u graf predikate (`license_incompatible`, `requires_approval`).  
3. **Dinamičko prompting** – Kada se pojavi nova ovisnost, LLM može odgovoriti “Je li ova licenca dopuštena za cloud‑hosted SaaS proizvod?” koristeći trenutni kontekst grafa.  

LLM također generira **objašnjenja čitljiva ljudima** koja prate ocjenu rizika, zadovoljavajući zahtjeve revizija.  

---  

## 7. Zero‑Knowledge Proofs za privatnost‑orijentirane revizije  

Poduzeća možda ne žele otkriti potpune SBOM‑ove vanjskim revizorima. Korištenjem **zk‑SNARK‑ova**, motor može dokazati:  

- *“Ocjena rizika je ≤ 0.3 i sva pravila politike su zadovoljena.”*  

bez otkrivanja podlogu‑paketa. Dokaz se prilaže neizmjenjivoj revizijskoj knjizi, omogućujući **verifikaciju bez povjerenja**.  

---  

## 8. Integracija s CI/CD cjevovodima  

Tipičan GitHub Actions workflow:  

```yaml
name: Compliance Gate
on: [pull_request]

jobs:
  compliance-check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Generate SBOM
        run: syft . -o json > sbom.json
      - name: Publish SBOM
        run: |
          curl -X POST -H "Content-Type: application/json" \
          -d @sbom.json http://risk‑engine.local/api/v1/sbom
      - name: Retrieve Score
        id: score
        run: |
          SCORE=$(curl -s http://risk‑engine.local/api/v1/score/${{ github.sha }})
          echo "score=$SCORE" >> $GITHUB_OUTPUT
      - name: Enforce Policy
        if: steps.score.outputs.score > 0.4
        run: |
          echo "Compliance risk too high – blocking merge."
          exit 1
```  

Cjevovod **neuspješno zaustavlja** spajanje neusklađenog koda i odmah pruža developerima put za otklanjanje problema.  

---  

## 9. Sigurnost, upravljanje i revizija  

| Zabrinutost | Ublažavanje |
|-------------|-------------|
| **Curanje podataka** – SBOM može sadržavati interne nazive paketa. | Šifriranje SBOM‑payloada; korištenje ZKP‑a za generiranje dokaza. |
| **Drift modela** – GNN može zastarjeti kako se pojavljuju nove prijetnje. | Kontinuirana petlja učenja: tjedno inkorporiranje post‑mortem oznaka. |
| **Dvosmislenost politika** – Ažuriranja pravila mogu biti pogrešno interpretirana. | Ljudski pregled LLM‑generiranih pravila prije umetanja u graf. |
| **Auditorabilnost** – Potreba za neizmjenjivim dokazom. | Append‑only ledger (npr. Hyperledger Fabric) pohranjuje ocjenu, dokaz i vremensku oznaku. |

---  

## 10. Prednosti za organizacije  

1. **Trenutačna vidljivost rizika** – Developeri vide utjecaj usklađenosti dok pišu kod.  
2. **Smanjeni trošak otklanjanja** – Rano otkrivanje izbjegava skupe refaktorizacije kasnije.  
3. **Objašnjive odluke** – GNN i LLM objašnjenja zadovoljavaju regulatore.  
4. **Skalabilnost kroz repozitorije** – Event‑driven dizajn podržava tisuće mikro‑servisa.  
5. **Privatnost‑prvo** – ZKP‑ovi čuvaju povjerljive detalje komponenti.  

---  

## 11. Plan implementacije  

| Faza | Milestones |
|------|------------|
| **0 – Osnove** | Postaviti generiranje SBOM‑a, Kafka i Neo4j graf znanja. |
| **1 – Osnovno ocjenjivanje** | Implementirati jednostavan rule‑based engine (licenca + CVE). |
| **2 – GNN prototip** | Trenirati GCN na povijesnim merge‑ovima, integrirati s API‑jem. |
| **3 – LLM sloj politika** | Fino podesiti LLM na regulatornim korpusima, dodati generiranje pravila. |
| **4 – ZKP integracija** | Implementirati zk‑SNARK generiranje dokaza za ocjenu. |
| **5 – Ugradnja u CI/CD** | Dodati GitHub Actions / GitLab CI gate‑ove, pratiti lažne pozitivne. |
| **6 – Kontinuirano učenje** | Automatizirati povratnu spregu iz revizijskih nalaza natrag u GNN. |

---  

## 12. Budući smjerovi  

- **Međupoduzećno dijeljenje znanja** – Federirano učenje među tvrtkama za poboljšanje modela rizika bez razmjene sirovih SBOM‑ova.  
- **Multimodalni dokazi** – Kombinirati analizu koda s provjerom binarne autentičnosti i skeniranjem kontejnerskih slika.  
- **Adaptivna kontrafaktička simulacija** – Korištenje reinforcement learninga za predlaganje *najmanje rizične* alternativne verzije ovisnosti.  
- **Regulatorni digitalni dvojnik** – Simulacija utjecaja nadolazećih zakona na cijeli softverski portfelj.  

---  

## 13. Zaključak  

Komponente otvorenog koda su životna snaga modernog softvera, ali donose stalno mijenjajući pejzaž usklađenosti. Kombiniranjem **strujnog SBOM‑a, samopopravljajućeg grafa znanja, grafičkih neuronskih mreža, LLM‑pogonjene transformacije politika i zero‑knowledge dokaza**, predloženi motor pruža **trenutačne, objašnjive i privatnost‑orijentirane ocjene rizika** izravno u alate developera.  

Usvajanje ove arhitekture pretvara usklađenost iz uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog uskog us... (truncated)