From f47e78f487a88667b09f114094fada4078a036d4 Mon Sep 17 00:00:00 2001 From: Quincy Morgan <2046746+quincylvania@users.noreply.github.com> Date: Thu, 3 Aug 2023 11:18:51 -0400 Subject: [PATCH 1/9] Add first six shields for Nova Scotia scenic drives --- icons/shield_ca_ns_s_et.svg | 24 ++++++++++++++++++++++++ icons/shield_ca_ns_s_fdlt.svg | 30 ++++++++++++++++++++++++++++++ icons/shield_ca_ns_s_lr.svg | 29 +++++++++++++++++++++++++++++ icons/shield_ca_ns_s_md.svg | 25 +++++++++++++++++++++++++ icons/shield_ca_ns_s_mt.svg | 31 +++++++++++++++++++++++++++++++ icons/shield_ca_ns_s_st.svg | 22 ++++++++++++++++++++++ src/js/shield_defs.js | 24 ++++++++++++++++++++++++ 7 files changed, 185 insertions(+) create mode 100644 icons/shield_ca_ns_s_et.svg create mode 100644 icons/shield_ca_ns_s_fdlt.svg create mode 100644 icons/shield_ca_ns_s_lr.svg create mode 100644 icons/shield_ca_ns_s_md.svg create mode 100644 icons/shield_ca_ns_s_mt.svg create mode 100644 icons/shield_ca_ns_s_st.svg diff --git a/icons/shield_ca_ns_s_et.svg b/icons/shield_ca_ns_s_et.svg new file mode 100644 index 000000000..d1298c67e --- /dev/null +++ b/icons/shield_ca_ns_s_et.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/shield_ca_ns_s_fdlt.svg b/icons/shield_ca_ns_s_fdlt.svg new file mode 100644 index 000000000..d206bb49a --- /dev/null +++ b/icons/shield_ca_ns_s_fdlt.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/shield_ca_ns_s_lr.svg b/icons/shield_ca_ns_s_lr.svg new file mode 100644 index 000000000..2d7dda103 --- /dev/null +++ b/icons/shield_ca_ns_s_lr.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/shield_ca_ns_s_md.svg b/icons/shield_ca_ns_s_md.svg new file mode 100644 index 000000000..a29278b22 --- /dev/null +++ b/icons/shield_ca_ns_s_md.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/shield_ca_ns_s_mt.svg b/icons/shield_ca_ns_s_mt.svg new file mode 100644 index 000000000..f02f86e2e --- /dev/null +++ b/icons/shield_ca_ns_s_mt.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/shield_ca_ns_s_st.svg b/icons/shield_ca_ns_s_st.svg new file mode 100644 index 000000000..6a49ffde3 --- /dev/null +++ b/icons/shield_ca_ns_s_st.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 1949d4580..2e0c583fb 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -891,6 +891,9 @@ export function loadShields() { Color.shields.brown, Color.shields.white ); + shields["CA:NS:S"] = { + notext: true, + }; // Northwest Territories shields["CA:NT"] = { @@ -4201,6 +4204,27 @@ export function loadShields() { // Ref-specific cases. Each entry should be documented in CONTRIBUTE.md + shields["CA:NS:S"].overrideByRef = { + ET: { + spriteBlank: "shield_ca_ns_s_et", + }, + FdLt: { + spriteBlank: "shield_ca_ns_s_fdlt", + }, + LR: { + spriteBlank: "shield_ca_ns_s_lr", + }, + MD: { + spriteBlank: "shield_ca_ns_s_md", + }, + MT: { + spriteBlank: "shield_ca_ns_s_mt", + }, + ST: { + spriteBlank: "shield_ca_ns_s_st", + }, + }; + shields["CA:ON:primary"].overrideByRef = { QEW: { textColor: Color.shields.blue, From 0d3a752d25f13d0477a31c69118a38c9f0e7c88a Mon Sep 17 00:00:00 2001 From: Quincy Morgan <2046746+quincylvania@users.noreply.github.com> Date: Thu, 3 Aug 2023 16:37:39 -0400 Subject: [PATCH 2/9] Add shield for Cabot Trail and Bras d'Or Lakes Scenic Drive --- icons/shield_ca_ns_s_bdolsd.svg | 27 +++++++++++++++++++++++++++ icons/shield_ca_ns_s_ct.svg | 24 ++++++++++++++++++++++++ src/js/shield_defs.js | 6 ++++++ 3 files changed, 57 insertions(+) create mode 100644 icons/shield_ca_ns_s_bdolsd.svg create mode 100644 icons/shield_ca_ns_s_ct.svg diff --git a/icons/shield_ca_ns_s_bdolsd.svg b/icons/shield_ca_ns_s_bdolsd.svg new file mode 100644 index 000000000..77c3796ec --- /dev/null +++ b/icons/shield_ca_ns_s_bdolsd.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/shield_ca_ns_s_ct.svg b/icons/shield_ca_ns_s_ct.svg new file mode 100644 index 000000000..7ac826b5f --- /dev/null +++ b/icons/shield_ca_ns_s_ct.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 2e0c583fb..ae69ff0a2 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -4205,6 +4205,12 @@ export function loadShields() { // Ref-specific cases. Each entry should be documented in CONTRIBUTE.md shields["CA:NS:S"].overrideByRef = { + BdOLSD: { + spriteBlank: "shield_ca_ns_s_bdolsd", + }, + CT: { + spriteBlank: "shield_ca_ns_s_ct", + }, ET: { spriteBlank: "shield_ca_ns_s_et", }, From 5cb46f730d719b0f52fc6c34136c853ac5a9f4d9 Mon Sep 17 00:00:00 2001 From: Quincy Morgan <2046746+quincylvania@users.noreply.github.com> Date: Thu, 3 Aug 2023 21:11:15 -0400 Subject: [PATCH 3/9] Add two more nova scotia scenic drive shields --- icons/shield_ca_ns_s_cet.svg | 29 +++++++++++++++++++++++++++++ icons/shield_ca_ns_s_gt.svg | 24 ++++++++++++++++++++++++ src/js/shield_defs.js | 6 ++++++ 3 files changed, 59 insertions(+) create mode 100644 icons/shield_ca_ns_s_cet.svg create mode 100644 icons/shield_ca_ns_s_gt.svg diff --git a/icons/shield_ca_ns_s_cet.svg b/icons/shield_ca_ns_s_cet.svg new file mode 100644 index 000000000..716210c4f --- /dev/null +++ b/icons/shield_ca_ns_s_cet.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/shield_ca_ns_s_gt.svg b/icons/shield_ca_ns_s_gt.svg new file mode 100644 index 000000000..65746f200 --- /dev/null +++ b/icons/shield_ca_ns_s_gt.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index ae69ff0a2..38c5469b3 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -4208,6 +4208,9 @@ export function loadShields() { BdOLSD: { spriteBlank: "shield_ca_ns_s_bdolsd", }, + CeT: { + spriteBlank: "shield_ca_ns_s_cet", + }, CT: { spriteBlank: "shield_ca_ns_s_ct", }, @@ -4217,6 +4220,9 @@ export function loadShields() { FdLt: { spriteBlank: "shield_ca_ns_s_fdlt", }, + GT: { + spriteBlank: "shield_ca_ns_s_gt", + }, LR: { spriteBlank: "shield_ca_ns_s_lr", }, From e70fe3bc15588577d08150caf43075674d704c00 Mon Sep 17 00:00:00 2001 From: Quincy Morgan <2046746+quincylvania@users.noreply.github.com> Date: Mon, 7 Aug 2023 16:56:49 -0400 Subject: [PATCH 4/9] Convert nova scotia scenic route shields to 17x21 --- icons/shield_ca_ns_s_bdolsd.svg | 29 +++++++++++---------------- icons/shield_ca_ns_s_cet.svg | 32 +++++++++++------------------- icons/shield_ca_ns_s_ct.svg | 22 +++++++-------------- icons/shield_ca_ns_s_et.svg | 22 +++++++-------------- icons/shield_ca_ns_s_fdlt.svg | 35 ++++++++++++++------------------- icons/shield_ca_ns_s_gt.svg | 23 ++++++++-------------- icons/shield_ca_ns_s_lr.svg | 27 +++++++------------------ icons/shield_ca_ns_s_md.svg | 27 +++++++++++-------------- icons/shield_ca_ns_s_mt.svg | 32 ++++++++++-------------------- icons/shield_ca_ns_s_st.svg | 19 ++++++------------ 10 files changed, 94 insertions(+), 174 deletions(-) diff --git a/icons/shield_ca_ns_s_bdolsd.svg b/icons/shield_ca_ns_s_bdolsd.svg index 77c3796ec..d27a52a11 100644 --- a/icons/shield_ca_ns_s_bdolsd.svg +++ b/icons/shield_ca_ns_s_bdolsd.svg @@ -1,27 +1,20 @@ - + - - + - - + + + + + + + + - + - - - - - - - - - - - - diff --git a/icons/shield_ca_ns_s_cet.svg b/icons/shield_ca_ns_s_cet.svg index 716210c4f..f8523af35 100644 --- a/icons/shield_ca_ns_s_cet.svg +++ b/icons/shield_ca_ns_s_cet.svg @@ -1,29 +1,21 @@ - + - - + - - + + + + + + + + + - + - - - - - - - - - - - - - - diff --git a/icons/shield_ca_ns_s_ct.svg b/icons/shield_ca_ns_s_ct.svg index 7ac826b5f..fa2c05e5b 100644 --- a/icons/shield_ca_ns_s_ct.svg +++ b/icons/shield_ca_ns_s_ct.svg @@ -1,24 +1,16 @@ - + - - + - - + + + + - + - - - - - - - - - diff --git a/icons/shield_ca_ns_s_et.svg b/icons/shield_ca_ns_s_et.svg index d1298c67e..23ec82fc3 100644 --- a/icons/shield_ca_ns_s_et.svg +++ b/icons/shield_ca_ns_s_et.svg @@ -1,24 +1,16 @@ - + - - + - - + + + + - + - - - - - - - - - diff --git a/icons/shield_ca_ns_s_fdlt.svg b/icons/shield_ca_ns_s_fdlt.svg index d206bb49a..8f057fcc1 100644 --- a/icons/shield_ca_ns_s_fdlt.svg +++ b/icons/shield_ca_ns_s_fdlt.svg @@ -1,30 +1,25 @@ - + - - + - - + + - + - - - - - - - - - - - - + + + + + + + + + + - - diff --git a/icons/shield_ca_ns_s_gt.svg b/icons/shield_ca_ns_s_gt.svg index 65746f200..b907a78cf 100644 --- a/icons/shield_ca_ns_s_gt.svg +++ b/icons/shield_ca_ns_s_gt.svg @@ -1,24 +1,17 @@ - + - - + - - + + + + + - + - - - - - - - - - diff --git a/icons/shield_ca_ns_s_lr.svg b/icons/shield_ca_ns_s_lr.svg index 2d7dda103..a478d5625 100644 --- a/icons/shield_ca_ns_s_lr.svg +++ b/icons/shield_ca_ns_s_lr.svg @@ -1,29 +1,16 @@ - + - - - + - - + + + + - + - - - - - - - - - - - - - diff --git a/icons/shield_ca_ns_s_md.svg b/icons/shield_ca_ns_s_md.svg index a29278b22..5e35b59b6 100644 --- a/icons/shield_ca_ns_s_md.svg +++ b/icons/shield_ca_ns_s_md.svg @@ -1,25 +1,20 @@ - + - - + - - + + + + + + + + - - - - - - - - - - - + diff --git a/icons/shield_ca_ns_s_mt.svg b/icons/shield_ca_ns_s_mt.svg index f02f86e2e..2c36efcf6 100644 --- a/icons/shield_ca_ns_s_mt.svg +++ b/icons/shield_ca_ns_s_mt.svg @@ -1,31 +1,19 @@ - + - - - + - - - - + + + + + + - + - - - - - - - - - - - - - + diff --git a/icons/shield_ca_ns_s_st.svg b/icons/shield_ca_ns_s_st.svg index 6a49ffde3..46ee7ebe1 100644 --- a/icons/shield_ca_ns_s_st.svg +++ b/icons/shield_ca_ns_s_st.svg @@ -1,22 +1,15 @@ - + - - + - - - + + + - - - - - - - + From 0a8ae07eb5ccbe5da6b0d048a67b50d8e081cbc4 Mon Sep 17 00:00:00 2001 From: Quincy Morgan <2046746+quincylvania@users.noreply.github.com> Date: Mon, 7 Aug 2023 17:21:26 -0400 Subject: [PATCH 5/9] Add shields for Kejimkujik Scenic Drive and the Digby Necks and Islands Scenic Drive routes --- icons/shield_ca_ns_s_dnisd.svg | 12 ++++++++++++ icons/shield_ca_ns_s_ksd.svg | 19 +++++++++++++++++++ src/js/shield_defs.js | 6 ++++++ 3 files changed, 37 insertions(+) create mode 100644 icons/shield_ca_ns_s_dnisd.svg create mode 100644 icons/shield_ca_ns_s_ksd.svg diff --git a/icons/shield_ca_ns_s_dnisd.svg b/icons/shield_ca_ns_s_dnisd.svg new file mode 100644 index 000000000..b46081a94 --- /dev/null +++ b/icons/shield_ca_ns_s_dnisd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/icons/shield_ca_ns_s_ksd.svg b/icons/shield_ca_ns_s_ksd.svg new file mode 100644 index 000000000..5270f0e63 --- /dev/null +++ b/icons/shield_ca_ns_s_ksd.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index e4569967e..f19797ca9 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -4218,6 +4218,9 @@ export function loadShields() { CT: { spriteBlank: "shield_ca_ns_s_ct", }, + DNISD: { + spriteBlank: "shield_ca_ns_s_dnisd", + }, ET: { spriteBlank: "shield_ca_ns_s_et", }, @@ -4227,6 +4230,9 @@ export function loadShields() { GT: { spriteBlank: "shield_ca_ns_s_gt", }, + KSD: { + spriteBlank: "shield_ca_ns_s_ksd", + }, LR: { spriteBlank: "shield_ca_ns_s_lr", }, From bab0b012d91d9f77a570e7f480954735f13fe9ea Mon Sep 17 00:00:00 2001 From: Quincy Morgan <2046746+quincylvania@users.noreply.github.com> Date: Mon, 7 Aug 2023 17:32:25 -0400 Subject: [PATCH 6/9] Fix eagle plumage --- icons/shield_ca_ns_s_bdolsd.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/icons/shield_ca_ns_s_bdolsd.svg b/icons/shield_ca_ns_s_bdolsd.svg index d27a52a11..fddb5e67c 100644 --- a/icons/shield_ca_ns_s_bdolsd.svg +++ b/icons/shield_ca_ns_s_bdolsd.svg @@ -7,7 +7,7 @@ - + From 0016b5a660a69f7904a136381637592d124ba80e Mon Sep 17 00:00:00 2001 From: Quincy Morgan <2046746+quincylvania@users.noreply.github.com> Date: Fri, 8 Sep 2023 14:50:52 -0400 Subject: [PATCH 7/9] Fix ref case (re: #912) --- src/js/shield_defs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 85bb761e6..4f02d56bb 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -4227,7 +4227,7 @@ export function loadShields() { ET: { spriteBlank: "shield_ca_ns_s_et", }, - FdLt: { + FdLT: { spriteBlank: "shield_ca_ns_s_fdlt", }, GT: { From 8719c55106a420251661343acb8e0733d738b221 Mon Sep 17 00:00:00 2001 From: Clay Smalley Date: Thu, 18 Apr 2024 10:43:09 -0400 Subject: [PATCH 8/9] change shields of Lincoln and Rock Counties, Minnesota --- src/js/shield_defs.js | 39 ++++++++++++++++++++++++------------- src/layer/highway_shield.js | 8 +++++--- test/spec/highway_shield.js | 32 ++++++++++++++++++++++++++---- 3 files changed, 58 insertions(+), 21 deletions(-) diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 73003e18f..8b16d9543 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -1276,7 +1276,6 @@ export function loadShields() { "Lake", "Lake_of_the_Woods", "Le_Sueur", - "Lincoln", "Lyon", "Mahnomen", "Marshall", @@ -1302,7 +1301,6 @@ export function loadShields() { "Redwood", "Renville", "Rice", - "Rock", "Roseau", "Saint_Louis", "Scott", @@ -1325,11 +1323,7 @@ export function loadShields() { "Yellow_Medicine", ].forEach( (county) => - ([ - shields[`US:MN:${county}:CSAH`], - shields[`US:MN:${county}:CR`], - shields[`US:MN:${county}:Park_Access`], - ] = [ + ([shields[`US:MN:${county}:CSAH`], shields[`US:MN:${county}:CR`]] = [ pentagonUpShield( 3, 15, @@ -1338,15 +1332,32 @@ export function loadShields() { Color.shields.white ), roundedRectShield(Color.shields.white, Color.shields.black), - trapezoidDownShield( - 10, - Color.shields.brown, - Color.shields.white, - Color.shields.white, - 2 - ), ]) ); + ["CSAH", "CR"].forEach( + (network) => + (shields[`US:MN:Lincoln:${network}`] = pentagonUpShield( + 3, + 15, + Color.shields.blue, + Color.shields.yellow, + Color.shields.white + )) + ); + ["CSAH", "CR"].forEach( + (network) => + (shields[`US:MN:Rock:${network}`] = roundedRectShield( + Color.shields.white, + Color.shields.black + )) + ); + shields[`US:MN:Hennepin:Park_Access`] = trapezoidDownShield( + 10, + Color.shields.brown, + Color.shields.white, + Color.shields.white, + 2 + ); // Missouri shields["US:MO"] = { diff --git a/src/layer/highway_shield.js b/src/layer/highway_shield.js index 2e2d65d75..6c24abb43 100644 --- a/src/layer/highway_shield.js +++ b/src/layer/highway_shield.js @@ -16,7 +16,7 @@ function routeConcurrency(routeIndex) { "case", [ "any", - ...orderedRouteAttributes.map(a => ["has", `route_${routeIndex}_${a}`]), + ...orderedRouteAttributes.map((a) => ["has", `route_${routeIndex}_${a}`]), ], ["image", getImageNameExpression(routeIndex)], ["literal", ""], @@ -32,7 +32,9 @@ function routeConcurrency(routeIndex) { export function parseImageName(imageName) { let lines = imageName.split("\n"); lines.shift(); // "shield" - let parsed = Object.fromEntries(orderedRouteAttributes.map((a, i) => [a, lines[i]])); + let parsed = Object.fromEntries( + orderedRouteAttributes.map((a, i) => [a, lines[i]]) + ); parsed.imageName = imageName; return parsed; } @@ -105,6 +107,6 @@ export const shield = { }, filter: [ "any", - ...orderedRouteAttributes.map(a => ["has", `route_1_${a}`]), + ...orderedRouteAttributes.map((a) => ["has", `route_1_${a}`]), ], }; diff --git a/test/spec/highway_shield.js b/test/spec/highway_shield.js index cf7c38570..20939d3f4 100644 --- a/test/spec/highway_shield.js +++ b/test/spec/highway_shield.js @@ -38,11 +38,29 @@ describe("highway_shield", function () { }; it("parses an image name for a numbered route", function () { - expectImageName("NET", "REF", undefined, undefined, "shield\nNET\nREF\n\n"); - expectImageName("NET", "REF", "NAME", undefined, "shield\nNET\nREF\nNAME\n"); + expectImageName( + "NET", + "REF", + undefined, + undefined, + "shield\nNET\nREF\n\n" + ); + expectImageName( + "NET", + "REF", + "NAME", + undefined, + "shield\nNET\nREF\nNAME\n" + ); }); it("parses an image name for an unnumbered route", function () { - expectImageName("NET", undefined, undefined, undefined, "shield\nNET\n\n\n"); + expectImageName( + "NET", + undefined, + undefined, + undefined, + "shield\nNET\n\n\n" + ); }); it("parses an image name for a named route", function () { expectImageName( @@ -61,7 +79,13 @@ describe("highway_shield", function () { ); }); it("parses an image name for a network-independent route", function () { - expectImageName(undefined, "REF", "NAME", undefined, "shield\n\nREF\nNAME\n"); + expectImageName( + undefined, + "REF", + "NAME", + undefined, + "shield\n\nREF\nNAME\n" + ); }); }); }); From 27abb30aede278f1e6b29b6ae5bdd70ca0eedb92 Mon Sep 17 00:00:00 2001 From: Quincy Morgan <2046746+quincylvania@users.noreply.github.com> Date: Thu, 18 Apr 2024 14:29:17 -0400 Subject: [PATCH 9/9] Override by name instead of by ref --- src/js/shield_defs.js | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/js/shield_defs.js b/src/js/shield_defs.js index 16d8b1dcc..05091733b 100644 --- a/src/js/shield_defs.js +++ b/src/js/shield_defs.js @@ -3627,41 +3627,41 @@ export function loadShields() { // Ref-specific cases. Each entry should be documented in CONTRIBUTE.md - shields["CA:NS:S"].overrideByRef = { - BdOLSD: { + shields["CA:NS:S"].overrideByName = { + "Bras d'Or Lakes Scenic Drive": { spriteBlank: "shield_ca_ns_s_bdolsd", }, - CeT: { + "Ceilidh Trail": { spriteBlank: "shield_ca_ns_s_cet", }, - CT: { + "Cabot Trail": { spriteBlank: "shield_ca_ns_s_ct", }, - DNISD: { + "Digby Neck and Islands Scenic Drive": { spriteBlank: "shield_ca_ns_s_dnisd", }, - ET: { + "Evangeline Trail": { spriteBlank: "shield_ca_ns_s_et", }, - FdLT: { + "Fleur-de-lis Trail": { spriteBlank: "shield_ca_ns_s_fdlt", }, - GT: { + "Glooscap Trail": { spriteBlank: "shield_ca_ns_s_gt", }, - KSD: { + "Kejimkujik Scenic Drive": { spriteBlank: "shield_ca_ns_s_ksd", }, - LR: { + "Lighthouse Route": { spriteBlank: "shield_ca_ns_s_lr", }, - MD: { + "Marine Drive": { spriteBlank: "shield_ca_ns_s_md", }, - MT: { + "Marconi Trail": { spriteBlank: "shield_ca_ns_s_mt", }, - ST: { + "Sunrise Trail": { spriteBlank: "shield_ca_ns_s_st", }, };