)>}]
شركة التطبيقات المتكاملة لتصميم وبرمجة البرمجيات الخاصة ش.ش.و.
Integrated Applications Programming Company
Skip Navigation LinksHome » Code Library » Default

Public general use code classes and xml files that we've compiled and used over the years:

Support class for TentPlay Trek business model

    1: using System.Data;
    2: using System.Collections;
    3: using System.Text;
    4: using System.Text.RegularExpressions;
    5: using System.IO.Compression;
    6:  
    7: namespace Ia.TentPlay.Cl.Model.Business.Trek
    8: {
    9:     ////////////////////////////////////////////////////////////////////////////
   10:  
   11:     /// <summary publish="true">
   12:     /// Support class for TentPlay Trek business model
   13:     /// </summary>
   14:     /// 
   15:     /// <remarks> 
   16:     /// Copyright © 2012-2023 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
   17:     ///
   18:     /// This library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
   19:     /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
   20:     ///
   21:     /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
   22:     /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
   23:     /// 
   24:     /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
   25:     /// 
   26:     /// Copyright notice: This notice may not be removed or altered from any source distribution.
   27:     /// </remarks> 
   28:     public class Default
   29:     {
   30:         private const string ngaGnsCountryZipFileFtpLocation = "http://cdn.tentplay.com/trek/nga/gns/country-files";
   31:         private const string originalImageFtpLocation = @"http://cdn.tentplay.com/trek/country/$applicationCountryIso3/images";
   32:         private const string destinationImageUrlLocation = @"http://cdn.tentplay.com/trek/country/$applicationCountryIso3";
   33:  
   34:         public const string ApplicationTempDataDirectory = @"C:\\Temp\";
   35:  
   36:         public const int MaximumNumberTakeOfElementsToDisplayInList = 100;
   37:         public const int MaximumNumberOfTrekToDisplayNearTheCapital = 999;
   38:  
   39:         public const int MaximumNumberOfFeaturesThatWouldAllowForAcceptableAppSizeInAndroidPlayStore = 200000;
   40:  
   41:         ////////////////////////////////////////////////////////////////////////////
   42:  
   43:         /// <summary>
   44:         ///
   45:         /// </summary>
   46:         public static string FtpUser
   47:         {
   48:             get
   49:             {
   50:                 return "";
   51:             }
   52:         }
   53:  
   54:         ////////////////////////////////////////////////////////////////////////////
   55:  
   56:         /// <summary>
   57:         ///
   58:         /// </summary>
   59:         public static string FtpPassword
   60:         {
   61:             get
   62:             {
   63:                 return "";
   64:             }
   65:         }
   66:  
   67:         ////////////////////////////////////////////////////////////////////////////
   68:  
   69:         /// <summary>
   70:         ///
   71:         /// </summary>
   72:         public Default()
   73:         {
   74:         }
   75:  
   76:         ////////////////////////////////////////////////////////////////////////////
   77:  
   78:         /// <summary>
   79:         ///
   80:         /// </summary>
   81:         public static List<string> SearchSubstringList(string countryIso3, string name)
   82:         {
   83:             string substring;
   84:             string[] nameWordList;
   85:             Hashtable hashtable;
   86:             List<string> substringList;
   87:  
   88:             hashtable = new Hashtable();
   89:             substringList = new List<string>();
   90:  
   91:             nameWordList = Regex.Split(name, @"\W+");
   92:  
   93:             if (countryIso3 == "IND" || countryIso3 == "USA" || countryIso3 == "MEX")
   94:             {
   95:                 //    fullTextSearchName:  f fr fra fran franc franci francis francisc francisco z za zar zarc zarco
   96:  
   97:                 foreach (string nameWord in nameWordList)
   98:                 {
   99:                     hashtable[nameWord] = 1;
  100:  
  101:                     for (int length = 1; length < nameWord.Length; length++)
  102:                     {
  103:                         substring = nameWord.Substring(0, length);
  104:  
  105:                         hashtable[substring] = 1;
  106:                     }
  107:                 }
  108:             }
  109:             else
  110:             {
  111:                 //    fullTextSearchName: a an ana anar anara ar ara e el l m ma man mana manar manara n na nar nara r ra ا ار ارة ال الم المن المنا المنار المنارة ة ر رة ل لم لمن لمنا لمنار لمنارة م من منا منار منارة ن نا نار نارة                 
  112:  
  113:                 foreach (string nameWord in nameWordList)
  114:                 {
  115:                     hashtable[nameWord] = 1;
  116:  
  117:                     for (int length = 1; length < nameWord.Length; length++)
  118:                     {
  119:                         for (int start = 0; start <= nameWord.Length - length; start++)
  120:                         {
  121:                             substring = nameWord.Substring(start, length);
  122:  
  123:                             hashtable[substring] = 1;
  124:                         }
  125:                     }
  126:                 }
  127:             }
  128:  
  129:             substringList = hashtable.Keys.Cast<string>().ToList();
  130:             substringList.Sort();
  131:  
  132:             return substringList;
  133:         }
  134:  
  135:         ////////////////////////////////////////////////////////////////////////////
  136:  
  137:         /// <summary>
  138:         ///
  139:         /// </summary>
  140:         public static void GenerateCSharpCodeToLinqQuery512BinaryToBooleanAndOrStringOfClassFeatures()
  141:         {
  142:             string b, s;
  143:             StringBuilder sb;
  144:  
  145:             sb = new StringBuilder();
  146:  
  147:             sb.AppendLine(@"// code below is generated by code in ca project");
  148:             sb.AppendLine(@"");
  149:  
  150:             for (int i = 0; i < 512; i++)
  151:             {
  152:                 b = Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass.ConvertIntegerToBinary(i);
  153:                 s = Ia.TentPlay.Cl.Model.Business.Trek.FeatureClass.ConvertBinaryToBooleanAndOrStringOfClassFeatures(b);
  154:  
  155:                 sb.AppendLine(@"// integer: " + i + ", binary: " + b.PadLeft(9, '0') + ", string: " + s);
  156:  
  157:                 sb.AppendLine(@"item = (from ncw in featureList where " + s + @" orderby ncw.DistanceToCapital select ncw).ToList().Take(maximumNumberOfTrekToDisplayNearTheCapitalList).LastOrDefault();");
  158:                 sb.AppendLine(@"if (item != null) list.Add(item.DistanceToCapital);");
  159:                 sb.AppendLine(@"else list.Add(0);");
  160:  
  161:                 sb.AppendLine(@"");
  162:             }
  163:  
  164:             sb.AppendLine(@"// end of generated code");
  165:             sb.AppendLine(@"");
  166:  
  167:         }
  168:  
  169:         ////////////////////////////////////////////////////////////////////////////
  170:  
  171:         /// <summary>
  172:         ///
  173:         /// </summary>
  174:         public static string OriginalImageFtpLocation(string applicationCountryIso3)
  175:         {
  176:             return originalImageFtpLocation.Replace("$applicationCountryIso3", applicationCountryIso3);
  177:         }
  178:  
  179:         ////////////////////////////////////////////////////////////////////////////
  180:  
  181:         /// <summary>
  182:         ///
  183:         /// </summary>
  184:         public static string DestinationImageFtpLocation(string applicationCountryIso3)
  185:         {
  186:             return destinationImageUrlLocation.Replace("$applicationCountryIso3", applicationCountryIso3);
  187:         }
  188:  
  189:         ////////////////////////////////////////////////////////////////////////////
  190:  
  191:         /// <summary>
  192:         /// Define the SQLite database file name according to the country file name
  193:         /// </summary>
  194:         public static string SqliteDatabaseFileName(string applicationCountryIso3, string applicationCountryVersion)
  195:         {
  196:             return applicationCountryIso3 + "." + applicationCountryVersion + ".sqlite";
  197:         }
  198:  
  199:         ////////////////////////////////////////////////////////////////////////////
  200:  
  201:         /// <summary>
  202:         /// Define the SQLite database file password according to the country file name
  203:         /// Problem: I cant open an SQLite password protected database file on Android. I will remove the password locks.
  204:         /// </summary>
  205:         [Obsolete]
  206:         public static string _SqliteDatabaseFilePassword(string fileCountry)
  207:         {
  208:             return fileCountry + "000000";
  209:         }
  210:  
  211:         ////////////////////////////////////////////////////////////////////////////
  212:  
  213:         /// <summary>
  214:         /// 
  215:         /// </summary>
  216:         public static string SqliteDatabaseFileCreateFeatureDesignationTableString(bool createVirtualTable, List<Ia.Cl.Model.Language> countrySpokenLanguageList)
  217:         {
  218:             string sql, entryList, languageNameString;
  219:             string[] p;
  220:  
  221:             if (countrySpokenLanguageList.Count > 0)
  222:             {
  223:                 p = (from c in countrySpokenLanguageList select c.Symbol).ToArray();
  224:  
  225:                 if (p.Length == 1)
  226:                 {
  227:                     languageNameString = p[0] + " text";
  228:                 }
  229:                 else
  230:                 {
  231:                     languageNameString = string.Join(" text, ", p);
  232:                     languageNameString += " text";
  233:                 }
  234:             }
  235:             else
  236:             {
  237:                 languageNameString = "en text";
  238:             }
  239:  
  240:             languageNameString = Regex.Replace(languageNameString, @"\bis\b", "[is]");
  241:  
  242:             entryList = "_id text primary key, " + languageNameString + ", class text";
  243:  
  244:             if (createVirtualTable) sql = @"create virtual table featureDesignations using fts3(" + entryList + ")";
  245:             else sql = @"create table featureDesignations (" + entryList + ")";
  246:  
  247:             return sql;
  248:         }
  249:  
  250:         /*
  251:         ////////////////////////////////////////////////////////////////////////////
  252: 
  253:         /// <summary>
  254:         /// 
  255:         /// </summary>
  256:         public static List<string> SqliteDatabaseFileInsertListFeatureDesignationsTableListString
  257:         {
  258:             get
  259:             {
  260:                 int deleted;
  261:                 string sql, description, createdString, updatedString;
  262:                 Ia.Cl.Model.Result result;
  263:                 List<string> sqlList;
  264:                 List<Ia.TentPlay.Cl.Model.Trek.FeatureDesignation> featureDesignationsList;
  265: 
  266:                 sqlList = new List<string>();
  267: 
  268:                 using (var db = new Ia.TentPlay.Db())
  269:                 {
  270:                     featureDesignationsList = Ia.TentPlay.Cl.Model.Data.FeatureDesignation.List(out result);
  271: 
  272:                     if (!result.HasError)
  273:                     {
  274:                         foreach (Ia.TentPlay.Cl.Model.Trek.FeatureDesignation nfdc in featureDesignationsList)
  275:                         {
  276:                             // below: we make sure to change single ''' to "''" in description to store in SQLite
  277:                             description = string.IsNullOrEmpty(nfdc.Description) ? null: nfdc.Description.Replace("'", "''");
  278: 
  279:                             deleted = Convert.ToInt32(nfdc.Deleted);
  280: 
  281:                             createdString = Ia.Cl.Model.Db.Sqlite.DateTimeFormat(nfdc.Created);
  282:                             updatedString = Ia.Cl.Model.Db.Sqlite.DateTimeFormat(nfdc.Updated);
  283: 
  284:                             // for Andriod, the database tables should use the identifier _id for the primary key of the table. Several Android functions rely on this standard.
  285:                             sql = "insert into featureDesignations (_id, name, arabicName, danishName, description, class, deleted, created, updated) values ('" + nfdc.Id + "', '" + nfdc.En + "', '" + nfdc.Ar + "', '" + nfdc.Da + "', '" + description + "', '" + nfdc.Class + "', " + deleted + ", '" + createdString + "', '" + updatedString + "')";
  286: 
  287:                             sqlList.Add(sql);
  288:                         }
  289:                     }
  290:                 }
  291: 
  292:                 return sqlList;
  293:             }
  294:         }
  295:         */
  296:  
  297:         ////////////////////////////////////////////////////////////////////////////
  298:  
  299:         /// <summary>
  300:         /// 
  301:         /// </summary>
  302:         public static string SqliteDatabaseFileCreateFeaturesTableString(bool createVirtualTable)
  303:         {
  304:             string sql, entryList;
  305:  
  306:             // for Andriod, the database tables should use the identifier _id for the primary key of the table. Several Android functions rely on this standard.
  307:             // note the "Designation_Id" because Designation is an EF entity represented here by text Designation_Id
  308:  
  309:             entryList = "_id text primary key, latitude real, longitude real, distanceToCapital numeric, cMap text, class text, country text, fileCountry text, name text, noDiacriticLowerCaseName text, nativeName text, noDiacriticNativeName text, fullTextSearchName text, designation_Id text, foreign key(designation_Id) references featureDesignations(_id)";
  310:  
  311:             if (createVirtualTable) sql = @"create virtual table featuresFts using fts3(" + entryList + ")";
  312:             else sql = @"create table features (" + entryList + ")";
  313:  
  314:             return sql;
  315:         }
  316:  
  317:         ////////////////////////////////////////////////////////////////////////////
  318:  
  319:         /// <summary>
  320:         /// 
  321:         /// </summary>
  322:         public static List<string> SqliteDatabaseFileInsertListSpecificFeaturesTableListString(Ia.Cl.Model.Country country)
  323:         {
  324:             int deleted;
  325:             string sql, name, noDiacriticLowerCaseName, nativeName, noDiacriticNativeName, fullTextSearchName, createdString, updatedString;
  326:             Ia.Cl.Model.Result result;
  327:             List<string> sqlList, searchSubstringList;
  328:             List<Ia.TentPlay.Cl.Model.Trek.Feature> featuresList;
  329:  
  330:             sqlList = new List<string>();
  331:  
  332:             using (var db = new Ia.TentPlay.Db())
  333:             {
  334:                 featuresList = Ia.TentPlay.Cl.Model.Data.Trek.Feature.List(country.Iso3, out result);
  335:  
  336:                 if (!result.HasError)
  337:                 {
  338:                     foreach (Ia.TentPlay.Cl.Model.Trek.Feature ncw in featuresList)
  339:                     {
  340:                         // below: we make sure to change single ''' to "''" in name, noDiacriticLowerCaseName, nativeName, noDiacriticNativeName to store in SQLite
  341:                         name = (string.IsNullOrEmpty(ncw.Name)) ? null : ncw.Name.Replace("'", "''");
  342:                         noDiacriticLowerCaseName = (string.IsNullOrEmpty(ncw.NoDiacriticLowerCaseName)) ? null : ncw.NoDiacriticLowerCaseName.Replace("'", "''");
  343:                         nativeName = (string.IsNullOrEmpty(ncw.NativeName)) ? null : ncw.NativeName.Replace("'", "''");
  344:                         noDiacriticNativeName = (string.IsNullOrEmpty(ncw.NoDiacriticNativeName)) ? null : ncw.NoDiacriticNativeName.Replace("'", "''");
  345:  
  346:                         searchSubstringList = Ia.TentPlay.Cl.Model.Business.Trek.Default.SearchSubstringList(country.Iso3, noDiacriticLowerCaseName + " " + noDiacriticNativeName);
  347:                         fullTextSearchName = string.Join(" ", searchSubstringList);
  348:  
  349:                         deleted = Convert.ToInt32(ncw.Deleted);
  350:  
  351:                         createdString = Ia.Cl.Model.Db.Sqlite.DateTimeFormat(ncw.Created);
  352:                         updatedString = Ia.Cl.Model.Db.Sqlite.DateTimeFormat(ncw.Updated);
  353:  
  354:                         sql = "insert into features (_id, latitude, longitude, distanceToCapital, cMap, class, country, fileCountry, name, noDiacriticLowerCaseName, nativeName, noDiacriticNativeName, fullTextSearchName, designation) values ('" + ncw.Id + "', '" + ncw.Latitude + "', '" + ncw.Longitude + "', '" + ncw.DistanceToCapital + "', '" + ncw.CMap + "', '" + ncw.Class + "', '" + ncw.Class + "', '" + ncw.Country + "', '" + ncw.FileCountry + "', '" + name + "', '" + noDiacriticLowerCaseName + "', '" + nativeName + "', '" + noDiacriticNativeName + "', '" + fullTextSearchName + "', '" + ncw.Designation.Id + "')";
  355:                         //  deleted, created, updated,
  356:  
  357:                         sqlList.Add(sql);
  358:                     }
  359:                 }
  360:             }
  361:  
  362:             return sqlList;
  363:         }
  364:  
  365:         ////////////////////////////////////////////////////////////////////////////
  366:  
  367:         /// <summary>
  368:         ///
  369:         /// </summary>
  370:         public static List<string> AllowedFeatureDesignationList(string countryFeatureFileNameIso3)
  371:         {
  372:             List<string> fullVersion, liteVersion;
  373:  
  374:             liteVersion = LiteVersionAllowedFeatureDesignationList(countryFeatureFileNameIso3);
  375:             fullVersion = FullVersionAllowedFeatureDesignationList(countryFeatureFileNameIso3);
  376:  
  377:             return fullVersion.Union(liteVersion).ToList();
  378:         }
  379:  
  380:         ////////////////////////////////////////////////////////////////////////////
  381:  
  382:         /// <summary>
  383:         ///
  384:         /// </summary>
  385:         public static List<string> LiteVersionAllowedFeatureDesignationList(string countryFeatureFileNameIso3)
  386:         {
  387:             //List<string> allowedList = new List<string> { "FJDS", "FLD", "FLDI", "FLLS", "FLLSX", "RSRT", "RSTN", "RSTNQ", "RSTP", "RSTPQ", "RSV", "RSVI", "RSVT", "RTE", "RUIN", "RVN", "RYD", "SALT", "SAND", "FLTM", "FLTT", "FLTU", "FNDY", "FORD", "FRKU", "FRM", "FRMQ", "FRMS", "FRMT", "FRST", "FRSTF", "FRSU", "FRZU", "FT", "FURU", "GAP", "GAPU", "GASF", "GLCR", "GLYU", "GOSP", "GRAZ", "GRGE", "GRSLD", "GRVC", "GRVE", "GRVO", "GRVP", "GRVPN", "GULF", "GVL", "GYSR", "HBR", "HBRX", "HDLD", "HERM", "HLL", "HLLS", "HLLU", "HLSU", "HLT", "HMCK", "HMDA", "HOLU", "HSTS", "HTH", "INLT", "INLTQ", "INSM", "ISL", "ISLF", "ISLM", "ISLS", "ISLT", "ISLX", "ISTH", "JTY", "KNLU", "KNSU", "LAVA", "LBED", "LDGU", "LDNG", "LEPC", "LEV", "LEVU", "LGN", "LGNS", "LGNX", "LK", "LKC", "LKI", "LKN", "LKNI", "LKO", "LKOI", "LKS", "LKSB", "LKSC", "LKSI", "LKSN", "LKSNI", "LKX", "LOCK", "LTHSE", "MAR", "MDW", "MESA", "MESU", "MFGN", "MFGQ", "MFGSG", "MGV", "MILB", "SBED", "SBKH", "SCRB", "SCRP", "SCSU", "SD", "SDL", "SDLU", "SEA", "SHFU", "SHLU", "SHOL", "SHOR", "SHPF", "SHSE", "SHSU", "SHVU", "SILL", "SILU", "SINK", "SLCE", "SLP", "SLPU", "SMSU", "SMU", "SNOW", "SPA", "SPIT", "SPLY", "SPNG", "SPNS", "SPNT", "SPRU", "SPUR", "SQR", "STKR", "STM", "STMA", "STMB", "STMC", "STMD", "STMH", "STMI", "STMIX", "STMM", "STMQ", "STMS", "STMSB", "STMX", "STNC", "STNE", "STNF", "STNI", "STNM", "STNR", "STNS", "STNW", "STPS", "STRT", "SWMP", "SYSI", "TAL", "TERR", "TERU", "TMPL", "TMSU", "TMTU", "TNGU", "TNKD", "TNL", "TNLC", "TNLN", "TNLRD", "TNLRR", "TNLS", "TOWR", "TRB", "TREE", "TRGD", "TRGU", "TRL", "TRMO", "TRNU", "TRR", "TUND", "UPLD", "USGE", "VAL", "VALG", "VALS", "VALU", "VALX", "VIN", "VINS", "VLC", "VLSU", "WAD", "WADB", "WADJ", "WADM", "WADS", "WADX", "WALL", "WALLA", "WEIR", "WHRF", "WHRL", "WLL", "WLLQ", "WLLS", "WRCK", "WTLD", "WTLDI", "WTRC", "WTRH", "WTRW", "ZOO", "AIRG", "AIRT", "AQC", "FYT", "LNDF", "PSN", "STMGS", "SUBS", "SUBW", "SWT", "TRANT", "PPLF", "PPLCH", "PPLH", "UFHU", "MLWND", "MLWTR", "MN", "MNA", "MNAU", "MNC", "MNCR", "MNCU", "MND", "MNDT", "MNDU", "MNFE", "MNMT", "MNN", "MNNI", "MNPB", "MNPL", "MNQ", "MNQR", "MNSN", "MOLE", "MOOR", "MOTU", "MRN", "MRSH", "MRSHN", "MSTY", "MT", "MTS", "MTSU", "MTU", "MVA", "NKM", "NRWS", "NSY", "NTK", "NTKS", "NVB", "OAS", "OBPT", "OBS", "OBSR", "OCH", "OCN", "OILF", "OILJ", "OILP", "OILQ", "OILR", "OILT", "OILW", "PAL", "PAN", "PANS", "PASS", "PEN", "PENX", "PGDA", "PIER", "PK", "PKLT", "PKS", "PKSU", "PKU", "PLAT", "PLATX", "PLDR", "PLFU", "PLN", "PLNU", "PLNX", "PLTU", "PMPO", "PMPW", "PND", "PNDI", "PNDN", "PNDNI", "PNDS", "PNDSF", "PNDSI", "PNDSN", "PNLU", "POOL", "POOLI", "PP", "PPLC", "PRK", "PRMN", "PRN", "PRNJ", "PRNQ", "PROM", "PRSH", "PRT", "PRVU", "PS", "PSH", "PSTB", "PSTC", "PSTP", "PT", "PTGE", "PTS", "PYR", "PYRS", "QCKS", "QUAY", "RAVU", "RCH", "RD", "RDA", "RDB", "RDCUT", "RDGB", "RDGE", "RDGG", "RDGU", "RDJCT", "RDST", "RDSU", "REG", "RES", "RESA", "RESF", "RESH", "RESN", "RESP", "RESV", "RESW", "RF", "RFC", "RFSU", "RFU", "RFX", "RGNE", "RGNL", "RHSE", "RISU", "RJCT", "RK", "RKFL", "RKRY", "RKS", "RLG", "RLGR", "RMPU", "RNCH", "RNGA", "RNGU", "RPDS", "RR", "RRQ", "RSD", "RSGNL", "AGRC", "AGRF", "AIRB", "AIRF", "AIRH", "AIRP", "AIRQ", "AIRS", "AMTH", "ANCH", "ANS", "ARCH", "ARCU", "ASPH", "ASTR", "ASYL", "ATOL", "BAR", "BAY", "BAYS", "BCH", "BCHS", "BCN", "BDG", "BDGQ", "BDLD", "BDLU", "BGHT", "BKSU", "BLDR", "BLHL", "BNCH", "BNCU", "BNK", "BNKR", "BNKU", "BNKX", "BOG", "BP", "BRKS", "BRKW", "BSND", "BSNP", "BSNU", "BTL", "BTYD", "BUR", "BUSH", "CAPE", "CARN", "CAVE", "CFT", "CHN", "CHNL", "CHNM", "CHNN", "CLF", "CLG", "CMN", "CMP", "CMPL", "CMPLA", "CMPMN", "CMPO", "CMPQ", "CMPRF", "CMTY", "CNFL", "CNL", "CNLA", "CNLB", "CNLD", "CNLI", "CNLN", "CNLQ", "CNLSB", "CNLX", "CNSU", "CNYN", "CNYU", "COLF", "COMC", "CONE", "COVE", "CRDR", "CRKT", "CRNT", "CRRL", "CRSU", "CRTR", "CSNO", "CST", "CSTL", "CSTM", "CSWY", "CSWYQ", "CTRA", "CTRR", "CTRS", "CULT", "CVNT", "DAM", "DAMQ", "DAMSB", "DARY", "DCK", "DCKB", "DCKD", "DCKY", "DEPU", "DIKE", "DLTA", "DPOF", "DPR", "DSRT", "DTCH", "DTCHD", "DTCHI", "DUNE", "DVD", "ERG", "EST", "ESTB", "ESTC", "ESTO", "ESTR", "ESTSG", "ESTSL", "ESTT", "ESTX", "ESTY", "FISH" };
  388:  
  389:             // below: this is a list of all features
  390:             List<string> list = new List<string> { "ADM1", "ADM1H", "ADM2", "ADM2H", "ADM3", "ADM3H", "ADM4", "ADM4H", "ADMD", "ADMDH", "ADMF", "ADMS", "AGRC", "AGRF", "AIRB", "AIRF", "AIRG", "AIRH", "AIRP", "AIRQ", "AIRS", "AIRT", "AMTH", "ANCH", "ANS", "APNU", "AQC", "ARCH", "ARCU", "AREA", "ARRU", "ASPH", "ASTR", "ASYL", "ATHF", "ATOL", "BAN", "BAR", "BAY", "BAYS", "BCH", "BCHS", "BCN", "BDG", "BDGQ", "BDLD", "BDLU", "BGHT", "BKSU", "BLDA", "BLDG", "BLDO", "BLDR", "BLHL", "BLOW", "BNCH", "BNCU", "BNK", "BNKR", "BNKU", "BNKX", "BOG", "BP", "BRKS", "BRKW", "BSND", "BSNP", "BSNU", "BSTN", "BTL", "BTYD", "BUR", "BUSH", "BUTE", "CAPE", "CAPG", "CARN", "CAVE", "CDAU", "CFT", "CH", "CHN", "CHNL", "CHNM", "CHNN", "CLDA", "CLF", "CLG", "CMN", "CMP", "CMPL", "CMPLA", "CMPMN", "CMPO", "CMPQ", "CMPRF", "CMTY", "CNFL", "CNL", "CNLA", "CNLB", "CNLD", "CNLI", "CNLN", "CNLQ", "CNLSB", "CNLX", "CNS", "CNSU", "CNYN", "CNYU", "COLF", "COMC", "CONE", "COVE", "CRDR", "CRKT", "CRNT", "CRQ", "CRQS", "CRRL", "CRSU", "CRTR", "CSNO", "CST", "CSTL", "CSTM", "CSWY", "CSWYQ", "CTHSE", "CTRA", "CTRB", "CTRCM", "CTRF", "CTRM", "CTRR", "CTRS", "CUET", "CULT", "CUTF", "CVNT", "DAM", "DAMQ", "DAMSB", "DARY", "DCK", "DCKB", "DCKD", "DCKY", "DEPU", "DEVH", "DIKE", "DIP", "DLTA", "DOMG", "DPOF", "DPR", "DPRG", "DSRT", "DTCH", "DTCHD", "DTCHI", "DTCHM", "DUNE", "DVD", "EDGU", "ERG", "ESCU", "EST", "ESTB", "ESTC", "ESTO", "ESTR", "ESTSG", "ESTSL", "ESTT", "ESTX", "ESTY", "FAN", "FANU", "FCL", "FIRE", "FISH", "FJD", "FJDS", "FLD", "FLDI", "FLLS", "FLLSX", "FLTM", "FLTT", "FLTU", "FNDY", "FORD", "FRKU", "FRM", "FRMQ", "FRMS", "FRMT", "FRST", "FRSTF", "FRSU", "FRZU", "FSR", "FT", "FURU", "FY", "FYT", "GAP", "GAPU", "GARG", "GASF", "GATE", "GDN", "GHAT", "GHSE", "GLCR", "GLYU", "GOSP", "GOVL", "GRAZ", "GRGE", "GRSLD", "GRVC", "GRVE", "GRVO", "GRVP", "GRVPN", "GULF", "GVL", "GYSR", "HBR", "HBRX", "HDLD", "HERM", "HLL", "HLLS", "HLLU", "HLSU", "HLT", "HMCK", "HMDA", "HMSD", "HOLU", "HSE", "HSEC", "HSP", "HSPC", "HSPD", "HSPL", "HSTS", "HTH", "HTL", "HUT", "HUTS", "INDS", "INLT", "INLTQ", "INSM", "INTF", "ISL", "ISLF", "ISLM", "ISLS", "ISLT", "ISLX", "ISTH", "ITTR", "JTY", "KNLU", "KNSU", "KRST", "LAND", "LAVA", "LBED", "LCTY", "LDGU", "LDNG", "LEPC", "LEV", "LEVU", "LGN", "LGNS", "LGNX", "LK", "LKC", "LKI", "LKN", "LKNI", "LKO", "LKOI", "LKS", "LKSB", "LKSC", "LKSI", "LKSN", "LKSNI", "LKX", "LNDF", "LOCK", "LTER", "LTHSE", "MAR", "MDVU", "MDW", "MESA", "MESU", "MFG", "MFGB", "MFGC", "MFGCU", "MFGLM", "MFGM", "MFGN", "MFGPH", "MFGQ", "MFGSG", "MGV", "MILB", "MKT", "ML", "MLM", "MLO", "MLSG", "MLSGQ", "MLSW", "MLWND", "MLWTR", "MN", "MNA", "MNAU", "MNC", "MNCR", "MNCU", "MND", "MNDT", "MNDU", "MNFE", "MNMT", "MNN", "MNNI", "MNPB", "MNPL", "MNQ", "MNQR", "MNSN", "MOLE", "MOOR", "MOTU", "MRN", "MRSH", "MRSHN", "MSQE", "MSSN", "MSSNQ", "MSTY", "MT", "MTS", "MTSU", "MTU", "MUS", "MVA", "NKM", "NOV", "NRWS", "NSY", "NTK", "NTKS", "NVB", "OAS", "OBPT", "OBS", "OBSR", "OCH", "OCN", "OILF", "OILJ", "OILP", "OILQ", "OILR", "OILT", "OILW", "OVF", "PAL", "PAN", "PANS", "PASS", "PCL", "PCLD", "PCLF", "PCLH", "PCLI", "PCLIX", "PCLS", "PEAT", "PEN", "PENX", "PGDA", "PIER", "PK", "PKLT", "PKS", "PKSU", "PKU", "PLAT", "PLATX", "PLDR", "PLFU", "PLN", "PLNU", "PLNX", "PLTU", "PMPO", "PMPW", "PND", "PNDI", "PNDN", "PNDNI", "PNDS", "PNDSF", "PNDSI", "PNDSN", "PNLU", "PO", "POOL", "POOLI", "PP", "PPL", "PPLA", "PPLA2", "PPLA3", "PPLA4", "PPLC", "PPLCH", "PPLF", "PPLH", "PPLL", "PPLQ", "PPLR", "PPLS", "PPLW", "PPLX", "PPQ", "PRK", "PRKGT", "PRKHQ", "PRMN", "PRN", "PRNJ", "PRNQ", "PROM", "PRSH", "PRT", "PRVU", "PS", "PSH", "PSN", "PSTB", "PSTC", "PSTP", "PT", "PTGE", "PTS", "PYR", "PYRS", "QCKS", "QUAY", "RAVU", "RCH", "RD", "RDA", "RDB", "RDCR", "RDCUT", "RDGB", "RDGE", "RDGG", "RDGU", "RDIN", "RDJCT", "RDST", "RDSU", "RECG", "RECR", "REG", "REP", "RES", "RESA", "RESF", "RESH", "RESN", "RESP", "RESV", "RESW", "RET", "RF", "RFC", "RFSU", "RFU", "RFX", "RGN", "RGNE", "RGNL", "RHSE", "RISU", "RJCT", "RK", "RKFL", "RKRY", "RKS", "RLG", "RLGR", "RMPU", "RNCH", "RNGA", "RNGU", "RPDS", "RR", "RRQ", "RSD", "RSGNL", "RSRT", "RSTN", "RSTNQ", "RSTP", "RSTPQ", "RSV", "RSVI", "RSVT", "RTE", "RUIN", "RVN", "RYD", "SALT", "SAND", "SBED", "SBKH", "SCH", "SCHA", "SCHC", "SCHM", "SCHN", "SCHT", "SCNU", "SCRB", "SCRP", "SCSU", "SD", "SDL", "SDLU", "SEA", "SHFU", "SHLU", "SHOL", "SHOPC", "SHOR", "SHPF", "SHRN", "SHSE", "SHSU", "SHVU", "SILL", "SILU", "SINK", "SLCE", "SLID", "SLP", "SLPU", "SMSU", "SMU", "SNOW", "SNTR", "SPA", "SPIT", "SPLY", "SPNG", "SPNS", "SPNT", "SPRU", "SPUR", "SQR", "ST", "STBL", "STDM", "STKR", "STLMT", "STM", "STMA", "STMB", "STMC", "STMD", "STMGS", "STMH", "STMI", "STMIX", "STMM", "STMQ", "STMS", "STMSB", "STMX", "STNB", "STNC", "STNE", "STNF", "STNI", "STNM", "STNR", "STNS", "STNW", "STPS", "STRT", "SUBS", "SUBW", "SWMP", "SWT", "SYSI", "TAL", "TERR", "TERU", "TMB", "TMPL", "TMSU", "TMTU", "TNGU", "TNKD", "TNL", "TNLC", "TNLN", "TNLRD", "TNLRR", "TNLS", "TOLL", "TOWR", "TRANT", "TRB", "TREE", "TRGD", "TRGU", "TRIG", "TRL", "TRMO", "TRNU", "TRR", "TUND", "UFHU", "UPLD", "USGE", "VAL", "VALG", "VALS", "VALU", "VALX", "VETF", "VIN", "VINS", "VLC", "VLSU", "WAD", "WADB", "WADJ", "WADM", "WADS", "WADX", "WALL", "WALLA", "WEIR", "WHRF", "WHRL", "WLL", "WLLQ", "WLLS", "WRCK", "WTLD", "WTLDI", "WTRC", "WTRH", "WTRW", "ZN", "ZNB", "ZNF", "ZOO" };
  391:  
  392:             return list;
  393:         }
  394:  
  395:         ////////////////////////////////////////////////////////////////////////////
  396:  
  397:         /// <summary>
  398:         ///
  399:         /// </summary>
  400:         public static List<string> FullVersionAllowedFeatureDesignationList(string countryFeatureFileNameIso3)
  401:         {
  402:             //List<string> allowedList = new List<string> { "FJDS", "FLD", "FLDI", "FLLS", "FLLSX", "RSRT", "RSTN", "RSTNQ", "RSTP", "RSTPQ", "RSV", "RSVI", "RSVT", "RTE", "RUIN", "RVN", "RYD", "SALT", "SAND", "FLTM", "FLTT", "FLTU", "FNDY", "FORD", "FRKU", "FRM", "FRMQ", "FRMS", "FRMT", "FRST", "FRSTF", "FRSU", "FRZU", "FT", "FURU", "GAP", "GAPU", "GASF", "GLCR", "GLYU", "GOSP", "GRAZ", "GRGE", "GRSLD", "GRVC", "GRVE", "GRVO", "GRVP", "GRVPN", "GULF", "GVL", "GYSR", "HBR", "HBRX", "HDLD", "HERM", "HLL", "HLLS", "HLLU", "HLSU", "HLT", "HMCK", "HMDA", "HOLU", "HSTS", "HTH", "INLT", "INLTQ", "INSM", "ISL", "ISLF", "ISLM", "ISLS", "ISLT", "ISLX", "ISTH", "JTY", "KNLU", "KNSU", "LAVA", "LBED", "LDGU", "LDNG", "LEPC", "LEV", "LEVU", "LGN", "LGNS", "LGNX", "LK", "LKC", "LKI", "LKN", "LKNI", "LKO", "LKOI", "LKS", "LKSB", "LKSC", "LKSI", "LKSN", "LKSNI", "LKX", "LOCK", "LTHSE", "MAR", "MDW", "MESA", "MESU", "MFGN", "MFGQ", "MFGSG", "MGV", "MILB", "SBED", "SBKH", "SCRB", "SCRP", "SCSU", "SD", "SDL", "SDLU", "SEA", "SHFU", "SHLU", "SHOL", "SHOR", "SHPF", "SHSE", "SHSU", "SHVU", "SILL", "SILU", "SINK", "SLCE", "SLP", "SLPU", "SMSU", "SMU", "SNOW", "SPA", "SPIT", "SPLY", "SPNG", "SPNS", "SPNT", "SPRU", "SPUR", "SQR", "STKR", "STM", "STMA", "STMB", "STMC", "STMD", "STMH", "STMI", "STMIX", "STMM", "STMQ", "STMS", "STMSB", "STMX", "STNC", "STNE", "STNF", "STNI", "STNM", "STNR", "STNS", "STNW", "STPS", "STRT", "SWMP", "SYSI", "TAL", "TERR", "TERU", "TMPL", "TMSU", "TMTU", "TNGU", "TNKD", "TNL", "TNLC", "TNLN", "TNLRD", "TNLRR", "TNLS", "TOWR", "TRB", "TREE", "TRGD", "TRGU", "TRL", "TRMO", "TRNU", "TRR", "TUND", "UPLD", "USGE", "VAL", "VALG", "VALS", "VALU", "VALX", "VIN", "VINS", "VLC", "VLSU", "WAD", "WADB", "WADJ", "WADM", "WADS", "WADX", "WALL", "WALLA", "WEIR", "WHRF", "WHRL", "WLL", "WLLQ", "WLLS", "WRCK", "WTLD", "WTLDI", "WTRC", "WTRH", "WTRW", "ZOO", "AIRG", "AIRT", "AQC", "FYT", "LNDF", "PSN", "STMGS", "SUBS", "SUBW", "SWT", "TRANT", "PPLF", "PPLCH", "PPLH", "UFHU", "MLWND", "MLWTR", "MN", "MNA", "MNAU", "MNC", "MNCR", "MNCU", "MND", "MNDT", "MNDU", "MNFE", "MNMT", "MNN", "MNNI", "MNPB", "MNPL", "MNQ", "MNQR", "MNSN", "MOLE", "MOOR", "MOTU", "MRN", "MRSH", "MRSHN", "MSTY", "MT", "MTS", "MTSU", "MTU", "MVA", "NKM", "NRWS", "NSY", "NTK", "NTKS", "NVB", "OAS", "OBPT", "OBS", "OBSR", "OCH", "OCN", "OILF", "OILJ", "OILP", "OILQ", "OILR", "OILT", "OILW", "PAL", "PAN", "PANS", "PASS", "PEN", "PENX", "PGDA", "PIER", "PK", "PKLT", "PKS", "PKSU", "PKU", "PLAT", "PLATX", "PLDR", "PLFU", "PLN", "PLNU", "PLNX", "PLTU", "PMPO", "PMPW", "PND", "PNDI", "PNDN", "PNDNI", "PNDS", "PNDSF", "PNDSI", "PNDSN", "PNLU", "POOL", "POOLI", "PP", "PPLC", "PRK", "PRMN", "PRN", "PRNJ", "PRNQ", "PROM", "PRSH", "PRT", "PRVU", "PS", "PSH", "PSTB", "PSTC", "PSTP", "PT", "PTGE", "PTS", "PYR", "PYRS", "QCKS", "QUAY", "RAVU", "RCH", "RD", "RDA", "RDB", "RDCUT", "RDGB", "RDGE", "RDGG", "RDGU", "RDJCT", "RDST", "RDSU", "REG", "RES", "RESA", "RESF", "RESH", "RESN", "RESP", "RESV", "RESW", "RF", "RFC", "RFSU", "RFU", "RFX", "RGNE", "RGNL", "RHSE", "RISU", "RJCT", "RK", "RKFL", "RKRY", "RKS", "RLG", "RLGR", "RMPU", "RNCH", "RNGA", "RNGU", "RPDS", "RR", "RRQ", "RSD", "RSGNL", "AGRC", "AGRF", "AIRB", "AIRF", "AIRH", "AIRP", "AIRQ", "AIRS", "AMTH", "ANCH", "ANS", "ARCH", "ARCU", "ASPH", "ASTR", "ASYL", "ATOL", "BAR", "BAY", "BAYS", "BCH", "BCHS", "BCN", "BDG", "BDGQ", "BDLD", "BDLU", "BGHT", "BKSU", "BLDR", "BLHL", "BNCH", "BNCU", "BNK", "BNKR", "BNKU", "BNKX", "BOG", "BP", "BRKS", "BRKW", "BSND", "BSNP", "BSNU", "BTL", "BTYD", "BUR", "BUSH", "CAPE", "CARN", "CAVE", "CFT", "CHN", "CHNL", "CHNM", "CHNN", "CLF", "CLG", "CMN", "CMP", "CMPL", "CMPLA", "CMPMN", "CMPO", "CMPQ", "CMPRF", "CMTY", "CNFL", "CNL", "CNLA", "CNLB", "CNLD", "CNLI", "CNLN", "CNLQ", "CNLSB", "CNLX", "CNSU", "CNYN", "CNYU", "COLF", "COMC", "CONE", "COVE", "CRDR", "CRKT", "CRNT", "CRRL", "CRSU", "CRTR", "CSNO", "CST", "CSTL", "CSTM", "CSWY", "CSWYQ", "CTRA", "CTRR", "CTRS", "CULT", "CVNT", "DAM", "DAMQ", "DAMSB", "DARY", "DCK", "DCKB", "DCKD", "DCKY", "DEPU", "DIKE", "DLTA", "DPOF", "DPR", "DSRT", "DTCH", "DTCHD", "DTCHI", "DUNE", "DVD", "ERG", "EST", "ESTB", "ESTC", "ESTO", "ESTR", "ESTSG", "ESTSL", "ESTT", "ESTX", "ESTY", "FISH" };
  403:  
  404:             // below: this is a list of all features
  405:             List<string> list = new List<string> { "ADM1", "ADM1H", "ADM2", "ADM2H", "ADM3", "ADM3H", "ADM4", "ADM4H", "ADMD", "ADMDH", "ADMF", "ADMS", "AGRC", "AGRF", "AIRB", "AIRF", "AIRG", "AIRH", "AIRP", "AIRQ", "AIRS", "AIRT", "AMTH", "ANCH", "ANS", "APNU", "AQC", "ARCH", "ARCU", "AREA", "ARRU", "ASPH", "ASTR", "ASYL", "ATHF", "ATOL", "BAN", "BAR", "BAY", "BAYS", "BCH", "BCHS", "BCN", "BDG", "BDGQ", "BDLD", "BDLU", "BGHT", "BKSU", "BLDA", "BLDG", "BLDO", "BLDR", "BLHL", "BLOW", "BNCH", "BNCU", "BNK", "BNKR", "BNKU", "BNKX", "BOG", "BP", "BRKS", "BRKW", "BSND", "BSNP", "BSNU", "BSTN", "BTL", "BTYD", "BUR", "BUSH", "BUTE", "CAPE", "CAPG", "CARN", "CAVE", "CDAU", "CFT", "CH", "CHN", "CHNL", "CHNM", "CHNN", "CLDA", "CLF", "CLG", "CMN", "CMP", "CMPL", "CMPLA", "CMPMN", "CMPO", "CMPQ", "CMPRF", "CMTY", "CNFL", "CNL", "CNLA", "CNLB", "CNLD", "CNLI", "CNLN", "CNLQ", "CNLSB", "CNLX", "CNS", "CNSU", "CNYN", "CNYU", "COLF", "COMC", "CONE", "COVE", "CRDR", "CRKT", "CRNT", "CRQ", "CRQS", "CRRL", "CRSU", "CRTR", "CSNO", "CST", "CSTL", "CSTM", "CSWY", "CSWYQ", "CTHSE", "CTRA", "CTRB", "CTRCM", "CTRF", "CTRM", "CTRR", "CTRS", "CUET", "CULT", "CUTF", "CVNT", "DAM", "DAMQ", "DAMSB", "DARY", "DCK", "DCKB", "DCKD", "DCKY", "DEPU", "DEVH", "DIKE", "DIP", "DLTA", "DOMG", "DPOF", "DPR", "DPRG", "DSRT", "DTCH", "DTCHD", "DTCHI", "DTCHM", "DUNE", "DVD", "EDGU", "ERG", "ESCU", "EST", "ESTB", "ESTC", "ESTO", "ESTR", "ESTSG", "ESTSL", "ESTT", "ESTX", "ESTY", "FAN", "FANU", "FCL", "FIRE", "FISH", "FJD", "FJDS", "FLD", "FLDI", "FLLS", "FLLSX", "FLTM", "FLTT", "FLTU", "FNDY", "FORD", "FRKU", "FRM", "FRMQ", "FRMS", "FRMT", "FRST", "FRSTF", "FRSU", "FRZU", "FSR", "FT", "FURU", "FY", "FYT", "GAP", "GAPU", "GARG", "GASF", "GATE", "GDN", "GHAT", "GHSE", "GLCR", "GLYU", "GOSP", "GOVL", "GRAZ", "GRGE", "GRSLD", "GRVC", "GRVE", "GRVO", "GRVP", "GRVPN", "GULF", "GVL", "GYSR", "HBR", "HBRX", "HDLD", "HERM", "HLL", "HLLS", "HLLU", "HLSU", "HLT", "HMCK", "HMDA", "HMSD", "HOLU", "HSE", "HSEC", "HSP", "HSPC", "HSPD", "HSPL", "HSTS", "HTH", "HTL", "HUT", "HUTS", "INDS", "INLT", "INLTQ", "INSM", "INTF", "ISL", "ISLF", "ISLM", "ISLS", "ISLT", "ISLX", "ISTH", "ITTR", "JTY", "KNLU", "KNSU", "KRST", "LAND", "LAVA", "LBED", "LCTY", "LDGU", "LDNG", "LEPC", "LEV", "LEVU", "LGN", "LGNS", "LGNX", "LK", "LKC", "LKI", "LKN", "LKNI", "LKO", "LKOI", "LKS", "LKSB", "LKSC", "LKSI", "LKSN", "LKSNI", "LKX", "LNDF", "LOCK", "LTER", "LTHSE", "MAR", "MDVU", "MDW", "MESA", "MESU", "MFG", "MFGB", "MFGC", "MFGCU", "MFGLM", "MFGM", "MFGN", "MFGPH", "MFGQ", "MFGSG", "MGV", "MILB", "MKT", "ML", "MLM", "MLO", "MLSG", "MLSGQ", "MLSW", "MLWND", "MLWTR", "MN", "MNA", "MNAU", "MNC", "MNCR", "MNCU", "MND", "MNDT", "MNDU", "MNFE", "MNMT", "MNN", "MNNI", "MNPB", "MNPL", "MNQ", "MNQR", "MNSN", "MOLE", "MOOR", "MOTU", "MRN", "MRSH", "MRSHN", "MSQE", "MSSN", "MSSNQ", "MSTY", "MT", "MTS", "MTSU", "MTU", "MUS", "MVA", "NKM", "NOV", "NRWS", "NSY", "NTK", "NTKS", "NVB", "OAS", "OBPT", "OBS", "OBSR", "OCH", "OCN", "OILF", "OILJ", "OILP", "OILQ", "OILR", "OILT", "OILW", "OVF", "PAL", "PAN", "PANS", "PASS", "PCL", "PCLD", "PCLF", "PCLH", "PCLI", "PCLIX", "PCLS", "PEAT", "PEN", "PENX", "PGDA", "PIER", "PK", "PKLT", "PKS", "PKSU", "PKU", "PLAT", "PLATX", "PLDR", "PLFU", "PLN", "PLNU", "PLNX", "PLTU", "PMPO", "PMPW", "PND", "PNDI", "PNDN", "PNDNI", "PNDS", "PNDSF", "PNDSI", "PNDSN", "PNLU", "PO", "POOL", "POOLI", "PP", "PPL", "PPLA", "PPLA2", "PPLA3", "PPLA4", "PPLC", "PPLCH", "PPLF", "PPLH", "PPLL", "PPLQ", "PPLR", "PPLS", "PPLW", "PPLX", "PPQ", "PRK", "PRKGT", "PRKHQ", "PRMN", "PRN", "PRNJ", "PRNQ", "PROM", "PRSH", "PRT", "PRVU", "PS", "PSH", "PSN", "PSTB", "PSTC", "PSTP", "PT", "PTGE", "PTS", "PYR", "PYRS", "QCKS", "QUAY", "RAVU", "RCH", "RD", "RDA", "RDB", "RDCR", "RDCUT", "RDGB", "RDGE", "RDGG", "RDGU", "RDIN", "RDJCT", "RDST", "RDSU", "RECG", "RECR", "REG", "REP", "RES", "RESA", "RESF", "RESH", "RESN", "RESP", "RESV", "RESW", "RET", "RF", "RFC", "RFSU", "RFU", "RFX", "RGN", "RGNE", "RGNL", "RHSE", "RISU", "RJCT", "RK", "RKFL", "RKRY", "RKS", "RLG", "RLGR", "RMPU", "RNCH", "RNGA", "RNGU", "RPDS", "RR", "RRQ", "RSD", "RSGNL", "RSRT", "RSTN", "RSTNQ", "RSTP", "RSTPQ", "RSV", "RSVI", "RSVT", "RTE", "RUIN", "RVN", "RYD", "SALT", "SAND", "SBED", "SBKH", "SCH", "SCHA", "SCHC", "SCHM", "SCHN", "SCHT", "SCNU", "SCRB", "SCRP", "SCSU", "SD", "SDL", "SDLU", "SEA", "SHFU", "SHLU", "SHOL", "SHOPC", "SHOR", "SHPF", "SHRN", "SHSE", "SHSU", "SHVU", "SILL", "SILU", "SINK", "SLCE", "SLID", "SLP", "SLPU", "SMSU", "SMU", "SNOW", "SNTR", "SPA", "SPIT", "SPLY", "SPNG", "SPNS", "SPNT", "SPRU", "SPUR", "SQR", "ST", "STBL", "STDM", "STKR", "STLMT", "STM", "STMA", "STMB", "STMC", "STMD", "STMGS", "STMH", "STMI", "STMIX", "STMM", "STMQ", "STMS", "STMSB", "STMX", "STNB", "STNC", "STNE", "STNF", "STNI", "STNM", "STNR", "STNS", "STNW", "STPS", "STRT", "SUBS", "SUBW", "SWMP", "SWT", "SYSI", "TAL", "TERR", "TERU", "TMB", "TMPL", "TMSU", "TMTU", "TNGU", "TNKD", "TNL", "TNLC", "TNLN", "TNLRD", "TNLRR", "TNLS", "TOLL", "TOWR", "TRANT", "TRB", "TREE", "TRGD", "TRGU", "TRIG", "TRL", "TRMO", "TRNU", "TRR", "TUND", "UFHU", "UPLD", "USGE", "VAL", "VALG", "VALS", "VALU", "VALX", "VETF", "VIN", "VINS", "VLC", "VLSU", "WAD", "WADB", "WADJ", "WADM", "WADS", "WADX", "WALL", "WALLA", "WEIR", "WHRF", "WHRL", "WLL", "WLLQ", "WLLS", "WRCK", "WTLD", "WTLDI", "WTRC", "WTRH", "WTRW", "ZN", "ZNB", "ZNF", "ZOO" };
  406:  
  407:             return list;
  408:         }
  409:  
  410:         ////////////////////////////////////////////////////////////////////////////
  411:  
  412:         /// <summary>
  413:         ///
  414:         /// </summary>
  415:         public static void DownloadAndExtractNgaGnsNamedCountryZipFile(string countryName, out string temporaryPathZipFileExtractDirectory)
  416:         {
  417:             var temporaryPathZipFile = Ia.TentPlay.Cl.Model.Business.Trek.Default.ApplicationTempDataDirectory + countryName + ".zip";
  418:             temporaryPathZipFileExtractDirectory = Ia.TentPlay.Cl.Model.Business.Trek.Default.ApplicationTempDataDirectory + countryName + " " + Ia.Cl.Model.Default.RandomNumber(4);
  419:  
  420:             var url = ngaGnsCountryZipFileFtpLocation + "/" + countryName + ".zip";
  421:  
  422:             if (Ia.Cl.Model.Default.DownloadFile(url, temporaryPathZipFile))
  423:             {
  424:                 System.IO.Compression.ZipFile.ExtractToDirectory(temporaryPathZipFile, temporaryPathZipFileExtractDirectory);
  425:             }
  426:  
  427:             File.Delete(temporaryPathZipFile);
  428:         }
  429:  
  430:         ////////////////////////////////////////////////////////////////////////////
  431:         ////////////////////////////////////////////////////////////////////////////
  432:     }
  433:  
  434:     ////////////////////////////////////////////////////////////////////////////
  435:     ////////////////////////////////////////////////////////////////////////////
  436: }