Skip to content

securecrt commands manager e komut listesi eklemek

ağ yönetiminde ssh client uygulaması olarak securecrt oldukça popülerdir. eğer sizde securecrt kullanıyor ve kullanmayı planlıyorsanız network yönetimi sırasında commands manager aracı oldukça işinize yarayacaktır.

commands manager altıda istediğiniz komut tanımlamalarını yapabiliyor ve tek tıkla bu komutu aktif oturuma gönderebilirsiniz.. tasarım sırasında ağaç yapısı desteklemesi sayesinde kategorize edilmiş olarak komutları ekleyebilirsiniz…

tüm ihtiyacınız olabilecek komutları tek tek eklemez biraz yorucu olabilir.. bu noktada hazırladığım python scripti paylaşmacağım.. öncelikle ekleyeceğimiz komutları aşagıdaki formatta excel dosyasında hazırlıyoruz. vendor ve category olarak bir ağaç yapısı tasarladık.

commands.xlsx

Vendor Category Command
nokia bgp show router bgp summary
nokia bgp show router bgp neighbor
nokia switch show ethernet-service port 1/3
huawei display ip interface brief
zte show ip interface brief loopback0

xml_create.py

import pandas as pd
import xml.etree.ElementTree as ET
from xml.dom import minidom

def create_securecrt_xml(excel_file_path, output_xml_path):
    # Excel dosyasını oku ve NaN değerleri boş string ile değiştir
    df = pd.read_excel(excel_file_path).fillna("")
    
    # Ana XML yapısını oluştur
    root = ET.Element("VanDyke", version="3.0")
    commands_root = ET.SubElement(root, "key", name="Commands")
    
    # Vendor gruplarına göre işle
    for vendor in df["Vendor"].unique():
        if not vendor:  # Vendor boşsa atla
            continue
            
        vendor_key = ET.SubElement(commands_root, "key", name=str(vendor))
        
        # Kategoriye göre komutları grupla
        vendor_data = df[df["Vendor"] == vendor]
        for category in vendor_data["Category"].unique():
            if pd.isna(category) or category == "":  # Kategori boşsa genel komutlara ekle
                continue
                
            category_data = vendor_data[vendor_data["Category"] == category]
            category_key = ET.SubElement(vendor_key, "key", name=str(category))
            commands_key = ET.SubElement(category_key, "key", name="__Commands__")
            default_array = ET.SubElement(commands_key, "array", name="Default")
            
            # Komutları ekle
            for _, row in category_data.iterrows():
                if not row["Command"] or pd.isna(row["Command"]):
                    continue
                command_str = f"SEND,{row['Command']},{row['Command']},,,0,1,{row['Command']},"
                ET.SubElement(default_array, "string").text = command_str
        
        # Vendor için genel komutlar (kategori yoksa)
        general_commands = vendor_data[vendor_data["Category"].isna() | (vendor_data["Category"] == "")]
        if not general_commands.empty:
            commands_key = ET.SubElement(vendor_key, "key", name="__Commands__")
            default_array = ET.SubElement(commands_key, "array", name="Default")
            for _, row in general_commands.iterrows():
                if not row["Command"] or pd.isna(row["Command"]):
                    continue
                command_str = f"SEND,{row['Command']},{row['Command']},,,0,1,{row['Command']},"
                ET.SubElement(default_array, "string").text = command_str
    
    # XML'i düzgün formatla ve kaydet
    xml_str = ET.tostring(root, encoding="utf-8")
    dom = minidom.parseString(xml_str)
    # toprettyxml encoding="utf-8" belirtilirse bytes döndürür, biz manuel yazıyoruz
    body = dom.toprettyxml(indent="\t")
    # toprettyxml'in ürettiği ilk satırı (<?xml ...?>) çıkar, yerine istediğimizin koy
    lines = body.splitlines()
    lines[0] = '<?xml version="1.0" encoding="UTF-8"?>'
    # Boş satırları temizle (toprettyxml bazen ekstra boş satır ekler)
    clean_lines = [l for l in lines if l.strip() != ""]
    pretty_xml = "\n".join(clean_lines) + "\n"
    
    with open(output_xml_path, "w", encoding="utf-8") as f:
        f.write(pretty_xml)

if __name__ == "__main__":
    excel_file_path = "commands.xlsx"  # Excel dosyası yolu
    output_xml_path = "securecrt_commands.xml"  # Çıktı XML dosyası yolu
    create_securecrt_xml(excel_file_path, output_xml_path)
    print(f"XML dosyası oluşturuldu: {output_xml_path}")

excel ve python dosyasını ayını dizinde olacak şekilde çalıştırırsak aynı dizinde securecrt_commands.xml adından bir xml dosyası oluşturulacaktır.

<?xml version="1.0" encoding="UTF-8"?>
<VanDyke version="3.0">
	<key name="Commands">
		<key name="nokia">
			<key name="bgp">
				<key name="__Commands__">
					<array name="Default">
						<string>SEND,show router bgp summary,show router bgp summary,,,0,1,show router bgp summary,</string>
						<string>SEND,show router bgp neighbor,show router bgp neighbor,,,0,1,show router bgp neighbor,</string>
					</array>
				</key>
			</key>
			<key name="switch">
				<key name="__Commands__">
					<array name="Default">
						<string>SEND,show ethernet-service port 1/3,show ethernet-service port 1/3,,,0,1,show ethernet-service port 1/3,</string>
					</array>
				</key>
			</key>
		</key>
		<key name="huawei">
			<key name="__Commands__">
				<array name="Default">
					<string>SEND,display ip interface brief,display ip interface brief,,,0,1,display ip interface brief,</string>
				</array>
			</key>
		</key>
		<key name="zte">
			<key name="__Commands__">
				<array name="Default">
					<string>SEND,show ip interface brief loopback0,show ip interface brief loopback0,,,0,1,show ip interface brief loopback0,</string>
				</array>
			</key>
		</key>
	</key>
</VanDyke>

xml dosyası oluşturktan sonra aşagıdaki adımları izlerek xml dosyasını securecrt içine import edeceğiz.

github deposu için

https://github.com/ferhatcicek/securecrt-commands-manager-xml-create

zte routerlarda aktif alarmları izleme

alarmları izlemek için kullanılacak en temel komut “show router current

router_zte_test(config)#show alarm current 
An alarm 612603 ID 109847 level 2 occurred at 16:56:23 02-08-2026 sent by router_zte_test PFU-1/4/0 %PORT% Receiving Optical Power(dBm) threshold crossed  (Interface:sat_xgei-1/4/0/10,lane = NA). 15min low alarm forecast occur. Warn Low thres is: -16.9900, current value is: -18.7289@Satellite-1
An alarm 612603 ID 109818 level 2 occurred at 16:52:31 02-08-2026 sent by router_zte_test PFU-1/5/0 %PORT% Receiving Optical Power(dBm) threshold crossed  (Interface:sat_xgei-1/5/0/7,lane = NA). 15min low alarm occur. Low thres is: -19.0000, current value is: -26.3827@Satellite-1
An alarm 612615 ID 108432 level 5 occurred at 15:51:12 02-05-2026 sent by router_zte_test PFU-1/1/0 %PORT% Missing Optical Module!  (sat_xgei-1/1/0/2: Optical Module is not installed)@Satellite-1
An alarm 612615 ID 108384 level 5 occurred at 15:43:27 02-05-2026 sent by router_zte_test PFU-1/1/0 %PORT% Missing Optical Module!  (sat_xgei-1/1/0/3: Optical Module is not installed)@Satellite-1
An alarm 612615 ID 108362 level 5 occurred at 15:36:57 02-05-2026 sent by router_zte_test PFU-1/1/0 %PORT% Missing Optical Module!  (sat_xgei-1/1/0/1: Optical Module is not installed)@Satellite-1
An alarm 50901 ID 108348 level 2 occurred at 15:36:26 02-05-2026 sent by router_zte_test MPU-0/4/0 %LACP% LACP interface active status.  The interface (index = 8309, name = xgei-0/1/0/19) turns into INACTIVE. (Reason:Negotiation failed or cannot meet the conditions)
An alarm 612615 ID 85382 level 5 occurred at 13:36:06 12-16-2025 sent by router_zte_test PFU-2/6/0 %PORT% Missing Optical Module!  (sat_xgei-2/6/0/6: Optical Module is not installed)@Satellite-2
An alarm 612615 ID 85376 level 5 occurred at 13:36:02 12-16-2025 sent by router_zte_test PFU-2/6/0 %PORT% Missing Optical Module!  (sat_xgei-2/6/0/7: Optical Module is not installed)@Satellite-2
An alarm 612615 ID 85374 level 5 occurred at 13:35:58 12-16-2025 sent by router_zte_test PFU-2/6/0 %PORT% Missing Optical Module!  (sat_xgei-2/6/0/8: Optical Module is not installed)@Satellite-2
An alarm 612615 ID 85372 level 5 occurred at 13:35:54 12-16-2025 sent by router_zte_test PFU-2/6/0 %PORT% Missing Optical Module!  (sat_xgei-2/6/0/9: Optical Module is not installed)@Satellite-2

ZTE ZXR routerlarda arayüz kontrolleri

network ekipmanlarında en temel kontrol arayüz kontrolleridir. zte zxr serisi routerlarda bir arayüz kontrol yapmak için “show opticalinfo” komutunu kullanabiliriz.. komutu tek başına kullanamıyoruz. test yaptığımız router üzerindeki parametreler aşagıdaki gibi.

zte_router#show opticalinfo ?
PIU- Board type
brief Show optical brief information
ptp- Ptp Gigabit eth interface
sat_xgei- Satellite node xgigabit ethernet interface
xgei- XGigabit ethernet interface

brief parametresini kulandığımızda aşagıdaki bir çıktı ile karşılaşıyoruz. bırada router üzeriindeki portların RX, TX bilgisi görülebilmektedir.

zte_router#show opticalinfo brief
Interface Type Wavelength RxPower(dBm) TxPower(dBm) Status Intensity(Rx)
xgei-0/0/0/1 10G-10km-SFP+ 1310nm -3.7/[-14.4,0.5] -2.0/[-8.2,1.5] Normal Normal
xgei-0/0/0/2 1G-10km-SFP 1310nm -40.0/[-17.0,-5.0] N/A/[-9.0,-3.0] Unknown Unknown
xgei-0/0/0/3 10G-10km-SFP+ 1310nm -2.9/[-14.4,0.5] -2.5/[-8.2,1.5] Normal Normal
xgei-0/0/0/4 10G-10km-SFP+ 1310nm -1.4/[-14.4,0.5] -3.2/[-8.2,1.5] Normal Normal
xgei-0/0/0/5 10G-10km-SFP+ 1310nm -6.7/[-14.4,0.5] -1.7/[-8.2,1.5] Normal Normal
xgei-0/0/0/6 offline
xgei-0/0/0/7 offline
xgei-0/0/0/8 offline
xgei-0/0/0/9 offline
xgei-0/0/0/10 offline
xgei-0/0/0/11 offline
xgei-0/0/0/12 offline
xgei-0/0/0/13 10G-10km-SFP+ 1310nm -3.6/[-14.4,0.5] -2.7/[-8.2,1.5] Normal Normal
xgei-0/0/0/14 10G-10km-SFP+ 1310nm -2.4/[-14.4,0.5] -1.6/[-8.2,1.5] Normal Normal
xgei-0/0/0/15 10G-10km-SFP+ 1310nm -3.7/[-14.4,0.5] -1.3/[-8.2,1.5] Normal Normal
xgei-0/0/0/16 10G-10km-SFP+ 1310nm -3.3/[-14.4,0.5] -1.3/[-8.2,1.5] Normal Normal
xgei-0/0/0/17 10G-10km-SFP+ 1310nm -11.0/[-14.4,0.5] -2.5/[-8.2,1.5] Normal Normal
xgei-0/0/0/18 10G-10km-SFP+ 1310nm -2.2/[-14.4,0.5] -1.7/[-8.2,1.5] Normal Normal
xgei-0/0/0/19 10G-10km-SFP+ 1310nm -2.5/[-14.4,0.5] -2.1/[-8.2,1.5] Normal Normal
xgei-0/0/0/20 10G-10km-SFP+ 1310nm -1.4/[-14.4,0.5] -2.2/[-8.2,1.5] Normal Normal

router üzerinde eğer satellite kullanıyorsanız şu anki test ettiğimiz routerda değerlerini göremiyoruz. bunun için ilave parametre ihtiyacu bulunuyor. örnek aşagıdaki gibidir.

zte_router#show opticalinfo brief satellite 1
Interface Type Wavelength RxPower(dBm) TxPower(dBm) Status
sat_xgei-1/1/0/1 offline
sat_xgei-1/1/0/2 offline
sat_xgei-1/1/0/3 offline
sat_xgei-1/1/0/4 offline
sat_xgei-1/1/0/5 offline
sat_xgei-1/1/0/6 offline
sat_xgei-1/1/0/7 offline
sat_xgei-1/1/0/8 offline
sat_xgei-1/4/0/1 1G-10km-SFP 1310nm N/A/[-23.0,-2.5] N/A/[-11.0,-2.0] Unknown
sat_xgei-1/4/0/2 1G-10km-SFP 1310nm N/A/[-23.0,-2.5] N/A/[-11.0,-2.0] Unknown
sat_xgei-1/4/0/3 1G-10km-SFP 1310nm N/A/[-23.0,-2.5] N/A/[-11.0,-2.0] Unknown
sat_xgei-1/4/0/4 1G-10km-SFP 1310nm N/A/[-23.0,-2.5] N/A/[-11.0,-2.0] Unknown
sat_xgei-1/4/0/5 1G-10km-SFP 1310nm N/A/[-23.0,-2.5] N/A/[-11.0,-2.0] Unknown
sat_xgei-1/4/0/6 1G-10km-SFP 1310nm N/A/[-23.0,-2.5] N/A/[-11.0,-2.0] Unknown
sat_xgei-1/4/0/7 offline
sat_xgei-1/4/0/8 offline
sat_xgei-1/4/0/9 offline
sat_xgei-1/4/0/10 offline

tek bir arayüzü incelemek istersekopticalinfo dan sonra dorudan arayüzün tam açılımını yazıyorum… bu çıktıda RX, TX değerlerinin yapında sıcaklık , akım, gerilim, optik modül bilgisi gibi verilerede ulaşılabilmektedir.

zte_router#show opticalinfo xgei-0/0/0/1
xgei-0/0/0/1
The optical module is online
Transceiver Type         : SFP+
Connector Type Code      : LC
Transceiver Mode         : smf
Directionality           : Normal
SONET Compliance Codes   : no compliance
Ethernet Compliance Codes: 10GBase-LR
Transfer Distance:9/125(Smf) um fiber 10000 (m)
                 50/125(Om2) um fiber 0 (m)
                 50/125(Om3) um fiber 0 (m)
               62.5/125(Om1) um fiber 0 (m)
                 50/125(Om4) um fiber 0 (m)
Laser TX Wavelength: 1310 nm
Laser RX Wavelength: 1310 nm
Measured RX Input  Power: -3.8 dBm
Measured TX Output Power: -2.0 dBm
Measured TX Bias Current: 30.9 mA
Measured Transceiver Temperature: 30.7 degree(s) Celsius
Supply Voltage 1: 3.3 V
Supply Voltage 2: N/A
Receiver Sensitivity    : -14.4 dBm
Receiver Overload       : 0.5 dBm
TX Power Range          : N/A
Default RX Power PreHighAlarm Thresholds: 0.5 dBm
Default RX Power PreLowAlarm Thresholds: -14.4 dBm
Default TX Power PreHighAlarm Thresholds: 1.5 dBm
Default TX Power PreLowAlarm Thresholds: -8.2 dBm
Laser RX Intensity: Normal
Vendor Name:  WTD             
Vendor PN  :  RTXM228-401     
Vendor Rev :  1.0 
Vendor SN  :  ZTE24250014600
Authentication     : ZTE
AuthenticationCode : 0xa101
ProductSn          : 000000
ProductDate        : 2024-11-07

excel de gereksiz sütun temizliği

excel olarak aldığımız bir rapor olduğunu varsayalım. bir sütundaki değerler tüm satırlarda aynı veriye sahipse bu sütun veri incelemede genelde gereksiz olabilir… bu şekilde çok fazla sütun varsa bunlardan kurtulmalmak için aşagdaıki bir kaç satırlık python kodunu kullanabiliriz.

NSP den aldığım örnek bir raporda 203 sutun mevcuttu. Bu kod sonrası 33 sutuna düşmüş oldu.

import pandas as pd

# Excel dosyasını oku
df = pd.read_excel("liste.xlsx")

# Tüm satırlarda aynı olan sütunları bul ve sil
df = df.loc[:, df.nunique() > 1]

# Sonucu kaydet
df.to_excel("liste_temiz.xlsx", index=False)

lldp raporunda temizlik

networkteki routerlar üzerinde lldp raporları aldığınızı düşünün.. tüm cihazlardan alınan raporlar birleştirildiğinde baslangic ve bitis router bilgileri yer değişmiş olsada bir mükerrerlik olacaktır..

elimizdeki tablo kabaca ağıdaki şekilde olacaktır…

idbaslangic_ne_ismibaslangic_interface_ipbitis_ne_ismibitis_interface_ip
1router_a10.10.10.1router_c10.10.10.2
2router_c10.10.10.2router_a10.10.10.1
3router_b10.10.10.3router_d10.10.10.4
4router_d10.10.10.4router_b10.10.10.3

sqlite de bu durumdaki linkleri tespit etmek için aşagıdaki sorguyu

SELECT a.id AS id1, b.id AS id2,
       a.baslangic_ne_ismi, a.baslangic_interface_ip,
       a.bitis_ne_ismi, a.bitis_interface_ip
FROM network_link a
JOIN network_link b
  ON a.baslangic_ne_ismi = b.bitis_ne_ismi
 AND a.baslangic_interface_ip = b.bitis_interface_ip
 AND a.bitis_ne_ismi = b.baslangic_ne_ismi
 AND a.bitis_interface_ip = b.baslangic_interface_ip
 AND a.id < b.id;

aynı olduğunu düşünülen verilerden yüksek idli olan silmek için ise aşagıdaki sorguyu kullanabilirsiniz.

DELETE FROM network_link
WHERE id IN (
    SELECT b.id
    FROM network_link a
    JOIN network_link b
      ON a.baslangic_ne_ismi = b.bitis_ne_ismi
     AND a.baslangic_interface_ip = b.bitis_interface_ip
     AND a.bitis_ne_ismi = b.baslangic_ne_ismi
     AND a.bitis_interface_ip = b.baslangic_interface_ip
     AND a.id < b.id
);

sonucta elde edeceğimiz tablo aşagıdaki şekilde olacaktır.

idbaslangic_ne_ismibaslangic_interface_ipbitis_ne_ismibitis_interface_ip
1router_a10.10.10.1router_c10.10.10.2
3router_b10.10.10.3router_d10.10.10.4

Excel’de hücreler içindeki boş satırları temizlemek

Bunun için aşagıdaki adımlar izlenebilir.. en kolay yöntemi budur.

  • Tüm hücreleri seç (CTRL+A veya sadece ilgili sütunu seç).
  • CTRL + H tuşlarına bas (Bul ve Değiştir).
  • “Bul” kısmına: CTRL tuşuna basılı tutarak J tuşuna bas → satır sonu karakteri (görünmez).
  • “Değiştir” kısmına: Hiçbir şey yazma (boş bırak).
  • Tümünü Değiştir butonuna tıkla.

python ile youtube dan oynatma listesini mp3 olarak indirmek

python ile youtube dan mp3 indirmek konu yazı sonrası tek tek indirmek yerine playlisti tek bir sefer nasıl indirebiliriz sorusu geldi..

bunu takibi yapabiliriz.. ufak bir değişiklik ile oynatma listesini indirebiliriz.. kodumuz aşagıdaki şekilde olacaktır.

import yt_dlp

def oynatma_listesi_indir(oynatma_listesi_adresi, output_folder="mp3_klasor"):
    options = {
        'format': 'bestaudio/best',
        'outtmpl': f'{output_folder}/%(title)s.%(ext)s',  
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'mp3',
            'preferredquality': '192',
        }],
        'noplaylist': True  
    }

    with yt_dlp.YoutubeDL(options) as ydl:
        ydl.download([oynatma_listesi_adresi])

# Kullanım
oynatma_listesi_adresi = "https://www.youtube.com/playlist?list=<oynatma_listesi_id"
oynatma_listesi_indir(oynatma_listesi_adresi, output_folder="mp3_klasor")

burada dikkat edilmesi gereken nokta listedeki tüm videoların aktif olmasıdır. kodda hata denetimi yapmadığımız için herhangi bir video silindiyse kod o noktada kesilecektir.

python ile youtube dan mp3 indirmek

bir çoğumuzun hayatından artık mp3 dosyaları çıktı. artık sevidğimiz müzikleri ya online dinliyoruz yada tercih ettiğimiz bir uygulamanın offline modunu kullanıyoruz.

benim gibi bir kaç mp3 indirmek isteyen çıkabilir.

bunun için reklamlarla dolu video dosya içerisinden ses dosyasını kaydetmenize sağlayan bir sürü site var.. isterseniz bunlardan birini kullanabillirsiniz.. ama ben bunlarla uğraşmak istemediğim için basit bir uygulama yapmak istedim..

kodu tabiki pythonda yazacağız.. kod sırasında bize yardımcı olacak bir çok modül mevcut. bunların bir çoğu ffmpeg kullanıyor ve pc nizde kurulu olmasını şart koşuyor.

bu noktada yt_dlp yardımımıza yetişiyor. denediğim modüller arasında en sağlık çalışanı yt_dlp oldu.

şimdi adresini bildiğimiz bir youttube url için yt_dlp modulunu kullanarak mp3 dosyasını nasıl elde ederiz basit bir örnek yapalım.

import yt_dlp

def muzik_dosyasi_indir(video_url, output_folder="mp3_klasor"):
    options = {
        'format': 'bestaudio/best',
        'outtmpl': f'{output_folder}/%(title)s.%(ext)s',
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'mp3',
            'preferredquality': '192',
        }],
        'noplaylist': True
    }

    with yt_dlp.YoutubeDL(options) as ydl:
        ydl.download([video_url])

video_url = "https://www.youtube.com/watch?v=<video_id>"
muzik_dosyasi_indir(video_url, output_folder="mp3_klasor")

temel kodumuz yukarıdaki gibi olacaktır… mp3 olarak indirmek istediğiniz bir video dosyasının idsini koddaki <video_id> ile değiştirir ve kodu çalıştırsanız aşagıdaki gibi çıktı ile çarşılacaksınız.

[youtube] Extracting URL: https://www.youtube.com/watch?v=8umGN3KiGY4
[youtube] 8umGN3KiGY4: Downloading webpage
[youtube] 8umGN3KiGY4: Downloading tv client config
[youtube] 8umGN3KiGY4: Downloading player e7567ecf
[youtube] 8umGN3KiGY4: Downloading tv player API JSON
[youtube] 8umGN3KiGY4: Downloading ios player API JSON
[youtube] 8umGN3KiGY4: Downloading m3u8 information
[info] 8umGN3KiGY4: Downloading 1 format(s): 251
[download] Destination: mp3_klasor\Passenger - Let Her Go.webm
[download] 100% of    4.05MiB in 00:00:00 at 8.79MiB/s
[ExtractAudio] Destination: mp3_klasor\Passenger - Let Her Go.mp3
Deleting original file mp3_klasor\Passenger - Let Her Go.webm (pass -k to keep)

Nokia – Default Network QoS Policy DSCP to Forwarding Class Mappings  

Ingress DSCPForwarding Class
dscp-namedscp-value (binary – decimal)FC IDNameLabelProfile State
Default0Best-EffortbeOut
ef101110 – 465ExpeditedefIn
nc1110000 – 486High-1h1In
nc2111000 – 567Network ControlncIn
af11001010 – 102AssuredafIn
af12001100 – 122AssuredafOut
af13001110 – 142AssuredafOut
af21010010 – 183Low-1l1In
af22010100 – 203Low-1l1Out
af23010110 – 223Low-1l1Out
af31011010 – 263Low-1l1In
af32011100 – 283Low-1l1Out
af33011110 – 303Low-1l1Out
af41100010 – 344High-2h2In
af42100100 – 364High-2h2Out
af43100110 – 384High-2h2Out

Nokia – Default Network QoS Policy Egress Marking

FC-IDFC NameFC LabelDiffServ NameEgress DSCP MarkingEgress LSP EXP Marking
In-Profile NameOut-of- Profile NameIn-ProfileOut-of- Profile
7Network ControlncNC2nc2111000 – 56nc2111000 – 56111 – 7111 – 7
6High-1h1NC1nc1110000 – 48nc1110000 – 48110 – 6110 – 6
5ExpeditedefEFef101110 – 46ef101110 – 46101 – 5101 – 5
4High-2h2AF4af41100010 – 34af42100100 – 36100 – 4100 – 4
3Low-1l1AF2af21010010 – 18af22010100 – 20011 – 3010 – 2
2AssuredafAF1af11001010 – 10af12001100 – 12011 – 3010 – 2
1Low-2l2CS1cs1001000 – 8cs1001000 – 8001 – 1001 – 1
0Best EffortbeBEbe000000 – 0be000000 – 0000 – 0000 – 0
Back To Top