callsign and propagation

This commit is contained in:
coulisse 2023-12-02 09:29:26 +01:00
parent b0d6b8051b
commit 2ef48967b5
28 changed files with 2187 additions and 387 deletions

View File

@ -24,5 +24,5 @@ keywords:
- dxcluster - dxcluster
- spiderweb - spiderweb
license: GPL-3.0 license: GPL-3.0
version: v2.4.5.72 version: v2.5
date-released: 2023-11-18 date-released: 2023-12-02

View File

@ -9,7 +9,7 @@
[![CodeFactor](https://www.codefactor.io/repository/github/coulisse/spiderweb/badge)](https://www.codefactor.io/repository/github/coulisse/spiderweb) [![CodeFactor](https://www.codefactor.io/repository/github/coulisse/spiderweb/badge)](https://www.codefactor.io/repository/github/coulisse/spiderweb)
- **Release:** v2.4.5.72 - **Release:** v2.5
- **Author:** Corrado Gerbaldo - [IU1BOW](https://www.qrz.com/db/IU1BOW) - **Author:** Corrado Gerbaldo - [IU1BOW](https://www.qrz.com/db/IU1BOW)
- **Mail:** <corrado.gerbaldo@gmail.com> - **Mail:** <corrado.gerbaldo@gmail.com>
- **Licensing:** Gpl V3.0 see [LICENSE](LICENSE) file. - **Licensing:** Gpl V3.0 see [LICENSE](LICENSE) file.
@ -27,6 +27,9 @@ For this application, I've used:
- **flag-icon-css** [https://github.com/lipis/flag-icon-css](https://github.com/lipis/flag-icon-css) I used it to show the country flags - **flag-icon-css** [https://github.com/lipis/flag-icon-css](https://github.com/lipis/flag-icon-css) I used it to show the country flags
- **ng3k.com** [ng3k.com](http://ng3k.com/misc/adxo.html) I used to get information about "Announced Dx Operations". Thanks to Bill/NG3K !!! - **ng3k.com** [ng3k.com](http://ng3k.com/misc/adxo.html) I used to get information about "Announced Dx Operations". Thanks to Bill/NG3K !!!
- **silso** [sidc.be/silso](https://sidc.be/silso/) used to show propagation trend in "Chart & stats" section - **silso** [sidc.be/silso](https://sidc.be/silso/) used to show propagation trend in "Chart & stats" section
- **hamqsl** [www.hamqsl.com/solar.html](https://www.hamqsl.com/solar.html/) used to show solar and band conditions
- **kc2g** [prop.kc2g.com](https://prop.kc2g.com/) used to show MUF map
You can find my web site at [https://www.iu1bow.it](https://www.i1bow.it) You can find my web site at [https://www.iu1bow.it](https://www.i1bow.it)
@ -221,11 +224,11 @@ This application is designed for desktop and mobile phone. It is a [PWA](https:/
### API ### API
**Spot list** **Spot list**
You can retrieve last spots calling "**/spotlist**"; For example [www.iu1bow.com/spotlist](https://www.iu1bow.com/spotlist) You can retrieve last spots calling "**/spotlist**"; For example [www.iu1bow.it/spotlist](https://www.iu1bow.it/spotlist)
**Country of a callsign** **Country of a callsign**
You can retrive some information about a callsign with **callsign**; for example: [www.iu1bow.com/callsign?c=IU1BOW](https://www.iu1bow.com/callsign?c=IU1BOW) You can retrive some information about a callsign with **callsign**; for example: [www.iu1bow.it/callsign?c=IU1BOW](https://www.iu1bow.it/callsign?c=IU1BOW)
### Development ### Development

View File

@ -21,6 +21,7 @@
"menu": { "menu": {
"menu_list": [ "menu_list": [
{"label":"Charts & stats", "link": "/plots.html", "external": false}, {"label":"Charts & stats", "link": "/plots.html", "external": false},
{"label": "Propagation", "link": "/propagation.html", "external": false},
{"label":"Sources", "link": "https://github.com/coulisse/spiderweb/" , "external": true}, {"label":"Sources", "link": "https://github.com/coulisse/spiderweb/" , "external": true},
{"label":"Cookies", "link": "/cookies.html", "external": false}, {"label":"Cookies", "link": "/cookies.html", "external": false},
{"label":"Privacy", "link": "/privacy.html", "external": false} {"label":"Privacy", "link": "/privacy.html", "external": false}

View File

@ -44,7 +44,7 @@
"max": 50312.9 "max": 50312.9
}, },
{ {
"min": 50314.0, "min": 50313.1,
"max": 50499.9 "max": 50499.9
}, },
{ {
@ -99,6 +99,7 @@
"min": 47087000, "min": 47087000,
"max": 47089000 "max": 47089000
} }
] ]
}, },
{ {
@ -148,10 +149,6 @@
"min": 28180.0, "min": 28180.0,
"max": 28180.0 "max": 28180.0
}, },
{
"min": 50313.0,
"max": 50313.9
},
{ {
"min": 50500.0, "min": 50500.0,
"max": 51000.0 "max": 51000.0
@ -199,6 +196,10 @@
}, },
{ {
"min": 50100, "min": 50100,
"max": 50312.9
},
{
"min": 50313.1,
"max": 50500 "max": 50500
}, },
{ {
@ -250,6 +251,96 @@
"max": 47089000 "max": 47089000
} }
] ]
},
{
"id": "digi-ft8",
"freq": [
{
"min": 1840.0,
"max": 1841.0
},
{
"min": 3573.0,
"max": 3574.0
},
{
"min": 7074.0,
"max": 7075.0
},
{
"min": 10136.0,
"max": 10137.0
},
{
"min": 14074.0,
"max": 14075.0
},
{
"min": 18100.0,
"max": 18101.0
},
{
"min": 21074.0,
"max": 21075.0
},
{
"min": 24915.0,
"max": 24916.0
},
{
"min": 28074.0,
"max": 28075.0
},
{
"min": 50313.0,
"max": 50314.0
}
]
},
{
"id": "digi-ft4",
"freq": [
{
"min": 3568.0,
"max": 3569.0
},
{
"min": 3575.0,
"max": 3576.0
},
{
"min": 7047.5,
"max": 7048.5
},
{
"min": 10140.0,
"max": 10141.0
},
{
"min": 14080.0,
"max": 14081.0
},
{
"min": 18104.0,
"max": 18105.0
},
{
"min": 21140.0,
"max": 21141.0
},
{
"min": 24919.0,
"max": 24920.0
},
{
"min": 28180.0,
"max": 28181.0
},
{
"min": 50318.0,
"max": 50319.0
}
]
} }
] ]
} }

View File

@ -1 +1 @@
v2.4.5.72 v2.5

View File

@ -1,15 +1,20 @@
### Change log ### Change log
Date: 18/11/2023 Date: 02/12/2023
Release: v2.4.5.72 Release: v2.5
- security issue #46 - security issue #46.
- csp report - csp report
- Added esclusion for FT4 and FT8. Thanks to HB9VVQ
- Added filter on dx spot callsings. Thanks to HB9VVQ. Issue [#39](https://github.com/coulisse/spiderweb/issues/39).
- Sanitized callsign input
- Added propagation page with MUF Map. Issue [#27](https://github.com/coulisse/spiderweb/issues/27). Thanks to Paul Herman and Andrew Rodland
___ ___
Date: 12/11/2023 Date: 12/11/2023
Release: v2.4.5.1 Release: v2.4.5.1
- managed telnet password - managed telnet password
- issue #34 - issue [#34](https://github.com/coulisse/spiderweb/issues/34)
- issue #38 - issue [#38](https://github.com/coulisse/spiderweb/issues/38)
___ ___
Date: 11/11/2023 Date: 11/11/2023
@ -33,7 +38,6 @@ Release: v2.4.4
___ ___
Date: 11/02/2023 Date: 11/02/2023
>>>>>>> staging
Release: v2.4.2 Release: v2.4.2
- changed cache-control header - changed cache-control header
- fixed Layout scrolling (SEO) - fixed Layout scrolling (SEO)

View File

@ -222,10 +222,6 @@ def menu_input_entry(entry, new_entry):
while external != "y" and external != "n": while external != "y" and external != "n":
external = str(user_input("open link external [y/n]: ")).lower() external = str(user_input("open link external [y/n]: ")).lower()
# if external == 'y':
# external = True
# else:
# external = False
external = is_external(external) external = is_external(external)
entry["label"] = label entry["label"] = label

View File

@ -25,4 +25,5 @@ tzdata==2023.3
urllib3==2.0.7 urllib3==2.0.7
Werkzeug==3.0.1 Werkzeug==3.0.1
WTForms==3.1.1 WTForms==3.1.1
xmltodict==0.13.0
xxhash==3.4.1 xxhash==3.4.1

1
scripts/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*report.html

View File

@ -138,7 +138,7 @@ if [ "$1" == "-r" ]; then
sed -i 's/mysql-connector-python==8.0.31/mysql-connector-python>=8.0.31/' ../requirements.txt sed -i 's/mysql-connector-python==8.0.31/mysql-connector-python>=8.0.31/' ../requirements.txt
sed -i 's/mysql-connector-python==8.2.0/mysql-connector-python>=8.2.0/' ../requirements.txt sed -i 's/mysql-connector-python==8.2.0/mysql-connector-python>=8.2.0/' ../requirements.txt
if ! sed -i '13,20s/level=DEBUG/level=INFO/g' ${app_ini}; then if ! sed -i '7,25s/level=DEBUG/level=INFO/g' ${app_ini}; then
echo 'ERROR settimg loglevel=INFO ' echo 'ERROR settimg loglevel=INFO '
exit 12 exit 12
fi fi
@ -148,7 +148,7 @@ if [ "$1" == "-d" ]; then
echo 'creating DEBUG application' echo 'creating DEBUG application'
html_change_references -d html_change_references -d
if ! sed -i '13,20s/level=INFO/level=DEBUG/g' ${app_ini}; then if ! sed -i '7,25s/level=INFO/level=DEBUG/g' ${app_ini}; then
echo 'ERROR settimg loglevel=DEBUG ' echo 'ERROR settimg loglevel=DEBUG '
exit 12 exit 12
fi fi
@ -169,12 +169,12 @@ echo 'get version from version.txt'
#if ! ver=$(git tag|tail -1) #if ! ver=$(git tag|tail -1)
if ! ver=$(head -1 ../cfg/version.txt) if ! ver=$(head -1 ../cfg/version.txt)
then then
echo 'ERROR on get version from git' echo 'ERROR on get version'
exit 10 exit 10
fi fi
if [ ${ver} == "" ]; then if [ ${ver} == "" ]; then
echo 'ERROR git version is empty' echo 'ERROR version is empty'
exit 20 exit 20
fi fi
echo 'version: '${ver} echo 'version: '${ver}
@ -275,6 +275,8 @@ if [ "$2" == "-c" ]; then
if [ "$1" == "-r" ]; then if [ "$1" == "-r" ]; then
echo '*** SPIDERWEB commit process ***' echo '*** SPIDERWEB commit process ***'
head -10 ../docs/CHANGELOG.md
read -p "Do you want to proceed to commit version ${ver} (yes/no) " yn read -p "Do you want to proceed to commit version ${ver} (yes/no) " yn
case $yn in case $yn in

View File

@ -37,6 +37,10 @@
} }
} }
#form-filters {
max-width: 360px;
}
.img-flag { .img-flag {
background-color: white; background-color: white;
border: 1px solid #ddd; border: 1px solid #ddd;
@ -53,7 +57,6 @@
box-shadow: 0 2px 10px rgba(0, 0, 0, .5), 0 2px 3px rgba(0, 0, 0, .5); box-shadow: 0 2px 10px rgba(0, 0, 0, .5), 0 2px 3px rgba(0, 0, 0, .5);
} }
.ipcs { .ipcs {
background-image: url("/static/images/background.webp"); background-image: url("/static/images/background.webp");
background-size: cover; background-size: cover;
@ -92,6 +95,8 @@ span.search-callsign {
margin-top: 5px; margin-top: 5px;
} }
/* Chart & stats */
#dashboard { #dashboard {
padding: 10px; padding: 10px;
gap: 10px; gap: 10px;
@ -123,4 +128,96 @@ span.search-callsign {
right: 20px; right: 20px;
display: none; display: none;
opacity: 0.7; opacity: 0.7;
} }
/* propagation */
.icon {
float: right;
font-size:500%;
position: absolute;
top:0rem;
right:-0.3rem;
opacity: .16;
}
.grey-dark {
background: #495057;
color: #efefef;
}
.no-good2 {
background: linear-gradient(180deg, rgba(207,82,82,1) 0%, rgba(121,9,9,1) 80%);
color: #fff;
}
.no-good {
background: #a83b3b;
color: #fff;
}
.good {
background: #1f7205;
color: #fff;
}
.medium {
background: #ffc241;
color:#495057;
}
.kpi-card {
overflow: hidden;
position: relative;
box-shadow: 1px 1px 3px rgba(0,0,0,0.75);;
display: inline-block;
padding: 1em;
border-radius: 0;
font-family: sans-serif;
width: 170px;
height: 170px;
min-height: 80px;
min-width: 80px;
margin-left: 0.5em;
margin-top: 0.5em;
}
.card-value {
display: block;
font-size: 200%;
font-weight: bolder;
}
.card-text {
display:block;
font-size: 100%;
padding-left: 0.2em;
}
#propagation-wrapper {
width: 100%;
display: flex;
flex-wrap: wrap;
}
#card-container {
width: 80%;
display: flex;
flex-wrap: wrap;
}
#muf-container {
margin: auto;
}
#solar-data-updated-txt {
font-size: 14px;
}
.ts-wrapper.multi .ts-control .item {
background: #15539e;
color: #fff;
border-radius: 3px;
}

View File

@ -1 +1 @@
@import url("https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.3/font/bootstrap-icons.css");@font-face{font-display:swap;font-family:bootstrap-icons}.badge-responsive{width:70px}@media screen and (max-width:768px){.text-responsive{font-size:12px}.badge-responsive{width:40px}#collapseFilters.collapsing{position:absolute!important;z-index:20}#collapseFilters.collapse.show{display:block;position:absolute;z-index:20}.navbar-collapse{max-height:none!important}}.img-flag{background-color:#fff;background-size:cover!important;border:1px solid #ddd;border-radius:2px;-webkit-box-shadow:0 2px 10px rgba(0,0,0,.5),0 2px 3px rgba(0,0,0,.5);-moz-box-shadow:0 2px 10px rgba(0,0,0,.5),0 2px 3px rgba(0,0,0,.5);-o-box-shadow:0 2px 10px rgba(0,0,0,.5),0 2px 3px rgba(0,0,0,.5);box-shadow:0 2px 10px rgba(0,0,0,.5),0 2px 3px rgba(0,0,0,.5);height:19px!important;max-height:auto;max-width:auto;padding:3px;width:32px!important}.ipcs{background-image:url(/static/images/background.webp);background-repeat:no-repeat;background-size:cover}.copyleft{display:inline-block;transform:rotate(180deg)}span.search-callsign{background:url(/static/images/search-callsign.svg) no-repeat 0 0;background-size:contain;cursor:pointer;display:inline-block;height:16px;width:20px}#input-group-callsign{margin-bottom:.5rem;margin-right:1rem}#collapseFilters{background-color:#dde2e6;margin-top:10px}#spotsTable{margin-top:10px}#band{margin-top:5px}#dashboard{gap:10px;padding:10px}#telnet-thead{position:sticky;top:0}#chart-band_activity{height:400px;width:100%}.spider_chart{height:480px;width:600px}#silo-propagation-img{height:auto;width:95%}#btn-back-to-top{bottom:20px;display:none;opacity:.7;position:fixed;right:20px} @import url("https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.3/font/bootstrap-icons.css");@font-face{font-display:swap;font-family:bootstrap-icons}.badge-responsive{width:70px}@media screen and (max-width:768px){.text-responsive{font-size:12px}.badge-responsive{width:40px}#collapseFilters.collapsing{position:absolute!important;z-index:20}#collapseFilters.collapse.show{display:block;position:absolute;z-index:20}.navbar-collapse{max-height:none!important}}#form-filters{max-width:360px}.img-flag{background-color:#fff;background-size:cover!important;border:1px solid #ddd;border-radius:2px;-webkit-box-shadow:0 2px 10px rgba(0,0,0,.5),0 2px 3px rgba(0,0,0,.5);-moz-box-shadow:0 2px 10px rgba(0,0,0,.5),0 2px 3px rgba(0,0,0,.5);-o-box-shadow:0 2px 10px rgba(0,0,0,.5),0 2px 3px rgba(0,0,0,.5);box-shadow:0 2px 10px rgba(0,0,0,.5),0 2px 3px rgba(0,0,0,.5);height:19px!important;max-height:auto;max-width:auto;padding:3px;width:32px!important}.ipcs{background-image:url(/static/images/background.webp);background-repeat:no-repeat;background-size:cover}.copyleft{display:inline-block;transform:rotate(180deg)}span.search-callsign{background:url(/static/images/search-callsign.svg) no-repeat 0 0;background-size:contain;cursor:pointer;display:inline-block;height:16px;width:20px}#input-group-callsign{margin-bottom:.5rem;margin-right:1rem}#collapseFilters{background-color:#dde2e6;margin-top:10px}#spotsTable{margin-top:10px}#band{margin-top:5px}#dashboard{gap:10px;padding:10px}#telnet-thead{position:sticky;top:0}#chart-band_activity{height:400px;width:100%}.spider_chart{height:480px;width:600px}#silo-propagation-img{height:auto;width:95%}#btn-back-to-top{bottom:20px;display:none;opacity:.7;position:fixed;right:20px}.icon{float:right;font-size:500%;opacity:.16;position:absolute;right:-.3rem;top:0}.grey-dark{background:#495057;color:#efefef}.no-good2{background:linear-gradient(180deg,#cf5252,#790909 80%);color:#fff}.no-good{background:#a83b3b;color:#fff}.good{background:#1f7205;color:#fff}.medium{background:#ffc241;color:#495057}.kpi-card{border-radius:0;box-shadow:1px 1px 3px rgba(0,0,0,.75);display:inline-block;font-family:sans-serif;height:170px;margin-left:.5em;margin-top:.5em;min-height:80px;min-width:80px;overflow:hidden;padding:1em;position:relative;width:170px}.card-value{display:block;font-size:200%;font-weight:bolder}.card-text{display:block;font-size:100%;padding-left:.2em}#propagation-wrapper{display:flex;flex-wrap:wrap;width:100%}#card-container{display:flex;flex-wrap:wrap;width:80%}#muf-container{margin:auto}#solar-data-updated-txt{font-size:14px}.ts-wrapper.multi .ts-control .item{background:#15539e;border-radius:3px;color:#fff}

View File

@ -1,6 +1,6 @@
# #
# RELEASE 2023.11.03.00 # RELEASE 2023.11.21.00
# based on CTY-3337 # based on CTY-3338
# #
# ADIF 246 # ADIF 246
Sov Mil Order of Malta: 15: 28: EU: 41.90: -12.43: -1.0: 1A: Sov Mil Order of Malta: 15: 28: EU: 41.90: -12.43: -1.0: 1A:
@ -37,7 +37,7 @@ Conway Reef: 32: 56: OC: -22.00: -175.00: -12.0: 3D2/c:
=3D2CR; =3D2CR;
# ADIF 460 # ADIF 460
Rotuma Island: 32: 56: OC: -12.48: -177.08: -12.0: 3D2/r: Rotuma Island: 32: 56: OC: -12.48: -177.08: -12.0: 3D2/r:
=3D2RAT,=3D2RI; =3D2RI;
# ADIF 468 # ADIF 468
Kingdom of Eswatini: 38: 57: AF: -26.65: -31.48: -2.0: 3DA: Kingdom of Eswatini: 38: 57: AF: -26.65: -31.48: -2.0: 3DA:
3DA; 3DA;
@ -148,7 +148,7 @@ Jamaica: 08: 11: NA: 18.20: 77.47: 5.0: 6Y:
Yemen: 21: 39: AS: 15.65: -48.12: -3.0: 7O: Yemen: 21: 39: AS: 15.65: -48.12: -3.0: 7O:
7O, 7O,
# Socotra # Socotra
=7O8AD(37)[48]<12.50/-53.92>,=7O8AE(37)[48]<12.50/-53.92>; =7O73T(37)[48]<12.50/-53.92>,=7O8AD(37)[48]<12.50/-53.92>,=7O8AE(37)[48]<12.50/-53.92>;
# ADIF 432 # ADIF 432
Lesotho: 38: 57: AF: -29.22: -27.88: -2.0: 7P: Lesotho: 38: 57: AF: -29.22: -27.88: -2.0: 7P:
7P; 7P;
@ -191,8 +191,7 @@ West Malaysia: 28: 54: AS: 3.95: -102.23: -8.0: 9M2:
# ADIF 46 # ADIF 46
East Malaysia: 28: 54: OC: 2.68: -113.32: -8.0: 9M6: East Malaysia: 28: 54: OC: 2.68: -113.32: -8.0: 9M6:
# Sabah # Sabah
9M6<5.25/-117.00>,9W6<5.25/-117.00>,=9M4CBP<5.25/-117.00>,=9M4CKT<5.25/-117.00>, 9M6<5.25/-117.00>,9W6<5.25/-117.00>,=9M4CKT<5.25/-117.00>,=9M4CRP<5.25/-117.00>,
=9M4CRP<5.25/-117.00>,
# Sarawak # Sarawak
9M8<2.80/-113.88>,9W8<2.80/-113.88>; 9M8<2.80/-113.88>,9W8<2.80/-113.88>;
# ADIF 369 # ADIF 369
@ -1833,7 +1832,7 @@ Antarctica: 13: 74: SA: -90.00: 0.00: 0.0: CE9:
# Vostok Station # Vostok Station
=RI1ANC(29)[70]<-78.47/-106.80>, =RI1ANC(29)[70]<-78.47/-106.80>,
# Akademik Vernadsky Station # Akademik Vernadsky Station
=EM1/UW5EHR[73]<-65.23/64.25>,=EM1U[73]<-65.23/64.25>,=VP8/UW5EHR[73]<-65.23/64.25>, =EM1/UW5EHR[73]<-65.23/64.25>,=EM1U[73]<-65.23/64.25>,
# Byrd Station # Byrd Station
=KC4USB(12)<-80.02/119.53>, =KC4USB(12)<-80.02/119.53>,
# Amundsen-Scott South Pole Station # Amundsen-Scott South Pole Station
@ -1897,7 +1896,7 @@ Madeira Islands: 33: 36: AF: 32.75: 16.95: 0.0: CT3:
CQ2,CQ3,CQ9,CR3,CR9,CS3,CS9,CT3,CT9; CQ2,CQ3,CQ9,CR3,CR9,CS3,CS9,CT3,CT9;
# ADIF 149 # ADIF 149
Azores: 14: 36: EU: 38.70: 27.23: 1.0: CU: Azores: 14: 36: EU: 38.70: 27.23: 1.0: CU:
CQ1,CQ8,CR1,CR2,CR8,CS4,CS8,CT8,CU, CQ1,CQ8,CR1,CR2,CR8,CS4,CS8,CT8,CU,=VERSION,
# Santa Maria # Santa Maria
CU1<36.95/25.15>, CU1<36.95/25.15>,
# Sao Miguel # Sao Miguel
@ -2139,7 +2138,6 @@ Spain: 14: 37: EU: 40.32: 3.43: -1.0: EA:
# BI-HU-NA-SS-TE-VI-Z # BI-HU-NA-SS-TE-VI-Z
AM2<42.60/1.93>,AN2<42.60/1.93>,AO2<42.60/1.93>,EA2<42.60/1.93>,EB2<42.60/1.93>,EC2<42.60/1.93>, AM2<42.60/1.93>,AN2<42.60/1.93>,AO2<42.60/1.93>,EA2<42.60/1.93>,EB2<42.60/1.93>,EC2<42.60/1.93>,
ED2<42.60/1.93>,EE2<42.60/1.93>,EF2<42.60/1.93>,EG2<42.60/1.93>,EH2<42.60/1.93>, ED2<42.60/1.93>,EE2<42.60/1.93>,EF2<42.60/1.93>,EG2<42.60/1.93>,EH2<42.60/1.93>,
=EA2EZ/P<42.60/1.93>,
# Catalonia # Catalonia
AM3<41.68/-1.90>,AN3<41.68/-1.90>,AO3<41.68/-1.90>,EA3<41.68/-1.90>,EB3<41.68/-1.90>, AM3<41.68/-1.90>,AN3<41.68/-1.90>,AO3<41.68/-1.90>,EA3<41.68/-1.90>,EB3<41.68/-1.90>,
EC3<41.68/-1.90>,ED3<41.68/-1.90>,EE3<41.68/-1.90>,EF3<41.68/-1.90>,EG3<41.68/-1.90>, EC3<41.68/-1.90>,ED3<41.68/-1.90>,EE3<41.68/-1.90>,EF3<41.68/-1.90>,EG3<41.68/-1.90>,
@ -2147,7 +2145,6 @@ Spain: 14: 37: EU: 40.32: 3.43: -1.0: EA:
# BA-CC-CR-CU-GU-M-TO # BA-CC-CR-CU-GU-M-TO
AM4<40.18/3.93>,AN4<40.18/3.93>,AO4<40.18/3.93>,EA4<40.18/3.93>,EB4<40.18/3.93>,EC4<40.18/3.93>, AM4<40.18/3.93>,AN4<40.18/3.93>,AO4<40.18/3.93>,EA4<40.18/3.93>,EB4<40.18/3.93>,EC4<40.18/3.93>,
ED4<40.18/3.93>,EE4<40.18/3.93>,EF4<40.18/3.93>,EG4<40.18/3.93>,EH4<40.18/3.93>, ED4<40.18/3.93>,EE4<40.18/3.93>,EF4<40.18/3.93>,EG4<40.18/3.93>,EH4<40.18/3.93>,
=EA6XQ/P<40.18/3.93>,
# A-AB-CS-MU-V # A-AB-CS-MU-V
AM5<38.87/0.97>,AN5<38.87/0.97>,AO5<38.87/0.97>,EA5<38.87/0.97>,EB5<38.87/0.97>,EC5<38.87/0.97>, AM5<38.87/0.97>,AN5<38.87/0.97>,AO5<38.87/0.97>,EA5<38.87/0.97>,EB5<38.87/0.97>,EC5<38.87/0.97>,
ED5<38.87/0.97>,EE5<38.87/0.97>,EF5<38.87/0.97>,EG5<38.87/0.97>,EH5<38.87/0.97>, ED5<38.87/0.97>,EE5<38.87/0.97>,EF5<38.87/0.97>,EG5<38.87/0.97>,EH5<38.87/0.97>,
@ -2158,12 +2155,12 @@ Spain: 14: 37: EU: 40.32: 3.43: -1.0: EA:
=EA9HU<37.25/4.68>,=EA9LZ/P<37.25/4.68>; =EA9HU<37.25/4.68>,=EA9LZ/P<37.25/4.68>;
# ADIF 21 # ADIF 21
Balearic Islands: 14: 37: EU: 39.60: -2.95: -1.0: EA6: Balearic Islands: 14: 37: EU: 39.60: -2.95: -1.0: EA6:
AM6,AN6,AO6,EA6,EB6,EC6,ED6,EE6,EF6,EG6,EH6,=AO30MRB; AM6,AN6,AO6,EA6,EB6,EC6,ED6,EE6,EF6,EG6,EH6,=AO30MRB,=EA6XQ/P;
# ADIF 29 # ADIF 29
Canary Islands: 33: 36: AF: 28.32: 15.85: 0.0: EA8: Canary Islands: 33: 36: AF: 28.32: 15.85: 0.0: EA8:
AM8,AN8,AO8,EA8,EB8,EC8,ED8,EE8,EF8,EG8,EH8, AM8,AN8,AO8,EA8,EB8,EC8,ED8,EE8,EF8,EG8,EH8,
# Las Palmas de Gran Canaria # Las Palmas de Gran Canaria
=EA1AP/8<28.15/15.42>; =EA1AP/8<28.15/15.42>,=EC5AHA<28.15/15.42>;
# ADIF 32 # ADIF 32
Ceuta & Melilla: 33: 37: AF: 35.90: 5.27: -1.0: EA9: Ceuta & Melilla: 33: 37: AF: 35.90: 5.27: -1.0: EA9:
AM9,AN9,AO9,EA9,EB9,EC9,ED9,EE9,EF9,EG9,EH9, AM9,AN9,AO9,EA9,EB9,EC9,ED9,EE9,EF9,EG9,EH9,
@ -2294,7 +2291,7 @@ Clipperton Island: 07: 10: NA: 10.28: 109.22: 8.0: FO/c:
=TX5P; =TX5P;
# ADIF 509 # ADIF 509
Marquesas Islands: 31: 63: OC: -8.92: 140.07: 9.5: FO/m: Marquesas Islands: 31: 63: OC: -8.92: 140.07: 9.5: FO/m:
=FO5QS,=TX7L; =FO/F5JRX,=FO5QS,=TX7L;
# ADIF 277 # ADIF 277
St. Pierre & Miquelon: 05: 09: NA: 46.77: 56.20: 3.0: FP: St. Pierre & Miquelon: 05: 09: NA: 46.77: 56.20: 3.0: FP:
FP; FP;
@ -2332,7 +2329,7 @@ Wallis & Futuna Islands: 32: 62: OC: -13.30: 176.20: -12.0: FW:
FW,TW; FW,TW;
# ADIF 63 # ADIF 63
French Guiana: 09: 12: SA: 4.00: 53.00: 3.0: FY: French Guiana: 09: 12: SA: 4.00: 53.00: 3.0: FY:
FY,=TO1A; FY,=TO1A,=TO2FY;
# ADIF 223 # ADIF 223
England: 14: 27: EU: 52.77: 1.47: 0.0: G: England: 14: 27: EU: 52.77: 1.47: 0.0: G:
2E,G,M; 2E,G,M;
@ -2341,29 +2338,28 @@ Isle of Man: 14: 27: EU: 54.20: 4.53: 0.0: GD:
2D,GD,GT,MD,MT; 2D,GD,GT,MD,MT;
# ADIF 265 # ADIF 265
Northern Ireland: 14: 27: EU: 54.73: 6.68: 0.0: GI: Northern Ireland: 14: 27: EU: 54.73: 6.68: 0.0: GI:
2I,GI,GN,MI,MN,=GB2DMR,=GB9AFD; 2I,GI,GN,MI,MN,=GB8LWF,=GB9AFD;
# ADIF 122 # ADIF 122
Jersey: 14: 27: EU: 49.22: 2.18: 0.0: GJ: Jersey: 14: 27: EU: 49.22: 2.18: 0.0: GJ:
2J,GH,GJ,MH,MJ; 2J,GH,GJ,MH,MJ;
# ADIF 279 # ADIF 279
Scotland: 14: 27: EU: 56.82: 4.18: 0.0: GM: Scotland: 14: 27: EU: 56.82: 4.18: 0.0: GM:
2A,2M,GM,GS,MA,MM,MS,=GB0FFS,=GB0GDS,=GB0OZE,=GB0SSB,=GB0WRH,=GB2CM,=GB2ELH,=GB2KDR,=GB2LO, 2A,2M,GM,GS,MA,MM,MS,=GB0FFS,=GB0GDS,=GB0OZE,=GB0SSB,=GB2BD,=GB2CM,=GB2ELH,=GB2LO,=GB2OWM,=GB3ANG,
=GB2OWM,=GB3ANG,=GB3LER,=GB3LER/B,=GB3RMK/B,=GB4LER,=GB5KCD,=GB6WLS; =GB3LER,=GB3LER/B,=GB3RMK/B,=GB4LER,=GB6WLS;
# ADIF 279 # ADIF 279
Shetland Islands: 14: 27: EU: 60.50: 1.50: 0.0: *GM/s: Shetland Islands: 14: 27: EU: 60.50: 1.50: 0.0: *GM/s:
=2M0BDR,=2M0BDT,=2M0CPN,=2M0GFC,=2M0SEG,=2M0SPX,=2M0ZET,=GB2ELH,=GB3LER,=GB3LER/B,=GB4LER,=GM0AVR, =2M0BDR,=2M0BDT,=2M0CPN,=2M0GFC,=2M0SEG,=2M0SPX,=2M0ZET,=GB2ELH,=GB3LER,=GB3LER/B,=GB4LER,=GM0AVR,
=GM0CXQ,=GM0EKM,=GM0GFL,=GM0ILB,=GM0JDB,=GM1FGN,=GM1KKI,=GM1ZNR,=GM3WHT,=GM3ZET,=GM4IPK,=GM4JPI, =GM0CXQ,=GM0EKM,=GM0GFL,=GM0ILB,=GM0JDB,=GM1FGN,=GM1KKI,=GM1ZNR,=GM3WHT,=GM3ZET,=GM4IPK,=GM4JPI,
=GM4LBE,=GM4LER,=GM4PXG,=GM4SLV,=GM4WXQ,=GM4ZHL,=GM6RQW,=GM6YQA,=GM7AFE,=GM7GWW,=GM8LNH,=GM8MMA, =GM4LBE,=GM4LER,=GM4PXG,=GM4SLV,=GM4WXQ,=GM4ZHL,=GM6RQW,=GM6YQA,=GM7AFE,=GM7GWW,=GM8LNH,=GM8MMA,
=GM8YEC,=GS3ZET,=MM0LSM,=MM0NQY,=MM0VIK,=MM0XAU,=MM0ZAL,=MM0ZCG,=MM0ZRC,=MM1FEO,=MM1FJM,=MM3VQO, =GM8YEC,=GS2MP,=GS3ZET,=GS7V,=MM0LSM,=MM0NQY,=MM0VIK,=MM0XAU,=MM0ZAL,=MM0ZCG,=MM0ZRC,=MM1FEO,
=MM5PSL,=MM5YLO,=MM6BDU,=MM6BZQ,=MM6IKB,=MM6IMB,=MM6MFA,=MM6PTE,=MM6SJK,=MM6YLO,=MM6ZBG,=MM6ZDW, =MM1FJM,=MM3VQO,=MM5PSL,=MM5YLO,=MM6BDU,=MM6BZQ,=MM6IKB,=MM6IMB,=MM6MFA,=MM6PTE,=MM6SJK,=MM6YLO,
=MM7CGR,=MM8A,=MS0ZCG,=MS0ZET; =MM6ZBG,=MM6ZDW,=MM7CGR,=MM8A,=MS0ZCG,=MS0ZET;
# ADIF 106 # ADIF 106
Guernsey: 14: 27: EU: 49.45: 2.58: 0.0: GU: Guernsey: 14: 27: EU: 49.45: 2.58: 0.0: GU:
2U,GP,GU,MP,MU; 2U,GP,GU,MP,MU;
# ADIF 294 # ADIF 294
Wales: 14: 27: EU: 52.28: 3.73: 0.0: GW: Wales: 14: 27: EU: 52.28: 3.73: 0.0: GW:
2W,GC,GW,MC,MW,=GB0HBR,=GB0MPA,=GB1CR,=GB1GLC,=GB1MUU,=GB1WHR,=GB2GFS,=GB2IMD,=GB2MOP,=GB2TD, 2W,GC,GW,MC,MW,=GB0MPA,=GB1GLC,=GB1MUU,=GB2GFS,=GB2IMD,=GB2MOP,=GB2TD,=GB2VK,=GB4MDI,=GB9KW;
=GB2VK,=GB4MDI,=GB4RRS;
# ADIF 185 # ADIF 185
Solomon Islands: 28: 51: OC: -9.00: -160.00: -11.0: H4: Solomon Islands: 28: 51: OC: -9.00: -160.00: -11.0: H4:
H4; H4;
@ -2596,7 +2592,7 @@ Sardinia: 15: 28: EU: 40.15: -9.27: -1.0: IS:
=IR0A,=IY0GA; =IR0A,=IY0GA;
# ADIF 248 # ADIF 248
Sicily: 15: 28: EU: 37.50: -14.00: -1.0: *IT9: Sicily: 15: 28: EU: 37.50: -14.00: -1.0: *IT9:
IB9,ID9,IE9,IF9,II9,IJ9,IO9,IQ9,IR9,IT9,IU9,IW9,IY9,=IQ1QQ/9,=IW0HBY/9; IB9,ID9,IE9,IF9,II9,IJ9,IO9,IP9,IQ9,IR9,IT9,IU9,IW9,IY9,=IQ1QQ/9,=IW0HBY/9;
# ADIF 382 # ADIF 382
Djibouti: 37: 48: AF: 11.75: -42.35: -3.0: J2: Djibouti: 37: 48: AF: 11.75: -42.35: -3.0: J2:
J2; J2;
@ -2879,17 +2875,17 @@ United States: 05: 08: NA: 37.60: 91.87: 5.0: K:
=AA5UN<27.83/81.63>,=AA7JV<27.83/81.63>,=AA8R<27.83/81.63>,=AA9HQ<34.02/81.00>, =AA5UN<27.83/81.63>,=AA7JV<27.83/81.63>,=AA8R<27.83/81.63>,=AA9HQ<34.02/81.00>,
=AC6NN<37.85/77.77>,=AC6WI<37.85/77.77>,=AC7GG<34.02/81.00>,=AC8Y<37.85/77.77>,=AD8J<35.53/79.68>, =AC6NN<37.85/77.77>,=AC6WI<37.85/77.77>,=AC7GG<34.02/81.00>,=AC8Y<37.85/77.77>,=AD8J<35.53/79.68>,
=AF6G<35.53/79.68>,=AG7AE<37.85/77.77>,=AG8GT<35.53/79.68>,=AH2EJ<37.85/77.77>, =AF6G<35.53/79.68>,=AG7AE<37.85/77.77>,=AG8GT<35.53/79.68>,=AH2EJ<37.85/77.77>,
=AH6FX<37.85/77.77>,=AH6R<27.83/81.63>,=AI8F<33.42/83.88>,=AI8O<35.53/79.68>,=AJ0IM<27.83/81.63>, =AH6FX<37.85/77.77>,=AH6R<27.83/81.63>,=AI8F<33.42/83.88>,=AI8O<35.53/79.68>,=G8ERJ<33.12/82.20>,
=G8ERJ<33.12/82.20>,=K0CIE<27.83/81.63>,=K0DVH<33.42/83.88>,=K0FE<34.02/81.00>,=K0HT<33.42/83.88>, =K0CIE<27.83/81.63>,=K0DVH<33.42/83.88>,=K0FE<34.02/81.00>,=K0HT<33.42/83.88>,=K0LUZ<27.83/81.63>,
=K0LUZ<27.83/81.63>,=K0RK<27.83/81.63>,=K0ZR<37.85/77.77>,=K5AUP<27.83/81.63>,=K5EEE<27.83/81.63>, =K0RK<27.83/81.63>,=K0ZR<37.85/77.77>,=K5AUP<27.83/81.63>,=K5EEE<27.83/81.63>,=K5EK<35.53/79.68>,
=K5EK<35.53/79.68>,=K5JR<33.42/83.88>,=K5KG<27.83/81.63>,=K5MO<35.53/79.68>,=K5OF<35.53/79.68>, =K5JR<33.42/83.88>,=K5KG<27.83/81.63>,=K5MO<35.53/79.68>,=K5OF<35.53/79.68>,=K5TF<33.42/83.88>,
=K5TF<33.42/83.88>,=K5VG<37.85/77.77>,=K5VIP<37.85/77.77>,=K6ES<35.53/79.68>,=K6RM<35.53/79.68>, =K5VG<37.85/77.77>,=K5VIP<37.85/77.77>,=K6ES<35.53/79.68>,=K6RM<35.53/79.68>,=K7BV<35.53/79.68>,
=K7BV<35.53/79.68>,=K7GM<35.53/79.68>,=K7LU<37.85/77.77>,=K7OM<34.02/81.00>,=K7SV<37.85/77.77>, =K7GM<35.53/79.68>,=K7LU<37.85/77.77>,=K7OM<34.02/81.00>,=K7SV<37.85/77.77>,=K7UPJ<27.83/81.63>,
=K7UPJ<27.83/81.63>,=K7UWR<33.42/83.88>,=K7WCH<34.02/81.00>,=K8AC<35.53/79.68>, =K7UWR<33.42/83.88>,=K7WCH<34.02/81.00>,=K8AC<35.53/79.68>,=K8ARY<34.02/81.00>,=K8FC<27.83/81.63>,
=K8ARY<34.02/81.00>,=K8FC<27.83/81.63>,=K8GP<37.85/77.77>,=K8LBQ<33.42/83.88>,=K8LF<37.85/77.77>, =K8GP<37.85/77.77>,=K8LBQ<33.42/83.88>,=K8LF<37.85/77.77>,=K8MV<27.83/81.63>,=K8NS<27.83/81.63>,
=K8MV<27.83/81.63>,=K8NS<27.83/81.63>,=K8RAR<27.83/81.63>,=K8SYH<37.85/77.77>,=K8UGG<33.42/83.88>, =K8RAR<27.83/81.63>,=K8SYH<37.85/77.77>,=K8UGG<33.42/83.88>,=K8WWN<35.53/79.68>,
=K8WWN<35.53/79.68>,=K8YC<35.53/79.68>,=K8YFM<37.85/77.77>,=K8YM<27.83/81.63>,=K9AXT<35.53/79.68>, =K8YC<35.53/79.68>,=K8YFM<37.85/77.77>,=K8YM<27.83/81.63>,=K9AXT<35.53/79.68>,=K9EZ<35.53/79.68>,
=K9EZ<35.53/79.68>,=K9GS<27.83/81.63>,=K9GWS<34.02/81.00>,=K9HXO<27.83/81.63>,=K9MBQ<37.85/77.77>, =K9GS<27.83/81.63>,=K9GWS<34.02/81.00>,=K9HXO<27.83/81.63>,=K9MBQ<37.85/77.77>,=K9OM<27.83/81.63>,
=K9OQ<33.42/83.88>,=K9RQ<27.83/81.63>,=KA6U<27.83/81.63>,=KA8JIL<27.83/81.63>, =K9OQ<33.42/83.88>,=K9RQ<27.83/81.63>,=KA6U<27.83/81.63>,=KA8JIL<27.83/81.63>,
=KA8OAT<27.83/81.63>,=KA8P<34.02/81.00>,=KA8Q<37.85/77.77>,=KC5RFU<27.83/81.63>, =KA8OAT<27.83/81.63>,=KA8P<34.02/81.00>,=KA8Q<37.85/77.77>,=KC5RFU<27.83/81.63>,
=KC8GCR<35.53/79.68>,=KC8OPV<37.85/77.77>,=KC8YRK<33.42/83.88>,=KD7ACB<27.83/81.63>, =KC8GCR<35.53/79.68>,=KC8OPV<37.85/77.77>,=KC8YRK<33.42/83.88>,=KD7ACB<27.83/81.63>,
@ -2962,65 +2958,66 @@ United States: 05: 08: NA: 37.60: 91.87: 5.0: K:
WZ5(4)[7]<31.85/96.30>~6.0~,=AA3C(4)[7]<30.92/97.33>~6.0~,=AA4TO(4)[7]<30.92/97.33>~6.0~, WZ5(4)[7]<31.85/96.30>~6.0~,=AA3C(4)[7]<30.92/97.33>~6.0~,=AA4TO(4)[7]<30.92/97.33>~6.0~,
=AA5UZ(4)[8]<30.70/91.47>~6.0~,=AB1BN(4)[7]<30.92/97.33>~6.0~,=AB8YZ(4)[7]<30.92/97.33>~6.0~, =AA5UZ(4)[8]<30.70/91.47>~6.0~,=AB1BN(4)[7]<30.92/97.33>~6.0~,=AB8YZ(4)[7]<30.92/97.33>~6.0~,
=AC4CA(4)[7]<30.92/97.33>~6.0~,=AC4CH(4)[7]<35.60/96.85>~6.0~,=AC7P(4)[7]<30.92/97.33>~6.0~, =AC4CA(4)[7]<30.92/97.33>~6.0~,=AC4CH(4)[7]<35.60/96.85>~6.0~,=AC7P(4)[7]<30.92/97.33>~6.0~,
=AE5MI(4)[8]<32.58/89.57>~6.0~,=AG5Z(4)[8]<32.58/89.57>~6.0~,=AH6SU(4)[8]<32.58/89.57>~6.0~, =AD9BT(4)[7]<30.92/97.33>~6.0~,=AE5MI(4)[8]<32.58/89.57>~6.0~,=AG5Z(4)[8]<32.58/89.57>~6.0~,
=AI5HG(4)[8]<32.58/89.57>~6.0~,=AJ4F(4)[7]<30.92/97.33>~6.0~,=AK5CT(4)[8]<32.58/89.57>~6.0~, =AH6SU(4)[8]<32.58/89.57>~6.0~,=AI5HG(4)[8]<32.58/89.57>~6.0~,=AJ4F(4)[7]<30.92/97.33>~6.0~,
=AK9B(4)[7]<30.92/97.33>~6.0~,=AL5M(4)[7]<30.92/97.33>~6.0~,=AL5P(4)[7]<30.92/97.33>~6.0~, =AK5CT(4)[8]<32.58/89.57>~6.0~,=AK9B(4)[7]<30.92/97.33>~6.0~,=AL5M(4)[7]<30.92/97.33>~6.0~,
=AL7V(4)[7]<35.60/96.85>~6.0~,=K1DW(4)[7]<30.92/97.33>~6.0~,=K1IEB(4)[7]<30.92/97.33>~6.0~, =AL5P(4)[7]<30.92/97.33>~6.0~,=AL7V(4)[7]<35.60/96.85>~6.0~,=K1DW(4)[7]<30.92/97.33>~6.0~,
=K1JD(4)[7]<34.60/106.33>~6.0~,=K1LEC(4)[7]<35.20/92.72>~6.0~,=K2SHN(4)[7]<35.20/92.72>~6.0~, =K1IEB(4)[7]<30.92/97.33>~6.0~,=K1JD(4)[7]<34.60/106.33>~6.0~,=K1LEC(4)[7]<35.20/92.72>~6.0~,
=K2ZP(4)[7]<30.70/91.47>~6.0~,=K3IGA(4)[7]<30.92/97.33>~6.0~,=K3KEK(4)[7]<30.92/97.33>~6.0~, =K2SHN(4)[7]<35.20/92.72>~6.0~,=K2ZP(4)[7]<30.70/91.47>~6.0~,=K3IGA(4)[7]<30.92/97.33>~6.0~,
=K3NT(4)[7]<30.92/97.33>~6.0~,=K4DG(4)[7]<30.92/97.33>~6.0~,=K4FMH(4)[7]<32.58/89.57>~6.0~, =K3KEK(4)[7]<30.92/97.33>~6.0~,=K3NT(4)[7]<30.92/97.33>~6.0~,=K3TD(4)[7]<30.92/97.33>~6.0~,
=K5FZ(4)[8]<32.58/89.57>~6.0~,=K5IJ(4)[8]<32.58/89.57>~6.0~,=K5OLV(4)[8]<32.58/89.57>~6.0~, =K4DG(4)[7]<30.92/97.33>~6.0~,=K4FMH(4)[7]<32.58/89.57>~6.0~,=K5FZ(4)[8]<32.58/89.57>~6.0~,
=K5PN(4)[8]<32.58/89.57>~6.0~,=K5UF(4)[8]<32.58/89.57>~6.0~,=K5WK(4)[8]<32.58/89.57>~6.0~, =K5IJ(4)[8]<32.58/89.57>~6.0~,=K5OLV(4)[8]<32.58/89.57>~6.0~,=K5PN(4)[8]<32.58/89.57>~6.0~,
=K5YVY(4)[8]<32.58/89.57>~6.0~,=K6FX(4)[7]<30.92/97.33>~6.0~,=K6RCW(4)[7]<30.92/97.33>~6.0~, =K5UF(4)[8]<32.58/89.57>~6.0~,=K5WK(4)[8]<32.58/89.57>~6.0~,=K5YVY(4)[8]<32.58/89.57>~6.0~,
=K6ZB(4)[7]<30.92/97.33>~6.0~,=K7DWI(4)[7]<30.92/97.33>~6.0~,=K7IA(4)[7]<34.60/106.33>~6.0~, =K6FX(4)[7]<30.92/97.33>~6.0~,=K6RCW(4)[7]<30.92/97.33>~6.0~,=K6ZB(4)[7]<30.92/97.33>~6.0~,
=K7IOL(4)[7]<30.92/97.33>~6.0~,=K7MOA(4)[7]<30.92/97.33>~6.0~,=K7RB(4)[7]<30.92/97.33>~6.0~, =K7DWI(4)[7]<30.92/97.33>~6.0~,=K7IA(4)[7]<34.60/106.33>~6.0~,=K7IOL(4)[7]<30.92/97.33>~6.0~,
=K7UD(4)[7]<30.92/97.33>~6.0~,=K7VF(4)[7]<30.92/97.33>~6.0~,=K7ZYV(4)[8]<32.58/89.57>~6.0~, =K7MOA(4)[7]<30.92/97.33>~6.0~,=K7RB(4)[7]<30.92/97.33>~6.0~,=K7UD(4)[7]<30.92/97.33>~6.0~,
=K8OZ(4)[7]<34.60/106.33>~6.0~,=K8TE(4)[7]<34.60/106.33>~6.0~,=K9ING(4)[7]<30.92/97.33>~6.0~, =K7VF(4)[7]<30.92/97.33>~6.0~,=K7ZYV(4)[8]<32.58/89.57>~6.0~,=K8OZ(4)[7]<34.60/106.33>~6.0~,
=K9MK(4)[7]<30.92/97.33>~6.0~,=K9OZ(4)[7]<35.20/92.72>~6.0~,=KA4OTB(4)[7]<35.20/92.72>~6.0~, =K8TE(4)[7]<34.60/106.33>~6.0~,=K9ING(4)[7]<30.92/97.33>~6.0~,=K9MK(4)[7]<30.92/97.33>~6.0~,
=KB1IKC(4)[7]<34.60/106.33>~6.0~,=KB6OJE(4)[7]<30.92/97.33>~6.0~,=KC2LM(4)[7]<34.60/106.33>~6.0~, =K9OZ(4)[7]<35.20/92.72>~6.0~,=KA4OTB(4)[7]<35.20/92.72>~6.0~,=KB1IKC(4)[7]<34.60/106.33>~6.0~,
=KC6UCN(4)[7]<30.92/97.33>~6.0~,=KC6ZBE(4)[7]<30.92/97.33>~6.0~,=KC7QY(4)[7]<34.60/106.33>~6.0~, =KB6OJE(4)[7]<30.92/97.33>~6.0~,=KC2LM(4)[7]<34.60/106.33>~6.0~,=KC6UCN(4)[7]<30.92/97.33>~6.0~,
=KD2KW(4)[7]<30.92/97.33>~6.0~,=KD5DD(4)[8]<32.58/89.57>~6.0~,=KD5EJG(4)[8]<32.58/89.57>~6.0~, =KC6ZBE(4)[7]<30.92/97.33>~6.0~,=KC7QY(4)[7]<34.60/106.33>~6.0~,=KD2KW(4)[7]<30.92/97.33>~6.0~,
=KE4XT(4)[7]<30.92/97.33>~6.0~,=KE5MIS(4)[8]<32.58/89.57>~6.0~,=KF6JOQ(4)[7]<35.60/96.85>~6.0~, =KD5DD(4)[8]<32.58/89.57>~6.0~,=KD5EJG(4)[8]<32.58/89.57>~6.0~,=KE4XT(4)[7]<30.92/97.33>~6.0~,
=KF9LI(4)[7]<30.92/97.33>~6.0~,=KG5SSB(4)[8]<32.58/89.57>~6.0~,=KG5UN(4)[8]<32.58/89.57>~6.0~, =KE5MIS(4)[8]<32.58/89.57>~6.0~,=KF6JOQ(4)[7]<35.60/96.85>~6.0~,=KF9LI(4)[7]<30.92/97.33>~6.0~,
=KG5XR(4)[8]<32.58/89.57>~6.0~,=KH9AE(4)[7]<30.92/97.33>~6.0~,=KI5UTQ(4)[8]<32.58/89.57>~6.0~, =KG5SSB(4)[8]<32.58/89.57>~6.0~,=KG5UN(4)[8]<32.58/89.57>~6.0~,=KG5XR(4)[8]<32.58/89.57>~6.0~,
=KI5UXN(4)[8]<32.58/89.57>~6.0~,=KI6HQT(4)[7]<30.92/97.33>~6.0~,=KI7ID(4)[7]<30.92/97.33>~6.0~, =KH9AE(4)[7]<30.92/97.33>~6.0~,=KI5UTQ(4)[8]<32.58/89.57>~6.0~,=KI5UXN(4)[8]<32.58/89.57>~6.0~,
=KJ6DQ(4)[7]<30.92/97.33>~6.0~,=KK5OQ(4)[8]<32.58/89.57>~6.0~,=KK6MC(4)[7]<34.60/106.33>~6.0~, =KI6HQT(4)[7]<30.92/97.33>~6.0~,=KI7ID(4)[7]<30.92/97.33>~6.0~,=KJ6DQ(4)[7]<30.92/97.33>~6.0~,
=KL4LJ(4)[7]<30.92/97.33>~6.0~,=KL7U(4)[7]<30.92/97.33>~6.0~,=KM0I(4)[8]<32.58/89.57>~6.0~, =KK5OQ(4)[8]<32.58/89.57>~6.0~,=KK6MC(4)[7]<34.60/106.33>~6.0~,=KL4LJ(4)[7]<30.92/97.33>~6.0~,
=KM4DR(4)[7]<30.92/97.33>~6.0~,=KS4XU(4)[7]<30.92/97.33>~6.0~,=KV8S(4)[7]<30.70/91.47>~6.0~, =KL7U(4)[7]<30.92/97.33>~6.0~,=KM0I(4)[8]<32.58/89.57>~6.0~,=KM4DR(4)[7]<30.92/97.33>~6.0~,
=N1IPB(4)[7]<30.92/97.33>~6.0~,=N2GG(4)[7]<34.60/106.33>~6.0~,=N2IC(4)[7]<34.60/106.33>~6.0~, =KS4XU(4)[7]<30.92/97.33>~6.0~,=KV8S(4)[7]<30.70/91.47>~6.0~,=N1IPB(4)[7]<30.92/97.33>~6.0~,
=N3BB(4)[7]<30.92/97.33>~6.0~,=N3BUO(4)[7]<30.92/97.33>~6.0~,=N3CI(4)[7]<35.60/96.85>~6.0~, =N2GG(4)[7]<34.60/106.33>~6.0~,=N2IC(4)[7]<34.60/106.33>~6.0~,=N3BB(4)[7]<30.92/97.33>~6.0~,
=N3DI(4)[8]<30.70/91.47>~6.0~,=N3MRA(4)[7]<34.60/106.33>~6.0~,=N4LR(4)[8]<32.58/89.57>~6.0~, =N3BUO(4)[7]<30.92/97.33>~6.0~,=N3CI(4)[7]<35.60/96.85>~6.0~,=N3DI(4)[8]<30.70/91.47>~6.0~,
=N4OGW(4)[8]<32.58/89.57>~6.0~,=N4UPX(4)[8]<32.58/89.57>~6.0~,=N5BLY(4)[8]<32.58/89.57>~6.0~, =N3MRA(4)[7]<34.60/106.33>~6.0~,=N4LR(4)[8]<32.58/89.57>~6.0~,=N4OGW(4)[8]<32.58/89.57>~6.0~,
=N5CW(4)[8]<32.58/89.57>~6.0~,=N5FTY(4)[8]<32.58/89.57>~6.0~,=N5GD(4)[8]<32.58/89.57>~6.0~, =N4UPX(4)[8]<32.58/89.57>~6.0~,=N5BLY(4)[8]<32.58/89.57>~6.0~,=N5CW(4)[8]<32.58/89.57>~6.0~,
=N5KSS(4)[8]<32.58/89.57>~6.0~,=N5MIS(4)[8]<32.58/89.57>~6.0~,=N5PA(4)[8]<32.58/89.57>~6.0~, =N5FTY(4)[8]<32.58/89.57>~6.0~,=N5GD(4)[8]<32.58/89.57>~6.0~,=N5KSS(4)[8]<32.58/89.57>~6.0~,
=N5PU(4)[8]<32.58/89.57>~6.0~,=N5SA(4)[8]<32.58/89.57>~6.0~,=N5YT(4)[8]<32.58/89.57>~6.0~, =N5MIS(4)[8]<32.58/89.57>~6.0~,=N5PA(4)[8]<32.58/89.57>~6.0~,=N5PU(4)[8]<32.58/89.57>~6.0~,
=N6EB(4)[7]<35.60/96.85>~6.0~,=N6EV(4)[7]<30.92/97.33>~6.0~,=N6GR(4)[7]<34.60/106.33>~6.0~, =N5SA(4)[8]<32.58/89.57>~6.0~,=N5YT(4)[8]<32.58/89.57>~6.0~,=N6EB(4)[7]<35.60/96.85>~6.0~,
=N6HEW(4)[7]<34.60/106.33>~6.0~,=N6RH(4)[7]<30.92/97.33>~6.0~,=N6ZZ(4)[7]<34.60/106.33>~6.0~, =N6EV(4)[7]<30.92/97.33>~6.0~,=N6GR(4)[7]<34.60/106.33>~6.0~,=N6HEW(4)[7]<34.60/106.33>~6.0~,
=N7KA(4)[7]<34.60/106.33>~6.0~,=N8OO(4)[7]<30.70/91.47>~6.0~,=N9JYJ(4)[7]<35.60/96.85>~6.0~, =N6RH(4)[7]<30.92/97.33>~6.0~,=N6ZZ(4)[7]<34.60/106.33>~6.0~,=N7KA(4)[7]<34.60/106.33>~6.0~,
=N9NM(4)[7]<30.92/97.33>~6.0~,=N9OF(4)[7]<30.92/97.33>~6.0~,=NA5DX(4)[8]<32.58/89.57>~6.0~, =N8OO(4)[7]<30.70/91.47>~6.0~,=N9JYJ(4)[7]<35.60/96.85>~6.0~,=N9NM(4)[7]<30.92/97.33>~6.0~,
=NA5NN(4)[8]<32.58/89.57>~6.0~,=NF8H(4)[7]<35.20/92.72>~6.0~,=NG5U(4)[8]<32.58/89.57>~6.0~, =N9OF(4)[7]<30.92/97.33>~6.0~,=NA5DX(4)[8]<32.58/89.57>~6.0~,=NA5NN(4)[8]<32.58/89.57>~6.0~,
=NH6L(4)[7]<30.92/97.33>~6.0~,=NH6PK(4)[8]<30.70/91.47>~6.0~,=NH6SM(4)[7]<35.60/96.85>~6.0~, =NF8H(4)[7]<35.20/92.72>~6.0~,=NG5U(4)[8]<32.58/89.57>~6.0~,=NH6L(4)[7]<30.92/97.33>~6.0~,
=NH7TR(4)[7]<30.92/97.33>~6.0~,=NI2M(4)[7]<30.92/97.33>~6.0~,=NL7RQ(4)[7]<35.20/92.72>~6.0~, =NH6PK(4)[8]<30.70/91.47>~6.0~,=NH6SM(4)[7]<35.60/96.85>~6.0~,=NH7TR(4)[7]<30.92/97.33>~6.0~,
=NN5O(4)[8]<32.58/89.57>~6.0~,=NO3OO(4)[7]<30.70/91.47>~6.0~,=NZ7Q(4)[7]<34.60/106.33>~6.0~, =NI2M(4)[7]<30.92/97.33>~6.0~,=NL7RQ(4)[7]<35.20/92.72>~6.0~,=NN5O(4)[8]<32.58/89.57>~6.0~,
=W1JCW(4)[7]<30.92/97.33>~6.0~,=W2ACY(4)[7]<30.92/97.33>~6.0~,=W2GS(4)[7]<32.58/89.57>~6.0~, =NO3OO(4)[7]<30.70/91.47>~6.0~,=NZ7Q(4)[7]<34.60/106.33>~6.0~,=W1JCW(4)[7]<30.92/97.33>~6.0~,
=W2IY(4)[7]<34.60/106.33>~6.0~,=W2KF(4)[7]<30.92/97.33>~6.0~,=W2MN(4)[7]<30.92/97.33>~6.0~, =W2ACY(4)[7]<30.92/97.33>~6.0~,=W2GS(4)[7]<32.58/89.57>~6.0~,=W2IY(4)[7]<34.60/106.33>~6.0~,
=W2ODH(4)[7]<30.92/97.33>~6.0~,=W2OZB(4)[7]<30.92/97.33>~6.0~,=W3PWF(4)[7]<30.92/97.33>~6.0~, =W2KF(4)[7]<30.92/97.33>~6.0~,=W2MN(4)[7]<30.92/97.33>~6.0~,=W2ODH(4)[7]<30.92/97.33>~6.0~,
=W3RZ(4)[7]<30.92/97.33>~6.0~,=W3XO(4)[7]<30.92/97.33>~6.0~,=W4IPA(4)[7]<30.92/97.33>~6.0~, =W2OZB(4)[7]<30.92/97.33>~6.0~,=W3PWF(4)[7]<30.92/97.33>~6.0~,=W3RZ(4)[7]<30.92/97.33>~6.0~,
=W5BLX(4)[8]<32.58/89.57>~6.0~,=W5EPL(4)[8]<32.58/89.57>~6.0~,=W5GAI(4)[8]<32.58/89.57>~6.0~, =W3XO(4)[7]<30.92/97.33>~6.0~,=W4IPA(4)[7]<30.92/97.33>~6.0~,=W5BLX(4)[8]<32.58/89.57>~6.0~,
=W5ORC(4)[8]<32.58/89.57>~6.0~,=W5RCG(4)[8]<32.58/89.57>~6.0~,=W5SGL(4)[8]<32.58/89.57>~6.0~, =W5EPL(4)[8]<32.58/89.57>~6.0~,=W5GAI(4)[8]<32.58/89.57>~6.0~,=W5ORC(4)[8]<32.58/89.57>~6.0~,
=W5THT(4)[8]<32.58/89.57>~6.0~,=W5UMS(4)[8]<32.58/89.57>~6.0~,=W5WGF(4)[8]<32.58/89.57>~6.0~, =W5RCG(4)[8]<32.58/89.57>~6.0~,=W5SGL(4)[8]<32.58/89.57>~6.0~,=W5THT(4)[8]<32.58/89.57>~6.0~,
=W5YD(4)[8]<32.58/89.57>~6.0~,=W6FB(4)[7]<30.70/91.47>~6.0~,=W6LFB(4)[7]<30.92/97.33>~6.0~, =W5UMS(4)[8]<32.58/89.57>~6.0~,=W5WGF(4)[8]<32.58/89.57>~6.0~,=W5YD(4)[8]<32.58/89.57>~6.0~,
=W7JKC(4)[7]<30.92/97.33>~6.0~,=W7NX(4)[7]<30.92/97.33>~6.0~,=W8OV(4)[7]<30.92/97.33>~6.0~, =W6FB(4)[7]<30.70/91.47>~6.0~,=W6LFB(4)[7]<30.92/97.33>~6.0~,=W7JKC(4)[7]<30.92/97.33>~6.0~,
=W8WZ(4)[7]<30.70/91.47>~6.0~,=W9DCT(4)[7]<35.20/92.72>~6.0~,=W9DXM(4)[7]<30.92/97.33>~6.0~, =W7NX(4)[7]<30.92/97.33>~6.0~,=W8OV(4)[7]<30.92/97.33>~6.0~,=W8WZ(4)[7]<30.70/91.47>~6.0~,
=W9LCQ(4)[7]<30.92/97.33>~6.0~,=W9MC(4)[7]<30.92/97.33>~6.0~,=WA2TOP(4)[7]<30.92/97.33>~6.0~, =W9DCT(4)[7]<35.20/92.72>~6.0~,=W9DXM(4)[7]<30.92/97.33>~6.0~,=W9LCQ(4)[7]<30.92/97.33>~6.0~,
=WA2VYA(4)[7]<30.92/97.33>~6.0~,=WA3NZA(4)[7]<30.92/97.33>~6.0~,=WA8ZBT(4)[7]<30.92/97.33>~6.0~, =W9MC(4)[7]<30.92/97.33>~6.0~,=WA2TOP(4)[7]<30.92/97.33>~6.0~,=WA2VYA(4)[7]<30.92/97.33>~6.0~,
=WA9AFM(4)[7]<35.60/96.85>~6.0~,=WA9JBR(4)[7]<30.70/91.47>~6.0~,=WB4KTF(4)[7]<30.92/97.33>~6.0~, =WA3NZA(4)[7]<30.92/97.33>~6.0~,=WA8ZBT(4)[7]<30.92/97.33>~6.0~,=WA9AFM(4)[7]<35.60/96.85>~6.0~,
=WB5SKM(4)[8]<32.58/89.57>~6.0~,=WB8QZM(4)[7]<30.92/97.33>~6.0~,=WD5CCA(4)[8]<32.58/89.57>~6.0~, =WA9JBR(4)[7]<30.70/91.47>~6.0~,=WB4KTF(4)[7]<30.92/97.33>~6.0~,=WB5SKM(4)[8]<32.58/89.57>~6.0~,
=WD9FJL(4)[7]<34.60/106.33>~6.0~,=WE6EZ(4)[7]<30.92/97.33>~6.0~,=WF3H(4)[7]<30.92/97.33>~6.0~, =WB8QZM(4)[7]<30.92/97.33>~6.0~,=WD5CCA(4)[8]<32.58/89.57>~6.0~,=WD9FJL(4)[7]<34.60/106.33>~6.0~,
=WH7R(4)[7]<30.92/97.33>~6.0~,=WJ5K(4)[8]<32.58/89.57>~6.0~,=WL7OU(4)[7]<30.92/97.33>~6.0~, =WE6EZ(4)[7]<30.92/97.33>~6.0~,=WF3H(4)[7]<30.92/97.33>~6.0~,=WH7R(4)[7]<30.92/97.33>~6.0~,
=WM5A(4)[8]<32.58/89.57>~6.0~,=WM5DX(4)[8]<32.58/89.57>~6.0~,=WN2E(4)[8]<32.58/89.57>~6.0~, =WJ5K(4)[8]<32.58/89.57>~6.0~,=WL7OU(4)[7]<30.92/97.33>~6.0~,=WM5A(4)[8]<32.58/89.57>~6.0~,
=WQ5L(4)[8]<32.58/89.57>~6.0~,=WT4DX(4)[7]<30.92/97.33>~6.0~,=WW2OK(4)[7]<35.60/96.85>~6.0~, =WM5DX(4)[8]<32.58/89.57>~6.0~,=WN2E(4)[8]<32.58/89.57>~6.0~,=WQ5L(4)[8]<32.58/89.57>~6.0~,
=WX7V(4)[7]<30.92/97.33>~6.0~,=WY6K(4)[7]<30.92/97.33>~6.0~, =WT4DX(4)[7]<30.92/97.33>~6.0~,=WW2OK(4)[7]<35.60/96.85>~6.0~,=WX7V(4)[7]<30.92/97.33>~6.0~,
=WY6K(4)[7]<30.92/97.33>~6.0~,
# California # California
AA6(3)[6]<35.48/119.35>~8.0~,AB6(3)[6]<35.48/119.35>~8.0~,AC6(3)[6]<35.48/119.35>~8.0~, AA6(3)[6]<35.48/119.35>~8.0~,AB6(3)[6]<35.48/119.35>~8.0~,AC6(3)[6]<35.48/119.35>~8.0~,
AD6(3)[6]<35.48/119.35>~8.0~,AE6(3)[6]<35.48/119.35>~8.0~,AF6(3)[6]<35.48/119.35>~8.0~, AD6(3)[6]<35.48/119.35>~8.0~,AE6(3)[6]<35.48/119.35>~8.0~,AF6(3)[6]<35.48/119.35>~8.0~,
@ -3070,13 +3067,13 @@ United States: 05: 08: NA: 37.60: 91.87: 5.0: K:
=N8JOE(3)[6]<35.48/119.35>~8.0~,=N9BD(3)[6]<35.48/119.35>~8.0~,=ND2T(3)[6]<35.48/119.35>~8.0~, =N8JOE(3)[6]<35.48/119.35>~8.0~,=N9BD(3)[6]<35.48/119.35>~8.0~,=ND2T(3)[6]<35.48/119.35>~8.0~,
=NK3L(3)[6]<35.48/119.35>~8.0~,=NR1K(3)[6]<35.48/119.35>~8.0~,=NR5NN(3)[6]<35.48/119.35>~8.0~, =NK3L(3)[6]<35.48/119.35>~8.0~,=NR1K(3)[6]<35.48/119.35>~8.0~,=NR5NN(3)[6]<35.48/119.35>~8.0~,
=NT5A(3)[6]<35.48/119.35>~8.0~,=W0PE(3)[6]<35.48/119.35>~8.0~,=W0PZ(3)[6]<35.48/119.35>~8.0~, =NT5A(3)[6]<35.48/119.35>~8.0~,=W0PE(3)[6]<35.48/119.35>~8.0~,=W0PZ(3)[6]<35.48/119.35>~8.0~,
=W0YK(3)[6]<35.48/119.35>~8.0~,=W1MVY(3)[6]<35.48/119.35>~8.0~,=W1PR(3)[6]<35.48/119.35>~8.0~, =W0YK(3)[6]<35.48/119.35>~8.0~,=W1PR(3)[6]<35.48/119.35>~8.0~,=W1RH(3)[6]<35.48/119.35>~8.0~,
=W1RH(3)[6]<35.48/119.35>~8.0~,=W1SAV(3)[6]<35.48/119.35>~8.0~,=W1SRD(3)[6]<35.48/119.35>~8.0~, =W1SAV(3)[6]<35.48/119.35>~8.0~,=W1SRD(3)[6]<35.48/119.35>~8.0~,=W3FF(3)[6]<35.48/119.35>~8.0~,
=W3FF(3)[6]<35.48/119.35>~8.0~,=W3WRC(3)[6]<35.48/119.35>~8.0~,=W4EF(3)[6]<35.48/119.35>~8.0~, =W3WRC(3)[6]<35.48/119.35>~8.0~,=W4EF(3)[6]<35.48/119.35>~8.0~,=W4NJK(3)[6]<35.48/119.35>~8.0~,
=W4NJK(3)[6]<35.48/119.35>~8.0~,=W4UAT(3)[6]<35.48/119.35>~8.0~,=W5ABQ(3)[6]<35.48/119.35>~8.0~, =W4UAT(3)[6]<35.48/119.35>~8.0~,=W5ABQ(3)[6]<35.48/119.35>~8.0~,=W8EWL(3)[6]<35.48/119.35>~8.0~,
=W8EWL(3)[6]<35.48/119.35>~8.0~,=W8GJK(3)[6]<35.48/119.35>~8.0~,=W8SA(3)[6]<35.48/119.35>~8.0~, =W8GJK(3)[6]<35.48/119.35>~8.0~,=W8SA(3)[6]<35.48/119.35>~8.0~,=W9JXT(3)[6]<35.48/119.35>~8.0~,
=W9JXT(3)[6]<35.48/119.35>~8.0~,=W9MAK(3)[6]<35.48/119.35>~8.0~,=WA9JIB(3)[6]<35.48/119.35>~8.0~, =W9MAK(3)[6]<35.48/119.35>~8.0~,=WA9JIB(3)[6]<35.48/119.35>~8.0~,=WB8YQJ(3)[6]<35.48/119.35>~8.0~,
=WB8YQJ(3)[6]<35.48/119.35>~8.0~,=WC2A(3)[6]<35.48/119.35>~8.0~,=WX5S(3)[6]<35.48/119.35>~8.0~, =WC2A(3)[6]<35.48/119.35>~8.0~,=WX5S(3)[6]<35.48/119.35>~8.0~,
# AZ-ID-MT-NV-OR-UT-WA-WY # AZ-ID-MT-NV-OR-UT-WA-WY
AA7(3)[6]<41.30/116.60>~7.0~,AB7(3)[6]<41.30/116.60>~7.0~,AC7(3)[6]<41.30/116.60>~7.0~, AA7(3)[6]<41.30/116.60>~7.0~,AB7(3)[6]<41.30/116.60>~7.0~,AC7(3)[6]<41.30/116.60>~7.0~,
AD7(3)[6]<41.30/116.60>~7.0~,AE7(3)[6]<41.30/116.60>~7.0~,AF7(3)[6]<41.30/116.60>~7.0~, AD7(3)[6]<41.30/116.60>~7.0~,AE7(3)[6]<41.30/116.60>~7.0~,AF7(3)[6]<41.30/116.60>~7.0~,
@ -3183,27 +3180,27 @@ United States: 05: 08: NA: 37.60: 91.87: 5.0: K:
WK8(4)<41.35/83.23>,WM8(4)<41.35/83.23>,WN8(4)<41.35/83.23>,WO8(4)<41.35/83.23>, WK8(4)<41.35/83.23>,WM8(4)<41.35/83.23>,WN8(4)<41.35/83.23>,WO8(4)<41.35/83.23>,
WQ8(4)<41.35/83.23>,WR8(4)<41.35/83.23>,WS8(4)<41.35/83.23>,WT8(4)<41.35/83.23>, WQ8(4)<41.35/83.23>,WR8(4)<41.35/83.23>,WS8(4)<41.35/83.23>,WT8(4)<41.35/83.23>,
WU8(4)<41.35/83.23>,WV8(4)<41.35/83.23>,WW8(4)<41.35/83.23>,WX8(4)<41.35/83.23>, WU8(4)<41.35/83.23>,WV8(4)<41.35/83.23>,WW8(4)<41.35/83.23>,WX8(4)<41.35/83.23>,
WY8(4)<41.35/83.23>,WZ8(4)<41.35/83.23>,=AA1JM(4)<42.87/84.22>,=AA4R(4)<42.87/84.22>, WY8(4)<41.35/83.23>,WZ8(4)<41.35/83.23>,=AA1JM(4)<42.87/84.22>,=AA5TA(4)<40.43/82.80>,
=AA5TA(4)<40.43/82.80>,=AH2AV(4)<42.87/84.22>,=K0ACP(4)<42.87/84.22>,=K1CCN(4)<40.43/82.80>, =AH2AV(4)<42.87/84.22>,=K0ACP(4)<42.87/84.22>,=K1CCN(4)<40.43/82.80>,=K1LT(4)<40.43/82.80>,
=K1LT(4)<40.43/82.80>,=K1ND(4)<42.87/84.22>,=K2CUB(4)<42.87/84.22>,=K2KMC(4)<40.43/82.80>, =K1ND(4)<42.87/84.22>,=K2CUB(4)<42.87/84.22>,=K2KMC(4)<40.43/82.80>,=K2PM(4)<42.87/84.22>,
=K2PM(4)<42.87/84.22>,=K2YAZ(4)<42.87/84.22>,=K3DMG(4)<40.43/82.80>,=K3GP(4)<40.43/82.80>, =K2YAZ(4)<42.87/84.22>,=K3DMG(4)<40.43/82.80>,=K3GP(4)<40.43/82.80>,=K3USC(4)<40.43/82.80>,
=K3USC(4)<40.43/82.80>,=K3VIN(4)<40.43/82.80>,=K3YP(4)<40.43/82.80>,=K4YJ(4)<40.43/82.80>, =K3VIN(4)<40.43/82.80>,=K3YP(4)<40.43/82.80>,=K4YJ(4)<40.43/82.80>,=K6HRU(4)<40.43/82.80>,
=K6HRU(4)<40.43/82.80>,=K7TAR(4)<40.43/82.80>,=KA0AZS(4)<40.43/82.80>,=KA1LDD(4)<40.43/82.80>, =K7TAR(4)<40.43/82.80>,=KA0AZS(4)<40.43/82.80>,=KA1LDD(4)<40.43/82.80>,=KA1RUE(4)<40.43/82.80>,
=KA1RUE(4)<40.43/82.80>,=KB4TLH(4)<40.43/82.80>,=KB5BGC(4)<42.87/84.22>,=KB6NU(4)<42.87/84.22>, =KB4TLH(4)<40.43/82.80>,=KB5BGC(4)<42.87/84.22>,=KB6NU(4)<42.87/84.22>,=KE3K(4)<42.87/84.22>,
=KE3K(4)<42.87/84.22>,=KI6DY(4)<40.43/82.80>,=KK0L(4)<40.43/82.80>,=KL2YE(4)<42.87/84.22>, =KI6DY(4)<40.43/82.80>,=KK0L(4)<40.43/82.80>,=KL2YE(4)<42.87/84.22>,=KP4VZ(4)<40.43/82.80>,
=KP4VZ(4)<40.43/82.80>,=KQ4YC(4)<40.43/82.80>,=KS4OP(4)<40.43/82.80>,=N0FW(4)<40.43/82.80>, =KQ4YC(4)<40.43/82.80>,=KS4OP(4)<40.43/82.80>,=N0FW(4)<40.43/82.80>,=N0TTI(4)<42.87/84.22>,
=N0TTI(4)<42.87/84.22>,=N0VRS(4)<40.43/82.80>,=N1LB(4)<40.43/82.80>,=N2CB(4)<42.87/84.22>, =N0VRS(4)<40.43/82.80>,=N1LB(4)<40.43/82.80>,=N2CB(4)<42.87/84.22>,=N2CCG(4)<42.87/84.22>,
=N2CCG(4)<42.87/84.22>,=N3JJT(4)<40.43/82.80>,=N3RA(4)<40.43/82.80>,=N3WVB(4)<40.43/82.80>, =N3JJT(4)<40.43/82.80>,=N3RA(4)<40.43/82.80>,=N3WVB(4)<40.43/82.80>,=N4CSV(4)<40.43/82.80>,
=N4CSV(4)<40.43/82.80>,=N4DBR(4)<42.87/84.22>,=N4EL(4)<40.43/82.80>,=N4HAI(4)<40.43/82.80>, =N4DBR(4)<42.87/84.22>,=N4EL(4)<40.43/82.80>,=N4HAI(4)<40.43/82.80>,=N4LSJ(4)<40.43/82.80>,
=N4LSJ(4)<40.43/82.80>,=N5JED(4)<40.43/82.80>,=N5MKY(4)<42.87/84.22>,=N5WCS(4)<42.87/84.22>, =N5JED(4)<40.43/82.80>,=N5MKY(4)<42.87/84.22>,=N5WCS(4)<42.87/84.22>,=N6FS(4)<42.87/84.22>,
=N6FS(4)<42.87/84.22>,=N6JRL(4)<40.43/82.80>,=N6VF(4)<40.43/82.80>,=ND3N(4)<40.43/82.80>, =N6JRL(4)<40.43/82.80>,=N6VF(4)<40.43/82.80>,=ND3N(4)<40.43/82.80>,=NG3Q(4)<40.43/82.80>,
=NG3Q(4)<40.43/82.80>,=W0CG(4)<40.43/82.80>,=W0JX(4)<40.43/82.80>,=W1CHL(4)<40.43/82.80>, =W0CG(4)<40.43/82.80>,=W0JX(4)<40.43/82.80>,=W1CHL(4)<40.43/82.80>,=W1NN(4)<40.43/82.80>,
=W1NN(4)<40.43/82.80>,=W1PD(4)<40.43/82.80>,=W1SKU(4)<42.87/84.22>,=W3CB(4)<42.87/84.22>, =W1PD(4)<40.43/82.80>,=W1SKU(4)<42.87/84.22>,=W3CB(4)<42.87/84.22>,=W3CRZ(4)<40.43/82.80>,
=W3CRZ(4)<40.43/82.80>,=W3HKK(4)<40.43/82.80>,=W3USA(4)<40.43/82.80>,=W4KD(4)<40.43/82.80>, =W3HKK(4)<40.43/82.80>,=W3USA(4)<40.43/82.80>,=W4KD(4)<40.43/82.80>,=W4YPW(4)<40.43/82.80>,
=W4YPW(4)<40.43/82.80>,=W5DT(4)<42.87/84.22>,=W5HIO(4)<40.43/82.80>,=W5KBW(4)<40.43/82.80>, =W5DT(4)<42.87/84.22>,=W5HIO(4)<40.43/82.80>,=W5KBW(4)<40.43/82.80>,=W5UHQ(4)<40.43/82.80>,
=W5UHQ(4)<40.43/82.80>,=WA1UJU(4)<42.87/84.22>,=WA2DHG(4)<40.43/82.80>,=WA3C(4)<40.43/82.80>, =WA1UJU(4)<42.87/84.22>,=WA2DHG(4)<40.43/82.80>,=WA3C(4)<40.43/82.80>,=WA3JAT(4)<40.43/82.80>,
=WA3JAT(4)<40.43/82.80>,=WA4MLD(4)<42.87/84.22>,=WB5WAH(4)<40.43/82.80>,=WO3X(4)<40.43/82.80>, =WA4MLD(4)<42.87/84.22>,=WB5WAH(4)<40.43/82.80>,=WO3X(4)<40.43/82.80>,=WR4T(4)<40.43/82.80>,
=WR4T(4)<40.43/82.80>,=WS6K(4)<40.43/82.80>, =WS6K(4)<40.43/82.80>,
# IL-IN-WI # IL-IN-WI
AA9(4)<41.55/87.97>~6.0~,AB9(4)<41.55/87.97>~6.0~,AC9(4)<41.55/87.97>~6.0~, AA9(4)<41.55/87.97>~6.0~,AB9(4)<41.55/87.97>~6.0~,AC9(4)<41.55/87.97>~6.0~,
AD9(4)<41.55/87.97>~6.0~,AE9(4)<41.55/87.97>~6.0~,AF9(4)<41.55/87.97>~6.0~, AD9(4)<41.55/87.97>~6.0~,AE9(4)<41.55/87.97>~6.0~,AF9(4)<41.55/87.97>~6.0~,
@ -3302,139 +3299,139 @@ United States: 05: 08: NA: 37.60: 91.87: 5.0: K:
=K4DXV(4)<35.82/86.33>~6.0~,=K4DZR(4)<35.82/86.33>~6.0~,=K4EES(4)<33.02/86.75>~6.0~, =K4DXV(4)<35.82/86.33>~6.0~,=K4DZR(4)<35.82/86.33>~6.0~,=K4EES(4)<33.02/86.75>~6.0~,
=K4FBC(4)<33.02/86.75>~6.0~,=K4FN(4)<37.83/85.27>~6.0~,=K4FTY(4)<33.02/86.75>~6.0~, =K4FBC(4)<33.02/86.75>~6.0~,=K4FN(4)<37.83/85.27>~6.0~,=K4FTY(4)<33.02/86.75>~6.0~,
=K4GIG(4)<33.02/86.75>~6.0~,=K4HAL(4)<33.02/86.75>~6.0~,=K4HWS(4)<35.82/86.33>~6.0~, =K4GIG(4)<33.02/86.75>~6.0~,=K4HAL(4)<33.02/86.75>~6.0~,=K4HWS(4)<35.82/86.33>~6.0~,
=K4HY(4)<37.83/85.27>~6.0~,=K4IE(4)<37.83/85.27>~6.0~,=K4ISV(4)<37.83/85.27>~6.0~, =K4HY(4)<37.83/85.27>~6.0~,=K4IE(4)<37.83/85.27>~6.0~,=K4KCG(4)<37.83/85.27>~6.0~,
=K4KCG(4)<37.83/85.27>~6.0~,=K4KKI(4)<35.82/86.33>~6.0~,=K4KO(4)<35.82/86.33>~6.0~, =K4KKI(4)<35.82/86.33>~6.0~,=K4KO(4)<35.82/86.33>~6.0~,=K4KSV(4)<33.02/86.75>~6.0~,
=K4KSV(4)<33.02/86.75>~6.0~,=K4KYN(4)<35.82/86.33>~6.0~,=K4LEN(4)<35.82/86.33>~6.0~, =K4KYN(4)<35.82/86.33>~6.0~,=K4LEN(4)<35.82/86.33>~6.0~,=K4MSU(4)<37.83/85.27>~6.0~,
=K4MSU(4)<37.83/85.27>~6.0~,=K4NO(4)<33.02/86.75>~6.0~,=K4OAQ(4)<35.82/86.33>~6.0~, =K4NO(4)<33.02/86.75>~6.0~,=K4OAQ(4)<35.82/86.33>~6.0~,=K4PJ(4)<35.82/86.33>~6.0~,
=K4PJ(4)<35.82/86.33>~6.0~,=K4PKM(4)<37.83/85.27>~6.0~,=K4PO(4)<33.02/86.75>~6.0~, =K4PKM(4)<37.83/85.27>~6.0~,=K4PO(4)<33.02/86.75>~6.0~,=K4RFT(4)<35.82/86.33>~6.0~,
=K4RFT(4)<35.82/86.33>~6.0~,=K4RO(4)<35.82/86.33>~6.0~,=K4ROJ(4)<35.82/86.33>~6.0~, =K4RO(4)<35.82/86.33>~6.0~,=K4ROJ(4)<35.82/86.33>~6.0~,=K4RST(4)<35.82/86.33>~6.0~,
=K4RST(4)<35.82/86.33>~6.0~,=K4SHA(4)<33.02/86.75>~6.0~,=K4SPO(4)<37.83/85.27>~6.0~, =K4SHA(4)<33.02/86.75>~6.0~,=K4SPO(4)<37.83/85.27>~6.0~,=K4TCG(4)<35.82/86.33>~6.0~,
=K4TCG(4)<35.82/86.33>~6.0~,=K4TEC(4)<37.83/85.27>~6.0~,=K4TG(4)<37.83/85.27>~6.0~, =K4TEC(4)<37.83/85.27>~6.0~,=K4TG(4)<37.83/85.27>~6.0~,=K4TIN(4)<33.02/86.75>~6.0~,
=K4TIN(4)<33.02/86.75>~6.0~,=K4TNN(4)<35.82/86.33>~6.0~,=K4TO(4)<37.83/85.27>~6.0~, =K4TNN(4)<35.82/86.33>~6.0~,=K4TO(4)<37.83/85.27>~6.0~,=K4TXL(4)<35.82/86.33>~6.0~,
=K4TXL(4)<35.82/86.33>~6.0~,=K4TZ(4)<37.83/85.27>~6.0~,=K4VIG(4)<35.82/86.33>~6.0~, =K4TZ(4)<37.83/85.27>~6.0~,=K4VIG(4)<35.82/86.33>~6.0~,=K4WG(4)<33.02/86.75>~6.0~,
=K4WG(4)<33.02/86.75>~6.0~,=K4WI(4)<33.02/86.75>~6.0~,=K4WW(4)<37.83/85.27>~6.0~, =K4WI(4)<33.02/86.75>~6.0~,=K4WW(4)<37.83/85.27>~6.0~,=K4XXX(4)<37.83/85.27>~6.0~,
=K4XXX(4)<37.83/85.27>~6.0~,=K4YA(4)<35.82/86.33>~6.0~,=K4ZGB(4)<33.02/86.75>~6.0~, =K4YA(4)<35.82/86.33>~6.0~,=K4ZGB(4)<33.02/86.75>~6.0~,=K5VBA(4)<33.02/86.75>~6.0~,
=K5VBA(4)<33.02/86.75>~6.0~,=K5WP(4)<33.02/86.75>~6.0~,=K5ZQ(4)<37.83/85.27>~6.0~, =K5WP(4)<33.02/86.75>~6.0~,=K5ZQ(4)<37.83/85.27>~6.0~,=KA3MTT(4)<37.83/85.27>~6.0~,
=KA3MTT(4)<37.83/85.27>~6.0~,=KA4J(4)<35.82/86.33>~6.0~,=KA4SCV(4)<35.82/86.33>~6.0~, =KA4J(4)<35.82/86.33>~6.0~,=KA4SCV(4)<35.82/86.33>~6.0~,=KA5VZG(4)<35.82/86.33>~6.0~,
=KA5VZG(4)<35.82/86.33>~6.0~,=KB3A(4)<33.02/86.75>~6.0~,=KB4QZH(4)<37.83/85.27>~6.0~, =KB3A(4)<33.02/86.75>~6.0~,=KB4QZH(4)<37.83/85.27>~6.0~,=KB4VL(4)<35.82/86.33>~6.0~,
=KB4VL(4)<35.82/86.33>~6.0~,=KC1DWP(4)<35.82/86.33>~6.0~,=KC1RVY(4)<35.82/86.33>~6.0~, =KC1DWP(4)<35.82/86.33>~6.0~,=KC1RVY(4)<35.82/86.33>~6.0~,=KC4BB(4)<33.02/86.75>~6.0~,
=KC4BB(4)<33.02/86.75>~6.0~,=KC4FLT(4)<33.02/86.75>~6.0~,=KC4HW(4)<33.02/86.75>~6.0~, =KC4FLT(4)<33.02/86.75>~6.0~,=KC4HW(4)<33.02/86.75>~6.0~,=KC4NX(4)<35.82/86.33>~6.0~,
=KC4NX(4)<35.82/86.33>~6.0~,=KC4OBX(4)<37.83/85.27>~6.0~,=KC4RNF(4)<33.02/86.75>~6.0~, =KC4OBX(4)<37.83/85.27>~6.0~,=KC4RNF(4)<33.02/86.75>~6.0~,=KC4TEO(4)<33.02/86.75>~6.0~,
=KC4TEO(4)<33.02/86.75>~6.0~,=KC4TNQ(4)<35.82/86.33>~6.0~,=KC4WPS(4)<37.83/85.27>~6.0~, =KC4TNQ(4)<35.82/86.33>~6.0~,=KC4WPS(4)<37.83/85.27>~6.0~,=KC4WQ(4)<37.83/85.27>~6.0~,
=KC4WQ(4)<37.83/85.27>~6.0~,=KD4ADC(4)<33.02/86.75>~6.0~,=KD4EE(4)<37.83/85.27>~6.0~, =KD4ADC(4)<33.02/86.75>~6.0~,=KD4EE(4)<37.83/85.27>~6.0~,=KD4LT(4)<35.82/86.33>~6.0~,
=KD4LT(4)<35.82/86.33>~6.0~,=KD4ULD(4)<37.83/85.27>~6.0~,=KD5USA(4)<33.02/86.75>~6.0~, =KD4ULD(4)<37.83/85.27>~6.0~,=KD5USA(4)<33.02/86.75>~6.0~,=KE0L(4)<35.82/86.33>~6.0~,
=KE0L(4)<35.82/86.33>~6.0~,=KE4BFG(4)<35.82/86.33>~6.0~,=KE4GOI(4)<33.02/86.75>~6.0~, =KE4BFG(4)<35.82/86.33>~6.0~,=KE4GOI(4)<33.02/86.75>~6.0~,=KE4KY(4)<37.83/85.27>~6.0~,
=KE4KY(4)<37.83/85.27>~6.0~,=KE4MRX(4)<35.82/86.33>~6.0~,=KE4QCY(4)<33.02/86.75>~6.0~, =KE4MRX(4)<35.82/86.33>~6.0~,=KE4QCY(4)<33.02/86.75>~6.0~,=KE4SVI(4)<33.02/86.75>~6.0~,
=KE4SVI(4)<33.02/86.75>~6.0~,=KE4WE(4)<35.82/86.33>~6.0~,=KF4AV(4)<37.83/85.27>~6.0~, =KE4WE(4)<35.82/86.33>~6.0~,=KF4AV(4)<37.83/85.27>~6.0~,=KF4FMQ(4)<37.83/85.27>~6.0~,
=KF4FMQ(4)<37.83/85.27>~6.0~,=KF4RWA(4)<33.02/86.75>~6.0~,=KF4TY(4)<35.82/86.33>~6.0~, =KF4RWA(4)<33.02/86.75>~6.0~,=KF4TY(4)<35.82/86.33>~6.0~,=KF5MU(4)<37.83/85.27>~6.0~,
=KF5MU(4)<37.83/85.27>~6.0~,=KF7CG(4)<35.82/86.33>~6.0~,=KG2MD(4)<33.02/86.75>~6.0~, =KF7CG(4)<35.82/86.33>~6.0~,=KG2MD(4)<33.02/86.75>~6.0~,=KG4BIG(4)<37.83/85.27>~6.0~,
=KG4BIG(4)<37.83/85.27>~6.0~,=KG4CDL(4)<35.82/86.33>~6.0~,=KG4DBM(4)<35.82/86.33>~6.0~, =KG4CDL(4)<35.82/86.33>~6.0~,=KG4DBM(4)<35.82/86.33>~6.0~,=KG4LKY(4)<37.83/85.27>~6.0~,
=KG4LKY(4)<37.83/85.27>~6.0~,=KG4Q(4)<33.02/86.75>~6.0~,=KG4SRK(4)<37.83/85.27>~6.0~, =KG4Q(4)<33.02/86.75>~6.0~,=KG4SRK(4)<37.83/85.27>~6.0~,=KG4STL(4)<35.82/86.33>~6.0~,
=KG4STL(4)<35.82/86.33>~6.0~,=KH2AR(4)[7]<35.82/86.33>~6.0~,=KH2GM(4)<33.02/86.75>~6.0~, =KH2AR(4)[7]<35.82/86.33>~6.0~,=KH2GM(4)<33.02/86.75>~6.0~,=KI0EB(4)<37.83/85.27>~6.0~,
=KI0EB(4)<37.83/85.27>~6.0~,=KI4KWR(4)<33.02/86.75>~6.0~,=KI4PHE(4)<33.02/86.75>~6.0~, =KI4KWR(4)<33.02/86.75>~6.0~,=KI4PHE(4)<33.02/86.75>~6.0~,=KI4RKM(4)<35.82/86.33>~6.0~,
=KI4RKM(4)<35.82/86.33>~6.0~,=KI4VLI(4)<37.83/85.27>~6.0~,=KI4ZZJ(4)<35.82/86.33>~6.0~, =KI4VLI(4)<37.83/85.27>~6.0~,=KI4ZZJ(4)<35.82/86.33>~6.0~,=KI5GX(4)<33.02/86.75>~6.0~,
=KI5GX(4)<33.02/86.75>~6.0~,=KJ4A(4)<37.83/85.27>~6.0~,=KJ4AOM(4)<37.83/85.27>~6.0~, =KJ4A(4)<37.83/85.27>~6.0~,=KJ4AOM(4)<37.83/85.27>~6.0~,=KJ4BIX(4)<35.82/86.33>~6.0~,
=KJ4BIX(4)<35.82/86.33>~6.0~,=KJ4JPV(4)<35.82/86.33>~6.0~,=KJ4LTA(4)<33.02/86.75>~6.0~, =KJ4JPV(4)<35.82/86.33>~6.0~,=KJ4LTA(4)<33.02/86.75>~6.0~,=KJ4M(4)<33.02/86.75>~6.0~,
=KJ4M(4)<33.02/86.75>~6.0~,=KJ4ND(4)<37.83/85.27>~6.0~,=KJ4UGO(4)<33.02/86.75>~6.0~, =KJ4ND(4)<37.83/85.27>~6.0~,=KJ4UGO(4)<33.02/86.75>~6.0~,=KJ4YLR(4)<37.83/85.27>~6.0~,
=KJ4YLR(4)<37.83/85.27>~6.0~,=KJ6YXI(4)<35.82/86.33>~6.0~,=KK2A(4)<35.82/86.33>~6.0~, =KJ6YXI(4)<35.82/86.33>~6.0~,=KK2A(4)<35.82/86.33>~6.0~,=KK4JW(4)<37.83/85.27>~6.0~,
=KK4JW(4)<37.83/85.27>~6.0~,=KK4OVW(4)<35.82/86.33>~6.0~,=KK4XA(4)<35.82/86.33>~6.0~, =KK4OVW(4)<35.82/86.33>~6.0~,=KK4XA(4)<35.82/86.33>~6.0~,=KL1SE(4)<37.83/85.27>~6.0~,
=KL1SE(4)<37.83/85.27>~6.0~,=KM1Z(4)<35.82/86.33>~6.0~,=KM4CH(4)<37.83/85.27>~6.0~, =KM1Z(4)<35.82/86.33>~6.0~,=KM4CH(4)<37.83/85.27>~6.0~,=KM4CRC(4)<35.82/86.33>~6.0~,
=KM4CRC(4)<35.82/86.33>~6.0~,=KM4FO(4)<37.83/85.27>~6.0~,=KM4JAD(4)<35.82/86.33>~6.0~, =KM4FO(4)<37.83/85.27>~6.0~,=KM4JAD(4)<35.82/86.33>~6.0~,=KM4RO(4)<37.83/85.27>~6.0~,
=KM4RO(4)<37.83/85.27>~6.0~,=KM4RT(4)<35.82/86.33>~6.0~,=KM4VI(4)<35.82/86.33>~6.0~, =KM4RT(4)<35.82/86.33>~6.0~,=KM4VI(4)<35.82/86.33>~6.0~,=KN4CG(4)<37.83/85.27>~6.0~,
=KN4CG(4)<37.83/85.27>~6.0~,=KN4CNU(4)<35.82/86.33>~6.0~,=KN4COE(4)<37.83/85.27>~6.0~, =KN4CNU(4)<35.82/86.33>~6.0~,=KN4COE(4)<37.83/85.27>~6.0~,=KN4DUA(4)<35.82/86.33>~6.0~,
=KN4DUA(4)<35.82/86.33>~6.0~,=KN4IXT(4)<35.82/86.33>~6.0~,=KN4LIU(4)<35.82/86.33>~6.0~, =KN4IXT(4)<35.82/86.33>~6.0~,=KN4LIU(4)<35.82/86.33>~6.0~,=KN4PHS(4)<33.02/86.75>~6.0~,
=KN4PHS(4)<33.02/86.75>~6.0~,=KN4VKW(4)<35.82/86.33>~6.0~,=KO4AWC(4)<33.02/86.75>~6.0~, =KN4VKW(4)<35.82/86.33>~6.0~,=KO4AWC(4)<33.02/86.75>~6.0~,=KO4CTP(4)<35.82/86.33>~6.0~,
=KO4CTP(4)<35.82/86.33>~6.0~,=KO4IFG(4)<35.82/86.33>~6.0~,=KO4MAO(4)<35.82/86.33>~6.0~, =KO4IFG(4)<35.82/86.33>~6.0~,=KO4MAO(4)<35.82/86.33>~6.0~,=KO4O(4)<33.02/86.75>~6.0~,
=KO4O(4)<33.02/86.75>~6.0~,=KO4OL(4)<37.83/85.27>~6.0~,=KO4PZX(4)<35.82/86.33>~6.0~, =KO4OL(4)<37.83/85.27>~6.0~,=KO4PZX(4)<35.82/86.33>~6.0~,=KO4SKK(4)<33.02/86.75>~6.0~,
=KO4SKK(4)<33.02/86.75>~6.0~,=KO4TFE(4)<37.83/85.27>~6.0~,=KO4UHE(4)<37.83/85.27>~6.0~, =KO4TFE(4)<37.83/85.27>~6.0~,=KO4UHE(4)<37.83/85.27>~6.0~,=KO4UOJ(4)<35.82/86.33>~6.0~,
=KO4UOJ(4)<35.82/86.33>~6.0~,=KO4XJ(4)<37.83/85.27>~6.0~,=KO4YED(4)<35.82/86.33>~6.0~, =KO4XJ(4)<37.83/85.27>~6.0~,=KO4YED(4)<35.82/86.33>~6.0~,=KO4Z(4)<35.82/86.33>~6.0~,
=KO4Z(4)<35.82/86.33>~6.0~,=KP4X(4)<35.82/86.33>~6.0~,=KR4F(4)<33.02/86.75>~6.0~, =KP4X(4)<35.82/86.33>~6.0~,=KR4F(4)<33.02/86.75>~6.0~,=KS4VOL(4)<35.82/86.33>~6.0~,
=KS4VOL(4)<35.82/86.33>~6.0~,=KS4X(4)<35.82/86.33>~6.0~,=KS4YT(4)<33.02/86.75>~6.0~, =KS4X(4)<35.82/86.33>~6.0~,=KS4YT(4)<33.02/86.75>~6.0~,=KT4DW(4)<35.82/86.33>~6.0~,
=KT4DW(4)<35.82/86.33>~6.0~,=KT4E(4)<35.82/86.33>~6.0~,=KT4O(4)<35.82/86.33>~6.0~, =KT4E(4)<35.82/86.33>~6.0~,=KT4O(4)<35.82/86.33>~6.0~,=KT4RH(4)<35.82/86.33>~6.0~,
=KT4RH(4)<35.82/86.33>~6.0~,=KT4RSQ(4)<35.82/86.33>~6.0~,=KT4TN(4)<35.82/86.33>~6.0~, =KT4RSQ(4)<35.82/86.33>~6.0~,=KT4TN(4)<35.82/86.33>~6.0~,=KT4XA(4)<33.02/86.75>~6.0~,
=KT4XA(4)<33.02/86.75>~6.0~,=KU4A(4)<37.83/85.27>~6.0~,=KU4H(4)<33.02/86.75>~6.0~, =KU4A(4)<37.83/85.27>~6.0~,=KU4H(4)<33.02/86.75>~6.0~,=KU4RN(4)<35.82/86.33>~6.0~,
=KU4RN(4)<35.82/86.33>~6.0~,=KV4AC(4)<33.02/86.75>~6.0~,=KV4T(4)<33.02/86.75>~6.0~, =KV4AC(4)<33.02/86.75>~6.0~,=KV4T(4)<33.02/86.75>~6.0~,=KW4J(4)<33.02/86.75>~6.0~,
=KW4J(4)<33.02/86.75>~6.0~,=KW4LU(4)<35.82/86.33>~6.0~,=KW4SW(4)<33.02/86.75>~6.0~, =KW4LU(4)<35.82/86.33>~6.0~,=KW4SW(4)<33.02/86.75>~6.0~,=KW4YA(4)<37.83/85.27>~6.0~,
=KW4YA(4)<37.83/85.27>~6.0~,=KX3Y(4)<33.02/86.75>~6.0~,=KX4AV(4)<37.83/85.27>~6.0~, =KX3Y(4)<33.02/86.75>~6.0~,=KX4AV(4)<37.83/85.27>~6.0~,=KX4BI(4)<33.02/86.75>~6.0~,
=KX4BI(4)<33.02/86.75>~6.0~,=KX4I(4)<33.02/86.75>~6.0~,=KX4X(4)<33.02/86.75>~6.0~, =KX4I(4)<33.02/86.75>~6.0~,=KX4X(4)<33.02/86.75>~6.0~,=KY3G(4)<37.83/85.27>~6.0~,
=KY3G(4)<37.83/85.27>~6.0~,=KY4AR(4)<37.83/85.27>~6.0~,=KY4ARC(4)<37.83/85.27>~6.0~, =KY4AR(4)<37.83/85.27>~6.0~,=KY4ARC(4)<37.83/85.27>~6.0~,=KY4BG(4)<37.83/85.27>~6.0~,
=KY4BG(4)<37.83/85.27>~6.0~,=KY4BP(4)<37.83/85.27>~6.0~,=KY4G(4)<33.02/86.75>~6.0~, =KY4BP(4)<37.83/85.27>~6.0~,=KY4G(4)<33.02/86.75>~6.0~,=KY4HV(4)<33.02/86.75>~6.0~,
=KY4HV(4)<33.02/86.75>~6.0~,=KY4KY(4)<37.83/85.27>~6.0~,=KY4L(4)<35.82/86.33>~6.0~, =KY4KY(4)<37.83/85.27>~6.0~,=KY4L(4)<35.82/86.33>~6.0~,=KY4MAK(4)<37.83/85.27>~6.0~,
=KY4MAK(4)<37.83/85.27>~6.0~,=KY4X(4)<37.83/85.27>~6.0~,=KZ4A(4)<33.02/86.75>~6.0~, =KY4X(4)<37.83/85.27>~6.0~,=KZ4A(4)<33.02/86.75>~6.0~,=N0ZO(4)<33.02/86.75>~6.0~,
=N0ZO(4)<33.02/86.75>~6.0~,=N1OKL(4)<35.82/86.33>~6.0~,=N3CY(4)<33.02/86.75>~6.0~, =N1OKL(4)<35.82/86.33>~6.0~,=N3CY(4)<33.02/86.75>~6.0~,=N4AER(4)<35.82/86.33>~6.0~,
=N4AER(4)<35.82/86.33>~6.0~,=N4ARO(4)<35.82/86.33>~6.0~,=N4ATU(4)<35.82/86.33>~6.0~, =N4ARO(4)<35.82/86.33>~6.0~,=N4ATU(4)<35.82/86.33>~6.0~,=N4AU(4)<33.02/86.75>~6.0~,
=N4AU(4)<33.02/86.75>~6.0~,=N4CVG(4)<37.83/85.27>~6.0~,=N4DTF(4)<35.82/86.33>~6.0~, =N4CVG(4)<37.83/85.27>~6.0~,=N4DTF(4)<35.82/86.33>~6.0~,=N4DW(4)<35.82/86.33>~6.0~,
=N4DW(4)<35.82/86.33>~6.0~,=N4DXN(4)<35.82/86.33>~6.0~,=N4EMP(4)<33.02/86.75>~6.0~, =N4DXN(4)<35.82/86.33>~6.0~,=N4EMP(4)<33.02/86.75>~6.0~,=N4FR(4)<35.82/86.33>~6.0~,
=N4FR(4)<35.82/86.33>~6.0~,=N4FZ(4)<37.83/85.27>~6.0~,=N4GO(4)<37.83/85.27>~6.0~, =N4FZ(4)<37.83/85.27>~6.0~,=N4GO(4)<37.83/85.27>~6.0~,=N4IDH(4)<33.02/86.75>~6.0~,
=N4IDH(4)<33.02/86.75>~6.0~,=N4JDB(4)<33.02/86.75>~6.0~,=N4JEH(4)<33.02/86.75>~6.0~, =N4JDB(4)<33.02/86.75>~6.0~,=N4JEH(4)<33.02/86.75>~6.0~,=N4JKO(4)<37.83/85.27>~6.0~,
=N4JKO(4)<37.83/85.27>~6.0~,=N4JN(4)<33.02/86.75>~6.0~,=N4JR(4)<33.02/86.75>~6.0~, =N4JN(4)<33.02/86.75>~6.0~,=N4JR(4)<33.02/86.75>~6.0~,=N4JRG(4)<37.83/85.27>~6.0~,
=N4JRG(4)<37.83/85.27>~6.0~,=N4KGL(4)<33.02/86.75>~6.0~,=N4KH(4)<33.02/86.75>~6.0~, =N4KGL(4)<33.02/86.75>~6.0~,=N4KH(4)<33.02/86.75>~6.0~,=N4KJR(4)<37.83/85.27>~6.0~,
=N4KJR(4)<37.83/85.27>~6.0~,=N4KZ(4)<37.83/85.27>~6.0~,=N4LS(4)<33.02/86.75>~6.0~, =N4KZ(4)<37.83/85.27>~6.0~,=N4LS(4)<33.02/86.75>~6.0~,=N4LT(4)<35.82/86.33>~6.0~,
=N4LT(4)<35.82/86.33>~6.0~,=N4MCC(4)<35.82/86.33>~6.0~,=N4MJ(4)<35.82/86.33>~6.0~, =N4MCC(4)<35.82/86.33>~6.0~,=N4MJ(4)<35.82/86.33>~6.0~,=N4MRM(4)<37.83/85.27>~6.0~,
=N4MRM(4)<37.83/85.27>~6.0~,=N4MTE(4)<35.82/86.33>~6.0~,=N4MZ(4)<33.02/86.75>~6.0~, =N4MTE(4)<35.82/86.33>~6.0~,=N4MZ(4)<33.02/86.75>~6.0~,=N4NA(4)<35.82/86.33>~6.0~,
=N4NA(4)<35.82/86.33>~6.0~,=N4NM(4)<33.02/86.75>~6.0~,=N4NP(4)<37.83/85.27>~6.0~, =N4NM(4)<33.02/86.75>~6.0~,=N4NP(4)<37.83/85.27>~6.0~,=N4NT(4)<35.82/86.33>~6.0~,
=N4NT(4)<35.82/86.33>~6.0~,=N4OG(4)<37.83/85.27>~6.0~,=N4OPI(4)<35.82/86.33>~6.0~, =N4OG(4)<37.83/85.27>~6.0~,=N4OPI(4)<35.82/86.33>~6.0~,=N4PWG(4)<35.82/86.33>~6.0~,
=N4PWG(4)<35.82/86.33>~6.0~,=N4PX(4)<35.82/86.33>~6.0~,=N4QS(4)<37.83/85.27>~6.0~, =N4PX(4)<35.82/86.33>~6.0~,=N4QS(4)<37.83/85.27>~6.0~,=N4ROA(4)<37.83/85.27>~6.0~,
=N4ROA(4)<37.83/85.27>~6.0~,=N4RRR(4)<35.82/86.33>~6.0~,=N4RT(4)<33.02/86.75>~6.0~, =N4RRR(4)<35.82/86.33>~6.0~,=N4RT(4)<33.02/86.75>~6.0~,=N4RZ(4)<37.83/85.27>~6.0~,
=N4RZ(4)<37.83/85.27>~6.0~,=N4SEV(4)<33.02/86.75>~6.0~,=N4SS(4)<37.83/85.27>~6.0~, =N4SEV(4)<33.02/86.75>~6.0~,=N4SS(4)<37.83/85.27>~6.0~,=N4TY(4)<37.83/85.27>~6.0~,
=N4TY(4)<37.83/85.27>~6.0~,=N4UC(4)<33.02/86.75>~6.0~,=N4UL(4)<37.83/85.27>~6.0~, =N4UC(4)<33.02/86.75>~6.0~,=N4UL(4)<37.83/85.27>~6.0~,=N4UW(4)<35.82/86.33>~6.0~,
=N4UW(4)<35.82/86.33>~6.0~,=N4VN(4)<33.02/86.75>~6.0~,=N4WE(4)<33.02/86.75>~6.0~, =N4VN(4)<33.02/86.75>~6.0~,=N4WE(4)<33.02/86.75>~6.0~,=N4ZZ(4)<35.82/86.33>~6.0~,
=N4ZZ(4)<35.82/86.33>~6.0~,=N5INV(4)<35.82/86.33>~6.0~,=N6MA(4)<35.82/86.33>~6.0~, =N5INV(4)<35.82/86.33>~6.0~,=N6MA(4)<35.82/86.33>~6.0~,=N7CR(4)<33.02/86.75>~6.0~,
=N7CR(4)<33.02/86.75>~6.0~,=N7KDT(4)<33.02/86.75>~6.0~,=NA4A(4)<33.02/86.75>~6.0~, =N7KDT(4)<33.02/86.75>~6.0~,=NA4A(4)<33.02/86.75>~6.0~,=NA4C(4)<35.82/86.33>~6.0~,
=NA4C(4)<35.82/86.33>~6.0~,=NA4D(4)<37.83/85.27>~6.0~,=NA4MM(4)<33.02/86.75>~6.0~, =NA4D(4)<37.83/85.27>~6.0~,=NA4MM(4)<33.02/86.75>~6.0~,=NA4W(4)<33.02/86.75>~6.0~,
=NA4W(4)<33.02/86.75>~6.0~,=ND4U(4)<35.82/86.33>~6.0~,=ND4X(4)<37.83/85.27>~6.0~, =ND4U(4)<35.82/86.33>~6.0~,=ND4X(4)<37.83/85.27>~6.0~,=ND4Y(4)<37.83/85.27>~6.0~,
=ND4Y(4)<37.83/85.27>~6.0~,=NE5W(4)<33.02/86.75>~6.0~,=NF4J(4)<33.02/86.75>~6.0~, =NE5W(4)<33.02/86.75>~6.0~,=NF4J(4)<33.02/86.75>~6.0~,=NF7D(4)<33.02/86.75>~6.0~,
=NF7D(4)<33.02/86.75>~6.0~,=NH6T(4)<33.02/86.75>~6.0~,=NJ4P(4)<35.82/86.33>~6.0~, =NH6T(4)<33.02/86.75>~6.0~,=NJ4P(4)<35.82/86.33>~6.0~,=NK4I(4)<35.82/86.33>~6.0~,
=NK4I(4)<35.82/86.33>~6.0~,=NK4T(4)<33.02/86.75>~6.0~,=NN4H(4)<37.83/85.27>~6.0~, =NK4T(4)<33.02/86.75>~6.0~,=NN4H(4)<37.83/85.27>~6.0~,=NN4NT(4)<33.02/86.75>~6.0~,
=NN4NT(4)<33.02/86.75>~6.0~,=NN4SA(4)<33.02/86.75>~6.0~,=NN5SS(4)<35.82/86.33>~6.0~, =NN4SA(4)<33.02/86.75>~6.0~,=NN5SS(4)<35.82/86.33>~6.0~,=NP3FB(4)<33.02/86.75>~6.0~,
=NP3FB(4)<33.02/86.75>~6.0~,=NP4AC(4)<35.82/86.33>~6.0~,=NQ4Y(4)<35.82/86.33>~6.0~, =NP4AC(4)<35.82/86.33>~6.0~,=NQ4Y(4)<35.82/86.33>~6.0~,=NR4L(4)<35.82/86.33>~6.0~,
=NR4L(4)<35.82/86.33>~6.0~,=NS2X(4)<35.82/86.33>~6.0~,=NS4X(4)<35.82/86.33>~6.0~, =NS2X(4)<35.82/86.33>~6.0~,=NS4X(4)<35.82/86.33>~6.0~,=NT4J(4)<35.82/86.33>~6.0~,
=NT4J(4)<35.82/86.33>~6.0~,=NT4W(4)<37.83/85.27>~6.0~,=NU4B(4)<35.82/86.33>~6.0~, =NT4W(4)<37.83/85.27>~6.0~,=NU4B(4)<35.82/86.33>~6.0~,=NU4N(4)<37.83/85.27>~6.0~,
=NU4N(4)<37.83/85.27>~6.0~,=NV4G(4)<35.82/86.33>~6.0~,=NY4JB(4)<35.82/86.33>~6.0~, =NV4G(4)<35.82/86.33>~6.0~,=NY4JB(4)<35.82/86.33>~6.0~,=W0AG(4)<35.82/86.33>~6.0~,
=W0AG(4)<35.82/86.33>~6.0~,=W0SK(4)<35.82/86.33>~6.0~,=W1EG(4)<35.82/86.33>~6.0~, =W0SK(4)<35.82/86.33>~6.0~,=W1EG(4)<35.82/86.33>~6.0~,=W1GKT(4)<33.02/86.75>~6.0~,
=W1GKT(4)<33.02/86.75>~6.0~,=W1LTC(4)<35.82/86.33>~6.0~,=W1WSF(4)<35.82/86.33>~6.0~, =W1LTC(4)<35.82/86.33>~6.0~,=W1WSF(4)<35.82/86.33>~6.0~,=W2BJN(4)<33.02/86.75>~6.0~,
=W2BJN(4)<33.02/86.75>~6.0~,=W2LAT(4)<33.02/86.75>~6.0~,=W2RSS(4)<37.83/85.27>~6.0~, =W2LAT(4)<33.02/86.75>~6.0~,=W2RSS(4)<37.83/85.27>~6.0~,=W3DEV(4)<35.82/86.33>~6.0~,
=W3DEV(4)<35.82/86.33>~6.0~,=W3TB(4)<35.82/86.33>~6.0~,=W4AWE(4)<35.82/86.33>~6.0~, =W3TB(4)<35.82/86.33>~6.0~,=W4AWE(4)<35.82/86.33>~6.0~,=W4BAX(4)<35.82/86.33>~6.0~,
=W4BAX(4)<35.82/86.33>~6.0~,=W4BCG(4)<35.82/86.33>~6.0~,=W4BLT(4)<33.02/86.75>~6.0~, =W4BCG(4)<35.82/86.33>~6.0~,=W4BLT(4)<33.02/86.75>~6.0~,=W4CDA(4)<37.83/85.27>~6.0~,
=W4CDA(4)<37.83/85.27>~6.0~,=W4CMG(4)<35.82/86.33>~6.0~,=W4CN(4)<37.83/85.27>~6.0~, =W4CMG(4)<35.82/86.33>~6.0~,=W4CN(4)<37.83/85.27>~6.0~,=W4CQE(4)<35.82/86.33>~6.0~,
=W4CQE(4)<35.82/86.33>~6.0~,=W4CRV(4)<35.82/86.33>~6.0~,=W4DAN(4)<35.82/86.33>~6.0~, =W4CRV(4)<35.82/86.33>~6.0~,=W4DAN(4)<35.82/86.33>~6.0~,=W4DHN(4)<33.02/86.75>~6.0~,
=W4DHN(4)<33.02/86.75>~6.0~,=W4DTA(4)<35.82/86.33>~6.0~,=W4EM(4)<35.82/86.33>~6.0~, =W4DTA(4)<35.82/86.33>~6.0~,=W4EM(4)<35.82/86.33>~6.0~,=W4ER(4)<33.02/86.75>~6.0~,
=W4ER(4)<33.02/86.75>~6.0~,=W4ETA(4)<35.82/86.33>~6.0~,=W4GGM(4)<35.82/86.33>~6.0~, =W4ETA(4)<35.82/86.33>~6.0~,=W4GGM(4)<35.82/86.33>~6.0~,=W4GKM(4)<35.82/86.33>~6.0~,
=W4GKM(4)<35.82/86.33>~6.0~,=W4GON(4)<35.82/86.33>~6.0~,=W4HLR(4)<35.82/86.33>~6.0~, =W4GON(4)<35.82/86.33>~6.0~,=W4HLR(4)<35.82/86.33>~6.0~,=W4IAX(4)<33.02/86.75>~6.0~,
=W4IAX(4)<33.02/86.75>~6.0~,=W4IL(4)<35.82/86.33>~6.0~,=W4IOD(4)<37.83/85.27>~6.0~, =W4IL(4)<35.82/86.33>~6.0~,=W4IOD(4)<37.83/85.27>~6.0~,=W4JH(4)<35.82/86.33>~6.0~,
=W4JH(4)<35.82/86.33>~6.0~,=W4JNB(4)<33.02/86.75>~6.0~,=W4JUU(4)<35.82/86.33>~6.0~, =W4JNB(4)<33.02/86.75>~6.0~,=W4JUU(4)<35.82/86.33>~6.0~,=W4KW(4)<35.82/86.33>~6.0~,
=W4KW(4)<35.82/86.33>~6.0~,=W4LC(4)<37.83/85.27>~6.0~,=W4MRF(4)<37.83/85.27>~6.0~, =W4LC(4)<37.83/85.27>~6.0~,=W4MRF(4)<37.83/85.27>~6.0~,=W4NBS(4)<33.02/86.75>~6.0~,
=W4NBS(4)<33.02/86.75>~6.0~,=W4NI(4)<35.82/86.33>~6.0~,=W4NJA(4)<37.83/85.27>~6.0~, =W4NI(4)<35.82/86.33>~6.0~,=W4NJA(4)<37.83/85.27>~6.0~,=W4NNF(4)<33.02/86.75>~6.0~,
=W4NNF(4)<33.02/86.75>~6.0~,=W4NZ(4)<35.82/86.33>~6.0~,=W4OLB(4)<35.82/86.33>~6.0~, =W4NZ(4)<35.82/86.33>~6.0~,=W4OLB(4)<35.82/86.33>~6.0~,=W4PA(4)<35.82/86.33>~6.0~,
=W4PA(4)<35.82/86.33>~6.0~,=W4PCA(4)<35.82/86.33>~6.0~,=W4PF(4)<37.83/85.27>~6.0~, =W4PCA(4)<35.82/86.33>~6.0~,=W4PF(4)<37.83/85.27>~6.0~,=W4PUD(4)<35.82/86.33>~6.0~,
=W4PUD(4)<35.82/86.33>~6.0~,=W4RLB(4)<37.83/85.27>~6.0~,=W4RYW(4)<33.02/86.75>~6.0~, =W4RLB(4)<37.83/85.27>~6.0~,=W4RYW(4)<33.02/86.75>~6.0~,=W4SDX(4)<35.82/86.33>~6.0~,
=W4SDX(4)<35.82/86.33>~6.0~,=W4SK(4)<35.82/86.33>~6.0~,=W4SSF(4)<35.82/86.33>~6.0~, =W4SK(4)<35.82/86.33>~6.0~,=W4SSF(4)<35.82/86.33>~6.0~,=W4SV(4)<35.82/86.33>~6.0~,
=W4SV(4)<35.82/86.33>~6.0~,=W4TLK(4)<35.82/86.33>~6.0~,=W4TRC(4)<35.82/86.33>~6.0~, =W4TLK(4)<35.82/86.33>~6.0~,=W4TRC(4)<35.82/86.33>~6.0~,=W4UAL(4)<33.02/86.75>~6.0~,
=W4UAL(4)<33.02/86.75>~6.0~,=W4UT(4)<35.82/86.33>~6.0~,=W4UW(4)<35.82/86.33>~6.0~, =W4UT(4)<35.82/86.33>~6.0~,=W4UW(4)<35.82/86.33>~6.0~,=W4UWC(4)<37.83/85.27>~6.0~,
=W4UWC(4)<37.83/85.27>~6.0~,=W4VFF(4)<35.82/86.33>~6.0~,=W4WC(4)<35.82/86.33>~6.0~, =W4VFF(4)<35.82/86.33>~6.0~,=W4WC(4)<35.82/86.33>~6.0~,=W4WKU(4)<37.83/85.27>~6.0~,
=W4WKU(4)<37.83/85.27>~6.0~,=W4WTS(4)<35.82/86.33>~6.0~,=W4WWV(4)<35.82/86.33>~6.0~, =W4WTS(4)<35.82/86.33>~6.0~,=W4WWV(4)<35.82/86.33>~6.0~,=W4XK(4)<35.82/86.33>~6.0~,
=W4XK(4)<35.82/86.33>~6.0~,=W4YTO(4)<33.02/86.75>~6.0~,=W5ACQ(4)<35.82/86.33>~6.0~, =W4YTO(4)<33.02/86.75>~6.0~,=W5ACQ(4)<35.82/86.33>~6.0~,=W5HVV(4)<35.82/86.33>~6.0~,
=W5HVV(4)<35.82/86.33>~6.0~,=W5MX(4)<37.83/85.27>~6.0~,=W5NZ(4)<33.02/86.75>~6.0~, =W5MX(4)<37.83/85.27>~6.0~,=W5NZ(4)<33.02/86.75>~6.0~,=W5PET(4)<37.83/85.27>~6.0~,
=W5PET(4)<37.83/85.27>~6.0~,=W6AWL(4)<35.82/86.33>~6.0~,=W6EMM(4)<35.82/86.33>~6.0~, =W6AWL(4)<35.82/86.33>~6.0~,=W6EMM(4)<35.82/86.33>~6.0~,=W6LX(4)<37.83/85.27>~6.0~,
=W6LX(4)<37.83/85.27>~6.0~,=W6UB(4)<35.82/86.33>~6.0~,=WA1FCN(4)<33.02/86.75>~6.0~, =W6UB(4)<35.82/86.33>~6.0~,=WA1FCN(4)<33.02/86.75>~6.0~,=WA4AA(4)<35.82/86.33>~6.0~,
=WA4AA(4)<35.82/86.33>~6.0~,=WA4CAX(4)<33.02/86.75>~6.0~,=WA4CDP(4)<33.02/86.75>~6.0~, =WA4CAX(4)<33.02/86.75>~6.0~,=WA4CDP(4)<33.02/86.75>~6.0~,=WA4CQG(4)<33.02/86.75>~6.0~,
=WA4CQG(4)<33.02/86.75>~6.0~,=WA4GGK(4)<33.02/86.75>~6.0~,=WA4HR(4)<35.82/86.33>~6.0~, =WA4GGK(4)<33.02/86.75>~6.0~,=WA4HR(4)<35.82/86.33>~6.0~,=WA4JA(4)<35.82/86.33>~6.0~,
=WA4JA(4)<35.82/86.33>~6.0~,=WA4JK(4)<33.02/86.75>~6.0~,=WA4JQS(4)<37.83/85.27>~6.0~, =WA4JK(4)<33.02/86.75>~6.0~,=WA4JQS(4)<37.83/85.27>~6.0~,=WA4KY(4)<37.83/85.27>~6.0~,
=WA4KY(4)<37.83/85.27>~6.0~,=WA4VEK(4)<33.02/86.75>~6.0~,=WA4VGZ(4)<35.82/86.33>~6.0~, =WA4VEK(4)<33.02/86.75>~6.0~,=WA4VGZ(4)<35.82/86.33>~6.0~,=WA4WZR(4)<35.82/86.33>~6.0~,
=WA4WZR(4)<35.82/86.33>~6.0~,=WA4YJB(4)<37.83/85.27>~6.0~,=WA4ZXV(4)<33.02/86.75>~6.0~, =WA4YJB(4)<37.83/85.27>~6.0~,=WA4ZXV(4)<33.02/86.75>~6.0~,=WA5POK(4)<35.82/86.33>~6.0~,
=WA5POK(4)<35.82/86.33>~6.0~,=WB0CJB(4)<35.82/86.33>~6.0~,=WB4E(4)<35.82/86.33>~6.0~, =WB0CJB(4)<35.82/86.33>~6.0~,=WB4E(4)<35.82/86.33>~6.0~,=WB4FWQ(4)<35.82/86.33>~6.0~,
=WB4FWQ(4)<35.82/86.33>~6.0~,=WB4GHZ(4)<35.82/86.33>~6.0~,=WB4HMA(4)<35.82/86.33>~6.0~, =WB4GHZ(4)<35.82/86.33>~6.0~,=WB4HMA(4)<35.82/86.33>~6.0~,=WB4IT(4)<33.02/86.75>~6.0~,
=WB4IT(4)<33.02/86.75>~6.0~,=WB4WXE(4)<33.02/86.75>~6.0~,=WB4YDL(4)<35.82/86.33>~6.0~, =WB4WXE(4)<33.02/86.75>~6.0~,=WB4YDL(4)<35.82/86.33>~6.0~,=WB4YDY(4)<35.82/86.33>~6.0~,
=WB4YDY(4)<35.82/86.33>~6.0~,=WB4ZBI(4)<35.82/86.33>~6.0~,=WB5WAJ(4)<35.82/86.33>~6.0~, =WB4ZBI(4)<35.82/86.33>~6.0~,=WB5WAJ(4)<35.82/86.33>~6.0~,=WC4AR(4)<35.82/86.33>~6.0~,
=WC4AR(4)<35.82/86.33>~6.0~,=WC4DC(4)<35.82/86.33>~6.0~,=WD4CFN(4)<35.82/86.33>~6.0~, =WC4DC(4)<35.82/86.33>~6.0~,=WD4CFN(4)<35.82/86.33>~6.0~,=WD4KTF(4)<37.83/85.27>~6.0~,
=WD4KTF(4)<37.83/85.27>~6.0~,=WD4OHD(4)<35.82/86.33>~6.0~,=WD4PTJ(4)<35.82/86.33>~6.0~, =WD4OHD(4)<35.82/86.33>~6.0~,=WD4PTJ(4)<35.82/86.33>~6.0~,=WD5FCA(4)<33.02/86.75>~6.0~,
=WD5FCA(4)<33.02/86.75>~6.0~,=WE5P(4)<37.83/85.27>~6.0~,=WF3T(4)<37.83/85.27>~6.0~, =WE5P(4)<37.83/85.27>~6.0~,=WF3T(4)<37.83/85.27>~6.0~,=WF7T(4)<35.82/86.33>~6.0~,
=WF7T(4)<35.82/86.33>~6.0~,=WH6DM(4)<33.02/86.75>~6.0~,=WI4MPY(4)<37.83/85.27>~6.0~, =WH6DM(4)<33.02/86.75>~6.0~,=WI4MPY(4)<37.83/85.27>~6.0~,=WM4Q(4)<35.82/86.33>~6.0~,
=WM4Q(4)<35.82/86.33>~6.0~,=WN4AT(4)<33.02/86.75>~6.0~,=WR3O(4)<35.82/86.33>~6.0~, =WN4AT(4)<33.02/86.75>~6.0~,=WR3O(4)<35.82/86.33>~6.0~,=WT4U(4)<35.82/86.33>~6.0~,
=WT4U(4)<35.82/86.33>~6.0~,=WT4W(4)<33.02/86.75>~6.0~,=WU7Q(4)<35.82/86.33>~6.0~, =WT4W(4)<33.02/86.75>~6.0~,=WU7Q(4)<35.82/86.33>~6.0~,=WV4P(4)<35.82/86.33>~6.0~,
=WV4P(4)<35.82/86.33>~6.0~,=WW0CJ(4)<35.82/86.33>~6.0~,=WW4N(4)<35.82/86.33>~6.0~, =WW0CJ(4)<35.82/86.33>~6.0~,=WW4N(4)<35.82/86.33>~6.0~,=WW4R(4)<35.82/86.33>~6.0~,
=WW4R(4)<35.82/86.33>~6.0~,=WW5M(4)<35.82/86.33>~6.0~,=WW5X(4)<33.02/86.75>~6.0~, =WW5M(4)<35.82/86.33>~6.0~,=WW5X(4)<33.02/86.75>~6.0~,=WX4HP(4)<33.02/86.75>~6.0~,
=WX4HP(4)<33.02/86.75>~6.0~,=WX4W(4)<37.83/85.27>~6.0~,=WZ4F(4)<33.02/86.75>~6.0~, =WX4W(4)<37.83/85.27>~6.0~,=WZ4F(4)<33.02/86.75>~6.0~,
# MT-WY # MT-WY
=AC7AF(4)[7]<42.70/106.98>~7.0~,=AE7AP(4)[6]<46.77/111.32>~7.0~,=AL7RT(4)[6]<46.77/111.32>~7.0~, =AC7AF(4)[7]<42.70/106.98>~7.0~,=AE7AP(4)[6]<46.77/111.32>~7.0~,=AL7RT(4)[6]<46.77/111.32>~7.0~,
=K0SN(4)[6]<46.77/111.32>~7.0~,=K1AUS(4)[7]<46.77/111.32>~7.0~,=K5MH(4)[6]<46.77/111.32>~7.0~, =K0SN(4)[6]<46.77/111.32>~7.0~,=K1AUS(4)[7]<46.77/111.32>~7.0~,=K5MH(4)[6]<46.77/111.32>~7.0~,
@ -3497,30 +3494,30 @@ Palmyra & Jarvis Islands: 31: 61: OC: 5.87: 162.07: 11.0: KH5:
AH5,KH5,NH5,WH5; AH5,KH5,NH5,WH5;
# ADIF 110 # ADIF 110
Hawaii: 31: 61: OC: 21.12: 157.48: 10.0: KH6: Hawaii: 31: 61: OC: 21.12: 157.48: 10.0: KH6:
AH6,AH7,KH6,KH7,NH6,NH7,WH6,WH7,=AA2TT,=AA3CM,=AB7RT,=K1ENT,=K2GT,=K3RW,=K4XV,=K5ZYO,=K6ARS, AH6,AH7,KH6,KH7,NH6,NH7,WH6,WH7,=AA3CM,=AB7RT,=K1ENT,=K2GT,=K3RW,=K4XV,=K5ZYO,=K6ARS,=K6BDN,
=K6BDN,=K6DCA,=K6HI,=K7DWJ,=KA1MRC,=KA6MCS,=KB6EGA,=KC8UHF,=KC9WIB,=KD0OLJ,=KD0VQY,=KD6NFT, =K6DCA,=K6HI,=K7DWJ,=KA1MRC,=KB6EGA,=KC8UHF,=KC9WIB,=KD0OLJ,=KD0VQY,=KD6NFT,=KE0TCW,=KE6AEZ,
=KE0TCW,=KE6AEZ,=KE8LGD,=KF0FMQ,=KF5QMN,=KF5VYL,=KF6PHC,=KF7SEE,=KG6HWF,=KG6JSH,=KG7ART,=KH0WJ, =KE8LGD,=KF0FMQ,=KF5QMN,=KF5VYL,=KF6PHC,=KF7SEE,=KG6HWF,=KG6JSH,=KG7ART,=KH0WJ,=KH3AE,=KI5YDR,
=KH3AE,=KI5YDR,=KJ6LVS,=KJ6WIE,=KK6CSE,=KK6YBW,=KM6NFS,=KM6RJA,=KO4LNN,=KO4ZYO,=KR3BLK,=KX4ES, =KJ6LVS,=KJ6WIE,=KK6CSE,=KK6YBW,=KM6NFS,=KM6RJA,=KO4LNN,=KO4ZYO,=KR3BLK,=KX4ES,=N3GWR,=N3QIP,
=N3GWR,=N3QIP,=N8KGB,=W2DK,=W8EBR,=WA0CMY,=WA6QDQ,=WB2CAT,=WB4JTT,=WK1K,=WW7CC; =N6LTM,=N6LZL,=N8KGB,=W2DK,=W6GKL,=W8EBR,=WA0CMY,=WA6QDQ,=WB2CAT,=WB4JTT,=WK1K,=WW7CC;
# ADIF 138 # ADIF 138
Kure Island: 31: 61: OC: 29.00: 178.00: 10.0: KH7K: Kure Island: 31: 61: OC: 29.00: 178.00: 10.0: KH7K:
AH7K,KH7K,NH7K,WH7K; AH7K,KH7K,NH7K,WH7K;
# ADIF 9 # ADIF 9
American Samoa: 32: 62: OC: -14.32: 170.78: 11.0: KH8: American Samoa: 32: 62: OC: -14.32: 170.78: 11.0: KH8:
AH8,KH8,NH8,WH8; AH8,KH8,NH8,WH8,=KG7ITH;
# ADIF 515 # ADIF 515
Swains Island: 32: 62: OC: -11.05: 171.25: 11.0: KH8/s: Swains Island: 32: 62: OC: -11.05: 171.25: 11.0: KH8/s:
=W8S; =K8R,=W8S;
# ADIF 297 # ADIF 297
Wake Island: 31: 65: OC: 19.28: -166.63: -12.0: KH9: Wake Island: 31: 65: OC: 19.28: -166.63: -12.0: KH9:
AH9,KH9,NH9,WH9; AH9,KH9,NH9,WH9;
# ADIF 6 # ADIF 6
Alaska: 01: 01: NA: 61.40: 148.87: 8.0: KL: Alaska: 01: 01: NA: 61.40: 148.87: 8.0: KL:
AL,KL,NL,WL,=AC7EV,=AD0DK,=AG6PI,=K3RCJ,=K5GEC,=K7TWN,=K7WJH,=KA1NCN,=KA2ZSD,=KA7TOM,=KB1BED, AL,KL,NL,WL,=AC7EV,=AD0DK,=AG6PI,=AK6DA,=K3RCJ,=K5GEC,=K7TWN,=K7WJH,=KA1NCN,=KA2ZSD,=KA7TOM,
=KC0QOB,=KC2LHD,=KD2ZZV,=KD7OTW,=KD7RF,=KD7UZB,=KD8SOV,=KE0PRX,=KE0RWP,=KE0WDR,=KE6FNQ,=KE8BZA, =KB1BED,=KC0QOB,=KC2LHD,=KD2ZZV,=KD7OTW,=KD7RF,=KD7UZB,=KD8SOV,=KE0PRX,=KE0RWP,=KE0WDR,=KE6FNQ,
=KF0EXR,=KF7PFN,=KF7WUC,=KG5WFF,=KG5WFG,=KG7ARV,=KG7AUD,=KG7BFK,=KG7GSU,=KI5HPI,=KI6ZYO,=KI7CPI, =KE8BZA,=KF0EXR,=KF7PFN,=KF7WUC,=KG5WFF,=KG5WFG,=KG7ARV,=KG7AUD,=KG7BFK,=KG7GSU,=KG7ORS,=KI5HPI,
=KI7DUW,=KI7HOC,=KI7SUU,=KJ6EHV,=KJ7AXV,=KJ7IXG,=KJ7VMN,=KK6BVH,=KK6CAU,=KK6IMB,=KK7GPT,=KN6OEF, =KI6ZYO,=KI7CPI,=KI7DUW,=KI7HOC,=KI7SUU,=KJ6EHV,=KJ7AXV,=KJ7IXG,=KJ7VMN,=KK6BVH,=KK6CAU,=KK6IMB,
=N0SN,=N1TX,=N2KJU,=N7DKL,=W3MKG,=W5MSC,=W7ORR,=WA7MOS; =KK7GPT,=KN6OEF,=N0SN,=N1TX,=N2KJU,=N7DKL,=W3MKG,=W5MSC,=WA7MOS;
# ADIF 182 # ADIF 182
Navassa Island: 08: 11: NA: 18.40: 75.00: 5.0: KP1: Navassa Island: 08: 11: NA: 18.40: 75.00: 5.0: KP1:
KP1,NP1,WP1; KP1,NP1,WP1;
@ -3732,8 +3729,8 @@ Argentina: 13: 14: SA: -32.50: 62.13: 3.0: LU:
LW2E<-33.70/61.00>,LW3D<-33.70/61.00>,LW3E<-33.70/61.00>,LW4D<-33.70/61.00>,LW4E<-33.70/61.00>, LW2E<-33.70/61.00>,LW3D<-33.70/61.00>,LW3E<-33.70/61.00>,LW4D<-33.70/61.00>,LW4E<-33.70/61.00>,
LW5D<-33.70/61.00>,LW5E<-33.70/61.00>,LW6D<-33.70/61.00>,LW6E<-33.70/61.00>,LW7D<-33.70/61.00>, LW5D<-33.70/61.00>,LW5E<-33.70/61.00>,LW6D<-33.70/61.00>,LW6E<-33.70/61.00>,LW7D<-33.70/61.00>,
LW7E<-33.70/61.00>,LW8D<-33.70/61.00>,LW8E<-33.70/61.00>,LW9D<-33.70/61.00>,LW9E<-33.70/61.00>, LW7E<-33.70/61.00>,LW8D<-33.70/61.00>,LW8E<-33.70/61.00>,LW9D<-33.70/61.00>,LW9E<-33.70/61.00>,
=LT2F/D<-33.70/61.00>,=LU1DUA/D<-33.70/61.00>,=LU3EU/D<-33.70/61.00>,=LU4ARU/D<-33.70/61.00>, =LT2F/D<-33.70/61.00>,=LU3EU/D<-33.70/61.00>,=LU4ARU/D<-33.70/61.00>,=LU7CC/E<-33.70/61.00>,
=LU7CC/E<-33.70/61.00>, =LU7CGL/D<-33.70/61.00>,=LU8EMD/D<-33.70/61.00>,=LU9EOE/D<-33.70/61.00>,
# Santa Fe # Santa Fe
AY0F<-33.72/62.23>,AY1F<-33.72/62.23>,AY2F<-33.72/62.23>,AY3F<-33.72/62.23>,AY4F<-33.72/62.23>, AY0F<-33.72/62.23>,AY1F<-33.72/62.23>,AY2F<-33.72/62.23>,AY3F<-33.72/62.23>,AY4F<-33.72/62.23>,
AY5F<-33.72/62.23>,AY6F<-33.72/62.23>,AY7F<-33.72/62.23>,AY8F<-33.72/62.23>,AY9F<-33.72/62.23>, AY5F<-33.72/62.23>,AY6F<-33.72/62.23>,AY7F<-33.72/62.23>,AY8F<-33.72/62.23>,AY9F<-33.72/62.23>,
@ -3813,7 +3810,6 @@ Argentina: 13: 14: SA: -32.50: 62.13: 3.0: LU:
LV5G<-26.95/58.72>,LV6G<-26.95/58.72>,LV7G<-26.95/58.72>,LV8G<-26.95/58.72>,LV9G<-26.95/58.72>, LV5G<-26.95/58.72>,LV6G<-26.95/58.72>,LV7G<-26.95/58.72>,LV8G<-26.95/58.72>,LV9G<-26.95/58.72>,
LW0G<-26.95/58.72>,LW1G<-26.95/58.72>,LW2G<-26.95/58.72>,LW3G<-26.95/58.72>,LW4G<-26.95/58.72>, LW0G<-26.95/58.72>,LW1G<-26.95/58.72>,LW2G<-26.95/58.72>,LW3G<-26.95/58.72>,LW4G<-26.95/58.72>,
LW5G<-26.95/58.72>,LW6G<-26.95/58.72>,LW7G<-26.95/58.72>,LW8G<-26.95/58.72>,LW9G<-26.95/58.72>, LW5G<-26.95/58.72>,LW6G<-26.95/58.72>,LW7G<-26.95/58.72>,LW8G<-26.95/58.72>,LW9G<-26.95/58.72>,
=LW3EMP/GA<-26.95/58.72>,
# Cordoba # Cordoba
AY0H<-31.42/64.18>,AY1H<-31.42/64.18>,AY2H<-31.42/64.18>,AY3H<-31.42/64.18>,AY4H<-31.42/64.18>, AY0H<-31.42/64.18>,AY1H<-31.42/64.18>,AY2H<-31.42/64.18>,AY3H<-31.42/64.18>,AY4H<-31.42/64.18>,
AY5H<-31.42/64.18>,AY6H<-31.42/64.18>,AY7H<-31.42/64.18>,AY8H<-31.42/64.18>,AY9H<-31.42/64.18>, AY5H<-31.42/64.18>,AY6H<-31.42/64.18>,AY7H<-31.42/64.18>,AY8H<-31.42/64.18>,AY9H<-31.42/64.18>,
@ -3853,7 +3849,7 @@ Argentina: 13: 14: SA: -32.50: 62.13: 3.0: LU:
LV5H<-31.42/64.18>,LV6H<-31.42/64.18>,LV7H<-31.42/64.18>,LV8H<-31.42/64.18>,LV9H<-31.42/64.18>, LV5H<-31.42/64.18>,LV6H<-31.42/64.18>,LV7H<-31.42/64.18>,LV8H<-31.42/64.18>,LV9H<-31.42/64.18>,
LW0H<-31.42/64.18>,LW1H<-31.42/64.18>,LW2H<-31.42/64.18>,LW3H<-31.42/64.18>,LW4H<-31.42/64.18>, LW0H<-31.42/64.18>,LW1H<-31.42/64.18>,LW2H<-31.42/64.18>,LW3H<-31.42/64.18>,LW4H<-31.42/64.18>,
LW5H<-31.42/64.18>,LW6H<-31.42/64.18>,LW7H<-31.42/64.18>,LW8H<-31.42/64.18>,LW9H<-31.42/64.18>, LW5H<-31.42/64.18>,LW6H<-31.42/64.18>,LW7H<-31.42/64.18>,LW8H<-31.42/64.18>,LW9H<-31.42/64.18>,
=LU4HCH/H<-31.42/64.18>,=LU4HK/H<-31.42/64.18>, =LU4HCH/H<-31.42/64.18>,
# Misiones # Misiones
AY0I<-26.92/54.52>,AY1I<-26.92/54.52>,AY2I<-26.92/54.52>,AY3I<-26.92/54.52>,AY4I<-26.92/54.52>, AY0I<-26.92/54.52>,AY1I<-26.92/54.52>,AY2I<-26.92/54.52>,AY3I<-26.92/54.52>,AY4I<-26.92/54.52>,
AY5I<-26.92/54.52>,AY6I<-26.92/54.52>,AY7I<-26.92/54.52>,AY8I<-26.92/54.52>,AY9I<-26.92/54.52>, AY5I<-26.92/54.52>,AY6I<-26.92/54.52>,AY7I<-26.92/54.52>,AY8I<-26.92/54.52>,AY9I<-26.92/54.52>,
@ -4012,7 +4008,6 @@ Argentina: 13: 14: SA: -32.50: 62.13: 3.0: LU:
LV5L<-28.67/57.63>,LV6L<-28.67/57.63>,LV7L<-28.67/57.63>,LV8L<-28.67/57.63>,LV9L<-28.67/57.63>, LV5L<-28.67/57.63>,LV6L<-28.67/57.63>,LV7L<-28.67/57.63>,LV8L<-28.67/57.63>,LV9L<-28.67/57.63>,
LW0L<-28.67/57.63>,LW1L<-28.67/57.63>,LW2L<-28.67/57.63>,LW3L<-28.67/57.63>,LW4L<-28.67/57.63>, LW0L<-28.67/57.63>,LW1L<-28.67/57.63>,LW2L<-28.67/57.63>,LW3L<-28.67/57.63>,LW4L<-28.67/57.63>,
LW5L<-28.67/57.63>,LW6L<-28.67/57.63>,LW7L<-28.67/57.63>,LW8L<-28.67/57.63>,LW9L<-28.67/57.63>, LW5L<-28.67/57.63>,LW6L<-28.67/57.63>,LW7L<-28.67/57.63>,LW8L<-28.67/57.63>,LW9L<-28.67/57.63>,
=LU8LCT/L<-28.67/57.63>,=LU9LMD/L<-28.67/57.63>,
# Mendoza # Mendoza
AY0M<-32.88/68.85>,AY1M<-32.88/68.85>,AY2M<-32.88/68.85>,AY3M<-32.88/68.85>,AY4M<-32.88/68.85>, AY0M<-32.88/68.85>,AY1M<-32.88/68.85>,AY2M<-32.88/68.85>,AY3M<-32.88/68.85>,AY4M<-32.88/68.85>,
AY5M<-32.88/68.85>,AY6M<-32.88/68.85>,AY7M<-32.88/68.85>,AY8M<-32.88/68.85>,AY9M<-32.88/68.85>, AY5M<-32.88/68.85>,AY6M<-32.88/68.85>,AY7M<-32.88/68.85>,AY8M<-32.88/68.85>,AY9M<-32.88/68.85>,
@ -4624,7 +4619,7 @@ Finland: 15: 18: EU: 61.38: -24.82: -2.0: OH:
# Uudenmaa # Uudenmaa
OF2<60.23/-24.78>,OG2<60.23/-24.78>,OH2<60.23/-24.78>,OI2<60.23/-24.78>, OF2<60.23/-24.78>,OG2<60.23/-24.78>,OH2<60.23/-24.78>,OI2<60.23/-24.78>,
# Haeme # Haeme
OF3<61.53/-23.75>,OG3<61.53/-23.75>,OH3<61.53/-23.75>,OI3<61.53/-23.75>, OF3<61.53/-23.75>,OG3<61.53/-23.75>,OH3<61.53/-23.75>,OI3<61.53/-23.75>,=OH0MZA/3<61.53/-23.75>,
# Mikkeli # Mikkeli
OF4<62.50/-28.00>,OG4<62.50/-28.00>,OH4<62.50/-28.00>,OI4<62.50/-28.00>, OF4<62.50/-28.00>,OG4<62.50/-28.00>,OH4<62.50/-28.00>,OI4<62.50/-28.00>,
# Kymi # Kymi
@ -4829,7 +4824,7 @@ Bangladesh: 22: 41: AS: 24.12: -89.65: -6.0: S2:
S2,S3; S2,S3;
# ADIF 499 # ADIF 499
Slovenia: 15: 28: EU: 46.00: -14.00: -1.0: S5: Slovenia: 15: 28: EU: 46.00: -14.00: -1.0: S5:
S5,=VERSION; S5;
# ADIF 379 # ADIF 379
Seychelles: 39: 53: AF: -4.67: -55.47: -4.0: S7: Seychelles: 39: 53: AF: -4.67: -55.47: -4.0: S7:
S7; S7;
@ -5042,7 +5037,7 @@ Mali: 35: 46: AF: 18.00: 2.58: 0.0: TZ:
TZ; TZ;
# ADIF 54 # ADIF 54
European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA: European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA:
R,U,=R7AB/P,=RI0SP(40),=RI41POL(40), R,U,=RC9WD/6,=RI0SP(40),=RV9WB/3,=UB8AFZ/3,
# Saint Petersburg (SP) # Saint Petersburg (SP)
R1A<59.95/-30.30>,R1B<59.95/-30.30>,R1F<59.95/-30.30>,R1H<59.95/-30.30>,R1J<59.95/-30.30>, R1A<59.95/-30.30>,R1B<59.95/-30.30>,R1F<59.95/-30.30>,R1H<59.95/-30.30>,R1J<59.95/-30.30>,
R1L<59.95/-30.30>,R1M<59.95/-30.30>,RA1A<59.95/-30.30>,RA1B<59.95/-30.30>,RA1F<59.95/-30.30>, R1L<59.95/-30.30>,R1M<59.95/-30.30>,RA1A<59.95/-30.30>,RA1B<59.95/-30.30>,RA1F<59.95/-30.30>,
@ -5087,7 +5082,8 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA:
UG1J<59.95/-30.30>,UG1L<59.95/-30.30>,UG1M<59.95/-30.30>,UH1A<59.95/-30.30>,UH1B<59.95/-30.30>, UG1J<59.95/-30.30>,UG1L<59.95/-30.30>,UG1M<59.95/-30.30>,UH1A<59.95/-30.30>,UH1B<59.95/-30.30>,
UH1F<59.95/-30.30>,UH1H<59.95/-30.30>,UH1J<59.95/-30.30>,UH1L<59.95/-30.30>,UH1M<59.95/-30.30>, UH1F<59.95/-30.30>,UH1H<59.95/-30.30>,UH1J<59.95/-30.30>,UH1L<59.95/-30.30>,UH1M<59.95/-30.30>,
UI1A<59.95/-30.30>,UI1B<59.95/-30.30>,UI1F<59.95/-30.30>,UI1H<59.95/-30.30>,UI1J<59.95/-30.30>, UI1A<59.95/-30.30>,UI1B<59.95/-30.30>,UI1F<59.95/-30.30>,UI1H<59.95/-30.30>,UI1J<59.95/-30.30>,
UI1L<59.95/-30.30>,UI1M<59.95/-30.30>, UI1L<59.95/-30.30>,UI1M<59.95/-30.30>,=R1AT[19]<59.95/-30.30>,=RU1AC[19]<59.95/-30.30>,
=UA1A[19]<59.95/-30.30>,=UA1F[19]<59.95/-30.30>,
# Leningradskaya (LO) # Leningradskaya (LO)
R1C<60.05/-31.75>,R1D<60.05/-31.75>,RA1C<60.05/-31.75>,RA1D<60.05/-31.75>,RC1C<60.05/-31.75>, R1C<60.05/-31.75>,R1D<60.05/-31.75>,RA1C<60.05/-31.75>,RA1D<60.05/-31.75>,RC1C<60.05/-31.75>,
RC1D<60.05/-31.75>,RD1C<60.05/-31.75>,RD1D<60.05/-31.75>,RE1C<60.05/-31.75>,RE1D<60.05/-31.75>, RC1D<60.05/-31.75>,RD1C<60.05/-31.75>,RD1D<60.05/-31.75>,RE1C<60.05/-31.75>,RE1D<60.05/-31.75>,
@ -5101,7 +5097,7 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA:
UA1D<60.05/-31.75>,UB1C<60.05/-31.75>,UB1D<60.05/-31.75>,UC1C<60.05/-31.75>,UC1D<60.05/-31.75>, UA1D<60.05/-31.75>,UB1C<60.05/-31.75>,UB1D<60.05/-31.75>,UC1C<60.05/-31.75>,UC1D<60.05/-31.75>,
UD1C<60.05/-31.75>,UD1D<60.05/-31.75>,UE1C<60.05/-31.75>,UE1D<60.05/-31.75>,UF1C<60.05/-31.75>, UD1C<60.05/-31.75>,UD1D<60.05/-31.75>,UE1C<60.05/-31.75>,UE1D<60.05/-31.75>,UF1C<60.05/-31.75>,
UF1D<60.05/-31.75>,UG1C<60.05/-31.75>,UG1D<60.05/-31.75>,UH1C<60.05/-31.75>,UH1D<60.05/-31.75>, UF1D<60.05/-31.75>,UG1C<60.05/-31.75>,UG1D<60.05/-31.75>,UH1C<60.05/-31.75>,UH1D<60.05/-31.75>,
UI1C<60.05/-31.75>,UI1D<60.05/-31.75>, UI1C<60.05/-31.75>,UI1D<60.05/-31.75>,=R1CAA[19]<60.05/-31.75>,
# Karelia (KL) # Karelia (KL)
R1N[19]<63.82/-33.00>,RA1N[19]<63.82/-33.00>,RC1N[19]<63.82/-33.00>,RD1N[19]<63.82/-33.00>, R1N[19]<63.82/-33.00>,RA1N[19]<63.82/-33.00>,RC1N[19]<63.82/-33.00>,RD1N[19]<63.82/-33.00>,
RE1N[19]<63.82/-33.00>,RF1N[19]<63.82/-33.00>,RG1N[19]<63.82/-33.00>,RJ1N[19]<63.82/-33.00>, RE1N[19]<63.82/-33.00>,RF1N[19]<63.82/-33.00>,RG1N[19]<63.82/-33.00>,RJ1N[19]<63.82/-33.00>,
@ -5119,7 +5115,7 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA:
RV1O[19]<63.50/-43.00>,RW1O[19]<63.50/-43.00>,RX1O[19]<63.50/-43.00>,RY1O[19]<63.50/-43.00>, RV1O[19]<63.50/-43.00>,RW1O[19]<63.50/-43.00>,RX1O[19]<63.50/-43.00>,RY1O[19]<63.50/-43.00>,
RZ1O[19]<63.50/-43.00>,U1O[19]<63.50/-43.00>,UA1O[19]<63.50/-43.00>,UB1O[19]<63.50/-43.00>, RZ1O[19]<63.50/-43.00>,U1O[19]<63.50/-43.00>,UA1O[19]<63.50/-43.00>,UB1O[19]<63.50/-43.00>,
UC1O[19]<63.50/-43.00>,UD1O[19]<63.50/-43.00>,UE1O[19]<63.50/-43.00>,UF1O[19]<63.50/-43.00>, UC1O[19]<63.50/-43.00>,UD1O[19]<63.50/-43.00>,UE1O[19]<63.50/-43.00>,UF1O[19]<63.50/-43.00>,
UG1O[19]<63.50/-43.00>,UH1O[19]<63.50/-43.00>,UI1O[19]<63.50/-43.00>,=UA9XK/1[19]<63.50/-43.00>, UG1O[19]<63.50/-43.00>,UH1O[19]<63.50/-43.00>,UI1O[19]<63.50/-43.00>,
# Nenetsky (NO) # Nenetsky (NO)
R1P[20]<68.83/-54.83>,RA1P[20]<68.83/-54.83>,RC1P[20]<68.83/-54.83>,RD1P[20]<68.83/-54.83>, R1P[20]<68.83/-54.83>,RA1P[20]<68.83/-54.83>,RC1P[20]<68.83/-54.83>,RD1P[20]<68.83/-54.83>,
RE1P[20]<68.83/-54.83>,RF1P[20]<68.83/-54.83>,RG1P[20]<68.83/-54.83>,RJ1P[20]<68.83/-54.83>, RE1P[20]<68.83/-54.83>,RF1P[20]<68.83/-54.83>,RG1P[20]<68.83/-54.83>,RJ1P[20]<68.83/-54.83>,
@ -5179,7 +5175,8 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA:
RV1Z[19]<68.03/-34.57>,RW1Z[19]<68.03/-34.57>,RX1Z[19]<68.03/-34.57>,RY1Z[19]<68.03/-34.57>, RV1Z[19]<68.03/-34.57>,RW1Z[19]<68.03/-34.57>,RX1Z[19]<68.03/-34.57>,RY1Z[19]<68.03/-34.57>,
RZ1Z[19]<68.03/-34.57>,U1Z[19]<68.03/-34.57>,UA1Z[19]<68.03/-34.57>,UB1Z[19]<68.03/-34.57>, RZ1Z[19]<68.03/-34.57>,U1Z[19]<68.03/-34.57>,UA1Z[19]<68.03/-34.57>,UB1Z[19]<68.03/-34.57>,
UC1Z[19]<68.03/-34.57>,UD1Z[19]<68.03/-34.57>,UE1Z[19]<68.03/-34.57>,UF1Z[19]<68.03/-34.57>, UC1Z[19]<68.03/-34.57>,UD1Z[19]<68.03/-34.57>,UE1Z[19]<68.03/-34.57>,UF1Z[19]<68.03/-34.57>,
UG1Z[19]<68.03/-34.57>,UH1Z[19]<68.03/-34.57>,UI1Z[19]<68.03/-34.57>,=RN2F/1[19]<68.03/-34.57>, UG1Z[19]<68.03/-34.57>,UH1Z[19]<68.03/-34.57>,UI1Z[19]<68.03/-34.57>,=RA9UDK/1[19]<68.03/-34.57>,
=RN2F/1[19]<68.03/-34.57>,
# Moscow city (MA) # Moscow city (MA)
R2A<55.75/-37.62>,R2B<55.75/-37.62>,R2C<55.75/-37.62>,R3A<55.75/-37.62>,R3B<55.75/-37.62>, R2A<55.75/-37.62>,R2B<55.75/-37.62>,R2C<55.75/-37.62>,R3A<55.75/-37.62>,R3B<55.75/-37.62>,
R3C<55.75/-37.62>,R5A<55.75/-37.62>,R5B<55.75/-37.62>,R5C<55.75/-37.62>,RA3A<55.75/-37.62>, R3C<55.75/-37.62>,R5A<55.75/-37.62>,R5B<55.75/-37.62>,R5C<55.75/-37.62>,RA3A<55.75/-37.62>,
@ -5230,7 +5227,7 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA:
UG3C<55.75/-37.62>,UG5A<55.75/-37.62>,UG5B<55.75/-37.62>,UG5C<55.75/-37.62>,UH3A<55.75/-37.62>, UG3C<55.75/-37.62>,UG5A<55.75/-37.62>,UG5B<55.75/-37.62>,UG5C<55.75/-37.62>,UH3A<55.75/-37.62>,
UH3B<55.75/-37.62>,UH3C<55.75/-37.62>,UH5A<55.75/-37.62>,UH5B<55.75/-37.62>,UH5C<55.75/-37.62>, UH3B<55.75/-37.62>,UH3C<55.75/-37.62>,UH5A<55.75/-37.62>,UH5B<55.75/-37.62>,UH5C<55.75/-37.62>,
UI3A<55.75/-37.62>,UI3B<55.75/-37.62>,UI3C<55.75/-37.62>,UI5A<55.75/-37.62>,UI5B<55.75/-37.62>, UI3A<55.75/-37.62>,UI3B<55.75/-37.62>,UI3C<55.75/-37.62>,UI5A<55.75/-37.62>,UI5B<55.75/-37.62>,
UI5C<55.75/-37.62>, UI5C<55.75/-37.62>,=RN2F/3<55.75/-37.62>,
# Moskovskaya (MO) # Moskovskaya (MO)
R2D<55.70/-36.97>,R2H<55.70/-36.97>,R3D<55.70/-36.97>,R3F<55.70/-36.97>,R3H<55.70/-36.97>, R2D<55.70/-36.97>,R2H<55.70/-36.97>,R3D<55.70/-36.97>,R3F<55.70/-36.97>,R3H<55.70/-36.97>,
R5D<55.70/-36.97>,R5F<55.70/-36.97>,R5H<55.70/-36.97>,RA3D<55.70/-36.97>,RA3F<55.70/-36.97>, R5D<55.70/-36.97>,R5F<55.70/-36.97>,R5H<55.70/-36.97>,RA3D<55.70/-36.97>,RA3F<55.70/-36.97>,
@ -5277,7 +5274,7 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA:
UG5D<55.70/-36.97>,UG5F<55.70/-36.97>,UG5H<55.70/-36.97>,UH3D<55.70/-36.97>,UH3F<55.70/-36.97>, UG5D<55.70/-36.97>,UG5F<55.70/-36.97>,UG5H<55.70/-36.97>,UH3D<55.70/-36.97>,UH3F<55.70/-36.97>,
UH3H<55.70/-36.97>,UH5D<55.70/-36.97>,UH5F<55.70/-36.97>,UH5H<55.70/-36.97>,UI3D<55.70/-36.97>, UH3H<55.70/-36.97>,UH5D<55.70/-36.97>,UH5F<55.70/-36.97>,UH5H<55.70/-36.97>,UI3D<55.70/-36.97>,
UI3F<55.70/-36.97>,UI3H<55.70/-36.97>,UI5D<55.70/-36.97>,UI5F<55.70/-36.97>,UI5H<55.70/-36.97>, UI3F<55.70/-36.97>,UI3H<55.70/-36.97>,UI5D<55.70/-36.97>,UI5F<55.70/-36.97>,UI5H<55.70/-36.97>,
=R8FF/3<55.70/-36.97>,=R9UG/3<55.70/-36.97>, =R8FF/3<55.70/-36.97>,
# Orlovskaya (OR) # Orlovskaya (OR)
R2E<52.85/-36.43>,R3E<52.85/-36.43>,R5E<52.85/-36.43>,RA3E<52.85/-36.43>,RA5E<52.85/-36.43>, R2E<52.85/-36.43>,R3E<52.85/-36.43>,R5E<52.85/-36.43>,RA3E<52.85/-36.43>,RA5E<52.85/-36.43>,
RC2E<52.85/-36.43>,RC3E<52.85/-36.43>,RC5E<52.85/-36.43>,RD2E<52.85/-36.43>,RD3E<52.85/-36.43>, RC2E<52.85/-36.43>,RC3E<52.85/-36.43>,RC5E<52.85/-36.43>,RD2E<52.85/-36.43>,RD3E<52.85/-36.43>,
@ -5365,7 +5362,7 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA:
UA5L<55.00/-33.00>,UB3L<55.00/-33.00>,UB5L<55.00/-33.00>,UC3L<55.00/-33.00>,UC5L<55.00/-33.00>, UA5L<55.00/-33.00>,UB3L<55.00/-33.00>,UB5L<55.00/-33.00>,UC3L<55.00/-33.00>,UC5L<55.00/-33.00>,
UD3L<55.00/-33.00>,UD5L<55.00/-33.00>,UE3L<55.00/-33.00>,UE5L<55.00/-33.00>,UF3L<55.00/-33.00>, UD3L<55.00/-33.00>,UD5L<55.00/-33.00>,UE3L<55.00/-33.00>,UE5L<55.00/-33.00>,UF3L<55.00/-33.00>,
UF5L<55.00/-33.00>,UG3L<55.00/-33.00>,UG5L<55.00/-33.00>,UH3L<55.00/-33.00>,UH5L<55.00/-33.00>, UF5L<55.00/-33.00>,UG3L<55.00/-33.00>,UG5L<55.00/-33.00>,UH3L<55.00/-33.00>,UH5L<55.00/-33.00>,
UI3L<55.00/-33.00>,UI5L<55.00/-33.00>,=R80OSM<55.00/-33.00>, UI3L<55.00/-33.00>,UI5L<55.00/-33.00>,
# Yaroslavskaya (YR) # Yaroslavskaya (YR)
R2M<57.87/-39.20>,R3M<57.87/-39.20>,R5M<57.87/-39.20>,RA3M<57.87/-39.20>,RA5M<57.87/-39.20>, R2M<57.87/-39.20>,R3M<57.87/-39.20>,R5M<57.87/-39.20>,RA3M<57.87/-39.20>,RA5M<57.87/-39.20>,
RC2M<57.87/-39.20>,RC3M<57.87/-39.20>,RC5M<57.87/-39.20>,RD2M<57.87/-39.20>,RD3M<57.87/-39.20>, RC2M<57.87/-39.20>,RC3M<57.87/-39.20>,RC5M<57.87/-39.20>,RD2M<57.87/-39.20>,RD3M<57.87/-39.20>,
@ -5484,7 +5481,7 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA:
UA5R<52.72/-41.57>,UB3R<52.72/-41.57>,UB5R<52.72/-41.57>,UC3R<52.72/-41.57>,UC5R<52.72/-41.57>, UA5R<52.72/-41.57>,UB3R<52.72/-41.57>,UB5R<52.72/-41.57>,UC3R<52.72/-41.57>,UC5R<52.72/-41.57>,
UD3R<52.72/-41.57>,UD5R<52.72/-41.57>,UE3R<52.72/-41.57>,UE5R<52.72/-41.57>,UF3R<52.72/-41.57>, UD3R<52.72/-41.57>,UD5R<52.72/-41.57>,UE3R<52.72/-41.57>,UE5R<52.72/-41.57>,UF3R<52.72/-41.57>,
UF5R<52.72/-41.57>,UG3R<52.72/-41.57>,UG5R<52.72/-41.57>,UH3R<52.72/-41.57>,UH5R<52.72/-41.57>, UF5R<52.72/-41.57>,UG3R<52.72/-41.57>,UG5R<52.72/-41.57>,UH3R<52.72/-41.57>,UH5R<52.72/-41.57>,
UI3R<52.72/-41.57>,UI5R<52.72/-41.57>,=R9CZ/3<52.72/-41.57>, UI3R<52.72/-41.57>,UI5R<52.72/-41.57>,=R100ZK<52.72/-41.57>,=R9CZ/3<52.72/-41.57>,
# Ryazanskaya (RA) # Ryazanskaya (RA)
R2S<54.40/-40.60>,R3S<54.40/-40.60>,R5S<54.40/-40.60>,RA3S<54.40/-40.60>,RA5S<54.40/-40.60>, R2S<54.40/-40.60>,R3S<54.40/-40.60>,R5S<54.40/-40.60>,RA3S<54.40/-40.60>,RA5S<54.40/-40.60>,
RC2S<54.40/-40.60>,RC3S<54.40/-40.60>,RC5S<54.40/-40.60>,RD2S<54.40/-40.60>,RD3S<54.40/-40.60>, RC2S<54.40/-40.60>,RC3S<54.40/-40.60>,RC5S<54.40/-40.60>,RD2S<54.40/-40.60>,RD3S<54.40/-40.60>,
@ -5664,7 +5661,7 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA:
RU4F<53.25/-44.57>,RV4F<53.25/-44.57>,RW4F<53.25/-44.57>,RX4F<53.25/-44.57>,RY4F<53.25/-44.57>, RU4F<53.25/-44.57>,RV4F<53.25/-44.57>,RW4F<53.25/-44.57>,RX4F<53.25/-44.57>,RY4F<53.25/-44.57>,
RZ4F<53.25/-44.57>,U4F<53.25/-44.57>,UA4F<53.25/-44.57>,UB4F<53.25/-44.57>,UC4F<53.25/-44.57>, RZ4F<53.25/-44.57>,U4F<53.25/-44.57>,UA4F<53.25/-44.57>,UB4F<53.25/-44.57>,UC4F<53.25/-44.57>,
UD4F<53.25/-44.57>,UE4F<53.25/-44.57>,UF4F<53.25/-44.57>,UG4F<53.25/-44.57>,UH4F<53.25/-44.57>, UD4F<53.25/-44.57>,UE4F<53.25/-44.57>,UF4F<53.25/-44.57>,UG4F<53.25/-44.57>,UH4F<53.25/-44.57>,
UI4F<53.25/-44.57>, UI4F<53.25/-44.57>,=UA4FMQ/P<53.25/-44.57>,
# Samarskaya (SR) # Samarskaya (SR)
R4H[30]<53.45/-50.45>,R4I[30]<53.45/-50.45>,RA4H[30]<53.45/-50.45>,RA4I[30]<53.45/-50.45>, R4H[30]<53.45/-50.45>,R4I[30]<53.45/-50.45>,RA4H[30]<53.45/-50.45>,RA4I[30]<53.45/-50.45>,
RC4H[30]<53.45/-50.45>,RC4I[30]<53.45/-50.45>,RD4H[30]<53.45/-50.45>,RD4I[30]<53.45/-50.45>, RC4H[30]<53.45/-50.45>,RC4I[30]<53.45/-50.45>,RD4H[30]<53.45/-50.45>,RD4I[30]<53.45/-50.45>,
@ -5744,9 +5741,8 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA:
UG4Q<55.55/-50.93>,UG4R<55.55/-50.93>,UH4P<55.55/-50.93>,UH4Q<55.55/-50.93>,UH4R<55.55/-50.93>, UG4Q<55.55/-50.93>,UG4R<55.55/-50.93>,UH4P<55.55/-50.93>,UH4Q<55.55/-50.93>,UH4R<55.55/-50.93>,
UI4P<55.55/-50.93>,UI4Q<55.55/-50.93>,UI4R<55.55/-50.93>,=R4PH[30]<55.55/-50.93>, UI4P<55.55/-50.93>,UI4Q<55.55/-50.93>,UI4R<55.55/-50.93>,=R4PH[30]<55.55/-50.93>,
=R4RB[30]<55.55/-50.93>,=R4RM[30]<55.55/-50.93>,=RJ4P[30]<55.55/-50.93>,=RK4P[30]<55.55/-50.93>, =R4RB[30]<55.55/-50.93>,=R4RM[30]<55.55/-50.93>,=RJ4P[30]<55.55/-50.93>,=RK4P[30]<55.55/-50.93>,
=RT4Q[30]<55.55/-50.93>,=RZ4PXP[30]<55.55/-50.93>,=UA4FMQ/P<55.55/-50.93>, =RT4Q[30]<55.55/-50.93>,=RZ4PXP[30]<55.55/-50.93>,=UA4PN[30]<55.55/-50.93>,
=UA4PN[30]<55.55/-50.93>,=UA4PRU[30]<55.55/-50.93>,=UA4Q[30]<55.55/-50.93>, =UA4PRU[30]<55.55/-50.93>,=UA4Q[30]<55.55/-50.93>,=UG4P[30]<55.55/-50.93>,
=UG4P[30]<55.55/-50.93>,
# Marij-El (MR) # Marij-El (MR)
R4S<56.70/-47.87>,R4T<56.70/-47.87>,RA4S<56.70/-47.87>,RA4T<56.70/-47.87>,RC4S<56.70/-47.87>, R4S<56.70/-47.87>,R4T<56.70/-47.87>,RA4S<56.70/-47.87>,RA4T<56.70/-47.87>,RC4S<56.70/-47.87>,
RC4T<56.70/-47.87>,RD4S<56.70/-47.87>,RD4T<56.70/-47.87>,RE4S<56.70/-47.87>,RE4T<56.70/-47.87>, RC4T<56.70/-47.87>,RD4S<56.70/-47.87>,RD4T<56.70/-47.87>,RE4S<56.70/-47.87>,RE4T<56.70/-47.87>,
@ -5760,7 +5756,7 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA:
UA4T<56.70/-47.87>,UB4S<56.70/-47.87>,UB4T<56.70/-47.87>,UC4S<56.70/-47.87>,UC4T<56.70/-47.87>, UA4T<56.70/-47.87>,UB4S<56.70/-47.87>,UB4T<56.70/-47.87>,UC4S<56.70/-47.87>,UC4T<56.70/-47.87>,
UD4S<56.70/-47.87>,UD4T<56.70/-47.87>,UE4S<56.70/-47.87>,UE4T<56.70/-47.87>,UF4S<56.70/-47.87>, UD4S<56.70/-47.87>,UD4T<56.70/-47.87>,UE4S<56.70/-47.87>,UE4T<56.70/-47.87>,UF4S<56.70/-47.87>,
UF4T<56.70/-47.87>,UG4S<56.70/-47.87>,UG4T<56.70/-47.87>,UH4S<56.70/-47.87>,UH4T<56.70/-47.87>, UF4T<56.70/-47.87>,UG4S<56.70/-47.87>,UG4T<56.70/-47.87>,UH4S<56.70/-47.87>,UH4T<56.70/-47.87>,
UI4S<56.70/-47.87>,UI4T<56.70/-47.87>, UI4S<56.70/-47.87>,UI4T<56.70/-47.87>,=UA5B/4<56.70/-47.87>,
# Mordoviya (MD) # Mordoviya (MD)
R4U<54.43/-44.45>,RA4U<54.43/-44.45>,RC4U<54.43/-44.45>,RD4U<54.43/-44.45>,RE4U<54.43/-44.45>, R4U<54.43/-44.45>,RA4U<54.43/-44.45>,RC4U<54.43/-44.45>,RD4U<54.43/-44.45>,RE4U<54.43/-44.45>,
RF4U<54.43/-44.45>,RG4U<54.43/-44.45>,RJ4U<54.43/-44.45>,RK4U<54.43/-44.45>,RL4U<54.43/-44.45>, RF4U<54.43/-44.45>,RG4U<54.43/-44.45>,RJ4U<54.43/-44.45>,RK4U<54.43/-44.45>,RL4U<54.43/-44.45>,
@ -5778,7 +5774,7 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA:
RZ4W[30]<57.28/-52.75>,U4W[30]<57.28/-52.75>,UA4W[30]<57.28/-52.75>,UB4W[30]<57.28/-52.75>, RZ4W[30]<57.28/-52.75>,U4W[30]<57.28/-52.75>,UA4W[30]<57.28/-52.75>,UB4W[30]<57.28/-52.75>,
UC4W[30]<57.28/-52.75>,UD4W[30]<57.28/-52.75>,UE4W[30]<57.28/-52.75>,UF4W[30]<57.28/-52.75>, UC4W[30]<57.28/-52.75>,UD4W[30]<57.28/-52.75>,UE4W[30]<57.28/-52.75>,UF4W[30]<57.28/-52.75>,
UG4W[30]<57.28/-52.75>,UH4W[30]<57.28/-52.75>,UI4W[30]<57.28/-52.75>,=R0CM/4[30]<57.28/-52.75>, UG4W[30]<57.28/-52.75>,UH4W[30]<57.28/-52.75>,UI4W[30]<57.28/-52.75>,=R0CM/4[30]<57.28/-52.75>,
=R100FP[30]<57.28/-52.75>,=R4WAN/P[30]<57.28/-52.75>, =R100FP[30]<57.28/-52.75>,
# Chuvashiya (CU) # Chuvashiya (CU)
R4Y<55.55/-47.10>,R4Z<55.55/-47.10>,RA4Y<55.55/-47.10>,RA4Z<55.55/-47.10>,RC4Y<55.55/-47.10>, R4Y<55.55/-47.10>,R4Z<55.55/-47.10>,RA4Y<55.55/-47.10>,RA4Z<55.55/-47.10>,RC4Y<55.55/-47.10>,
RC4Z<55.55/-47.10>,RD4Y<55.55/-47.10>,RD4Z<55.55/-47.10>,RE4Y<55.55/-47.10>,RE4Z<55.55/-47.10>, RC4Z<55.55/-47.10>,RD4Y<55.55/-47.10>,RD4Z<55.55/-47.10>,RE4Y<55.55/-47.10>,RE4Z<55.55/-47.10>,
@ -5844,7 +5840,7 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA:
UH6D<45.37/-39.43>,UH7A<45.37/-39.43>,UH7B<45.37/-39.43>,UH7C<45.37/-39.43>,UH7D<45.37/-39.43>, UH6D<45.37/-39.43>,UH7A<45.37/-39.43>,UH7B<45.37/-39.43>,UH7C<45.37/-39.43>,UH7D<45.37/-39.43>,
UI6A<45.37/-39.43>,UI6B<45.37/-39.43>,UI6C<45.37/-39.43>,UI6D<45.37/-39.43>,UI7A<45.37/-39.43>, UI6A<45.37/-39.43>,UI6B<45.37/-39.43>,UI6C<45.37/-39.43>,UI6D<45.37/-39.43>,UI7A<45.37/-39.43>,
UI7B<45.37/-39.43>,UI7C<45.37/-39.43>,UI7D<45.37/-39.43>,=R9GM/6<45.37/-39.43>, UI7B<45.37/-39.43>,UI7C<45.37/-39.43>,UI7D<45.37/-39.43>,=R9GM/6<45.37/-39.43>,
=R9OM/6<45.37/-39.43>,=RA9ULL/6<45.37/-39.43>,=RJ9I/6<45.37/-39.43>, =R9KC/6<45.37/-39.43>,=R9OM/6<45.37/-39.43>,=RJ9I/6<45.37/-39.43>,
# Karachay-Cherkessia (KC) # Karachay-Cherkessia (KC)
R6E<43.92/-41.78>,R7E<43.92/-41.78>,RA6E<43.92/-41.78>,RA7E<43.92/-41.78>,RC6E<43.92/-41.78>, R6E<43.92/-41.78>,R7E<43.92/-41.78>,RA6E<43.92/-41.78>,RA7E<43.92/-41.78>,RC6E<43.92/-41.78>,
RC7E<43.92/-41.78>,RD6E<43.92/-41.78>,RD7E<43.92/-41.78>,RE6E<43.92/-41.78>,RE7E<43.92/-41.78>, RC7E<43.92/-41.78>,RD6E<43.92/-41.78>,RD7E<43.92/-41.78>,RE6E<43.92/-41.78>,RE7E<43.92/-41.78>,
@ -5976,7 +5972,8 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA:
UG6N<47.87/-41.18>,UG7L<47.87/-41.18>,UG7M<47.87/-41.18>,UG7N<47.87/-41.18>,UH6L<47.87/-41.18>, UG6N<47.87/-41.18>,UG7L<47.87/-41.18>,UG7M<47.87/-41.18>,UG7N<47.87/-41.18>,UH6L<47.87/-41.18>,
UH6M<47.87/-41.18>,UH6N<47.87/-41.18>,UH7L<47.87/-41.18>,UH7M<47.87/-41.18>,UH7N<47.87/-41.18>, UH6M<47.87/-41.18>,UH6N<47.87/-41.18>,UH7L<47.87/-41.18>,UH7M<47.87/-41.18>,UH7N<47.87/-41.18>,
UI6L<47.87/-41.18>,UI6M<47.87/-41.18>,UI6N<47.87/-41.18>,UI7L<47.87/-41.18>,UI7M<47.87/-41.18>, UI6L<47.87/-41.18>,UI6M<47.87/-41.18>,UI6N<47.87/-41.18>,UI7L<47.87/-41.18>,UI7M<47.87/-41.18>,
UI7N<47.87/-41.18>,=RM8W/6<47.87/-41.18>,=RV9WB/6<47.87/-41.18>,=UE37EUF<47.87/-41.18>, UI7N<47.87/-41.18>,=R2023DX<47.87/-41.18>,=RM8W/6<47.87/-41.18>,=RV9WB/6<47.87/-41.18>,
=UE33DX<47.87/-41.18>,=UE37EUF<47.87/-41.18>,
# Chechnya (CN) # Chechnya (CN)
R6P<43.40/-45.72>,R7P<43.40/-45.72>,RA6P<43.40/-45.72>,RA7P<43.40/-45.72>,RC6P<43.40/-45.72>, R6P<43.40/-45.72>,R7P<43.40/-45.72>,RA6P<43.40/-45.72>,RA7P<43.40/-45.72>,RC6P<43.40/-45.72>,
RC7P<43.40/-45.72>,RD6P<43.40/-45.72>,RD7P<43.40/-45.72>,RE6P<43.40/-45.72>,RE7P<43.40/-45.72>, RC7P<43.40/-45.72>,RD6P<43.40/-45.72>,RD7P<43.40/-45.72>,RE6P<43.40/-45.72>,RE7P<43.40/-45.72>,
@ -6030,7 +6027,7 @@ European Russia: 16: 29: EU: 53.65: -41.37: -4.0: UA:
UE6V<47.23/-47.23>,UE7U<47.23/-47.23>,UE7V<47.23/-47.23>,UF6U<47.23/-47.23>,UF7U<47.23/-47.23>, UE6V<47.23/-47.23>,UE7U<47.23/-47.23>,UE7V<47.23/-47.23>,UF6U<47.23/-47.23>,UF7U<47.23/-47.23>,
UF7V<47.23/-47.23>,UG6U<47.23/-47.23>,UG6V<47.23/-47.23>,UG7U<47.23/-47.23>,UG7V<47.23/-47.23>, UF7V<47.23/-47.23>,UG6U<47.23/-47.23>,UG6V<47.23/-47.23>,UG7U<47.23/-47.23>,UG7V<47.23/-47.23>,
UH6U<47.23/-47.23>,UH6V<47.23/-47.23>,UH7U<47.23/-47.23>,UH7V<47.23/-47.23>,UI6U<47.23/-47.23>, UH6U<47.23/-47.23>,UH6V<47.23/-47.23>,UH7U<47.23/-47.23>,UH7V<47.23/-47.23>,UI6U<47.23/-47.23>,
UI6V<47.23/-47.23>,UI7U<47.23/-47.23>,UI7V<47.23/-47.23>,=R465AO<47.23/-47.23>, UI6V<47.23/-47.23>,UI7U<47.23/-47.23>,UI7V<47.23/-47.23>,
# Dagestan (DA) # Dagestan (DA)
R6W<43.10/-46.88>,R7W<43.10/-46.88>,RA6W<43.10/-46.88>,RA7W<43.10/-46.88>,RC6W<43.10/-46.88>, R6W<43.10/-46.88>,R7W<43.10/-46.88>,RA6W<43.10/-46.88>,RA7W<43.10/-46.88>,RC6W<43.10/-46.88>,
RC7W<43.10/-46.88>,RD6W<43.10/-46.88>,RD7W<43.10/-46.88>,RE6W<43.10/-46.88>,RE7W<43.10/-46.88>, RC7W<43.10/-46.88>,RD6W<43.10/-46.88>,RD7W<43.10/-46.88>,RE6W<43.10/-46.88>,RE7W<43.10/-46.88>,
@ -6263,7 +6260,8 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9:
UG9A<54.75/-60.70>~-6.0~,UG9B<54.75/-60.70>~-6.0~,UH8A<54.75/-60.70>~-6.0~, UG9A<54.75/-60.70>~-6.0~,UG9B<54.75/-60.70>~-6.0~,UH8A<54.75/-60.70>~-6.0~,
UH8B<54.75/-60.70>~-6.0~,UH9A<54.75/-60.70>~-6.0~,UH9B<54.75/-60.70>~-6.0~, UH8B<54.75/-60.70>~-6.0~,UH9A<54.75/-60.70>~-6.0~,UH9B<54.75/-60.70>~-6.0~,
UI8A<54.75/-60.70>~-6.0~,UI8B<54.75/-60.70>~-6.0~,UI9A<54.75/-60.70>~-6.0~, UI8A<54.75/-60.70>~-6.0~,UI8B<54.75/-60.70>~-6.0~,UI9A<54.75/-60.70>~-6.0~,
UI9B<54.75/-60.70>~-6.0~,=RA0QK/8<54.75/-60.70>~-6.0~,=UA9AR/P<54.75/-60.70>~-6.0~, UI9B<54.75/-60.70>~-6.0~,=R80SUSU<54.75/-60.70>~-6.0~,=RA0QK/8<54.75/-60.70>~-6.0~,
=RW9AV[21]<54.75/-60.70>~-6.0~,
# Sverdlovskaya (SV) # Sverdlovskaya (SV)
R8C<58.70/-61.33>~-6.0~,R8D<58.70/-61.33>~-6.0~,R8E<58.70/-61.33>~-6.0~,R9C<58.70/-61.33>~-6.0~, R8C<58.70/-61.33>~-6.0~,R8D<58.70/-61.33>~-6.0~,R8E<58.70/-61.33>~-6.0~,R9C<58.70/-61.33>~-6.0~,
R9D<58.70/-61.33>~-6.0~,R9E<58.70/-61.33>~-6.0~,RA8C<58.70/-61.33>~-6.0~,RA8D<58.70/-61.33>~-6.0~, R9D<58.70/-61.33>~-6.0~,R9E<58.70/-61.33>~-6.0~,RA8C<58.70/-61.33>~-6.0~,RA8D<58.70/-61.33>~-6.0~,
@ -6325,8 +6323,8 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9:
UH8D<58.70/-61.33>~-6.0~,UH8E<58.70/-61.33>~-6.0~,UH9C<58.70/-61.33>~-6.0~, UH8D<58.70/-61.33>~-6.0~,UH8E<58.70/-61.33>~-6.0~,UH9C<58.70/-61.33>~-6.0~,
UH9D<58.70/-61.33>~-6.0~,UH9E<58.70/-61.33>~-6.0~,UI8C<58.70/-61.33>~-6.0~, UH9D<58.70/-61.33>~-6.0~,UH9E<58.70/-61.33>~-6.0~,UI8C<58.70/-61.33>~-6.0~,
UI8D<58.70/-61.33>~-6.0~,UI8E<58.70/-61.33>~-6.0~,UI9C<58.70/-61.33>~-6.0~, UI8D<58.70/-61.33>~-6.0~,UI8E<58.70/-61.33>~-6.0~,UI9C<58.70/-61.33>~-6.0~,
UI9D<58.70/-61.33>~-6.0~,UI9E<58.70/-61.33>~-6.0~,=R9CS/P<58.70/-61.33>~-6.0~, UI9D<58.70/-61.33>~-6.0~,UI9E<58.70/-61.33>~-6.0~,=RW9C[20]<58.70/-61.33>~-6.0~,
=RW9C[20]<58.70/-61.33>~-6.0~, =RX9CC[20]<58.70/-61.33>~-6.0~,
# Tomskaya (TO) # Tomskaya (TO)
R8H(18)[31]<58.75/-82.13>,R8I(18)[31]<58.75/-82.13>,R9H(18)[31]<58.75/-82.13>, R8H(18)[31]<58.75/-82.13>,R8I(18)[31]<58.75/-82.13>,R9H(18)[31]<58.75/-82.13>,
R9I(18)[31]<58.75/-82.13>,RA8H(18)[31]<58.75/-82.13>,RA8I(18)[31]<58.75/-82.13>, R9I(18)[31]<58.75/-82.13>,RA8H(18)[31]<58.75/-82.13>,RA8I(18)[31]<58.75/-82.13>,
@ -6416,8 +6414,7 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9:
UE9K[20]<65.30/-74.03>~-6.0~,UF8K[20]<65.30/-74.03>~-6.0~,UF9K[20]<65.30/-74.03>~-6.0~, UE9K[20]<65.30/-74.03>~-6.0~,UF8K[20]<65.30/-74.03>~-6.0~,UF9K[20]<65.30/-74.03>~-6.0~,
UG8K[20]<65.30/-74.03>~-6.0~,UG9K[20]<65.30/-74.03>~-6.0~,UH8K[20]<65.30/-74.03>~-6.0~, UG8K[20]<65.30/-74.03>~-6.0~,UG9K[20]<65.30/-74.03>~-6.0~,UH8K[20]<65.30/-74.03>~-6.0~,
UH9K[20]<65.30/-74.03>~-6.0~,UI8K[20]<65.30/-74.03>~-6.0~,UI9K[20]<65.30/-74.03>~-6.0~, UH9K[20]<65.30/-74.03>~-6.0~,UI8K[20]<65.30/-74.03>~-6.0~,UI9K[20]<65.30/-74.03>~-6.0~,
=R2023BA[20]<65.30/-74.03>~-6.0~,=R9XD/9[20]<65.30/-74.03>~-6.0~,=RJ6N/8[20]<65.30/-74.03>~-6.0~, =R2023BA[20]<65.30/-74.03>~-6.0~,=RU9SQ/8[20]<65.30/-74.03>~-6.0~,
=RV7B/9[20]<65.30/-74.03>~-6.0~,
# Tyumenskaya (TN) # Tyumenskaya (TN)
R8L<57.83/-69.00>~-6.0~,R9L<57.83/-69.00>~-6.0~,RA8L<57.83/-69.00>~-6.0~,RA9L<57.83/-69.00>~-6.0~, R8L<57.83/-69.00>~-6.0~,R9L<57.83/-69.00>~-6.0~,RA8L<57.83/-69.00>~-6.0~,RA9L<57.83/-69.00>~-6.0~,
RC8L<57.83/-69.00>~-6.0~,RC9L<57.83/-69.00>~-6.0~,RD8L<57.83/-69.00>~-6.0~, RC8L<57.83/-69.00>~-6.0~,RC9L<57.83/-69.00>~-6.0~,RD8L<57.83/-69.00>~-6.0~,
@ -6465,7 +6462,7 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9:
UF9M<56.22/-73.27>,UF9N<56.22/-73.27>,UG8M<56.22/-73.27>,UG8N<56.22/-73.27>,UG9M<56.22/-73.27>, UF9M<56.22/-73.27>,UF9N<56.22/-73.27>,UG8M<56.22/-73.27>,UG8N<56.22/-73.27>,UG9M<56.22/-73.27>,
UG9N<56.22/-73.27>,UH8M<56.22/-73.27>,UH8N<56.22/-73.27>,UH9M<56.22/-73.27>,UH9N<56.22/-73.27>, UG9N<56.22/-73.27>,UH8M<56.22/-73.27>,UH8N<56.22/-73.27>,UH9M<56.22/-73.27>,UH9N<56.22/-73.27>,
UI8M<56.22/-73.27>,UI8N<56.22/-73.27>,UI9M<56.22/-73.27>,UI9N<56.22/-73.27>, UI8M<56.22/-73.27>,UI8N<56.22/-73.27>,UI9M<56.22/-73.27>,UI9N<56.22/-73.27>,
=R9MA[31]<56.22/-73.27>, =R9MA[31]<56.22/-73.27>,=UA9MW[31]<56.22/-73.27>,
# Novosibirskaya (NS) # Novosibirskaya (NS)
R8O(18)[31]<55.45/-79.55>,R8P(18)[31]<55.45/-79.55>,R9O(18)[31]<55.45/-79.55>, R8O(18)[31]<55.45/-79.55>,R8P(18)[31]<55.45/-79.55>,R9O(18)[31]<55.45/-79.55>,
R9P(18)[31]<55.45/-79.55>,RA8O(18)[31]<55.45/-79.55>,RA8P(18)[31]<55.45/-79.55>, R9P(18)[31]<55.45/-79.55>,RA8O(18)[31]<55.45/-79.55>,RA8P(18)[31]<55.45/-79.55>,
@ -6508,8 +6505,8 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9:
UG9O(18)[31]<55.45/-79.55>,UG9P(18)[31]<55.45/-79.55>,UH8O(18)[31]<55.45/-79.55>, UG9O(18)[31]<55.45/-79.55>,UG9P(18)[31]<55.45/-79.55>,UH8O(18)[31]<55.45/-79.55>,
UH8P(18)[31]<55.45/-79.55>,UH9O(18)[31]<55.45/-79.55>,UH9P(18)[31]<55.45/-79.55>, UH8P(18)[31]<55.45/-79.55>,UH9O(18)[31]<55.45/-79.55>,UH9P(18)[31]<55.45/-79.55>,
UI8O(18)[31]<55.45/-79.55>,UI8P(18)[31]<55.45/-79.55>,UI9O(18)[31]<55.45/-79.55>, UI8O(18)[31]<55.45/-79.55>,UI8P(18)[31]<55.45/-79.55>,UI9O(18)[31]<55.45/-79.55>,
UI9P(18)[31]<55.45/-79.55>,=R2ET/9(18)[31]<55.45/-79.55>,=RO9O(18)[31]<55.45/-79.55>, UI9P(18)[31]<55.45/-79.55>,=R120RAEM(18)[31]<55.45/-79.55>,=R2ET/9(18)[31]<55.45/-79.55>,
=RR9O(18)[31]<55.45/-79.55>, =RO9O(18)[31]<55.45/-79.55>,=RR9O(18)[31]<55.45/-79.55>,
# Kurganskaya (KN) # Kurganskaya (KN)
R8Q<55.57/-64.75>~-6.0~,R8R<55.57/-64.75>~-6.0~,R9Q<55.57/-64.75>~-6.0~,R9R<55.57/-64.75>~-6.0~, R8Q<55.57/-64.75>~-6.0~,R8R<55.57/-64.75>~-6.0~,R9Q<55.57/-64.75>~-6.0~,R9R<55.57/-64.75>~-6.0~,
RA8Q<55.57/-64.75>~-6.0~,RA8R<55.57/-64.75>~-6.0~,RA9Q<55.57/-64.75>~-6.0~, RA8Q<55.57/-64.75>~-6.0~,RA8R<55.57/-64.75>~-6.0~,RA9Q<55.57/-64.75>~-6.0~,
@ -6551,7 +6548,7 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9:
UG9Q<55.57/-64.75>~-6.0~,UG9R<55.57/-64.75>~-6.0~,UH8Q<55.57/-64.75>~-6.0~, UG9Q<55.57/-64.75>~-6.0~,UG9R<55.57/-64.75>~-6.0~,UH8Q<55.57/-64.75>~-6.0~,
UH8R<55.57/-64.75>~-6.0~,UH9Q<55.57/-64.75>~-6.0~,UH9R<55.57/-64.75>~-6.0~, UH8R<55.57/-64.75>~-6.0~,UH9Q<55.57/-64.75>~-6.0~,UH9R<55.57/-64.75>~-6.0~,
UI8Q<55.57/-64.75>~-6.0~,UI8R<55.57/-64.75>~-6.0~,UI9Q<55.57/-64.75>~-6.0~, UI8Q<55.57/-64.75>~-6.0~,UI8R<55.57/-64.75>~-6.0~,UI9Q<55.57/-64.75>~-6.0~,
UI9R<55.57/-64.75>~-6.0~, UI9R<55.57/-64.75>~-6.0~,=R9CS/P<55.57/-64.75>~-6.0~,
# Orenburgskaya (OB) # Orenburgskaya (OB)
R8S(16)<52.13/-55.60>~-6.0~,R8T(16)<52.13/-55.60>~-6.0~,R9S(16)<52.13/-55.60>~-6.0~, R8S(16)<52.13/-55.60>~-6.0~,R8T(16)<52.13/-55.60>~-6.0~,R9S(16)<52.13/-55.60>~-6.0~,
R9T(16)<52.13/-55.60>~-6.0~,RA8S(16)<52.13/-55.60>~-6.0~,RA8T(16)<52.13/-55.60>~-6.0~, R9T(16)<52.13/-55.60>~-6.0~,RA8S(16)<52.13/-55.60>~-6.0~,RA8T(16)<52.13/-55.60>~-6.0~,
@ -6594,7 +6591,7 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9:
UG9S(16)<52.13/-55.60>~-6.0~,UG9T(16)<52.13/-55.60>~-6.0~,UH8S(16)<52.13/-55.60>~-6.0~, UG9S(16)<52.13/-55.60>~-6.0~,UG9T(16)<52.13/-55.60>~-6.0~,UH8S(16)<52.13/-55.60>~-6.0~,
UH8T(16)<52.13/-55.60>~-6.0~,UH9S(16)<52.13/-55.60>~-6.0~,UH9T(16)<52.13/-55.60>~-6.0~, UH8T(16)<52.13/-55.60>~-6.0~,UH9S(16)<52.13/-55.60>~-6.0~,UH9T(16)<52.13/-55.60>~-6.0~,
UI8S(16)<52.13/-55.60>~-6.0~,UI8T(16)<52.13/-55.60>~-6.0~,UI9S(16)<52.13/-55.60>~-6.0~, UI8S(16)<52.13/-55.60>~-6.0~,UI8T(16)<52.13/-55.60>~-6.0~,UI9S(16)<52.13/-55.60>~-6.0~,
UI9T(16)<52.13/-55.60>~-6.0~,=RN3QOP/4(16)<52.13/-55.60>~-6.0~, UI9T(16)<52.13/-55.60>~-6.0~,
# Kemerovskaya (KE) # Kemerovskaya (KE)
R8U(18)[31]<54.93/-87.23>,R8V(18)[31]<54.93/-87.23>,R9U(18)[31]<54.93/-87.23>, R8U(18)[31]<54.93/-87.23>,R8V(18)[31]<54.93/-87.23>,R9U(18)[31]<54.93/-87.23>,
R9V(18)[31]<54.93/-87.23>,RA8U(18)[31]<54.93/-87.23>,RA8V(18)[31]<54.93/-87.23>, R9V(18)[31]<54.93/-87.23>,RA8U(18)[31]<54.93/-87.23>,RA8V(18)[31]<54.93/-87.23>,
@ -6659,7 +6656,7 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9:
UD9W(16)<54.47/-56.27>~-6.0~,UE8W(16)<54.47/-56.27>~-6.0~,UE9W(16)<54.47/-56.27>~-6.0~, UD9W(16)<54.47/-56.27>~-6.0~,UE8W(16)<54.47/-56.27>~-6.0~,UE9W(16)<54.47/-56.27>~-6.0~,
UF8W(16)<54.47/-56.27>~-6.0~,UF9W(16)<54.47/-56.27>~-6.0~,UG8W(16)<54.47/-56.27>~-6.0~, UF8W(16)<54.47/-56.27>~-6.0~,UF9W(16)<54.47/-56.27>~-6.0~,UG8W(16)<54.47/-56.27>~-6.0~,
UG9W(16)<54.47/-56.27>~-6.0~,UH8W(16)<54.47/-56.27>~-6.0~,UH9W(16)<54.47/-56.27>~-6.0~, UG9W(16)<54.47/-56.27>~-6.0~,UH8W(16)<54.47/-56.27>~-6.0~,UH9W(16)<54.47/-56.27>~-6.0~,
UI8W(16)<54.47/-56.27>~-6.0~,UI9W(16)<54.47/-56.27>~-6.0~, UI8W(16)<54.47/-56.27>~-6.0~,UI9W(16)<54.47/-56.27>~-6.0~,=R1LK/4(16)<54.47/-56.27>~-6.0~,
# Altaysky (AL) # Altaysky (AL)
R8Y(18)[31]<52.77/-82.62>,R9Y(18)[31]<52.77/-82.62>,RA8Y(18)[31]<52.77/-82.62>, R8Y(18)[31]<52.77/-82.62>,R9Y(18)[31]<52.77/-82.62>,RA8Y(18)[31]<52.77/-82.62>,
RA9Y(18)[31]<52.77/-82.62>,RC8Y(18)[31]<52.77/-82.62>,RC9Y(18)[31]<52.77/-82.62>, RA9Y(18)[31]<52.77/-82.62>,RC8Y(18)[31]<52.77/-82.62>,RC9Y(18)[31]<52.77/-82.62>,
@ -6682,7 +6679,6 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9:
UF8Y(18)[31]<52.77/-82.62>,UF9Y(18)[31]<52.77/-82.62>,UG8Y(18)[31]<52.77/-82.62>, UF8Y(18)[31]<52.77/-82.62>,UF9Y(18)[31]<52.77/-82.62>,UG8Y(18)[31]<52.77/-82.62>,
UG9Y(18)[31]<52.77/-82.62>,UH8Y(18)[31]<52.77/-82.62>,UH9Y(18)[31]<52.77/-82.62>, UG9Y(18)[31]<52.77/-82.62>,UH8Y(18)[31]<52.77/-82.62>,UH9Y(18)[31]<52.77/-82.62>,
UI8Y(18)[31]<52.77/-82.62>,UI9Y(18)[31]<52.77/-82.62>,=R0FBA/9(18)[31]<52.77/-82.62>, UI8Y(18)[31]<52.77/-82.62>,UI9Y(18)[31]<52.77/-82.62>,=R0FBA/9(18)[31]<52.77/-82.62>,
=R0QAW/P(18)[31]<52.77/-82.62>,
# Gorno Altayskaya (GA) # Gorno Altayskaya (GA)
R8Z(18)[31]<50.92/-86.92>,R9Z(18)[31]<50.92/-86.92>,RA8Z(18)[31]<50.92/-86.92>, R8Z(18)[31]<50.92/-86.92>,R9Z(18)[31]<50.92/-86.92>,RA8Z(18)[31]<50.92/-86.92>,
RA9Z(18)[31]<50.92/-86.92>,RC8Z(18)[31]<50.92/-86.92>,RC9Z(18)[31]<50.92/-86.92>, RA9Z(18)[31]<50.92/-86.92>,RC8Z(18)[31]<50.92/-86.92>,RC9Z(18)[31]<50.92/-86.92>,
@ -6752,7 +6748,7 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9:
UG0H(18)[32]<59.88/-91.67>~-8.0~,UH0A(18)[32]<59.88/-91.67>~-8.0~, UG0H(18)[32]<59.88/-91.67>~-8.0~,UH0A(18)[32]<59.88/-91.67>~-8.0~,
UH0B(18)[32]<59.88/-91.67>~-8.0~,UH0H(18)[32]<59.88/-91.67>~-8.0~, UH0B(18)[32]<59.88/-91.67>~-8.0~,UH0H(18)[32]<59.88/-91.67>~-8.0~,
UI0A(18)[32]<59.88/-91.67>~-8.0~,UI0B(18)[32]<59.88/-91.67>~-8.0~, UI0A(18)[32]<59.88/-91.67>~-8.0~,UI0B(18)[32]<59.88/-91.67>~-8.0~,
UI0H(18)[32]<59.88/-91.67>~-8.0~,=UA9CTT/P(18)[32]<59.88/-91.67>~-8.0~, UI0H(18)[32]<59.88/-91.67>~-8.0~,=UA9CTT/9(18)[32]<59.88/-91.67>~-8.0~,
# Khabarovsky (HK) # Khabarovsky (HK)
R0C(19)[34]<54.80/-136.83>~-11.0~,RA0C(19)[34]<54.80/-136.83>~-11.0~, R0C(19)[34]<54.80/-136.83>~-11.0~,RA0C(19)[34]<54.80/-136.83>~-11.0~,
RC0C(19)[34]<54.80/-136.83>~-11.0~,RD0C(19)[34]<54.80/-136.83>~-11.0~, RC0C(19)[34]<54.80/-136.83>~-11.0~,RD0C(19)[34]<54.80/-136.83>~-11.0~,
@ -6888,7 +6884,7 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9:
UD0K(19)[25]<66.67/-171.00>~-12.0~,UE0K(19)[25]<66.67/-171.00>~-12.0~, UD0K(19)[25]<66.67/-171.00>~-12.0~,UE0K(19)[25]<66.67/-171.00>~-12.0~,
UF0K(19)[25]<66.67/-171.00>~-12.0~,UG0K(19)[25]<66.67/-171.00>~-12.0~, UF0K(19)[25]<66.67/-171.00>~-12.0~,UG0K(19)[25]<66.67/-171.00>~-12.0~,
UH0K(19)[25]<66.67/-171.00>~-12.0~,UI0K(19)[25]<66.67/-171.00>~-12.0~, UH0K(19)[25]<66.67/-171.00>~-12.0~,UI0K(19)[25]<66.67/-171.00>~-12.0~,
=RU9MV/0(19)[25]<66.67/-171.00>~-12.0~, =UA0KBG(19)[26]<66.67/-171.00>~-12.0~,
# Primorsky (PK) # Primorsky (PK)
R0L(19)[34]<45.33/-134.67>~-11.0~,R0M(19)[34]<45.33/-134.67>~-11.0~, R0L(19)[34]<45.33/-134.67>~-11.0~,R0M(19)[34]<45.33/-134.67>~-11.0~,
R0N(19)[34]<45.33/-134.67>~-11.0~,RA0L(19)[34]<45.33/-134.67>~-11.0~, R0N(19)[34]<45.33/-134.67>~-11.0~,RA0L(19)[34]<45.33/-134.67>~-11.0~,
@ -6937,8 +6933,7 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9:
UH0L(19)[34]<45.33/-134.67>~-11.0~,UH0M(19)[34]<45.33/-134.67>~-11.0~, UH0L(19)[34]<45.33/-134.67>~-11.0~,UH0M(19)[34]<45.33/-134.67>~-11.0~,
UH0N(19)[34]<45.33/-134.67>~-11.0~,UI0L(19)[34]<45.33/-134.67>~-11.0~, UH0N(19)[34]<45.33/-134.67>~-11.0~,UI0L(19)[34]<45.33/-134.67>~-11.0~,
UI0M(19)[34]<45.33/-134.67>~-11.0~,UI0N(19)[34]<45.33/-134.67>~-11.0~, UI0M(19)[34]<45.33/-134.67>~-11.0~,UI0N(19)[34]<45.33/-134.67>~-11.0~,
=R5AF/0(19)[34]<45.33/-134.67>~-11.0~,=RV3DSA/0(19)[34]<45.33/-134.67>~-11.0~, =R1FW/0(19)[34]<45.33/-134.67>~-11.0~,=R5AF/0(19)[34]<45.33/-134.67>~-11.0~,
=RX3X/0(19)[34]<45.33/-134.67>~-11.0~,
# Buryatiya (BU) # Buryatiya (BU)
R0O(18)[32]<53.80/-109.33>~-9.0~,RA0O(18)[32]<53.80/-109.33>~-9.0~, R0O(18)[32]<53.80/-109.33>~-9.0~,RA0O(18)[32]<53.80/-109.33>~-9.0~,
RC0O(18)[32]<53.80/-109.33>~-9.0~,RD0O(18)[32]<53.80/-109.33>~-9.0~, RC0O(18)[32]<53.80/-109.33>~-9.0~,RD0O(18)[32]<53.80/-109.33>~-9.0~,
@ -6973,7 +6968,7 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9:
UD0Q(19)[23]<66.40/-129.17>~-11.0~,UE0Q(19)[23]<66.40/-129.17>~-11.0~, UD0Q(19)[23]<66.40/-129.17>~-11.0~,UE0Q(19)[23]<66.40/-129.17>~-11.0~,
UF0Q(19)[23]<66.40/-129.17>~-11.0~,UG0Q(19)[23]<66.40/-129.17>~-11.0~, UF0Q(19)[23]<66.40/-129.17>~-11.0~,UG0Q(19)[23]<66.40/-129.17>~-11.0~,
UH0Q(19)[23]<66.40/-129.17>~-11.0~,UI0Q(19)[23]<66.40/-129.17>~-11.0~, UH0Q(19)[23]<66.40/-129.17>~-11.0~,UI0Q(19)[23]<66.40/-129.17>~-11.0~,
=RA1WS/0(19)[23]<66.40/-129.17>~-11.0~, =R8CDV/0(19)[23]<66.40/-129.17>~-11.0~,=RA1WS/0(19)[23]<66.40/-129.17>~-11.0~,
# Irkutskaya (IR) # Irkutskaya (IR)
R0R(18)[32]<57.37/-106.00>~-9.0~,R0S(18)[32]<57.37/-106.00>~-9.0~, R0R(18)[32]<57.37/-106.00>~-9.0~,R0S(18)[32]<57.37/-106.00>~-9.0~,
R0T(18)[32]<57.37/-106.00>~-9.0~,RA0R(18)[32]<57.37/-106.00>~-9.0~, R0T(18)[32]<57.37/-106.00>~-9.0~,RA0R(18)[32]<57.37/-106.00>~-9.0~,
@ -7120,7 +7115,8 @@ Asiatic Russia: 17: 30: AS: 55.88: -84.08: -7.0: UA9:
UG0U(18)[32]<54.00/-118.00>~-10.0~,UG0V(18)[32]<54.00/-118.00>~-10.0~, UG0U(18)[32]<54.00/-118.00>~-10.0~,UG0V(18)[32]<54.00/-118.00>~-10.0~,
UH0U(18)[32]<54.00/-118.00>~-10.0~,UH0V(18)[32]<54.00/-118.00>~-10.0~, UH0U(18)[32]<54.00/-118.00>~-10.0~,UH0V(18)[32]<54.00/-118.00>~-10.0~,
UI0U(18)[32]<54.00/-118.00>~-10.0~,UI0V(18)[32]<54.00/-118.00>~-10.0~, UI0U(18)[32]<54.00/-118.00>~-10.0~,UI0V(18)[32]<54.00/-118.00>~-10.0~,
=R9PS/0(18)[32]<54.00/-118.00>~-10.0~; =R0UT(18)[33]<54.00/-118.00>~-10.0~,=R9PS/0(18)[32]<54.00/-118.00>~-10.0~,
=RW0UM(18)[33]<54.00/-118.00>~-10.0~,=UA0UV(18)[33]<54.00/-118.00>~-10.0~;
# ADIF 292 # ADIF 292
Uzbekistan: 17: 30: AS: 41.40: -63.97: -5.0: UK: Uzbekistan: 17: 30: AS: 41.40: -63.97: -5.0: UK:
UJ,UK,UL,UM, UJ,UK,UL,UM,
@ -8114,7 +8110,7 @@ Brunei Darussalam: 28: 54: OC: 4.50: -114.60: -8.0: V8:
V8; V8;
# ADIF 1 # ADIF 1
Canada: 05: 09: NA: 44.35: 78.75: 5.0: VE: Canada: 05: 09: NA: 44.35: 78.75: 5.0: VE:
CF,CG,CJ,CK,VA,VB,VC,VE,VG,VX,VY9,XL,XM,=VER20231103, CF,CG,CJ,CK,VA,VB,VC,VE,VG,VX,VY9,XL,XM,=VER20231121,
# Nova Scotia (NS) # Nova Scotia (NS)
CF1<45.13/62.48>~4.0~,CG1<45.13/62.48>~4.0~,CJ1<45.13/62.48>~4.0~,CK1<45.13/62.48>~4.0~, CF1<45.13/62.48>~4.0~,CG1<45.13/62.48>~4.0~,CJ1<45.13/62.48>~4.0~,CK1<45.13/62.48>~4.0~,
VA1<45.13/62.48>~4.0~,VB1<45.13/62.48>~4.0~,VC1<45.13/62.48>~4.0~,VE1<45.13/62.48>~4.0~, VA1<45.13/62.48>~4.0~,VB1<45.13/62.48>~4.0~,VC1<45.13/62.48>~4.0~,VE1<45.13/62.48>~4.0~,
@ -8128,6 +8124,7 @@ Canada: 05: 09: NA: 44.35: 78.75: 5.0: VE:
CF3(4)[4]<43.80/79.25>,CG3(4)[4]<43.80/79.25>,CJ3(4)[4]<43.80/79.25>,CK3(4)[4]<43.80/79.25>, CF3(4)[4]<43.80/79.25>,CG3(4)[4]<43.80/79.25>,CJ3(4)[4]<43.80/79.25>,CK3(4)[4]<43.80/79.25>,
VA3(4)[4]<43.80/79.25>,VB3(4)[4]<43.80/79.25>,VC3(4)[4]<43.80/79.25>,VE3(4)[4]<43.80/79.25>, VA3(4)[4]<43.80/79.25>,VB3(4)[4]<43.80/79.25>,VC3(4)[4]<43.80/79.25>,VE3(4)[4]<43.80/79.25>,
VG3(4)[4]<43.80/79.25>,VX3(4)[4]<43.80/79.25>,XL3(4)[4]<43.80/79.25>,XM3(4)[4]<43.80/79.25>, VG3(4)[4]<43.80/79.25>,VX3(4)[4]<43.80/79.25>,XL3(4)[4]<43.80/79.25>,XM3(4)[4]<43.80/79.25>,
=VE2PID/3(4)[4]<43.80/79.25>,
# Manitoba (MB) # Manitoba (MB)
CF4(4)[3]<49.88/97.13>~6.0~,CG4(4)[3]<49.88/97.13>~6.0~,CJ4(4)[3]<49.88/97.13>~6.0~, CF4(4)[3]<49.88/97.13>~6.0~,CG4(4)[3]<49.88/97.13>~6.0~,CJ4(4)[3]<49.88/97.13>~6.0~,
CK4(4)[3]<49.88/97.13>~6.0~,VA4(4)[3]<49.88/97.13>~6.0~,VB4(4)[3]<49.88/97.13>~6.0~, CK4(4)[3]<49.88/97.13>~6.0~,VA4(4)[3]<49.88/97.13>~6.0~,VB4(4)[3]<49.88/97.13>~6.0~,

View File

@ -4,12 +4,12 @@
function myCallsignSearch(event) { function myCallsignSearch(event) {
event.preventDefault(); event.preventDefault();
var callsign=document.getElementById('callsignInput').value; var callsign = document.getElementById('callsignInput').value;
//replacing space and tab in callsign and set location href to the specific page // Callsigne sanitize
if (callsign.replace(/\s/g, '').length > 0) { var sanitizedCallsign = encodeURIComponent(callsign.trim().toUpperCase());
location.href = ('/callsign.html?c=').concat((callsign.trim()).toUpperCase()); var redirectURL = '/callsign.html?c=' + sanitizedCallsign;
} location.href = redirectURL;
} }
document.getElementById('form-callsign').addEventListener('submit', myCallsignSearch); document.getElementById('form-callsign').addEventListener('submit', myCallsignSearch);

View File

@ -1,4 +1,3 @@
/* /*
* script loaded inline page in order to prepare data * script loaded inline page in order to prepare data
* for next operations * for next operations
@ -6,7 +5,7 @@
*/ */
//var my_adxo_events=jQuery.parseJSON(my_adxo_events_json.replaceAll("\t","")); //var my_adxo_events=jQuery.parseJSON(my_adxo_events_json.replaceAll("\t",""));
var my_adxo_events=JSON.parse(my_adxo_events_json.replaceAll('\t','')); var my_adxo_events = JSON.parse(my_adxo_events_json.replaceAll('\t', ''));
refresh_timer(); //run first data fetch refresh_timer(); //run first data fetch
var myRefresh = setInterval(refresh_timer, timer_interval_json); var myRefresh = setInterval(refresh_timer, timer_interval_json);
@ -14,5 +13,30 @@ window.onload = () => {
document.getElementById('form-filters').addEventListener('submit', mySearch); document.getElementById('form-filters').addEventListener('submit', mySearch);
}; };
document.getElementById('MyClockDisplay').addEventListener('load', showTime());
/* managing Tom Select for selecting DX callsings */
document.addEventListener('DOMContentLoaded', function () {
var dxcallsElement = document.getElementById('dxcalls');
new TomSelect(document.getElementById('dxcalls'), {
plugins: {
remove_button: {
title: 'Remove callsign',
},
'dropdown_header': {
title: 'Callsign'
},
'clear_button':{
'title':'Remove all selected options',
}
},
persist: false,
create: true,
createOnBlur: true,
allowEmptyOption: true,
maxItems: 6,
wrap: true
});
});
document.getElementById('MyClockDisplay').addEventListener('load',showTime());

View File

@ -295,24 +295,28 @@ function mySearch(event) {
function compose_filter(id, len, qry_json) { function compose_filter(id, len, qry_json) {
try { try {
let selectedFilter = [].map.call(document.getElementById(id).selectedOptions, option => option.value); if (len == 0) { //checkboxes
if (selectedFilter.length < len) { qry_json[id] = document.getElementById(id).checked;
qry_json[id] = []; } else {
selectedFilter.map(function (el) { let selectedFilter = [].map.call(document.getElementById(id).selectedOptions, option => option.value);
if (el) { if (selectedFilter.length < len) { //lists
qry_json[id].push(el); qry_json[id] = [];
} else { selectedFilter.map(function (el) {
return ''; if (el) {
} qry_json[id].push(el);
}); } else {
} else if (len == -1) { return '';
selectedFilter.map(function (el) { }
if (el) { });
qry_json[id]=el; } else if (len == -1) { //combo-box
} else { selectedFilter.map(function (el) {
return ''; if (el) {
} qry_json[id] = el;
}); } else {
return '';
}
});
}
} }
} }
catch (err) { catch (err) {
@ -337,12 +341,15 @@ function refresh_timer() {
let params = {}; let params = {};
//get other filters //get other filters
params = compose_filter('band', 14, params); params = compose_filter('dxcalls', 14, params);
params = compose_filter('band', 14, params);
params = compose_filter('de_re', 7, params); params = compose_filter('de_re', 7, params);
params = compose_filter('dx_re', 7, params); params = compose_filter('dx_re', 7, params);
params = compose_filter('mode', 3, params); params = compose_filter('mode', 3, params);
params = compose_filter('cqdeInput', -1, params); params = compose_filter('cqdeInput', -1, params);
params = compose_filter('cqdxInput', -1, params); params = compose_filter('cqdxInput', -1, params);
params = compose_filter('exclft8', 0, params);
params = compose_filter('exclft4', 0, params);
delete params_sv['lr']; //remove line row number, for future param comparison delete params_sv['lr']; //remove line row number, for future param comparison
@ -351,8 +358,8 @@ function refresh_timer() {
tb.resetData(); tb.resetData();
params_sv = params; params_sv = params;
} }
params['lr']=tb.getLastRowId(); params['lr'] = tb.getLastRowId();
//Open a new connection, using the GET request on the URL endpoint //Open a new connection, using the GET request on the URL endpoint
//let csrfToken = document.querySelector("meta[name='csrf-token']").getAttribute("content"); //let csrfToken = document.querySelector("meta[name='csrf-token']").getAttribute("content");
fetch('spotlist', { fetch('spotlist', {
@ -360,9 +367,9 @@ function refresh_timer() {
cache: 'no-cache', cache: 'no-cache',
credentials: 'same-origin', credentials: 'same-origin',
headers: { headers: {
'Content-Type': 'application/json' 'Content-Type': 'application/json'
}, },
body: JSON.stringify( params ) body: JSON.stringify(params)
}) })
.then((response) => response.json()) .then((response) => response.json())
.then((data_new) => { .then((data_new) => {

View File

@ -1 +1 @@
function myCallsignSearch(e){e.preventDefault();e=document.getElementById("callsignInput").value;0<e.replace(/\s/g,"").length&&(location.href="/callsign.html?c=".concat(e.trim().toUpperCase()))}document.getElementById("form-callsign").addEventListener("submit",myCallsignSearch); function myCallsignSearch(e){e.preventDefault();e=document.getElementById("callsignInput").value,e=encodeURIComponent(e.trim().toUpperCase());location.href="/callsign.html?c="+e}document.getElementById("form-callsign").addEventListener("submit",myCallsignSearch);

View File

@ -1 +1 @@
var my_adxo_events=JSON.parse(my_adxo_events_json.replaceAll("\t","")),myRefresh=(refresh_timer(),setInterval(refresh_timer,timer_interval_json));window.onload=()=>{document.getElementById("form-filters").addEventListener("submit",mySearch)},document.getElementById("MyClockDisplay").addEventListener("load",showTime()); var my_adxo_events=JSON.parse(my_adxo_events_json.replaceAll("\t","")),myRefresh=(refresh_timer(),setInterval(refresh_timer,timer_interval_json));window.onload=()=>{document.getElementById("form-filters").addEventListener("submit",mySearch)},document.getElementById("MyClockDisplay").addEventListener("load",showTime()),document.addEventListener("DOMContentLoaded",function(){document.getElementById("dxcalls");new TomSelect(document.getElementById("dxcalls"),{plugins:{remove_button:{title:"Remove callsign"},dropdown_header:{title:"Callsign"},clear_button:{title:"Remove all selected options"}},persist:!1,create:!0,createOnBlur:!0,allowEmptyOption:!0,maxItems:6,wrap:!0})});

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
{ {
"name": "IU1BOW Spiderweb v2.4.5.72", "name": "IU1BOW Spiderweb v2.5",
"description": "DXCluser for ham radio by IU1BOW", "description": "DXCluser for ham radio by IU1BOW",
"short_name": "Spiderweb", "short_name": "Spiderweb",
"theme_color": "#f3b221", "theme_color": "#f3b221",

View File

@ -1,5 +1,5 @@
// Dichiarazione della costante per il nome della cache // Dichiarazione della costante per il nome della cache
const CACHE_NAME = 'pwa-spiderweb_v2.4.5.72' const CACHE_NAME = 'pwa-spiderweb_v2.5'
// Dichiarazione della costante per gli URL da mettere in cache // Dichiarazione della costante per gli URL da mettere in cache
const URLS_TO_CACHE = [ const URLS_TO_CACHE = [

View File

@ -15,12 +15,17 @@
<link rel="apple-touch-icon" href="/static/images/icons/icon-apple.png"> <link rel="apple-touch-icon" href="/static/images/icons/icon-apple.png">
<link rel="manifest" href="/static/pwa/manifest.webmanifest"> <link rel="manifest" href="/static/pwa/manifest.webmanifest">
<link rel="stylesheet" href="/static/css/rel/style.min.css"> <link rel="stylesheet" href="/static/css/rel/style.min.css">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css"
integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous"> integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Flag Icon CSS -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/6.15.0/css/flag-icons.min.css" <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/6.15.0/css/flag-icons.min.css"
integrity="sha512-bZBu2H0+FGFz/stDN/L0k8J0G8qVsAL0ht1qg5kTwtAheiXwiRKyCq1frwfbSFSJN3jooR5kauE0YjtPzhZtJQ==" integrity="sha512-bZBu2H0+FGFz/stDN/L0k8J0G8qVsAL0ht1qg5kTwtAheiXwiRKyCq1frwfbSFSJN3jooR5kauE0YjtPzhZtJQ=="
crossorigin="anonymous" referrerpolicy="no-referrer" /> crossorigin="anonymous" referrerpolicy="no-referrer" />
<!-- Tom-Select CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/tom-select@2.3.1/dist/css/tom-select.css"
integrity="sha384-dC18+guBm9Lk5IBQfkKIOw2YSxXWMsiuPfIOZNPilutZQn6MgBvcx+vejNQYlrbc"
crossorigin="anonymous" referrerpolicy="no-referrer">
{% endblock head %} {% endblock head %}
</head> </head>
@ -91,7 +96,7 @@
<span class="copyleft">&copy;</span> Copyleft: <span class="copyleft">&copy;</span> Copyleft:
<span id="copyDate"></span> <span id="copyDate"></span>
<a href="https://github.com/coulisse/spiderweb/" target="blank" rel="noopener">IU1BOW - Spiderweb</a> <a href="https://github.com/coulisse/spiderweb/" target="blank" rel="noopener">IU1BOW - Spiderweb</a>
<span id="version">v2.4.5.72</span> <span id="version">v2.5</span>
</div> </div>
</footer> </footer>
<script async src="static/js/rel/load-sw.min.js"></script> <script async src="static/js/rel/load-sw.min.js"></script>
@ -101,10 +106,17 @@
{% endblock app_data %} {% endblock app_data %}
</script> </script>
<script defer src="static/js/rel/common.min.js"></script> <script defer src="static/js/rel/common.min.js"></script>
<!-- Bootstrap -->
<script defer src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" <script defer src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"
integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4"
crossorigin="anonymous"></script> crossorigin="anonymous"></script>
<!-- Tom-select library -->
<script defer src="https://cdn.jsdelivr.net/npm/tom-select@2.3.1/dist/js/tom-select.complete.min.js"
integrity="sha384-cnROoUgVILyibe3J0zhzWoJ9p2WmdnK7j/BOTSWqVDbC1pVw2d+i6Q/1ESKJKCYf"
crossorigin="anonymous"></script>
</body> </body>
{% block app_scripts %} {% block app_scripts %}
<script async src="static/js/rel/callsign_search.min.js"></script> <script async src="static/js/rel/callsign_search.min.js"></script>

View File

@ -6,7 +6,7 @@
{% endblock %} {% endblock %}
{% block head %} {% block head %}
{{ super() }} {{ super() }}
{% endblock %} {% endblock %}
</head> </head>
{% block titles %} {% block titles %}
<h1 class="display-4 text-white">WEB DX Cluster</h1> <h1 class="display-4 text-white">WEB DX Cluster</h1>
@ -26,6 +26,13 @@
<div class="col-md-auto ml-2 collapse rounded-sm shadow mb-5 bg-body" id="collapseFilters"> <div class="col-md-auto ml-2 collapse rounded-sm shadow mb-5 bg-body" id="collapseFilters">
<form method="POST" id="form-filters" enctype="application/x-www-form-urlencoded"> <form method="POST" id="form-filters" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" /> <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<strong>DX Call(s)</strong>
<select id="dxcalls" data-placeholder="Choose callsign" autocomplete="off" multiple>
{% for item in dx_calls %}
<option>{{item}}</option>
{% endfor %}
</select>
<p></p>
<strong>Band</strong> <strong>Band</strong>
<select class="form-select overflow-hidden" id="band" size="14" multiple> <select class="form-select overflow-hidden" id="band" size="14" multiple>
{% for dict_item in bands['bands']|reverse %} {% for dict_item in bands['bands']|reverse %}
@ -41,6 +48,10 @@
<option selected value="phone">PHONE</option> <option selected value="phone">PHONE</option>
<option selected value="digi">DIGI</option> <option selected value="digi">DIGI</option>
</select> </select>
<div class="excl-container">
<input type="checkbox" id="exclft8"/><label for="exclft8"> Excl FT8</label>
<input type="checkbox" id="exclft4"/><label for="exclft4"> Excl FT4</label>
</div>
<p></p> <p></p>
<div class="row"> <div class="row">
<div class="col"> <div class="col">
@ -309,6 +320,7 @@ var continents_cq={{continents["continents"]|tojson|safe}};
var band_frequencies={{bands["bands"]|tojson|safe}}; var band_frequencies={{bands["bands"]|tojson|safe}};
{% endblock app_data %} {% endblock app_data %}
{% block app_scripts %} {% block app_scripts %}
{{ super() }} {{ super() }}
<script defer src="static/js/rel/table.min.js"></script> <script defer src="static/js/rel/table.min.js"></script>

213
templates/propagation.html Normal file
View File

@ -0,0 +1,213 @@
{% extends "_base.html" %}
<head>
{% block title %}
<title>DX Cluster from IU1BOW: Propagation</title>
{% endblock %}
{% block head %}
{{ super() }}
{% endblock %}
</head>
{% block titles %}
<h1 class="display-4 text-white">Propagation</h1>
<p class="lead text-light">WEB DX Cluster For HAM Radio</p>
{% endblock %}
{% block filters %}
{% endblock %}
{% block contents %}
<div class="d-flex justify-content-center">
<div id="propagation-wrapper" class="row">
<div id="hamqsl-container" class="row shadow-lg mb-5 rounded justify-content-center">
<!-- Macro used to generate color of a kpi card. -->
{% macro calculate_card_color(value, good=None, medium=None, no_good=None) %}
{# Usage: for string value, pass good, medium and no-good #}
{# for numeric value, pass good and no-good #}
{% if value|float > 0 %}
{% set numeric_value = value|float %}
{% if good is defined and no_good is defined %}
{% set numeric_good = good[0]|float %}
{% set numeric_no_good = no_good[0]|float %}
{% if numeric_good > numeric_no_good %}
{% if numeric_value >= numeric_good %}
good
{% elif numeric_value < numeric_no_good %}
no-good
{% else %}
medium
{% endif %}
{% else %}
{% if numeric_value < numeric_good %}
good
{% elif numeric_value >= numeric_no_good %}
no-good
{% else %}
medium
{% endif %}
{% endif %}
{% endif %}
{% else %}
{# Check litteral values #}
{% if good is defined and value in good %}
good
{% elif medium is defined and value in medium %}
medium
{% elif no_good is defined and value in no_good %}
no-good
{% else %}
grey-dark
{% endif %}
{% endif %}
{% endmacro %}
<!-- Macro used to generate a kpi card. -->
{% macro generate_kpi_card(card_data, good=None, medium=None, no_good=None) %}
{% set card_value = card_data.value|lower %}
{% if card_value != "norpt" and card_value != "no report" and card_value!= "no report" and card_value!= "" %}
<div class="kpi-card {{ calculate_card_color(card_value, good, medium, no_good) }}" >
<span class="card-value">{{ card_data.value }}</span>
<span class="card-text">{{ card_data.text }}</span>
<!-- Aggiungi l'icona se necessario -->
{% if card_data.icon %}
<i class="fas fa-shopping-cart icon"></i>
{% endif %}
</div>
{% endif %}
{% endmacro %}
<!-- Card container -->
<div id="card-container" class="col">
{% for card_data in [
{'value': solar_data.solar.solardata.solarflux, 'text': 'SFI', 'good': [100], 'no_good': [70]},
{'value': solar_data.solar.solardata.aindex, 'text': 'A Index', 'good': [7], 'no_good': [50]},
{'value': solar_data.solar.solardata.kindex, 'text': 'K Index', 'good': [3], 'no_good': [7]},
{'value': solar_data.solar.solardata.kindexnt, 'text': 'K Index NT'},
{'value': solar_data.solar.solardata.sunspots, 'text': 'Sun spots', 'good': [101], 'no_good': [50]},
{'value': solar_data.solar.solardata.latdegree, 'text': 'Aurora latitude','good': [30], 'no_good': [60]},
{'value': solar_data.solar.solardata.solarwind, 'text': 'Solar wind (km/s)','good': [400], 'no_good': [500]},
{'value': solar_data.solar.solardata.magneticfield, 'text': 'Magnetic field','good': [0.30], 'no_good': [0.50]},
{'value': solar_data.solar.solardata.geomagfield, 'text': 'Geomagnetic field','good': ['vr quiet','quiet'], 'medium': ['unsettld','min strm'], 'no_good': ['stormy','very stormy']},
{'value': solar_data.solar.solardata.signalnoise, 'text': 'Signal noise', 'good': ['s0-s1','s1-s2'], 'medium': ['s2-s3','s3-s4'], 'no_good': ['s4-s6','s5-s6','s6-s7','s7-s8','s8-s9']},
{'value': solar_data.solar.solardata.fof2, 'text': 'Fof2 (Mhz)','good': [4], 'no_good': [2]}
] %}
{{ generate_kpi_card(card_data, card_data.good, card_data.medium, card_data.no_good) }}
{% endfor %}
</div> <!-- card container -->
<div id="conditions-container" class="col">
<div id="hf-conditions" class="row">
<!-- HF Band -->
<!-- Macro for define band color -->
{% macro color_band(value) %}
{% set value = value|lower %}
{% if value == "poor" %}
badge bg-danger
{% elif value == "fair" %}
badge bg-warning text-dark
{% else %}
badge bg-success
{% endif %}
{% endmacro %}
<!-- HF Band table -->
<table class="table">
<thead class="thead-dark">
<tr>
<th scope="col">
<span >Band&nbsp;<i class="bi bi-reception-3"></i></span>
</th>
<th scope="col" class="text-center">
<span >Day&nbsp;<i class="bi bi-sun-fill" ></i></span>
</th>
<th scope="col" class="text-center">
<span >Night&nbsp;<i class="bi bi-moon-fill"></i></span>
</th>
</tr>
</thead>
<!-- HF Band table body -->
<!-- parse dict in order to couple day and night conditions for each band
When found a band compose a table row, using macro color_band
to define the color of the condition showed
-->
<tbody>
{% set band_length = solar_data.solar.solardata.calculatedconditions.band | length / 2%}
{% for i_band in range(0, band_length|int) %}
{% set day_band = solar_data.solar.solardata.calculatedconditions.band | selectattr('@name', 'equalto', solar_data.solar.solardata.calculatedconditions.band[i_band]['@name']) | selectattr('@time', 'equalto', 'day') | first %}
{% set night_band = solar_data.solar.solardata.calculatedconditions.band | selectattr('@name', 'equalto', solar_data.solar.solardata.calculatedconditions.band[i_band]['@name']) | selectattr('@time', 'equalto', 'night') | first %}
<tr>
<td><span>{{ day_band['@name'] }}</span></td>
<td class="text-center"><span class="{{ color_band(day_band['#text']) }}">{{ day_band['#text'] }}</span></td>
<td class="text-center"><span class="{{ color_band(night_band['#text']) }}">{{ night_band['#text'] }}</span></td>
</tr>
{% endfor %}
</tbody>
</table>
</div> <!-- hf conditions -->
<div id="vhf-conditions" class="row">
<!-- VHF Table -->
<table class="table">
<thead class="thead-dark">
<tr>
<th scope="col">
<span >Phenomenon&nbsp;<i class="bi bi-activity"></i></span>
</th>
<th scope="col" class="text-center">
<span >Location&nbsp;<i class="bi bi-globe2"></i></span>
</th>
<th scope="col" class="text-center">
<span >Condition&nbsp;<i class="bi bi-speedometer"></i></span>
</th>
</tr>
</thead>
<!-- VHF Band table body -->
<tbody>
{% set vhf_phenomenon_length = solar_data.solar.solardata.calculatedvhfconditions.phenomenon | length %}
{% for i_vhf_phenomenon in range(0, vhf_phenomenon_length) %}
<tr>
<td><span>{{solar_data.solar.solardata.calculatedvhfconditions.phenomenon[i_vhf_phenomenon]['@name'] }}</span></td>
<td class="text-center"><span class="">{{ solar_data.solar.solardata.calculatedvhfconditions.phenomenon[i_vhf_phenomenon]['@location']| replace('_', ' ')|title }}</span></td>
<td class="text-center"><span class="">{{ solar_data.solar.solardata.calculatedvhfconditions.phenomenon[i_vhf_phenomenon]['#text']| replace('_', ' '|title) }}</span></td>
</tr>
{% endfor %}
</tbody>
</table>
</div> <!-- VHF conditions -->
</div> <!-- conditions container -->
<div class="row">
<span id="solar-data-updated-txt" >Updated: {{ solar_data.solar.solardata.updated }} </span>
<span class="badge bg-secondary">Source:
<a class="link-light" href="{{ solar_data.solar.solardata.source['@url']|replace('http://','https://') }}" target="_blank"
rel="noopener noreferrer">{{ solar_data.solar.solardata.source['@url']|replace('http://','https://') }}</a>
</span>
</div>
</div> <!--hamqsl container -->
<!-- MUF -->
<div id="muf-container" class="row shadow-lg mb-5 bg-body rounded">
<div class="col d-flex align-items-center justify-content-center">
<a href="https://prop.kc2g.com" target="_blank" rel="noopener noreferrer">
<img src="https://prop.kc2g.com/renders/current/mufd-normal-now.svg" id="muf-img" class="img-fluid" alt="muf map" loading="lazy">
</a>
</div>
<br class=”blank” />
<span class="badge bg-secondary">MUF map powered by
<a class="link-light" href="https://prop.kc2g.com" target="_blank"
rel="noopener noreferrer">https://prop.kc2g.com/</a>
</span>
</div> <!-- muf container -->
</div> <!-- propagation-wrapper -->
</div> <!-- entire page div -->
{% endblock %}
{% block app_data %}
{% endblock %}
{% block app_scritps %}
{% endblock %}
{% block inline_scripts %}
{% endblock %}

View File

@ -11,6 +11,7 @@ if [ $# -gt 0 ]
fi fi
if [ "$1" == "-d" ]; then if [ "$1" == "-d" ]; then
rm -rf __pycache__
flask --app webapp.py --debug run --exclude-patterns *webapp.log* flask --app webapp.py --debug run --exclude-patterns *webapp.log*
else else
flask --app webapp.py run flask --app webapp.py run

124
webapp.py
View File

@ -13,11 +13,12 @@ from lib.adxo import get_adxo_events
from lib.qry import query_manager from lib.qry import query_manager
from lib.cty import prefix_table from lib.cty import prefix_table
from lib.plot_data_provider import ContinentsBandsProvider, SpotsPerMounthProvider, SpotsTrend, HourBand, WorldDxSpotsLive from lib.plot_data_provider import ContinentsBandsProvider, SpotsPerMounthProvider, SpotsTrend, HourBand, WorldDxSpotsLive
import requests
import xmltodict
logging.config.fileConfig("cfg/webapp_log_config.ini", disable_existing_loggers=True) logging.config.fileConfig("cfg/webapp_log_config.ini", disable_existing_loggers=True)
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
logger.info("Start") logger.info("Starting SPIDERWEB")
app = flask.Flask(__name__) app = flask.Flask(__name__)
app.config["SECRET_KEY"] = secrets.token_hex(16) app.config["SECRET_KEY"] = secrets.token_hex(16)
@ -26,6 +27,10 @@ app.config.update(
SESSION_COOKIE_HTTPONLY=False, SESSION_COOKIE_HTTPONLY=False,
SESSION_COOKIE_SAMESITE="Strict", SESSION_COOKIE_SAMESITE="Strict",
) )
version_file = open("cfg/version.txt", "r")
app.config["VERSION"] = version_file.read().strip()
version_file.close
logger.info("Version:"+app.config["VERSION"] )
inline_script_nonce = "" inline_script_nonce = ""
@ -38,6 +43,10 @@ if app.config["DEBUG"]:
else: else:
minify(app=app, html=True, js=True, cssless=False) minify(app=app, html=True, js=True, cssless=False)
#removing whitespace from jinja2 html rendered
app.jinja_env.trim_blocks = True
app.jinja_env.lstrip_blocks = True
# load config file # load config file
with open("cfg/config.json") as json_data_file: with open("cfg/config.json") as json_data_file:
cfg = json.load(json_data_file) cfg = json.load(json_data_file)
@ -98,13 +107,17 @@ def query_build_callsign(callsign):
def query_build(parameters): def query_build(parameters):
try: try:
last_rowid = str(parameters["lr"]) # Last rowid fetched by front end last_rowid = str(parameters["lr"]) # Last rowid fetched by front end
get_param = lambda parameters, parm_name: parameters[parm_name] if (parm_name in parameters) else [] get_param = lambda parameters, parm_name: parameters[parm_name] if (parm_name in parameters) else []
dxcalls=get_param(parameters, "dxcalls")
band=get_param(parameters, "band") band=get_param(parameters, "band")
dere=get_param(parameters, "de_re") dere=get_param(parameters, "de_re")
dxre=get_param(parameters, "dx_re") dxre=get_param(parameters, "dx_re")
mode=get_param(parameters, "mode") mode=get_param(parameters, "mode")
exclft8=get_param(parameters, "exclft8")
exclft4=get_param(parameters, "exclft4")
decq = [] decq = []
if "cqdeInput" in parameters: if "cqdeInput" in parameters:
@ -116,6 +129,9 @@ def query_build(parameters):
query_string = "" query_string = ""
#construct callsign of spot dx callsign
dxcalls_qry_string = " AND spotcall IN (" + ''.join(map(lambda x: "'" + x + "'," if x != dxcalls[-1] else "'" + x + "'", dxcalls)) + ")"
# construct band query decoding frequencies with json file # construct band query decoding frequencies with json file
band_qry_string = " AND ((" band_qry_string = " AND (("
for i, item_band in enumerate(band): for i, item_band in enumerate(band):
@ -145,6 +161,36 @@ def query_build(parameters):
) )
mode_qry_string += "))" mode_qry_string += "))"
#Exluding FT8 or FT4 connection
ft8_qry_string = " AND ("
if exclft8:
ft8_qry_string += "(comment NOT LIKE '%FT8%')"
single_mode = find_id_json(modes_frequencies["modes"], "digi-ft8")
for j in range(len(single_mode["freq"])):
ft8_qry_string += (
" AND (freq NOT BETWEEN "
+ str(single_mode["freq"][j]["min"])
+ " AND "
+ str(single_mode["freq"][j]["max"])
+ ")"
)
ft8_qry_string += ")"
ft4_qry_string = " AND ("
if exclft4:
ft4_qry_string += "(comment NOT LIKE '%FT4%')"
single_mode = find_id_json(modes_frequencies["modes"], "digi-ft4")
for j in range(len(single_mode["freq"])):
ft4_qry_string += (
" AND (freq NOT BETWEEN "
+ str(single_mode["freq"][j]["min"])
+ " AND "
+ str(single_mode["freq"][j]["max"])
+ ")"
)
ft4_qry_string += ")"
# construct DE continent region query # construct DE continent region query
dere_qry_string = " AND spottercq IN (" dere_qry_string = " AND spottercq IN ("
for i, item_dere in enumerate(dere): for i, item_dere in enumerate(dere):
@ -185,6 +231,8 @@ def query_build(parameters):
+ last_rowid + last_rowid
) )
if dxcalls:
query_string += dxcalls_qry_string
if len(band) > 0: if len(band) > 0:
query_string += band_qry_string query_string += band_qry_string
@ -192,6 +240,12 @@ def query_build(parameters):
if len(mode) > 0: if len(mode) > 0:
query_string += mode_qry_string query_string += mode_qry_string
if exclft8:
query_string += ft8_qry_string
if exclft4:
query_string += ft4_qry_string
if len(dere) > 0: if len(dere) > 0:
query_string += dere_qry_string query_string += dere_qry_string
@ -207,6 +261,8 @@ def query_build(parameters):
query_string += " ORDER BY rowid desc limit 50;" query_string += " ORDER BY rowid desc limit 50;"
logger.debug (query_string)
except Exception as e: except Exception as e:
logger.error(e) logger.error(e)
query_string = "" query_string = ""
@ -312,11 +368,33 @@ def spots():
adxo_events=adxo_events, adxo_events=adxo_events,
continents=continents_cq, continents=continents_cq,
bands=band_frequencies, bands=band_frequencies,
dx_calls=get_dx_calls(),
) )
) )
return response return response
#Show all dx spot callsigns
def get_dx_calls():
try:
query_string = "SELECT spotcall AS dx FROM spot GROUP BY spotcall ORDER BY count(spotcall) DESC LIMIT 500"
qm.qry(query_string)
data = qm.get_data()
row_headers = qm.get_headers()
payload = []
for result in data:
main_result = dict(zip(row_headers, result))
payload.append(main_result["dx"])
logger.debug("last DX Callsigns:")
logger.debug(payload)
return payload
except Exception as e:
return []
@app.route("/service-worker.js", methods=["GET"]) @app.route("/service-worker.js", methods=["GET"])
def sw(): def sw():
return app.send_static_file("pwa/service-worker.js") return app.send_static_file("pwa/service-worker.js")
@ -347,6 +425,36 @@ def plots():
) )
return response return response
@app.route("/propagation.html")
def propagation():
#get solar data in XML format and convert to json
solar_data={}
url = "https://www.hamqsl.com/solarxml.php"
try:
logging.debug("connection to: " + url)
req = requests.get(url)
logger.debug(req.content)
solar_data = xmltodict.parse(req.content)
logger.debug(solar_data)
except Exception as e1:
logging.error(e1)
response = flask.Response(
render_template(
"propagation.html",
inline_script_nonce=get_nonce(),
mycallsign=cfg["mycallsign"],
telnet=cfg["telnet"]["host"]+":"+cfg["telnet"]["port"],
mail=cfg["mail"],
menu_list=cfg["menu"]["menu_list"],
solar_data=solar_data
)
)
return response
@app.route("/cookies.html", methods=["GET"]) @app.route("/cookies.html", methods=["GET"])
def cookies(): def cookies():
response = flask.Response( response = flask.Response(
@ -493,28 +601,30 @@ def add_security_headers(resp):
resp.headers["X-Frame-Options"] = "SAMEORIGIN" resp.headers["X-Frame-Options"] = "SAMEORIGIN"
resp.headers["X-Content-Type-Options"] = "nosniff" resp.headers["X-Content-Type-Options"] = "nosniff"
resp.headers["Referrer-Policy"] = "strict-origin-when-cross-origin" resp.headers["Referrer-Policy"] = "strict-origin-when-cross-origin"
#resp.headers["Access-Control-Allow-Origin"]= "sidc.be prop.kc2g.com www.hamqsl.com"
resp.headers["Cache-Control"] = "public, no-cache" resp.headers["Cache-Control"] = "public, no-cache"
resp.headers["Pragma"] = "no-cache" resp.headers["Pragma"] = "no-cache"
resp.headers["ETag"] = app.config["VERSION"]
#resp.headers["Report-To"] = '{"group":"csp-endpoint", "max_age":10886400, "endpoints":[{"url":"/csp-reports"}]}'
resp.headers["Content-Security-Policy"] = "\ resp.headers["Content-Security-Policy"] = "\
default-src 'self';\ default-src 'self';\
script-src 'self' cdnjs.cloudflare.com cdn.jsdelivr.net 'nonce-"+inline_script_nonce+"';\ script-src 'self' cdnjs.cloudflare.com cdn.jsdelivr.net 'nonce-"+inline_script_nonce+"';\
style-src 'self' cdnjs.cloudflare.com cdn.jsdelivr.net 'unsafe-inline';\ style-src 'self' cdnjs.cloudflare.com cdn.jsdelivr.net;\
object-src 'none';base-uri 'self';\ object-src 'none';base-uri 'self';\
connect-src 'self' cdn.jsdelivr.net cdnjs.cloudflare.com sidc.be;\ connect-src 'self' cdn.jsdelivr.net cdnjs.cloudflare.com sidc.be prop.kc2g.com www.hamqsl.com;\
font-src 'self' cdn.jsdelivr.net;\ font-src 'self' cdn.jsdelivr.net;\
frame-src 'self';\ frame-src 'self';\
frame-ancestors 'none';\ frame-ancestors 'none';\
form-action 'none';\ form-action 'none';\
img-src 'self' data: cdnjs.cloudflare.com sidc.be;\ img-src 'self' data: cdnjs.cloudflare.com sidc.be prop.kc2g.com ;\
manifest-src 'self';\ manifest-src 'self';\
media-src 'self';\ media-src 'self';\
worker-src 'self';\ worker-src 'self';\
worker-src 'self';\
report-uri /csp-reports;\ report-uri /csp-reports;\
" "
return resp return resp
#report-to csp-endpoint;\
#script-src 'self' cdnjs.cloudflare.com cdn.jsdelivr.net 'nonce-sedfGFG32xs';\ #script-src 'self' cdnjs.cloudflare.com cdn.jsdelivr.net 'nonce-sedfGFG32xs';\
#script-src 'self' cdnjs.cloudflare.com cdn.jsdelivr.net 'nonce-"+inline_script_nonce+"';\ #script-src 'self' cdnjs.cloudflare.com cdn.jsdelivr.net 'nonce-"+inline_script_nonce+"';\

611
webapp.py.old Normal file
View File

@ -0,0 +1,611 @@
__author__ = "IU1BOW - Corrado"
import flask
import secrets
from flask import request, render_template
from flask_wtf.csrf import CSRFProtect
from flask_minify import minify
import json
import threading
import logging
import logging.config
from lib.dxtelnet import who
from lib.adxo import get_adxo_events
from lib.qry import query_manager
from lib.cty import prefix_table
from lib.plot_data_provider import ContinentsBandsProvider, SpotsPerMounthProvider, SpotsTrend, HourBand, WorldDxSpotsLive
logging.config.fileConfig("cfg/webapp_log_config.ini", disable_existing_loggers=True)
logger = logging.getLogger(__name__)
logger.info("Starting SPIDERWEB")
app = flask.Flask(__name__)
app.config["SECRET_KEY"] = secrets.token_hex(16)
app.config.update(
SESSION_COOKIE_SECURE=True,
SESSION_COOKIE_HTTPONLY=False,
SESSION_COOKIE_SAMESITE="Strict",
)
version_file = open("cfg/version.txt", "r")
app.config["VERSION"] = version_file.read().strip()
version_file.close
logger.info("Version:"+app.config["VERSION"] )
inline_script_nonce = ""
csrf = CSRFProtect(app)
logger.debug(app.config)
if app.config["DEBUG"]:
minify(app=app, html=False, js=False, cssless=False)
else:
minify(app=app, html=True, js=True, cssless=False)
# load config file
with open("cfg/config.json") as json_data_file:
cfg = json.load(json_data_file)
logging.debug("CFG:")
logging.debug(cfg)
# load bands file
with open("cfg/bands.json") as json_bands:
band_frequencies = json.load(json_bands)
# load mode file
with open("cfg/modes.json") as json_modes:
modes_frequencies = json.load(json_modes)
# load continents-cq file
with open("cfg/continents.json") as json_continents:
continents_cq = json.load(json_continents)
# read and set default for enabling cq filter
if cfg.get("enable_cq_filter"):
enable_cq_filter = cfg["enable_cq_filter"].upper()
else:
enable_cq_filter = "N"
# define country table for search info on callsigns
pfxt = prefix_table()
# create object query manager
qm = query_manager()
# find id in json : ie frequency / continent
def find_id_json(json_object, name):
return [obj for obj in json_object if obj["id"] == name][0]
def query_build_callsign(callsign):
query_string = ""
if len(callsign) <= 14:
query_string = (
"(SELECT rowid, spotter AS de, freq, spotcall AS dx, comment AS comm, time, spotdxcc from spot WHERE spotter='"
+ callsign
+ "'"
)
query_string += " ORDER BY rowid desc limit 10)"
query_string += " UNION "
query_string += (
"(SELECT rowid, spotter AS de, freq, spotcall AS dx, comment AS comm, time, spotdxcc from spot WHERE spotcall='"
+ callsign
+ "'"
)
query_string += " ORDER BY rowid desc limit 10);"
else:
logging.warning("callsign too long")
return query_string
def query_build(parameters):
try:
last_rowid = str(parameters["lr"]) # Last rowid fetched by front end
get_param = lambda parameters, parm_name: parameters[parm_name] if (parm_name in parameters) else []
dxcalls=get_param(parameters, "dxcalls")
band=get_param(parameters, "band")
dere=get_param(parameters, "de_re")
dxre=get_param(parameters, "dx_re")
mode=get_param(parameters, "mode")
exclft8=get_param(parameters, "exclft8")
exclft4=get_param(parameters, "exclft4")
decq = []
if "cqdeInput" in parameters:
decq[0] = parameters["cqdeInput"]
dxcq = []
if "cqdxInput" in parameters:
dxcq[0] = parameters["cqdxInput"]
query_string = ""
#construct callsign of spot dx callsign
dxcalls_qry_string = " AND spotcall IN (" + ''.join(map(lambda x: "'" + x + "'," if x != dxcalls[-1] else "'" + x + "'", dxcalls)) + ")"
# construct band query decoding frequencies with json file
band_qry_string = " AND (("
for i, item_band in enumerate(band):
freq = find_id_json(band_frequencies["bands"], item_band)
if i > 0:
band_qry_string += ") OR ("
band_qry_string += (
"freq BETWEEN " + str(freq["min"]) + " AND " + str(freq["max"])
)
band_qry_string += "))"
# construct mode query
mode_qry_string = " AND (("
for i, item_mode in enumerate(mode):
single_mode = find_id_json(modes_frequencies["modes"], item_mode)
if i > 0:
mode_qry_string += ") OR ("
for j in range(len(single_mode["freq"])):
if j > 0:
mode_qry_string += ") OR ("
mode_qry_string += (
"freq BETWEEN "
+ str(single_mode["freq"][j]["min"])
+ " AND "
+ str(single_mode["freq"][j]["max"])
)
mode_qry_string += "))"
#Exluding FT8 or FT4 connection
ft8_qry_string = " AND ("
if exclft8:
ft8_qry_string += "(comment NOT LIKE '%FT8%')"
single_mode = find_id_json(modes_frequencies["modes"], "digi-ft8")
for j in range(len(single_mode["freq"])):
ft8_qry_string += (
" AND (freq NOT BETWEEN "
+ str(single_mode["freq"][j]["min"])
+ " AND "
+ str(single_mode["freq"][j]["max"])
+ ")"
)
ft8_qry_string += ")"
ft4_qry_string = " AND ("
if exclft4:
ft4_qry_string += "(comment NOT LIKE '%FT4%')"
single_mode = find_id_json(modes_frequencies["modes"], "digi-ft4")
for j in range(len(single_mode["freq"])):
ft4_qry_string += (
" AND (freq NOT BETWEEN "
+ str(single_mode["freq"][j]["min"])
+ " AND "
+ str(single_mode["freq"][j]["max"])
+ ")"
)
ft4_qry_string += ")"
# construct DE continent region query
dere_qry_string = " AND spottercq IN ("
for i, item_dere in enumerate(dere):
continent = find_id_json(continents_cq["continents"], item_dere)
if i > 0:
dere_qry_string += ","
dere_qry_string += str(continent["cq"])
dere_qry_string += ")"
# construct DX continent region query
dxre_qry_string = " AND spotcq IN ("
for i, item_dxre in enumerate(dxre):
continent = find_id_json(continents_cq["continents"], item_dxre)
if i > 0:
dxre_qry_string += ","
dxre_qry_string += str(continent["cq"])
dxre_qry_string += ")"
if enable_cq_filter == "Y":
# construct de cq query
decq_qry_string = ""
if len(decq) == 1:
if decq[0].isnumeric():
decq_qry_string = " AND spottercq =" + decq[0]
# construct dx cq query
dxcq_qry_string = ""
if len(dxcq) == 1:
if dxcq[0].isnumeric():
dxcq_qry_string = " AND spotcq =" + dxcq[0]
if last_rowid is None:
last_rowid = "0"
if not last_rowid.isnumeric():
last_rowid = 0
query_string = (
"SELECT rowid, spotter AS de, freq, spotcall AS dx, comment AS comm, time, spotdxcc from spot WHERE rowid > "
+ last_rowid
)
if dxcalls:
query_string += dxcalls_qry_string
if len(band) > 0:
query_string += band_qry_string
if len(mode) > 0:
query_string += mode_qry_string
if exclft8:
query_string += ft8_qry_string
if exclft4:
query_string += ft4_qry_string
if len(dere) > 0:
query_string += dere_qry_string
if len(dxre) > 0:
query_string += dxre_qry_string
if enable_cq_filter == "Y":
if len(decq_qry_string) > 0:
query_string += decq_qry_string
if len(dxcq_qry_string) > 0:
query_string += dxcq_qry_string
query_string += " ORDER BY rowid desc limit 50;"
logger.debug (query_string)
except Exception as e:
logger.error(e)
query_string = ""
return query_string
# the main query to show spots
# it gets url parameter in order to apply the build the right query
# and apply the filter required. It returns a json with the spots
def spotquery(parameters):
try:
if 'callsign' in parameters:
logging.debug('search callsign')
query_string = query_build_callsign( parameters['callsign'] )
else:
logging.debug('search eith other filters')
query_string = query_build(parameters)
qm.qry(query_string)
data = qm.get_data()
row_headers = qm.get_headers()
logger.debug("query done")
logger.debug(data)
if data is None or len(data) == 0:
logger.warning("no data found")
payload = []
for result in data:
# create dictionary from recorset
main_result = dict(zip(row_headers, result))
# find the country in prefix table
search_prefix = pfxt.find(main_result["dx"])
# merge recordset and contry prefix
main_result["country"] = search_prefix["country"]
main_result["iso"] = search_prefix["iso"]
payload.append({**main_result})
return payload
except Exception as e:
logger.error(e)
# find adxo events
adxo_events = None
def get_adxo():
global adxo_events
adxo_events = get_adxo_events()
threading.Timer(12 * 3600, get_adxo).start()
get_adxo()
# create data provider for charts
heatmap_cbp = ContinentsBandsProvider(logger, qm, continents_cq, band_frequencies)
bar_graph_spm = SpotsPerMounthProvider(logger, qm)
line_graph_st = SpotsTrend(logger, qm)
bubble_graph_hb = HourBand(logger, qm, band_frequencies)
geo_graph_wdsl = WorldDxSpotsLive(logger, qm, pfxt)
# ROUTINGS
@app.route("/spotlist", methods=["POST"])
@csrf.exempt
def spotlist():
logger.debug(request.json)
response = flask.Response(json.dumps(spotquery(request.json)))
return response
def who_is_connected():
host=cfg["telnet"]["host"]
port=cfg["telnet"]["port"]
user=cfg["telnet"]["user"]
password=cfg["telnet"]["password"]
response = who(host, port, user, password)
logger.debug("list of connected clusters:")
logger.debug(response)
return response
#Calculate nonce token used in inline script and in csp "script-src" header
def get_nonce():
global inline_script_nonce
inline_script_nonce = secrets.token_hex()
return inline_script_nonce
@app.route("/", methods=["GET"])
@app.route("/index.html", methods=["GET"])
def spots():
response = flask.Response(
render_template(
"index.html",
inline_script_nonce=get_nonce(),
mycallsign=cfg["mycallsign"],
telnet=cfg["telnet"]["host"]+":"+cfg["telnet"]["port"],
mail=cfg["mail"],
menu_list=cfg["menu"]["menu_list"],
enable_cq_filter=enable_cq_filter,
timer_interval=cfg["timer"]["interval"],
adxo_events=adxo_events,
continents=continents_cq,
bands=band_frequencies,
dx_calls=get_dx_calls(),
)
)
return response
#Show all dx spot callsigns
def get_dx_calls():
try:
query_string = "SELECT spotcall AS dx FROM spot GROUP BY spotcall ORDER BY count(spotcall) DESC LIMIT 500"
qm.qry(query_string)
data = qm.get_data()
row_headers = qm.get_headers()
payload = []
for result in data:
main_result = dict(zip(row_headers, result))
payload.append(main_result["dx"])
logger.debug("last DX Callsigns:")
logger.debug(payload)
return payload
except Exception as e:
return []
@app.route("/service-worker.js", methods=["GET"])
def sw():
return app.send_static_file("pwa/service-worker.js")
@app.route("/offline.html")
def root():
return app.send_static_file("html/offline.html")
@app.route("/world.json")
def world_data():
return app.send_static_file("data/world.json")
@app.route("/plots.html")
def plots():
whoj = who_is_connected()
response = flask.Response(
render_template(
"plots.html",
inline_script_nonce=get_nonce(),
mycallsign=cfg["mycallsign"],
telnet=cfg["telnet"]["host"]+":"+cfg["telnet"]["port"],
mail=cfg["mail"],
menu_list=cfg["menu"]["menu_list"],
who=whoj,
continents=continents_cq,
bands=band_frequencies,
)
)
return response
@app.route("/propagation.html")
def propagation():
response = flask.Response(
render_template(
"propagation.html",
inline_script_nonce=get_nonce(),
mycallsign=cfg["mycallsign"],
telnet=cfg["telnet"]["host"]+":"+cfg["telnet"]["port"],
mail=cfg["mail"],
menu_list=cfg["menu"]["menu_list"],
)
)
return response
@app.route("/cookies.html", methods=["GET"])
def cookies():
response = flask.Response(
render_template(
"cookies.html",
inline_script_nonce=get_nonce(),
mycallsign=cfg["mycallsign"],
telnet=cfg["telnet"]["host"]+":"+cfg["telnet"]["port"],
mail=cfg["mail"],
menu_list=cfg["menu"]["menu_list"],
)
)
return response
@app.route("/privacy.html", methods=["GET"])
def privacy():
response = flask.Response(
render_template(
"privacy.html",
inline_script_nonce=get_nonce(),
mycallsign=cfg["mycallsign"],
telnet=cfg["telnet"]["host"]+":"+cfg["telnet"]["port"],
mail=cfg["mail"],
menu_list=cfg["menu"]["menu_list"],
)
)
return response
@app.route("/sitemap.xml")
def sitemap():
return app.send_static_file("sitemap.xml")
@app.route("/callsign.html", methods=["GET"])
def callsign():
# payload=spotquery()
callsign = request.args.get("c")
response = flask.Response(
render_template(
"callsign.html",
inline_script_nonce=get_nonce(),
mycallsign=cfg["mycallsign"],
telnet=cfg["telnet"]["host"]+":"+cfg["telnet"]["port"],
mail=cfg["mail"],
menu_list=cfg["menu"]["menu_list"],
timer_interval=cfg["timer"]["interval"],
callsign=callsign,
adxo_events=adxo_events,
continents=continents_cq,
bands=band_frequencies,
)
)
return response
# API that search a callsign and return all informations about that
@app.route("/callsign", methods=["GET"])
def find_callsign():
callsign = request.args.get("c")
response = pfxt.find(callsign)
if response is None:
response = flask.Response(status=204)
return response
@app.route("/plot_get_heatmap_data", methods=["POST"])
@csrf.exempt
def get_heatmap_data():
#continent = request.args.get("continent")
continent = request.json['continent']
logger.debug(request.get_json());
response = flask.Response(json.dumps(heatmap_cbp.get_data(continent)))
logger.debug(response)
if response is None:
response = flask.Response(status=204)
return response
@app.route("/plot_get_dx_spots_per_month", methods=["POST"])
@csrf.exempt
def get_dx_spots_per_month():
response = flask.Response(json.dumps(bar_graph_spm.get_data()))
logger.debug(response)
if response is None:
response = flask.Response(status=204)
return response
@app.route("/plot_get_dx_spots_trend", methods=["POST"])
@csrf.exempt
def get_dx_spots_trend():
response = flask.Response(json.dumps(line_graph_st.get_data()))
logger.debug(response)
if response is None:
response = flask.Response(status=204)
return response
@app.route("/plot_get_hour_band", methods=["POST"])
@csrf.exempt
def get_dx_hour_band():
response = flask.Response(json.dumps(bubble_graph_hb.get_data()))
logger.debug(response)
if response is None:
response = flask.Response(status=204)
return response
@app.route("/plot_get_world_dx_spots_live", methods=["POST"])
@csrf.exempt
def get_world_dx_spots_live():
response = flask.Response(json.dumps(geo_graph_wdsl.get_data()))
logger.debug(response)
if response is None:
response = flask.Response(status=204)
return response
@app.route("/csp-reports", methods=['POST'])
@csrf.exempt
def csp_reports():
report_data = request.get_data(as_text=True)
logger.warning("CSP Report:")
logger.warning(report_data)
response=flask.Response(status=204)
return response
@app.context_processor
def inject_template_scope():
injections = dict()
def cookies_check():
value = request.cookies.get("cookie_consent")
return value == "true"
injections.update(cookies_check=cookies_check)
return injections
@app.after_request
def add_security_headers(resp):
resp.headers["Strict-Transport-Security"] = "max-age=1000"
resp.headers["X-Xss-Protection"] = "1; mode=block"
resp.headers["X-Frame-Options"] = "SAMEORIGIN"
resp.headers["X-Content-Type-Options"] = "nosniff"
resp.headers["Referrer-Policy"] = "strict-origin-when-cross-origin"
resp.headers["Cache-Control"] = "public, no-cache"
resp.headers["Pragma"] = "no-cache"
resp.headers["ETag"] = app.config["VERSION"]
#resp.headers["Report-To"] = '{"group":"csp-endpoint", "max_age":10886400, "endpoints":[{"url":"/csp-reports"}]}'
resp.headers["Content-Security-Policy"] = "\
default-src 'self';\
script-src 'self' cdnjs.cloudflare.com cdn.jsdelivr.net 'nonce-"+inline_script_nonce+"';\
style-src 'self' cdnjs.cloudflare.com cdn.jsdelivr.net;\
object-src 'none';base-uri 'self';\
connect-src 'self' cdn.jsdelivr.net cdnjs.cloudflare.com sidc.be;\
font-src 'self' cdn.jsdelivr.net;\
frame-src 'self';\
frame-ancestors 'none';\
form-action 'none';\
img-src 'self' data: cdnjs.cloudflare.com sidc.be;\
manifest-src 'self';\
media-src 'self';\
worker-src 'self';\
report-uri /csp-reports;\
"
return resp
#report-to csp-endpoint;\
#script-src 'self' cdnjs.cloudflare.com cdn.jsdelivr.net 'nonce-sedfGFG32xs';\
#script-src 'self' cdnjs.cloudflare.com cdn.jsdelivr.net 'nonce-"+inline_script_nonce+"';\
if __name__ == "__main__":
app.run(host="0.0.0.0")

617
webapp_sanit.py.old Normal file
View File

@ -0,0 +1,617 @@
__author__ = "IU1BOW - Corrado"
import flask
import secrets
from flask import request, render_template
from flask_wtf.csrf import CSRFProtect
from flask_minify import minify
import json
import threading
import logging
import logging.config
from lib.dxtelnet import who
from lib.adxo import get_adxo_events
from lib.qry import query_manager
from lib.cty import prefix_table
from lib.plot_data_provider import ContinentsBandsProvider, SpotsPerMounthProvider, SpotsTrend, HourBand, WorldDxSpotsLive
logging.config.fileConfig("cfg/webapp_log_config.ini", disable_existing_loggers=True)
logger = logging.getLogger(__name__)
logger.info("Starting SPIDERWEB")
app = flask.Flask(__name__)
app.config["SECRET_KEY"] = secrets.token_hex(16)
app.config.update(
SESSION_COOKIE_SECURE=True,
SESSION_COOKIE_HTTPONLY=False,
SESSION_COOKIE_SAMESITE="Strict",
)
version_file = open("cfg/version.txt", "r")
app.config["VERSION"] = version_file.read().strip()
version_file.close()
logger.info("Version:" + app.config["VERSION"])
inline_script_nonce = ""
csrf = CSRFProtect(app)
logger.debug(app.config)
if app.config["DEBUG"]:
minify(app=app, html=False, js=False, cssless=False)
else:
minify(app=app, html=True, js=True, cssless=False)
# load config file
with open("cfg/config.json") as json_data_file:
cfg = json.load(json_data_file)
logging.debug("CFG:")
logging.debug(cfg)
# load bands file
with open("cfg/bands.json") as json_bands:
band_frequencies = json.load(json_bands)
# load mode file
with open("cfg/modes.json") as json_modes:
modes_frequencies = json.load(json_modes)
# load continents-cq file
with open("cfg/continents.json") as json_continents:
continents_cq = json.load(json_continents)
# read and set default for enabling cq filter
if cfg.get("enable_cq_filter"):
enable_cq_filter = cfg["enable_cq_filter"].upper()
else:
enable_cq_filter = "N"
# define country table for search info on callsigns
pfxt = prefix_table()
# create object query manager
qm = query_manager()
# find id in json : ie frequency / continent
def find_id_json(json_object, name):
return [obj for obj in json_object if obj["id"] == name][0]
def query_build_callsign(callsign):
query_string = ""
if len(callsign) <= 14:
query_string = (
"(SELECT rowid, spotter AS de, freq, spotcall AS dx, comment AS comm, time, spotdxcc from spot WHERE spotter='"
+ callsign
+ "'"
)
query_string += " ORDER BY rowid desc limit 10)"
query_string += " UNION "
query_string += (
"(SELECT rowid, spotter AS de, freq, spotcall AS dx, comment AS comm, time, spotdxcc from spot WHERE spotcall='"
+ callsign
+ "'"
)
query_string += " ORDER BY rowid desc limit 10);"
else:
logging.warning("callsign too long")
return query_string
def query_build(parameters):
try:
last_rowid = str(parameters["lr"]) # Last rowid fetched by front end
get_param = lambda parameters, parm_name: parameters[parm_name] if (parm_name in parameters) else []
dxcalls=get_param(parameters, "dxcalls")
band=get_param(parameters, "band")
dere=get_param(parameters, "de_re")
dxre=get_param(parameters, "dx_re")
mode=get_param(parameters, "mode")
exclft8=get_param(parameters, "exclft8")
exclft4=get_param(parameters, "exclft4")
decq = []
if "cqdeInput" in parameters:
decq.append(parameters["cqdeInput"])
dxcq = []
if "cqdxInput" in parameters:
dxcq.append(parameters["cqdxInput"])
query_string = ""
#construct callsign of spot dx callsign
dxcalls_qry_string = " AND spotcall IN (" + ",".join(["%s" for _ in dxcalls]) + ")"
dxcalls_params = tuple(dxcalls)
# construct band query decoding frequencies with json file
band_qry_string = " AND (("
for i, item_band in enumerate(band):
freq = find_id_json(band_frequencies["bands"], item_band)
if i > 0:
band_qry_string += ") OR ("
band_qry_string += (
"freq BETWEEN " + str(freq["min"]) + " AND " + str(freq["max"])
)
band_qry_string += "))"
# construct mode query
mode_qry_string = " AND (("
for i, item_mode in enumerate(mode):
single_mode = find_id_json(modes_frequencies["modes"], item_mode)
if i > 0:
mode_qry_string += ") OR ("
for j in range(len(single_mode["freq"])):
if j > 0:
mode_qry_string += ") OR ("
mode_qry_string += (
"freq BETWEEN "
+ str(single_mode["freq"][j]["min"])
+ " AND "
+ str(single_mode["freq"][j]["max"])
)
mode_qry_string += "))"
# Exluding FT8 or FT4 connection
ft8_qry_string = " AND ("
if exclft8:
ft8_qry_string += "(comment NOT LIKE '%FT8%')"
single_mode = find_id_json(modes_frequencies["modes"], "digi-ft8")
for j in range(len(single_mode["freq"])):
ft8_qry_string += (
" AND (freq NOT BETWEEN "
+ str(single_mode["freq"][j]["min"])
+ " AND "
+ str(single_mode["freq"][j]["max"])
+ ")"
)
ft8_qry_string += ")"
ft4_qry_string = " AND ("
if exclft4:
ft4_qry_string += "(comment NOT LIKE '%FT4%')"
single_mode = find_id_json(modes_frequencies["modes"], "digi-ft4")
for j in range(len(single_mode["freq"])):
ft4_qry_string += (
" AND (freq NOT BETWEEN "
+ str(single_mode["freq"][j]["min"])
+ " AND "
+ str(single_mode["freq"][j]["max"])
+ ")"
)
ft4_qry_string += ")"
# construct DE continent region query
dere_qry_string = " AND spottercq IN (" + ",".join(["%s" for _ in dere]) + ")"
dere_params = tuple(dere)
# construct DX continent region query
dxre_qry_string = " AND spotcq IN (" + ",".join(["%s" for _ in dxre]) + ")"
dxre_params = tuple(dxre)
if enable_cq_filter == "Y":
# construct de cq query
decq_qry_string = ""
decq_params = []
if len(decq) == 1:
if decq[0].isnumeric():
decq_qry_string = " AND spottercq = %s"
decq_params = (decq[0],)
# construct dx cq query
dxcq_qry_string = ""
dxcq_params = []
if len(dxcq) == 1:
if dxcq[0].isnumeric():
dxcq_qry_string = " AND spotcq = %s"
dxcq_params = (dxcq[0],)
if last_rowid is None:
last_rowid = "0"
if not last_rowid.isnumeric():
last_rowid = 0
query_string = (
"SELECT rowid, spotter AS de, freq, spotcall AS dx, comment AS comm, time, spotdxcc from spot WHERE rowid > %s"
)
if dxcalls:
query_string += dxcalls_qry_string
if len(band) > 0:
query_string += band_qry_string
if len(mode) > 0:
query_string += mode_qry_string
if exclft8:
query_string += ft8_qry_string
if exclft4:
query_string += ft4_qry_string
if len(dere) > 0:
query_string += dere_qry_string
if len(dxre) > 0:
query_string += dxre_qry_string
if enable_cq_filter == "Y":
if len(decq_qry_string) > 0:
query_string += decq_qry_string
decq_params = (decq_params,)
if len(dxcq_qry_string) > 0:
query_string += dxcq_qry_string
dxcq_params = (dxcq_params,)
query_string += " ORDER BY rowid desc limit 50;"
logger.debug(query_string)
except Exception as e:
logger.error(e)
query_string = ""
return query_string, (
last_rowid,
*dxcalls_params,
*band_params,
*mode_params,
*ft8_params,
*ft4_params,
*dere_params,
*dxre_params,
*decq_params,
*dxcq_params,
)
# the main query to show spots
# it gets url parameter in order to apply the build the right query
# and apply the filter required. It returns a json with the spots
def spotquery(parameters):
try:
if 'callsign' in parameters:
logging.debug('search callsign')
query_string, params = query_build_callsign(parameters['callsign'])
else:
logging.debug('search eith other filters')
query_string, params = query_build(parameters)
qm.qry(query_string, params)
data = qm.get_data()
row_headers = qm.get_headers()
logger.debug("query done")
logger.debug(data)
if data is None or len(data) == 0:
logger.warning("no data found")
payload = []
for result in data:
# create dictionary from recorset
main_result = dict(zip(row_headers, result))
# find the country in prefix table
search_prefix = pfxt.find(main_result["dx"])
# merge recordset and contry prefix
main_result["country"] = search_prefix["country"]
main_result["iso"] = search_prefix["iso"]
payload.append({**main_result})
return payload
except Exception as e:
logger.error(e)
# find adxo events
adxo_events = None
def get_adxo():
global adxo_events
adxo_events = get_adxo_events()
threading.Timer(12 * 3600, get_adxo).start()
get_adxo()
# create data provider for charts
heatmap_cbp = ContinentsBandsProvider(logger, qm, continents_cq, band_frequencies)
bar_graph_spm = SpotsPerMounthProvider(logger, qm)
line_graph_st = SpotsTrend(logger, qm)
bubble_graph_hb = HourBand(logger, qm, band_frequencies)
geo_graph_wdsl = WorldDxSpotsLive(logger, qm, pfxt)
# ROUTINGS
@app.route("/spotlist", methods=["POST"])
@csrf.exempt
def spotlist():
logger.debug(request.json)
response = flask.Response(json.dumps(spotquery(request.json)))
return response
def who_is_connected():
host=cfg["telnet"]["host"]
port=cfg["telnet"]["port"]
user=cfg["telnet"]["user"]
password=cfg["telnet"]["password"]
response = who(host, port, user, password)
logger.debug("list of connected clusters:")
logger.debug(response)
return response
#Calculate nonce token used in inline script and in csp "script-src" header
def get_nonce():
global inline_script_nonce
inline_script_nonce = secrets.token_hex()
return inline_script_nonce
@app.route("/", methods=["GET"])
@app.route("/index.html", methods=["GET"])
def spots():
response = flask.Response(
render_template(
"index.html",
inline_script_nonce=get_nonce(),
mycallsign=cfg["mycallsign"],
telnet=cfg["telnet"]["host"]+":"+cfg["telnet"]["port"],
mail=cfg["mail"],
menu_list=cfg["menu"]["menu_list"],
enable_cq_filter=enable_cq_filter,
timer_interval=cfg["timer"]["interval"],
adxo_events=adxo_events,
continents=continents_cq,
bands=band_frequencies,
dx_calls=get_dx_calls(),
)
)
return response
#Show all dx spot callsigns
def get_dx_calls():
try:
query_string = "SELECT spotcall AS dx FROM spot GROUP BY spotcall ORDER BY count(spotcall) DESC LIMIT 500"
qm.qry(query_string)
data = qm.get_data()
row_headers = qm.get_headers()
payload = []
for result in data:
main_result = dict(zip(row_headers, result))
payload.append(main_result["dx"])
logger.debug("last DX Callsigns:")
logger.debug(payload)
return payload
except Exception as e:
return []
@app.route("/service-worker.js", methods=["GET"])
def sw():
return app.send_static_file("pwa/service-worker.js")
@app.route("/offline.html")
def root():
return app.send_static_file("html/offline.html")
@app.route("/world.json")
def world_data():
return app.send_static_file("data/world.json")
@app.route("/plots.html")
def plots():
whoj = who_is_connected()
response = flask.Response(
render_template(
"plots.html",
inline_script_nonce=get_nonce(),
mycallsign=cfg["mycallsign"],
telnet=cfg["telnet"]["host"]+":"+cfg["telnet"]["port"],
mail=cfg["mail"],
menu_list=cfg["menu"]["menu_list"],
who=whoj,
continents=continents_cq,
bands=band_frequencies,
)
)
return response
@app.route("/propagation.html")
def propagation():
response = flask.Response(
render_template(
"propagation.html",
inline_script_nonce=get_nonce(),
mycallsign=cfg["mycallsign"],
telnet=cfg["telnet"]["host"]+":"+cfg["telnet"]["port"],
mail=cfg["mail"],
menu_list=cfg["menu"]["menu_list"],
)
)
return response
@app.route("/cookies.html", methods=["GET"])
def cookies():
response = flask.Response(
render_template(
"cookies.html",
inline_script_nonce=get_nonce(),
mycallsign=cfg["mycallsign"],
telnet=cfg["telnet"]["host"]+":"+cfg["telnet"]["port"],
mail=cfg["mail"],
menu_list=cfg["menu"]["menu_list"],
)
)
return response
@app.route("/privacy.html", methods=["GET"])
def privacy():
response = flask.Response(
render_template(
"privacy.html",
inline_script_nonce=get_nonce(),
mycallsign=cfg["mycallsign"],
telnet=cfg["telnet"]["host"]+":"+cfg["telnet"]["port"],
mail=cfg["mail"],
menu_list=cfg["menu"]["menu_list"],
)
)
return response
@app.route("/sitemap.xml")
def sitemap():
return app.send_static_file("sitemap.xml")
@app.route("/callsign.html", methods=["GET"])
def callsign():
# payload=spotquery()
callsign = request.args.get("c")
response = flask.Response(
render_template(
"callsign.html",
inline_script_nonce=get_nonce(),
mycallsign=cfg["mycallsign"],
telnet=cfg["telnet"]["host"]+":"+cfg["telnet"]["port"],
mail=cfg["mail"],
menu_list=cfg["menu"]["menu_list"],
timer_interval=cfg["timer"]["interval"],
callsign=callsign,
adxo_events=adxo_events,
continents=continents_cq,
bands=band_frequencies,
)
)
return response
# API that search a callsign and return all informations about that
@app.route("/callsign", methods=["GET"])
def find_callsign():
callsign = request.args.get("c")
response = pfxt.find(callsign)
if response is None:
response = flask.Response(status=204)
return response
@app.route("/plot_get_heatmap_data", methods=["POST"])
@csrf.exempt
def get_heatmap_data():
#continent = request.args.get("continent")
continent = request.json['continent']
logger.debug(request.get_json());
response = flask.Response(json.dumps(heatmap_cbp.get_data(continent)))
logger.debug(response)
if response is None:
response = flask.Response(status=204)
return response
@app.route("/plot_get_dx_spots_per_month", methods=["POST"])
@csrf.exempt
def get_dx_spots_per_month():
response = flask.Response(json.dumps(bar_graph_spm.get_data()))
logger.debug(response)
if response is None:
response = flask.Response(status=204)
return response
@app.route("/plot_get_dx_spots_trend", methods=["POST"])
@csrf.exempt
def get_dx_spots_trend():
response = flask.Response(json.dumps(line_graph_st.get_data()))
logger.debug(response)
if response is None:
response = flask.Response(status=204)
return response
@app.route("/plot_get_hour_band", methods=["POST"])
@csrf.exempt
def get_dx_hour_band():
response = flask.Response(json.dumps(bubble_graph_hb.get_data()))
logger.debug(response)
if response is None:
response = flask.Response(status=204)
return response
@app.route("/plot_get_world_dx_spots_live", methods=["POST"])
@csrf.exempt
def get_world_dx_spots_live():
response = flask.Response(json.dumps(geo_graph_wdsl.get_data()))
logger.debug(response)
if response is None:
response = flask.Response(status=204)
return response
@app.route("/csp-reports", methods=['POST'])
@csrf.exempt
def csp_reports():
report_data = request.get_data(as_text=True)
logger.warning("CSP Report:")
logger.warning(report_data)
response=flask.Response(status=204)
return response
@app.context_processor
def inject_template_scope():
injections = dict()
def cookies_check():
value = request.cookies.get("cookie_consent")
return value == "true"
injections.update(cookies_check=cookies_check)
return injections
@app.after_request
def add_security_headers(resp):
resp.headers["Strict-Transport-Security"] = "max-age=1000"
resp.headers["X-Xss-Protection"] = "1; mode=block"
resp.headers["X-Frame-Options"] = "SAMEORIGIN"
resp.headers["X-Content-Type-Options"] = "nosniff"
resp.headers["Referrer-Policy"] = "strict-origin-when-cross-origin"
resp.headers["Cache-Control"] = "public, no-cache"
resp.headers["Pragma"] = "no-cache"
resp.headers["ETag"] = app.config["VERSION"]
#resp.headers["Report-To"] = '{"group":"csp-endpoint", "max_age":10886400, "endpoints":[{"url":"/csp-reports"}]}'
resp.headers["Content-Security-Policy"] = "\
default-src 'self';\
script-src 'self' cdnjs.cloudflare.com cdn.jsdelivr.net 'nonce-"+inline_script_nonce+"';\
style-src 'self' cdnjs.cloudflare.com cdn.jsdelivr.net;\
object-src 'none';base-uri 'self';\
connect-src 'self' cdn.jsdelivr.net cdnjs.cloudflare.com sidc.be;\
font-src 'self' cdn.jsdelivr.net;\
frame-src 'self';\
frame-ancestors 'none';\
form-action 'none';\
img-src 'self' data: cdnjs.cloudflare.com sidc.be;\
manifest-src 'self';\
media-src 'self';\
worker-src 'self';\
report-uri /csp-reports;\
"
return resp
#report-to csp-endpoint;\
#script-src 'self' cdnjs.cloudflare.com cdn.jsdelivr.net 'nonce-sedfGFG32xs';\
#script-src 'self' cdnjs.cloudflare.com cdn.jsdelivr.net 'nonce-"+inline_script_nonce+"';\
if __name__ == "__main__":
app.run(host="0.0.0.0")