> ## Documentation Index
> Fetch the complete documentation index at: https://whitepaper.rwanftfi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# रिवॉर्ड्स और मुआवज़ा

> आप अपने नेटवर्क से कैसे कमाते हैं।

export const IncomeCalculator = () => {
  var LEVEL_PERCENTS = [30, 1, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 2, 2, 1, 0.5, 0.5, 0.5, 0.5];
  var DEPTH_BY_NFT = [2, 3, 4, 6, 9, 11, 12, 13, 15, 19];
  var NFT_NAMES = ['GENESIS', 'ADVANCE', 'ASCEND', 'ECLIPSE', 'HYDRO', 'QUANTUM', 'PULSE', 'AURORA', 'FLAME', 'INFINITY'];
  var NFT_PRICES = [28, 55, 140, 275, 550, 1100, 2200, 5500, 11000, 24000];
  var MAX_PARTICIPANTS = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304];
  var usdFormatter = new Intl.NumberFormat('en-US', {
    style: 'currency',
    currency: 'USD',
    maximumFractionDigits: 2
  });
  var fmtUsd = function (n) {
    return usdFormatter.format(n);
  };
  var makeInitialLevels = function () {
    var arr = [];
    for (var i = 0; i < 22; i++) {
      arr.push({
        level: i + 1,
        sales: 0,
        rawSales: '',
        avgPrice: 550
      });
    }
    return arr;
  };
  var [nftLevel, setNftLevel] = useState(5);
  var [showAll, setShowAll] = useState(false);
  var [activePreset, setActivePreset] = useState(null);
  var [levels, setLevels] = useState(makeInitialLevels);
  var maxDepth = DEPTH_BY_NFT[nftLevel - 1];
  var calculated = [];
  for (var ci = 0; ci < levels.length; ci++) {
    var l = levels[ci];
    var isUnlocked = l.level <= maxDepth;
    var pct = LEVEL_PERCENTS[l.level - 1];
    var income = isUnlocked ? l.sales * l.avgPrice * (pct / 100) : 0;
    calculated.push({
      level: l.level,
      sales: l.sales,
      rawSales: l.rawSales,
      avgPrice: l.avgPrice,
      pct: pct,
      income: income,
      isUnlocked: isUnlocked,
      maxPos: MAX_PARTICIPANTS[l.level - 1]
    });
  }
  var visibleLevels;
  if (showAll) {
    visibleLevels = calculated;
  } else {
    visibleLevels = [];
    for (var vi = 0; vi < calculated.length; vi++) {
      if (calculated[vi].isUnlocked || calculated[vi].sales > 0) {
        visibleLevels.push(calculated[vi]);
      }
    }
  }
  var totalIncome = 0;
  for (var ti = 0; ti < calculated.length; ti++) {
    totalIncome = totalIncome + calculated[ti].income;
  }
  var netIncome = totalIncome * 0.75;
  var updateLevel = function (index, updates) {
    setLevels(function (prev) {
      var next = [];
      for (var ui = 0; ui < prev.length; ui++) {
        if (ui === index) {
          next.push({
            level: prev[ui].level,
            sales: updates.sales !== undefined ? updates.sales : prev[ui].sales,
            rawSales: updates.rawSales !== undefined ? updates.rawSales : prev[ui].rawSales,
            avgPrice: updates.avgPrice !== undefined ? updates.avgPrice : prev[ui].avgPrice
          });
        } else {
          next.push({
            level: prev[ui].level,
            sales: prev[ui].sales,
            rawSales: prev[ui].rawSales,
            avgPrice: prev[ui].avgPrice
          });
        }
      }
      return next;
    });
  };
  var applyPreset = function (name, newLevels) {
    setLevels(newLevels);
    setActivePreset(name);
  };
  var makeSmallPreset = function () {
    var arr = [];
    for (var si = 0; si < levels.length; si++) {
      arr.push({
        level: levels[si].level,
        sales: 0,
        rawSales: '',
        avgPrice: 275
      });
    }
    arr[1] = {
      level: arr[1].level,
      sales: 2,
      rawSales: '2',
      avgPrice: 275
    };
    arr[2] = {
      level: arr[2].level,
      sales: 2,
      rawSales: '2',
      avgPrice: 275
    };
    arr[3] = {
      level: arr[3].level,
      sales: 2,
      rawSales: '2',
      avgPrice: 275
    };
    return arr;
  };
  var makeGrowingPreset = function () {
    var arr = [];
    for (var gi = 0; gi < levels.length; gi++) {
      arr.push({
        level: levels[gi].level,
        sales: 0,
        rawSales: '',
        avgPrice: 550
      });
    }
    for (var gi2 = 1; gi2 <= 8; gi2++) {
      var s = Math.min(3 + gi2, MAX_PARTICIPANTS[gi2]);
      arr[gi2] = {
        level: arr[gi2].level,
        sales: s,
        rawSales: String(s),
        avgPrice: 550
      };
    }
    return arr;
  };
  var makeClearPreset = function () {
    var arr = [];
    for (var ki = 0; ki < levels.length; ki++) {
      arr.push({
        level: levels[ki].level,
        sales: 0,
        rawSales: '',
        avgPrice: levels[ki].avgPrice
      });
    }
    return arr;
  };
  var presetBtnStyle = function (name) {
    return {
      backgroundColor: activePreset === name ? 'rgba(255,255,255,0.2)' : 'rgba(255,255,255,0.1)',
      border: '1px solid ' + (activePreset === name ? 'rgba(255,255,255,0.3)' : 'rgba(255,255,255,0.15)'),
      color: '#FFFFFF',
      padding: '6px 16px',
      borderRadius: '9999px',
      fontSize: '11px',
      fontWeight: 600,
      cursor: 'pointer'
    };
  };
  var selectStyle = {
    backgroundColor: 'rgba(56,56,56,0.7)',
    color: '#FFFFFF',
    border: '1px solid rgba(255,255,255,0.1)',
    borderRadius: '6px',
    padding: '6px 4px',
    fontSize: '12px',
    width: '68px',
    outline: 'none',
    cursor: 'pointer',
    WebkitAppearance: 'none',
    appearance: 'none',
    backgroundImage: 'url("data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' width=\'10\' height=\'6\'%3E%3Cpath d=\'M0 0l5 6 5-6z\' fill=\'%23666\'/%3E%3C/svg%3E")',
    backgroundRepeat: 'no-repeat',
    backgroundPosition: 'right 6px center',
    paddingRight: '18px'
  };
  var inputStyle = {
    backgroundColor: 'rgba(56,56,56,0.7)',
    color: '#FFFFFF',
    border: '1px solid rgba(255,255,255,0.1)',
    borderRadius: '6px',
    padding: '6px 8px',
    fontSize: '13px',
    width: '48px',
    textAlign: 'center',
    outline: 'none'
  };
  var thStyle = function (width, align) {
    return {
      padding: '4px 4px',
      textAlign: align || 'center',
      color: 'rgba(255,255,255,0.5)',
      fontWeight: 600,
      fontSize: '11px',
      textTransform: 'uppercase',
      letterSpacing: '0.05em',
      width: width
    };
  };
  return <div style={{
    backgroundColor: '#000000',
    color: '#FFFFFF',
    borderColor: 'rgba(255,255,255,0.05)'
  }} className="p-6 rounded-xl not-prose border">
      {}
      <div className="flex items-center justify-between mb-6">
        <h3 style={{
    color: '#FFFFFF',
    margin: 0
  }} className="text-lg font-serif italic">Marketing Income Calculator</h3>
        <span style={{
    color: 'rgba(255,255,255,0.6)',
    backgroundColor: 'rgba(255,255,255,0.1)',
    border: '1px solid rgba(255,255,255,0.2)'
  }} className="text-xs px-3 py-1 rounded-full font-medium">Interactive</span>
      </div>

      {}
      <div style={{
    backgroundColor: '#383838',
    borderColor: 'rgba(255,255,255,0.05)'
  }} className="rounded-xl border p-4 mb-4">
        <label style={{
    color: 'rgba(255,255,255,0.5)'
  }} className="text-[10px] font-semibold uppercase tracking-wider mb-2 block">Your NFT Level</label>
        <select value={nftLevel} onChange={function (e) {
    setNftLevel(Number(e.target.value));
  }} style={{
    backgroundColor: 'rgba(56,56,56,0.7)',
    color: '#FFFFFF',
    borderColor: 'rgba(255,255,255,0.05)'
  }} className="w-full p-2.5 rounded-lg text-sm font-medium border">
          {NFT_NAMES.map(function (name, i) {
    return <option key={i} value={i + 1}>{'L' + (i + 1) + ' — ' + name + ' (' + fmtUsd(NFT_PRICES[i]) + ') — ' + DEPTH_BY_NFT[i] + ' lvls'}</option>;
  })}
        </select>
      </div>

      {}
      <div style={{
    backgroundColor: '#383838',
    border: '1px solid rgba(255,255,255,0.1)'
  }} className="rounded-xl p-6 text-center mb-4">
        <div style={{
    color: 'rgba(255,255,255,0.6)'
  }} className="text-xs uppercase tracking-wider mb-1">Total Gross Income</div>
        {totalIncome === 0 ? <div style={{
    color: 'rgba(255,255,255,0.4)',
    fontSize: '14px'
  }}>
            Enter sales data below or use a preset
          </div> : <div style={{
    color: '#FFFFFF',
    fontSize: '40px'
  }} className="font-black transition-all duration-300">{'≈ ' + fmtUsd(totalIncome)}</div>}
        <div style={{
    color: 'rgba(255,255,255,0.5)'
  }} className="text-xs mt-1">Based on your custom level inputs below</div>
        {totalIncome > 0 && <div>
            <div style={{
    height: '1px',
    width: '80px',
    backgroundColor: 'rgba(255,255,255,0.1)',
    margin: '14px auto'
  }} />
            <div style={{
    display: 'inline-flex',
    alignItems: 'center',
    gap: '8px',
    backgroundColor: 'rgba(74,222,128,0.08)',
    border: '1px solid rgba(74,222,128,0.15)',
    borderRadius: '9999px',
    padding: '6px 16px'
  }}>
              <span style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '12px'
  }}>75% net income</span>
              <span style={{
    color: '#4ade80',
    fontSize: '14px',
    fontWeight: 800
  }}>{fmtUsd(netIncome)}</span>
            </div>
            <div style={{
    color: 'rgba(255,255,255,0.35)',
    fontSize: '11px',
    marginTop: '10px'
  }}>Regular Balance — withdraw anytime</div>
          </div>}
      </div>

      {}
      <div style={{
    color: 'rgba(255,255,255,0.5)',
    fontSize: '11px',
    marginBottom: '8px'
  }}>
        Quick fill presets:
      </div>
      <div className="flex gap-2 mb-3 flex-wrap">
        <button onClick={function () {
    applyPreset('small', makeSmallPreset());
  }} style={presetBtnStyle('small')}>
          Small Team
        </button>
        <button onClick={function () {
    applyPreset('growing', makeGrowingPreset());
  }} style={presetBtnStyle('growing')}>
          Growing Network
        </button>
        <button onClick={function () {
    applyPreset('clear', makeClearPreset());
  }} style={presetBtnStyle('clear')}>
          Clear All
        </button>
      </div>

      {}
      <div style={{
    overflowX: 'auto'
  }}>
        <table style={{
    minWidth: '400px',
    width: '100%',
    borderCollapse: 'collapse',
    fontSize: '12px',
    tableLayout: 'fixed'
  }}>
          <thead>
            <tr style={{
    backgroundColor: 'rgba(255,255,255,0.08)'
  }}>
              <th style={thStyle('32px', 'center')}>Level</th>
              <th style={thStyle('36px', 'center')}>%</th>
              <th style={thStyle('72px', 'center')}>NFT Price</th>
              <th style={thStyle('52px', 'center')}>Sales</th>
              <th style={thStyle('72px', 'right')}>Income</th>
            </tr>
          </thead>
          <tbody>
            {visibleLevels.map(function (row) {
    var idx = row.level - 1;
    var isLocked = !row.isUnlocked;
    var rowBg = row.sales > 0 ? 'rgba(255,255,255,0.04)' : idx % 2 === 0 ? 'rgba(255,255,255,0.03)' : 'transparent';
    var rowOpacity = isLocked ? 0.3 : 1;
    return <tr key={row.level} style={{
      backgroundColor: rowBg,
      opacity: rowOpacity
    }}>
                  <td style={{
      padding: '4px 4px',
      textAlign: 'center',
      fontWeight: 600
    }}>
                    {row.level}
                    {row.level >= 16 && row.isUnlocked && <span style={{
      color: 'rgba(255,255,255,0.3)',
      fontSize: '9px',
      marginLeft: '4px'
    }}>P2</span>}
                  </td>
                  <td style={{
      padding: '4px 4px',
      textAlign: 'center',
      color: 'rgba(255,255,255,0.5)'
    }}>
                    {row.level === 1 ? <span style={{
      fontSize: '10px',
      color: 'rgba(255,255,255,0.5)'
    }}>Direct Sale</span> : <span>{row.pct + '%'}</span>}
                  </td>
                  <td style={{
      padding: '4px 4px',
      textAlign: 'center'
    }}>
                    {isLocked ? <span style={{
      color: 'rgba(255,255,255,0.4)',
      fontSize: '11px'
    }}>Upgrade NFT</span> : <select value={row.avgPrice} onChange={function (e) {
      updateLevel(idx, {
        avgPrice: Number(e.target.value)
      });
    }} style={selectStyle}>
                        {NFT_PRICES.map(function (p) {
      return <option key={p} value={p}>{'$' + p.toLocaleString()}</option>;
    })}
                      </select>}
                  </td>
                  <td style={{
      padding: '4px 4px',
      textAlign: 'center'
    }}>
                    {isLocked ? <span style={{
      color: 'rgba(255,255,255,0.3)'
    }}>{'\u2014'}</span> : <input type="text" inputMode="numeric" pattern="[0-9]*" value={row.rawSales} placeholder="0" onChange={function (e) {
      var val = e.target.value.replace(/[^0-9]/g, '');
      var num = val === '' ? 0 : parseInt(val, 10);
      updateLevel(idx, {
        sales: num,
        rawSales: val
      });
    }} onFocus={function (e) {
      e.target.select();
    }} style={inputStyle} />}
                  </td>
                  <td style={{
      padding: '4px 4px',
      textAlign: 'right',
      fontWeight: 700
    }}>
                    {row.isUnlocked ? row.sales > 0 ? <span style={{
      color: '#4ade80'
    }}>{fmtUsd(row.income)}</span> : <span style={{
      color: 'rgba(255,255,255,0.3)'
    }}>{'\u2014'}</span> : '\u2014'}
                  </td>
                </tr>;
  })}
          </tbody>
        </table>
        {}
        <div style={{
    backgroundColor: 'rgba(255,255,255,0.08)',
    display: 'flex',
    justifyContent: 'space-between',
    padding: '12px 16px',
    borderRadius: '0 0 12px 12px',
    fontSize: '14px',
    fontWeight: 800
  }}>
          <span style={{
    color: 'rgba(255,255,255,0.6)'
  }}>TOTAL</span>
          <span style={{
    color: '#4ade80'
  }}>{'≈ ' + fmtUsd(totalIncome)}</span>
        </div>
      </div>

      {}
      <div style={{
    color: '#9CA3AF',
    fontSize: '12px',
    marginTop: '8px'
  }}>
        Level 1 earnings come from the Sponsor Bonus (30% new sale / 20% rebuy), not from the tree distribution percentage.
      </div>

      {}
      <button onClick={function () {
    setShowAll(!showAll);
  }} style={{
    color: 'rgba(255,255,255,0.4)',
    fontSize: '11px',
    marginTop: '8px',
    background: 'none',
    border: 'none',
    cursor: 'pointer',
    padding: 0
  }}>
        {showAll ? 'Hide locked levels' : 'Show all 22 levels'}
      </button>
    </div>;
};

<CardGroup cols={2}>
  <Card title="चरण 1 — नई बिक्री" icon="user-plus">
    प्रत्यक्ष स्पॉन्सर NFT बिक्री मूल्य का 30% कमाता है। बार-बार खरीद (रीबाय): 20%।
  </Card>

  <Card title="चरण 2 — समायोजित" icon="arrows-rotate">
    नई बिक्री 20% पर समायोजित होती है। रीबाय 20% रहता है। स्तर 16–22 पूरी तरह से अनलॉक।
  </Card>
</CardGroup>

<Note>
  चरण 1 से चरण 2 में संक्रमण (Sponsor Bonus को 30% से 20% तक समायोजन और ट्री स्तर 16–22 के अनलॉकिंग सहित) DAO गवर्नेंस के माध्यम से निष्पादित किया जाता है, स्वचालित रूप से तारीख से नहीं। DAO वोट के लिए पैरामीटर परिवर्तनों को लागू करने के लिए मानक 30% प्रस्ताव थ्रेशोल्ड और 50% बहुमत की आवश्यकता होती है।
</Note>

RWANFTFI में मार्केटिंग रिवॉर्ड्स तीन स्वतंत्र धाराओं से बने होते हैं जो संयुक्त होकर आपकी कुल आय बनाते हैं:

1. **Sponsor Bonus** — पार्टनर को आमंत्रित करने के लिए प्रत्यक्ष कमीशन (NFT बिक्री मूल्य का 30% चरण 1 / 20% चरण 2)।
2. **Tree Distribution** — आपकी डाउनलाइन संरचना से प्रति-स्तर रिवॉर्ड्स (स्तर 2–22, प्रतिशत गहराई के अनुसार भिन्न होते हैं)।
3. **Matching Bonus** — आपके प्रत्यक्ष पार्टनर्स की आय से 3 स्तरों में द्वितीयक 5% + 5% + 5%।

प्रत्येक धारा की गणना और भुगतान स्मार्ट कॉन्ट्रैक्ट द्वारा हर योग्य NFT खरीद पर स्वतंत्र रूप से किया जाता है।

## ट्री डिस्ट्रिब्यूशन

अपनी डाउनलाइन में हर NFT बिक्री से 22 स्तरों की गहराई तक प्रतिशत कमाएँ:

<AccordionGroup>
  <Accordion title="स्तर 1–6 · प्रवेश परतें" icon="layer-group">
    * स्तर 1: 0%
    * स्तर 2: 1%
    * स्तर 3–4: प्रत्येक 2%
    * स्तर 5–6: प्रत्येक 3%
  </Accordion>

  <Accordion title="स्तर 7–15 · मुख्य कमाई गहराई" icon="chart-simple">
    * स्तर 7–14: प्रत्येक 4% (8 स्तर × 4% = मुख्य आय चालक)
    * स्तर 15: 5% (उच्चतम एकल-स्तर प्रतिशत)
  </Accordion>

  <Accordion title="स्तर 16–22 · चरण 2 विस्तार" icon="unlock">
    * स्तर 16–17: प्रत्येक 2%
    * स्तर 18: 1%
    * स्तर 19–22: प्रत्येक 0.5%

    *चरण 2 में DAO गवर्नेंस वोट के माध्यम से अनलॉक (Q4 2026 के लिए नियोजित)। पूरी गहराई के लिए INFINITY NFT आवश्यक।*
  </Accordion>
</AccordionGroup>

<Info>
  **स्तर 1 = 0% क्यों है?** Tree Distribution और Sponsor Bonus दो अलग-अलग रिवॉर्ड धाराएँ हैं। आपके प्रत्यक्ष आमंत्रण आपकी मार्केटिंग संरचना के स्तर 1 पर बैठते हैं, और आप पहले से ही उनकी NFT खरीद से Sponsor Bonus (चरण 1 में 30%, चरण 2 में 20%) कमाते हैं। दोहरे मुआवज़े को रोकने के लिए Tree Distribution के स्तर 1 को 0% पर सेट किया गया है। Tree Distribution रिवॉर्ड्स स्तर 2 (1%) से आगे शुरू होते हैं — आपकी संरचना में आपके व्यक्तिगत आमंत्रणों से परे की गहरी गतिविधि को कवर करते हैं।
</Info>

<Note>
  **स्तर 1 पर स्पिलओवर सीधे कुछ नहीं कमाता।** जब एक पार्टनर स्पिलओवर के माध्यम से आपके स्तर 1 पर रखा जाता है (आपके अपलाइन का आमंत्रण आपके ट्री में आता है), तो आप 0% Sponsor Bonus कमाते हैं (यह उनके वास्तविक आमंत्रित करने वाले को जाता है) और 0% Tree Distribution (स्तर 1 = 0%)। स्पिलओवर का मूल्य स्तर 2 और गहरे से प्राप्त होता है — जब वे स्पिलओवर पार्टनर अपनी टीमें बनाते हैं, तो उनकी रिक्रूट आपके लिए ट्री डिस्ट्रिब्यूशन रिवॉर्ड्स उत्पन्न करते हैं।
</Note>

## कम्प्रेशन

<Tip>
  **कम्प्रेशन आपके पक्ष में काम करता है।** यदि आपसे ऊपर किसी की आय सीमा समाप्त हो गई है या NFT स्तर अपर्याप्त है, तो उनके रिवॉर्ड्स ऊपर की ओर कम्प्रेस होते हैं — संभावित रूप से आप तक। आपके NFT की मार्केटिंग एक्सेस जितनी गहरी होगी, आप उतने अधिक कम्प्रेस्ड रिवॉर्ड्स पकड़ सकते हैं।
</Tip>

जब आपकी डाउनलाइन में किसी उपयोगकर्ता को छोड़ दिया जाता है (आय सीमा = 0 या NFT स्तर बहुत कम), तो रिवॉर्ड अगले योग्य प्रतिभागी को ऊपर पास हो जाता है। इसे छोड़े गए उपयोगकर्ता के लिए **Lost Income** के रूप में चिह्नित किया जाता है।

## Matching Bonus (5% + 5% + 5%)

3 स्तरों में अपने प्रत्यक्ष पार्टनर्स द्वारा उत्पन्न **NFT-बिक्री आय** का प्रतिशत कमाएँ। Matching Bonus की गणना केवल आपके प्रत्यक्ष पार्टनर को उनकी संरचना के भीतर NFT बिक्री से मिलने वाले मार्केटिंग पेआउट से की जाती है — अन्य आय धाराओं (Frozen Balance रिलीज़, मैन्युअल DA बिक्री, आदि) से नहीं:

<Steps>
  <Step title="स्तर 1 — 5%">
    कम से कम स्तर 4 (ECLIPSE, 275 USDT) NFT आवश्यक है।
  </Step>

  <Step title="स्तर 2 — 5%">
    1,000 USDT की संचयी व्यक्तिगत बिक्री आवश्यक है।
  </Step>

  <Step title="स्तर 3 — 5%">
    3,000 USDT की संचयी व्यक्तिगत बिक्री आवश्यक है।
  </Step>
</Steps>

<Info>
  **"संचयी व्यक्तिगत बिक्री" का क्या अर्थ है:** यह आपके प्रत्यक्ष आमंत्रित लोगों द्वारा की गई सभी NFT खरीदों का चलते जीवनकाल कुल है। उसी पार्टनर द्वारा बार-बार की गई खरीद (रीबाय, अपग्रेड) कुल में गिनी जाती हैं, और विभिन्न पार्टनर्स को बिक्री एक साथ संचित होती है। उदाहरण के लिए, यदि एक पार्टनर 1,000 USDT प्रत्येक के तीन NFT खरीदता है, तो आपका संचयी कुल 3,000 USDT है — Matching Bonus स्तर 3 अनलॉक करता है। एक बार जब थ्रेशोल्ड पहुँच जाता है, तो वह Matching Bonus स्तर **स्थायी रूप से सक्रिय** होता है और रीसेट नहीं होता।
</Info>

<IncomeCalculator />
