)>}]
شركة التطبيقات المتكاملة لتصميم وبرمجة البرمجيات الخاصة ش.ش.و.
Integrated Applications Programming Company
Home » Code Library » Default (Ia.Ftn.Cl.Models.Data.Huawei)

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

Defaul general support class for Huawei's Fixed Telecommunications Network (FTN) data model.

    1: using Microsoft.EntityFrameworkCore;
    2: using System;
    3: using System.Collections.Generic;
    4: using System.Data;
    5: using System.Linq;
    6:  
    7: namespace Ia.Ftn.Cl.Models.Data.Huawei
    8: {
    9:     ////////////////////////////////////////////////////////////////////////////
   10:  
   11:     /// <summary publish="true">
   12:     /// Defaul general support class for Huawei's Fixed Telecommunications Network (FTN) data model.
   13:     /// </summary>
   14:     /// 
   15:     /// <remarks> 
   16:     /// Copyright © 2014-2019 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
   17:     /// </remarks> 
   18:     public class Default
   19:     {
   20:         private static string[] list;
   21:         private static List<Ia.Ftn.Cl.Models.Business.Huawei.Board.MduDevBoard> mduDevBoardList;
   22:         private static List<Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev> mduDevList;
   23:         private static List<Ia.Ftn.Cl.Models.Business.Huawei.Dev.MsanDev> msanDevList;
   24:         private static Dictionary<string, Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev> accessNameToMduDevDictionary, accessIdToMduDevDictionary, nddOntIdToMduDevDictionary;
   25:         private static Dictionary<int, Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev> didToMduDevDictionary;
   26:  
   27:         private static readonly object objectLock = new object();
   28:  
   29:         ////////////////////////////////////////////////////////////////////////////
   30:  
   31:         /// <summary>
   32:         ///
   33:         /// </summary>
   34:         public Default() { }
   35:  
   36:         ////////////////////////////////////////////////////////////////////////////
   37:  
   38:         /// <summary>
   39:         ///
   40:         /// </summary>
   41:         public static Dictionary<string, Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev> AccessNameToMduDevDictionary
   42:         {
   43:             get
   44:             {
   45:                 if (accessNameToMduDevDictionary == null || accessNameToMduDevDictionary.Count == 0)
   46:                 {
   47:                     lock (objectLock)
   48:                     {
   49:                         accessNameToMduDevDictionary = Ia.Ftn.Cl.Models.Data.Huawei.Default._AccessNameToMduDevDictionary();
   50:                     }
   51:                 }
   52:  
   53:                 return accessNameToMduDevDictionary;
   54:             }
   55:         }
   56:  
   57:         ////////////////////////////////////////////////////////////////////////////
   58:  
   59:         /// <summary>
   60:         ///
   61:         /// </summary>
   62:         private static Dictionary<string, Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev> _AccessNameToMduDevDictionary()
   63:         {
   64:             accessNameToMduDevDictionary = new Dictionary<string, Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev>();
   65:  
   66:             var mduDevList = Ia.Ftn.Cl.Models.Data.Huawei.Default.MduDevList;
   67:  
   68:             foreach (var mduDev in mduDevList)
   69:             {
   70:                 if (!string.IsNullOrEmpty(mduDev.AccessName) && !string.IsNullOrEmpty(mduDev.NddOntId))
   71:                 {
   72:                     if (!accessNameToMduDevDictionary.ContainsKey(mduDev.AccessName))
   73:                     {
   74:                         accessNameToMduDevDictionary[mduDev.AccessName] = mduDev;
   75:                     }
   76:                     else
   77:                     {
   78:  
   79:                     }
   80:                 }
   81:                 else
   82:                 {
   83:  
   84:                 }
   85:             }
   86:  
   87:             return accessNameToMduDevDictionary;
   88:         }
   89:  
   90:         ////////////////////////////////////////////////////////////////////////////
   91:  
   92:         /// <summary>
   93:         ///
   94:         /// </summary>
   95:         public static Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev MduDevByAccessName(string accessName)
   96:         {
   97:             Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev mduDev;
   98:  
   99:             var accessNameToMduDevDictionary = Ia.Ftn.Cl.Models.Data.Huawei.Default.AccessNameToMduDevDictionary;
  100:  
  101:             if (accessNameToMduDevDictionary.ContainsKey(accessName))
  102:             {
  103:                 mduDev = accessNameToMduDevDictionary[accessName];
  104:             }
  105:             else mduDev = null;
  106:  
  107:             return mduDev;
  108:         }
  109:  
  110:         ////////////////////////////////////////////////////////////////////////////
  111:  
  112:         /// <summary>
  113:         ///
  114:         /// </summary>
  115:         public static void AccessNameToMduDevDictionaryReset()
  116:         {
  117:             accessNameToMduDevDictionary = null;
  118:             mduDevList = null;
  119:             mduDevBoardList = null;
  120:             accessIdToMduDevDictionary = null;
  121:             nddOntIdToMduDevDictionary = null;
  122:             didToMduDevDictionary = null;
  123:         }
  124:  
  125:         ////////////////////////////////////////////////////////////////////////////
  126:         ////////////////////////////////////////////////////////////////////////////
  127:  
  128:         /// <summary>
  129:         ///
  130:         /// </summary>
  131:         public static Dictionary<string, Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev> AccessIdToMduDevDictionary
  132:         {
  133:             get
  134:             {
  135:                 if (accessIdToMduDevDictionary == null || accessIdToMduDevDictionary.Count == 0)
  136:                 {
  137:                     lock (objectLock)
  138:                     {
  139:                         accessIdToMduDevDictionary = Ia.Ftn.Cl.Models.Data.Huawei.Default._AccessIdToMduDevDictionary();
  140:                     }
  141:                 }
  142:  
  143:                 return accessIdToMduDevDictionary;
  144:             }
  145:         }
  146:  
  147:         ////////////////////////////////////////////////////////////////////////////
  148:  
  149:         /// <summary>
  150:         ///
  151:         /// </summary>
  152:         private static Dictionary<string, Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev> _AccessIdToMduDevDictionary()
  153:         {
  154:             accessIdToMduDevDictionary = new Dictionary<string, Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev>();
  155:  
  156:             var mduDevList = Ia.Ftn.Cl.Models.Data.Huawei.Default.MduDevList;
  157:  
  158:             foreach (var mduDev in mduDevList)
  159:             {
  160:                 if (!string.IsNullOrEmpty(mduDev.AccessName) && !string.IsNullOrEmpty(mduDev.AccessId) && !string.IsNullOrEmpty(mduDev.NddOntId))
  161:                 {
  162:                     if (!accessIdToMduDevDictionary.ContainsKey(mduDev.AccessId))
  163:                     {
  164:                         accessIdToMduDevDictionary[mduDev.AccessId] = mduDev;
  165:                     }
  166:                     else
  167:                     {
  168:  
  169:                     }
  170:                 }
  171:                 else
  172:                 {
  173:  
  174:                 }
  175:             }
  176:  
  177:             return accessIdToMduDevDictionary;
  178:         }
  179:  
  180:         ////////////////////////////////////////////////////////////////////////////
  181:  
  182:         /// <summary>
  183:         ///
  184:         /// </summary>
  185:         public static Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev MduDevByAccessId(string accessId)
  186:         {
  187:             Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev mduDev;
  188:  
  189:             var accessIdToMduDevDictionary = Ia.Ftn.Cl.Models.Data.Huawei.Default.AccessIdToMduDevDictionary;
  190:  
  191:             if (accessIdToMduDevDictionary.ContainsKey(accessId))
  192:             {
  193:                 mduDev = accessIdToMduDevDictionary[accessId];
  194:             }
  195:             else mduDev = null;
  196:  
  197:             return mduDev;
  198:         }
  199:  
  200:         ////////////////////////////////////////////////////////////////////////////
  201:  
  202:         /// <summary>
  203:         ///
  204:         /// </summary>
  205:         public static int MduDevPortByAccessIdFnSnPn(string accessId, int fn, int sn, int pn)
  206:         {
  207:             var mduDev = Ia.Ftn.Cl.Models.Data.Huawei.Default.MduDevByAccessId(accessId);
  208:  
  209:             var port = (mduDev != null) ? mduDev.PortByFnSnPn(fn, sn, pn) : Ia.Ftn.Cl.Models.Business.Default.PortUndefinedOrInvalidOrUnknown;
  210:  
  211:             return port;
  212:         }
  213:  
  214:         ////////////////////////////////////////////////////////////////////////////
  215:         ////////////////////////////////////////////////////////////////////////////
  216:  
  217:         /// <summary>
  218:         ///
  219:         /// </summary>
  220:         public static Dictionary<string, Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev> NddOntIdToMduDevDictionary
  221:         {
  222:             get
  223:             {
  224:                 if (nddOntIdToMduDevDictionary == null || nddOntIdToMduDevDictionary.Count == 0)
  225:                 {
  226:                     lock (objectLock)
  227:                     {
  228:                         nddOntIdToMduDevDictionary = Ia.Ftn.Cl.Models.Data.Huawei.Default._NddOntIdToMduDevDictionary();
  229:                     }
  230:                 }
  231:  
  232:                 return nddOntIdToMduDevDictionary;
  233:             }
  234:         }
  235:  
  236:         ////////////////////////////////////////////////////////////////////////////
  237:  
  238:         /// <summary>
  239:         ///
  240:         /// </summary>
  241:         private static Dictionary<string, Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev> _NddOntIdToMduDevDictionary()
  242:         {
  243:             nddOntIdToMduDevDictionary = new Dictionary<string, Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev>();
  244:  
  245:             var mduDevList = Ia.Ftn.Cl.Models.Data.Huawei.Default.MduDevList;
  246:  
  247:             foreach (var mduDev in mduDevList)
  248:             {
  249:                 if (!string.IsNullOrEmpty(mduDev.NddOntId))
  250:                 {
  251:                     if (!nddOntIdToMduDevDictionary.ContainsKey(mduDev.NddOntId))
  252:                     {
  253:                         nddOntIdToMduDevDictionary[mduDev.NddOntId] = mduDev;
  254:                     }
  255:                     else
  256:                     {
  257:  
  258:                     }
  259:                 }
  260:                 else
  261:                 {
  262:  
  263:                 }
  264:             }
  265:  
  266:             return nddOntIdToMduDevDictionary;
  267:         }
  268:  
  269:         ////////////////////////////////////////////////////////////////////////////
  270:  
  271:         /// <summary>
  272:         ///
  273:         /// </summary>
  274:         public static Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev MduDevByNddOntId(string nddOntId)
  275:         {
  276:             Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev mduDev;
  277:  
  278:             var nddOntIdToMduDevDictionary = Ia.Ftn.Cl.Models.Data.Huawei.Default.NddOntIdToMduDevDictionary;
  279:  
  280:             if (nddOntIdToMduDevDictionary.ContainsKey(nddOntId))
  281:             {
  282:                 mduDev = nddOntIdToMduDevDictionary[nddOntId];
  283:             }
  284:             else mduDev = null;
  285:  
  286:             return mduDev;
  287:         }
  288:  
  289:         ////////////////////////////////////////////////////////////////////////////
  290:         ////////////////////////////////////////////////////////////////////////////
  291:  
  292:         /// <summary>
  293:         ///
  294:         /// </summary>
  295:         public static Dictionary<int, Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev> DidToMduDevDictionary
  296:         {
  297:             get
  298:             {
  299:                 if (didToMduDevDictionary == null || didToMduDevDictionary.Count == 0)
  300:                 {
  301:                     lock (objectLock)
  302:                     {
  303:                         didToMduDevDictionary = Ia.Ftn.Cl.Models.Data.Huawei.Default._DidToMduDevDictionary();
  304:                     }
  305:                 }
  306:  
  307:                 return didToMduDevDictionary;
  308:             }
  309:         }
  310:  
  311:         ////////////////////////////////////////////////////////////////////////////
  312:  
  313:         /// <summary>
  314:         ///
  315:         /// </summary>
  316:         private static Dictionary<int, Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev> _DidToMduDevDictionary()
  317:         {
  318:             didToMduDevDictionary = new Dictionary<int, Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev>();
  319:  
  320:             var mduDevList = Ia.Ftn.Cl.Models.Data.Huawei.Default.MduDevList;
  321:  
  322:             foreach (var mduDev in mduDevList)
  323:             {
  324:                 if (mduDev.Did > -1)
  325:                 {
  326:                     if (!didToMduDevDictionary.ContainsKey(mduDev.Did))
  327:                     {
  328:                         didToMduDevDictionary[mduDev.Did] = mduDev;
  329:                     }
  330:                     else
  331:                     {
  332:  
  333:                     }
  334:                 }
  335:                 else
  336:                 {
  337:  
  338:                 }
  339:             }
  340:  
  341:             return didToMduDevDictionary;
  342:         }
  343:  
  344:         ////////////////////////////////////////////////////////////////////////////
  345:  
  346:         /// <summary>
  347:         ///
  348:         /// </summary>
  349:         public static Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev MduDevByDid(int did)
  350:         {
  351:             Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev mduDev;
  352:  
  353:             var didToMduDevDictionary = Ia.Ftn.Cl.Models.Data.Huawei.Default.DidToMduDevDictionary;
  354:  
  355:             if (didToMduDevDictionary.ContainsKey(did))
  356:             {
  357:                 mduDev = didToMduDevDictionary[did];
  358:             }
  359:             else mduDev = null;
  360:  
  361:             return mduDev;
  362:         }
  363:  
  364:         ////////////////////////////////////////////////////////////////////////////
  365:         ////////////////////////////////////////////////////////////////////////////
  366:  
  367:         /// <summary>
  368:         ///
  369:         /// </summary>
  370:         public static List<Ia.Ftn.Cl.Models.Business.Huawei.Board.MduDevBoard> MduDevBoardList
  371:         {
  372:             get
  373:             {
  374:                 if (mduDevBoardList == null || mduDevBoardList.Count == 0)
  375:                 {
  376:                     lock (objectLock)
  377:                     {
  378:                         mduDevBoardList = new List<Ia.Ftn.Cl.Models.Business.Huawei.Board.MduDevBoard>();
  379:  
  380:                         var boardList = Ia.Ftn.Cl.Models.Data.Huawei.Default.BoardListByPstnOrEthBoardTypeAndMA5616OrMA5878DevType();
  381:  
  382:                         foreach (var board in boardList)
  383:                         {
  384:                             var mduDevBoard = new Ia.Ftn.Cl.Models.Business.Huawei.Board.MduDevBoard(board.DID, board.BT, board.BNAME, board.BVER, board.EmsDev.Type, board.EmsDev.DEVIP, board.FN, board.SN);
  385:  
  386:                             mduDevBoardList.Add(mduDevBoard);
  387:                         }
  388:                     }
  389:                 }
  390:  
  391:                 return mduDevBoardList;
  392:             }
  393:         }
  394:  
  395:         ////////////////////////////////////////////////////////////////////////////
  396:  
  397:         /// <summary>
  398:         ///
  399:         /// </summary>
  400:         public static List<Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev> MduDevList
  401:         {
  402:             get
  403:             {
  404:                 if (mduDevList == null || mduDevList.Count == 0)
  405:                 {
  406:                     lock (objectLock)
  407:                     {
  408:                         mduDevList = new List<Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev>();
  409:  
  410:                         var mduDevBoardList = Ia.Ftn.Cl.Models.Data.Huawei.Default.MduDevBoardList;
  411:  
  412:                         foreach (var mduDevBoard in mduDevBoardList)
  413:                         {
  414:                             var did = mduDevBoard.Did;
  415:  
  416:                             var mduDev = (from m in mduDevList where m.Did == did select m).SingleOrDefault();
  417:  
  418:                             if (mduDev != null)
  419:                             {
  420:                                 mduDev.MduDevBoardList.Add(mduDevBoard);
  421:                             }
  422:                             else
  423:                             {
  424:                                 mduDev = new Ia.Ftn.Cl.Models.Business.Huawei.Dev.MduDev(did)
  425:                                 {
  426:                                     DevType = mduDevBoard.EmsDevType,
  427:                                     DevIp = mduDevBoard.EmsDevIp,
  428:                                 };
  429:  
  430:                                 mduDev.MduDevBoardList = new List<Ia.Ftn.Cl.Models.Business.Huawei.Board.MduDevBoard>();
  431:                                 mduDev.MduDevBoardList.Add(mduDevBoard);
  432:  
  433:                                 mduDevList.Add(mduDev);
  434:                             }
  435:                         }
  436:  
  437:                         foreach (var mduDev in mduDevList)
  438:                         {
  439:                             mduDev.TelPortCount = mduDev.MduDevBoardList.Select(i => i.TelPortCount).Sum();
  440:                             mduDev.EthernetPortCount = mduDev.MduDevBoardList.Select(i => i.EthernetPortCount).Sum();
  441:  
  442:                             mduDev.PossibleFnSnPnPortList = Ia.Ftn.Cl.Models.Business.Huawei.Ems.PossibleFnSnPnForMduDevList(mduDev);
  443:                             mduDev.FirstFnSnPnPort = Ia.Ftn.Cl.Models.Business.Huawei.Ems.FirstFnSnPnForMduDevList(mduDev);
  444:                         }
  445:                     }
  446:                 }
  447:  
  448:                 return mduDevList;
  449:             }
  450:         }
  451:  
  452:         ////////////////////////////////////////////////////////////////////////////
  453:  
  454:         /// <summary>
  455:         ///
  456:         /// </summary>
  457:         public static List<Ia.Ftn.Cl.Models.Business.Huawei.Dev.MsanDev> MsanDevList
  458:         {
  459:             get
  460:             {
  461:                 if (msanDevList == null || msanDevList.Count == 0)
  462:                 {
  463:                     lock (objectLock)
  464:                     {
  465:                         int did;
  466:                         Ia.Ftn.Cl.Models.Business.Huawei.Dev.MsanDev msanDev;
  467:  
  468:                         msanDevList = new List<Ia.Ftn.Cl.Models.Business.Huawei.Dev.MsanDev>();
  469:  
  470:                         foreach (var dev in Ia.Ftn.Cl.Models.Data.Huawei.Dev.MsanDevList())
  471:                         {
  472:                             //if (dev.DEV == "SLM_MSAN_A01_F00");
  473:                             //else
  474:                             //{
  475:                             did = dev.DID;
  476:  
  477:                             msanDev = new Ia.Ftn.Cl.Models.Business.Huawei.Dev.MsanDev(did);
  478:  
  479:                             if (!string.IsNullOrEmpty(msanDev.Id)) msanDevList.Add(msanDev);
  480:                             //}
  481:                         }
  482:  
  483:                         foreach (var msanDev0 in msanDevList)
  484:                         {
  485:                             msanDev0.PossibleFnSnPnList = Ia.Ftn.Cl.Models.Business.Huawei.Ems.PossibleFnSnPnForMsanDevList();
  486:                             msanDev0.FirstFnSnPn = Ia.Ftn.Cl.Models.Business.Huawei.Ems.FirstFnSnPnForMsanDevList();
  487:                         }
  488:                     }
  489:                 }
  490:  
  491:                 return msanDevList;
  492:             }
  493:         }
  494:  
  495:         ////////////////////////////////////////////////////////////////////////////
  496:  
  497:         /// <summary>
  498:         ///
  499:         /// </summary>
  500:         public static Dictionary<Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Site, int> MsanSiteToServiceCountDictionary()
  501:         {
  502:             int count;
  503:             Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Site site;
  504:             List<int> didList;
  505:  
  506:             var msanDevDidToDnCountDictionary = Ia.Ftn.Cl.Models.Data.Huawei.VoipPstnUser.MsanDevDidToDnCountDictionary;
  507:  
  508:             var msanSiteToDidListDictionary = Ia.Ftn.Cl.Models.Data.Huawei.Dev.MsanSiteToDidListDictionary();
  509:  
  510:             var dictionary = new Dictionary<Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Site, int>();
  511:  
  512:             foreach (KeyValuePair<Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Site, List<int>> kvp in msanSiteToDidListDictionary)
  513:             {
  514:                 site = kvp.Key;
  515:                 didList = kvp.Value;
  516:  
  517:                 foreach (int did in didList)
  518:                 {
  519:                     count = msanDevDidToDnCountDictionary.ContainsKey(did) ? msanDevDidToDnCountDictionary[did] : 0;
  520:  
  521:                     if (!dictionary.ContainsKey(site)) dictionary[site] = count;
  522:                     else dictionary[site] += count;
  523:                 }
  524:             }
  525:  
  526:             return dictionary;
  527:         }
  528:  
  529:         ////////////////////////////////////////////////////////////////////////////
  530:  
  531:         /// <summary>
  532:         ///
  533:         /// </summary>
  534:         public static Dictionary<string, int> MsanDevDevToDnCountDictionary
  535:         {
  536:             get
  537:             {
  538:                 var msanDevList = Ia.Ftn.Cl.Models.Data.Huawei.Default.MsanDevList;
  539:  
  540:                 var msanDevDidToDnCountDictionary = Ia.Ftn.Cl.Models.Data.Huawei.VoipPstnUser.MsanDevDidToDnCountDictionary;
  541:  
  542:                 var dictionary = new Dictionary<string, int>();
  543:  
  544:                 foreach (var msanDev in msanDevList)
  545:                 {
  546:                     dictionary[msanDev.Dev] = msanDevDidToDnCountDictionary.ContainsKey(msanDev.Did) ? msanDevDidToDnCountDictionary[msanDev.Did] : 0;
  547:                 }
  548:  
  549:                 return dictionary;
  550:             }
  551:         }
  552:  
  553:         ////////////////////////////////////////////////////////////////////////////
  554:  
  555:         /// <summary>
  556:         ///
  557:         /// </summary>
  558:         public static List<string> MsanServiceListBySiteId(int siteId)
  559:         {
  560:             var msanSiteToDidListDictionary = Ia.Ftn.Cl.Models.Data.Huawei.Dev.MsanSiteToDidListDictionary();
  561:  
  562:             var didList = (from l in msanSiteToDidListDictionary
  563:                            where l.Key.Id == siteId
  564:                            select l.Value).SingleOrDefault();
  565:  
  566:             if (didList == null) didList = new List<int>();
  567:  
  568:             var dnServiceList = Ia.Ftn.Cl.Models.Data.Huawei.VoipPstnUser.DnServiceListByMsanDevDidList(didList);
  569:  
  570:             return dnServiceList;
  571:         }
  572:  
  573:         ////////////////////////////////////////////////////////////////////////////
  574:  
  575:         /// <summary>
  576:         ///
  577:         /// </summary>
  578:         public static List<Ia.Ftn.Cl.Models.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsan(Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Msan msan)
  579:         {
  580:             return Ia.Ftn.Cl.Models.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsan(msan);
  581:         }
  582:  
  583:         ////////////////////////////////////////////////////////////////////////////
  584:  
  585:         /// <summary>
  586:         ///
  587:         /// </summary>
  588:         public static List<Ia.Ftn.Cl.Models.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsanAndCabinet(Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Msan msan, int cabinet)
  589:         {
  590:             return Ia.Ftn.Cl.Models.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsanAndCabinet(msan, cabinet);
  591:         }
  592:  
  593:         ////////////////////////////////////////////////////////////////////////////
  594:  
  595:         /// <summary>
  596:         ///
  597:         /// </summary>
  598:         public static List<Ia.Ftn.Cl.Models.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsanAndCabinetAndFrame(Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Msan msan, int cabinet, int frame)
  599:         {
  600:             return Ia.Ftn.Cl.Models.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsanAndCabinetAndFrame(msan, cabinet, frame);
  601:         }
  602:  
  603:         ////////////////////////////////////////////////////////////////////////////
  604:  
  605:         /// <summary>
  606:         ///
  607:         /// </summary>
  608:         public static List<Ia.Ftn.Cl.Models.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsanAndCabinetAndFrameAndFn(Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Msan msan, int cabinet, int frame, int fn)
  609:         {
  610:             return Ia.Ftn.Cl.Models.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsanAndCabinetAndFrameAndFn(msan, cabinet, frame, fn);
  611:         }
  612:  
  613:         ////////////////////////////////////////////////////////////////////////////
  614:  
  615:         /// <summary>
  616:         ///
  617:         /// </summary>
  618:         public static List<Ia.Ftn.Cl.Models.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsanAndCabinetAndFrameAndFnAndSn(Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Msan msan, int cabinet, int frame, int fn, int sn)
  619:         {
  620:             return Ia.Ftn.Cl.Models.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsanAndCabinetAndFrameAndFnAndSn(msan, cabinet, frame, fn, sn);
  621:         }
  622:  
  623:         ////////////////////////////////////////////////////////////////////////////
  624:  
  625:         /// <summary>
  626:         ///
  627:         /// </summary>
  628:         public static Ia.Ftn.Cl.Models.Business.Huawei.Dev.MsanDev.Lic MsanDevLicByEmsVoipPstnUserId(string emsVoipPstnUserId)
  629:         {
  630:             return Ia.Ftn.Cl.Models.Data.Huawei.VoipPstnUser.MsanDevLicByEmsVoipPstnUserId(emsVoipPstnUserId);
  631:         }
  632:  
  633:         ////////////////////////////////////////////////////////////////////////////
  634:  
  635:         /// <summary>
  636:         ///
  637:         /// </summary>
  638:         public static Ia.Ftn.Cl.Models.Business.Huawei.Dev.MsanDev.Lic MsanDevLicByNddMsanAndCabinetAndFrameAndFnAndSnAndPn(Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Msan msan, int cabinet, int frame, int fn, int sn, int pn)
  639:         {
  640:             return Ia.Ftn.Cl.Models.Data.Huawei.VoipPstnUser.MsanDevLicByNddMsanAndCabinetAndFrameAndFnAndSnAndPn(msan, cabinet, frame, fn, sn, pn);
  641:         }
  642:  
  643:         ////////////////////////////////////////////////////////////////////////////
  644:  
  645:         /// <summary>
  646:         ///
  647:         /// </summary>
  648:         public static Dictionary<Ia.Ftn.Cl.Models.Business.Huawei.Dev.MsanDev.Lic, string> MsanDevLicToServiceByMsanDictionary(Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Msan msan)
  649:         {
  650:             var msanDevLicList = Ia.Ftn.Cl.Models.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsan(msan);
  651:  
  652:             var dictionary = new Dictionary<Ia.Ftn.Cl.Models.Business.Huawei.Dev.MsanDev.Lic, string>();
  653:  
  654:             foreach (var msanDevLic in msanDevLicList)
  655:             {
  656:                 dictionary[msanDevLic] = msanDevLic.Service;
  657:             }
  658:  
  659:             return dictionary;
  660:         }
  661:  
  662:         ////////////////////////////////////////////////////////////////////////////
  663:  
  664:         /// <summary>
  665:         ///
  666:         /// </summary>
  667:         public static Dictionary<string, string> MsanDevLicCabinetFrameSnPnTextStringToServiceByMsanDictionary(Ia.Ftn.Cl.Models.Business.NetworkDesignDocument.Msan msan)
  668:         {
  669:             string cabinetFrameSnPnTextString;
  670:  
  671:             var msanDevLicList = Ia.Ftn.Cl.Models.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsan(msan);
  672:  
  673:             var dictionary = new Dictionary<string, string>();
  674:  
  675:             foreach (var msanDevLic in msanDevLicList)
  676:             {
  677:                 cabinetFrameSnPnTextString = msanDevLic.ToCabinetFrameSnPnTextString();
  678:  
  679:                 dictionary[cabinetFrameSnPnTextString] = msanDevLic.Service;
  680:             }
  681:  
  682:             return dictionary;
  683:         }
  684:  
  685:         ////////////////////////////////////////////////////////////////////////////
  686:  
  687:         /// <summary>
  688:         ///
  689:         /// </summary>
  690:         public static List<Ia.Ftn.Cl.Models.Huawei.EmsBoard> BoardListByPstnOrEthBoardTypeAndMA5616OrMA5878DevType()
  691:         {
  692:             List<Ia.Ftn.Cl.Models.Huawei.EmsBoard> list;
  693:  
  694:             using (var db = new Ia.Ftn.Cl.Db())
  695:             {
  696:                 list = (from ed in db.EmsDevs
  697:                         join eb in db.EmsBoards on ed.Id equals eb.EmsDev.Id
  698:                         where (ed.DT == "MA5616" || ed.DT == "MA5878") && (eb.BT == "PSTN" || eb.BT == "ETH")
  699:                         select eb).Include(u => u.EmsDev).ToList();
  700:  
  701:                 /*
  702: select distinct * from EmsDevs ed
  703: left outer join EmsBoards eb on ed.Id = eb.EmsDev_Id
  704: where (ed.DT = 'MA5616' or ed.DT = 'MA5878') and (eb.BT = 'PSTN' or eb.BT = 'ETH')
  705: order by ed.DT, ed.DEV 
  706:                 */
  707:             }
  708:  
  709:             return list;
  710:         }
  711:  
  712:         ////////////////////////////////////////////////////////////////////////////
  713:  
  714:         /// <summary>
  715:         ///
  716:         /// </summary>
  717:         public static List<Ia.Ftn.Cl.Models.Access> AccessListBy5616Or5878OntEquipmentId()
  718:         {
  719:             List<Ia.Ftn.Cl.Models.Access> list;
  720:  
  721:             using (var db = new Ia.Ftn.Cl.Db())
  722:             {
  723:                 list = (from a in db.Accesses
  724:                         join eo in db.EmsOnts on a equals eo.Access
  725:                         join ed in db.EmsDevs on eo.NAME equals ed.DEVIP into gj
  726:                         from sgj in gj.DefaultIfEmpty()
  727:                         where eo.EQUIPMENTID == "5616" || eo.EQUIPMENTID == "5878"
  728:                         select a).ToList(); //.Include(u => u.EmsDev).ToList();
  729:                 /*
  730:                 select a.Id, eo.NAME, eo.ALIAS, eo.EQUIPMENTID, ed.DEVIP, ed.DEV from Accesses a
  731:                 inner join EmsOnts eo on a.Id = eo.Access_Id
  732:                 left outer join EmsDevs ed on ed.DEVIP = eo.NAME 
  733:                 where eo.EQUIPMENTID = '5616' or eo.EQUIPMENTID = '5878'
  734:                 */
  735:             }
  736:  
  737:             return list;
  738:         }
  739:  
  740:         ////////////////////////////////////////////////////////////////////////////
  741:  
  742:         /// <summary>
  743:         ///
  744:         /// </summary>
  745:         public static List<string> MsanPortIdList()
  746:         {
  747:             List<string> list;
  748:  
  749:             //var possibleSnList = Ia.Ftn.Cl.Model.Business.Huawei.Dev.MsanDev.PossibleSnList; or just check if EmsBoard.BT = "PSTN"
  750:  
  751:             //  var dev = Ia.Ftn.Cl.Model.Data.Huawei.Dev.MsanDevDidList();
  752:  
  753:             // The EmsPort list is about 230K big. I can't LINQ directly.
  754:  
  755:             using (var db = new Ia.Ftn.Cl.Db())
  756:             {
  757:                 var emsDevDidDevList = (from ed in db.EmsDevs select new { ed.DID, ed.DEV }).ToList();
  758:  
  759:                 var emsMsanDevDidList = emsDevDidDevList.Where(u => u.DEV.Contains("_MSAN_")).Select(u => u.DID).ToList();
  760:  
  761:                 /*
  762:                  * too slow
  763:                 list = (from ed in db.EmsDevs
  764:                         join eb in db.EmsBoards on ed.Id equals eb.EmsDev.Id
  765:                         join ep in db.EmsPorts on eb.Id equals ep.EmsBoard.Id
  766:                         where ed.DEV.Contains("_MSAN_") && eb.BT == "PSTN"
  767:                         select ep).ToList();
  768:                 */
  769:  
  770:                 /*
  771:                  * too slow
  772:                 list = (from ed in db.EmsDevs
  773:                         where emsMsanDevDidList.Contains(ed.DID)
  774:                         join eb in db.EmsBoards on ed.Id equals eb.EmsDev.Id
  775:                         join ep in db.EmsPorts on eb.Id equals ep.EmsBoard.Id
  776:                         select ep).ToList();
  777:                 */
  778:  
  779:                 var portIdDidList = (from ep in db.EmsPorts select new { ep.Id, ep.DID }).ToList();
  780:  
  781:                 list = (from ep in portIdDidList where emsMsanDevDidList.Contains(ep.DID) select ep.Id).ToList();
  782:             }
  783:  
  784:             return list;
  785:         }
  786:  
  787:         ////////////////////////////////////////////////////////////////////////////
  788:  
  789:         /// <summary>
  790:         ///
  791:         /// </summary>
  792:         public static List<Ia.Ftn.Cl.Models.Huawei.EmsPort> MsanPortList(Ia.Ftn.Cl.Models.Business.Huawei.Dev.MsanDev msanDev)
  793:         {
  794:             List<Ia.Ftn.Cl.Models.Huawei.EmsPort> list;
  795:  
  796:             using (var db = new Ia.Ftn.Cl.Db())
  797:             {
  798:                 list = (from ed in db.EmsDevs
  799:                         where ed.DID == msanDev.Did
  800:                         join eb in db.EmsBoards on ed.Id equals eb.EmsDev.Id
  801:                         join ep in db.EmsPorts on eb.Id equals ep.EmsBoard.Id
  802:                         select ep).Include(ep => ep.EmsBoard).Include(ep => ep.EmsBoard.EmsDev).AsNoTracking().ToList();
  803:             }
  804:  
  805:             return list;
  806:         }
  807:  
  808:         ////////////////////////////////////////////////////////////////////////////
  809:  
  810:         /// <summary>
  811:         ///
  812:         /// </summary>
  813:         public static List<string> DuplicateEmsOntSipInfoSipUserNameAndEmsVoipPstnUserMduDnServiceWithCountryCodeOrMsanDnServiceImpuAidServiceList()
  814:         {
  815:             var list0 = Ia.Ftn.Cl.Models.Data.Huawei.OntSipInfo.DuplicateSipUserNameServiceList();
  816:             var list1 = Ia.Ftn.Cl.Models.Data.Huawei.VoipPstnUser.DuplicateMduDnServiceWithCountryCodeOrMsanDnServiceImpuAidServiceList();
  817:  
  818:             var list = list0.Union(list1).Distinct().ToList();
  819:  
  820:             return list;
  821:         }
  822:  
  823:         ////////////////////////////////////////////////////////////////////////////
  824:  
  825:         /// <summary>
  826:         ///
  827:         /// </summary>
  828:         public static void UnrecognizedEmsDevAndEmsOntList(out List<string> unrecognizedDevList, out List<string> unrecognizedOntList)
  829:         {
  830:             string name;
  831:             unrecognizedDevList = new List<string>();
  832:             unrecognizedOntList = new List<string>();
  833:  
  834:             var devList = Ia.Ftn.Cl.Models.Data.Huawei.Dev.DevList();
  835:             var msanDevDevList = Ia.Ftn.Cl.Models.Data.Huawei.Dev.MsanDevDevList();
  836:             var nddOltList = Ia.Ftn.Cl.Models.Data.NetworkDesignDocument.OltList;
  837:  
  838:             foreach (var dev in devList)
  839:             {
  840:                 name = Ia.Ftn.Cl.Models.Business.Huawei.Ems.HuaweiAccessNameFormatFromInaccurateHuaweiFileAndEmsNameFormat(dev);
  841:                 name = Ia.Ftn.Cl.Models.Business.Default.StandardizeAccessNameInLegalFormatFromValue(name);
  842:  
  843:                 if (string.IsNullOrEmpty(name))
  844:                 {
  845:                     if (msanDevDevList.Contains(dev))
  846:                     {
  847:                     }
  848:                     else
  849:                     {
  850:                         if (nddOltList.Any(u => u.EmsName == dev))
  851:                         {
  852:                         }
  853:                         else
  854:                         {
  855:                             unrecognizedDevList.Add(dev);
  856:                         }
  857:                     }
  858:                 }
  859:             }
  860:  
  861:             var emsOntNullAccessList = Ia.Ftn.Cl.Models.Data.Huawei.Ont.ListWithNullAccess();
  862:  
  863:             foreach (var o in emsOntNullAccessList)
  864:             {
  865:                 unrecognizedOntList.Add(o.ALIAS + ":" + o.NAME);
  866:             }
  867:         }
  868:  
  869:         ////////////////////////////////////////////////////////////////////////////
  870:  
  871:         /// <summary>
  872:         ///
  873:         /// </summary>
  874:         public static string[] ListOfHuaweiOntThatWereIntiallyInstalledAndProvisionedWithNokiaMgcIp10_16_5_37BeforeNewMgcIpToCableDistributionAgreement
  875:         {
  876:             get
  877:             {
  878:                 if (list == null || list.Length == 0)
  879:                 {
  880:                     list = new string[] { "SAA.501.2","SAA.501.10","SAA.501.11","SAA.501.13","SAA.501.19","SAA.501.20","SAA.501.21","SAA.501.22","SAA.502.1","SAA.502.7","SAA.502.8","SAA.502.11","SAA.502.12","SAA.502.14","SAA.502.16","SAA.502.18","SAA.502.19","SAA.502.22","SAA.503.1","SAA.503.2","SAA.504.4","SAA.504.6","SAA.504.10","SAA.504.11","SAA.504.12","SAA.504.13","SAA.504.15","SAA.504.17","SAA.504.18","SAA.504.24","SAA.505.2","SAA.506.8","SAA.506.10","SAA.506.16","SAA.506.18","SAA.507.16","SAA.508.3","SAA.508.8","SAA.508.16","SAA.508.17","SAA.508.18","SAA.508.20","SAA.508.21","SAA.509.5","SAA.509.7","SAA.509.8","SAA.509.12","SAA.509.13","SAA.509.14","SAA.509.17","SAA.509.19","SAA.509.20","SAA.510.4","SAA.510.5","SAA.510.14","SAA.511.3","SAA.511.4","SAA.511.9","SAA.511.10","SAA.511.13","SAA.511.16","SAA.512.2","SAA.512.13","SAA.512.14","SAA.512.15","SAA.514.1","SAA.514.2","SAA.514.5","SAA.514.6","SAA.514.8","SAA.514.11","SAA.514.12","SAA.514.13","SAA.514.14","SAA.514.15","SAA.514.16","SAA.514.22","SAA.517.7","SAA.517.8","SAA.517.9","SAA.517.10","SAA.517.12","SAA.517.15","SAA.517.16","SAA.518.2","SAA.518.3","SAA.518.5","SAA.518.11","SAA.518.14","SAA.518.16","SAA.519.1","SAA.519.2","SAA.519.6","SAA.519.10","SAA.519.15","SAA.519.16","SAA.519.17","SAA.519.18","SAA.519.23","SAA.521.4","SAA.521.10",
  881:                         "SAA.521.20","SAA.521.23","SAA.522.1","SAA.522.6","SAA.522.9","SAA.522.10","SAA.522.11","SAA.522.13","SAA.522.16","SAA.523.1","SAA.523.2","SAA.523.3","SAA.523.5","SAA.523.7","SAA.523.9","SAA.523.10","SAA.523.12","SAA.523.13","SAA.523.14","SAA.523.15","SAA.523.16","SAA.523.18","SAA.523.19","SAA.524.1","SAA.524.3","SAA.524.6","SAA.524.8","SAA.524.9","SAA.524.10","SAA.524.11","SAA.524.12","SAA.524.14","SAA.524.17","SAA.524.18","SAA.528.3","SAA.528.5","SAA.528.6","SAA.528.7","SAA.528.10","SAA.528.11","SAA.528.15","SAA.528.17","SAA.528.19","SAA.528.20","SAA.528.21","SAA.530.1","SAA.530.5","SAA.530.6","SAA.530.7","SAA.530.8","SAA.530.9","SAA.530.10","SAA.530.11","SAA.530.12","SAA.530.13","SAA.530.16","SAA.530.17","SAA.530.19","SAA.531.1","SAA.531.4","SAA.531.6","SAA.531.7","SAA.531.15","SAA.531.17","SAA.531.19","SAA.531.20","SAA.531.22","SAA.531.23","SAA.533.2","SAA.533.8","SAA.533.9","SAA.533.17","SAA.533.19","SAA.533.20","SAA.533.21","SAA.533.23","SAA.534.1","SAA.534.2","SAA.534.3","SAA.534.4","SAA.534.10","SAA.534.12","SAA.534.18","SAA.534.20","SAA.534.21","SAA.535.1","SAA.535.15","SAA.535.16","SAA.535.17","SAA.535.18",
  882:                         "SAA.536.1","SAA.536.2","SAA.536.3","SAA.536.4","SAA.536.6","SAA.536.9","SAA.536.13","SAA.536.15","SAA.537.1","SAA.537.4","SAA.537.6","SAA.537.7","SAA.537.8","SAA.537.9","SAA.537.10","SAA.537.13","SAA.537.14","SAA.537.15","SAA.537.16","SAA.537.22","SAA.538.1","SAA.538.4","SAA.538.9","SAA.538.10","SAA.538.14","SAA.538.15","SAA.538.17","SAA.538.18","SAA.538.19","SAA.539.2","SAA.539.3","SAA.539.5","SAA.539.6","SAA.539.7","SAA.539.8","SAA.539.9","SAA.539.18","SAA.539.19","SAA.539.20","SAA.541.2","SAA.541.6","SAA.541.7","SAA.541.9","SAA.541.10","SAA.541.13","SAA.541.15","SAA.541.21","SAA.541.23","SAA.541.24","SAA.542.1","SAA.542.3","SAA.542.6","SAA.542.7","SAA.542.8","SAA.542.9","SAA.542.21","SAA.543.5","SAA.543.9","SAA.543.10","SAA.543.16","SAA.544.4","SAA.544.10","SAA.544.11","SAA.544.12","SAA.544.15","SAA.544.22","SAA.544.23","SAA.545.9","SAA.701.1","SAA.701.2","SAA.701.3","SAA.701.4","SAA.701.5","SAA.701.6","SAA.701.7","SAA.701.9","SAA.701.10","SAA.701.11","SAA.701.13","SAA.701.14","SAA.701.15","SAA.701.16","SAA.701.17","SAA.702.1","SAA.702.2","SAA.702.3","SAA.702.4","SAA.702.5","SAA.702.8","SAA.702.9","SAA.702.10","SAA.702.12","SAA.702.14","SAA.702.16","SAA.702.17","SAA.702.21","SAA.702.22","SAA.702.23","SAA.702.24","SAA.703.2","SAA.703.3","SAA.703.11","SAA.703.14","SAA.703.15",
  883:                         "SAA.703.17","SAA.703.19","SAA.703.20","SAA.703.23","SAA.704.3","SAA.704.4","SAA.704.6","SAA.704.7","SAA.704.9","SAA.704.10","SAA.704.13","SAA.704.15","SAA.704.16","SAA.704.17","SAA.704.18","SAA.706.5","SAA.706.6","SAA.706.7","SAA.706.8","SAA.706.11","SAA.706.12","SAA.706.15","SAA.706.16","SAA.706.17","SAA.706.20","SAA.706.21","SAA.706.23","SAA.706.24","SAA.707.2","SAA.707.5","SAA.707.7","SAA.707.10","SAA.707.12","SAA.707.13","SAA.707.15","SAA.707.17","SAA.707.19","SAA.707.20","SAA.707.21","SAA.707.22","SAA.709.1","SAA.709.3","SAA.709.7","SAA.709.8","SAA.709.14","SAA.709.15","SAA.709.18","SAA.709.19","SAA.709.23","SAA.709.24","SAA.710.3","SAA.710.4","SAA.710.12","SAA.710.15","SAA.710.16","SAA.710.19","SAA.710.21","SAA.710.22","SAA.710.24","SAA.711.1","SAA.711.3","SAA.711.5","SAA.711.9","SAA.711.11","SAA.711.12","SAA.711.13","SAA.711.14","SAA.711.16","SAA.711.18","SAA.711.19","SAA.711.20","SAA.711.23","SAA.711.24","SAA.712.2","SAA.712.3","SAA.712.4","SAA.712.6","SAA.712.7","SAA.712.9","SAA.712.12",
  884:                         "SAA.712.16","SAA.712.18","SAA.712.19","SAA.712.20","SAA.712.21","SAA.712.26","SAA.712.27","SAA.714.2","SAA.714.3","SAA.714.8","SAA.714.11","SAA.715.5","SAA.715.7","SAA.715.8","SAA.715.9","SAA.715.10","SAA.715.11","SAA.715.12","SAA.715.15","SAA.715.18","SAA.715.19","SAA.716.2","SAA.716.3","SAA.716.4","SAA.716.6","SAA.716.8","SAA.716.11","SAA.716.12","SAA.716.15","SAA.716.17","SAA.716.20","SAA.716.21","SAA.717.3","SAA.717.5","SAA.717.7","SAA.717.10","SAA.717.13","SAA.717.14","SAA.717.15","SAA.717.18","SAA.717.20","SAA.717.21","SAA.717.22","SAA.718.1","SAA.718.2","SAA.718.3","SAA.718.5","SAA.718.6","SAA.718.7","SAA.718.11","SAA.718.22","SAA.718.23","SAA.718.24","SAA.718.25","SAA.719.2","SAA.719.4","SAA.719.8","SAA.719.9","SAA.719.10","SAA.719.11","SAA.719.12","SAA.719.14","SAA.719.17","SAA.719.20","SAA.719.23","SAA.720.3","SAA.720.4","SAA.720.6","SAA.720.7","SAA.720.10","SAA.720.13","SAA.720.14","SAA.721.2","SAA.721.3","SAA.721.4","SAA.721.7","SAA.721.8","SAA.721.10","SAA.721.11","SAA.721.12","SAA.721.13","SAA.721.14","SAA.721.18","SAA.721.19","SAA.721.20","SAA.721.23","SAA.722.11","SAA.722.12","SAA.722.13","SAA.722.16","SAA.722.17","SAA.722.18","SAA.722.19","SAA.722.22","SAA.722.24","SAA.723.2","SAA.723.3","SAA.723.4","SAA.723.7","SAA.723.9","SAA.723.13","SAA.723.15","SAA.723.17",
  885:                         "SAA.723.19","SAA.723.20","SAA.723.22","SAA.723.23","SAA.724.5","SAA.724.6","SAA.724.8","SAA.724.11","SAA.724.14","SAA.724.15","SAA.724.16","SAA.724.17","SAA.724.18","SAA.726.2","SAA.726.7","SAA.726.8","SAA.726.9","SAA.726.10","SAA.726.11","SAA.726.12","SAA.726.13","SAA.726.14","SAA.726.17","SAA.726.20","SAA.726.21","SAA.726.22","SAA.726.23","SAA.729.2","SAA.729.3","SAA.729.4","SAA.729.5","SAA.729.6","SAA.729.10","SAA.729.11","SAA.729.14","SAA.729.17","SAA.729.18","SAA.729.19","SAA.729.20","SAA.729.21","SAA.730.4","SAA.730.5","SAA.730.8","SAA.730.9","SAA.730.11","SAA.730.12","SAA.730.13","SAA.730.14","SAA.730.22","SAA.733.2","SAA.733.3","SAA.733.5","SAA.733.6","SAA.733.9","SAA.733.10","SAA.734.1","SAA.734.2","SAA.734.3","SAA.734.4","SAA.734.5","SAA.734.6","SAA.734.7","SAA.734.11","SAA.734.12","SAA.734.13","SAA.734.15","SAA.734.17","SAA.734.19","SAA.734.20","SAA.735.7","SAA.735.8","SAA.735.10","SAA.735.12","SAA.735.14","SAA.735.19","SAA.735.22","SAA.736.3","SAA.736.4","SAA.736.7","SAA.736.8","SAA.736.9","SAA.736.10","SAA.736.17","SAA.736.18","SAA.736.21","SAA.736.22","SAA.736.23","SAA.737.5","SAA.737.6","SAA.737.8",
  886:                         "SAA.737.11","SAA.737.13","SAA.737.15","SAA.737.16","SAA.737.18","SAA.738.4","SAA.738.7","SAA.738.8","SAA.738.11","SAA.738.13","SAA.738.14","SAA.738.16","SAA.738.18","SAA.739.1","SAA.739.2","SAA.739.3","SAA.739.13","SAA.739.14","SAA.739.15","SAA.739.18","SAA.739.19","SAA.739.20","SAA.740.7","SAA.740.20","SAA.742.2","SAA.742.3","SAA.742.5","SAA.742.6","SAA.742.7","SAA.742.11","SAA.742.12","SAA.742.14","SAA.742.15","SAA.742.17","SAA.742.18","SAA.742.20","SAA.742.21","SAA.742.23","SAA.742.25","SAA.743.4","SAA.743.7","SAA.743.9","SAA.743.10","SAA.743.13","SAA.743.16","SAA.743.19","SAA.743.21","SAA.743.22","SAA.743.23","SAA.743.24","SAA.744.5","SAA.744.6","SAA.744.7","SAA.744.22","SAA.745.12","SAA.746.12","SAA.747.2","SAA.747.4","SAA.750.1","SAA.750.6","SAA.750.7","SAA.750.12","SAA.750.16","SAA.750.19","SAA.750.20","SAA.750.26","SAA.751.1","SAA.751.2","SAA.751.3","SAA.751.7","SAA.751.8","SAA.751.13","SAA.751.16","SAA.751.17","SAA.751.18","SAA.751.22","SAA.752.1","SAA.752.3","SAA.752.5","SAA.752.11","SAA.752.13","SAA.752.14","SAA.752.15","SAA.752.17","SAA.752.18","SAA.752.21","SAA.802.6","SAA.802.8","SAA.802.10","SAA.802.11","SAA.802.12","SAA.802.13","SAA.802.16","SAA.802.17","SAA.802.20","SAA.804.3","SAA.804.4","SAA.804.5","SAA.804.6","SAA.804.11","SAA.805.21","SAA.806.24","SAA.807.1",
  887:                         "SAA.807.7","SAA.807.16","SAA.807.17","SAA.807.20","SAA.808.2","SAA.808.4","SAA.808.5","SAA.808.8","SAA.808.9","SAA.808.13","SAA.811.3","SAA.813.1","SAA.813.3","SAA.813.4","SAA.813.5","SAA.813.10","SAA.813.12","SAA.813.15","SAA.813.16","SAA.814.2","SAA.814.3","SAA.814.5","SAA.814.9","SAA.814.11","SAA.814.16","SAA.814.18","SAA.814.19","SAA.814.23","SAA.814.24","SAA.815.1","SAA.815.2","SAA.815.7","SAA.815.9","SAA.815.10","SAA.815.11","SAA.815.12","SAA.815.13","SAA.815.14","SAA.815.15","SAA.815.16","SAA.815.18","SAA.815.19","SAA.815.20","SAA.815.21","SAA.815.26","SAA.819.1","SAA.819.2","SAA.819.4","SAA.819.5","SAA.819.6","SAA.819.8","SAA.819.13","SAA.819.17","SAA.822.9","SAA.826.18","SAA.827.13","SAA.827.14","SAA.837.21","SAA.846.4","SAA.846.10"
  888:                     };
  889:                 }
  890:  
  891:                 return list;
  892:             }
  893:         }
  894:  
  895:         ////////////////////////////////////////////////////////////////////////////
  896:         ////////////////////////////////////////////////////////////////////////////   
  897:     }
  898:  
  899:     ////////////////////////////////////////////////////////////////////////////
  900:     ////////////////////////////////////////////////////////////////////////////   
  901: }