System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact bac659474e41e45c35171057d34020b4a51b2b40:


0000: 2f 2a 0d 0a 20 2a 20 49 6e 73 74 61 6c 6c 65 72  /*.. * Installer
0010: 2e 63 73 20 2d 2d 0d 0a 20 2a 0d 0a 20 2a 20 57  .cs --.. *.. * W
0020: 72 69 74 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69  ritten by Joe Mi
0030: 73 74 61 63 68 6b 69 6e 2e 0d 0a 20 2a 20 52 65  stachkin... * Re
0040: 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70 75  leased to the pu
0050: 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73 65  blic domain, use
0060: 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69 73   at your own ris
0070: 6b 21 0d 0a 20 2a 2f 0d 0a 0d 0a 75 73 69 6e 67  k!.. */....using
0080: 20 53 79 73 74 65 6d 3b 0d 0a 75 73 69 6e 67 20   System;..using 
0090: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
00a0: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 75 73 69  ns.Generic;..usi
00b0: 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f  ng System.Diagno
00c0: 73 74 69 63 73 3b 0d 0a 75 73 69 6e 67 20 53 79  stics;..using Sy
00d0: 73 74 65 6d 2e 45 6e 74 65 72 70 72 69 73 65 53  stem.EnterpriseS
00e0: 65 72 76 69 63 65 73 2e 49 6e 74 65 72 6e 61 6c  ervices.Internal
00f0: 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  ;..using System.
0100: 49 4f 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  IO;..using Syste
0110: 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 3b 0d 0a 75  m.Reflection;..u
0120: 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74  sing System.Runt
0130: 69 6d 65 2e 43 6f 6d 70 69 6c 65 72 53 65 72 76  ime.CompilerServ
0140: 69 63 65 73 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e  ices;....#if WIN
0150: 44 4f 57 53 0d 0a 75 73 69 6e 67 20 53 79 73 74  DOWS..using Syst
0160: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72  em.Runtime.Inter
0170: 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a 23 65 6e  opServices;..#en
0180: 64 69 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73  dif....using Sys
0190: 74 65 6d 2e 53 65 63 75 72 69 74 79 3b 0d 0a 0d  tem.Security;...
01a0: 0a 23 69 66 20 4e 45 54 5f 32 30 20 7c 7c 20 4e  .#if NET_20 || N
01b0: 45 54 5f 33 35 0d 0a 75 73 69 6e 67 20 53 79 73  ET_35..using Sys
01c0: 74 65 6d 2e 53 65 63 75 72 69 74 79 2e 50 65 72  tem.Security.Per
01d0: 6d 69 73 73 69 6f 6e 73 3b 0d 0a 23 65 6e 64 69  missions;..#endi
01e0: 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  f....using Syste
01f0: 6d 2e 54 65 78 74 3b 0d 0a 75 73 69 6e 67 20 53  m.Text;..using S
0200: 79 73 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 3b  ystem.Threading;
0210: 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 57  ..using System.W
0220: 69 6e 64 6f 77 73 2e 46 6f 72 6d 73 3b 0d 0a 75  indows.Forms;..u
0230: 73 69 6e 67 20 53 79 73 74 65 6d 2e 58 6d 6c 3b  sing System.Xml;
0240: 0d 0a 75 73 69 6e 67 20 4d 69 63 72 6f 73 6f 66  ..using Microsof
0250: 74 2e 57 69 6e 33 32 3b 0d 0a 0d 0a 6e 61 6d 65  t.Win32;....name
0260: 73 70 61 63 65 20 53 79 73 74 65 6d 2e 44 61 74  space System.Dat
0270: 61 2e 53 51 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20  a.SQLite..{..   
0280: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
0290: 44 65 6c 65 67 61 74 65 73 0d 0a 20 20 20 20 69  Delegates..    i
02a0: 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65  nternal delegate
02b0: 20 76 6f 69 64 20 54 72 61 63 65 43 61 6c 6c 62   void TraceCallb
02c0: 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 73 74  ack(..        st
02d0: 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 20 2f 2a  ring message, /*
02e0: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
02f0: 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 20  string category 
0300: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 29 3b  /* in */..    );
0310: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
0320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0360: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72  ///....    inter
0370: 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 62 6f 6f  nal delegate boo
0380: 6c 20 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69  l FrameworkConfi
0390: 67 43 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20  gCallback(..    
03a0: 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
03b0: 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 2f  ame,           /
03c0: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
03d0: 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e   string invarian
03e0: 74 4e 61 6d 65 2c 20 20 20 20 20 20 2f 2a 20 69  tName,      /* i
03f0: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74  n */..        st
0400: 72 69 6e 67 20 6e 61 6d 65 2c 20 20 20 20 20 20  ring name,      
0410: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
0420: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  /..        strin
0430: 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 20  g description,  
0440: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
0450: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
0460: 79 70 65 4e 61 6d 65 2c 20 20 20 20 20 20 20 20  ypeName,        
0470: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0480: 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d       AssemblyNam
0490: 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20  e assemblyName, 
04a0: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
04b0: 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f    string directo
04c0: 72 79 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ry,          /* 
04d0: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 6f  in */..        o
04e0: 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
04f0: 2c 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20  ,         /* in 
0500: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  */..        bool
0510: 20 70 65 72 55 73 65 72 2c 20 20 20 20 20 20 20   perUser,       
0520: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
0530: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f  .        bool wo
0540: 77 36 34 2c 20 20 20 20 20 20 20 20 20 20 20 20  w64,            
0550: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
0560: 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
0570: 4f 6e 4d 69 73 73 69 6e 67 2c 20 20 20 20 20 20  OnMissing,      
0580: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
0590: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 20     bool whatIf, 
05a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
05b0: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
05c0: 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 20 20 20  bool verbose,   
05d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
05e0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65 66   */..        ref
05f0: 20 62 6f 6f 6c 20 73 61 76 65 64 2c 20 20 20 20   bool saved,    
0600: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a          /* out *
0610: 2f 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 73  /..        ref s
0620: 74 72 69 6e 67 20 65 72 72 6f 72 20 20 20 20 20  tring error     
0630: 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d        /* out */.
0640: 0a 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f  .    );....    /
0650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
06a0: 20 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67    internal deleg
06b0: 61 74 65 20 62 6f 6f 6c 20 46 72 61 6d 65 77 6f  ate bool Framewo
06c0: 72 6b 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61  rkRegistryCallba
06d0: 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 49 6e 73  ck(..        Ins
06e0: 74 61 6c 6c 65 72 2e 4d 6f 63 6b 52 65 67 69 73  taller.MockRegis
06f0: 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 20  tryKey rootKey, 
0700: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0710: 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f    string framewo
0720: 72 6b 4e 61 6d 65 2c 20 20 20 20 20 20 20 20 20  rkName,         
0730: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0740: 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
0750: 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
0760: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
0770: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  */..        stri
0780: 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  ng platformName,
0790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
07a0: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
07b0: 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
07c0: 79 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y,              
07d0: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
07e0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
07f0: 65 6e 74 44 61 74 61 2c 20 20 20 20 20 20 20 20  entData,        
0800: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
0810: 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  /..        bool 
0820: 70 65 72 55 73 65 72 2c 20 20 20 20 20 20 20 20  perUser,        
0830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0840: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
0850: 62 6f 6f 6c 20 77 6f 77 36 34 2c 20 20 20 20 20  bool wow64,     
0860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0870: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0880: 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
0890: 6e 4d 69 73 73 69 6e 67 2c 20 20 20 20 20 20 20  nMissing,       
08a0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
08b0: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77  ..        bool w
08c0: 68 61 74 49 66 2c 20 20 20 20 20 20 20 20 20 20  hatIf,          
08d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
08e0: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  in */..        b
08f0: 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 20 20 20 20  ool verbose,    
0900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0910: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0920: 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
0930: 72 72 6f 72 20 20 20 20 20 20 20 20 20 20 20 20  rror            
0940: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f         /* out */
0950: 0d 0a 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20  ..    );....    
0960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
09a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
09b0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c 65     internal dele
09c0: 67 61 74 65 20 62 6f 6f 6c 20 56 69 73 75 61 6c  gate bool Visual
09d0: 53 74 75 64 69 6f 52 65 67 69 73 74 72 79 43 61  StudioRegistryCa
09e0: 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20  llback(..       
09f0: 20 49 6e 73 74 61 6c 6c 65 72 2e 4d 6f 63 6b 52   Installer.MockR
0a00: 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
0a10: 65 79 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20  ey, /* in */..  
0a20: 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
0a30: 56 65 72 73 69 6f 6e 2c 20 20 20 20 20 20 20 20  Version,        
0a40: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
0a50: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  /..        strin
0a60: 67 20 73 75 66 66 69 78 2c 20 20 20 20 20 20 20  g suffix,       
0a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0a80: 20 69 6e 2c 20 6f 70 74 69 6f 6e 61 6c 20 2a 2f   in, optional */
0a90: 0d 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c  ..        Instal
0aa0: 6c 65 72 2e 50 61 63 6b 61 67 65 20 70 61 63 6b  ler.Package pack
0ab0: 61 67 65 2c 20 20 20 20 20 20 20 20 20 2f 2a 20  age,         /* 
0ac0: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73  in */..        s
0ad0: 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c  tring directory,
0ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0af0: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0b00: 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e      object clien
0b10: 74 44 61 74 61 2c 20 20 20 20 20 20 20 20 20 20  tData,          
0b20: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
0b30: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65  .        bool pe
0b40: 72 55 73 65 72 2c 20 20 20 20 20 20 20 20 20 20  rUser,          
0b50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
0b60: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f  n */..        bo
0b70: 6f 6c 20 77 6f 77 36 34 2c 20 20 20 20 20 20 20  ol wow64,       
0b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b90: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
0ba0: 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
0bb0: 69 73 73 69 6e 67 2c 20 20 20 20 20 20 20 20 20  issing,         
0bc0: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
0bd0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
0be0: 74 49 66 2c 20 20 20 20 20 20 20 20 20 20 20 20  tIf,            
0bf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
0c00: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f   */..        boo
0c10: 6c 20 76 65 72 62 6f 73 65 2c 20 20 20 20 20 20  l verbose,      
0c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c30: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0c40: 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
0c50: 6f 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20  or              
0c60: 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a       /* out */..
0c70: 20 20 20 20 29 3b 0d 0a 20 20 20 20 23 65 6e 64      );..    #end
0c80: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
0c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
0ce0: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
0cf0: 45 6e 75 6d 65 72 61 74 69 6f 6e 73 0d 0a 20 20  Enumerations..  
0d00: 20 20 5b 46 6c 61 67 73 28 29 5d 0d 0a 20 20 20    [Flags()]..   
0d10: 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 49 6e 73   public enum Ins
0d20: 74 61 6c 6c 46 6c 61 67 73 0d 0a 20 20 20 20 7b  tallFlags..    {
0d30: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
0d40: 6e 20 4e 6f 72 6d 61 6c 20 56 61 6c 75 65 73 0d  n Normal Values.
0d50: 0a 20 20 20 20 20 20 20 20 4e 6f 6e 65 20 3d 20  .        None = 
0d60: 30 78 30 2c 0d 0a 20 20 20 20 20 20 20 20 43 6f  0x0,..        Co
0d70: 72 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  reGlobalAssembly
0d80: 43 61 63 68 65 20 3d 20 30 78 31 2c 0d 0a 20 20  Cache = 0x1,..  
0d90: 20 20 20 20 20 20 4c 69 6e 71 47 6c 6f 62 61 6c        LinqGlobal
0da0: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20  AssemblyCache = 
0db0: 30 78 32 2c 0d 0a 20 20 20 20 20 20 20 20 45 66  0x2,..        Ef
0dc0: 36 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  6GlobalAssemblyC
0dd0: 61 63 68 65 20 3d 20 30 78 34 2c 0d 0a 20 20 20  ache = 0x4,..   
0de0: 20 20 20 20 20 41 73 73 65 6d 62 6c 79 46 6f 6c       AssemblyFol
0df0: 64 65 72 73 20 3d 20 30 78 38 2c 0d 0a 20 20 20  ders = 0x8,..   
0e00: 20 20 20 20 20 44 62 50 72 6f 76 69 64 65 72 46       DbProviderF
0e10: 61 63 74 6f 72 79 20 3d 20 30 78 31 30 2c 0d 0a  actory = 0x10,..
0e20: 20 20 20 20 20 20 20 20 56 73 50 61 63 6b 61 67          VsPackag
0e30: 65 20 3d 20 30 78 32 30 2c 0d 0a 20 20 20 20 20  e = 0x20,..     
0e40: 20 20 20 56 73 50 61 63 6b 61 67 65 47 6c 6f 62     VsPackageGlob
0e50: 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20  alAssemblyCache 
0e60: 3d 20 30 78 34 30 2c 0d 0a 20 20 20 20 20 20 20  = 0x40,..       
0e70: 20 56 73 44 61 74 61 53 6f 75 72 63 65 20 3d 20   VsDataSource = 
0e80: 30 78 38 30 2c 0d 0a 20 20 20 20 20 20 20 20 56  0x80,..        V
0e90: 73 44 61 74 61 50 72 6f 76 69 64 65 72 20 3d 20  sDataProvider = 
0ea0: 30 78 31 30 30 2c 0d 0a 20 20 20 20 20 20 20 20  0x100,..        
0eb0: 56 73 44 65 76 45 6e 76 53 65 74 75 70 20 3d 20  VsDevEnvSetup = 
0ec0: 30 78 32 30 30 2c 0d 0a 20 20 20 20 20 20 20 20  0x200,..        
0ed0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
0ee0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
0ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
0f30: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
0f40: 20 43 6f 6d 70 6f 73 69 74 65 20 56 61 6c 75 65   Composite Value
0f50: 73 0d 0a 20 20 20 20 20 20 20 20 46 72 61 6d 65  s..        Frame
0f60: 77 6f 72 6b 47 6c 6f 62 61 6c 41 73 73 65 6d 62  workGlobalAssemb
0f70: 6c 79 43 61 63 68 65 20 3d 20 43 6f 72 65 47 6c  lyCache = CoreGl
0f80: 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68  obalAssemblyCach
0f90: 65 20 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e |..           
0fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fb0: 20 20 20 20 20 20 20 20 20 20 20 20 4c 69 6e 71              Linq
0fc0: 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
0fd0: 63 68 65 20 7c 0d 0a 20 20 20 20 20 20 20 20 20  che |..         
0fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 66                Ef
1000: 36 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  6GlobalAssemblyC
1010: 61 63 68 65 2c 0d 0a 0d 0a 20 20 20 20 20 20 20  ache,....       
1020: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1060: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1070: 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 20 3d 20      Framework = 
1080: 46 72 61 6d 65 77 6f 72 6b 47 6c 6f 62 61 6c 41  FrameworkGlobalA
1090: 73 73 65 6d 62 6c 79 43 61 63 68 65 20 7c 20 41  ssemblyCache | A
10a0: 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 20 7c  ssemblyFolders |
10b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10c0: 20 20 20 20 20 20 44 62 50 72 6f 76 69 64 65 72        DbProvider
10d0: 46 61 63 74 6f 72 79 2c 0d 0a 0d 0a 20 20 20 20  Factory,....    
10e0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
10f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1130: 20 20 20 20 20 20 20 56 73 20 3d 20 56 73 50 61         Vs = VsPa
1140: 63 6b 61 67 65 20 7c 20 56 73 50 61 63 6b 61 67  ckage | VsPackag
1150: 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  eGlobalAssemblyC
1160: 61 63 68 65 20 7c 20 56 73 44 61 74 61 53 6f 75  ache | VsDataSou
1170: 72 63 65 20 7c 0d 0a 20 20 20 20 20 20 20 20 20  rce |..         
1180: 20 20 20 20 56 73 44 61 74 61 50 72 6f 76 69 64      VsDataProvid
1190: 65 72 20 7c 20 56 73 44 65 76 45 6e 76 53 65 74  er | VsDevEnvSet
11a0: 75 70 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  up,....        /
11b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11f0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1200: 20 20 41 6c 6c 47 6c 6f 62 61 6c 41 73 73 65 6d    AllGlobalAssem
1210: 62 6c 79 43 61 63 68 65 20 3d 20 46 72 61 6d 65  blyCache = Frame
1220: 77 6f 72 6b 47 6c 6f 62 61 6c 41 73 73 65 6d 62  workGlobalAssemb
1230: 6c 79 43 61 63 68 65 20 7c 0d 0a 20 20 20 20 20  lyCache |..     
1240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1250: 20 20 20 20 20 20 20 20 20 20 20 20 56 73 50 61              VsPa
1260: 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d  ckageGlobalAssem
1270: 62 6c 79 43 61 63 68 65 2c 0d 0a 0d 0a 20 20 20  blyCache,....   
1280: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
12d0: 20 20 20 20 20 20 20 20 41 6c 6c 20 3d 20 46 72          All = Fr
12e0: 61 6d 65 77 6f 72 6b 20 7c 20 56 73 2c 0d 0a 0d  amework | Vs,...
12f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1340: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 41 6c 6c 45  ....        AllE
1350: 78 63 65 70 74 47 6c 6f 62 61 6c 41 73 73 65 6d  xceptGlobalAssem
1360: 62 6c 79 43 61 63 68 65 20 3d 20 41 6c 6c 20 26  blyCache = All &
1370: 20 7e 41 6c 6c 47 6c 6f 62 61 6c 41 73 73 65 6d   ~AllGlobalAssem
1380: 62 6c 79 43 61 63 68 65 2c 0d 0a 20 20 20 20 20  blyCache,..     
1390: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
13a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
13b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
1400: 69 6f 6e 20 53 75 67 67 65 73 74 65 64 20 44 65  ion Suggested De
1410: 66 61 75 6c 74 20 56 61 6c 75 65 73 0d 0a 20 20  fault Values..  
1420: 20 20 20 20 20 20 44 65 66 61 75 6c 74 20 3d 20        Default = 
1430: 41 6c 6c 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  All..        #en
1440: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a  dregion..    }..
1450: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
1460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14a0: 2f 0d 0a 0d 0a 20 20 20 20 5b 46 6c 61 67 73 28  /....    [Flags(
14b0: 29 5d 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 65  )]..    public e
14c0: 6e 75 6d 20 50 72 6f 76 69 64 65 72 46 6c 61 67  num ProviderFlag
14d0: 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  s..    {..      
14e0: 20 20 23 72 65 67 69 6f 6e 20 4e 6f 72 6d 61 6c    #region Normal
14f0: 20 56 61 6c 75 65 73 0d 0a 20 20 20 20 20 20 20   Values..       
1500: 20 4e 6f 6e 65 20 3d 20 30 78 30 2c 0d 0a 20 20   None = 0x0,..  
1510: 20 20 20 20 20 20 53 79 73 74 65 6d 45 66 36 4d        SystemEf6M
1520: 75 73 74 42 65 47 6c 6f 62 61 6c 20 3d 20 30 78  ustBeGlobal = 0x
1530: 31 2c 0d 0a 20 20 20 20 20 20 20 20 44 69 64 4c  1,..        DidL
1540: 69 6e 71 46 6f 72 63 65 54 72 61 63 65 20 3d 20  inqForceTrace = 
1550: 30 78 32 2c 0d 0a 20 20 20 20 20 20 20 20 44 69  0x2,..        Di
1560: 64 45 66 36 46 6f 72 63 65 54 72 61 63 65 20 3d  dEf6ForceTrace =
1570: 20 30 78 34 2c 0d 0a 20 20 20 20 20 20 20 20 44   0x4,..        D
1580: 69 64 45 66 36 52 65 73 6f 6c 76 65 54 72 61 63  idEf6ResolveTrac
1590: 65 20 3d 20 30 78 38 2c 0d 0a 20 20 20 20 20 20  e = 0x8,..      
15a0: 20 20 46 6f 72 63 65 4c 69 6e 71 45 6e 61 62 6c    ForceLinqEnabl
15b0: 65 64 20 3d 20 30 78 31 30 2c 0d 0a 20 20 20 20  ed = 0x10,..    
15c0: 20 20 20 20 46 6f 72 63 65 4c 69 6e 71 44 69 73      ForceLinqDis
15d0: 61 62 6c 65 64 20 3d 20 30 78 32 30 2c 0d 0a 20  abled = 0x20,.. 
15e0: 20 20 20 20 20 20 20 46 6f 72 63 65 45 66 36 45         ForceEf6E
15f0: 6e 61 62 6c 65 64 20 3d 20 30 78 34 30 2c 0d 0a  nabled = 0x40,..
1600: 20 20 20 20 20 20 20 20 46 6f 72 63 65 45 66 36          ForceEf6
1610: 44 69 73 61 62 6c 65 64 20 3d 20 30 78 38 30 2c  Disabled = 0x80,
1620: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
1630: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1680: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1690: 20 20 20 23 72 65 67 69 6f 6e 20 53 75 67 67 65     #region Sugge
16a0: 73 74 65 64 20 44 65 66 61 75 6c 74 20 56 61 6c  sted Default Val
16b0: 75 65 73 0d 0a 20 20 20 20 20 20 20 20 44 65 66  ues..        Def
16c0: 61 75 6c 74 20 3d 20 4e 6f 6e 65 0d 0a 20 20 20  ault = None..   
16d0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
16e0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
16f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1740: 20 5b 46 6c 61 67 73 28 29 5d 0d 0a 20 20 20 20   [Flags()]..    
1750: 70 75 62 6c 69 63 20 65 6e 75 6d 20 54 72 61 63  public enum Trac
1760: 65 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 7b  ePriority..    {
1770: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
1780: 6e 20 4e 6f 72 6d 61 6c 20 56 61 6c 75 65 73 0d  n Normal Values.
1790: 0a 20 20 20 20 20 20 20 20 4e 6f 6e 65 20 3d 20  .        None = 
17a0: 30 78 30 2c 0d 0a 20 20 20 20 20 20 20 20 4c 6f  0x0,..        Lo
17b0: 77 65 73 74 20 3d 20 30 78 31 2c 0d 0a 20 20 20  west = 0x1,..   
17c0: 20 20 20 20 20 4c 6f 77 65 72 20 3d 20 30 78 32       Lower = 0x2
17d0: 2c 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77 20 3d  ,..        Low =
17e0: 20 30 78 34 2c 0d 0a 20 20 20 20 20 20 20 20 4d   0x4,..        M
17f0: 65 64 69 75 6d 4c 6f 77 20 3d 20 30 78 38 2c 0d  ediumLow = 0x8,.
1800: 0a 20 20 20 20 20 20 20 20 4d 65 64 69 75 6d 20  .        Medium 
1810: 3d 20 30 78 31 30 2c 0d 0a 20 20 20 20 20 20 20  = 0x10,..       
1820: 20 4d 65 64 69 75 6d 48 69 67 68 20 3d 20 30 78   MediumHigh = 0x
1830: 32 30 2c 0d 0a 20 20 20 20 20 20 20 20 48 69 67  20,..        Hig
1840: 68 20 3d 20 30 78 34 30 2c 0d 0a 20 20 20 20 20  h = 0x40,..     
1850: 20 20 20 48 69 67 68 65 72 20 3d 20 30 78 38 30     Higher = 0x80
1860: 2c 0d 0a 20 20 20 20 20 20 20 20 48 69 67 68 65  ,..        Highe
1870: 73 74 20 3d 20 30 78 31 30 30 2c 0d 0a 20 20 20  st = 0x100,..   
1880: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
1890: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
18a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18e0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
18f0: 65 67 69 6f 6e 20 53 75 67 67 65 73 74 65 64 20  egion Suggested 
1900: 44 65 66 61 75 6c 74 20 46 6c 61 67 73 0d 0a 20  Default Flags.. 
1910: 20 20 20 20 20 20 20 44 65 66 61 75 6c 74 20 3d         Default =
1920: 20 4d 65 64 69 75 6d 0d 0a 20 20 20 20 20 20 20   Medium..       
1930: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
1940: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
1950: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
1960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
19b0: 67 69 6f 6e 20 49 6e 73 74 61 6c 6c 65 72 20 43  gion Installer C
19c0: 6c 61 73 73 0d 0a 23 69 66 20 4e 45 54 5f 34 30  lass..#if NET_40
19d0: 20 7c 7c 20 4e 45 54 5f 34 35 20 7c 7c 20 4e 45   || NET_45 || NE
19e0: 54 5f 34 35 31 20 7c 7c 20 4e 45 54 5f 34 35 32  T_451 || NET_452
19f0: 20 7c 7c 20 4e 45 54 5f 34 36 20 7c 7c 20 4e 45   || NET_46 || NE
1a00: 54 5f 34 36 31 20 7c 7c 20 4e 45 54 5f 34 36 32  T_461 || NET_462
1a10: 20 7c 7c 20 4e 45 54 5f 34 37 20 7c 7c 20 4e 45   || NET_47 || NE
1a20: 54 5f 34 37 31 0d 0a 20 20 20 20 5b 53 65 63 75  T_471..    [Secu
1a30: 72 69 74 79 43 72 69 74 69 63 61 6c 28 29 5d 0d  rityCritical()].
1a40: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 5b 53 65 63  .#else..    [Sec
1a50: 75 72 69 74 79 50 65 72 6d 69 73 73 69 6f 6e 28  urityPermission(
1a60: 53 65 63 75 72 69 74 79 41 63 74 69 6f 6e 2e 4c  SecurityAction.L
1a70: 69 6e 6b 44 65 6d 61 6e 64 2c 20 55 6e 6d 61 6e  inkDemand, Unman
1a80: 61 67 65 64 43 6f 64 65 20 3d 20 74 72 75 65 29  agedCode = true)
1a90: 5d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 69  ]..#endif..    i
1aa0: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 63  nternal static c
1ab0: 6c 61 73 73 20 49 6e 73 74 61 6c 6c 65 72 0d 0a  lass Installer..
1ac0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23      {..        #
1ad0: 72 65 67 69 6f 6e 20 55 6e 73 61 66 65 20 4e 61  region Unsafe Na
1ae0: 74 69 76 65 20 4d 65 74 68 6f 64 73 20 43 6c 61  tive Methods Cla
1af0: 73 73 0d 0a 20 20 20 20 20 20 20 20 5b 53 75 70  ss..        [Sup
1b00: 70 72 65 73 73 55 6e 6d 61 6e 61 67 65 64 43 6f  pressUnmanagedCo
1b10: 64 65 53 65 63 75 72 69 74 79 28 29 5d 0d 0a 20  deSecurity()].. 
1b20: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1b30: 65 61 6c 65 64 20 63 6c 61 73 73 20 55 6e 73 61  ealed class Unsa
1b40: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 0d  feNativeMethods.
1b50: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
1b60: 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20 20  WINDOWS..       
1b70: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 61 74       #region Nat
1b80: 69 76 65 20 57 69 6e 33 32 20 43 6f 6e 73 74 61  ive Win32 Consta
1b90: 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nts..           
1ba0: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69   private const i
1bb0: 6e 74 20 4d 41 58 5f 50 41 54 48 20 3d 20 32 36  nt MAX_PATH = 26
1bc0: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
1bd0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c10: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1c20: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
1c30: 73 74 20 69 6e 74 20 43 53 49 44 4c 5f 53 59 53  st int CSIDL_SYS
1c40: 54 45 4d 58 38 36 20 3d 20 30 78 30 30 32 39 3b  TEMX86 = 0x0029;
1c50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1cb0: 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
1cc0: 20 69 6e 74 20 53 48 47 46 50 5f 54 59 50 45 5f   int SHGFP_TYPE_
1cd0: 43 55 52 52 45 4e 54 20 3d 20 30 3b 0d 0a 0d 0a  CURRENT = 0;....
1ce0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1d30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1d40: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74  rivate const int
1d50: 20 53 5f 4f 4b 20 3d 20 30 3b 20 2f 2a 20 48 52   S_OK = 0; /* HR
1d60: 45 53 55 4c 54 20 2a 2f 0d 0a 20 20 20 20 20 20  ESULT */..      
1d70: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1d80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1de0: 20 20 20 23 72 65 67 69 6f 6e 20 4e 61 74 69 76     #region Nativ
1df0: 65 20 57 69 6e 64 6f 77 73 20 4d 65 74 68 6f 64  e Windows Method
1e00: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  s..            [
1e10: 44 6c 6c 49 6d 70 6f 72 74 28 22 73 68 66 6f 6c  DllImport("shfol
1e20: 64 65 72 2e 64 6c 6c 22 2c 0d 0a 20 20 20 20 20  der.dll",..     
1e30: 20 20 20 20 20 20 20 20 20 20 20 43 61 6c 6c 69             Calli
1e40: 6e 67 43 6f 6e 76 65 6e 74 69 6f 6e 20 3d 20 43  ngConvention = C
1e50: 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69 6f 6e  allingConvention
1e60: 2e 57 69 6e 61 70 69 2c 0d 0a 20 20 20 20 20 20  .Winapi,..      
1e70: 20 20 20 20 20 20 20 20 20 20 43 68 61 72 53 65            CharSe
1e80: 74 20 3d 20 43 68 61 72 53 65 74 2e 41 75 74 6f  t = CharSet.Auto
1e90: 2c 20 42 65 73 74 46 69 74 4d 61 70 70 69 6e 67  , BestFitMapping
1ea0: 20 3d 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20   = false,..     
1eb0: 20 20 20 20 20 20 20 20 20 20 20 54 68 72 6f 77             Throw
1ec0: 4f 6e 55 6e 6d 61 70 70 61 62 6c 65 43 68 61 72  OnUnmappableChar
1ed0: 20 3d 20 74 72 75 65 2c 20 53 65 74 4c 61 73 74   = true, SetLast
1ee0: 45 72 72 6f 72 20 3d 20 74 72 75 65 29 5d 0d 0a  Error = true)]..
1ef0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1f00: 61 74 65 20 73 74 61 74 69 63 20 65 78 74 65 72  ate static exter
1f10: 6e 20 69 6e 74 20 53 48 47 65 74 46 6f 6c 64 65  n int SHGetFolde
1f20: 72 50 61 74 68 28 0d 0a 20 20 20 20 20 20 20 20  rPath(..        
1f30: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
1f40: 57 6e 64 4f 77 6e 65 72 2c 20 69 6e 74 20 6e 46  WndOwner, int nF
1f50: 6f 6c 64 65 72 2c 20 49 6e 74 50 74 72 20 68 54  older, IntPtr hT
1f60: 6f 6b 65 6e 2c 20 75 69 6e 74 20 66 6c 61 67 73  oken, uint flags
1f70: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1f80: 20 20 20 49 6e 74 50 74 72 20 62 75 66 66 65 72     IntPtr buffer
1f90: 20 2f 2a 20 3e 3d 20 4d 41 58 5f 50 41 54 48 20   /* >= MAX_PATH 
1fa0: 2a 2f 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  */);..          
1fb0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1fc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2010: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
2020: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 57 72  region Public Wr
2030: 61 70 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20  apper Methods.. 
2040: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2050: 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  c static string 
2060: 47 65 74 53 79 73 74 65 6d 44 69 72 65 63 74 6f  GetSystemDirecto
2070: 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry()..          
2080: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2090: 20 20 20 20 20 49 6e 74 50 74 72 20 62 75 66 66       IntPtr buff
20a0: 65 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  er = IntPtr.Zero
20b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
20c0: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
20d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
20e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f0: 20 62 75 66 66 65 72 20 3d 20 4d 61 72 73 68 61   buffer = Marsha
2100: 6c 2e 41 6c 6c 6f 63 43 6f 54 61 73 6b 4d 65 6d  l.AllocCoTaskMem
2110: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2120: 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f             sizeo
2130: 66 28 63 68 61 72 29 20 2a 20 28 4d 41 58 5f 50  f(char) * (MAX_P
2140: 41 54 48 20 2b 20 31 29 29 3b 0d 0a 0d 0a 20 20  ATH + 1));....  
2150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2160: 20 20 69 66 20 28 62 75 66 66 65 72 20 21 3d 20    if (buffer != 
2170: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
2180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2190: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
21b0: 28 53 48 47 65 74 46 6f 6c 64 65 72 50 61 74 68  (SHGetFolderPath
21c0: 28 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20  (IntPtr.Zero,.. 
21d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
21f0: 53 49 44 4c 5f 53 59 53 54 45 4d 58 38 36 2c 20  SIDL_SYSTEMX86, 
2200: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20  IntPtr.Zero,..  
2210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 48                SH
2230: 47 46 50 5f 54 59 50 45 5f 43 55 52 52 45 4e 54  GFP_TYPE_CURRENT
2240: 2c 20 62 75 66 66 65 72 29 20 3d 3d 20 53 5f 4f  , buffer) == S_O
2250: 4b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  K)..            
2260: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2280: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2290: 6e 20 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53  n Marshal.PtrToS
22a0: 74 72 69 6e 67 41 75 74 6f 28 62 75 66 66 65 72  tringAuto(buffer
22b0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
22c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
22d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
22f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2300: 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
2310: 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
2320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2340: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2350: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2360: 54 4f 44 4f 3a 20 49 73 20 74 68 69 73 20 74 68  TODO: Is this th
2370: 65 20 72 69 67 68 74 20 65 72 72 6f 72 20 68 61  e right error ha
2380: 6e 64 6c 69 6e 67 20 73 6f 6c 75 74 69 6f 6e 0d  ndling solution.
2390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23a0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f       //       to
23b0: 20 75 73 65 20 61 74 20 74 68 69 73 20 70 6f 69   use at this poi
23c0: 6e 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt?..           
23d0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
23e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f0: 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
2400: 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
2410: 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68  ority.MediumHigh
2420: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2430: 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
2440: 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
2450: 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
2460: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2480: 20 22 43 6f 75 6c 64 20 6e 6f 74 20 67 65 74 20   "Could not get 
2490: 73 79 73 74 65 6d 20 64 69 72 65 63 74 6f 72 79  system directory
24a0: 3a 20 7b 30 7d 22 2c 20 65 29 2c 0d 0a 20 20 20  : {0}", e),..   
24b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c0: 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
24d0: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
24e0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
24f0: 77 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w;..            
2500: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2510: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
2520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2530: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2540: 20 20 20 20 20 20 20 69 66 20 28 62 75 66 66 65         if (buffe
2550: 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r != IntPtr.Zero
2560: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2570: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2590: 20 20 4d 61 72 73 68 61 6c 2e 46 72 65 65 43 6f    Marshal.FreeCo
25a0: 54 61 73 6b 4d 65 6d 28 62 75 66 66 65 72 29 3b  TaskMem(buffer);
25b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25c0: 20 20 20 20 20 20 20 20 20 20 62 75 66 66 65 72            buffer
25d0: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
25e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2600: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2610: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2620: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
2630: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2640: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2650: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
2660: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
2670: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2680: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
26d0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
26e0: 69 76 61 74 65 20 48 65 6c 70 65 72 20 43 6c 61  ivate Helper Cla
26f0: 73 73 65 73 0d 0a 20 20 20 20 20 20 20 20 23 72  sses..        #r
2700: 65 67 69 6f 6e 20 41 6e 79 50 61 69 72 20 43 6c  egion AnyPair Cl
2710: 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ass..        pri
2720: 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73  vate sealed clas
2730: 73 20 41 6e 79 50 61 69 72 3c 54 31 2c 20 54 32  s AnyPair<T1, T2
2740: 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  >..        {..  
2750: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
2760: 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75  n Public Constru
2770: 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20  ctors..         
2780: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2790: 20 20 20 2f 2f 20 57 41 52 4e 49 4e 47 3a 20 54     // WARNING: T
27a0: 68 69 73 20 63 6f 6e 73 74 72 75 63 74 6f 72 20  his constructor 
27b0: 70 72 6f 64 75 63 65 73 20 61 6e 20 69 6d 6d 75  produces an immu
27c0: 74 61 62 6c 65 20 22 65 6d 70 74 79 22 20 70 61  table "empty" pa
27d0: 69 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ir..            
27e0: 2f 2f 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  //          obje
27f0: 63 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct...           
2800: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2810: 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69 72 28   public AnyPair(
2820: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2830: 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20 20 20     : base()..   
2840: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2850: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
2860: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
2870: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2880: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
28d0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
28e0: 69 63 20 41 6e 79 50 61 69 72 28 54 31 20 78 29  ic AnyPair(T1 x)
28f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2900: 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20    : this()..    
2910: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2920: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
2930: 78 20 3d 20 78 3b 0d 0a 20 20 20 20 20 20 20 20  x = x;..        
2940: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2950: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2990: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
29a0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41          public A
29b0: 6e 79 50 61 69 72 28 54 31 20 78 2c 20 54 32 20  nyPair(T1 x, T2 
29c0: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
29d0: 20 20 20 20 3a 20 74 68 69 73 28 78 29 0d 0a 20      : this(x).. 
29e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
2a00: 69 73 2e 79 20 3d 20 79 3b 0d 0a 20 20 20 20 20  is.y = y;..     
2a10: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2a20: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2a30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a80: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2a90: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
2aa0: 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
2ab0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2ac0: 65 20 54 31 20 78 3b 0d 0a 20 20 20 20 20 20 20  e T1 x;..       
2ad0: 20 20 20 20 20 70 75 62 6c 69 63 20 54 31 20 58       public T1 X
2ae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2af0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b00: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 78 3b   get { return x;
2b10: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2b20: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2b30: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b70: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2b80: 20 20 20 20 70 72 69 76 61 74 65 20 54 32 20 79      private T2 y
2b90: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
2ba0: 75 62 6c 69 63 20 54 32 20 59 0d 0a 20 20 20 20  ublic T2 Y..    
2bb0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2bc0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
2bd0: 20 72 65 74 75 72 6e 20 79 3b 20 7d 0d 0a 20 20   return y; }..  
2be0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2bf0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
2c00: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
2c10: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2c20: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
2c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c70: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2c80: 20 23 72 65 67 69 6f 6e 20 54 72 61 63 65 4f 70   #region TraceOp
2c90: 73 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  s Class..       
2ca0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2cb0: 63 6c 61 73 73 20 54 72 61 63 65 4f 70 73 0d 0a  class TraceOps..
2cc0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2cd0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
2ce0: 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73  rivate Constants
2cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
2d00: 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
2d10: 6e 67 20 44 65 66 61 75 6c 74 44 65 62 75 67 46  ng DefaultDebugF
2d20: 6f 72 6d 61 74 20 3d 20 22 23 7b 30 3a 30 30 30  ormat = "#{0:000
2d30: 7d 20 40 20 7b 31 7d 3a 20 7b 32 7d 22 3b 0d 0a  } @ {1}: {2}";..
2d40: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
2d50: 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
2d60: 20 44 65 66 61 75 6c 74 54 72 61 63 65 46 6f 72   DefaultTraceFor
2d70: 6d 61 74 20 3d 20 22 23 7b 30 3a 30 30 30 7d 20  mat = "#{0:000} 
2d80: 40 20 7b 31 7d 3a 20 7b 32 7d 22 3b 0d 0a 0d 0a  @ {1}: {2}";....
2d90: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
2da0: 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
2db0: 20 49 73 6f 38 36 30 31 44 61 74 65 54 69 6d 65   Iso8601DateTime
2dc0: 4f 75 74 70 75 74 46 6f 72 6d 61 74 20 3d 0d 0a  OutputFormat =..
2dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de0: 22 79 79 79 79 2e 4d 4d 2e 64 64 54 48 48 3a 6d  "yyyy.MM.ddTHH:m
2df0: 6d 3a 73 73 2e 66 66 66 66 66 66 66 22 3b 0d 0a  m:ss.fffffff";..
2e00: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
2e10: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
2e20: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2e70: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
2e80: 20 50 72 69 76 61 74 65 20 53 74 61 74 69 63 20   Private Static 
2e90: 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20  Data..          
2ea0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2eb0: 20 6f 62 6a 65 63 74 20 73 79 6e 63 52 6f 6f 74   object syncRoot
2ec0: 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74 28 29 3b   = new object();
2ed0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
2ee0: 69 76 61 74 65 20 73 74 61 74 69 63 20 6c 6f 6e  ivate static lon
2ef0: 67 20 6e 65 78 74 44 65 62 75 67 49 64 3b 0d 0a  g nextDebugId;..
2f00: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
2f10: 61 74 65 20 73 74 61 74 69 63 20 6c 6f 6e 67 20  ate static long 
2f20: 6e 65 78 74 54 72 61 63 65 49 64 3b 0d 0a 20 20  nextTraceId;..  
2f30: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2f40: 65 20 73 74 61 74 69 63 20 49 4c 69 73 74 3c 54  e static IList<T
2f50: 72 61 63 65 4c 69 73 74 65 6e 65 72 3e 20 64 65  raceListener> de
2f60: 62 75 67 4c 69 73 74 65 6e 65 72 73 3b 0d 0a 20  bugListeners;.. 
2f70: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
2f80: 74 65 20 73 74 61 74 69 63 20 54 72 61 63 65 50  te static TraceP
2f90: 72 69 6f 72 69 74 79 20 64 65 62 75 67 50 72 69  riority debugPri
2fa0: 6f 72 69 74 79 20 3d 20 54 72 61 63 65 50 72 69  ority = TracePri
2fb0: 6f 72 69 74 79 2e 44 65 66 61 75 6c 74 3b 0d 0a  ority.Default;..
2fc0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
2fd0: 61 74 65 20 73 74 61 74 69 63 20 54 72 61 63 65  ate static Trace
2fe0: 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72  Priority tracePr
2ff0: 69 6f 72 69 74 79 20 3d 20 54 72 61 63 65 50 72  iority = TracePr
3000: 69 6f 72 69 74 79 2e 44 65 66 61 75 6c 74 3b 0d  iority.Default;.
3010: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
3020: 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
3030: 6e 67 20 64 65 62 75 67 46 6f 72 6d 61 74 20 3d  ng debugFormat =
3040: 20 44 65 66 61 75 6c 74 44 65 62 75 67 46 6f 72   DefaultDebugFor
3050: 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mat;..          
3060: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
3070: 20 73 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72   string traceFor
3080: 6d 61 74 20 3d 20 44 65 66 61 75 6c 74 54 72 61  mat = DefaultTra
3090: 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20  ceFormat;..     
30a0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
30b0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
30c0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
30d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3100: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
3110: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
3120: 69 63 20 53 74 61 74 69 63 20 50 72 6f 70 65 72  ic Static Proper
3130: 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ties..          
3140: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
3150: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 44 65  TracePriority De
3160: 62 75 67 50 72 69 6f 72 69 74 79 0d 0a 20 20 20  bugPriority..   
3170: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3180: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
3190: 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74  { lock (syncRoot
31a0: 29 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67  ) { return debug
31b0: 50 72 69 6f 72 69 74 79 3b 20 7d 20 7d 0d 0a 20  Priority; } }.. 
31c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
31d0: 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52  et { lock (syncR
31e0: 6f 6f 74 29 20 7b 20 64 65 62 75 67 50 72 69 6f  oot) { debugPrio
31f0: 72 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 20  rity = value; } 
3200: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
3210: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3260: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
3270: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
3280: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 54   TracePriority T
3290: 72 61 63 65 50 72 69 6f 72 69 74 79 0d 0a 20 20  racePriority..  
32a0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
32b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
32c0: 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f   { lock (syncRoo
32d0: 74 29 20 7b 20 72 65 74 75 72 6e 20 74 72 61 63  t) { return trac
32e0: 65 50 72 69 6f 72 69 74 79 3b 20 7d 20 7d 0d 0a  ePriority; } }..
32f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3300: 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63  set { lock (sync
3310: 52 6f 6f 74 29 20 7b 20 74 72 61 63 65 50 72 69  Root) { tracePri
3320: 6f 72 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d  ority = value; }
3330: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
3340: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
3350: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3390: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
33a0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
33b0: 63 20 73 74 72 69 6e 67 20 44 65 62 75 67 46 6f  c string DebugFo
33c0: 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20  rmat..          
33d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
33e0: 20 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20       get { lock 
33f0: 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74  (syncRoot) { ret
3400: 75 72 6e 20 64 65 62 75 67 46 6f 72 6d 61 74 3b  urn debugFormat;
3410: 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20   } }..          
3420: 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b        set { lock
3430: 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 64 65   (syncRoot) { de
3440: 62 75 67 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75  bugFormat = valu
3450: 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20  e; } }..        
3460: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
3470: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
3480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
34c0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
34d0: 74 61 74 69 63 20 73 74 72 69 6e 67 20 54 72 61  tatic string Tra
34e0: 63 65 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20  ceFormat..      
34f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3500: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 6c           get { l
3510: 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b  ock (syncRoot) {
3520: 20 72 65 74 75 72 6e 20 74 72 61 63 65 46 6f 72   return traceFor
3530: 6d 61 74 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20  mat; } }..      
3540: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
3550: 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20  lock (syncRoot) 
3560: 7b 20 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20  { traceFormat = 
3570: 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20  value; } }..    
3580: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3590: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
35a0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
35b0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
35c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35f0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
3600: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 74 65      #region Inte
3610: 72 61 63 74 69 76 65 20 53 75 70 70 6f 72 74 20  ractive Support 
3620: 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
3630: 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
3640: 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
3650: 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
3660: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
3670: 6c 69 63 20 73 74 61 74 69 63 20 44 69 61 6c 6f  lic static Dialo
3680: 67 52 65 73 75 6c 74 20 53 68 6f 77 4d 65 73 73  gResult ShowMess
3690: 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  age(..          
36a0: 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
36b0: 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74  ity tracePriorit
36c0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
36d0: 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63      TraceCallbac
36e0: 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  k debugCallback,
36f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3700: 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20    TraceCallback 
3710: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a  traceCallback,..
3720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3730: 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c  Assembly assembl
3740: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
3750: 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
3760: 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
3770: 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
3780: 67 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  gory,..         
3790: 20 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f         MessageBo
37a0: 78 42 75 74 74 6f 6e 73 20 62 75 74 74 6f 6e 73  xButtons buttons
37b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
37c0: 20 20 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f     MessageBoxIco
37d0: 6e 20 69 63 6f 6e 0d 0a 20 20 20 20 20 20 20 20  n icon..        
37e0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
37f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3800: 20 20 20 20 20 20 20 20 20 20 44 69 61 6c 6f 67            Dialog
3810: 52 65 73 75 6c 74 20 72 65 73 75 6c 74 20 3d 20  Result result = 
3820: 44 69 61 6c 6f 67 52 65 73 75 6c 74 2e 4f 4b 3b  DialogResult.OK;
3830: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3840: 20 20 20 20 44 65 62 75 67 41 6e 64 54 72 61 63      DebugAndTrac
3850: 65 28 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c  e(tracePriority,
3860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3870: 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
3880: 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
3890: 63 6b 2c 20 6d 65 73 73 61 67 65 2c 20 63 61 74  ck, message, cat
38a0: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
38b0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
38c0: 79 73 74 65 6d 49 6e 66 6f 72 6d 61 74 69 6f 6e  ystemInformation
38d0: 2e 55 73 65 72 49 6e 74 65 72 61 63 74 69 76 65  .UserInteractive
38e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
38f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3900: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
3910: 20 74 69 74 6c 65 20 3d 20 47 65 74 41 73 73 65   title = GetAsse
3920: 6d 62 6c 79 54 69 74 6c 65 28 61 73 73 65 6d 62  mblyTitle(assemb
3930: 6c 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ly);....        
3940: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3950: 74 69 74 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  title == null)..
3960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3970: 20 20 20 20 20 20 20 20 74 69 74 6c 65 20 3d 20          title = 
3980: 41 70 70 6c 69 63 61 74 69 6f 6e 2e 50 72 6f 64  Application.Prod
3990: 75 63 74 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  uctName;....    
39a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
39b0: 72 65 73 75 6c 74 20 3d 20 4d 65 73 73 61 67 65  result = Message
39c0: 42 6f 78 2e 53 68 6f 77 28 6d 65 73 73 61 67 65  Box.Show(message
39d0: 2c 20 74 69 74 6c 65 2c 20 62 75 74 74 6f 6e 73  , title, buttons
39e0: 2c 20 69 63 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20  , icon);....    
39f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a00: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 74 72  DebugAndTrace(tr
3a10: 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20  acePriority,..  
3a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a30: 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
3a40: 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
3a50: 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
3a60: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
3a70: 20 20 20 20 20 20 20 20 20 20 20 20 22 55 73 65              "Use
3a80: 72 20 63 68 6f 69 63 65 20 6f 66 20 7b 30 7d 2e  r choice of {0}.
3a90: 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65  ", ForDisplay(re
3aa0: 73 75 6c 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  sult)),..       
3ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ac0: 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20   category);.... 
3ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ae0: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
3af0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3b00: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3b10: 20 20 20 20 20 20 20 20 44 65 62 75 67 41 6e 64          DebugAnd
3b20: 54 72 61 63 65 28 74 72 61 63 65 50 72 69 6f 72  Trace(tracePrior
3b30: 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ity,..          
3b40: 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
3b50: 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
3b60: 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
3b70: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
3b80: 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65 66              "Def
3b90: 61 75 6c 74 20 63 68 6f 69 63 65 20 6f 66 20 7b  ault choice of {
3ba0: 30 7d 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  0}.", ForDisplay
3bb0: 28 72 65 73 75 6c 74 29 29 2c 0d 0a 20 20 20 20  (result)),..    
3bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3bd0: 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  category);....  
3be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
3bf0: 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
3c00: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
3c10: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
3c20: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
3c30: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
3c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c70: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
3c80: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54 72        #region Tr
3c90: 61 63 69 6e 67 20 53 75 70 70 6f 72 74 20 4d 65  acing Support Me
3ca0: 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20  thods..         
3cb0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
3cc0: 20 76 6f 69 64 20 53 65 74 75 70 44 65 62 75 67   void SetupDebug
3cd0: 4c 69 73 74 65 6e 65 72 73 28 29 0d 0a 20 20 20  Listeners()..   
3ce0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3cf0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3d00: 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73 20 3d  debugListeners =
3d10: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
3d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
3d30: 75 67 4c 69 73 74 65 6e 65 72 73 20 3d 20 6e 65  ugListeners = ne
3d40: 77 20 4c 69 73 74 3c 54 72 61 63 65 4c 69 73 74  w List<TraceList
3d50: 65 6e 65 72 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20  ener>();....    
3d60: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
3d70: 67 4c 69 73 74 65 6e 65 72 73 2e 41 64 64 28 6e  gListeners.Add(n
3d80: 65 77 20 43 6f 6e 73 6f 6c 65 54 72 61 63 65 4c  ew ConsoleTraceL
3d90: 69 73 74 65 6e 65 72 28 29 29 3b 0d 0a 20 20 20  istener());..   
3da0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
3db0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
3dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
3e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
3e10: 6c 69 63 20 73 74 61 74 69 63 20 6c 6f 6e 67 20  lic static long 
3e20: 4e 65 78 74 44 65 62 75 67 49 64 28 29 0d 0a 20  NextDebugId().. 
3e30: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
3e50: 74 75 72 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64  turn Interlocked
3e60: 2e 49 6e 63 72 65 6d 65 6e 74 28 72 65 66 20 6e  .Increment(ref n
3e70: 65 78 74 44 65 62 75 67 49 64 29 3b 0d 0a 20 20  extDebugId);..  
3e80: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
3e90: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
3ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
3ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
3ef0: 62 6c 69 63 20 73 74 61 74 69 63 20 6c 6f 6e 67  blic static long
3f00: 20 4e 65 78 74 54 72 61 63 65 49 64 28 29 0d 0a   NextTraceId()..
3f10: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
3f30: 65 74 75 72 6e 20 49 6e 74 65 72 6c 6f 63 6b 65  eturn Interlocke
3f40: 64 2e 49 6e 63 72 65 6d 65 6e 74 28 72 65 66 20  d.Increment(ref 
3f50: 6e 65 78 74 54 72 61 63 65 49 64 29 3b 0d 0a 20  nextTraceId);.. 
3f60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
3f70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
3f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3fc0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
3fd0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
3fe0: 69 6e 67 20 54 69 6d 65 53 74 61 6d 70 28 44 61  ing TimeStamp(Da
3ff0: 74 65 54 69 6d 65 20 64 61 74 65 54 69 6d 65 29  teTime dateTime)
4000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
4010: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4020: 20 72 65 74 75 72 6e 20 64 61 74 65 54 69 6d 65   return dateTime
4030: 2e 54 6f 53 74 72 69 6e 67 28 49 73 6f 38 36 30  .ToString(Iso860
4040: 31 44 61 74 65 54 69 6d 65 4f 75 74 70 75 74 46  1DateTimeOutputF
4050: 6f 72 6d 61 74 29 3b 0d 0a 20 20 20 20 20 20 20  ormat);..       
4060: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4070: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
4080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
40a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
40b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
40c0: 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64           [Method
40d0: 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
40e0: 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
40f0: 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g)]..           
4100: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
4110: 74 72 69 6e 67 20 47 65 74 4d 65 74 68 6f 64 4e  tring GetMethodN
4120: 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
4130: 20 20 20 20 20 20 53 74 61 63 6b 54 72 61 63 65        StackTrace
4140: 20 73 74 61 63 6b 54 72 61 63 65 2c 0d 0a 20 20   stackTrace,..  
4150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
4160: 74 20 6c 65 76 65 6c 0d 0a 20 20 20 20 20 20 20  t level..       
4170: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
4180: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4190: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
41a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
41b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
41c0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
41d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
41e0: 2f 20 4e 4f 54 45 3a 20 49 66 20 61 20 76 61 6c  / NOTE: If a val
41f0: 69 64 20 73 74 61 63 6b 20 74 72 61 63 65 20 77  id stack trace w
4200: 61 73 20 6e 6f 74 20 73 75 70 70 6c 69 65 64 20  as not supplied 
4210: 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  by the..        
4220: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
4230: 20 20 20 20 20 63 61 6c 6c 65 72 2c 20 63 72 65       caller, cre
4240: 61 74 65 20 6f 6e 65 20 6e 6f 77 20 62 61 73 65  ate one now base
4250: 64 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74  d on the current
4260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4270: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65        //       e
4280: 78 65 63 75 74 69 6f 6e 20 73 74 61 63 6b 2e 0d  xecution stack..
4290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
42a0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
42b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
42c0: 28 73 74 61 63 6b 54 72 61 63 65 20 3d 3d 20 6e  (stackTrace == n
42d0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
42e0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
42f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4300: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
4310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4320: 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74   // NOTE: Grab t
4330: 68 65 20 63 75 72 72 65 6e 74 20 65 78 65 63 75  he current execu
4340: 74 69 6f 6e 20 73 74 61 63 6b 2e 0d 0a 20 20 20  tion stack...   
4350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4360: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
4370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4380: 20 73 74 61 63 6b 54 72 61 63 65 20 3d 20 6e 65   stackTrace = ne
4390: 77 20 53 74 61 63 6b 54 72 61 63 65 28 29 3b 0d  w StackTrace();.
43a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
43b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
43c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43d0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
43e0: 41 6c 77 61 79 73 20 73 6b 69 70 20 74 68 69 73  Always skip this
43f0: 20 63 61 6c 6c 20 66 72 61 6d 65 20 77 68 65 6e   call frame when
4400: 20 77 65 20 63 61 70 74 75 72 65 0d 0a 20 20 20   we capture..   
4410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4420: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
4430: 65 20 73 74 61 63 6b 20 74 72 61 63 65 2e 0d 0a  e stack trace...
4440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4450: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
4460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4470: 20 20 20 20 6c 65 76 65 6c 2b 2b 3b 0d 0a 20 20      level++;..  
4480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4490: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
44a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
44b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44c0: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20     // NOTE: Get 
44d0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 73 74  the specified st
44e0: 61 63 6b 20 66 72 61 6d 65 20 28 61 6c 77 61 79  ack frame (alway
44f0: 73 20 61 64 64 20 6f 6e 65 20 74 6f 0d 0a 20 20  s add one to..  
4500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4510: 20 20 2f 2f 20 20 20 20 20 20 20 73 6b 69 70 20    //       skip 
4520: 74 68 69 73 20 6d 65 74 68 6f 64 29 2e 0d 0a 20  this method)... 
4530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4540: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
4550: 20 20 20 20 20 20 20 20 20 20 20 53 74 61 63 6b             Stack
4560: 46 72 61 6d 65 20 73 74 61 63 6b 46 72 61 6d 65  Frame stackFrame
4570: 20 3d 20 73 74 61 63 6b 54 72 61 63 65 2e 47 65   = stackTrace.Ge
4580: 74 46 72 61 6d 65 28 6c 65 76 65 6c 29 3b 0d 0a  tFrame(level);..
4590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
45a0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
45b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
45c0: 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20 6d   NOTE: Get the m
45d0: 65 74 68 6f 64 20 66 6f 72 20 74 68 65 20 73 74  ethod for the st
45e0: 61 63 6b 20 66 72 61 6d 65 2e 0d 0a 20 20 20 20  ack frame...    
45f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4600: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
4610: 20 20 20 20 20 20 20 20 4d 65 74 68 6f 64 42 61          MethodBa
4620: 73 65 20 6d 65 74 68 6f 64 42 61 73 65 20 3d 20  se methodBase = 
4630: 73 74 61 63 6b 46 72 61 6d 65 2e 47 65 74 4d 65  stackFrame.GetMe
4640: 74 68 6f 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  thod();....     
4650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4660: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
4670: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
4680: 47 65 74 20 74 68 65 20 74 79 70 65 20 66 6f 72  Get the type for
4690: 20 74 68 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20   the method...  
46a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46b0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
46c0: 20 20 20 20 20 20 20 20 20 20 54 79 70 65 20 74            Type t
46d0: 79 70 65 20 3d 20 6d 65 74 68 6f 64 42 61 73 65  ype = methodBase
46e0: 2e 44 65 63 6c 61 72 69 6e 67 54 79 70 65 3b 0d  .DeclaringType;.
46f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4700: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4720: 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20  / NOTE: Get the 
4730: 6e 61 6d 65 20 6f 66 20 74 68 65 20 6d 65 74 68  name of the meth
4740: 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
4750: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
4760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4770: 20 73 74 72 69 6e 67 20 6e 61 6d 65 20 3d 20 6d   string name = m
4780: 65 74 68 6f 64 42 61 73 65 2e 4e 61 6d 65 3b 0d  ethodBase.Name;.
4790: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
47a0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
47b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
47c0: 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74  / NOTE: Return t
47d0: 68 65 20 70 72 6f 70 65 72 6c 79 20 66 6f 72 6d  he properly form
47e0: 61 74 74 65 64 20 72 65 73 75 6c 74 2e 0d 0a 20  atted result... 
47f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4800: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
4810: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
4820: 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  n String.Format(
4830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4840: 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 7b 31            "{0}{1
4850: 7d 7b 32 7d 22 2c 20 74 79 70 65 2e 4e 61 6d 65  }{2}", type.Name
4860: 2c 20 54 79 70 65 2e 44 65 6c 69 6d 69 74 65 72  , Type.Delimiter
4870: 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  , name);..      
4880: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
4890: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
48a0: 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch..            
48b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
48c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
48d0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
48e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
48f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4900: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
4910: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
4920: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
4930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
4970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
4980: 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
4990: 20 44 65 62 75 67 43 6f 72 65 28 0d 0a 20 20 20   DebugCore(..   
49a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
49b0: 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20  ing message,..  
49c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
49d0: 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20  ring category.. 
49e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
49f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
4a00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4a10: 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
4a20: 20 2f 2a 20 54 52 41 4e 53 41 43 54 49 4f 4e 41   /* TRANSACTIONA
4a30: 4c 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  L */..          
4a40: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
4a60: 28 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73 20  (debugListeners 
4a70: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
4a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
4a90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4aa0: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
4ab0: 20 28 54 72 61 63 65 4c 69 73 74 65 6e 65 72 20   (TraceListener 
4ac0: 6c 69 73 74 65 6e 65 72 20 69 6e 20 64 65 62 75  listener in debu
4ad0: 67 4c 69 73 74 65 6e 65 72 73 29 0d 0a 20 20 20  gListeners)..   
4ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4af0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b10: 20 20 20 20 6c 69 73 74 65 6e 65 72 2e 57 72 69      listener.Wri
4b20: 74 65 4c 69 6e 65 28 6d 65 73 73 61 67 65 2c 20  teLine(message, 
4b30: 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  category);..    
4b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b50: 20 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72          listener
4b60: 2e 46 6c 75 73 68 28 29 3b 0d 0a 20 20 20 20 20  .Flush();..     
4b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b80: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
4b90: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
4ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
4bb0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
4bc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
4bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4c20: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
4c30: 69 64 20 54 72 61 63 65 43 6f 72 65 28 0d 0a 20  id TraceCore(.. 
4c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
4c50: 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a  tring message,..
4c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c70: 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d  string category.
4c80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4c90: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
4ca0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4cb0: 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f     lock (syncRoo
4cc0: 74 29 20 2f 2a 20 54 52 41 4e 53 41 43 54 49 4f  t) /* TRANSACTIO
4cd0: 4e 41 4c 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  NAL */..        
4ce0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4d00: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
4d10: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
4d20: 57 72 69 74 65 20 74 68 65 20 6d 65 73 73 61 67  Write the messag
4d30: 65 20 74 6f 20 61 6c 6c 20 74 68 65 20 61 63 74  e to all the act
4d40: 69 76 65 20 74 72 61 63 65 0d 0a 20 20 20 20 20  ive trace..     
4d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4d60: 2f 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72  /       listener
4d70: 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
4d80: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
4d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4da0: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
4db0: 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72  message, categor
4dc0: 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
4dd0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 46           Trace.F
4de0: 6c 75 73 68 28 29 3b 0d 0a 20 20 20 20 20 20 20  lush();..       
4df0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
4e00: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4e10: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
4e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
4e60: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
4e70: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
4e80: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
4e90: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
4ea0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
4eb0: 63 20 73 74 72 69 6e 67 20 44 65 62 75 67 41 6e  c string DebugAn
4ec0: 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
4ed0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
4ee0: 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f  iority tracePrio
4ef0: 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rity,..         
4f00: 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c         TraceCall
4f10: 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61  back debugCallba
4f20: 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
4f30: 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61       TraceCallba
4f40: 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  ck traceCallback
4f50: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4f60: 20 20 20 45 78 63 65 70 74 69 6f 6e 20 65 78 63     Exception exc
4f70: 65 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  eption,..       
4f80: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
4f90: 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20  category..      
4fa0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
4fb0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4fc0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4fd0: 65 78 63 65 70 74 69 6f 6e 20 21 3d 20 6e 75 6c  exception != nul
4fe0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
4ff0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44          return D
5000: 65 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61  ebugAndTrace(tra
5010: 63 65 50 72 69 6f 72 69 74 79 2c 20 64 65 62 75  cePriority, debu
5020: 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
5030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5040: 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
5050: 6b 2c 20 6e 65 77 20 53 74 61 63 6b 54 72 61 63  k, new StackTrac
5060: 65 28 65 78 63 65 70 74 69 6f 6e 2c 20 74 72 75  e(exception, tru
5070: 65 29 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 20  e), 0,..        
5080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5090: 65 78 63 65 70 74 69 6f 6e 2e 54 6f 53 74 72 69  exception.ToStri
50a0: 6e 67 28 29 2c 20 63 61 74 65 67 6f 72 79 29 3b  ng(), category);
50b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
50c0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
50d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
50e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
50f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5130: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
5140: 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
5150: 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
5160: 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
5170: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
5180: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44   static string D
5190: 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
51a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
51b0: 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61  racePriority tra
51c0: 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20  cePriority,..   
51d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
51e0: 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67  ceCallback debug
51f0: 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
5200: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
5210: 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61  Callback traceCa
5220: 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
5230: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
5240: 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20  message,..      
5250: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
5260: 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20   category..     
5270: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
5280: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5290: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
52a0: 75 72 6e 20 44 65 62 75 67 41 6e 64 54 72 61 63  urn DebugAndTrac
52b0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
52c0: 20 20 20 20 20 20 20 20 74 72 61 63 65 50 72 69          tracePri
52d0: 6f 72 69 74 79 2c 20 64 65 62 75 67 43 61 6c 6c  ority, debugCall
52e0: 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
52f0: 61 63 6b 2c 20 6e 75 6c 6c 2c 20 31 2c 0d 0a 20  ack, null, 1,.. 
5300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5310: 20 20 20 6d 65 73 73 61 67 65 2c 20 63 61 74 65     message, cate
5320: 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
5330: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5340: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
5350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5380: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
5390: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
53a0: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
53b0: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
53c0: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
53d0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
53e0: 74 72 69 6e 67 20 44 65 62 75 67 41 6e 64 54 72  tring DebugAndTr
53f0: 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
5400: 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
5410: 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74  ity tracePriorit
5420: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
5430: 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63      TraceCallbac
5440: 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  k debugCallback,
5450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5460: 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20    TraceCallback 
5470: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a  traceCallback,..
5480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5490: 53 74 61 63 6b 54 72 61 63 65 20 73 74 61 63 6b  StackTrace stack
54a0: 54 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20  Trace,..        
54b0: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76 65          int leve
54c0: 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
54d0: 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
54e0: 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
54f0: 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
5500: 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
5510: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
5520: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5530: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
5540: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
5550: 4f 54 45 3a 20 41 6c 77 61 79 73 20 73 6b 69 70  OTE: Always skip
5560: 20 74 68 69 73 20 63 61 6c 6c 20 66 72 61 6d 65   this call frame
5570: 20 69 66 20 74 68 65 20 73 74 61 63 6b 20 74 72   if the stack tr
5580: 61 63 65 20 69 73 0d 0a 20 20 20 20 20 20 20 20  ace is..        
5590: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
55a0: 20 67 6f 69 6e 67 20 74 6f 20 62 65 20 63 61 70   going to be cap
55b0: 74 75 72 65 64 20 62 79 20 47 65 74 4d 65 74 68  tured by GetMeth
55c0: 6f 64 4e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20  odName...       
55d0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
55e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
55f0: 28 73 74 61 63 6b 54 72 61 63 65 20 3d 3d 20 6e  (stackTrace == n
5600: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
5610: 20 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c 2b            level+
5620: 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  +;....          
5630: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
5640: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
5650: 45 3a 20 46 6f 72 6d 61 74 20 74 68 65 20 6d 65  E: Format the me
5660: 73 73 61 67 65 20 66 6f 72 20 64 69 73 70 6c 61  ssage for displa
5670: 79 20 28 6f 6e 63 65 29 2e 0d 0a 20 20 20 20 20  y (once)...     
5680: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
5690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
56a0: 74 72 69 6e 67 20 66 6f 72 6d 61 74 74 65 64 20  tring formatted 
56b0: 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
56c0: 22 7b 30 7d 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  "{0}: {1}",..   
56d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
56e0: 20 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 73   GetMethodName(s
56f0: 74 61 63 6b 54 72 61 63 65 2c 20 6c 65 76 65 6c  tackTrace, level
5700: 29 2c 20 6d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a  ), message);....
5710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5720: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
5730: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20      // NOTE: If 
5740: 74 68 65 20 64 65 62 75 67 20 63 61 6c 6c 62 61  the debug callba
5750: 63 6b 20 69 73 20 69 6e 76 61 6c 69 64 20 6f 72  ck is invalid or
5760: 20 74 68 65 20 74 72 61 63 65 20 70 72 69 6f 72   the trace prior
5770: 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ity..           
5780: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 66       //       of
5790: 20 74 68 69 73 20 6d 65 73 73 61 67 65 20 69 73   this message is
57a0: 20 6c 65 73 73 20 74 68 61 6e 20 77 68 61 74 20   less than what 
57b0: 77 65 20 63 75 72 72 65 6e 74 6c 79 20 77 61 6e  we currently wan
57c0: 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20  t to..          
57d0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64        //       d
57e0: 65 62 75 67 2c 20 73 6b 69 70 20 69 74 2e 0d 0a  ebug, skip it...
57f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5800: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
5810: 20 20 20 20 69 66 20 28 28 64 65 62 75 67 43 61      if ((debugCa
5820: 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 20  llback != null) 
5830: 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
5840: 20 20 20 20 20 20 20 20 28 74 72 61 63 65 50 72          (tracePr
5850: 69 6f 72 69 74 79 20 3e 3d 20 44 65 62 75 67 50  iority >= DebugP
5860: 72 69 6f 72 69 74 79 29 29 0d 0a 20 20 20 20 20  riority))..     
5870: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5890: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
58a0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
58b0: 45 3a 20 49 6e 76 6f 6b 65 20 74 68 65 20 64 65  E: Invoke the de
58c0: 62 75 67 20 63 61 6c 6c 62 61 63 6b 20 77 69 74  bug callback wit
58d0: 68 20 74 68 65 20 66 6f 72 6d 61 74 74 65 64 0d  h the formatted.
58e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
58f0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 65       //       me
5900: 73 73 61 67 65 20 61 6e 64 20 74 68 65 20 63 61  ssage and the ca
5910: 74 65 67 6f 72 79 20 73 70 65 63 69 66 69 65 64  tegory specified
5920: 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20   by the..       
5930: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
5940: 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a 20        caller... 
5950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5960: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
5970: 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
5980: 43 61 6c 6c 62 61 63 6b 28 66 6f 72 6d 61 74 74  Callback(formatt
5990: 65 64 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a  ed, category);..
59a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
59b0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
59c0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
59d0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
59e0: 3a 20 49 66 20 74 68 65 20 74 72 61 63 65 20 63  : If the trace c
59f0: 61 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 61 6c  allback is inval
5a00: 69 64 20 6f 72 20 74 68 65 20 74 72 61 63 65 20  id or the trace 
5a10: 70 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20  priority..      
5a20: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
5a30: 20 20 20 6f 66 20 74 68 69 73 20 6d 65 73 73 61     of this messa
5a40: 67 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ge is less than 
5a50: 77 68 61 74 20 77 65 20 63 75 72 72 65 6e 74 6c  what we currentl
5a60: 79 20 77 61 6e 74 20 74 6f 0d 0a 20 20 20 20 20  y want to..     
5a70: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
5a80: 20 20 20 20 74 72 61 63 65 2c 20 73 6b 69 70 20      trace, skip 
5a90: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  it...           
5aa0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
5ab0: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 74 72           if ((tr
5ac0: 61 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e  aceCallback != n
5ad0: 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20  ull) &&..       
5ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 74 72               (tr
5af0: 61 63 65 50 72 69 6f 72 69 74 79 20 3e 3d 20 54  acePriority >= T
5b00: 72 61 63 65 50 72 69 6f 72 69 74 79 29 29 0d 0a  racePriority))..
5b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5b30: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
5b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5b50: 2f 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 20 74  / NOTE: Invoke t
5b60: 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63  he trace callbac
5b70: 6b 20 77 69 74 68 20 74 68 65 20 66 6f 72 6d 61  k with the forma
5b80: 74 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  tted..          
5b90: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
5ba0: 20 20 20 6d 65 73 73 61 67 65 20 61 6e 64 20 74     message and t
5bb0: 68 65 20 63 61 74 65 67 6f 72 79 20 73 70 65 63  he category spec
5bc0: 69 66 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20  ified by the..  
5bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5be0: 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65    //       calle
5bf0: 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r...            
5c00: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
5c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c20: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 66 6f  traceCallback(fo
5c30: 72 6d 61 74 74 65 64 2c 20 63 61 74 65 67 6f 72  rmatted, categor
5c40: 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
5c50: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
5c60: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5c70: 20 6d 65 73 73 61 67 65 3b 0d 0a 20 20 20 20 20   message;..     
5c80: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
5c90: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
5ca0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
5cb0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
5cc0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
5cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d10: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
5d20: 65 67 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74  egion MockRegist
5d30: 72 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  ry Class..      
5d40: 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64    private sealed
5d50: 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 73   class MockRegis
5d60: 74 72 79 20 3a 20 49 44 69 73 70 6f 73 61 62 6c  try : IDisposabl
5d70: 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  e..        {..  
5d80: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
5d90: 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75  n Public Constru
5da0: 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20  ctors..         
5db0: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
5dc0: 67 69 73 74 72 79 28 29 0d 0a 20 20 20 20 20 20  gistry()..      
5dd0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5de0: 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 20           whatIf 
5df0: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
5e00: 20 20 20 20 20 20 20 20 20 72 65 61 64 4f 6e 6c           readOnl
5e10: 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
5e20: 20 20 20 20 20 20 20 20 20 20 20 73 61 66 65 20             safe 
5e30: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
5e40: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
5e50: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
5e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
5ea0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
5eb0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 0d 0a 20  MockRegistry(.. 
5ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
5ed0: 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20 20  ool whatIf..    
5ee0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
5ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
5f00: 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20   this()..       
5f10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5f20: 20 20 20 20 20 20 20 20 74 68 69 73 2e 77 68 61          this.wha
5f30: 74 49 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20  tIf = whatIf;.. 
5f40: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
5f50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
5f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
5fa0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
5fb0: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
5fc0: 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
5fd0: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
5fe0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
5ff0: 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79     bool readOnly
6000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6010: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
6020: 20 20 20 20 20 3a 20 74 68 69 73 28 77 68 61 74       : this(what
6030: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
6040: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6050: 20 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c      this.readOnl
6060: 79 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20  y = readOnly;.. 
6070: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
6080: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
6090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
60d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
60e0: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
60f0: 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
6100: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
6110: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
6120: 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79     bool readOnly
6130: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
6140: 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20     bool safe..  
6150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
6160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6170: 20 3a 20 74 68 69 73 28 77 68 61 74 49 66 2c 20   : this(whatIf, 
6180: 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20  readOnly)..     
6190: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
61a0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73            this.s
61b0: 61 66 65 20 3d 20 73 61 66 65 3b 0d 0a 20 20 20  afe = safe;..   
61c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
61d0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
61e0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
61f0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
6200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6230: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
6240: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
6250: 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
6260: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
6270: 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b  ate bool whatIf;
6280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
6290: 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66  blic bool WhatIf
62a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
62b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
62c0: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
62d0: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 77  osed(); return w
62e0: 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20  hatIf; }..      
62f0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
6300: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
6310: 20 77 68 61 74 49 66 20 3d 20 76 61 6c 75 65 3b   whatIf = value;
6320: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
6330: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
6340: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6380: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6390: 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
63a0: 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20   readOnly;..    
63b0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
63c0: 6f 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a 20 20  ool ReadOnly..  
63d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
63e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
63f0: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
6400: 28 29 3b 20 72 65 74 75 72 6e 20 72 65 61 64 4f  (); return readO
6410: 6e 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  nly; }..        
6420: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 43 68          set { Ch
6430: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
6440: 65 61 64 4f 6e 6c 79 20 3d 20 76 61 6c 75 65 3b  eadOnly = value;
6450: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
6460: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
6470: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64b0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
64c0: 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
64d0: 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20   safe;..        
64e0: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
64f0: 53 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Safe..          
6500: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6510: 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
6520: 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
6530: 72 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20 20 20  rn safe; }..    
6540: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
6550: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
6560: 29 3b 20 73 61 66 65 20 3d 20 76 61 6c 75 65 3b  ); safe = value;
6570: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
6580: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
6590: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
65a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65d0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
65e0: 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b      private Mock
65f0: 52 65 67 69 73 74 72 79 4b 65 79 20 63 6c 61 73  RegistryKey clas
6600: 73 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 20  sesRoot;..      
6610: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
6620: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43 6c 61  kRegistryKey Cla
6630: 73 73 65 73 52 6f 6f 74 0d 0a 20 20 20 20 20 20  ssesRoot..      
6640: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6650: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
6660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
6670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6680: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
6690: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
66a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
66b0: 28 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 3d 20  (classesRoot == 
66c0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
66d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
66e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66f0: 20 20 20 20 20 20 63 6c 61 73 73 65 73 52 6f 6f        classesRoo
6700: 74 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69  t = new MockRegi
6710: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
6720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6730: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 43        Registry.C
6740: 6c 61 73 73 65 73 52 6f 6f 74 2c 20 77 68 61 74  lassesRoot, what
6750: 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61  If, readOnly, sa
6760: 66 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  fe);..          
6770: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
6780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6790: 20 20 20 72 65 74 75 72 6e 20 63 6c 61 73 73 65     return classe
67a0: 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20 20  sRoot;..        
67b0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
67c0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
67d0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
67e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
6820: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
6830: 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
6840: 65 79 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67  ey currentConfig
6850: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
6860: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
6870: 72 79 4b 65 79 20 43 75 72 72 65 6e 74 43 6f 6e  ryKey CurrentCon
6880: 66 69 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  fig..           
6890: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
68a0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
68b0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
68c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68d0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
68e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
68f0: 20 20 20 20 20 20 20 20 69 66 20 28 63 75 72 72          if (curr
6900: 65 6e 74 43 6f 6e 66 69 67 20 3d 3d 20 6e 75 6c  entConfig == nul
6910: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
6920: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6940: 20 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67     currentConfig
6950: 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
6960: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
6970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6980: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 43 75       Registry.Cu
6990: 72 72 65 6e 74 43 6f 6e 66 69 67 2c 20 77 68 61  rrentConfig, wha
69a0: 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73  tIf, readOnly, s
69b0: 61 66 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  afe);..         
69c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
69d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69e0: 20 20 20 20 72 65 74 75 72 6e 20 63 75 72 72 65      return curre
69f0: 6e 74 43 6f 6e 66 69 67 3b 0d 0a 20 20 20 20 20  ntConfig;..     
6a00: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
6a10: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
6a20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
6a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6a70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
6a80: 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
6a90: 72 79 4b 65 79 20 63 75 72 72 65 6e 74 55 73 65  ryKey currentUse
6aa0: 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r;..            
6ab0: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
6ac0: 74 72 79 4b 65 79 20 43 75 72 72 65 6e 74 55 73  tryKey CurrentUs
6ad0: 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  er..            
6ae0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6af0: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20     get..        
6b00: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
6b20: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
6b30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6b40: 20 20 20 20 20 20 20 69 66 20 28 63 75 72 72 65         if (curre
6b50: 6e 74 55 73 65 72 20 3d 3d 20 6e 75 6c 6c 29 0d  ntUser == null).
6b60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6b70: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b90: 63 75 72 72 65 6e 74 55 73 65 72 20 3d 20 6e 65  currentUser = ne
6ba0: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
6bb0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
6bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6bd0: 52 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74  Registry.Current
6be0: 55 73 65 72 2c 20 77 68 61 74 49 66 2c 20 72 65  User, whatIf, re
6bf0: 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a  adOnly, safe);..
6c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
6c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
6c30: 75 72 6e 20 63 75 72 72 65 6e 74 55 73 65 72 3b  urn currentUser;
6c40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6c50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
6c60: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
6c70: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
6c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6cb0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
6cc0: 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63       private Moc
6cd0: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64 79 6e  kRegistryKey dyn
6ce0: 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20 20  Data;..         
6cf0: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
6d00: 67 69 73 74 72 79 4b 65 79 20 44 79 6e 44 61 74  gistryKey DynDat
6d10: 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  a..            {
6d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6d30: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20    get..         
6d40: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
6d60: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
6d70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6d80: 20 20 20 20 20 20 69 66 20 28 64 79 6e 44 61 74        if (dynDat
6d90: 61 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  a == null)..    
6da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6db0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6dc0: 20 20 20 20 20 20 20 20 20 20 20 64 79 6e 44 61             dynDa
6dd0: 74 61 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67  ta = new MockReg
6de0: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
6df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e00: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e         Registry.
6e10: 44 79 6e 44 61 74 61 2c 20 77 68 61 74 49 66 2c  DynData, whatIf,
6e20: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29   readOnly, safe)
6e30: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
6e40: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e60: 72 65 74 75 72 6e 20 64 79 6e 44 61 74 61 3b 0d  return dynData;.
6e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6e80: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
6e90: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
6ea0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ee0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6ef0: 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b      private Mock
6f00: 52 65 67 69 73 74 72 79 4b 65 79 20 6c 6f 63 61  RegistryKey loca
6f10: 6c 4d 61 63 68 69 6e 65 3b 0d 0a 20 20 20 20 20  lMachine;..     
6f20: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
6f30: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4c 6f  ckRegistryKey Lo
6f40: 63 61 6c 4d 61 63 68 69 6e 65 0d 0a 20 20 20 20  calMachine..    
6f50: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6f60: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a             get..
6f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6f90: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
6fa0: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
6fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
6fc0: 66 20 28 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20  f (localMachine 
6fd0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
6fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
6ff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7000: 20 20 20 20 20 20 20 20 20 6c 6f 63 61 6c 4d 61           localMa
7010: 63 68 69 6e 65 20 3d 20 6e 65 77 20 4d 6f 63 6b  chine = new Mock
7020: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
7030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7040: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
7050: 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 2c  ry.LocalMachine,
7060: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
7070: 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20 20  y, safe);..     
7080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
7090: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
70a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6c          return l
70b0: 6f 63 61 6c 4d 61 63 68 69 6e 65 3b 0d 0a 20 20  ocalMachine;..  
70c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
70d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
70e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
70f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7130: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
7140: 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
7150: 69 73 74 72 79 4b 65 79 20 70 65 72 66 6f 72 6d  istryKey perform
7160: 61 6e 63 65 44 61 74 61 3b 0d 0a 20 20 20 20 20  anceData;..     
7170: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
7180: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 50 65  ckRegistryKey Pe
7190: 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 0d 0a 20  rformanceData.. 
71a0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
71b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
71c0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
71d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
71e0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
71f0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
7200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7210: 20 20 69 66 20 28 70 65 72 66 6f 72 6d 61 6e 63    if (performanc
7220: 65 44 61 74 61 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  eData == null)..
7230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7240: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
7260: 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20 3d  erformanceData =
7270: 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72   new MockRegistr
7280: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
7290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72a0: 20 20 20 52 65 67 69 73 74 72 79 2e 50 65 72 66     Registry.Perf
72b0: 6f 72 6d 61 6e 63 65 44 61 74 61 2c 20 77 68 61  ormanceData, wha
72c0: 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73  tIf, readOnly, s
72d0: 61 66 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  afe);..         
72e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
72f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7300: 20 20 20 20 72 65 74 75 72 6e 20 70 65 72 66 6f      return perfo
7310: 72 6d 61 6e 63 65 44 61 74 61 3b 0d 0a 20 20 20  rmanceData;..   
7320: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
7330: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
7340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
7350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7390: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
73a0: 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69  private MockRegi
73b0: 73 74 72 79 4b 65 79 20 75 73 65 72 73 3b 0d 0a  stryKey users;..
73c0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
73d0: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
73e0: 65 79 20 55 73 65 72 73 0d 0a 20 20 20 20 20 20  ey Users..      
73f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7400: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
7410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
7420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7430: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
7440: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
7450: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
7460: 28 75 73 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d  (users == null).
7470: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7480: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74a0: 75 73 65 72 73 20 3d 20 6e 65 77 20 4d 6f 63 6b  users = new Mock
74b0: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
74c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74d0: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
74e0: 72 79 2e 55 73 65 72 73 2c 20 77 68 61 74 49 66  ry.Users, whatIf
74f0: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65  , readOnly, safe
7500: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
7510: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7530: 20 72 65 74 75 72 6e 20 75 73 65 72 73 3b 0d 0a   return users;..
7540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7550: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
7560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
7570: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
7580: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
7590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
75d0: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
75e0: 6f 6e 20 50 75 62 6c 69 63 20 22 52 65 67 69 73  on Public "Regis
75f0: 74 72 79 22 20 4d 65 74 68 6f 64 73 0d 0a 23 69  try" Methods..#i
7600: 66 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20  f false..       
7610: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 62 6a 65       public obje
7620: 63 74 20 47 65 74 56 61 6c 75 65 28 0d 0a 20 20  ct GetValue(..  
7630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
7640: 72 69 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d 0a 20  ring keyName,.. 
7650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
7660: 74 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d 65 2c  tring valueName,
7670: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7680: 20 20 6f 62 6a 65 63 74 20 64 65 66 61 75 6c 74    object default
7690: 56 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20  Value..         
76a0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
76b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
76c0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
76d0: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
76e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
76f0: 75 72 6e 20 52 65 67 69 73 74 72 79 2e 47 65 74  urn Registry.Get
7700: 56 61 6c 75 65 28 6b 65 79 4e 61 6d 65 2c 20 76  Value(keyName, v
7710: 61 6c 75 65 4e 61 6d 65 2c 20 64 65 66 61 75 6c  alueName, defaul
7720: 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20  tValue);..      
7730: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
7740: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
7750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
7790: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
77a0: 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28 0d   void SetValue(.
77b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
77c0: 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 2c   string keyName,
77d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
77e0: 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 4e 61    string valueNa
77f0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
7800: 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
7810: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
7820: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
7830: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7840: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
7850: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
7860: 20 20 20 20 20 20 20 43 68 65 63 6b 52 65 61 64         CheckRead
7870: 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Only();....     
7880: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
7890: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
78a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
78b0: 69 73 74 72 79 2e 53 65 74 56 61 6c 75 65 28 6b  istry.SetValue(k
78c0: 65 79 4e 61 6d 65 2c 20 76 61 6c 75 65 4e 61 6d  eyName, valueNam
78d0: 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  e, value);..    
78e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
78f0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
7900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
7940: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
7950: 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65  ic void SetValue
7960: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
7970: 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
7980: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
7990: 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65      string value
79a0: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
79b0: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
79c0: 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  lue,..          
79d0: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 56 61        RegistryVa
79e0: 6c 75 65 4b 69 6e 64 20 76 61 6c 75 65 4b 69 6e  lueKind valueKin
79f0: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..             
7a00: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
7a10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7a20: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
7a30: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
7a40: 20 20 20 20 20 20 20 43 68 65 63 6b 52 65 61 64         CheckRead
7a50: 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Only();....     
7a60: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
7a70: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
7a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
7a90: 69 73 74 72 79 2e 53 65 74 56 61 6c 75 65 28 6b  istry.SetValue(k
7aa0: 65 79 4e 61 6d 65 2c 20 76 61 6c 75 65 4e 61 6d  eyName, valueNam
7ab0: 65 2c 20 76 61 6c 75 65 2c 20 76 61 6c 75 65 4b  e, value, valueK
7ac0: 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ind);..         
7ad0: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20     }..#endif..  
7ae0: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
7af0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
7b00: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b40: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
7b50: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
7b60: 72 69 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a  rivate Methods..
7b70: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
7b80: 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b 52 65  ate void CheckRe
7b90: 61 64 4f 6e 6c 79 28 29 0d 0a 20 20 20 20 20 20  adOnly()..      
7ba0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7bb0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
7bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
7bd0: 4e 4f 54 45 3a 20 49 6e 20 22 72 65 61 64 2d 6f  NOTE: In "read-o
7be0: 6e 6c 79 22 20 6d 6f 64 65 2c 20 77 65 20 64 69  nly" mode, we di
7bf0: 73 61 6c 6c 6f 77 20 61 6c 6c 20 77 72 69 74 65  sallow all write
7c00: 20 61 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20   access...      
7c10: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7c30: 20 28 21 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20   (!readOnly)..  
7c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c50: 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
7c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
7c70: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
7c80: 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
7c90: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
7ca0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
7cb0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
7cc0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
7cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
7d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
7d20: 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65  gion IDisposable
7d30: 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65   "Pattern" Membe
7d40: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
7d50: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73  private bool dis
7d60: 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  posed;..        
7d70: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
7d80: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
7d90: 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
7da0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
7dc0: 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20  (!disposed)..   
7dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7de0: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
7df0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
7e00: 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70  w new ObjectDisp
7e10: 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a  osedException(..
7e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e30: 20 20 20 20 74 79 70 65 6f 66 28 4d 6f 63 6b 52      typeof(MockR
7e40: 65 67 69 73 74 72 79 29 2e 4e 61 6d 65 29 3b 0d  egistry).Name);.
7e50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
7e60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
7e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7eb0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
7ec0: 20 70 72 69 76 61 74 65 20 2f 2a 20 70 72 6f 74   private /* prot
7ed0: 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 2a 2f  ected virtual */
7ee0: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 0d 0a   void Dispose(..
7ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f00: 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a  bool disposing..
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f20: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
7f30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7f40: 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29    if (!disposed)
7f50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7f60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7f70: 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73           if (dis
7f80: 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20  posing)..       
7f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
7fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fb0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
7fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
7fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ff0: 20 20 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65        // dispose
8000: 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63   managed resourc
8010: 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
8020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8030: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8050: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
8060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8070: 20 20 20 20 69 66 20 28 63 6c 61 73 73 65 73 52      if (classesR
8080: 6f 6f 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  oot != null)..  
8090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
80b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80c0: 20 20 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74       classesRoot
80d0: 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  .Close();..     
80e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80f0: 20 20 20 20 20 20 20 63 6c 61 73 73 65 73 52 6f         classesRo
8100: 6f 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  ot = null;..    
8110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8120: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8140: 20 69 66 20 28 63 75 72 72 65 6e 74 43 6f 6e 66   if (currentConf
8150: 69 67 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ig != null)..   
8160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8170: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8190: 20 20 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 69      currentConfi
81a0: 67 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20  g.Close();..    
81b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81c0: 20 20 20 20 20 20 20 20 63 75 72 72 65 6e 74 43          currentC
81d0: 6f 6e 66 69 67 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  onfig = null;.. 
81e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81f0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8210: 20 20 20 20 69 66 20 28 63 75 72 72 65 6e 74 55      if (currentU
8220: 73 65 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ser != null)..  
8230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8240: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8260: 20 20 20 20 20 63 75 72 72 65 6e 74 55 73 65 72       currentUser
8270: 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  .Close();..     
8280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8290: 20 20 20 20 20 20 20 63 75 72 72 65 6e 74 55 73         currentUs
82a0: 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  er = null;..    
82b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
82d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82e0: 20 69 66 20 28 64 79 6e 44 61 74 61 20 21 3d 20   if (dynData != 
82f0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
8300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
8310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 79                dy
8330: 6e 44 61 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a  nData.Close();..
8340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8350: 20 20 20 20 20 20 20 20 20 20 20 20 64 79 6e 44              dynD
8360: 61 74 61 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ata = null;..   
8370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8380: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83a0: 20 20 69 66 20 28 6c 6f 63 61 6c 4d 61 63 68 69    if (localMachi
83b0: 6e 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ne != null)..   
83c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
83e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83f0: 20 20 20 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65      localMachine
8400: 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  .Close();..     
8410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8420: 20 20 20 20 20 20 20 6c 6f 63 61 6c 4d 61 63 68         localMach
8430: 69 6e 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ine = null;..   
8440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8450: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8470: 20 20 69 66 20 28 70 65 72 66 6f 72 6d 61 6e 63    if (performanc
8480: 65 44 61 74 61 20 21 3d 20 6e 75 6c 6c 29 0d 0a  eData != null)..
8490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
84b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84c0: 20 20 20 20 20 20 20 70 65 72 66 6f 72 6d 61 6e         performan
84d0: 63 65 44 61 74 61 2e 43 6c 6f 73 65 28 29 3b 0d  ceData.Close();.
84e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
84f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 65 72               per
8500: 66 6f 72 6d 61 6e 63 65 44 61 74 61 20 3d 20 6e  formanceData = n
8510: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
8520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
8530: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
8540: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 75             if (u
8550: 73 65 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  sers != null).. 
8560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8570: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8590: 20 20 20 20 20 20 75 73 65 72 73 2e 43 6c 6f 73        users.Clos
85a0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
85b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85c0: 20 20 75 73 65 72 73 20 3d 20 6e 75 6c 6c 3b 0d    users = null;.
85d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
85e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
85f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8600: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
8610: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
8620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
8640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8650: 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20       // release 
8660: 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  unmanaged resour
8670: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
8680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8690: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
86a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
86b0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
86c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
86d0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
86e0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
86f0: 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 6e  This object is n
8700: 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20  ow disposed...  
8710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8720: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
8730: 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73            dispos
8740: 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
8750: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
8760: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
8770: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
8780: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
8790: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
87a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87d0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
87e0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
87f0: 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65  Disposable Membe
8800: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
8810: 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70  public void Disp
8820: 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ose()..         
8830: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8840: 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 74 72        Dispose(tr
8850: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
8860: 20 20 20 20 20 20 47 43 2e 53 75 70 70 72 65 73        GC.Suppres
8870: 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b  sFinalize(this);
8880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
8890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
88a0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
88b0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
88c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
8900: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
8910: 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20  n Destructor..  
8920: 20 20 20 20 20 20 20 20 20 20 7e 4d 6f 63 6b 52            ~MockR
8930: 65 67 69 73 74 72 79 28 29 0d 0a 20 20 20 20 20  egistry()..     
8940: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8950: 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73            Dispos
8960: 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20  e(false);..     
8970: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
8980: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
8990: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
89a0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
89b0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
89c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a00: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
8a10: 65 67 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74  egion MockRegist
8a20: 72 79 4b 65 79 20 43 6c 61 73 73 0d 0a 20 20 20  ryKey Class..   
8a30: 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 65       internal se
8a40: 61 6c 65 64 20 63 6c 61 73 73 20 4d 6f 63 6b 52  aled class MockR
8a50: 65 67 69 73 74 72 79 4b 65 79 20 3a 20 49 44 69  egistryKey : IDi
8a60: 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20 20 20  sposable..      
8a70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8a80: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
8a90: 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
8aa0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
8ab0: 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
8ac0: 65 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ey()..          
8ad0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8ae0: 20 20 20 20 20 77 68 61 74 49 66 20 3d 20 74 72       whatIf = tr
8af0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
8b00: 20 20 20 20 20 72 65 61 64 4f 6e 6c 79 20 3d 20       readOnly = 
8b10: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
8b20: 20 20 20 20 20 20 20 73 61 66 65 20 3d 20 74 72         safe = tr
8b30: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
8b40: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
8b50: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
8b60: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
8b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
8bb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
8bc0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73  gion Public Cons
8bd0: 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
8be0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
8bf0: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
8c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
8c10: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a  egistryKey key..
8c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c30: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8c40: 20 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 20 20     : this()..   
8c50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8c60: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
8c70: 2e 6b 65 79 20 3d 20 6b 65 79 3b 0d 0a 20 20 20  .key = key;..   
8c80: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
8c90: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
8ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
8ce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
8cf0: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
8d00: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
8d10: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
8d20: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
8d30: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
8d40: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
8d50: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
8d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
8d70: 74 68 69 73 28 6b 65 79 29 0d 0a 20 20 20 20 20  this(key)..     
8d80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8d90: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73            this.s
8da0: 75 62 4b 65 79 4e 61 6d 65 20 3d 20 73 75 62 4b  ubKeyName = subK
8db0: 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  eyName;..       
8dc0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8dd0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
8de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
8e20: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
8e30: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
8e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8e50: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65    RegistryKey ke
8e60: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
8e70: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
8e80: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
8e90: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
8ea0: 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tIf..           
8eb0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
8ec0: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b          : this(k
8ed0: 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29 0d  ey, subKeyName).
8ee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f00: 74 68 69 73 2e 77 68 61 74 49 66 20 3d 20 77 68  this.whatIf = wh
8f10: 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20  atIf;..         
8f20: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8f30: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f70: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8f80: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
8f90: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
8fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fb0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
8fc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8fd0: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
8fe0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
8ff0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
9000: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
9010: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
9020: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
9030: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
9040: 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79        : this(key
9050: 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68  , subKeyName, wh
9060: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
9070: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9080: 20 20 20 20 20 20 74 68 69 73 2e 72 65 61 64 4f        this.readO
9090: 6e 6c 79 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d  nly = readOnly;.
90a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
90b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
90c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9100: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
9110: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
9120: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
9130: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
9140: 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
9150: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
9160: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
9170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9180: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
9190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
91a0: 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20  ol readOnly,..  
91b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
91c0: 6f 6c 20 73 61 66 65 0d 0a 20 20 20 20 20 20 20  ol safe..       
91d0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
91e0: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68              : th
91f0: 69 73 28 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61  is(key, subKeyNa
9200: 6d 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  me, whatIf, read
9210: 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20  Only)..         
9220: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9230: 20 20 20 20 20 20 74 68 69 73 2e 73 61 66 65 20        this.safe 
9240: 3d 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20  = safe;..       
9250: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9260: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
9270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
92b0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
92c0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
92d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
92e0: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65    RegistryKey ke
92f0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
9300: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d      bool whatIf.
9310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9320: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
9330: 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20      : this(key, 
9340: 6e 75 6c 6c 2c 20 77 68 61 74 49 66 29 0d 0a 20  null, whatIf).. 
9350: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
9360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
9370: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
9380: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
9390: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
93a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
93e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
93f0: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
9400: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
9410: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
9420: 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ey key,..       
9430: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
9440: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
9450: 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64         bool read
9460: 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  Only..          
9470: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
9480: 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28           : this(
9490: 6b 65 79 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49  key, null, whatI
94a0: 66 2c 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20  f, readOnly)..  
94b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
94c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
94d0: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
94e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
94f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
9500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
9540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
9550: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
9560: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
9570: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
9580: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
9590: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
95a0: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
95b0: 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f        bool readO
95c0: 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  nly,..          
95d0: 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d        bool safe.
95e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
95f0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
9600: 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20      : this(key, 
9610: 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 72 65  null, whatIf, re
9620: 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 0d 0a 20  adOnly, safe).. 
9630: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
9640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
9650: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
9660: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
9670: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
9680: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
9690: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
96a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96d0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
96e0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
96f0: 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20  blic Methods..  
9700: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
9710: 20 76 6f 69 64 20 43 6c 6f 73 65 28 29 0d 0a 20   void Close().. 
9720: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
9730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
9740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9750: 20 20 2f 2f 20 4e 4f 54 45 3a 20 4e 6f 20 64 69    // NOTE: No di
9760: 73 70 6f 73 65 64 20 63 68 65 63 6b 20 68 65 72  sposed check her
9770: 65 20 62 65 63 61 75 73 65 20 63 61 6c 6c 69 6e  e because callin
9780: 67 20 74 68 69 73 20 6d 65 74 68 6f 64 0d 0a 20  g this method.. 
9790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
97a0: 2f 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62  /       should b
97b0: 65 20 6a 75 73 74 20 6c 69 6b 65 20 63 61 6c 6c  e just like call
97c0: 69 6e 67 20 44 69 73 70 6f 73 65 2e 0d 0a 20 20  ing Dispose...  
97d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
97e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
97f0: 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b    Dispose(true);
9800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9810: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
9820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9860: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9870: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69    public void Di
9880: 73 61 62 6c 65 43 6c 6f 73 65 28 29 0d 0a 20 20  sableClose()..  
9890: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
98a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
98b0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
98c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
98d0: 20 6e 6f 43 6c 6f 73 65 20 3d 20 74 72 75 65 3b   noClose = true;
98e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
98f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
9900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9940: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9950: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
9960: 69 73 74 72 79 4b 65 79 20 43 72 65 61 74 65 53  istryKey CreateS
9970: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
9980: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
9990: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
99a0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
99b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
99c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
99d0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
99e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
99f0: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d  heckReadOnly();.
9a00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
9a10: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
9a20: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
9a30: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
9a40: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
9a50: 20 20 20 20 20 20 20 20 20 69 66 20 28 77 68 61           if (wha
9a60: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
9a70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
9a90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9aa0: 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 74       // HACK: At
9ab0: 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20 74 68  tempt to open th
9ac0: 65 20 73 70 65 63 69 66 69 65 64 20 73 75 62 2d  e specified sub-
9ad0: 6b 65 79 2e 20 20 49 66 20 74 68 69 73 0d 0a 20  key.  If this.. 
9ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9af0: 20 20 20 2f 2f 20 20 20 20 20 20 20 66 61 69 6c     //       fail
9b00: 73 2c 20 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c  s, we will simpl
9b10: 79 20 72 65 74 75 72 6e 20 74 68 65 20 77 72 61  y return the wra
9b20: 70 70 65 64 20 72 6f 6f 74 20 6b 65 79 0d 0a 20  pped root key.. 
9b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b40: 20 20 20 2f 2f 20 20 20 20 20 20 20 69 74 73 65     //       itse
9b50: 6c 66 20 73 69 6e 63 65 20 6e 6f 20 77 72 69 74  lf since no writ
9b60: 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 69  es are allowed i
9b70: 6e 20 22 77 68 61 74 2d 69 66 22 0d 0a 20 20 20  n "what-if"..   
9b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b90: 20 2f 2f 20 20 20 20 20 20 20 6d 6f 64 65 20 61   //       mode a
9ba0: 6e 79 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20  nyhow...        
9bb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
9bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9bd0: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
9be0: 73 75 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65  subKey = key.Ope
9bf0: 6e 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61  nSubKey(subKeyNa
9c00: 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
9c10: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
9c20: 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 0d  subKey != null).
9c30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9c40: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c60: 72 65 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52  return new MockR
9c70: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
9c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c90: 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c           subKey,
9ca0: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
9cb0: 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20 20  y, safe);..     
9cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
9cd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9ce0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
9cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9d10: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9d20: 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74  n new MockRegist
9d30: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
9d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d50: 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e      key, subKeyN
9d60: 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61  ame, whatIf, rea
9d70: 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20  dOnly, safe);.. 
9d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d90: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
9da0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
9db0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
9dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
9dd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9de0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
9df0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
9e00: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
9e10: 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 43             key.C
9e20: 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b  reateSubKey(subK
9e30: 65 79 4e 61 6d 65 29 2c 20 77 68 61 74 49 66 2c  eyName), whatIf,
9e40: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29   readOnly, safe)
9e50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
9e60: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
9e70: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
9e80: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
9e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ec0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
9ed0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
9ee0: 64 20 44 65 6c 65 74 65 53 75 62 4b 65 79 28 0d  d DeleteSubKey(.
9ef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9f00: 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61   string subKeyNa
9f10: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
9f20: 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
9f30: 6e 4d 69 73 73 69 6e 67 0d 0a 20 20 20 20 20 20  nMissing..      
9f40: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
9f50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9f60: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
9f70: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
9f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
9f90: 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a  eckReadOnly();..
9fa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9fb0: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
9fc0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
9fd0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
9fe0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
9ff0: 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d     if (!whatIf).
a000: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a010: 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 53       key.DeleteS
a020: 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65  ubKey(subKeyName
a030: 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  , throwOnMissing
a040: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
a050: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
a060: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
a070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0a0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
a0b0: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
a0c0: 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65  DeleteSubKeyTree
a0d0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
a0e0: 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79     string subKey
a0f0: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
a100: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
a110: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a120: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
a130: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
a140: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
a150: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
a160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
a170: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
a180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a190: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
a1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
a1b0: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
a1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a1d0: 20 6b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b 65   key.DeleteSubKe
a1e0: 79 54 72 65 65 28 73 75 62 4b 65 79 4e 61 6d 65  yTree(subKeyName
a1f0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
a200: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
a210: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
a220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a250: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
a260: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
a270: 44 65 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20 20  DeleteValue(..  
a280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
a290: 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
a2a0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
a2b0: 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d   throwOnMissing.
a2c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a2d0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
a2e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a2f0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
a300: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
a310: 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e       CheckReadOn
a320: 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ly();....       
a330: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
a340: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
a350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
a360: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
a370: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77            if (!w
a380: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
a390: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e              key.
a3a0: 44 65 6c 65 74 65 56 61 6c 75 65 28 6e 61 6d 65  DeleteValue(name
a3b0: 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  , throwOnMissing
a3c0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
a3d0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
a3e0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
a3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a420: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
a430: 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
a440: 67 5b 5d 20 47 65 74 53 75 62 4b 65 79 4e 61 6d  g[] GetSubKeyNam
a450: 65 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  es()..          
a460: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a470: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
a480: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
a490: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
a4a0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
a4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
a4c0: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
a4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
a4e0: 65 74 75 72 6e 20 6b 65 79 2e 47 65 74 53 75 62  eturn key.GetSub
a4f0: 4b 65 79 4e 61 6d 65 73 28 29 3b 0d 0a 20 20 20  KeyNames();..   
a500: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
a510: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
a520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
a560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
a570: 6c 69 63 20 6f 62 6a 65 63 74 20 47 65 74 56 61  lic object GetVa
a580: 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
a590: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
a5a0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
a5b0: 20 20 20 20 6f 62 6a 65 63 74 20 64 65 66 61 75      object defau
a5c0: 6c 74 56 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  ltValue..       
a5d0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
a5e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a5f0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
a600: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
a610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
a620: 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
a630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a640: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
a650: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a660: 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e       return key.
a670: 47 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 64  GetValue(name, d
a680: 65 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20  efaultValue);.. 
a690: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
a6a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
a6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
a6f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
a700: 75 62 6c 69 63 20 73 74 72 69 6e 67 5b 5d 20 47  ublic string[] G
a710: 65 74 56 61 6c 75 65 4e 61 6d 65 73 28 29 0d 0a  etValueNames()..
a720: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
a740: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
a750: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
a760: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
a770: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
a780: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
a790: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
a7a0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
a7b0: 6b 65 79 2e 47 65 74 56 61 6c 75 65 4e 61 6d 65  key.GetValueName
a7c0: 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  s();..          
a7d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
a7e0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
a7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a820: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
a830: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
a840: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f 70 65  kRegistryKey Ope
a850: 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
a860: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
a870: 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20   subKeyName..   
a880: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
a890: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
a8b0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
a8c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
a8d0: 20 20 20 72 65 74 75 72 6e 20 4f 70 65 6e 53 75     return OpenSu
a8e0: 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c  bKey(subKeyName,
a8f0: 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20   false);..      
a900: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a910: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
a920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a960: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
a970: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
a980: 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20   OpenSubKey(..  
a990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
a9a0: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
a9b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a9c0: 20 20 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65 0d    bool writable.
a9d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a9e0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
a9f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
aa00: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
aa10: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
aa20: 20 20 20 20 20 20 20 69 66 20 28 77 72 69 74 61         if (writa
aa30: 62 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ble)..          
aa40: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
aa50: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
aa60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
aa70: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
aa80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa90: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
aaa0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
aab0: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
aac0: 73 75 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65  subKey = key.Ope
aad0: 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
aae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
aaf0: 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  bKeyName, whatIf
ab00: 20 3f 20 66 61 6c 73 65 20 3a 20 77 72 69 74 61   ? false : writa
ab10: 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ble);....       
ab20: 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62           if (sub
ab30: 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
ab40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab50: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
ab60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ab70: 20 20 72 65 74 75 72 6e 20 6e 65 77 20 4d 6f 63    return new Moc
ab80: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 73 75 62  kRegistryKey(sub
ab90: 4b 65 79 2c 20 77 68 61 74 49 66 2c 20 72 65 61  Key, whatIf, rea
aba0: 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20  dOnly, safe);.. 
abb0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
abc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
abd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
abe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
abf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
ac10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
ac20: 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56 61  ublic void SetVa
ac30: 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
ac40: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
ac50: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
ac60: 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
ac70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ac80: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
ac90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
aca0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
acb0: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  d();..          
acc0: 20 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f        CheckReadO
acd0: 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  nly();....      
ace0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
acf0: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
ad00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad10: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
ad20: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
ad30: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
ad40: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
ad50: 2e 53 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20  .SetValue(name, 
ad60: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
ad70: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
ad80: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
ad90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
ada0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
adb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
adc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
add0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ade0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
adf0: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
ae00: 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
ae10: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
ae20: 74 72 69 6e 67 20 4e 61 6d 65 0d 0a 20 20 20 20  tring Name..    
ae30: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
ae40: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a             get..
ae50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
ae70: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
ae80: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
ae90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
aea0: 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
aeb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
aec0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
aed0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
aee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
aef0: 75 72 6e 20 21 53 74 72 69 6e 67 2e 49 73 4e 75  urn !String.IsNu
af00: 6c 6c 4f 72 45 6d 70 74 79 28 73 75 62 4b 65 79  llOrEmpty(subKey
af10: 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 20  Name) ?..       
af20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af30: 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
af40: 4a 6f 69 6e 4b 65 79 4e 61 6d 65 73 28 6b 65 79  JoinKeyNames(key
af50: 2e 4e 61 6d 65 2c 20 73 75 62 4b 65 79 4e 61 6d  .Name, subKeyNam
af60: 65 29 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  e) :..          
af70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
af80: 79 2e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  y.Name;..       
af90: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
afa0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
afb0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
afc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
b000: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
b010: 61 74 65 20 52 65 67 69 73 74 72 79 4b 65 79 20  ate RegistryKey 
b020: 6b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  key;..          
b030: 20 20 70 75 62 6c 69 63 20 52 65 67 69 73 74 72    public Registr
b040: 79 4b 65 79 20 4b 65 79 0d 0a 20 20 20 20 20 20  yKey Key..      
b050: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b060: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43           get { C
b070: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
b080: 43 68 65 63 6b 53 61 66 65 28 29 3b 20 72 65 74  CheckSafe(); ret
b090: 75 72 6e 20 6b 65 79 3b 20 7d 0d 0a 20 20 20 20  urn key; }..    
b0a0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
b0b0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
b0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
b100: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
b110: 61 74 65 20 73 74 72 69 6e 67 20 73 75 62 4b 65  ate string subKe
b120: 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
b130: 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
b140: 67 20 53 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20  g SubKeyName..  
b150: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b160: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
b170: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
b180: 28 29 3b 20 72 65 74 75 72 6e 20 73 75 62 4b 65  (); return subKe
b190: 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20  yName; }..      
b1a0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
b1b0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
b1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b200: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
b210: 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d 0a  e bool whatIf;..
b220: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
b230: 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d 0a  ic bool WhatIf..
b240: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
b260: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
b270: 65 64 28 29 3b 20 72 65 74 75 72 6e 20 77 68 61  ed(); return wha
b280: 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  tIf; }..        
b290: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
b2a0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
b2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2e0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
b2f0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
b300: 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a  bool readOnly;..
b310: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
b320: 69 63 20 62 6f 6f 6c 20 52 65 61 64 4f 6e 6c 79  ic bool ReadOnly
b330: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
b340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b350: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
b360: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 72  osed(); return r
b370: 65 61 64 4f 6e 6c 79 3b 20 7d 0d 0a 20 20 20 20  eadOnly; }..    
b380: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
b390: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
b3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
b3e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
b3f0: 69 63 20 62 6f 6f 6c 20 73 61 66 65 3b 0d 0a 20  ic bool safe;.. 
b400: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
b410: 63 20 62 6f 6f 6c 20 53 61 66 65 0d 0a 20 20 20  c bool Safe..   
b420: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b430: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
b440: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
b450: 29 3b 20 72 65 74 75 72 6e 20 73 61 66 65 3b 20  ); return safe; 
b460: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
b470: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4c0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
b4d0: 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 6e     public bool n
b4e0: 6f 43 6c 6f 73 65 3b 0d 0a 20 20 20 20 20 20 20  oClose;..       
b4f0: 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
b500: 20 4e 6f 43 6c 6f 73 65 0d 0a 20 20 20 20 20 20   NoClose..      
b510: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b520: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43           get { C
b530: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
b540: 72 65 74 75 72 6e 20 6e 6f 43 6c 6f 73 65 3b 20  return noClose; 
b550: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
b560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
b570: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
b580: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
b590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
b5d0: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
b5e0: 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74 68 6f  on Private Metho
b5f0: 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ds..            
b600: 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65  private void Che
b610: 63 6b 52 65 61 64 4f 6e 6c 79 28 29 0d 0a 20 20  ckReadOnly()..  
b620: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b630: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
b640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b650: 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 22 72 65   // NOTE: In "re
b660: 61 64 2d 6f 6e 6c 79 22 20 6d 6f 64 65 2c 20 77  ad-only" mode, w
b670: 65 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c 20 77  e disallow all w
b680: 72 69 74 65 20 61 63 63 65 73 73 2e 0d 0a 20 20  rite access...  
b690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
b6a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b6b0: 20 20 69 66 20 28 21 72 65 61 64 4f 6e 6c 79 29    if (!readOnly)
b6c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b6d0: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
b6e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b6f0: 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
b700: 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
b710: 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20  tion();..       
b720: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
b730: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
b780: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
b790: 20 76 6f 69 64 20 43 68 65 63 6b 53 61 66 65 28   void CheckSafe(
b7a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
b7b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b7c0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
b7d0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
b7e0: 6e 20 22 73 61 66 65 22 20 6d 6f 64 65 2c 20 77  n "safe" mode, w
b7f0: 65 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c 20 64  e disallow all d
b800: 69 72 65 63 74 20 61 63 63 65 73 73 20 74 6f 20  irect access to 
b810: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..           
b820: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f       //       co
b830: 6e 74 61 69 6e 65 64 20 72 65 67 69 73 74 72 79  ntained registry
b840: 20 6b 65 79 2e 0d 0a 20 20 20 20 20 20 20 20 20   key...         
b850: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
b860: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
b870: 73 61 66 65 29 0d 0a 20 20 20 20 20 20 20 20 20  safe)..         
b880: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
b890: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
b8a0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
b8b0: 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
b8c0: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20  Exception();..  
b8d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
b8e0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
b8f0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
b900: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
b910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b940: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
b950: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 79        #region Sy
b960: 73 74 65 6d 2e 4f 62 6a 65 63 74 20 4f 76 65 72  stem.Object Over
b970: 72 69 64 65 73 0d 0a 20 20 20 20 20 20 20 20 20  rides..         
b980: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
b990: 64 65 20 73 74 72 69 6e 67 20 54 6f 53 74 72 69  de string ToStri
b9a0: 6e 67 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ng()..          
b9b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b9c0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
b9d0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
b9e0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
b9f0: 74 68 69 73 2e 4e 61 6d 65 3b 0d 0a 20 20 20 20  this.Name;..    
ba00: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
ba10: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
ba20: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
ba30: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
ba40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba70: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
ba80: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
ba90: 69 63 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64  ic Static Method
baa0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
bab0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f  ublic static boo
bac0: 6c 20 4e 61 6d 65 45 71 75 61 6c 73 28 0d 0a 20  l NameEquals(.. 
bad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
bae0: 74 72 69 6e 67 20 6e 61 6d 65 31 2c 0d 0a 20 20  tring name1,..  
baf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
bb00: 72 69 6e 67 20 6e 61 6d 65 32 0d 0a 20 20 20 20  ring name2..    
bb10: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
bb20: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
bb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
bb40: 74 75 72 6e 20 53 74 72 69 6e 67 2e 45 71 75 61  turn String.Equa
bb50: 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ls(..           
bb60: 20 20 20 20 20 20 20 20 20 6e 61 6d 65 31 2c 20           name1, 
bb70: 6e 61 6d 65 32 2c 20 53 74 72 69 6e 67 43 6f 6d  name2, StringCom
bb80: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
bb90: 67 6e 6f 72 65 43 61 73 65 29 3b 0d 0a 20 20 20  gnoreCase);..   
bba0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
bbb0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
bbc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
bc00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
bc10: 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  lic static bool 
bc20: 56 61 6c 75 65 45 71 75 61 6c 73 28 0d 0a 20 20  ValueEquals(..  
bc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
bc40: 6a 65 63 74 20 76 61 6c 75 65 31 2c 0d 0a 20 20  ject value1,..  
bc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
bc60: 6a 65 63 74 20 76 61 6c 75 65 32 0d 0a 20 20 20  ject value2..   
bc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
bc80: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
bca0: 66 20 28 28 76 61 6c 75 65 31 20 3d 3d 20 6e 75  f ((value1 == nu
bcb0: 6c 6c 29 20 7c 7c 20 28 76 61 6c 75 65 32 20 3d  ll) || (value2 =
bcc0: 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20  = null))..      
bcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
bce0: 74 75 72 6e 20 28 28 76 61 6c 75 65 31 20 3d 3d  turn ((value1 ==
bcf0: 20 6e 75 6c 6c 29 20 26 26 20 28 76 61 6c 75 65   null) && (value
bd00: 32 20 3d 3d 20 6e 75 6c 6c 29 29 3b 0d 0a 0d 0a  2 == null));....
bd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd20: 69 66 20 28 4f 62 6a 65 63 74 2e 52 65 66 65 72  if (Object.Refer
bd30: 65 6e 63 65 45 71 75 61 6c 73 28 76 61 6c 75 65  enceEquals(value
bd40: 31 2c 20 76 61 6c 75 65 32 29 29 0d 0a 20 20 20  1, value2))..   
bd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd60: 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d   return true;...
bd70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bd80: 20 54 79 70 65 20 74 79 70 65 31 20 3d 20 76 61   Type type1 = va
bd90: 6c 75 65 31 2e 47 65 74 54 79 70 65 28 29 3b 0d  lue1.GetType();.
bda0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bdb0: 20 54 79 70 65 20 74 79 70 65 32 20 3d 20 76 61   Type type2 = va
bdc0: 6c 75 65 32 2e 47 65 74 54 79 70 65 28 29 3b 0d  lue2.GetType();.
bdd0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
bde0: 20 20 20 69 66 20 28 21 4f 62 6a 65 63 74 2e 52     if (!Object.R
bdf0: 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28 74  eferenceEquals(t
be00: 79 70 65 31 2c 20 74 79 70 65 32 29 29 0d 0a 20  ype1, type2)).. 
be10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be20: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
be30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
be40: 20 20 20 20 69 66 20 28 74 79 70 65 31 20 3d 3d      if (type1 ==
be50: 20 74 79 70 65 6f 66 28 69 6e 74 29 29 20 2f 2f   typeof(int)) //
be60: 20 44 57 6f 72 64 0d 0a 20 20 20 20 20 20 20 20   DWord..        
be70: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
be80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
be90: 65 74 75 72 6e 20 28 28 69 6e 74 29 76 61 6c 75  eturn ((int)valu
bea0: 65 31 20 3d 3d 20 28 69 6e 74 29 76 61 6c 75 65  e1 == (int)value
beb0: 32 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  2);..           
bec0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
bed0: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
bee0: 28 74 79 70 65 31 20 3d 3d 20 74 79 70 65 6f 66  (type1 == typeof
bef0: 28 6c 6f 6e 67 29 29 20 2f 2f 20 51 57 6f 72 64  (long)) // QWord
bf00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bf10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
bf20: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
bf30: 28 28 6c 6f 6e 67 29 76 61 6c 75 65 31 20 3d 3d  ((long)value1 ==
bf40: 20 28 6c 6f 6e 67 29 76 61 6c 75 65 32 29 3b 0d   (long)value2);.
bf50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bf60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
bf70: 20 20 20 20 65 6c 73 65 20 69 66 20 28 74 79 70      else if (typ
bf80: 65 31 20 3d 3d 20 74 79 70 65 6f 66 28 73 74 72  e1 == typeof(str
bf90: 69 6e 67 29 29 20 2f 2f 20 53 74 72 69 6e 67 20  ing)) // String 
bfa0: 2f 20 45 78 70 61 6e 64 53 74 72 69 6e 67 0d 0a  / ExpandString..
bfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfc0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
bfd0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
bfe0: 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20  ring.Equals(..  
bff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c000: 20 20 20 20 20 20 28 73 74 72 69 6e 67 29 76 61        (string)va
c010: 6c 75 65 31 2c 20 28 73 74 72 69 6e 67 29 76 61  lue1, (string)va
c020: 6c 75 65 32 2c 0d 0a 20 20 20 20 20 20 20 20 20  lue2,..         
c030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
c040: 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
c050: 4f 72 64 69 6e 61 6c 29 3b 0d 0a 20 20 20 20 20  Ordinal);..     
c060: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
c070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
c080: 73 65 20 69 66 20 28 74 79 70 65 31 20 3d 3d 20  se if (type1 == 
c090: 74 79 70 65 6f 66 28 73 74 72 69 6e 67 5b 5d 29  typeof(string[])
c0a0: 29 20 2f 2f 20 4d 75 6c 74 69 53 74 72 69 6e 67  ) // MultiString
c0b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c0c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c0d0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b           string[
c0e0: 5d 20 61 72 72 61 79 31 20 3d 20 28 73 74 72 69  ] array1 = (stri
c0f0: 6e 67 5b 5d 29 76 61 6c 75 65 31 3b 0d 0a 20 20  ng[])value1;..  
c100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c110: 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 72 61 79    string[] array
c120: 32 20 3d 20 28 73 74 72 69 6e 67 5b 5d 29 76 61  2 = (string[])va
c130: 6c 75 65 32 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lue2;....       
c140: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
c150: 20 6c 65 6e 67 74 68 31 20 3d 20 61 72 72 61 79   length1 = array
c160: 31 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20  1.Length;....   
c170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c180: 20 69 66 20 28 6c 65 6e 67 74 68 31 20 21 3d 20   if (length1 != 
c190: 61 72 72 61 79 32 2e 4c 65 6e 67 74 68 29 0d 0a  array2.Length)..
c1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1b0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
c1c0: 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
c1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
c1e0: 20 28 69 6e 74 20 69 6e 64 65 78 31 20 3d 20 30   (int index1 = 0
c1f0: 3b 20 69 6e 64 65 78 31 20 3c 20 6c 65 6e 67 74  ; index1 < lengt
c200: 68 31 3b 20 69 6e 64 65 78 31 2b 2b 29 0d 0a 20  h1; index1++).. 
c210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c220: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
c240: 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73   (!String.Equals
c250: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
c260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c270: 20 20 20 61 72 72 61 79 31 5b 69 6e 64 65 78 31     array1[index1
c280: 5d 2c 20 61 72 72 61 79 32 5b 69 6e 64 65 78 31  ], array2[index1
c290: 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ],..            
c2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2b0: 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72      StringCompar
c2c0: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a  ison.Ordinal))..
c2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c300: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
c310: 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
c320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
c330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c340: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
c350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
c360: 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
c370: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
c380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
c390: 6c 73 65 20 69 66 20 28 74 79 70 65 31 20 3d 3d  lse if (type1 ==
c3a0: 20 74 79 70 65 6f 66 28 62 79 74 65 5b 5d 29 29   typeof(byte[]))
c3b0: 20 2f 2f 20 42 69 6e 61 72 79 0d 0a 20 20 20 20   // Binary..    
c3c0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
c3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3e0: 20 20 20 62 79 74 65 5b 5d 20 61 72 72 61 79 31     byte[] array1
c3f0: 20 3d 20 28 62 79 74 65 5b 5d 29 76 61 6c 75 65   = (byte[])value
c400: 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1;..            
c410: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 61          byte[] a
c420: 72 72 61 79 32 20 3d 20 28 62 79 74 65 5b 5d 29  rray2 = (byte[])
c430: 76 61 6c 75 65 32 3b 0d 0a 0d 0a 20 20 20 20 20  value2;....     
c440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
c450: 6e 74 20 6c 65 6e 67 74 68 31 20 3d 20 61 72 72  nt length1 = arr
c460: 61 79 31 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20  ay1.Length;.... 
c470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c480: 20 20 20 69 66 20 28 6c 65 6e 67 74 68 31 20 21     if (length1 !
c490: 3d 20 61 72 72 61 79 32 2e 4c 65 6e 67 74 68 29  = array2.Length)
c4a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c4b0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
c4c0: 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
c4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
c4e0: 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 31 20 3d  or (int index1 =
c4f0: 20 30 3b 20 69 6e 64 65 78 31 20 3c 20 6c 65 6e   0; index1 < len
c500: 67 74 68 31 3b 20 69 6e 64 65 78 31 2b 2b 29 0d  gth1; index1++).
c510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c520: 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72 72           if (arr
c530: 61 79 31 5b 69 6e 64 65 78 31 5d 20 21 3d 20 61  ay1[index1] != a
c540: 72 72 61 79 32 5b 69 6e 64 65 78 31 5d 29 0d 0a  rray2[index1])..
c550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c560: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
c570: 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
c580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c590: 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
c5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
c5b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c5c0: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
c5d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
c5e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c630: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
c640: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
c650: 20 69 6e 74 20 56 61 6c 75 65 48 61 73 68 43 6f   int ValueHashCo
c660: 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  de(..           
c670: 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
c680: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
c690: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
c6a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c6b0: 20 20 20 20 20 69 6e 74 20 72 65 73 75 6c 74 20       int result 
c6c0: 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  = 0;....        
c6d0: 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
c6e0: 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e != null)..    
c6f0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
c700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c710: 20 20 20 54 79 70 65 20 74 79 70 65 20 3d 20 76     Type type = v
c720: 61 6c 75 65 2e 47 65 74 54 79 70 65 28 29 3b 0d  alue.GetType();.
c730: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
c740: 20 20 20 20 20 20 20 69 66 20 28 28 74 79 70 65         if ((type
c750: 20 3d 3d 20 74 79 70 65 6f 66 28 69 6e 74 29 29   == typeof(int))
c760: 20 7c 7c 20 2f 2f 20 44 57 6f 72 64 0d 0a 20 20   || // DWord..  
c770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c780: 20 20 20 20 20 20 28 74 79 70 65 20 3d 3d 20 74        (type == t
c790: 79 70 65 6f 66 28 6c 6f 6e 67 29 29 20 7c 7c 20  ypeof(long)) || 
c7a0: 2f 2f 20 51 57 6f 72 64 0d 0a 20 20 20 20 20 20  // QWord..      
c7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7c0: 20 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f    (type == typeo
c7d0: 66 28 73 74 72 69 6e 67 29 29 29 20 2f 2f 20 53  f(string))) // S
c7e0: 74 72 69 6e 67 20 2f 20 45 78 70 61 6e 64 53 74  tring / ExpandSt
c7f0: 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  ring..          
c800: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
c810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c820: 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 76 61       result = va
c830: 6c 75 65 2e 47 65 74 48 61 73 68 43 6f 64 65 28  lue.GetHashCode(
c840: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
c850: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
c860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
c870: 6c 73 65 20 69 66 20 28 28 74 79 70 65 20 3d 3d  lse if ((type ==
c880: 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 5b 5d   typeof(string[]
c890: 29 29 20 7c 7c 20 2f 2f 20 4d 75 6c 74 69 53 74  )) || // MultiSt
c8a0: 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  ring..          
c8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 74                (t
c8c0: 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 62 79  ype == typeof(by
c8d0: 74 65 5b 5d 29 29 29 20 2f 2f 20 42 69 6e 61 72  te[]))) // Binar
c8e0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
c8f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c910: 20 20 41 72 72 61 79 20 61 72 72 61 79 20 3d 20    Array array = 
c920: 28 41 72 72 61 79 29 76 61 6c 75 65 3b 0d 0a 20  (Array)value;.. 
c930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c940: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74         int lengt
c950: 68 20 3d 20 61 72 72 61 79 2e 4c 65 6e 67 74 68  h = array.Length
c960: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
c970: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
c980: 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b   (int index = 0;
c990: 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68 3b   index < length;
c9a0: 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20   index++)..     
c9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9e0: 20 20 6f 62 6a 65 63 74 20 65 6c 65 6d 65 6e 74    object element
c9f0: 20 3d 20 61 72 72 61 79 2e 47 65 74 56 61 6c 75   = array.GetValu
ca00: 65 28 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20  e(index);....   
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca20: 20 20 20 20 20 20 20 20 20 69 66 20 28 65 6c 65           if (ele
ca30: 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ment == null).. 
ca40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
ca60: 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
ca70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca80: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 5e          result ^
ca90: 3d 20 65 6c 65 6d 65 6e 74 2e 47 65 74 48 61 73  = element.GetHas
caa0: 68 43 6f 64 65 28 29 3b 0d 0a 20 20 20 20 20 20  hCode();..      
cab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cac0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
cad0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
cae0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
caf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cb00: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
cb10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
cb20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
cb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb70: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
cb80: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
cb90: 74 72 69 6e 67 20 56 61 6c 75 65 54 6f 53 74 72  tring ValueToStr
cba0: 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ing(..          
cbb0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
cbc0: 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue,..           
cbd0: 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 6c 69       string deli
cbe0: 6d 69 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  miter,..        
cbf0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
cc00: 75 6c 6c 56 61 6c 75 65 0d 0a 20 20 20 20 20 20  ullValue..      
cc10: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
cc20: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
cc30: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
cc40: 6e 67 20 72 65 73 75 6c 74 20 3d 20 6e 75 6c 6c  ng result = null
cc50: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
cc60: 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 21       if (value !
cc70: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
cc80: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
cc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cca0: 54 79 70 65 20 74 79 70 65 20 3d 20 76 61 6c 75  Type type = valu
ccb0: 65 2e 47 65 74 54 79 70 65 28 29 3b 0d 0a 0d 0a  e.GetType();....
ccc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccd0: 20 20 20 20 69 66 20 28 28 74 79 70 65 20 3d 3d      if ((type ==
cce0: 20 74 79 70 65 6f 66 28 69 6e 74 29 29 20 7c 7c   typeof(int)) ||
ccf0: 20 2f 2f 20 44 57 6f 72 64 0d 0a 20 20 20 20 20   // DWord..     
cd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd10: 20 20 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65     (type == type
cd20: 6f 66 28 6c 6f 6e 67 29 29 20 7c 7c 20 2f 2f 20  of(long)) || // 
cd30: 51 57 6f 72 64 0d 0a 20 20 20 20 20 20 20 20 20  QWord..         
cd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
cd50: 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 73  type == typeof(s
cd60: 74 72 69 6e 67 29 29 29 20 2f 2f 20 53 74 72 69  tring))) // Stri
cd70: 6e 67 20 2f 20 45 78 70 61 6e 64 53 74 72 69 6e  ng / ExpandStrin
cd80: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g..             
cd90: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
cda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdb0: 20 20 72 65 73 75 6c 74 20 3d 20 76 61 6c 75 65    result = value
cdc0: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
cdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cde0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
cdf0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
ce00: 20 28 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f   ((type == typeo
ce10: 66 28 73 74 72 69 6e 67 5b 5d 29 29 20 7c 7c 20  f(string[])) || 
ce20: 2f 2f 20 4d 75 6c 74 69 53 74 72 69 6e 67 0d 0a  // MultiString..
ce30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce40: 20 20 20 20 20 20 20 20 28 74 79 70 65 20 3d 3d          (type ==
ce50: 20 74 79 70 65 6f 66 28 62 79 74 65 5b 5d 29 29   typeof(byte[]))
ce60: 29 20 2f 2f 20 42 69 6e 61 72 79 0d 0a 20 20 20  ) // Binary..   
ce70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ce90: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
cea0: 6e 67 42 75 69 6c 64 65 72 20 62 75 69 6c 64 65  ngBuilder builde
ceb0: 72 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75  r = new StringBu
cec0: 69 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20 20 20  ilder();..      
ced0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cee0: 20 20 41 72 72 61 79 20 61 72 72 61 79 20 3d 20    Array array = 
cef0: 28 41 72 72 61 79 29 76 61 6c 75 65 3b 0d 0a 20  (Array)value;.. 
cf00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf10: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74         int lengt
cf20: 68 20 3d 20 61 72 72 61 79 2e 4c 65 6e 67 74 68  h = array.Length
cf30: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
cf40: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
cf50: 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b   (int index = 0;
cf60: 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68 3b   index < length;
cf70: 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20   index++)..     
cf80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
cfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cfb0: 20 20 69 66 20 28 28 69 6e 64 65 78 20 3e 20 30    if ((index > 0
cfc0: 29 20 26 26 20 28 64 65 6c 69 6d 69 74 65 72 20  ) && (delimiter 
cfd0: 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  != null))..     
cfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cff0: 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64             build
d000: 65 72 2e 41 70 70 65 6e 64 28 64 65 6c 69 6d 69  er.Append(delimi
d010: 74 65 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ter);....       
d020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d030: 20 20 20 20 20 6f 62 6a 65 63 74 20 65 6c 65 6d       object elem
d040: 65 6e 74 20 3d 20 61 72 72 61 79 2e 47 65 74 56  ent = array.GetV
d050: 61 6c 75 65 28 69 6e 64 65 78 29 3b 0d 0a 0d 0a  alue(index);....
d060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d070: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
d080: 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29  element == null)
d090: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
d0b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0d0: 20 69 66 20 28 6e 75 6c 6c 56 61 6c 75 65 20 21   if (nullValue !
d0e0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
d0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d100: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69               bui
d110: 6c 64 65 72 2e 41 70 70 65 6e 64 28 6e 75 6c 6c  lder.Append(null
d120: 56 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  Value);....     
d130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d140: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
d150: 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
d160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d170: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
d180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d190: 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e     builder.Appen
d1a0: 64 28 65 6c 65 6d 65 6e 74 2e 54 6f 53 74 72 69  d(element.ToStri
d1b0: 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ng());..        
d1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1d0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
d1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
d1f0: 75 6c 74 20 3d 20 62 75 69 6c 64 65 72 2e 54 6f  ult = builder.To
d200: 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20  String();..     
d210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
d220: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d230: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
d240: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
d250: 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  sult;..         
d260: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
d270: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
d280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2b0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
d2c0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
d2d0: 61 74 69 63 20 62 6f 6f 6c 20 45 71 75 61 6c 73  atic bool Equals
d2e0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
d2f0: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
d300: 65 79 20 6b 65 79 31 2c 0d 0a 20 20 20 20 20 20  ey key1,..      
d310: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
d320: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 32 0d 0a  gistryKey key2..
d330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d340: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
d350: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d360: 20 20 69 66 20 28 28 6b 65 79 31 20 3d 3d 20 6e    if ((key1 == n
d370: 75 6c 6c 29 20 7c 7c 20 28 6b 65 79 32 20 3d 3d  ull) || (key2 ==
d380: 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
d390: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
d3a0: 75 72 6e 20 28 28 6b 65 79 31 20 3d 3d 20 6e 75  urn ((key1 == nu
d3b0: 6c 6c 29 20 26 26 20 28 6b 65 79 32 20 3d 3d 20  ll) && (key2 == 
d3c0: 6e 75 6c 6c 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  null));....     
d3d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 4f             if (O
d3e0: 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45  bject.ReferenceE
d3f0: 71 75 61 6c 73 28 6b 65 79 31 2c 20 6b 65 79 32  quals(key1, key2
d400: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
d410: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
d420: 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
d430: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4e          return N
d440: 61 6d 65 45 71 75 61 6c 73 28 6b 65 79 31 2e 4e  ameEquals(key1.N
d450: 61 6d 65 2c 20 6b 65 79 32 2e 4e 61 6d 65 29 3b  ame, key2.Name);
d460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
d470: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
d480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4c0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
d4d0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
d4e0: 69 6e 74 20 47 65 74 48 61 73 68 43 6f 64 65 28  int GetHashCode(
d4f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d500: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
d510: 79 20 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20  y key..         
d520: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
d530: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
d540: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
d550: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
d560: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
d570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d580: 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 20 3d 20    string name = 
d590: 6b 65 79 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  key.Name;....   
d5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5b0: 20 69 66 20 28 6e 61 6d 65 20 21 3d 20 6e 75 6c   if (name != nul
d5c0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
d5d0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
d5e0: 72 6e 20 6e 61 6d 65 2e 47 65 74 48 61 73 68 43  rn name.GetHashC
d5f0: 6f 64 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ode();..        
d600: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
d610: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
d620: 75 72 6e 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  urn 0;..        
d630: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
d640: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
d650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
d660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d6a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d6b0: 23 72 65 67 69 6f 6e 20 49 6d 70 6c 69 63 69 74  #region Implicit
d6c0: 20 43 6f 6e 76 65 72 73 69 6f 6e 20 4f 70 65 72   Conversion Oper
d6d0: 61 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20  ators..         
d6e0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
d6f0: 20 20 20 2f 2f 20 42 55 47 42 55 47 3a 20 52 65     // BUGBUG: Re
d700: 6d 6f 76 65 20 6d 65 3f 20 20 54 68 69 73 20 73  move me?  This s
d710: 68 6f 75 6c 64 20 62 65 20 73 61 66 65 20 62 65  hould be safe be
d720: 63 61 75 73 65 20 69 6e 20 22 77 68 61 74 2d 69  cause in "what-i
d730: 66 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f"..            
d740: 2f 2f 20 20 20 20 20 20 20 20 20 6d 6f 64 65 20  //         mode 
d750: 61 6c 6c 20 6b 65 79 73 20 61 72 65 20 6f 70 65  all keys are ope
d760: 6e 65 64 20 72 65 61 64 2d 6f 6e 6c 79 2e 0d 0a  ned read-only...
d770: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
d780: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
d790: 69 63 20 73 74 61 74 69 63 20 69 6d 70 6c 69 63  ic static implic
d7a0: 69 74 20 6f 70 65 72 61 74 6f 72 20 52 65 67 69  it operator Regi
d7b0: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
d7c0: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
d7d0: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20  gistryKey key.. 
d7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
d7f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
d800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d810: 20 72 65 74 75 72 6e 20 28 6b 65 79 20 21 3d 20   return (key != 
d820: 6e 75 6c 6c 29 20 3f 20 6b 65 79 2e 4b 65 79 20  null) ? key.Key 
d830: 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  : null;..       
d840: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
d850: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
d860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
d870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d8b0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
d8c0: 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
d8d0: 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d  able "Pattern" M
d8e0: 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20  embers..        
d8f0: 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
d900: 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20   disposed;..    
d910: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
d920: 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73  void CheckDispos
d930: 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  ed() /* throw */
d940: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
d950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d960: 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d   if (!disposed).
d970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d980: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
d990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9a0: 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74  throw new Object
d9b0: 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f  DisposedExceptio
d9c0: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
d9d0: 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 4d          typeof(M
d9e0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 29 2e  ockRegistryKey).
d9f0: 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
da00: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
da10: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
da20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da50: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
da60: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
da70: 2f 2a 20 70 72 6f 74 65 63 74 65 64 20 76 69 72  /* protected vir
da80: 74 75 61 6c 20 2a 2f 20 76 6f 69 64 20 44 69 73  tual */ void Dis
da90: 70 6f 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20  pose(..         
daa0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 73 70         bool disp
dab0: 6f 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  osing..         
dac0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
dad0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
dae0: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69           if (!di
daf0: 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20  sposed)..       
db00: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
db10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db20: 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a  if (disposing)..
db30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
db50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
db60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db80: 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
db90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
dba0: 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20  dispose managed 
dbb0: 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e  resources here..
dbc0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
dbd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
dbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
dc00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
dc10: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
dc20: 65 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey != null)..   
dc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc40: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
dc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc60: 20 20 20 20 69 66 20 28 21 6e 6f 43 6c 6f 73 65      if (!noClose
dc70: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
dc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc90: 20 20 20 6b 65 79 2e 43 6c 6f 73 65 28 29 3b 0d     key.Close();.
dca0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
dcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
dcc0: 65 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  ey = null;..    
dcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dce0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
dcf0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
dd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd10: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
dd20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dd30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
dd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd50: 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e  // release unman
dd60: 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68  aged resources h
dd70: 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20  ere.....        
dd80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
dd90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dda0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ddb0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
ddc0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
ddd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dde0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20    // NOTE: This 
ddf0: 6f 62 6a 65 63 74 20 69 73 20 6e 6f 77 20 64 69  object is now di
de00: 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20  sposed...       
de10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
de20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
de30: 20 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20       disposed = 
de40: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
de50: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
de60: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
de70: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
de80: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
de90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
deb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ded0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
dee0: 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f    #region IDispo
def0: 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20  sable Members.. 
df00: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
df10: 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29  c void Dispose()
df20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
df30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
df40: 20 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d   Dispose(true);.
df50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
df60: 20 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61   GC.SuppressFina
df70: 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20  lize(this);..   
df80: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
df90: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
dfa0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
dfb0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
dfc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dfd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dfe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dff0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
e000: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65 73       #region Des
e010: 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20 20  tructor..       
e020: 20 20 20 20 20 7e 4d 6f 63 6b 52 65 67 69 73 74       ~MockRegist
e030: 72 79 4b 65 79 28 29 0d 0a 20 20 20 20 20 20 20  ryKey()..       
e040: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e050: 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28          Dispose(
e060: 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  false);..       
e070: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e080: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
e090: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e0a0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
e0b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
e0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e100: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
e110: 69 6f 6e 20 52 65 67 69 73 74 72 79 52 6f 6f 74  ion RegistryRoot
e120: 4b 65 79 4e 61 6d 65 73 20 43 6c 61 73 73 0d 0a  KeyNames Class..
e130: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
e140: 73 74 61 74 69 63 20 63 6c 61 73 73 20 52 65 67  static class Reg
e150: 69 73 74 72 79 52 6f 6f 74 4b 65 79 4e 61 6d 65  istryRootKeyName
e160: 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  s..        {..  
e170: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
e180: 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 48 4b   const string HK
e190: 45 59 5f 43 4c 41 53 53 45 53 5f 52 4f 4f 54 20  EY_CLASSES_ROOT 
e1a0: 3d 20 22 48 4b 45 59 5f 43 4c 41 53 53 45 53 5f  = "HKEY_CLASSES_
e1b0: 52 4f 4f 54 22 3b 0d 0a 20 20 20 20 20 20 20 20  ROOT";..        
e1c0: 20 20 20 20 70 75 62 6c 69 63 20 63 6f 6e 73 74      public const
e1d0: 20 73 74 72 69 6e 67 20 48 4b 43 52 20 3d 20 22   string HKCR = "
e1e0: 48 4b 43 52 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  HKCR";....      
e1f0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
e200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
e240: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
e250: 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 48 4b 45  const string HKE
e260: 59 5f 43 55 52 52 45 4e 54 5f 43 4f 4e 46 49 47  Y_CURRENT_CONFIG
e270: 20 3d 20 22 48 4b 45 59 5f 43 55 52 52 45 4e 54   = "HKEY_CURRENT
e280: 5f 43 4f 4e 46 49 47 22 3b 0d 0a 20 20 20 20 20  _CONFIG";..     
e290: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 63 6f         public co
e2a0: 6e 73 74 20 73 74 72 69 6e 67 20 48 4b 43 43 20  nst string HKCC 
e2b0: 3d 20 22 48 4b 43 43 22 3b 0d 0a 0d 0a 20 20 20  = "HKCC";....   
e2c0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
e2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
e310: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
e320: 69 63 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  ic const string 
e330: 48 4b 45 59 5f 43 55 52 52 45 4e 54 5f 55 53 45  HKEY_CURRENT_USE
e340: 52 20 3d 20 22 48 4b 45 59 5f 43 55 52 52 45 4e  R = "HKEY_CURREN
e350: 54 5f 55 53 45 52 22 3b 0d 0a 20 20 20 20 20 20  T_USER";..      
e360: 20 20 20 20 20 20 70 75 62 6c 69 63 20 63 6f 6e        public con
e370: 73 74 20 73 74 72 69 6e 67 20 48 4b 43 55 20 3d  st string HKCU =
e380: 20 22 48 4b 43 55 22 3b 0d 0a 0d 0a 20 20 20 20   "HKCU";....    
e390: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
e3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
e3e0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
e3f0: 63 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 48  c const string H
e400: 4b 45 59 5f 44 59 4e 5f 44 41 54 41 20 3d 20 22  KEY_DYN_DATA = "
e410: 48 4b 45 59 5f 44 59 4e 5f 44 41 54 41 22 3b 0d  HKEY_DYN_DATA";.
e420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
e430: 6c 69 63 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  lic const string
e440: 20 48 4b 44 44 20 3d 20 22 48 4b 44 44 22 3b 0d   HKDD = "HKDD";.
e450: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
e460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e4a0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
e4b0: 20 20 70 75 62 6c 69 63 20 63 6f 6e 73 74 20 73    public const s
e4c0: 74 72 69 6e 67 20 48 4b 45 59 5f 4c 4f 43 41 4c  tring HKEY_LOCAL
e4d0: 5f 4d 41 43 48 49 4e 45 20 3d 20 22 48 4b 45 59  _MACHINE = "HKEY
e4e0: 5f 4c 4f 43 41 4c 5f 4d 41 43 48 49 4e 45 22 3b  _LOCAL_MACHINE";
e4f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
e500: 62 6c 69 63 20 63 6f 6e 73 74 20 73 74 72 69 6e  blic const strin
e510: 67 20 48 4b 4c 4d 20 3d 20 22 48 4b 4c 4d 22 3b  g HKLM = "HKLM";
e520: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e570: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
e580: 20 20 20 70 75 62 6c 69 63 20 63 6f 6e 73 74 20     public const 
e590: 73 74 72 69 6e 67 20 48 4b 45 59 5f 50 45 52 46  string HKEY_PERF
e5a0: 4f 52 4d 41 4e 43 45 5f 44 41 54 41 20 3d 20 22  ORMANCE_DATA = "
e5b0: 48 4b 45 59 5f 50 45 52 46 4f 52 4d 41 4e 43 45  HKEY_PERFORMANCE
e5c0: 5f 44 41 54 41 22 3b 0d 0a 20 20 20 20 20 20 20  _DATA";..       
e5d0: 20 20 20 20 20 70 75 62 6c 69 63 20 63 6f 6e 73       public cons
e5e0: 74 20 73 74 72 69 6e 67 20 48 4b 50 44 20 3d 20  t string HKPD = 
e5f0: 22 48 4b 50 44 22 3b 0d 0a 0d 0a 20 20 20 20 20  "HKPD";....     
e600: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
e610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
e650: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
e660: 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 48 4b   const string HK
e670: 45 59 5f 55 53 45 52 53 20 3d 20 22 48 4b 45 59  EY_USERS = "HKEY
e680: 5f 55 53 45 52 53 22 3b 0d 0a 20 20 20 20 20 20  _USERS";..      
e690: 20 20 20 20 20 20 70 75 62 6c 69 63 20 63 6f 6e        public con
e6a0: 73 74 20 73 74 72 69 6e 67 20 48 4b 55 20 3d 20  st string HKU = 
e6b0: 22 48 4b 55 22 3b 0d 0a 20 20 20 20 20 20 20 20  "HKU";..        
e6c0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
e6d0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
e6e0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
e6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e720: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
e730: 20 20 20 20 23 72 65 67 69 6f 6e 20 52 65 67 69      #region Regi
e740: 73 74 72 79 48 65 6c 70 65 72 20 43 6c 61 73 73  stryHelper Class
e750: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
e760: 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61  n Private Consta
e770: 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  nts..        pri
e780: 76 61 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20  vate const char 
e790: 4b 65 79 4e 61 6d 65 53 65 70 61 72 61 74 6f 72  KeyNameSeparator
e7a0: 20 3d 20 27 5c 5c 27 3b 0d 0a 0d 0a 20 20 20 20   = '\\';....    
e7b0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
e7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
e800: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
e810: 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 63  tatic readonly c
e820: 68 61 72 5b 5d 20 4b 65 79 4e 61 6d 65 53 65 70  har[] KeyNameSep
e830: 61 72 61 74 6f 72 73 20 3d 20 7b 0d 0a 20 20 20  arators = {..   
e840: 20 20 20 20 20 20 20 20 20 4b 65 79 4e 61 6d 65           KeyName
e850: 53 65 70 61 72 61 74 6f 72 0d 0a 20 20 20 20 20  Separator..     
e860: 20 20 20 7d 3b 0d 0a 20 20 20 20 20 20 20 20 23     };..        #
e870: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
e880: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
e890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
e8d0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
e8e0: 73 74 61 74 69 63 20 63 6c 61 73 73 20 52 65 67  static class Reg
e8f0: 69 73 74 72 79 48 65 6c 70 65 72 0d 0a 20 20 20  istryHelper..   
e900: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e910: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
e920: 61 74 65 20 44 61 74 61 0d 0a 20 20 20 20 20 20  ate Data..      
e930: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
e940: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
e950: 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 73  his is used to s
e960: 79 6e 63 68 72 6f 6e 69 7a 65 20 61 63 63 65 73  ynchronize acces
e970: 73 20 74 6f 20 74 68 65 20 6c 69 73 74 20 6f 66  s to the list of
e980: 20 6c 6f 67 67 65 64 0d 0a 20 20 20 20 20 20 20   logged..       
e990: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72 65       //       re
e9a0: 67 69 73 74 72 79 20 6f 70 65 72 61 74 69 6f 6e  gistry operation
e9b0: 73 20 28 6a 75 73 74 20 62 65 6c 6f 77 29 2e 0d  s (just below)..
e9c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
e9d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
e9e0: 76 61 74 65 20 73 74 61 74 69 63 20 6f 62 6a 65  vate static obje
e9f0: 63 74 20 73 79 6e 63 52 6f 6f 74 20 3d 20 6e 65  ct syncRoot = ne
ea00: 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 0d 0a 20  w object();.... 
ea10: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
ea20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
ea30: 54 45 3a 20 54 68 69 73 20 69 73 20 74 68 65 20  TE: This is the 
ea40: 6c 69 73 74 20 6f 66 20 72 65 67 69 73 74 72 79  list of registry
ea50: 20 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e   write operation
ea60: 73 20 77 68 65 6e 20 69 74 20 69 73 0d 0a 20 20  s when it is..  
ea70: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
ea80: 20 20 20 73 65 74 20 74 6f 20 6e 6f 6e 2d 6e 75     set to non-nu
ea90: 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll...           
eaa0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
eab0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
eac0: 52 65 67 69 73 74 72 79 4f 70 65 72 61 74 69 6f  RegistryOperatio
ead0: 6e 4c 69 73 74 20 6f 70 65 72 61 74 69 6f 6e 4c  nList operationL
eae0: 69 73 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ist;..          
eaf0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
eb00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
eb10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
eb50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
eb60: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74  region Public St
eb70: 61 74 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d  atic Properties.
eb80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
eb90: 76 61 74 65 20 73 74 61 74 69 63 20 4d 6f 63 6b  vate static Mock
eba0: 52 65 67 69 73 74 72 79 20 72 65 61 64 4f 6e 6c  Registry readOnl
ebb0: 79 52 65 67 69 73 74 72 79 3b 0d 0a 20 20 20 20  yRegistry;..    
ebc0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
ebd0: 74 61 74 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  tatic MockRegist
ebe0: 72 79 20 52 65 61 64 4f 6e 6c 79 52 65 67 69 73  ry ReadOnlyRegis
ebf0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
ec00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ec10: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
ec20: 20 72 65 61 64 4f 6e 6c 79 52 65 67 69 73 74 72   readOnlyRegistr
ec30: 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
ec40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
ec50: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
ec60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec90: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
eca0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
ecb0: 61 74 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  atic MockRegistr
ecc0: 79 20 72 65 61 64 57 72 69 74 65 52 65 67 69 73  y readWriteRegis
ecd0: 74 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  try;..          
ece0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
ecf0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 52 65 61  MockRegistry Rea
ed00: 64 57 72 69 74 65 52 65 67 69 73 74 72 79 0d 0a  dWriteRegistry..
ed10: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ed20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
ed30: 65 74 20 7b 20 72 65 74 75 72 6e 20 72 65 61 64  et { return read
ed40: 57 72 69 74 65 52 65 67 69 73 74 72 79 3b 20 7d  WriteRegistry; }
ed50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
ed60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
ed70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eda0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
edb0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
edc0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
edd0: 20 69 6e 74 20 73 75 62 4b 65 79 73 43 72 65 61   int subKeysCrea
ede0: 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ted;..          
edf0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
ee00: 69 6e 74 20 53 75 62 4b 65 79 73 43 72 65 61 74  int SubKeysCreat
ee10: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..            
ee20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
ee30: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
ee40: 73 75 62 4b 65 79 73 43 72 65 61 74 65 64 3b 20  subKeysCreated; 
ee50: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
ee60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ee70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eeb0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
eec0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
eed0: 63 20 69 6e 74 20 73 75 62 4b 65 79 73 44 65 6c  c int subKeysDel
eee0: 65 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  eted;..         
eef0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
ef00: 20 69 6e 74 20 53 75 62 4b 65 79 73 44 65 6c 65   int SubKeysDele
ef10: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ted..           
ef20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ef30: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
ef40: 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64 3b   subKeysDeleted;
ef50: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
ef60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
ef70: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
ef80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efb0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
efc0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
efd0: 69 63 20 69 6e 74 20 6b 65 79 56 61 6c 75 65 73  ic int keyValues
efe0: 52 65 61 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  Read;..         
eff0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
f000: 20 69 6e 74 20 4b 65 79 56 61 6c 75 65 73 52 65   int KeyValuesRe
f010: 61 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ad..            
f020: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
f030: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
f040: 6b 65 79 56 61 6c 75 65 73 52 65 61 64 3b 20 7d  keyValuesRead; }
f050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
f060: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
f070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f0b0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
f0c0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
f0d0: 20 69 6e 74 20 6b 65 79 56 61 6c 75 65 73 57 72   int keyValuesWr
f0e0: 69 74 74 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20  itten;..        
f0f0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
f100: 63 20 69 6e 74 20 4b 65 79 56 61 6c 75 65 73 57  c int KeyValuesW
f110: 72 69 74 74 65 6e 0d 0a 20 20 20 20 20 20 20 20  ritten..        
f120: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f130: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
f140: 75 72 6e 20 6b 65 79 56 61 6c 75 65 73 57 72 69  urn keyValuesWri
f150: 74 74 65 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 20  tten; }..       
f160: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
f170: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
f180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
f1c0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
f1d0: 20 73 74 61 74 69 63 20 69 6e 74 20 6b 65 79 56   static int keyV
f1e0: 61 6c 75 65 73 44 65 6c 65 74 65 64 3b 0d 0a 20  aluesDeleted;.. 
f1f0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
f200: 63 20 73 74 61 74 69 63 20 69 6e 74 20 4b 65 79  c static int Key
f210: 56 61 6c 75 65 73 44 65 6c 65 74 65 64 0d 0a 20  ValuesDeleted.. 
f220: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
f230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
f240: 74 20 7b 20 72 65 74 75 72 6e 20 6b 65 79 56 61  t { return keyVa
f250: 6c 75 65 73 44 65 6c 65 74 65 64 3b 20 7d 0d 0a  luesDeleted; }..
f260: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
f270: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
f280: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
f290: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
f2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f2d0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
f2e0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
f2f0: 50 75 62 6c 69 63 20 53 74 61 74 69 63 20 4d 65  Public Static Me
f300: 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20  thods..         
f310: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
f320: 20 76 6f 69 64 20 45 6e 61 62 6c 65 4f 72 44 69   void EnableOrDi
f330: 73 61 62 6c 65 4f 70 65 72 61 74 69 6f 6e 4c 69  sableOperationLi
f340: 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st(..           
f350: 20 20 20 20 20 62 6f 6f 6c 20 65 6e 61 62 6c 65       bool enable
f360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f370: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
f380: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f390: 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f      lock (syncRo
f3a0: 6f 74 29 20 2f 2a 20 54 52 41 4e 53 41 43 54 49  ot) /* TRANSACTI
f3b0: 4f 4e 41 4c 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ONAL */..       
f3c0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
f3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3e0: 69 66 20 28 65 6e 61 62 6c 65 29 0d 0a 20 20 20  if (enable)..   
f3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f400: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f410: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
f420: 6f 70 65 72 61 74 69 6f 6e 4c 69 73 74 20 3d 3d  operationList ==
f430: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
f440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f450: 20 20 20 20 6f 70 65 72 61 74 69 6f 6e 4c 69 73      operationLis
f460: 74 20 3d 20 6e 65 77 20 52 65 67 69 73 74 72 79  t = new Registry
f470: 4f 70 65 72 61 74 69 6f 6e 4c 69 73 74 28 29 3b  OperationList();
f480: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f490: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
f4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
f4b0: 65 20 69 66 20 28 6f 70 65 72 61 74 69 6f 6e 4c  e if (operationL
f4c0: 69 73 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ist != null)..  
f4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 65               ope
f500: 72 61 74 69 6f 6e 4c 69 73 74 2e 44 69 73 70 6f  rationList.Dispo
f510: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  se();..         
f520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
f530: 70 65 72 61 74 69 6f 6e 4c 69 73 74 20 3d 20 6e  perationList = n
f540: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
f550: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
f560: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
f570: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
f580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
f590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f5d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f5e0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
f5f0: 69 64 20 52 65 69 6e 69 74 69 61 6c 69 7a 65 44  id ReinitializeD
f600: 65 66 61 75 6c 74 52 65 67 69 73 74 72 69 65 73  efaultRegistries
f610: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
f620: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
f630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f640: 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20 20   bool safe..    
f650: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
f660: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
f670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
f680: 20 28 72 65 61 64 4f 6e 6c 79 52 65 67 69 73 74   (readOnlyRegist
f690: 72 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ry != null)..   
f6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
f6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6c0: 20 20 20 20 72 65 61 64 4f 6e 6c 79 52 65 67 69      readOnlyRegi
f6d0: 73 74 72 79 2e 44 69 73 70 6f 73 65 28 29 3b 0d  stry.Dispose();.
f6e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f6f0: 20 20 20 20 20 72 65 61 64 4f 6e 6c 79 52 65 67       readOnlyReg
f700: 69 73 74 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  istry = null;.. 
f710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
f720: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f730: 20 20 20 20 69 66 20 28 72 65 61 64 57 72 69 74      if (readWrit
f740: 65 52 65 67 69 73 74 72 79 20 21 3d 20 6e 75 6c  eRegistry != nul
f750: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
f760: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f770: 20 20 20 20 20 20 20 20 20 20 20 72 65 61 64 57             readW
f780: 72 69 74 65 52 65 67 69 73 74 72 79 2e 44 69 73  riteRegistry.Dis
f790: 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  pose();..       
f7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 61               rea
f7b0: 64 57 72 69 74 65 52 65 67 69 73 74 72 79 20 3d  dWriteRegistry =
f7c0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
f7d0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
f7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 61               rea
f7f0: 64 4f 6e 6c 79 52 65 67 69 73 74 72 79 20 3d 20  dOnlyRegistry = 
f800: 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  new MockRegistry
f810: 28 77 68 61 74 49 66 2c 20 74 72 75 65 2c 20 73  (whatIf, true, s
f820: 61 66 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  afe);..         
f830: 20 20 20 20 20 20 20 72 65 61 64 57 72 69 74 65         readWrite
f840: 52 65 67 69 73 74 72 79 20 3d 20 6e 65 77 20 4d  Registry = new M
f850: 6f 63 6b 52 65 67 69 73 74 72 79 28 77 68 61 74  ockRegistry(what
f860: 49 66 2c 20 66 61 6c 73 65 2c 20 73 61 66 65 29  If, false, safe)
f870: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
f880: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f8d0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
f8e0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
f8f0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
f900: 20 47 65 74 52 65 61 64 4f 6e 6c 79 52 6f 6f 74   GetReadOnlyRoot
f910: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
f920: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
f930: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
f940: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
f950: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f960: 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 52       return GetR
f970: 6f 6f 74 4b 65 79 28 72 65 61 64 4f 6e 6c 79 52  ootKey(readOnlyR
f980: 65 67 69 73 74 72 79 2c 20 6e 61 6d 65 29 3b 0d  egistry, name);.
f990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
f9a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
f9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9f0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
fa00: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 4d   public static M
fa10: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 47  ockRegistryKey G
fa20: 65 74 52 65 61 64 57 72 69 74 65 52 6f 6f 74 4b  etReadWriteRootK
fa30: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
fa40: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
fa50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fa60: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
fa70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
fa80: 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 52 6f      return GetRo
fa90: 6f 74 4b 65 79 28 72 65 61 64 57 72 69 74 65 52  otKey(readWriteR
faa0: 65 67 69 73 74 72 79 2c 20 6e 61 6d 65 29 3b 0d  egistry, name);.
fab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
fac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
fad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
faf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb10: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
fb20: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 4d   public static M
fb30: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 47  ockRegistryKey G
fb40: 65 74 52 6f 6f 74 4b 65 79 28 0d 0a 20 20 20 20  etRootKey(..    
fb50: 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
fb60: 52 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72  Registry registr
fb70: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
fb80: 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 0d      string name.
fb90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fba0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
fbb0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
fbc0: 20 20 20 69 66 20 28 72 65 67 69 73 74 72 79 20     if (registry 
fbd0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
fbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
fbf0: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
fc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
fc10: 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
fc20: 79 2e 4e 61 6d 65 45 71 75 61 6c 73 28 0d 0a 20  y.NameEquals(.. 
fc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc40: 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 52 65 67         name, Reg
fc50: 69 73 74 72 79 52 6f 6f 74 4b 65 79 4e 61 6d 65  istryRootKeyName
fc60: 73 2e 48 4b 45 59 5f 43 4c 41 53 53 45 53 5f 52  s.HKEY_CLASSES_R
fc70: 4f 4f 54 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20  OOT) ||..       
fc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
fc90: 6b 52 65 67 69 73 74 72 79 4b 65 79 2e 4e 61 6d  kRegistryKey.Nam
fca0: 65 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20 20  eEquals(..      
fcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fcc0: 20 20 6e 61 6d 65 2c 20 52 65 67 69 73 74 72 79    name, Registry
fcd0: 52 6f 6f 74 4b 65 79 4e 61 6d 65 73 2e 48 4b 43  RootKeyNames.HKC
fce0: 52 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  R))..           
fcf0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
fd00: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
fd10: 72 6e 20 72 65 67 69 73 74 72 79 2e 43 6c 61 73  rn registry.Clas
fd20: 73 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 20  sesRoot;..      
fd30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
fd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
fd50: 65 20 69 66 20 28 4d 6f 63 6b 52 65 67 69 73 74  e if (MockRegist
fd60: 72 79 4b 65 79 2e 4e 61 6d 65 45 71 75 61 6c 73  ryKey.NameEquals
fd70: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
fd80: 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c             name,
fd90: 20 52 65 67 69 73 74 72 79 52 6f 6f 74 4b 65 79   RegistryRootKey
fda0: 4e 61 6d 65 73 2e 48 4b 45 59 5f 43 55 52 52 45  Names.HKEY_CURRE
fdb0: 4e 54 5f 43 4f 4e 46 49 47 29 20 7c 7c 0d 0a 20  NT_CONFIG) ||.. 
fdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdd0: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
fde0: 65 79 2e 4e 61 6d 65 45 71 75 61 6c 73 28 0d 0a  ey.NameEquals(..
fdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe00: 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 52 65          name, Re
fe10: 67 69 73 74 72 79 52 6f 6f 74 4b 65 79 4e 61 6d  gistryRootKeyNam
fe20: 65 73 2e 48 4b 43 43 29 29 0d 0a 20 20 20 20 20  es.HKCC))..     
fe30: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
fe40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe50: 20 20 72 65 74 75 72 6e 20 72 65 67 69 73 74 72    return registr
fe60: 79 2e 43 75 72 72 65 6e 74 43 6f 6e 66 69 67 3b  y.CurrentConfig;
fe70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fe80: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
fe90: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 6f       else if (Mo
fea0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 2e 4e 61  ckRegistryKey.Na
feb0: 6d 65 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20  meEquals(..     
fec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fed0: 20 20 20 6e 61 6d 65 2c 20 52 65 67 69 73 74 72     name, Registr
fee0: 79 52 6f 6f 74 4b 65 79 4e 61 6d 65 73 2e 48 4b  yRootKeyNames.HK
fef0: 45 59 5f 43 55 52 52 45 4e 54 5f 55 53 45 52 29  EY_CURRENT_USER)
ff00: 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
ff10: 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
ff20: 69 73 74 72 79 4b 65 79 2e 4e 61 6d 65 45 71 75  istryKey.NameEqu
ff30: 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  als(..          
ff40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
ff50: 6d 65 2c 20 52 65 67 69 73 74 72 79 52 6f 6f 74  me, RegistryRoot
ff60: 4b 65 79 4e 61 6d 65 73 2e 48 4b 43 55 29 29 0d  KeyNames.HKCU)).
ff70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ff80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ff90: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
ffa0: 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 55  egistry.CurrentU
ffb0: 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ser;..          
ffc0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
ffd0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
ffe0: 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
fff0: 79 2e 4e 61 6d 65 45 71 75 61 6c 73 28 0d 0a 20  y.NameEquals(.. 
10000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10010 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 52 65 67         name, Reg
10020 69 73 74 72 79 52 6f 6f 74 4b 65 79 4e 61 6d 65  istryRootKeyName
10030 73 2e 48 4b 45 59 5f 44 59 4e 5f 44 41 54 41 29  s.HKEY_DYN_DATA)
10040 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
10050 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
10060 69 73 74 72 79 4b 65 79 2e 4e 61 6d 65 45 71 75  istryKey.NameEqu
10070 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  als(..          
10080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
10090 6d 65 2c 20 52 65 67 69 73 74 72 79 52 6f 6f 74  me, RegistryRoot
100a0 4b 65 79 4e 61 6d 65 73 2e 48 4b 44 44 29 29 0d  KeyNames.HKDD)).
100b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
100c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
100d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
100e0 65 67 69 73 74 72 79 2e 44 79 6e 44 61 74 61 3b  egistry.DynData;
100f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10100 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
10110 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 6f       else if (Mo
10120 63 6b 52 65 67 69 73 74 72 79 4b 65 79 2e 4e 61  ckRegistryKey.Na
10130 6d 65 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20  meEquals(..     
10140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10150 20 20 20 6e 61 6d 65 2c 20 52 65 67 69 73 74 72     name, Registr
10160 79 52 6f 6f 74 4b 65 79 4e 61 6d 65 73 2e 48 4b  yRootKeyNames.HK
10170 45 59 5f 4c 4f 43 41 4c 5f 4d 41 43 48 49 4e 45  EY_LOCAL_MACHINE
10180 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
10190 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
101a0 67 69 73 74 72 79 4b 65 79 2e 4e 61 6d 65 45 71  gistryKey.NameEq
101b0 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20  uals(..         
101c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
101d0 61 6d 65 2c 20 52 65 67 69 73 74 72 79 52 6f 6f  ame, RegistryRoo
101e0 74 4b 65 79 4e 61 6d 65 73 2e 48 4b 4c 4d 29 29  tKeyNames.HKLM))
101f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10200 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10210 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
10220 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61  registry.LocalMa
10230 63 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20  chine;..        
10240 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
10250 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
10260 69 66 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  if (MockRegistry
10270 4b 65 79 2e 4e 61 6d 65 45 71 75 61 6c 73 28 0d  Key.NameEquals(.
10280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10290 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 52           name, R
102a0 65 67 69 73 74 72 79 52 6f 6f 74 4b 65 79 4e 61  egistryRootKeyNa
102b0 6d 65 73 2e 48 4b 45 59 5f 50 45 52 46 4f 52 4d  mes.HKEY_PERFORM
102c0 41 4e 43 45 5f 44 41 54 41 29 20 7c 7c 0d 0a 20  ANCE_DATA) ||.. 
102d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102e0 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
102f0 65 79 2e 4e 61 6d 65 45 71 75 61 6c 73 28 0d 0a  ey.NameEquals(..
10300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10310 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 52 65          name, Re
10320 67 69 73 74 72 79 52 6f 6f 74 4b 65 79 4e 61 6d  gistryRootKeyNam
10330 65 73 2e 48 4b 50 44 29 29 0d 0a 20 20 20 20 20  es.HKPD))..     
10340 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
10350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10360 20 20 72 65 74 75 72 6e 20 72 65 67 69 73 74 72    return registr
10370 79 2e 50 65 72 66 6f 72 6d 61 6e 63 65 44 61 74  y.PerformanceDat
10380 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a;..            
10390 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
103a0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
103b0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 2e  MockRegistryKey.
103c0 4e 61 6d 65 45 71 75 61 6c 73 28 0d 0a 20 20 20  NameEquals(..   
103d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103e0 20 20 20 20 20 6e 61 6d 65 2c 20 52 65 67 69 73       name, Regis
103f0 74 72 79 52 6f 6f 74 4b 65 79 4e 61 6d 65 73 2e  tryRootKeyNames.
10400 48 4b 45 59 5f 55 53 45 52 53 29 20 7c 7c 0d 0a  HKEY_USERS) ||..
10410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10420 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
10430 4b 65 79 2e 4e 61 6d 65 45 71 75 61 6c 73 28 0d  Key.NameEquals(.
10440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10450 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 52           name, R
10460 65 67 69 73 74 72 79 52 6f 6f 74 4b 65 79 4e 61  egistryRootKeyNa
10470 6d 65 73 2e 48 4b 55 29 29 0d 0a 20 20 20 20 20  mes.HKU))..     
10480 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
10490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104a0 20 20 72 65 74 75 72 6e 20 72 65 67 69 73 74 72    return registr
104b0 79 2e 55 73 65 72 73 3b 0d 0a 20 20 20 20 20 20  y.Users;..      
104c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
104d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
104e0 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
104f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
10500 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
10510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
10550 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
10560 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e  lic static strin
10570 67 20 4a 6f 69 6e 4b 65 79 4e 61 6d 65 73 28 0d  g JoinKeyNames(.
10580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10590 20 70 61 72 61 6d 73 20 73 74 72 69 6e 67 5b 5d   params string[]
105a0 20 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20   names..        
105b0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
105c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
105d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6e            if ((n
105e0 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  ames == null) ||
105f0 20 28 6e 61 6d 65 73 2e 4c 65 6e 67 74 68 20 3d   (names.Length =
10600 3d 20 30 29 29 0d 0a 20 20 20 20 20 20 20 20 20  = 0))..         
10610 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10620 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
10630 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
10640 67 42 75 69 6c 64 65 72 20 62 75 69 6c 64 65 72  gBuilder builder
10650 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69   = new StringBui
10660 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  lder();....     
10670 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
10680 63 68 20 28 73 74 72 69 6e 67 20 6e 61 6d 65 20  ch (string name 
10690 69 6e 20 6e 61 6d 65 73 29 0d 0a 20 20 20 20 20  in names)..     
106a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
106b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106c0 20 20 69 66 20 28 6e 61 6d 65 20 3d 3d 20 6e 75    if (name == nu
106d0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
106e0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
106f0 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
10700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
10710 72 69 6e 67 20 6e 65 77 4e 61 6d 65 20 3d 20 6e  ring newName = n
10720 61 6d 65 2e 54 72 69 6d 28 4b 65 79 4e 61 6d 65  ame.Trim(KeyName
10730 53 65 70 61 72 61 74 6f 72 29 3b 0d 0a 0d 0a 20  Separator);.... 
10740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10750 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
10760 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6e 65 77 4e  NullOrEmpty(newN
10770 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
10780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
10790 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
107a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107b0 69 66 20 28 62 75 69 6c 64 65 72 2e 4c 65 6e 67  if (builder.Leng
107c0 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20  th > 0)..       
107d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107e0 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28   builder.Append(
107f0 4b 65 79 4e 61 6d 65 53 65 70 61 72 61 74 6f 72  KeyNameSeparator
10800 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
10810 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 65            builde
10820 72 2e 41 70 70 65 6e 64 28 6e 65 77 4e 61 6d 65  r.Append(newName
10830 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
10840 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
10850 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
10860 62 75 69 6c 64 65 72 2e 54 6f 53 74 72 69 6e 67  builder.ToString
10870 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
10880 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
10890 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
108a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
108b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
108c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
108d0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
108e0 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
108f0 69 63 20 73 74 72 69 6e 67 20 4a 6f 69 6e 4b 65  ic string JoinKe
10900 79 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20  yNames(..       
10910 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
10920 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20  istryKey key,.. 
10930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
10940 61 72 61 6d 73 20 73 74 72 69 6e 67 5b 5d 20 6e  arams string[] n
10950 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ames..          
10960 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
10970 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10980 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 72          string r
10990 65 73 75 6c 74 20 3d 20 4a 6f 69 6e 4b 65 79 4e  esult = JoinKeyN
109a0 61 6d 65 73 28 6e 61 6d 65 73 29 3b 0d 0a 0d 0a  ames(names);....
109b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109c0 69 66 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29  if (key != null)
109d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
109e0 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 4a        result = J
109f0 6f 69 6e 4b 65 79 4e 61 6d 65 73 28 6b 65 79 2e  oinKeyNames(key.
10a00 4e 61 6d 65 2c 20 72 65 73 75 6c 74 29 3b 0d 0a  Name, result);..
10a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10a20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
10a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
10a40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
10a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a90 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
10aa0 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
10ab0 73 74 72 69 6e 67 5b 5d 20 53 70 6c 69 74 4b 65  string[] SplitKe
10ac0 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
10ad0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
10ae0 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  eyName..        
10af0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
10b00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10b10 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
10b20 79 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  yName == null)..
10b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b40 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
10b50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10b60 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 4e 61      return keyNa
10b70 6d 65 2e 53 70 6c 69 74 28 0d 0a 20 20 20 20 20  me.Split(..     
10b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4b                 K
10b90 65 79 4e 61 6d 65 53 65 70 61 72 61 74 6f 72 73  eyNameSeparators
10ba0 2c 20 53 74 72 69 6e 67 53 70 6c 69 74 4f 70 74  , StringSplitOpt
10bb0 69 6f 6e 73 2e 52 65 6d 6f 76 65 45 6d 70 74 79  ions.RemoveEmpty
10bc0 45 6e 74 72 69 65 73 29 3b 0d 0a 20 20 20 20 20  Entries);..     
10bd0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
10be0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
10bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
10c30 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
10c40 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  c static string 
10c50 4c 61 73 74 53 75 62 4b 65 79 4e 61 6d 65 28 0d  LastSubKeyName(.
10c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10c70 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 0d   string keyName.
10c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10c90 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
10ca0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
10cb0 20 20 20 73 74 72 69 6e 67 5b 5d 20 73 75 62 4b     string[] subK
10cc0 65 79 4e 61 6d 65 73 20 3d 20 53 70 6c 69 74 4b  eyNames = SplitK
10cd0 65 79 4e 61 6d 65 28 6b 65 79 4e 61 6d 65 29 3b  eyName(keyName);
10ce0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10cf0 20 20 20 20 69 66 20 28 28 73 75 62 4b 65 79 4e      if ((subKeyN
10d00 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  ames == null) ||
10d10 20 28 73 75 62 4b 65 79 4e 61 6d 65 73 2e 4c 65   (subKeyNames.Le
10d20 6e 67 74 68 20 3d 3d 20 30 29 29 0d 0a 20 20 20  ngth == 0))..   
10d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d40 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
10d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10d60 20 72 65 74 75 72 6e 20 73 75 62 4b 65 79 4e 61   return subKeyNa
10d70 6d 65 73 5b 73 75 62 4b 65 79 4e 61 6d 65 73 2e  mes[subKeyNames.
10d80 4c 65 6e 67 74 68 20 2d 20 31 5d 3b 0d 0a 20 20  Length - 1];..  
10d90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
10da0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
10db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
10df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
10e00 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
10e10 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
10e20 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
10e30 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
10e40 74 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  tic MockRegistry
10e50 4b 65 79 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d  Key OpenSubKey(.
10e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10e70 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
10e80 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
10e90 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
10ea0 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20  g subKeyName,.. 
10eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
10ec0 6f 6f 6c 20 77 72 69 74 61 62 6c 65 2c 0d 0a 20  ool writable,.. 
10ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
10ee0 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
10ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
10f00 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20  l verbose..     
10f10 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
10f20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10f30 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
10f40 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20  (verbose)..     
10f50 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
10f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f70 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
10f80 41 6e 64 54 72 61 63 65 28 77 72 69 74 61 62 6c  AndTrace(writabl
10f90 65 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e ?..           
10fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
10fb0 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
10fc0 73 74 20 3a 20 54 72 61 63 65 50 72 69 6f 72 69  st : TracePriori
10fd0 74 79 2e 48 69 67 68 65 72 2c 0d 0a 20 20 20 20  ty.Higher,..    
10fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ff0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
11000 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
11010 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
11020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11030 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b            "rootK
11040 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79  ey = {0}, subKey
11050 4e 61 6d 65 20 3d 20 7b 31 7d 2c 20 77 72 69 74  Name = {1}, writ
11060 61 62 6c 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20  able = {2}",..  
11070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11080 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
11090 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69  (rootKey), ForDi
110a0 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65  splay(subKeyName
110b0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
110c0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
110d0 69 73 70 6c 61 79 28 77 72 69 74 61 62 6c 65 29  isplay(writable)
110e0 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
110f0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
11100 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
11110 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f           if (roo
11120 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tKey == null).. 
11130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11140 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
11150 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11160 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
11170 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20         // HACK: 
11180 41 6c 77 61 79 73 20 66 6f 72 62 69 64 20 77 72  Always forbid wr
11190 69 74 61 62 6c 65 20 61 63 63 65 73 73 20 77 68  itable access wh
111a0 65 6e 20 6f 70 65 72 61 74 69 6e 67 20 69 6e 0d  en operating in.
111b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
111c0 20 2f 2f 20 20 20 20 20 20 20 22 77 68 61 74 2d   //       "what-
111d0 69 66 22 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20  if" mode...     
111e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
111f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
11200 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
11210 65 79 20 3d 20 72 6f 6f 74 4b 65 79 2e 4f 70 65  ey = rootKey.Ope
11220 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
11230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
11240 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  bKeyName, whatIf
11250 20 3f 20 66 61 6c 73 65 20 3a 20 77 72 69 74 61   ? false : writa
11260 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ble);....       
11270 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
11280 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d  (key != null) ?.
11290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
112a0 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65 67       new MockReg
112b0 69 73 74 72 79 4b 65 79 28 6b 65 79 2c 20 77 68  istryKey(key, wh
112c0 61 74 49 66 2c 20 66 61 6c 73 65 2c 20 66 61 6c  atIf, false, fal
112d0 73 65 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20  se) : null;..   
112e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
112f0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
11300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
11340 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
11350 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
11360 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
11370 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
11380 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
11390 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
113a0 65 79 20 43 72 65 61 74 65 53 75 62 4b 65 79 28  ey CreateSubKey(
113b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
113c0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
113d0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
113e0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
113f0 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
11400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11410 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
11420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
11430 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
11440 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
11450 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
11460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
11470 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
11480 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
11490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114a0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
114b0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
114c0 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
114d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
114e0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
114f0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
11500 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
11510 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
11520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11530 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20  "rootKey = {0}, 
11540 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d  subKeyName = {1}
11550 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
11560 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
11570 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c  isplay(rootKey),
11580 20 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b   ForDisplay(subK
11590 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  eyName)),..     
115a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115b0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
115c0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
115d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
115e0 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f           if (roo
115f0 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tKey == null).. 
11600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11610 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
11620 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11630 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
11640 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11660 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
11670 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20         // HACK: 
11680 41 6c 77 61 79 73 20 6f 70 65 6e 20 61 20 6b 65  Always open a ke
11690 79 2c 20 72 61 74 68 65 72 20 74 68 61 6e 20 63  y, rather than c
116a0 72 65 61 74 69 6e 67 20 6f 6e 65 20 77 68 65 6e  reating one when
116b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
116c0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
116d0 70 65 72 61 74 69 6e 67 20 69 6e 20 22 77 68 61  perating in "wha
116e0 74 2d 69 66 22 20 6d 6f 64 65 2e 0d 0a 20 20 20  t-if" mode...   
116f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11700 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
11710 20 20 20 20 20 20 20 20 20 69 66 20 28 77 68 61           if (wha
11720 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
11730 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
11740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11750 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
11760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11770 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d 70   // HACK: Attemp
11780 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 70  t to open the sp
11790 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65 79 2e  ecified sub-key.
117a0 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20    If..          
117b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
117c0 20 20 20 20 20 20 20 74 68 69 73 20 66 61 69 6c         this fail
117d0 73 2c 20 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c  s, we will simpl
117e0 79 20 72 65 74 75 72 6e 20 74 68 65 20 72 6f 6f  y return the roo
117f0 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
11800 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
11810 20 20 20 20 6b 65 79 20 69 74 73 65 6c 66 20 73      key itself s
11820 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73 20 61  ince no writes a
11830 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 0d 0a 20  re allowed in.. 
11840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11850 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
11860 22 77 68 61 74 2d 69 66 22 20 6d 6f 64 65 20 61  "what-if" mode a
11870 6e 79 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20  nyhow...        
11880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11890 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
118a0 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
118b0 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
118c0 3d 20 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53 75  = rootKey.OpenSu
118d0 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29  bKey(subKeyName)
118e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
118f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
11900 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c  urn (key != null
11910 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
11920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11930 20 6b 65 79 20 3a 20 6e 65 77 20 4d 6f 63 6b 52   key : new MockR
11940 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
11950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11960 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
11970 74 4b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65  tKey, subKeyName
11980 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73 65 2c  , whatIf, false,
11990 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20   false);..      
119a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
119b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
119c0 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
119d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
119e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
119f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11a00 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72   new MockRegistr
11a10 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
11a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a30 20 20 20 72 6f 6f 74 4b 65 79 2e 43 72 65 61 74     rootKey.Creat
11a40 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61  eSubKey(subKeyNa
11a50 6d 65 29 2c 20 77 68 61 74 49 66 2c 20 66 61 6c  me), whatIf, fal
11a60 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
11a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a80 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20   false);..      
11a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11ab0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
11ac0 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
11ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
11ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11af0 20 20 20 20 4d 61 79 62 65 4c 6f 67 4f 70 65 72      MaybeLogOper
11b00 61 74 69 6f 6e 28 47 65 74 4d 65 74 68 6f 64 4e  ation(GetMethodN
11b10 61 6d 65 28 29 2c 20 72 6f 6f 74 4b 65 79 2c 20  ame(), rootKey, 
11b20 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  subKeyName);....
11b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b40 20 20 20 20 73 75 62 4b 65 79 73 43 72 65 61 74      subKeysCreat
11b50 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed++;..         
11b60 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
11b70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
11b80 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
11b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
11bd0 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
11be0 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
11bf0 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
11c00 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
11c10 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
11c20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65  void DeleteSubKe
11c30 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
11c40 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
11c50 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
11c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
11c70 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
11c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11c90 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
11ca0 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
11cb0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
11cc0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
11cd0 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
11ce0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
11cf0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
11d00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11d10 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
11d20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
11d30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11d40 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
11d50 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
11d60 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
11d70 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
11d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d90 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
11da0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
11db0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
11dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11dd0 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79          "rootKey
11de0 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61   = {0}, subKeyNa
11df0 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  me = {1}",..    
11e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e10 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72      ForDisplay(r
11e20 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70  ootKey), ForDisp
11e30 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29  lay(subKeyName))
11e40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
11e50 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
11e60 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
11e70 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
11e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11e90 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20   if (rootKey == 
11ea0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
11eb0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
11ec0 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
11ed0 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49        if (!whatI
11ee0 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
11ef0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2e          rootKey.
11f00 44 65 6c 65 74 65 53 75 62 4b 65 79 28 73 75 62  DeleteSubKey(sub
11f10 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e  KeyName, throwOn
11f20 4d 69 73 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20  Missing);....   
11f30 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 79               May
11f40 62 65 4c 6f 67 4f 70 65 72 61 74 69 6f 6e 28 47  beLogOperation(G
11f50 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 29 2c 20  etMethodName(), 
11f60 72 6f 6f 74 4b 65 79 2c 20 73 75 62 4b 65 79 4e  rootKey, subKeyN
11f70 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
11f80 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 73           subKeys
11f90 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20  Deleted++;..    
11fa0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
11fb0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
11fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
12000 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
12010 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
12020 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
12030 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
12040 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
12050 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62  c void DeleteSub
12060 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20  KeyTree(..      
12070 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
12080 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
12090 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
120a0 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
120b0 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
120c0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
120d0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
120e0 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
120f0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
12100 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
12110 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12120 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
12130 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
12140 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
12150 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
12160 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
12170 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
12180 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
12190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121a0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
121b0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
121c0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
121d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121e0 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79          "rootKey
121f0 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61   = {0}, subKeyNa
12200 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  me = {1}",..    
12210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12220 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72      ForDisplay(r
12230 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70  ootKey), ForDisp
12240 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29  lay(subKeyName))
12250 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
12260 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
12270 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
12280 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
12290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
122a0 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20   if (rootKey == 
122b0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
122c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
122d0 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
122e0 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49        if (!whatI
122f0 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
12300 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2e          rootKey.
12310 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65  DeleteSubKeyTree
12320 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d  (subKeyName);...
12330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12340 20 4d 61 79 62 65 4c 6f 67 4f 70 65 72 61 74 69   MaybeLogOperati
12350 6f 6e 28 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65  on(GetMethodName
12360 28 29 2c 20 72 6f 6f 74 4b 65 79 2c 20 73 75 62  (), rootKey, sub
12370 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  KeyName);....   
12380 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
12390 4b 65 79 73 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a  KeysDeleted++;..
123a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
123b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
123c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
123d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
123e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
123f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12400 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12410 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
12420 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
12430 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
12440 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
12450 74 61 74 69 63 20 73 74 72 69 6e 67 5b 5d 20 47  tatic string[] G
12460 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 0d 0a  etSubKeyNames(..
12470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12480 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
12490 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
124a0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
124b0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
124c0 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
124d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
124e0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
124f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12500 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
12510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12520 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
12530 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
12540 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
12550 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
12560 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gh,..           
12570 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
12580 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
12590 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
125a0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
125b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125c0 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 22 2c 20     "key = {0}", 
125d0 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29 29  ForDisplay(key))
125e0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
125f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
12600 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
12610 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
12620 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
12630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
12640 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
12650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
12660 74 75 72 6e 20 6b 65 79 2e 47 65 74 53 75 62 4b  turn key.GetSubK
12670 65 79 4e 61 6d 65 73 28 29 3b 0d 0a 20 20 20 20  eyNames();..    
12680 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
12690 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
126a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
126b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
126c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
126d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
126e0 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
126f0 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
12700 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
12710 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
12720 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
12730 63 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75  c object GetValu
12740 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
12750 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
12760 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  Key key,..      
12770 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
12780 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
12790 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 64          object d
127a0 65 66 61 75 6c 74 56 61 6c 75 65 2c 0d 0a 20 20  efaultValue,..  
127b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
127c0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
127d0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
127e0 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20   verbose..      
127f0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
12800 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
12810 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
12820 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
12830 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
12840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12850 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
12860 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
12870 6f 72 69 74 79 2e 48 69 67 68 2c 0d 0a 20 20 20  ority.High,..   
12880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12890 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
128a0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
128b0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
128c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
128d0 20 20 20 20 20 20 20 20 20 20 20 22 6b 65 79 20             "key 
128e0 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31  = {0}, name = {1
128f0 7d 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65 20  }, defaultValue 
12900 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20 20  = {2}",..       
12910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12920 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29   ForDisplay(key)
12930 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 61 6d  , ForDisplay(nam
12940 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
12950 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
12960 44 69 73 70 6c 61 79 28 64 65 66 61 75 6c 74 56  Display(defaultV
12970 61 6c 75 65 29 29 2c 20 74 72 61 63 65 43 61 74  alue)), traceCat
12980 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
12990 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
129a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
129b0 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
129c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129d0 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
129e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
129f0 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
12a00 20 3d 20 6b 65 79 2e 47 65 74 56 61 6c 75 65 28   = key.GetValue(
12a10 6e 61 6d 65 2c 20 64 65 66 61 75 6c 74 56 61 6c  name, defaultVal
12a20 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ue);....        
12a30 20 20 20 20 20 20 20 20 6b 65 79 56 61 6c 75 65          keyValue
12a40 73 52 65 61 64 2b 2b 3b 0d 0a 0d 0a 20 20 20 20  sRead++;....    
12a50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
12a60 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  rn value;..     
12a70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
12a80 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
12a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
12ad0 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
12ae0 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
12af0 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
12b00 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
12b10 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
12b20 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28 0d   void SetValue(.
12b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12b40 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
12b50 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
12b60 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
12b70 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
12b80 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
12b90 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
12ba0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
12bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12bc0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
12bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12be0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
12bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12c00 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a    if (verbose)..
12c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
12c30 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
12c40 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
12c50 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
12c60 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
12c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
12c80 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
12c90 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
12ca0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
12cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cc0 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20      "key = {0}, 
12cd0 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 76 61 6c 75  name = {1}, valu
12ce0 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20  e = {2}",..     
12cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d00 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65     ForDisplay(ke
12d10 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  y), ForDisplay(n
12d20 61 6d 65 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame), ForDisplay
12d30 28 76 61 6c 75 65 29 29 2c 0d 0a 20 20 20 20 20  (value)),..     
12d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d50 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
12d60 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
12d70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
12d80 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
12d90 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
12da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
12db0 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
12dc0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77            if (!w
12dd0 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
12de0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e              key.
12df0 53 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 76  SetValue(name, v
12e00 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  alue);....      
12e10 20 20 20 20 20 20 20 20 20 20 4d 61 79 62 65 4c            MaybeL
12e20 6f 67 4f 70 65 72 61 74 69 6f 6e 28 47 65 74 4d  ogOperation(GetM
12e30 65 74 68 6f 64 4e 61 6d 65 28 29 2c 20 6b 65 79  ethodName(), key
12e40 2c 20 6e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d  , name, value);.
12e50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12e60 20 20 20 6b 65 79 56 61 6c 75 65 73 57 72 69 74     keyValuesWrit
12e70 74 65 6e 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  ten++;..        
12e80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
12e90 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
12ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12ed0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
12ee0 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
12ef0 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
12f00 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
12f10 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
12f20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
12f30 69 64 20 44 65 6c 65 74 65 56 61 6c 75 65 28 0d  id DeleteValue(.
12f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12f50 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
12f60 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
12f70 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
12f80 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
12f90 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
12fa0 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
12fb0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
12fc0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
12fd0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
12fe0 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
12ff0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
13000 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13010 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
13020 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
13030 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
13040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
13050 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
13060 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
13070 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
13080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13090 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
130a0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
130b0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
130c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
130d0 20 20 20 20 20 20 20 20 20 20 20 22 6b 65 79 20             "key 
130e0 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31  = {0}, name = {1
130f0 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6b  }", ForDisplay(k
13100 65 79 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ey),..          
13110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
13120 72 44 69 73 70 6c 61 79 28 6e 61 6d 65 29 29 2c  rDisplay(name)),
13130 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
13140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13150 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
13160 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
13170 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
13180 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
13190 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
131a0 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
131b0 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
131c0 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65            key.De
131d0 6c 65 74 65 56 61 6c 75 65 28 6e 61 6d 65 2c 20  leteValue(name, 
131e0 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b  throwOnMissing);
131f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13200 20 20 20 20 4d 61 79 62 65 4c 6f 67 4f 70 65 72      MaybeLogOper
13210 61 74 69 6f 6e 28 47 65 74 4d 65 74 68 6f 64 4e  ation(GetMethodN
13220 61 6d 65 28 29 2c 20 6b 65 79 2c 20 6e 61 6d 65  ame(), key, name
13230 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20  , null);....    
13240 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 56              keyV
13250 61 6c 75 65 73 44 65 6c 65 74 65 64 2b 2b 3b 0d  aluesDeleted++;.
13260 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
13270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
13280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
132a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
132b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
132c0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
132d0 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
132e0 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
132f0 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
13300 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
13310 73 74 61 74 69 63 20 69 6e 74 20 57 72 69 74 65  static int Write
13320 4f 70 65 72 61 74 69 6f 6e 4c 69 73 74 28 0d 0a  OperationList(..
13330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13340 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
13350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13360 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
13370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13380 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
13390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
133a0 20 20 69 6e 74 20 63 6f 75 6e 74 20 3d 20 30 3b    int count = 0;
133b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
133c0 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
133d0 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 66 69 6c  sNullOrEmpty(fil
133e0 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
133f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
13400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13410 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
13420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13430 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
13440 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
13450 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
13460 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
13470 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
13480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13490 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
134a0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
134b0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
134c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134d0 20 20 20 22 52 65 67 69 73 74 72 79 20 6f 70 65     "Registry ope
134e0 72 61 74 69 6f 6e 20 6c 6f 67 20 66 69 6c 65 20  ration log file 
134f0 6e 61 6d 65 20 6e 6f 74 20 73 65 74 2e 22 2c 0d  name not set.",.
13500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13510 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
13520 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
13530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13540 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
13550 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
13560 6e 20 63 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20  n count;..      
13570 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
13580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
13590 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 2f  ock (syncRoot) /
135a0 2a 20 54 52 41 4e 53 41 43 54 49 4f 4e 41 4c 20  * TRANSACTIONAL 
135b0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
135c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
135d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6f             if (o
135e0 70 65 72 61 74 69 6f 6e 4c 69 73 74 20 3d 3d 20  perationList == 
135f0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
13600 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
13610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13620 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
13630 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
13640 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
13650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13660 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
13670 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
13680 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
13690 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
136a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136b0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
136c0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
136d0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
136e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136f0 20 20 20 20 20 20 20 20 20 22 52 65 67 69 73 74           "Regist
13700 72 79 20 6f 70 65 72 61 74 69 6f 6e 20 6c 69 73  ry operation lis
13710 74 20 69 73 20 69 6e 76 61 6c 69 64 2e 22 2c 0d  t is invalid.",.
13720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13740 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
13750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13760 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
13770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13780 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f         return co
13790 75 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  unt;..          
137a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
137b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137c0 20 20 20 75 73 69 6e 67 20 28 53 74 72 65 61 6d     using (Stream
137d0 57 72 69 74 65 72 20 73 74 72 65 61 6d 57 72 69  Writer streamWri
137e0 74 65 72 20 3d 20 6e 65 77 20 53 74 72 65 61 6d  ter = new Stream
137f0 57 72 69 74 65 72 28 0d 0a 20 20 20 20 20 20 20  Writer(..       
13800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13810 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 29 29 0d       fileName)).
13820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13830 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
13840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13850 66 6f 72 65 61 63 68 20 28 52 65 67 69 73 74 72  foreach (Registr
13860 79 4f 70 65 72 61 74 69 6f 6e 20 6f 70 65 72 61  yOperation opera
13870 74 69 6f 6e 20 69 6e 20 6f 70 65 72 61 74 69 6f  tion in operatio
13880 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20  nList)..        
13890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
138b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
138c0 66 20 28 6f 70 65 72 61 74 69 6f 6e 20 3d 3d 20  f (operation == 
138d0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
138e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138f0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
13900 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13920 73 74 72 65 61 6d 57 72 69 74 65 72 2e 57 72 69  streamWriter.Wri
13930 74 65 4c 69 6e 65 28 6f 70 65 72 61 74 69 6f 6e  teLine(operation
13940 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20  .ToString());.. 
13950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13960 20 20 20 20 20 20 20 20 20 20 20 63 6f 75 6e 74             count
13970 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
13980 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
13990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
139a0 20 20 20 20 20 20 20 20 20 20 73 74 72 65 61 6d            stream
139b0 57 72 69 74 65 72 2e 46 6c 75 73 68 28 29 3b 0d  Writer.Flush();.
139c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
139d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
139e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
139f0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
13a00 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20  (verbose)..     
13a10 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
13a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a30 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
13a40 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
13a50 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
13a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13a70 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
13a80 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
13a90 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
13aa0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
13ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
13ac0 57 72 6f 74 65 20 7b 30 7d 20 72 65 67 69 73 74  Wrote {0} regist
13ad0 72 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 74 6f  ry operations to
13ae0 20 69 74 73 20 6c 6f 67 20 66 69 6c 65 2e 22 2c   its log file.",
13af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13b00 20 20 20 20 20 20 20 20 20 20 63 6f 75 6e 74 29            count)
13b10 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
13b20 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
13b30 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
13b40 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63          return c
13b50 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  ount;..         
13b60 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
13b70 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
13b80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
13b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
13bd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
13be0 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53  region Private S
13bf0 74 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20  tatic Methods.. 
13c00 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
13c10 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
13c20 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
13c30 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
13c40 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
13c50 63 20 73 74 72 69 6e 67 20 47 65 74 4d 65 74 68  c string GetMeth
13c60 6f 64 4e 61 6d 65 28 29 0d 0a 20 20 20 20 20 20  odName()..      
13c70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13c80 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
13c90 54 72 61 63 65 4f 70 73 2e 47 65 74 4d 65 74 68  TraceOps.GetMeth
13ca0 6f 64 4e 61 6d 65 28 6e 75 6c 6c 2c 20 31 29 3b  odName(null, 1);
13cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
13cc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
13cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d10 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
13d20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
13d30 20 76 6f 69 64 20 4d 61 79 62 65 4c 6f 67 4f 70   void MaybeLogOp
13d40 65 72 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  eration(..      
13d50 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
13d60 20 6d 65 74 68 6f 64 4e 61 6d 65 2c 0d 0a 20 20   methodName,..  
13d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
13d80 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
13d90 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
13da0 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
13db0 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  yName..         
13dc0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
13dd0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13de0 20 20 20 20 20 20 20 20 20 4d 61 79 62 65 4c 6f           MaybeLo
13df0 67 4f 70 65 72 61 74 69 6f 6e 28 6d 65 74 68 6f  gOperation(metho
13e00 64 4e 61 6d 65 2c 20 6b 65 79 2c 20 73 75 62 4b  dName, key, subK
13e10 65 79 4e 61 6d 65 2c 20 6e 75 6c 6c 2c 20 6e 75  eyName, null, nu
13e20 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ll);..          
13e30 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
13e40 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
13e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13e80 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
13e90 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
13ea0 61 74 69 63 20 76 6f 69 64 20 4d 61 79 62 65 4c  atic void MaybeL
13eb0 6f 67 4f 70 65 72 61 74 69 6f 6e 28 0d 0a 20 20  ogOperation(..  
13ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
13ed0 72 69 6e 67 20 6d 65 74 68 6f 64 4e 61 6d 65 2c  ring methodName,
13ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13ef0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
13f00 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
13f10 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76          string v
13f20 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  alueName,..     
13f30 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
13f40 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  t value..       
13f50 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
13f60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
13f70 20 20 20 20 20 20 20 20 20 20 20 4d 61 79 62 65             Maybe
13f80 4c 6f 67 4f 70 65 72 61 74 69 6f 6e 28 6d 65 74  LogOperation(met
13f90 68 6f 64 4e 61 6d 65 2c 20 6b 65 79 2c 20 6e 75  hodName, key, nu
13fa0 6c 6c 2c 20 76 61 6c 75 65 4e 61 6d 65 2c 20 76  ll, valueName, v
13fb0 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
13fc0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
13fd0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
13fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14010 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
14020 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
14030 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61 79 62  static void Mayb
14040 65 4c 6f 67 4f 70 65 72 61 74 69 6f 6e 28 0d 0a  eLogOperation(..
14050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14060 73 74 72 69 6e 67 20 6d 65 74 68 6f 64 4e 61 6d  string methodNam
14070 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
14080 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
14090 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  Key key,..      
140a0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
140b0 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20   subKeyName,..  
140c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
140d0 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d 65 2c 0d  ring valueName,.
140e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
140f0 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20   object value.. 
14100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
14110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
14120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14130 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
14140 20 2f 2a 20 54 52 41 4e 53 41 43 54 49 4f 4e 41   /* TRANSACTIONA
14150 4c 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  L */..          
14160 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
14170 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
14180 28 6f 70 65 72 61 74 69 6f 6e 4c 69 73 74 20 3d  (operationList =
14190 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
141a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141b0 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
141c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141d0 6f 70 65 72 61 74 69 6f 6e 4c 69 73 74 2e 41 64  operationList.Ad
141e0 64 28 6e 65 77 20 52 65 67 69 73 74 72 79 4f 70  d(new RegistryOp
141f0 65 72 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  eration(..      
14200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14210 20 20 6d 65 74 68 6f 64 4e 61 6d 65 2c 20 6b 65    methodName, ke
14220 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 76  y, subKeyName, v
14230 61 6c 75 65 4e 61 6d 65 2c 20 76 61 6c 75 65 29  alueName, value)
14240 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
14250 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
14260 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
14270 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
14280 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
14290 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
142a0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
142b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
142c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
142d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
142e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
142f0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
14300 6e 20 52 65 67 69 73 74 72 79 4f 70 65 72 61 74  n RegistryOperat
14310 69 6f 6e 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20  ionList Class.. 
14320 20 20 20 20 20 20 20 5b 53 65 72 69 61 6c 69 7a         [Serializ
14330 61 62 6c 65 28 29 5d 0d 0a 20 20 20 20 20 20 20  able()]..       
14340 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20   private sealed 
14350 63 6c 61 73 73 20 52 65 67 69 73 74 72 79 4f 70  class RegistryOp
14360 65 72 61 74 69 6f 6e 4c 69 73 74 20 3a 20 4c 69  erationList : Li
14370 73 74 3c 52 65 67 69 73 74 72 79 4f 70 65 72 61  st<RegistryOpera
14380 74 69 6f 6e 3e 2c 20 49 44 69 73 70 6f 73 61 62  tion>, IDisposab
14390 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  le..        {.. 
143a0 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
143b0 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72  on Public Constr
143c0 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
143d0 20 20 20 20 70 75 62 6c 69 63 20 52 65 67 69 73      public Regis
143e0 74 72 79 4f 70 65 72 61 74 69 6f 6e 4c 69 73 74  tryOperationList
143f0 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
14400 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
14410 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
14420 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
14430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
14440 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
14450 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
14460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
144a0 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
144b0 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22  on IDisposable "
144c0 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73  Pattern" Members
144d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
144e0 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f  ivate bool dispo
144f0 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  sed;..          
14500 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
14510 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f  heckDisposed() /
14520 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
14530 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14540 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
14550 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  disposed)..     
14560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
14570 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
14580 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
14590 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73  new ObjectDispos
145a0 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  edException(..  
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145c0 20 20 74 79 70 65 6f 66 28 52 65 67 69 73 74 72    typeof(Registr
145d0 79 4f 70 65 72 61 74 69 6f 6e 4c 69 73 74 29 2e  yOperationList).
145e0 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
145f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
14600 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
14610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14640 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
14650 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
14660 2f 2a 20 70 72 6f 74 65 63 74 65 64 20 76 69 72  /* protected vir
14670 74 75 61 6c 20 2a 2f 20 76 6f 69 64 20 44 69 73  tual */ void Dis
14680 70 6f 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20  pose(..         
14690 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 73 70         bool disp
146a0 6f 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  osing..         
146b0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
146c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
146d0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69           if (!di
146e0 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20  sposed)..       
146f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14710 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a  if (disposing)..
14720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14730 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14770 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
14780 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
14790 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20  dispose managed 
147a0 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e  resources here..
147b0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
147c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
147d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
147e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
147f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14800 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
14810 63 68 20 28 52 65 67 69 73 74 72 79 4f 70 65 72  ch (RegistryOper
14820 61 74 69 6f 6e 20 6f 70 65 72 61 74 69 6f 6e 20  ation operation 
14830 69 6e 20 74 68 69 73 29 0d 0a 20 20 20 20 20 20  in this)..      
14840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14850 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
14860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14870 20 69 66 20 28 6f 70 65 72 61 74 69 6f 6e 20 3d   if (operation =
14880 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
14890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148a0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
148b0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
148c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148d0 20 20 6f 70 65 72 61 74 69 6f 6e 2e 44 69 73 70    operation.Disp
148e0 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
148f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14900 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
14910 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6c 65               Cle
14920 61 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ar();..         
14930 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
14940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14950 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
14960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
14980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14990 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e  // release unman
149a0 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68  aged resources h
149b0 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20  ere.....        
149c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
149d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
149e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
149f0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
14a00 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
14a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20    // NOTE: This 
14a30 6f 62 6a 65 63 74 20 69 73 20 6e 6f 77 20 64 69  object is now di
14a40 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20  sposed...       
14a50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
14a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14a70 20 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20       disposed = 
14a80 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
14a90 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
14aa0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
14ab0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
14ac0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
14ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b10 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
14b20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f    #region IDispo
14b30 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20  sable Members.. 
14b40 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
14b50 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29  c void Dispose()
14b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
14b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14b80 20 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d   Dispose(true);.
14b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14ba0 20 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61   GC.SuppressFina
14bb0 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20  lize(this);..   
14bc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
14bd0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
14be0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
14bf0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
14c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14c30 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
14c40 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65 73       #region Des
14c50 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20 20  tructor..       
14c60 20 20 20 20 20 7e 52 65 67 69 73 74 72 79 4f 70       ~RegistryOp
14c70 65 72 61 74 69 6f 6e 4c 69 73 74 28 29 0d 0a 20  erationList().. 
14c80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
14c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69                Di
14ca0 73 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20  spose(false);.. 
14cb0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
14cc0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
14cd0 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  gion..        }.
14ce0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
14cf0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
14d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d40 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
14d50 20 20 23 72 65 67 69 6f 6e 20 52 65 67 69 73 74    #region Regist
14d60 72 79 4f 70 65 72 61 74 69 6f 6e 20 43 6c 61 73  ryOperation Clas
14d70 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
14d80 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  te sealed class 
14d90 52 65 67 69 73 74 72 79 4f 70 65 72 61 74 69 6f  RegistryOperatio
14da0 6e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  n..        {..  
14db0 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
14dc0 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61  n Private Consta
14dd0 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nts..           
14de0 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 63   private const c
14df0 68 61 72 20 46 69 65 6c 64 44 65 6c 69 6d 69 74  har FieldDelimit
14e00 65 72 20 3d 20 27 5c 74 27 3b 0d 0a 20 20 20 20  er = '\t';..    
14e10 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
14e20 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
14e30 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
14e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14e70 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
14e80 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
14e90 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  lic Constructors
14ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
14eb0 62 6c 69 63 20 52 65 67 69 73 74 72 79 4f 70 65  blic RegistryOpe
14ec0 72 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ration(..       
14ed0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
14ee0 6d 65 74 68 6f 64 4e 61 6d 65 2c 0d 0a 20 20 20  methodName,..   
14ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
14f00 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
14f10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
14f20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79     string subKey
14f30 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
14f40 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61         string va
14f50 6c 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  lueName,..      
14f60 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
14f70 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20   value..        
14f80 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
14f90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14fa0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6d            this.m
14fb0 65 74 68 6f 64 4e 61 6d 65 20 3d 20 6d 65 74 68  ethodName = meth
14fc0 6f 64 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  odName;..       
14fd0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 75           this.su
14fe0 62 4b 65 79 4e 61 6d 65 20 3d 20 73 75 62 4b 65  bKeyName = subKe
14ff0 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
15000 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 61 6c          this.val
15010 75 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 4e 61  ueName = valueNa
15020 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
15030 20 20 20 20 20 74 68 69 73 2e 76 61 6c 75 65 20       this.value 
15040 3d 20 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20  = value;....    
15050 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74 4b              SetK
15060 65 79 28 6b 65 79 29 3b 0d 0a 20 20 20 20 20 20  ey(key);..      
15070 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
15080 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
15090 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
150a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
150b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
150c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
150d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
150e0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
150f0 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
15100 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  e Methods..     
15110 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76         private v
15120 6f 69 64 20 53 65 74 4b 65 79 28 0d 0a 20 20 20  oid SetKey(..   
15130 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
15140 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
15150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15160 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
15170 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15180 20 20 20 20 69 66 20 28 6b 65 79 20 21 3d 20 6e      if (key != n
15190 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
151a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
151b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
151c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
151d0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d 61       // NOTE: Ma
151e0 6b 65 20 73 75 72 65 20 74 68 69 73 20 63 6f 70  ke sure this cop
151f0 79 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 72 65  y of the root re
15200 67 69 73 74 72 79 20 6b 65 79 0d 0a 20 20 20 20  gistry key..    
15210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15220 2f 2f 20 20 20 20 20 20 20 63 61 6e 6e 6f 74 20  //       cannot 
15230 62 65 20 75 73 65 64 20 74 6f 20 61 63 63 69 64  be used to accid
15240 65 6e 74 61 6c 6c 79 20 6d 61 6b 65 20 72 65 67  entally make reg
15250 69 73 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20  istry..         
15260 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
15270 20 20 20 20 63 68 61 6e 67 65 73 2e 20 20 41 6c      changes.  Al
15280 73 6f 2c 20 70 72 65 76 65 6e 74 20 74 68 69 73  so, prevent this
15290 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
152a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
152b0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
152c0 62 6a 65 63 74 20 66 72 6f 6d 20 63 6c 6f 73 69  bject from closi
152d0 6e 67 20 69 74 73 20 75 6e 64 65 72 6c 79 69 6e  ng its underlyin
152e0 67 20 72 65 67 69 73 74 72 79 0d 0a 20 20 20 20  g registry..    
152f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15300 2f 2f 20 20 20 20 20 20 20 6b 65 79 20 61 73 20  //       key as 
15310 77 65 20 77 69 6c 6c 20 6e 65 65 64 20 69 74 20  we will need it 
15320 6c 61 74 65 72 2e 20 20 54 68 69 73 20 69 6e 73  later.  This ins
15330 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 20  tance..         
15340 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
15350 20 20 20 20 77 69 6c 6c 20 63 6c 6f 73 65 20 69      will close i
15360 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...            
15370 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
15380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15390 74 68 69 73 2e 6b 65 79 20 3d 20 6e 65 77 20 4d  this.key = new M
153a0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 6b  ockRegistryKey(k
153b0 65 79 2c 20 74 72 75 65 2c 20 74 72 75 65 2c 20  ey, true, true, 
153c0 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  true);....      
153d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
153e0 79 2e 44 69 73 61 62 6c 65 43 6c 6f 73 65 28 29  y.DisableClose()
153f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
15400 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
15410 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
15420 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
15430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15440 20 20 20 74 68 69 73 2e 6b 65 79 20 3d 20 6e 75     this.key = nu
15450 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
15460 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
15470 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
15480 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
15490 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
154a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
154b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
154c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
154d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
154e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
154f0 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50  #region Public P
15500 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20  roperties..     
15510 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
15520 74 72 69 6e 67 20 6d 65 74 68 6f 64 4e 61 6d 65  tring methodName
15530 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
15540 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4d 65 74  ublic string Met
15550 68 6f 64 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  hodName..       
15560 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15570 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68          get { Ch
15580 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
15590 65 74 75 72 6e 20 6d 65 74 68 6f 64 4e 61 6d 65  eturn methodName
155a0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
155b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
155c0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
155d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
155e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
155f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15600 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
15610 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63       private Moc
15620 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
15630 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
15640 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
15650 72 79 4b 65 79 20 4b 65 79 0d 0a 20 20 20 20 20  ryKey Key..     
15660 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15670 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
15680 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
15690 20 72 65 74 75 72 6e 20 6b 65 79 3b 20 7d 0d 0a   return key; }..
156a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
156b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
156c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
156d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
156e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
156f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15700 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15710 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 73  private string s
15720 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20  ubKeyName;..    
15730 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
15740 74 72 69 6e 67 20 53 75 62 4b 65 79 4e 61 6d 65  tring SubKeyName
15750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
15760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15770 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
15780 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 73  osed(); return s
15790 75 62 4b 65 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20  ubKeyName; }..  
157a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
157b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
157c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
157d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
157e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
157f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
15800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
15810 69 76 61 74 65 20 73 74 72 69 6e 67 20 76 61 6c  ivate string val
15820 75 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  ueName;..       
15830 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
15840 6e 67 20 56 61 6c 75 65 4e 61 6d 65 0d 0a 20 20  ng ValueName..  
15850 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
15860 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
15870 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
15880 28 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 75 65  (); return value
15890 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Name; }..       
158a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
158b0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
158c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
158d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
158e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
158f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
15900 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
15910 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 3b 0d 0a   object value;..
15920 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
15930 69 63 20 6f 62 6a 65 63 74 20 56 61 6c 75 65 0d  ic object Value.
15940 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
15950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15960 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
15970 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 76 61  sed(); return va
15980 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
15990 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
159a0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
159b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
159c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
159d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
159e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
159f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15a00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15a10 23 72 65 67 69 6f 6e 20 53 79 73 74 65 6d 2e 4f  #region System.O
15a20 62 6a 65 63 74 20 4f 76 65 72 72 69 64 65 73 0d  bject Overrides.
15a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
15a40 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  lic override boo
15a50 6c 20 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20  l Equals(..     
15a60 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
15a70 74 20 6f 62 6a 0d 0a 20 20 20 20 20 20 20 20 20  t obj..         
15a80 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
15a90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15aa0 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
15ab0 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
15ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
15ad0 69 73 74 72 79 4f 70 65 72 61 74 69 6f 6e 20 6f  istryOperation o
15ae0 70 65 72 61 74 69 6f 6e 20 3d 20 6f 62 6a 20 61  peration = obj a
15af0 73 20 52 65 67 69 73 74 72 79 4f 70 65 72 61 74  s RegistryOperat
15b00 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ion;....        
15b10 20 20 20 20 20 20 20 20 69 66 20 28 6f 70 65 72          if (oper
15b20 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ation == null)..
15b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b40 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
15b50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15b60 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
15b70 2e 45 71 75 61 6c 73 28 6f 70 65 72 61 74 69 6f  .Equals(operatio
15b80 6e 2e 6d 65 74 68 6f 64 4e 61 6d 65 2c 20 6d 65  n.methodName, me
15b90 74 68 6f 64 4e 61 6d 65 29 29 0d 0a 20 20 20 20  thodName))..    
15ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bb0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
15bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15bd0 20 69 66 20 28 21 4d 6f 63 6b 52 65 67 69 73 74   if (!MockRegist
15be0 72 79 4b 65 79 2e 45 71 75 61 6c 73 28 6f 70 65  ryKey.Equals(ope
15bf0 72 61 74 69 6f 6e 2e 6b 65 79 2c 20 6b 65 79 29  ration.key, key)
15c00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
15c10 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
15c20 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
15c30 20 20 20 20 20 20 20 20 69 66 20 28 21 4d 6f 63          if (!Moc
15c40 6b 52 65 67 69 73 74 72 79 4b 65 79 2e 4e 61 6d  kRegistryKey.Nam
15c50 65 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20 20  eEquals(..      
15c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c70 20 20 6f 70 65 72 61 74 69 6f 6e 2e 73 75 62 4b    operation.subK
15c80 65 79 4e 61 6d 65 2c 20 73 75 62 4b 65 79 4e 61  eyName, subKeyNa
15c90 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
15ca0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
15cc0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
15cd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
15ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15cf0 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75   if (!String.Equ
15d00 61 6c 73 28 6f 70 65 72 61 74 69 6f 6e 2e 76 61  als(operation.va
15d10 6c 75 65 4e 61 6d 65 2c 20 76 61 6c 75 65 4e 61  lueName, valueNa
15d20 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
15d30 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
15d40 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
15d50 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
15d60 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 2e  MockRegistryKey.
15d70 56 61 6c 75 65 45 71 75 61 6c 73 28 6f 70 65 72  ValueEquals(oper
15d80 61 74 69 6f 6e 2e 76 61 6c 75 65 2c 20 76 61 6c  ation.value, val
15d90 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
15da0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
15db0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
15dc0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
15dd0 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
15de0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
15df0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
15e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
15e40 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
15e50 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74  override int Get
15e60 48 61 73 68 43 6f 64 65 28 29 0d 0a 20 20 20 20  HashCode()..    
15e70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15e80 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
15e90 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
15ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
15eb0 6e 74 20 72 65 73 75 6c 74 20 3d 20 30 3b 0d 0a  nt result = 0;..
15ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15ed0 20 20 69 66 20 28 6d 65 74 68 6f 64 4e 61 6d 65    if (methodName
15ee0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
15ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
15f00 65 73 75 6c 74 20 5e 3d 20 6d 65 74 68 6f 64 4e  esult ^= methodN
15f10 61 6d 65 2e 47 65 74 48 61 73 68 43 6f 64 65 28  ame.GetHashCode(
15f20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
15f30 20 20 20 20 20 20 72 65 73 75 6c 74 20 5e 3d 20        result ^= 
15f40 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 2e  MockRegistryKey.
15f50 47 65 74 48 61 73 68 43 6f 64 65 28 6b 65 79 29  GetHashCode(key)
15f60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15f70 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 4e       if (subKeyN
15f80 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame != null)..  
15f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fa0 20 20 72 65 73 75 6c 74 20 5e 3d 20 73 75 62 4b    result ^= subK
15fb0 65 79 4e 61 6d 65 2e 47 65 74 48 61 73 68 43 6f  eyName.GetHashCo
15fc0 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  de();....       
15fd0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
15fe0 75 65 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d  ueName != null).
15ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16000 20 20 20 20 20 72 65 73 75 6c 74 20 5e 3d 20 76       result ^= v
16010 61 6c 75 65 4e 61 6d 65 2e 47 65 74 48 61 73 68  alueName.GetHash
16020 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Code();....     
16030 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
16040 74 20 5e 3d 20 4d 6f 63 6b 52 65 67 69 73 74 72  t ^= MockRegistr
16050 79 4b 65 79 2e 56 61 6c 75 65 48 61 73 68 43 6f  yKey.ValueHashCo
16060 64 65 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20  de(value);....  
16070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
16080 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
16090 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
160a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
160b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
160c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
160d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
160e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
160f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
16100 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74  blic override st
16110 72 69 6e 67 20 54 6f 53 74 72 69 6e 67 28 29 0d  ring ToString().
16120 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
16130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16140 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
16150 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16160 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65      StringBuilde
16170 72 20 62 75 69 6c 64 65 72 20 3d 20 6e 65 77 20  r builder = new 
16180 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b  StringBuilder();
16190 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
161a0 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65      builder.Appe
161b0 6e 64 28 46 6f 72 44 69 73 70 6c 61 79 28 6d 65  nd(ForDisplay(me
161c0 74 68 6f 64 4e 61 6d 65 29 29 3b 0d 0a 20 20 20  thodName));..   
161d0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69               bui
161e0 6c 64 65 72 2e 41 70 70 65 6e 64 28 46 69 65 6c  lder.Append(Fiel
161f0 64 44 65 6c 69 6d 69 74 65 72 29 3b 0d 0a 20 20  dDelimiter);..  
16200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75                bu
16210 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 46 6f 72  ilder.Append(For
16220 44 69 73 70 6c 61 79 28 6b 65 79 29 29 3b 0d 0a  Display(key));..
16230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16240 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 46  builder.Append(F
16250 69 65 6c 64 44 65 6c 69 6d 69 74 65 72 29 3b 0d  ieldDelimiter);.
16260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16270 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28   builder.Append(
16280 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65  ForDisplay(subKe
16290 79 4e 61 6d 65 29 29 3b 0d 0a 20 20 20 20 20 20  yName));..      
162a0 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 65            builde
162b0 72 2e 41 70 70 65 6e 64 28 46 69 65 6c 64 44 65  r.Append(FieldDe
162c0 6c 69 6d 69 74 65 72 29 3b 0d 0a 20 20 20 20 20  limiter);..     
162d0 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64             build
162e0 65 72 2e 41 70 70 65 6e 64 28 46 6f 72 44 69 73  er.Append(ForDis
162f0 70 6c 61 79 28 76 61 6c 75 65 4e 61 6d 65 29 29  play(valueName))
16300 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
16310 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e     builder.Appen
16320 64 28 46 69 65 6c 64 44 65 6c 69 6d 69 74 65 72  d(FieldDelimiter
16330 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
16340 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70        builder.Ap
16350 70 65 6e 64 28 46 6f 72 44 69 73 70 6c 61 79 28  pend(ForDisplay(
16360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16370 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
16380 72 79 4b 65 79 2e 56 61 6c 75 65 54 6f 53 74 72  ryKey.ValueToStr
16390 69 6e 67 28 76 61 6c 75 65 2c 20 22 2c 20 22 2c  ing(value, ", ",
163a0 20 22 3c 6e 75 6c 6c 3e 22 29 29 29 3b 0d 0a 0d   "<null>")));...
163b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
163c0 20 72 65 74 75 72 6e 20 62 75 69 6c 64 65 72 2e   return builder.
163d0 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20  ToString();..   
163e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
163f0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
16400 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
16410 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
16420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16450 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
16460 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69       #region IDi
16470 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74 65 72  sposable "Patter
16480 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20  n" Members..    
16490 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
164a0 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a  bool disposed;..
164b0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
164c0 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b 44 69  ate void CheckDi
164d0 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68 72 6f  sposed() /* thro
164e0 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
164f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16500 20 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73       if (!dispos
16510 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
16520 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
16530 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16540 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62      throw new Ob
16550 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65  jectDisposedExce
16560 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
16570 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
16580 6f 66 28 52 65 67 69 73 74 72 79 4f 70 65 72 61  of(RegistryOpera
16590 74 69 6f 6e 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20  tion).Name);..  
165a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
165b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
165c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
165d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
165e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
165f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
16600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
16610 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63 74  ivate /* protect
16620 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f  ed virtual */ vo
16630 69 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20 20  id Dispose(..   
16640 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
16650 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20  l disposing..   
16660 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
16670 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
16680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
16690 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20  f (!disposed).. 
166a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
166b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
166c0 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73        if (dispos
166d0 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ing)..          
166e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
166f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16700 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
16710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16720 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
16730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16740 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61     // dispose ma
16750 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
16760 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
16770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16780 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
16790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
167a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
167b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167c0 20 69 66 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c   if (key != null
167d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
167e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
167f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16800 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 43 6c            key.Cl
16810 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
16820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16830 20 20 20 20 6b 65 79 20 3d 20 6e 75 6c 6c 3b 0d      key = null;.
16840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16850 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
16860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16870 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
16880 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
16890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
168a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
168b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
168c0 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20       // release 
168d0 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  unmanaged resour
168e0 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
168f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16900 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
16910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16920 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
16930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
16940 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
16950 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
16960 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 6e  This object is n
16970 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20  ow disposed...  
16980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16990 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
169a0 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73            dispos
169b0 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
169c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
169d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
169e0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
169f0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
16a00 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
16a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a40 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
16a50 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
16a60 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65  Disposable Membe
16a70 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
16a80 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70  public void Disp
16a90 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ose()..         
16aa0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16ab0 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 74 72        Dispose(tr
16ac0 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
16ad0 20 20 20 20 20 20 47 43 2e 53 75 70 70 72 65 73        GC.Suppres
16ae0 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b  sFinalize(this);
16af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
16b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
16b10 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
16b20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
16b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
16b70 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
16b80 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20  n Destructor..  
16b90 20 20 20 20 20 20 20 20 20 20 7e 52 65 67 69 73            ~Regis
16ba0 74 72 79 4f 70 65 72 61 74 69 6f 6e 28 29 0d 0a  tryOperation()..
16bb0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
16bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
16bd0 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a  ispose(false);..
16be0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
16bf0 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
16c00 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  egion..        }
16c10 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
16c20 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
16c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c70 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
16c80 20 20 20 23 72 65 67 69 6f 6e 20 53 74 72 69 6e     #region Strin
16c90 67 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20  gList Class..   
16ca0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
16cb0 6c 65 64 20 63 6c 61 73 73 20 53 74 72 69 6e 67  led class String
16cc0 4c 69 73 74 20 3a 20 4c 69 73 74 3c 73 74 72 69  List : List<stri
16cd0 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ng>..        {..
16ce0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
16cf0 69 63 20 53 74 72 69 6e 67 4c 69 73 74 28 29 0d  ic StringList().
16d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16d10 20 3a 20 62 61 73 65 28 29 0d 0a 20 20 20 20 20   : base()..     
16d20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16d30 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
16d40 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
16d50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
16d60 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
16d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
16db0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
16dc0 20 53 74 72 69 6e 67 4c 69 73 74 28 49 45 6e 75   StringList(IEnu
16dd0 6d 65 72 61 62 6c 65 3c 73 74 72 69 6e 67 3e 20  merable<string> 
16de0 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20  collection)..   
16df0 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 62               : b
16e00 61 73 65 28 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d  ase(collection).
16e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
16e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e30 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
16e40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
16e50 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
16e60 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
16e70 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
16e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
16ec0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
16ed0 6f 6e 20 53 74 72 69 6e 67 44 69 63 74 69 6f 6e  on StringDiction
16ee0 61 72 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  ary Class..     
16ef0 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
16f00 64 20 63 6c 61 73 73 20 53 74 72 69 6e 67 44 69  d class StringDi
16f10 63 74 69 6f 6e 61 72 79 20 3a 20 44 69 63 74 69  ctionary : Dicti
16f20 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 73 74  onary<string, st
16f30 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20 7b  ring>..        {
16f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
16f50 62 6c 69 63 20 53 74 72 69 6e 67 44 69 63 74 69  blic StringDicti
16f60 6f 6e 61 72 79 28 29 0d 0a 20 20 20 20 20 20 20  onary()..       
16f70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16f80 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
16f90 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
16fa0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
16fb0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
16fc0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
16fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17010 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
17020 20 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73 69     #region Versi
17030 6f 6e 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20  onList Class..  
17040 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
17050 61 6c 65 64 20 63 6c 61 73 73 20 56 65 72 73 69  aled class Versi
17060 6f 6e 4c 69 73 74 20 3a 20 4c 69 73 74 3c 56 65  onList : List<Ve
17070 72 73 69 6f 6e 3e 0d 0a 20 20 20 20 20 20 20 20  rsion>..        
17080 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  {..            p
17090 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73  ublic VersionLis
170a0 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t()..           
170b0 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20       : base().. 
170c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
170d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
170e0 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
170f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
17100 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
17110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
17150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
17160 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74  blic VersionList
17170 28 49 45 6e 75 6d 65 72 61 62 6c 65 3c 56 65 72  (IEnumerable<Ver
17180 73 69 6f 6e 3e 20 63 6f 6c 6c 65 63 74 69 6f 6e  sion> collection
17190 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
171a0 20 20 20 3a 20 62 61 73 65 28 63 6f 6c 6c 65 63     : base(collec
171b0 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20  tion)..         
171c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
171d0 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
171e0 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
171f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
17200 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
17210 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
17220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17260 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
17270 20 23 72 65 67 69 6f 6e 20 56 65 72 73 69 6f 6e   #region Version
17280 4d 61 70 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  Map Class..     
17290 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
172a0 64 20 63 6c 61 73 73 20 56 65 72 73 69 6f 6e 4d  d class VersionM
172b0 61 70 20 3a 20 44 69 63 74 69 6f 6e 61 72 79 3c  ap : Dictionary<
172c0 73 74 72 69 6e 67 2c 20 56 65 72 73 69 6f 6e 4c  string, VersionL
172d0 69 73 74 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ist>..        {.
172e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
172f0 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61 70 28 29  lic VersionMap()
17300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
17310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17320 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
17330 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
17340 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
17350 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
17360 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
17370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
173a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
173b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
173c0 69 6f 6e 20 50 61 63 6b 61 67 65 20 43 6c 61 73  ion Package Clas
173d0 73 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72  s..        inter
173e0 6e 61 6c 20 73 65 61 6c 65 64 20 63 6c 61 73 73  nal sealed class
173f0 20 50 61 63 6b 61 67 65 0d 0a 20 20 20 20 20 20   Package..      
17400 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17410 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
17420 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
17430 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
17440 20 50 61 63 6b 61 67 65 28 29 0d 0a 20 20 20 20   Package()..    
17450 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
17460 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
17470 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
17480 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
17490 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
174a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
174b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
174c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
174d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
174e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
174f0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
17500 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
17510 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
17520 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
17530 65 20 73 74 72 69 6e 67 20 70 72 6f 76 69 64 65  e string provide
17540 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 3b 0d  rInvariantName;.
17550 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
17560 6c 69 63 20 73 74 72 69 6e 67 20 50 72 6f 76 69  lic string Provi
17570 64 65 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65  derInvariantName
17580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
17590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
175a0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 72   get { return pr
175b0 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e  oviderInvariantN
175c0 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ame; }..        
175d0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 70 72          set { pr
175e0 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e  oviderInvariantN
175f0 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ame = value; }..
17600 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
17610 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
17620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17660 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17670 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 66  private string f
17680 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 3b 0d  actoryTypeName;.
17690 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
176a0 6c 69 63 20 73 74 72 69 6e 67 20 46 61 63 74 6f  lic string Facto
176b0 72 79 54 79 70 65 4e 61 6d 65 0d 0a 20 20 20 20  ryTypeName..    
176c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
176d0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
176e0 20 72 65 74 75 72 6e 20 66 61 63 74 6f 72 79 54   return factoryT
176f0 79 70 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  ypeName; }..    
17700 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
17710 7b 20 66 61 63 74 6f 72 79 54 79 70 65 4e 61 6d  { factoryTypeNam
17720 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
17730 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
17740 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
17750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
17790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
177a0 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61  ivate AssemblyNa
177b0 6d 65 20 70 72 6f 76 69 64 65 72 41 73 73 65 6d  me providerAssem
177c0 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  blyName;..      
177d0 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73        public Ass
177e0 65 6d 62 6c 79 4e 61 6d 65 20 50 72 6f 76 69 64  emblyName Provid
177f0 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 0d 0a  erAssemblyName..
17800 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
17810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
17820 65 74 20 7b 20 72 65 74 75 72 6e 20 70 72 6f 76  et { return prov
17830 69 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65  iderAssemblyName
17840 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
17850 20 20 20 20 20 73 65 74 20 7b 20 70 72 6f 76 69       set { provi
17860 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  derAssemblyName 
17870 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
17880 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
17890 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
178a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
178b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
178c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
178d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
178e0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
178f0 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65  ate AssemblyName
17900 20 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c   designerAssembl
17910 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
17920 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d      public Assem
17930 62 6c 79 4e 61 6d 65 20 44 65 73 69 67 6e 65 72  blyName Designer
17940 41 73 73 65 6d 62 6c 79 4e 61 6d 65 0d 0a 20 20  AssemblyName..  
17950 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
17960 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
17970 20 7b 20 72 65 74 75 72 6e 20 64 65 73 69 67 6e   { return design
17980 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 20  erAssemblyName; 
17990 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
179a0 20 20 20 73 65 74 20 7b 20 64 65 73 69 67 6e 65     set { designe
179b0 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20  rAssemblyName = 
179c0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
179d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
179e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
179f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
17a30 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
17a40 65 20 62 6f 6f 6c 20 67 6c 6f 62 61 6c 41 73 73  e bool globalAss
17a50 65 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 20 20 20  emblyCache;..   
17a60 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
17a70 62 6f 6f 6c 20 47 6c 6f 62 61 6c 41 73 73 65 6d  bool GlobalAssem
17a80 62 6c 79 43 61 63 68 65 0d 0a 20 20 20 20 20 20  blyCache..      
17a90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17aa0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
17ab0 65 74 75 72 6e 20 67 6c 6f 62 61 6c 41 73 73 65  eturn globalAsse
17ac0 6d 62 6c 79 43 61 63 68 65 3b 20 7d 0d 0a 20 20  mblyCache; }..  
17ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
17ae0 74 20 7b 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62  t { globalAssemb
17af0 6c 79 43 61 63 68 65 20 3d 20 76 61 6c 75 65 3b  lyCache = value;
17b00 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
17b10 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
17b20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
17b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17b60 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
17b70 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69 64      private Guid
17b80 20 70 61 63 6b 61 67 65 49 64 3b 0d 0a 20 20 20   packageId;..   
17b90 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
17ba0 47 75 69 64 20 50 61 63 6b 61 67 65 49 64 0d 0a  Guid PackageId..
17bb0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
17bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
17bd0 65 74 20 7b 20 72 65 74 75 72 6e 20 70 61 63 6b  et { return pack
17be0 61 67 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20  ageId; }..      
17bf0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
17c00 70 61 63 6b 61 67 65 49 64 20 3d 20 76 61 6c 75  packageId = valu
17c10 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
17c20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
17c30 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
17c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17c70 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
17c80 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75        private Gu
17c90 69 64 20 73 65 72 76 69 63 65 49 64 3b 0d 0a 20  id serviceId;.. 
17ca0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
17cb0 63 20 47 75 69 64 20 53 65 72 76 69 63 65 49 64  c Guid ServiceId
17cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
17cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17ce0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73 65   get { return se
17cf0 72 76 69 63 65 49 64 3b 20 7d 0d 0a 20 20 20 20  rviceId; }..    
17d00 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
17d10 7b 20 73 65 72 76 69 63 65 49 64 20 3d 20 76 61  { serviceId = va
17d20 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
17d30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
17d40 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
17d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d80 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
17d90 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
17da0 47 75 69 64 20 64 61 74 61 53 6f 75 72 63 65 49  Guid dataSourceI
17db0 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
17dc0 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74 61  public Guid Data
17dd0 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20 20  SourceId..      
17de0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17df0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
17e00 65 74 75 72 6e 20 64 61 74 61 53 6f 75 72 63 65  eturn dataSource
17e10 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  Id; }..         
17e20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 61 74         set { dat
17e30 61 53 6f 75 72 63 65 49 64 20 3d 20 76 61 6c 75  aSourceId = valu
17e40 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
17e50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
17e60 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
17e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ea0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
17eb0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75        private Gu
17ec0 69 64 20 64 61 74 61 50 72 6f 76 69 64 65 72 49  id dataProviderI
17ed0 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
17ee0 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74 61  public Guid Data
17ef0 50 72 6f 76 69 64 65 72 49 64 0d 0a 20 20 20 20  ProviderId..    
17f00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
17f10 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
17f20 20 72 65 74 75 72 6e 20 64 61 74 61 50 72 6f 76   return dataProv
17f30 69 64 65 72 49 64 3b 20 7d 0d 0a 20 20 20 20 20  iderId; }..     
17f40 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
17f50 20 64 61 74 61 50 72 6f 76 69 64 65 72 49 64 20   dataProviderId 
17f60 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
17f70 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
17f80 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
17f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
17fd0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
17fe0 61 74 65 20 47 75 69 64 20 61 64 6f 4e 65 74 54  ate Guid adoNetT
17ff0 65 63 68 6e 6f 6c 6f 67 79 49 64 3b 0d 0a 20 20  echnologyId;..  
18000 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
18010 20 47 75 69 64 20 41 64 6f 4e 65 74 54 65 63 68   Guid AdoNetTech
18020 6e 6f 6c 6f 67 79 49 64 0d 0a 20 20 20 20 20 20  nologyId..      
18030 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
18040 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
18050 65 74 75 72 6e 20 61 64 6f 4e 65 74 54 65 63 68  eturn adoNetTech
18060 6e 6f 6c 6f 67 79 49 64 3b 20 7d 0d 0a 20 20 20  nologyId; }..   
18070 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
18080 20 7b 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f 6c   { adoNetTechnol
18090 6f 67 79 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d  ogyId = value; }
180a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
180b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
180c0 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
180d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
180e0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
180f0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
18100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18130 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
18140 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6e       #region Con
18150 66 69 67 75 72 61 74 69 6f 6e 20 43 6c 61 73 73  figuration Class
18160 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
18170 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 43  e sealed class C
18180 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20  onfiguration..  
18190 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
181a0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
181b0 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a  vate Constants..
181c0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
181d0 61 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20 53  ate const char S
181e0 77 69 74 63 68 20 3d 20 27 2d 27 3b 0d 0a 20 20  witch = '-';..  
181f0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
18200 65 20 63 6f 6e 73 74 20 63 68 61 72 20 41 6c 74  e const char Alt
18210 53 77 69 74 63 68 20 3d 20 27 2f 27 3b 0d 0a 0d  Switch = '/';...
18220 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
18230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18270 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18280 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72  private static r
18290 65 61 64 6f 6e 6c 79 20 63 68 61 72 5b 5d 20 53  eadonly char[] S
182a0 77 69 74 63 68 43 68 61 72 73 20 3d 20 7b 0d 0a  witchChars = {..
182b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182c0 53 77 69 74 63 68 2c 20 41 6c 74 53 77 69 74 63  Switch, AltSwitc
182d0 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  h..            }
182e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
182f0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
18300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18330 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
18340 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
18350 74 20 73 74 72 69 6e 67 20 49 6e 76 61 72 69 61  t string Invaria
18360 6e 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  ntName = "System
18370 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a  .Data.SQLite";..
18380 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
18390 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
183a0 20 45 66 36 49 6e 76 61 72 69 61 6e 74 4e 61 6d   Ef6InvariantNam
183b0 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61  e = "System.Data
183c0 2e 53 51 4c 69 74 65 2e 45 46 36 22 3b 0d 0a 0d  .SQLite.EF6";...
183d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
183e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
183f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18420 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18430 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
18440 72 69 6e 67 20 46 61 63 74 6f 72 79 54 79 70 65  ring FactoryType
18450 4e 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20 20  Name =..        
18460 20 20 20 20 20 20 20 20 22 53 79 73 74 65 6d 2e          "System.
18470 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
18480 74 65 46 61 63 74 6f 72 79 22 3b 0d 0a 0d 0a 20  teFactory";.... 
18490 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
184a0 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
184b0 45 66 36 46 61 63 74 6f 72 79 54 79 70 65 4e 61  Ef6FactoryTypeNa
184c0 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  me =..          
184d0 20 20 20 20 20 20 22 53 79 73 74 65 6d 2e 44 61        "System.Da
184e0 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 53 51  ta.SQLite.EF6.SQ
184f0 4c 69 74 65 50 72 6f 76 69 64 65 72 46 61 63 74  LiteProviderFact
18500 6f 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory";..         
18510 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
18520 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
18530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18570 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18580 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
18590 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20 20  Static Data..   
185a0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
185b0 20 73 74 61 74 69 63 20 41 73 73 65 6d 62 6c 79   static Assembly
185c0 20 73 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62   systemEf6Assemb
185d0 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly;..           
185e0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
185f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
18600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
18640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
18650 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44 61  egion Private Da
18660 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ta..            
18670 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79  private Assembly
18680 4e 61 6d 65 20 63 6f 72 65 41 73 73 65 6d 62 6c  Name coreAssembl
18690 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
186a0 20 20 20 20 70 72 69 76 61 74 65 20 41 73 73 65      private Asse
186b0 6d 62 6c 79 4e 61 6d 65 20 6c 69 6e 71 41 73 73  mblyName linqAss
186c0 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20  emblyName;..    
186d0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
186e0 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 65 66 36  AssemblyName ef6
186f0 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20  AssemblyName;.. 
18700 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
18710 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  te AssemblyName 
18720 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79  designerAssembly
18730 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
18740 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
18750 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
18760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
187a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
187b0 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
187c0 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
187d0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
187e0 65 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28  e Configuration(
187f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18800 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d    Assembly assem
18810 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  bly,..          
18820 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 6f 67        string log
18830 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
18840 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
18850 67 20 72 65 67 69 73 74 72 79 4c 6f 67 46 69 6c  g registryLogFil
18860 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
18870 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
18880 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
18890 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
188a0 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 0d  g coreFileName,.
188b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
188c0 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65   string linqFile
188d0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
188e0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 65 66         string ef
188f0 36 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  6FileName,..    
18900 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
18910 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  ng designerFileN
18920 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
18930 20 20 20 20 20 20 73 74 72 69 6e 67 20 72 65 67        string reg
18940 69 73 74 72 79 56 65 72 73 69 6f 6e 2c 0d 0a 20  istryVersion,.. 
18950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
18960 74 72 69 6e 67 20 63 6f 6e 66 69 67 56 65 72 73  tring configVers
18970 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
18980 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 73 56        string vsV
18990 65 72 73 69 6f 6e 53 75 66 66 69 78 2c 0d 0a 20  ersionSuffix,.. 
189a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
189b0 74 72 69 6e 67 20 64 65 62 75 67 46 6f 72 6d 61  tring debugForma
189c0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
189d0 20 20 20 20 73 74 72 69 6e 67 20 74 72 61 63 65      string trace
189e0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
189f0 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c           Install
18a00 46 6c 61 67 73 20 69 6e 73 74 61 6c 6c 46 6c 61  Flags installFla
18a10 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs,..           
18a20 20 20 20 20 20 50 72 6f 76 69 64 65 72 46 6c 61       ProviderFla
18a30 67 73 20 70 72 6f 76 69 64 65 72 46 6c 61 67 73  gs providerFlags
18a40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
18a50 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
18a60 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 2c 0d   debugPriority,.
18a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18a80 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
18a90 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20  racePriority,.. 
18aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
18ab0 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
18ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
18ad0 6f 6c 20 69 6e 73 74 61 6c 6c 2c 0d 0a 20 20 20  ol install,..   
18ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
18af0 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
18b00 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
18b10 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c  oRuntimeVersion,
18b20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18b30 20 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70    bool noDesktop
18b40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
18b50 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63     bool noCompac
18b60 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
18b70 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78      bool noNetFx
18b80 32 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  20,..           
18b90 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46       bool noNetF
18ba0 78 33 35 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  x35,..          
18bb0 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74        bool noNet
18bc0 46 78 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 20  Fx40,..         
18bd0 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65         bool noNe
18be0 74 46 78 34 35 2c 0d 0a 20 20 20 20 20 20 20 20  tFx45,..        
18bf0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e          bool noN
18c00 65 74 46 78 34 35 31 2c 0d 0a 20 20 20 20 20 20  etFx451,..      
18c10 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
18c20 6f 4e 65 74 46 78 34 35 32 2c 0d 0a 20 20 20 20  oNetFx452,..    
18c30 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
18c40 20 6e 6f 4e 65 74 46 78 34 36 2c 0d 0a 20 20 20   noNetFx46,..   
18c50 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
18c60 6c 20 6e 6f 4e 65 74 46 78 34 36 31 2c 0d 0a 20  l noNetFx461,.. 
18c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
18c80 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 36 32 2c 0d  ool noNetFx462,.
18c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18ca0 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 37 2c   bool noNetFx47,
18cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18cc0 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 37    bool noNetFx47
18cd0 31 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1,..            
18ce0 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30      bool noVs200
18cf0 35 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5,..            
18d00 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30      bool noVs200
18d10 38 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  8,..            
18d20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31      bool noVs201
18d30 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0,..            
18d40 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31      bool noVs201
18d50 32 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  2,..            
18d60 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31      bool noVs201
18d70 33 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  3,..            
18d80 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31      bool noVs201
18d90 35 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5,..            
18da0 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31      bool noVs201
18db0 37 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  7,..            
18dc0 20 20 20 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65      bool noTrace
18dd0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
18de0 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c     bool noConsol
18df0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
18e00 20 20 20 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 2c 0d      bool noLog,.
18e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18e20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
18e30 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
18e40 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
18e50 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
18e60 20 20 20 20 20 62 6f 6f 6c 20 64 65 62 75 67 2c       bool debug,
18e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18e80 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
18e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18ea0 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d 0d 0a 20   bool confirm.. 
18eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
18ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
18ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18ee0 20 74 68 69 73 2e 61 73 73 65 6d 62 6c 79 20 3d   this.assembly =
18ef0 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20   assembly;..    
18f00 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
18f10 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 6c  .logFileName = l
18f20 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  ogFileName;..   
18f30 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
18f40 73 2e 72 65 67 69 73 74 72 79 4c 6f 67 46 69 6c  s.registryLogFil
18f50 65 4e 61 6d 65 20 3d 20 72 65 67 69 73 74 72 79  eName = registry
18f60 4c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  LogFileName;..  
18f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
18f80 69 73 2e 64 69 72 65 63 74 6f 72 79 20 3d 20 64  is.directory = d
18f90 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20  irectory;..     
18fa0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
18fb0 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 63  coreFileName = c
18fc0 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  oreFileName;..  
18fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
18fe0 69 73 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20  is.linqFileName 
18ff0 3d 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d  = linqFileName;.
19000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19010 20 74 68 69 73 2e 65 66 36 46 69 6c 65 4e 61 6d   this.ef6FileNam
19020 65 20 3d 20 65 66 36 46 69 6c 65 4e 61 6d 65 3b  e = ef6FileName;
19030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19040 20 20 74 68 69 73 2e 64 65 73 69 67 6e 65 72 46    this.designerF
19050 69 6c 65 4e 61 6d 65 20 3d 20 64 65 73 69 67 6e  ileName = design
19060 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  erFileName;..   
19070 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
19080 73 2e 72 65 67 69 73 74 72 79 56 65 72 73 69 6f  s.registryVersio
19090 6e 20 3d 20 72 65 67 69 73 74 72 79 56 65 72 73  n = registryVers
190a0 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ion;..          
190b0 20 20 20 20 20 20 74 68 69 73 2e 63 6f 6e 66 69        this.confi
190c0 67 56 65 72 73 69 6f 6e 20 3d 20 63 6f 6e 66 69  gVersion = confi
190d0 67 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20  gVersion;..     
190e0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
190f0 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 20  vsVersionSuffix 
19100 3d 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69  = vsVersionSuffi
19110 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x;..            
19120 20 20 20 20 74 68 69 73 2e 64 65 62 75 67 46 6f      this.debugFo
19130 72 6d 61 74 20 3d 20 64 65 62 75 67 46 6f 72 6d  rmat = debugForm
19140 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
19150 20 20 20 20 20 74 68 69 73 2e 74 72 61 63 65 46       this.traceF
19160 6f 72 6d 61 74 20 3d 20 74 72 61 63 65 46 6f 72  ormat = traceFor
19170 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mat;..          
19180 20 20 20 20 20 20 74 68 69 73 2e 69 6e 73 74 61        this.insta
19190 6c 6c 46 6c 61 67 73 20 3d 20 69 6e 73 74 61 6c  llFlags = instal
191a0 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20  lFlags;..       
191b0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 70 72           this.pr
191c0 6f 76 69 64 65 72 46 6c 61 67 73 20 3d 20 70 72  oviderFlags = pr
191d0 6f 76 69 64 65 72 46 6c 61 67 73 3b 0d 0a 20 20  oviderFlags;..  
191e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
191f0 69 73 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79  is.debugPriority
19200 20 3d 20 64 65 62 75 67 50 72 69 6f 72 69 74 79   = debugPriority
19210 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19220 20 20 20 74 68 69 73 2e 74 72 61 63 65 50 72 69     this.tracePri
19230 6f 72 69 74 79 20 3d 20 74 72 61 63 65 50 72 69  ority = tracePri
19240 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  ority;..        
19250 20 20 20 20 20 20 20 20 74 68 69 73 2e 70 65 72          this.per
19260 55 73 65 72 20 3d 20 70 65 72 55 73 65 72 3b 0d  User = perUser;.
19270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19280 20 74 68 69 73 2e 69 6e 73 74 61 6c 6c 20 3d 20   this.install = 
19290 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20 20 20 20  install;..      
192a0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 77            this.w
192b0 6f 77 36 34 20 3d 20 77 6f 77 36 34 3b 0d 0a 20  ow64 = wow64;.. 
192c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
192d0 68 69 73 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72  his.noRuntimeVer
192e0 73 69 6f 6e 20 3d 20 6e 6f 52 75 6e 74 69 6d 65  sion = noRuntime
192f0 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20  Version;..      
19300 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
19310 6f 44 65 73 6b 74 6f 70 20 3d 20 6e 6f 44 65 73  oDesktop = noDes
19320 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20 20  ktop;..         
19330 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f         this.noCo
19340 6d 70 61 63 74 20 3d 20 6e 6f 43 6f 6d 70 61 63  mpact = noCompac
19350 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
19360 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78      this.noNetFx
19370 32 30 20 3d 20 6e 6f 4e 65 74 46 78 32 30 3b 0d  20 = noNetFx20;.
19380 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19390 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 33 35 20   this.noNetFx35 
193a0 3d 20 6e 6f 4e 65 74 46 78 33 35 3b 0d 0a 20 20  = noNetFx35;..  
193b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
193c0 69 73 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20 6e  is.noNetFx40 = n
193d0 6f 4e 65 74 46 78 34 30 3b 0d 0a 20 20 20 20 20  oNetFx40;..     
193e0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
193f0 6e 6f 4e 65 74 46 78 34 35 20 3d 20 6e 6f 4e 65  noNetFx45 = noNe
19400 74 46 78 34 35 3b 0d 0a 20 20 20 20 20 20 20 20  tFx45;..        
19410 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e          this.noN
19420 65 74 46 78 34 35 31 20 3d 20 6e 6f 4e 65 74 46  etFx451 = noNetF
19430 78 34 35 31 3b 0d 0a 20 20 20 20 20 20 20 20 20  x451;..         
19440 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65         this.noNe
19450 74 46 78 34 35 32 20 3d 20 6e 6f 4e 65 74 46 78  tFx452 = noNetFx
19460 34 35 32 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  452;..          
19470 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74        this.noNet
19480 46 78 34 36 20 3d 20 6e 6f 4e 65 74 46 78 34 36  Fx46 = noNetFx46
19490 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
194a0 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34     this.noNetFx4
194b0 36 31 20 3d 20 6e 6f 4e 65 74 46 78 34 36 31 3b  61 = noNetFx461;
194c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
194d0 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34 36    this.noNetFx46
194e0 32 20 3d 20 6e 6f 4e 65 74 46 78 34 36 32 3b 0d  2 = noNetFx462;.
194f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19500 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34 37 20   this.noNetFx47 
19510 3d 20 6e 6f 4e 65 74 46 78 34 37 3b 0d 0a 20 20  = noNetFx47;..  
19520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
19530 69 73 2e 6e 6f 4e 65 74 46 78 34 37 31 20 3d 20  is.noNetFx471 = 
19540 6e 6f 4e 65 74 46 78 34 37 31 3b 0d 0a 20 20 20  noNetFx471;..   
19550 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
19560 73 2e 6e 6f 56 73 32 30 30 35 20 3d 20 6e 6f 56  s.noVs2005 = noV
19570 73 32 30 30 35 3b 0d 0a 20 20 20 20 20 20 20 20  s2005;..        
19580 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56          this.noV
19590 73 32 30 30 38 20 3d 20 6e 6f 56 73 32 30 30 38  s2008 = noVs2008
195a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
195b0 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 31 30     this.noVs2010
195c0 20 3d 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20 20   = noVs2010;..  
195d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
195e0 69 73 2e 6e 6f 56 73 32 30 31 32 20 3d 20 6e 6f  is.noVs2012 = no
195f0 56 73 32 30 31 32 3b 0d 0a 20 20 20 20 20 20 20  Vs2012;..       
19600 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
19610 56 73 32 30 31 33 20 3d 20 6e 6f 56 73 32 30 31  Vs2013 = noVs201
19620 33 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  3;..            
19630 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 31      this.noVs201
19640 35 20 3d 20 6e 6f 56 73 32 30 31 35 3b 0d 0a 20  5 = noVs2015;.. 
19650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19660 68 69 73 2e 6e 6f 56 73 32 30 31 37 20 3d 20 6e  his.noVs2017 = n
19670 6f 56 73 32 30 31 37 3b 0d 0a 20 20 20 20 20 20  oVs2017;..      
19680 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
19690 6f 54 72 61 63 65 20 3d 20 6e 6f 54 72 61 63 65  oTrace = noTrace
196a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
196b0 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6e 73 6f 6c     this.noConsol
196c0 65 20 3d 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a  e = noConsole;..
196d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196e0 74 68 69 73 2e 6e 6f 4c 6f 67 20 3d 20 6e 6f 4c  this.noLog = noL
196f0 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  og;..           
19700 20 20 20 20 20 74 68 69 73 2e 74 68 72 6f 77 4f       this.throwO
19710 6e 4d 69 73 73 69 6e 67 20 3d 20 74 68 72 6f 77  nMissing = throw
19720 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20 20 20 20  OnMissing;..    
19730 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
19740 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74 49 66  .whatIf = whatIf
19750 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19760 20 20 20 74 68 69 73 2e 64 65 62 75 67 20 3d 20     this.debug = 
19770 64 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20  debug;..        
19780 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 65 72          this.ver
19790 62 6f 73 65 20 3d 20 76 65 72 62 6f 73 65 3b 0d  bose = verbose;.
197a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
197b0 20 74 68 69 73 2e 63 6f 6e 66 69 72 6d 20 3d 20   this.confirm = 
197c0 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20 20 20  confirm;..      
197d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
197e0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
197f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
19800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19840 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
19850 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
19860 65 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64 73  e Static Methods
19870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
19880 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69  ivate static voi
19890 64 20 47 65 74 44 65 66 61 75 6c 74 46 69 6c 65  d GetDefaultFile
198a0 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20  Names(..        
198b0 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
198c0 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ng directory,.. 
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
198e0 65 66 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69  ef string coreFi
198f0 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
19900 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
19910 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  ing linqFileName
19920 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
19930 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 66     ref string ef
19940 36 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  6FileName,..    
19950 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
19960 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46  string designerF
19970 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..       
19980 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
19990 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
199a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
199b0 68 69 73 41 73 73 65 6d 62 6c 79 20 3d 3d 20 6e  hisAssembly == n
199c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
199d0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
199e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
199f0 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d       directory =
19a00 20 50 61 74 68 2e 47 65 74 44 69 72 65 63 74 6f   Path.GetDirecto
19a10 72 79 4e 61 6d 65 28 74 68 69 73 41 73 73 65 6d  ryName(thisAssem
19a20 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 3b 0d 0a  bly.Location);..
19a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19a40 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
19a50 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63  ullOrEmpty(direc
19a60 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20  tory))..        
19a70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
19a80 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
19a90 20 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e         coreFileN
19aa0 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
19ab0 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ne(directory,.. 
19ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ad0 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 43 6f 72     Installer.Cor
19ae0 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  eFileName);.... 
19af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
19b00 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  inqFileName = Pa
19b10 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63  th.Combine(direc
19b20 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
19b30 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61             Insta
19b40 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d  ller.LinqFileNam
19b50 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
19b60 20 20 20 20 20 20 20 65 66 36 46 69 6c 65 4e 61         ef6FileNa
19b70 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  me = Path.Combin
19b80 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  e(directory,..  
19b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ba0 20 20 49 6e 73 74 61 6c 6c 65 72 2e 45 66 36 46    Installer.Ef6F
19bb0 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
19bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
19bd0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
19be0 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72  Path.Combine(dir
19bf0 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
19c00 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
19c10 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e 65 72 46  taller.DesignerF
19c20 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  ileName);..     
19c30 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
19c40 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
19c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
19c90 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
19ca0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 43  te static bool C
19cb0 68 65 63 6b 4f 70 74 69 6f 6e 28 0d 0a 20 20 20  heckOption(..   
19cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
19cd0 20 73 74 72 69 6e 67 20 61 72 67 0d 0a 20 20 20   string arg..   
19ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
19cf0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
19d10 74 72 69 6e 67 20 72 65 73 75 6c 74 20 3d 20 61  tring result = a
19d20 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rg;....         
19d30 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
19d40 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
19d50 28 72 65 73 75 6c 74 29 29 0d 0a 20 20 20 20 20  (result))..     
19d60 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
19d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d80 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
19d90 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
19da0 45 3a 20 52 65 6d 6f 76 65 20 61 6c 6c 20 6c 65  E: Remove all le
19db0 61 64 69 6e 67 20 73 77 69 74 63 68 20 63 68 61  ading switch cha
19dc0 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs...           
19dd0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
19de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19df0 20 72 65 73 75 6c 74 20 3d 20 72 65 73 75 6c 74   result = result
19e00 2e 54 72 69 6d 53 74 61 72 74 28 53 77 69 74 63  .TrimStart(Switc
19e10 68 43 68 61 72 73 29 3b 0d 0a 0d 0a 20 20 20 20  hChars);....    
19e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e30 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
19e40 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
19e50 20 48 6f 77 20 6d 61 6e 79 20 63 68 61 72 73 20   How many chars 
19e60 77 65 72 65 20 72 65 6d 6f 76 65 64 3f 0d 0a 20  were removed?.. 
19e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e80 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
19e90 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 63             int c
19ea0 6f 75 6e 74 20 3d 20 61 72 67 2e 4c 65 6e 67 74  ount = arg.Lengt
19eb0 68 20 2d 20 72 65 73 75 6c 74 2e 4c 65 6e 67 74  h - result.Lengt
19ec0 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  h;....          
19ed0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
19ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ef0 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 61 73 20 74    // NOTE: Was t
19f00 68 65 72 65 20 61 74 20 6c 65 61 73 74 20 6f 6e  here at least on
19f10 65 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e?..            
19f20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
19f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f40 69 66 20 28 63 6f 75 6e 74 20 3e 20 30 29 0d 0a  if (count > 0)..
19f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19f80 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
19f90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
19fa0 54 45 3a 20 4f 6b 2c 20 72 65 70 6c 61 63 65 20  TE: Ok, replace 
19fb0 74 68 65 69 72 20 6f 72 69 67 69 6e 61 6c 0d 0a  their original..
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fd0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
19fe0 20 61 72 67 75 6d 65 6e 74 2e 0d 0a 20 20 20 20   argument...    
19ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a000 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1a010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a020 61 72 67 20 3d 20 72 65 73 75 6c 74 3b 0d 0a 0d  arg = result;...
1a030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a040 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1a050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a060 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 59 65       // NOTE: Ye
1a070 73 2c 20 74 68 69 73 20 69 73 20 61 20 73 77 69  s, this is a swi
1a080 74 63 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  tch...          
1a090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1a0a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a0b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1a0c0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1a0d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1a0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1a0f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1a100 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1a110 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1a120 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1a130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a170 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1a180 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1a190 63 20 62 6f 6f 6c 20 4d 61 74 63 68 4f 70 74 69  c bool MatchOpti
1a1a0 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
1a1b0 20 20 20 20 20 73 74 72 69 6e 67 20 61 72 67 2c       string arg,
1a1c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a1d0 20 20 73 74 72 69 6e 67 20 6f 70 74 69 6f 6e 0d    string option.
1a1e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a1f0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
1a200 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1a210 20 20 20 69 66 20 28 28 61 72 67 20 3d 3d 20 6e     if ((arg == n
1a220 75 6c 6c 29 20 7c 7c 20 28 6f 70 74 69 6f 6e 20  ull) || (option 
1a230 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  == null))..     
1a240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1a250 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
1a260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a270 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 43 6f  return String.Co
1a280 6d 70 61 72 65 28 61 72 67 2c 20 30 2c 20 6f 70  mpare(arg, 0, op
1a290 74 69 6f 6e 2c 20 30 2c 0d 0a 20 20 20 20 20 20  tion, 0,..      
1a2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
1a2b0 67 2e 4c 65 6e 67 74 68 2c 20 53 74 72 69 6e 67  g.Length, String
1a2c0 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
1a2d0 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d  alIgnoreCase) ==
1a2e0 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0;..           
1a2f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1a300 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1a310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a340 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1a350 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
1a360 74 69 63 20 62 6f 6f 6c 3f 20 50 61 72 73 65 42  tic bool? ParseB
1a370 6f 6f 6c 65 61 6e 28 0d 0a 20 20 20 20 20 20 20  oolean(..       
1a380 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1a390 74 65 78 74 0d 0a 20 20 20 20 20 20 20 20 20 20  text..          
1a3a0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
1a3b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1a3c0 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
1a3d0 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
1a3e0 79 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20  y(text))..      
1a3f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a410 20 62 6f 6f 6c 20 76 61 6c 75 65 3b 0d 0a 0d 0a   bool value;....
1a420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a430 20 20 20 20 69 66 20 28 62 6f 6f 6c 2e 54 72 79      if (bool.Try
1a440 50 61 72 73 65 28 74 65 78 74 2c 20 6f 75 74 20  Parse(text, out 
1a450 76 61 6c 75 65 29 29 0d 0a 20 20 20 20 20 20 20  value))..       
1a460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a470 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
1a480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a490 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1a4a0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
1a4b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1a4c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1a4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a510 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1a520 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1a530 63 20 6f 62 6a 65 63 74 20 50 61 72 73 65 45 6e  c object ParseEn
1a540 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um(..           
1a550 20 20 20 20 20 54 79 70 65 20 65 6e 75 6d 54 79       Type enumTy
1a560 70 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  pe,..           
1a570 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78 74       string text
1a580 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a590 20 20 20 62 6f 6f 6c 20 6e 6f 43 61 73 65 0d 0a     bool noCase..
1a5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1a5c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a5d0 20 20 69 66 20 28 28 65 6e 75 6d 54 79 70 65 20    if ((enumType 
1a5e0 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 65 6e 75  == null) || !enu
1a5f0 6d 54 79 70 65 2e 49 73 45 6e 75 6d 29 0d 0a 20  mType.IsEnum).. 
1a600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a610 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
1a620 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a630 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
1a640 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 65 78  sNullOrEmpty(tex
1a650 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t))..           
1a660 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1a670 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
1a680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a690 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1a6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6b0 72 65 74 75 72 6e 20 45 6e 75 6d 2e 50 61 72 73  return Enum.Pars
1a6c0 65 28 65 6e 75 6d 54 79 70 65 2c 20 74 65 78 74  e(enumType, text
1a6d0 2c 20 6e 6f 43 61 73 65 29 3b 0d 0a 20 20 20 20  , noCase);..    
1a6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1a700 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20         catch..  
1a710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a720 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1a730 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1a740 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
1a750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a760 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1a770 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1a780 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1a790 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
1a7a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1a7b0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1a7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a7f0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1a800 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1a810 74 61 74 69 63 20 62 6f 6f 6c 20 49 73 53 79 73  tatic bool IsSys
1a820 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 47 6c  temEf6AssemblyGl
1a830 6f 62 61 6c 28 29 0d 0a 20 20 20 20 20 20 20 20  obal()..        
1a840 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1a850 20 20 20 20 20 20 20 69 66 20 28 73 79 73 74 65         if (syste
1a860 6d 45 66 36 41 73 73 65 6d 62 6c 79 20 3d 3d 20  mEf6Assembly == 
1a870 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1a880 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1a890 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
1a8a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1a8b0 72 6e 20 73 79 73 74 65 6d 45 66 36 41 73 73 65  rn systemEf6Asse
1a8c0 6d 62 6c 79 2e 47 6c 6f 62 61 6c 41 73 73 65 6d  mbly.GlobalAssem
1a8d0 62 6c 79 43 61 63 68 65 3b 0d 0a 20 20 20 20 20  blyCache;..     
1a8e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1a8f0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1a900 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1a910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a950 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1a960 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
1a970 63 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64 73  c Static Methods
1a980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1a990 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
1a9a0 20 42 72 65 61 6b 49 6e 74 6f 44 65 62 75 67 67   BreakIntoDebugg
1a9b0 65 72 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  er()..          
1a9c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1a9d0 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69       Console.Wri
1a9e0 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20 20 20 20  teLine(..       
1a9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41 74               "At
1aa00 74 61 63 68 20 61 20 64 65 62 75 67 67 65 72 20  tach a debugger 
1aa10 74 6f 20 70 72 6f 63 65 73 73 20 7b 30 7d 20 61  to process {0} a
1aa20 6e 64 20 70 72 65 73 73 20 22 20 2b 0d 0a 20 20  nd press " +..  
1aa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa40 20 20 22 61 6e 79 20 6b 65 79 20 74 6f 20 63 6f    "any key to co
1aa50 6e 74 69 6e 75 65 2e 22 2c 20 28 74 68 69 73 50  ntinue.", (thisP
1aa60 72 6f 63 65 73 73 20 21 3d 20 6e 75 6c 6c 29 20  rocess != null) 
1aa70 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
1aa80 20 20 20 20 20 20 20 74 68 69 73 50 72 6f 63 65         thisProce
1aa90 73 73 2e 49 64 2e 54 6f 53 74 72 69 6e 67 28 29  ss.Id.ToString()
1aaa0 20 3a 20 22 3c 75 6e 6b 6e 6f 77 6e 3e 22 29 3b   : "<unknown>");
1aab0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1aac0 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
1aad0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aaf0 43 6f 6e 73 6f 6c 65 2e 52 65 61 64 4b 65 79 28  Console.ReadKey(
1ab00 74 72 75 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20  true); /* throw 
1ab10 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1ab20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1ab30 20 20 20 20 20 20 20 63 61 74 63 68 20 28 49 6e         catch (In
1ab40 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
1ab50 63 65 70 74 69 6f 6e 29 20 2f 2f 20 43 6f 6e 73  ception) // Cons
1ab60 6f 6c 65 2e 52 65 61 64 4b 65 79 0d 0a 20 20 20  ole.ReadKey..   
1ab70 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1ab80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab90 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
1aba0 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
1abb0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1abc0 20 20 20 20 20 20 20 20 20 44 65 62 75 67 67 65           Debugge
1abd0 72 2e 42 72 65 61 6b 28 29 3b 0d 0a 20 20 20 20  r.Break();..    
1abe0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1abf0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1ac00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1ac40 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1ac50 69 63 20 73 74 61 74 69 63 20 43 6f 6e 66 69 67  ic static Config
1ac60 75 72 61 74 69 6f 6e 20 43 72 65 61 74 65 44 65  uration CreateDe
1ac70 66 61 75 6c 74 28 29 0d 0a 20 20 20 20 20 20 20  fault()..       
1ac80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1ac90 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
1aca0 69 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b  irectory = null;
1acb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1acc0 20 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c    string coreFil
1acd0 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  eName = null;.. 
1ace0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1acf0 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61  tring linqFileNa
1ad00 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  me = null;..    
1ad10 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1ad20 6e 67 20 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d  ng ef6FileName =
1ad30 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
1ad40 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
1ad50 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20  esignerFileName 
1ad60 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
1ad70 20 20 20 20 20 20 20 20 20 20 20 47 65 74 44 65             GetDe
1ad80 66 61 75 6c 74 46 69 6c 65 4e 61 6d 65 73 28 0d  faultFileNames(.
1ad90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ada0 20 20 20 20 20 72 65 66 20 64 69 72 65 63 74 6f       ref directo
1adb0 72 79 2c 20 72 65 66 20 63 6f 72 65 46 69 6c 65  ry, ref coreFile
1adc0 4e 61 6d 65 2c 20 72 65 66 20 6c 69 6e 71 46 69  Name, ref linqFi
1add0 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
1ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
1adf0 20 65 66 36 46 69 6c 65 4e 61 6d 65 2c 20 72 65   ef6FileName, re
1ae00 66 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  f designerFileNa
1ae10 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
1ae20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
1ae30 65 77 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ew Configuration
1ae40 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1ae50 20 20 20 20 20 20 20 74 68 69 73 41 73 73 65 6d         thisAssem
1ae60 62 6c 79 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c  bly, null, null,
1ae70 20 64 69 72 65 63 74 6f 72 79 2c 20 63 6f 72 65   directory, core
1ae80 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
1ae90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
1aea0 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 20 65 66 36  inqFileName, ef6
1aeb0 46 69 6c 65 4e 61 6d 65 2c 20 64 65 73 69 67 6e  FileName, design
1aec0 65 72 46 69 6c 65 4e 61 6d 65 2c 20 6e 75 6c 6c  erFileName, null
1aed0 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20  , null,..       
1aee0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c               nul
1aef0 6c 2c 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75  l, TraceOps.Debu
1af00 67 46 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f 70  gFormat, TraceOp
1af10 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 2c 0d 0a  s.TraceFormat,..
1af20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af30 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73      InstallFlags
1af40 2e 44 65 66 61 75 6c 74 2c 20 50 72 6f 76 69 64  .Default, Provid
1af50 65 72 46 6c 61 67 73 2e 44 65 66 61 75 6c 74 2c  erFlags.Default,
1af60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1af70 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
1af80 69 74 79 2e 44 65 66 61 75 6c 74 2c 20 54 72 61  ity.Default, Tra
1af90 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61 75  cePriority.Defau
1afa0 6c 74 2c 20 66 61 6c 73 65 2c 20 74 72 75 65 2c  lt, false, true,
1afb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1afc0 20 20 20 20 20 20 66 61 6c 73 65 2c 20 66 61 6c        false, fal
1afd0 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
1afe0 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20  , false, false, 
1aff0 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20  false, false,.. 
1b000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b010 20 20 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c     false, false,
1b020 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
1b030 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
1b040 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20  se, false,..    
1b050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b060 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61  false, false, fa
1b070 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  lse, false, fals
1b080 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
1b090 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20   false,..       
1b0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c               fal
1b0b0 73 65 2c 20 74 72 75 65 2c 20 74 72 75 65 2c 20  se, true, true, 
1b0c0 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61  false, false, fa
1b0d0 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lse);..         
1b0e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1b0f0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1b100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b130 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1b140 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
1b150 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
1b160 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
1b170 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
1b180 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f  ublic static boo
1b190 6c 20 46 72 6f 6d 41 72 67 73 28 0d 0a 20 20 20  l FromArgs(..   
1b1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
1b1b0 69 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20  ing[] args,..   
1b1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
1b1d0 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20  l strict,..     
1b1e0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 43             ref C
1b1f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e  onfiguration con
1b200 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20  figuration,..   
1b210 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
1b220 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
1b230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
1b240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1b250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b260 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
1b270 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b280 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1b290 28 61 72 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (args == null)..
1b2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
1b2c0 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1b2e0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
1b2f0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1b300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b310 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 20  configuration = 
1b320 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 72  Configuration.Cr
1b330 65 61 74 65 44 65 66 61 75 6c 74 28 29 3b 0d 0a  eateDefault();..
1b340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b350 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68        int length
1b360 20 3d 20 61 72 67 73 2e 4c 65 6e 67 74 68 3b 0d   = args.Length;.
1b370 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b380 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
1b390 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78  index = 0; index
1b3a0 20 3c 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78   < length; index
1b3b0 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++)..           
1b3c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1b3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3e0 20 20 20 20 73 74 72 69 6e 67 20 61 72 67 20 3d      string arg =
1b3f0 20 61 72 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d   args[index];...
1b400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b410 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1b420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b430 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b       // NOTE: Sk
1b440 69 70 20 61 6e 79 20 61 72 67 75 6d 65 6e 74 20  ip any argument 
1b450 74 68 61 74 20 69 73 20 6e 75 6c 6c 20 28 3f 29  that is null (?)
1b460 20 6f 72 20 61 6e 20 65 6d 70 74 79 0d 0a 20 20   or an empty..  
1b470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b480 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73        //       s
1b490 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  tring...        
1b4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4b0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1b4c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1b4d0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
1b4e0 6d 70 74 79 28 61 72 67 29 29 0d 0a 20 20 20 20  mpty(arg))..    
1b4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b500 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
1b510 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1b520 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1b530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b540 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1b550 3a 20 57 65 20 61 72 65 20 67 6f 69 6e 67 20 74  : We are going t
1b560 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 6f 72 69  o modify the ori
1b570 67 69 6e 61 6c 20 61 72 67 75 6d 65 6e 74 0d 0a  ginal argument..
1b580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b590 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1b5a0 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79   by removing any
1b5b0 20 6c 65 61 64 69 6e 67 20 6f 70 74 69 6f 6e 20   leading option 
1b5c0 63 68 61 72 61 63 74 65 72 73 3b 0d 0a 20 20 20  characters;..   
1b5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5e0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
1b5f0 65 72 65 66 6f 72 65 2c 20 77 65 20 75 73 65 20  erefore, we use 
1b600 61 20 6e 65 77 20 73 74 72 69 6e 67 20 74 6f 20  a new string to 
1b610 68 6f 6c 64 20 74 68 65 0d 0a 20 20 20 20 20 20  hold the..      
1b620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b630 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f 64 69 66    //       modif
1b640 69 65 64 20 61 72 67 75 6d 65 6e 74 2e 0d 0a 20  ied argument... 
1b650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b660 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1b670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b680 20 20 20 73 74 72 69 6e 67 20 6e 65 77 41 72 67     string newArg
1b690 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20   = arg;....     
1b6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6b0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b6d0 2f 20 4e 4f 54 45 3a 20 41 6c 6c 20 74 68 65 20  / NOTE: All the 
1b6e0 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e  supported comman
1b6f0 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20 6d  d line options m
1b700 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ust..           
1b710 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1b720 20 20 20 20 20 20 62 65 67 69 6e 20 77 69 74 68        begin with
1b730 20 61 6e 20 6f 70 74 69 6f 6e 20 63 68 61 72 61   an option chara
1b740 63 74 65 72 20 28 65 2e 67 2e 20 61 20 6d 69 6e  cter (e.g. a min
1b750 75 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  us..            
1b760 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1b770 20 20 20 20 20 6f 72 20 66 6f 72 77 61 72 64 20       or forward 
1b780 73 6c 61 73 68 29 3b 20 61 74 74 65 6d 70 74 20  slash); attempt 
1b790 74 6f 20 76 61 6c 69 64 61 74 65 20 74 68 61 74  to validate that
1b7a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b7b0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1b7c0 20 20 20 6e 6f 77 2e 20 20 49 66 20 77 65 20 66     now.  If we f
1b7d0 61 69 6c 20 69 6e 20 73 74 72 69 63 74 20 6d 6f  ail in strict mo
1b7e0 64 65 2c 20 77 65 20 61 72 65 20 64 6f 6e 65 3b  de, we are done;
1b7f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b800 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1b810 20 20 20 6f 74 68 65 72 77 69 73 65 2c 20 6a 75     otherwise, ju
1b820 73 74 20 73 6b 69 70 20 74 68 69 73 20 61 72 67  st skip this arg
1b830 75 6d 65 6e 74 20 61 6e 64 20 61 64 76 61 6e 63  ument and advanc
1b840 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1b850 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1b860 20 20 20 20 74 6f 20 74 68 65 20 6e 65 78 74 20      to the next 
1b870 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  one...          
1b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1b890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b8a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 43            if (!C
1b8b0 68 65 63 6b 4f 70 74 69 6f 6e 28 72 65 66 20 6e  heckOption(ref n
1b8c0 65 77 41 72 67 29 29 0d 0a 20 20 20 20 20 20 20  ewArg))..       
1b8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1b8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b900 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
1b910 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
1b920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b940 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
1b950 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
1b960 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
1b970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b980 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1b990 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
1b9a0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1b9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9c0 20 20 20 20 20 20 22 55 6e 73 75 70 70 6f 72 74        "Unsupport
1b9d0 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  ed command line 
1b9e0 61 72 67 75 6d 65 6e 74 3a 20 7b 30 7d 22 2c 0d  argument: {0}",.
1b9f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ba00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba10 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
1ba20 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
1ba30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1ba40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba50 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
1ba60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1ba80 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
1ba90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1baa0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
1bab0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
1bac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1bad0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1bae0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb00 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1bb10 20 41 6c 6c 20 74 68 65 20 73 75 70 70 6f 72 74   All the support
1bb20 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  ed command line 
1bb30 6f 70 74 69 6f 6e 73 20 6d 75 73 74 0d 0a 20 20  options must..  
1bb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb50 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68        //       h
1bb60 61 76 65 20 61 20 76 61 6c 75 65 3b 20 74 68 65  ave a value; the
1bb70 72 65 66 6f 72 65 2c 20 61 74 74 65 6d 70 74 20  refore, attempt 
1bb80 74 6f 20 61 64 76 61 6e 63 65 0d 0a 20 20 20 20  to advance..    
1bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bba0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20      //       to 
1bbb0 69 74 20 6e 6f 77 2e 20 20 49 66 20 77 65 20 66  it now.  If we f
1bbc0 61 69 6c 2c 20 77 65 20 61 72 65 20 64 6f 6e 65  ail, we are done
1bbd0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1bbe0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1bbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc00 20 20 20 20 20 20 20 69 6e 64 65 78 2b 2b 3b 0d         index++;.
1bc10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1bc20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69             if (i
1bc30 6e 64 65 78 20 3e 3d 20 6c 65 6e 67 74 68 29 0d  ndex >= length).
1bc40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bc50 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1bc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc70 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1bc80 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1bc90 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
1bca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bcb0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
1bcc0 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
1bcd0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
1bce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1bd00 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1bd10 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1bd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4d                "M
1bd40 69 73 73 69 6e 67 20 76 61 6c 75 65 20 66 6f 72  issing value for
1bd50 20 6f 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a   option: {0}",..
1bd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd80 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 29  ForDisplay(arg))
1bd90 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
1bda0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1bdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdc0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
1bdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1bdf0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
1be00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be10 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
1be20 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1be30 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1be40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be50 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1be60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be70 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61      // NOTE: Gra
1be80 62 20 74 68 65 20 74 65 78 74 75 61 6c 20 76 61  b the textual va
1be90 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d  lue of this comm
1bea0 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20  and line..      
1beb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bec0 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 74 69 6f    //       optio
1bed0 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n...            
1bee0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1bef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf00 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
1bf10 65 78 74 20 3d 20 61 72 67 73 5b 69 6e 64 65 78  ext = args[index
1bf20 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
1bf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1bf40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bf50 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
1bf60 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 77 68  E: Figure out wh
1bf70 69 63 68 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  ich command line
1bf80 20 6f 70 74 69 6f 6e 20 74 68 69 73 20 69 73 0d   option this is.
1bf90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bfa0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1bfb0 20 20 28 62 61 73 65 64 20 6f 6e 20 61 20 70 61    (based on a pa
1bfc0 72 74 69 61 6c 20 6e 61 6d 65 20 6d 61 74 63 68  rtial name match
1bfd0 29 20 61 6e 64 20 74 68 65 6e 20 74 72 79 0d 0a  ) and then try..
1bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bff0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1c000 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 74 68   to interpret th
1c010 65 20 74 65 78 74 75 61 6c 20 76 61 6c 75 65 20  e textual value 
1c020 61 73 20 74 68 65 20 63 6f 72 72 65 63 74 0d 0a  as the correct..
1c030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c040 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1c050 20 74 79 70 65 2e 0d 0a 20 20 20 20 20 20 20 20   type...        
1c060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c070 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1c080 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1c090 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
1c0a0 72 67 2c 20 22 62 72 65 61 6b 22 29 29 0d 0a 20  rg, "break")).. 
1c0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0e0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
1c0f0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
1c100 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
1c110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c120 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
1c130 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1c140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c150 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c170 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1c180 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
1c190 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
1c1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1c1c0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
1c1d0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
1c1e0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
1c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c200 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1c210 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
1c220 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1c230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c240 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
1c250 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
1c260 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
1c270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c290 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
1c2a0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
1c2b0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
1c2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2d0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1c2e0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1c2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1c310 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
1c320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c340 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
1c350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c370 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
1c380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c390 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1c3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3b0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 62 6f           if ((bo
1c3c0 6f 6c 29 76 61 6c 75 65 29 0d 0a 20 20 20 20 20  ol)value)..     
1c3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3e0 20 20 20 20 20 20 20 20 20 20 20 42 72 65 61 6b             Break
1c3f0 49 6e 74 6f 44 65 62 75 67 67 65 72 28 29 3b 0d  IntoDebugger();.
1c400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c410 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c430 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
1c440 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
1c450 20 22 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 22   "configVersion"
1c460 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1c470 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1c480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c490 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1c4a0 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 67 56  guration.configV
1c4b0 65 72 73 69 6f 6e 20 3d 20 74 65 78 74 3b 0d 0a  ersion = text;..
1c4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1c4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4f0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
1c500 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
1c510 22 63 6f 6e 66 69 72 6d 22 29 29 0d 0a 20 20 20  "confirm"))..   
1c520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c530 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c550 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
1c560 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
1c570 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
1c580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c590 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
1c5a0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1c5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5e0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1c5f0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1c600 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
1c610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c620 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1c630 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
1c640 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
1c650 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1c660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c670 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1c680 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
1c690 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6b0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
1c6c0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
1c6d0 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
1c6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c700 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
1c710 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
1c720 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
1c730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c740 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1c750 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1c760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c770 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1c780 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
1c790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1c7b0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
1c7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1c7e0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
1c7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c800 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1c810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c820 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1c830 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d 20 3d 20 28  tion.confirm = (
1c840 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
1c850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c860 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1c870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c880 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
1c890 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63 6f  tion(newArg, "co
1c8a0 72 65 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20  reFileName")).. 
1c8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8e0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1c8f0 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ion.coreFileName
1c900 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
1c910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c920 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1c930 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
1c940 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
1c950 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 62 75 67  n(newArg, "debug
1c960 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
1c970 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1c980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c990 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1c9a0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
1c9b0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
1c9c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1c9e0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
1c9f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ca00 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca30 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
1ca40 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
1ca50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ca60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca70 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
1ca80 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
1ca90 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
1caa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1cac0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1cad0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1cae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1caf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb00 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
1cb10 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
1cb20 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
1cb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb40 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1cb50 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
1cb60 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
1cb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb90 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1cba0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1cbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbc0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
1cbd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbf0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1cc00 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
1cc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
1cc30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1cc50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1cc70 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62  onfiguration.deb
1cc80 75 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  ug = (bool)value
1cc90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1cca0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1ccb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccc0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
1ccd0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
1cce0 67 2c 20 22 64 65 62 75 67 46 6f 72 6d 61 74 22  g, "debugFormat"
1ccf0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1cd00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1cd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1cd30 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 46 6f  guration.debugFo
1cd40 72 6d 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20 20  rmat = text;..  
1cd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd60 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1cd70 70 73 2e 44 65 62 75 67 46 6f 72 6d 61 74 20 3d  ps.DebugFormat =
1cd80 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
1cd90 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20  ebugFormat;..   
1cda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cdb0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cdd0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
1cde0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65  tion(newArg, "de
1cdf0 62 75 67 50 72 69 6f 72 69 74 79 22 29 29 0d 0a  bugPriority"))..
1ce00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ce20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce30 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
1ce40 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28  lue = ParseEnum(
1ce50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ce60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce70 20 20 74 79 70 65 6f 66 28 54 72 61 63 65 50 72    typeof(TracePr
1ce80 69 6f 72 69 74 79 29 2c 20 74 65 78 74 2c 20 74  iority), text, t
1ce90 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  rue);....       
1cea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ceb0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
1cec0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1ced0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cee0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1cef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf00 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1cf10 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1cf20 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
1cf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf40 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1cf50 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
1cf60 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
1cf70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1cf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf90 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1cfa0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
1cfb0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1cfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfd0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
1cfe0 69 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31  id {0} value: {1
1cff0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
1d000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d010 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1d020 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
1d030 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
1d040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d060 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1d070 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1d080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d090 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
1d0a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1d0d0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
1d0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0f0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
1d100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1d120 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1d140 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62  onfiguration.deb
1d150 75 67 50 72 69 6f 72 69 74 79 20 3d 20 28 54 72  ugPriority = (Tr
1d160 61 63 65 50 72 69 6f 72 69 74 79 29 76 61 6c 75  acePriority)valu
1d170 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1d180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d190 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 50 72  TraceOps.DebugPr
1d1a0 69 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69 67 75  iority = configu
1d1b0 72 61 74 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f  ration.debugPrio
1d1c0 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  rity;..         
1d1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1d1e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d1f0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
1d200 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
1d210 65 77 41 72 67 2c 20 22 64 65 73 69 67 6e 65 72  ewArg, "designer
1d220 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20  FileName"))..   
1d230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d240 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1d250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d260 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1d270 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  n.designerFileNa
1d280 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20  me = text;..    
1d290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1d2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1d2c0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
1d2d0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 69 72  ion(newArg, "dir
1d2e0 65 63 74 6f 72 79 22 29 29 0d 0a 20 20 20 20 20  ectory"))..     
1d2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d300 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1d310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d320 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1d330 64 69 72 65 63 74 6f 72 79 20 3d 20 74 65 78 74  directory = text
1d340 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1d350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d360 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1d370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d380 20 2f 2f 20 4e 4f 54 45 3a 20 2a 53 50 45 43 49   // NOTE: *SPECI
1d390 41 4c 2a 20 4d 75 73 74 20 72 65 66 72 65 73 68  AL* Must refresh
1d3a0 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 73 0d   the file names.
1d3b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1d3d0 20 20 20 20 20 20 68 65 72 65 20 62 65 63 61 75        here becau
1d3e0 73 65 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  se the underlyin
1d3f0 67 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20  g directory..   
1d400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d410 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1d420 20 20 68 61 73 20 63 68 61 6e 67 65 64 2e 0d 0a    has changed...
1d430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d440 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1d450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d460 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1d470 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20  ng coreFileName 
1d480 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
1d490 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  coreFileName;...
1d4a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1d4c0 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
1d4d0 72 45 6d 70 74 79 28 63 6f 72 65 46 69 6c 65 4e  rEmpty(coreFileN
1d4e0 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
1d4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d500 20 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e         coreFileN
1d510 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69  ame = Path.GetFi
1d520 6c 65 4e 61 6d 65 28 63 6f 72 65 46 69 6c 65 4e  leName(coreFileN
1d530 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
1d540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d550 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
1d560 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f  IsNullOrEmpty(co
1d570 72 65 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  reFileName))..  
1d580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1d5a0 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73  reFileName = Ins
1d5b0 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65 4e  taller.CoreFileN
1d5c0 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
1d5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5e0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1d5f0 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d  n.coreFileName =
1d600 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a   Path.Combine(..
1d610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d630 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69  configuration.di
1d640 72 65 63 74 6f 72 79 2c 20 63 6f 72 65 46 69 6c  rectory, coreFil
1d650 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
1d660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d670 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69         string li
1d680 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e  nqFileName = con
1d690 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46  figuration.linqF
1d6a0 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  ileName;....    
1d6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6c0 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
1d6d0 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
1d6e0 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29  y(linqFileName))
1d6f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d710 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d    linqFileName =
1d720 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d   Path.GetFileNam
1d730 65 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b  e(linqFileName);
1d740 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d760 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
1d770 6c 4f 72 45 6d 70 74 79 28 6c 69 6e 71 46 69 6c  lOrEmpty(linqFil
1d780 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
1d790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7a0 20 20 20 20 20 20 20 20 20 6c 69 6e 71 46 69 6c           linqFil
1d7b0 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65  eName = Installe
1d7c0 72 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d  r.LinqFileName;.
1d7d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1d7f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e  onfiguration.lin
1d800 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  qFileName = Path
1d810 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20  .Combine(..     
1d820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d830 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1d840 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f  guration.directo
1d850 72 79 2c 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  ry, linqFileName
1d860 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1d870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d880 20 20 73 74 72 69 6e 67 20 65 66 36 46 69 6c 65    string ef6File
1d890 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61  Name = configura
1d8a0 74 69 6f 6e 2e 65 66 36 46 69 6c 65 4e 61 6d 65  tion.ef6FileName
1d8b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1d8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8d0 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e   if (!String.IsN
1d8e0 75 6c 6c 4f 72 45 6d 70 74 79 28 65 66 36 46 69  ullOrEmpty(ef6Fi
1d8f0 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
1d900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d910 20 20 20 20 20 20 20 20 20 20 65 66 36 46 69 6c            ef6Fil
1d920 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74  eName = Path.Get
1d930 46 69 6c 65 4e 61 6d 65 28 65 66 36 46 69 6c 65  FileName(ef6File
1d940 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
1d950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d960 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
1d970 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 65  .IsNullOrEmpty(e
1d980 66 36 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  f6FileName))..  
1d990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 66                ef
1d9b0 36 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74  6FileName = Inst
1d9c0 61 6c 6c 65 72 2e 45 66 36 46 69 6c 65 4e 61 6d  aller.Ef6FileNam
1d9d0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1d9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9f0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1da00 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  ef6FileName = Pa
1da10 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20  th.Combine(..   
1da20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da30 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1da40 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63  figuration.direc
1da50 74 6f 72 79 2c 20 65 66 36 46 69 6c 65 4e 61 6d  tory, ef6FileNam
1da60 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
1da70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da80 20 20 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e     string design
1da90 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e  erFileName = con
1daa0 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67  figuration.desig
1dab0 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  nerFileName;....
1dac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dad0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1dae0 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
1daf0 45 6d 70 74 79 28 64 65 73 69 67 6e 65 72 46 69  Empty(designerFi
1db00 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
1db10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db20 20 20 20 20 20 20 20 20 20 20 64 65 73 69 67 6e            design
1db30 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  erFileName = Pat
1db40 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 64 65  h.GetFileName(de
1db50 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b  signerFileName);
1db60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1db70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db80 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
1db90 6c 4f 72 45 6d 70 74 79 28 64 65 73 69 67 6e 65  lOrEmpty(designe
1dba0 72 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20  rFileName))..   
1dbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
1dbd0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
1dbe0 49 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e  Installer.Design
1dbf0 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20  erFileName;.... 
1dc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc10 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1dc20 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65  guration.designe
1dc30 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  rFileName = Path
1dc40 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20  .Combine(..     
1dc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc60 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1dc70 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f  guration.directo
1dc80 72 79 2c 20 64 65 73 69 67 6e 65 72 46 69 6c 65  ry, designerFile
1dc90 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
1dca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcb0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1dcc0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
1dcd0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
1dce0 6e 65 77 41 72 67 2c 20 22 65 66 36 46 69 6c 65  newArg, "ef6File
1dcf0 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20  Name"))..       
1dd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1dd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd30 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 65 66  configuration.ef
1dd40 36 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74  6FileName = text
1dd50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1dd60 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1dd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd80 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
1dd90 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
1dda0 67 2c 20 22 69 6e 73 74 61 6c 6c 22 29 29 0d 0a  g, "install"))..
1ddb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ddc0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ddd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dde0 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
1ddf0 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
1de00 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
1de10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
1de30 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
1de40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1de60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de70 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
1de80 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
1de90 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
1dea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1deb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dec0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
1ded0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
1dee0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
1def0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df00 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1df10 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
1df20 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
1df30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df40 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
1df50 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
1df60 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
1df70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df90 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
1dfa0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
1dfb0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
1dfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1dfe0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1dff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e010 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
1e020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e040 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1e050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e070 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
1e080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e090 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0b0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1e0c0 75 72 61 74 69 6f 6e 2e 69 6e 73 74 61 6c 6c 20  uration.install 
1e0d0 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
1e0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1e100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e110 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
1e120 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
1e130 22 69 6e 73 74 61 6c 6c 46 6c 61 67 73 22 29 29  "installFlags"))
1e140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e150 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1e160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e170 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
1e180 76 61 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75  value = ParseEnu
1e190 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m(..            
1e1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1b0 20 20 20 20 74 79 70 65 6f 66 28 49 6e 73 74 61      typeof(Insta
1e1c0 6c 6c 46 6c 61 67 73 29 2c 20 74 65 78 74 2c 20  llFlags), text, 
1e1d0 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  true);....      
1e1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1f0 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
1e200 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1e210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e220 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1e230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e240 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1e250 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1e260 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
1e270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1e290 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
1e2a0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
1e2b0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
1e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2d0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1e2e0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
1e2f0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1e300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e310 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
1e320 6c 69 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b  lid {0} value: {
1e330 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
1e340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e350 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
1e360 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
1e370 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
1e380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3a0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1e3b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1e3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3d0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
1e3e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1e3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e400 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1e410 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
1e420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e430 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
1e440 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1e450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1e460 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e480 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e  configuration.in
1e490 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20 28 49 6e  stallFlags = (In
1e4a0 73 74 61 6c 6c 46 6c 61 67 73 29 76 61 6c 75 65  stallFlags)value
1e4b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1e4c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1e4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4e0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
1e4f0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
1e500 67 2c 20 22 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  g, "linqFileName
1e510 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
1e520 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1e530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e540 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1e550 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69  iguration.linqFi
1e560 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a  leName = text;..
1e570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e580 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1e590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5a0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
1e5b0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
1e5c0 22 6c 6f 67 46 69 6c 65 4e 61 6d 65 22 29 29 0d  "logFileName")).
1e5d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e5e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e600 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1e610 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d  ation.logFileNam
1e620 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20  e = text;..     
1e630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e640 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1e650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1e660 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
1e670 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 43 6f  on(newArg, "noCo
1e680 6d 70 61 63 74 22 29 29 0d 0a 20 20 20 20 20 20  mpact"))..      
1e690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6c0 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
1e6d0 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
1e6e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1e6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e700 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
1e710 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1e720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e730 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e750 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
1e760 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
1e770 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
1e780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e790 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
1e7a0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
1e7b0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
1e7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7e0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1e7f0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
1e800 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1e810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e820 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
1e830 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
1e840 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
1e850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
1e870 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
1e880 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
1e890 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1e8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8b0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1e8c0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1e8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
1e8f0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
1e900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e910 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1e920 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
1e930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e940 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
1e950 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
1e960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e970 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1e980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e990 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1e9a0 6e 2e 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 28 62  n.noCompact = (b
1e9b0 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
1e9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1e9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1e9f0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
1ea00 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 43  ion(newArg, "noC
1ea10 6f 6e 73 6f 6c 65 22 29 29 0d 0a 20 20 20 20 20  onsole"))..     
1ea20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1ea40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea50 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
1ea60 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
1ea70 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
1ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea90 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
1eaa0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1eab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eac0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eae0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
1eaf0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
1eb00 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
1eb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1eb30 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
1eb40 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
1eb50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1eb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb70 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1eb80 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
1eb90 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1eba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebb0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
1ebc0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
1ebd0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
1ebe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
1ec00 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
1ec10 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
1ec20 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1ec30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec40 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1ec50 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1ec60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec70 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
1ec80 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
1ec90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eca0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1ecb0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
1ecc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecd0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1ece0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
1ecf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed00 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1ed10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1ed30 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 28  on.noConsole = (
1ed40 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
1ed50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed60 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1ed70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed80 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
1ed90 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
1eda0 44 65 73 6b 74 6f 70 22 29 29 0d 0a 20 20 20 20  Desktop"))..    
1edb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edc0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1edd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ede0 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
1edf0 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
1ee00 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
1ee10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
1ee30 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1ee40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1ee60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee70 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
1ee80 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1ee90 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
1eea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eeb0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1eec0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
1eed0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
1eee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1eef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef00 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1ef10 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
1ef20 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1ef30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef40 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
1ef50 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
1ef60 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
1ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef90 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
1efa0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
1efb0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1efc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efd0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1efe0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1eff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f000 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1f010 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
1f020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f030 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1f040 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
1f050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1f070 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
1f080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f090 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1f0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0b0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1f0c0 69 6f 6e 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d 20  ion.noDesktop = 
1f0d0 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
1f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1f100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f110 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
1f120 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
1f130 6f 4c 6f 67 22 29 29 0d 0a 20 20 20 20 20 20 20  oLog"))..       
1f140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f150 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f170 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
1f180 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
1f190 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1f1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1b0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
1f1c0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1f1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f200 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
1f210 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
1f220 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
1f230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f240 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
1f250 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
1f260 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
1f270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f290 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1f2a0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
1f2b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2d0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
1f2e0 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
1f2f0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
1f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f310 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
1f320 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
1f330 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
1f340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f360 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1f370 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1f380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f390 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
1f3a0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
1f3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1f3d0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
1f3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3f0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
1f400 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
1f410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f420 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1f430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f440 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1f450 2e 6e 6f 4c 6f 67 20 3d 20 28 62 6f 6f 6c 29 76  .noLog = (bool)v
1f460 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
1f470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1f480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f490 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
1f4a0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
1f4b0 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 32  ewArg, "noNetFx2
1f4c0 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  0"))..          
1f4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1f4e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
1f500 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
1f510 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
1f520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1f540 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
1f550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1f570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f590 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
1f5a0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
1f5b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5d0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
1f5e0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
1f5f0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
1f600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f620 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
1f630 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1f640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f660 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
1f670 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
1f680 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
1f690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6a0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
1f6b0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
1f6c0 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
1f6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6f0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1f700 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f720 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
1f730 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1f740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f750 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1f760 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
1f770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f780 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
1f790 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1f7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1f7b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7d0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1f7e0 4e 65 74 46 78 32 30 20 3d 20 28 62 6f 6f 6c 29  NetFx20 = (bool)
1f7f0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
1f800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f810 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1f820 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
1f830 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
1f840 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78  newArg, "noNetFx
1f850 33 35 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  35"))..         
1f860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1f870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
1f890 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
1f8a0 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
1f8b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1f8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1f8d0 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
1f8e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1f8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1f900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f920 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
1f930 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1f940 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1f950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f960 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
1f970 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
1f980 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
1f990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9b0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
1f9c0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
1f9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9f0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
1fa00 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
1fa10 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
1fa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa30 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
1fa40 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
1fa50 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
1fa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa80 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1fa90 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1faa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fab0 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
1fac0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
1fad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fae0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1faf0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
1fb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb10 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
1fb20 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1fb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb40 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1fb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb60 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
1fb70 6f 4e 65 74 46 78 33 35 20 3d 20 28 62 6f 6f 6c  oNetFx35 = (bool
1fb80 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
1fb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fba0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1fbb0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
1fbc0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
1fbd0 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46  (newArg, "noNetF
1fbe0 78 34 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20  x40"))..        
1fbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1fc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
1fc20 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
1fc30 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
1fc40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc60 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
1fc70 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1fc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1fca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fcb0 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
1fcc0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1fcd0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1fce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fcf0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
1fd00 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
1fd10 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
1fd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd40 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
1fd50 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1fd60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd80 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
1fd90 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
1fda0 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
1fdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdc0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
1fdd0 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
1fde0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
1fdf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fe00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe10 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1fe20 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1fe30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe40 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
1fe50 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
1fe60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe70 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1fe80 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
1fe90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fea0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
1feb0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1fec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fed0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1fee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fef0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1ff00 6e 6f 4e 65 74 46 78 34 30 20 3d 20 28 62 6f 6f  noNetFx40 = (boo
1ff10 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
1ff20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff30 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1ff40 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
1ff50 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
1ff60 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74  n(newArg, "noNet
1ff70 46 78 34 35 22 29 29 0d 0a 20 20 20 20 20 20 20  Fx45"))..       
1ff80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1ffa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ffb0 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
1ffc0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
1ffd0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1ffe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fff0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
20000 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
20010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20020 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20040 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
20050 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
20060 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
20070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20080 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
20090 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
200a0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
200b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200d0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
200e0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
200f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20110 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
20120 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
20130 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
20140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20150 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
20160 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
20170 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
20180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201a0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
201b0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
201c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201d0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
201e0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
201f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20200 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
20210 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
20220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20230 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
20240 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
20250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20260 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
20270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20280 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
20290 2e 6e 6f 4e 65 74 46 78 34 35 20 3d 20 28 62 6f  .noNetFx45 = (bo
202a0 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
202b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
202d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
202e0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
202f0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65  on(newArg, "noNe
20300 74 46 78 34 35 31 22 29 29 0d 0a 20 20 20 20 20  tFx451"))..     
20310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20320 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20340 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
20350 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
20360 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
20370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20380 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
20390 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
203a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
203c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203d0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
203e0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
203f0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
20400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20410 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
20420 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
20430 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
20440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20460 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
20470 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
20480 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
20490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
204a0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
204b0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
204c0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
204d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
204e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
204f0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
20500 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
20510 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
20520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20530 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
20540 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
20550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20560 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
20570 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
20580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20590 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
205a0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
205b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205c0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
205d0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
205e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
20600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20610 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
20620 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 31 20 3d 20  on.noNetFx451 = 
20630 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
20640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20650 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
20660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20670 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
20680 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
20690 6f 4e 65 74 46 78 34 35 32 22 29 29 0d 0a 20 20  oNetFx452"))..  
206a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
206c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206d0 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
206e0 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
206f0 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
20700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20710 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
20720 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
20730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20740 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
20750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20760 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
20770 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
20780 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
20790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
207b0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
207c0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
207d0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
207e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207f0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
20800 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
20810 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
20820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20830 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
20840 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
20850 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
20860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20880 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
20890 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
208a0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
208b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208c0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
208d0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
208e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
20900 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
20910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
20930 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
20940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20960 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
20970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20980 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209a0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
209b0 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 32  ation.noNetFx452
209c0 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
209d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
209e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
209f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a00 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
20a10 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
20a20 20 22 6e 6f 4e 65 74 46 78 34 36 22 29 29 0d 0a   "noNetFx46"))..
20a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a60 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
20a70 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
20a80 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
20a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20aa0 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
20ab0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
20ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ad0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20af0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
20b00 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
20b10 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
20b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b40 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
20b50 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
20b60 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
20b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b80 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
20b90 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
20ba0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
20bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
20bd0 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
20be0 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
20bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c10 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
20c20 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
20c30 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
20c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c50 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
20c60 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
20c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c90 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
20ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cc0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
20cd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cf0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
20d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d10 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
20d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d30 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
20d40 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34  uration.noNetFx4
20d50 36 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  6 = (bool)value;
20d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20d70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
20d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d90 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
20da0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
20db0 2c 20 22 6e 6f 4e 65 74 46 78 34 36 31 22 29 29  , "noNetFx461"))
20dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20dd0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
20de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20df0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
20e00 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
20e10 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
20e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e30 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
20e40 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
20e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e60 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
20e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e80 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
20e90 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
20ea0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
20eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ed0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
20ee0 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
20ef0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
20f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f10 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
20f20 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
20f30 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
20f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
20f60 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
20f70 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
20f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20fa0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
20fb0 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
20fc0 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
20fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
20ff0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
21000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21020 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
21030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21050 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
21060 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21080 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
21090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
210b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210c0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
210d0 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46  iguration.noNetF
210e0 78 34 36 31 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  x461 = (bool)val
210f0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
21100 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
21110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21120 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
21130 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
21140 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 36 32  Arg, "noNetFx462
21150 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
21160 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
21170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21180 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
21190 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
211a0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
211b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
211c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
211d0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
211e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
211f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
21200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21220 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
21230 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
21240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21260 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
21270 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
21280 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
21290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
212b0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
212c0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
212d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212f0 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
21300 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
21310 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
21320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21330 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
21340 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
21350 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
21360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21380 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
21390 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
213a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213b0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
213c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
213d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
213f0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
21400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21410 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
21420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
21440 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
21450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
21460 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
21470 65 74 46 78 34 36 32 20 3d 20 28 62 6f 6f 6c 29  etFx462 = (bool)
21480 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
21490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
214b0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
214c0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
214d0 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78  newArg, "noNetFx
214e0 34 37 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  47"))..         
214f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
21500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
21520 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
21530 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
21540 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
21550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
21560 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
21570 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
21580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
21590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
215a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215b0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
215c0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
215d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
215e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215f0 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
21600 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
21610 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
21620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21640 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
21650 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
21660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21680 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
21690 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
216a0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
216b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
216c0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
216d0 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
216e0 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
216f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21710 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
21720 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
21730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21740 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
21750 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
21760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21770 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
21780 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
21790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217a0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
217b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
217c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
217e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217f0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
21800 6f 4e 65 74 46 78 34 37 20 3d 20 28 62 6f 6f 6c  oNetFx47 = (bool
21810 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
21820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21830 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
21840 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
21850 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
21860 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46  (newArg, "noNetF
21870 78 34 37 31 22 29 29 0d 0a 20 20 20 20 20 20 20  x471"))..       
21880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21890 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
218a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
218b0 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
218c0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
218d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
218e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
218f0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
21900 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
21910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21920 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21940 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
21950 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
21960 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
21970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21980 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
21990 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
219a0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
219b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219d0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
219e0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
219f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a10 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
21a20 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
21a30 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
21a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a50 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
21a60 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
21a70 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
21a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21aa0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
21ab0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
21ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ad0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
21ae0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
21af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b00 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
21b10 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
21b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b30 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
21b40 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
21b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
21b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b80 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
21b90 2e 6e 6f 4e 65 74 46 78 34 37 31 20 3d 20 28 62  .noNetFx471 = (b
21ba0 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
21bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21bc0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
21bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
21be0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
21bf0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 52  ion(newArg, "noR
21c00 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 22 29 29  untimeVersion"))
21c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21c20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
21c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c40 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
21c50 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
21c60 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
21c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
21c90 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
21ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21cb0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
21cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
21ce0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
21cf0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
21d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
21d30 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
21d40 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
21d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d60 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
21d70 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
21d80 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
21d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
21db0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
21dc0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
21dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21df0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
21e00 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
21e10 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
21e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
21e40 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
21e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e70 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
21e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ea0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
21eb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ed0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
21ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ef0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
21f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f10 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
21f20 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 52 75 6e 74  iguration.noRunt
21f30 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 28 62 6f  imeVersion = (bo
21f40 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
21f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f60 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
21f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
21f80 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
21f90 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 54 72  on(newArg, "noTr
21fa0 61 63 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ace"))..        
21fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21fc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
21fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
21fe0 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
21ff0 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
22000 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22020 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
22030 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
22040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22050 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22070 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
22080 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
22090 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
220a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220b0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
220c0 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
220d0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
220e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22100 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
22110 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
22120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22140 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
22150 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
22160 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
22170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22180 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
22190 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
221a0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
221b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
221c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221d0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
221e0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
221f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22200 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
22210 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
22220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22230 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
22240 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
22250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22260 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
22270 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
22280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22290 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
222a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222b0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
222c0 6e 6f 54 72 61 63 65 20 3d 20 28 62 6f 6f 6c 29  noTrace = (bool)
222d0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
222e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
22300 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
22310 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
22320 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 30  newArg, "noVs200
22330 35 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  5"))..          
22340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
22350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22360 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
22370 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
22380 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
22390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
223a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
223b0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
223c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
223d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
223e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
223f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22400 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
22410 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
22420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22440 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
22450 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
22460 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
22470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22490 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
224a0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
224b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224d0 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
224e0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
224f0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
22500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22510 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
22520 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
22530 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
22540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22560 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
22570 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
22580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22590 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
225a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
225b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
225d0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
225e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225f0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
22600 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
22610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
22620 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22640 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
22650 56 73 32 30 30 35 20 3d 20 28 62 6f 6f 6c 29 76  Vs2005 = (bool)v
22660 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
22670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
22680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22690 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
226a0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
226b0 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 30 38  ewArg, "noVs2008
226c0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
226d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
226e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226f0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
22700 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
22710 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
22720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22730 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
22740 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
22750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22760 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
22770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22790 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
227a0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
227b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
227c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227d0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
227e0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
227f0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
22800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
22820 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
22830 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
22840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22860 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
22870 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
22880 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
22890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228a0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
228b0 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
228c0 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
228d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228f0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
22900 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
22910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22920 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
22930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22950 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
22960 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
22970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22980 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
22990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
229a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
229b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
229c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
229d0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56  onfiguration.noV
229e0 73 32 30 30 38 20 3d 20 28 62 6f 6f 6c 29 76 61  s2008 = (bool)va
229f0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
22a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
22a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22a20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
22a30 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
22a40 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 31 30 22  wArg, "noVs2010"
22a50 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
22a60 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a80 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
22a90 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
22aa0 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
22ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ac0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
22ad0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
22ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22af0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
22b20 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
22b30 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
22b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b60 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
22b70 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
22b80 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
22b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
22bb0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
22bc0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
22bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bf0 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
22c00 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
22c10 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
22c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c30 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
22c40 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
22c50 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
22c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c80 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
22c90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cb0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
22cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ce0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
22cf0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
22d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d10 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
22d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22d30 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
22d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
22d60 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73  nfiguration.noVs
22d70 32 30 31 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  2010 = (bool)val
22d80 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
22d90 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
22da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22db0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
22dc0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
22dd0 41 72 67 2c 20 22 6e 6f 56 73 32 30 31 32 22 29  Arg, "noVs2012")
22de0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
22df0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
22e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e10 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
22e20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
22e30 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
22e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e50 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
22e60 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
22e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
22e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
22eb0 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
22ec0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
22ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ef0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
22f00 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
22f10 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
22f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f30 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
22f40 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
22f50 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
22f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f80 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
22f90 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
22fa0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fc0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
22fd0 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
22fe0 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
22ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23010 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
23020 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
23030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23040 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
23050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23070 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
23080 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
23090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230a0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
230b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
230d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
230e0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
230f0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32  figuration.noVs2
23100 30 31 32 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  012 = (bool)valu
23110 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
23120 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
23130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23140 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
23150 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
23160 72 67 2c 20 22 6e 6f 56 73 32 30 31 33 22 29 29  rg, "noVs2013"))
23170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23180 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
23190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231a0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
231b0 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
231c0 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
231d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
231f0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
23200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23210 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
23220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23230 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
23240 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
23250 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
23260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23280 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
23290 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
232a0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
232b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
232d0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
232e0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
232f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23310 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
23320 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
23330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23350 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
23360 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
23370 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
23380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
233a0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
233b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
233c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233d0 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
233e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23400 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
23410 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23430 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
23440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23450 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
23460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23470 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
23480 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30  iguration.noVs20
23490 31 33 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  13 = (bool)value
234a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
234b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
234c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234d0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
234e0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
234f0 67 2c 20 22 6e 6f 56 73 32 30 31 35 22 29 29 0d  g, "noVs2015")).
23500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23510 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
23520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23530 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
23540 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
23550 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
23560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23570 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
23580 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
23590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
235b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235c0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
235d0 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
235e0 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
235f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23610 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
23620 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
23630 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
23640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23650 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
23660 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
23670 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
23680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
236a0 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
236b0 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
236c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
236d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236e0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
236f0 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
23700 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
23710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
23730 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
23740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23760 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
23770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23790 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
237a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
237b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237c0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
237d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
237f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23800 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
23810 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31  guration.noVs201
23820 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  5 = (bool)value;
23830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23840 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
23850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23860 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
23870 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
23880 2c 20 22 6e 6f 56 73 32 30 31 37 22 29 29 0d 0a  , "noVs2017"))..
23890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
238b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238c0 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
238d0 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
238e0 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
238f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23900 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
23910 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
23920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23930 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23950 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
23960 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
23970 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
23980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239a0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
239b0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
239c0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
239d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239e0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
239f0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
23a00 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
23a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
23a30 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
23a40 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
23a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a70 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
23a80 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
23a90 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
23aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
23ac0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
23ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23af0 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
23b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
23b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b50 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
23b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
23b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b90 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
23ba0 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 37  uration.noVs2017
23bb0 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
23bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23bd0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
23be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23bf0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
23c00 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
23c10 20 22 70 65 72 55 73 65 72 22 29 29 0d 0a 20 20   "perUser"))..  
23c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c50 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
23c60 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
23c70 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
23c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c90 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
23ca0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
23cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cc0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ce0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
23cf0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
23d00 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
23d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
23d30 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
23d40 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
23d50 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
23d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d70 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
23d80 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
23d90 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
23da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23db0 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
23dc0 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
23dd0 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
23de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e00 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
23e10 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
23e20 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
23e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e40 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
23e50 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
23e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
23e80 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
23e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
23eb0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
23ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ee0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
23ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f00 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
23f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
23f30 61 74 69 6f 6e 2e 70 65 72 55 73 65 72 20 3d 20  ation.perUser = 
23f40 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
23f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f60 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
23f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f80 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
23f90 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 70  ption(newArg, "p
23fa0 72 6f 76 69 64 65 72 46 6c 61 67 73 22 29 29 0d  roviderFlags")).
23fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23fc0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
23fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fe0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
23ff0 61 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d  alue = ParseEnum
24000 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
24010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24020 20 20 20 74 79 70 65 6f 66 28 50 72 6f 76 69 64     typeof(Provid
24030 65 72 46 6c 61 67 73 29 2c 20 74 65 78 74 2c 20  erFlags), text, 
24040 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  true);....      
24050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24060 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
24070 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
24080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24090 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
240a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240b0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
240c0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
240d0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
240e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
24100 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
24110 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
24120 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
24130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24140 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
24150 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
24160 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
24170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24180 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
24190 6c 69 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b  lid {0} value: {
241a0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
241b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241c0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
241d0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
241e0 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
241f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24210 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
24220 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24240 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
24250 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
24260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24270 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
24280 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
24290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242a0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
242b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
242c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
242d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
242e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242f0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 70 72  configuration.pr
24300 6f 76 69 64 65 72 46 6c 61 67 73 20 3d 20 28 50  oviderFlags = (P
24310 72 6f 76 69 64 65 72 46 6c 61 67 73 29 76 61 6c  roviderFlags)val
24320 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
24330 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
24340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24350 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
24360 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
24370 41 72 67 2c 20 22 72 65 67 69 73 74 72 79 4c 6f  Arg, "registryLo
24380 67 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20  gFileName"))..  
24390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
243b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243c0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
243d0 6f 6e 2e 72 65 67 69 73 74 72 79 4c 6f 67 46 69  on.registryLogFi
243e0 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a  leName = text;..
243f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24400 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
24410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24420 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
24430 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
24440 22 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e  "registryVersion
24450 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
24460 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
24470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24480 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
24490 69 67 75 72 61 74 69 6f 6e 2e 72 65 67 69 73 74  iguration.regist
244a0 72 79 56 65 72 73 69 6f 6e 20 3d 20 74 65 78 74  ryVersion = text
244b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
244c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
244d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244e0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
244f0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
24500 67 2c 20 22 73 74 72 69 63 74 22 29 29 0d 0a 20  g, "strict")).. 
24510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24520 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
24530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24540 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
24550 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
24560 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
24570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24580 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
24590 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
245a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
245c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245d0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
245e0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
245f0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
24600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
24620 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
24630 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
24640 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
24650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24660 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
24670 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
24680 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
24690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246a0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
246b0 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
246c0 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
246d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246f0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
24700 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
24710 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
24720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24730 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
24740 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
24750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
24770 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
24780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247a0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
247b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
247c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247d0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
247e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
24800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24810 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
24820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24830 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
24840 3a 20 41 6c 6c 6f 77 20 74 68 65 20 63 6f 6d 6d  : Allow the comm
24850 61 6e 64 20 6c 69 6e 65 20 61 72 67 75 6d 65 6e  and line argumen
24860 74 73 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20  ts to..         
24870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24880 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 76 65 72     //       over
24890 72 69 64 65 20 74 68 65 20 22 73 74 72 69 63 74  ride the "strict
248a0 6e 65 73 73 22 20 73 65 74 74 69 6e 67 0d 0a 20  ness" setting.. 
248b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
248d0 20 20 20 20 70 72 6f 76 69 64 65 64 20 62 79 20      provided by 
248e0 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20  our caller...   
248f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24900 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
24910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24920 20 20 20 20 20 20 20 20 20 73 74 72 69 63 74 20           strict 
24930 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
24940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24950 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
24960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24970 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
24980 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
24990 22 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 22  "throwOnMissing"
249a0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
249b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
249c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249d0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
249e0 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
249f0 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
24a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
24a20 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
24a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a40 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
24a70 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
24a80 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
24a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ab0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
24ac0 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
24ad0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
24ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
24b00 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
24b10 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
24b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b40 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
24b50 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
24b60 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
24b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b80 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
24b90 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
24ba0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
24bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bd0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
24be0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c00 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
24c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c30 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
24c40 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
24c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c60 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
24c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24c80 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
24c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
24cb0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 68 72 6f  nfiguration.thro
24cc0 77 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 28 62 6f  wOnMissing = (bo
24cd0 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
24ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24cf0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
24d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
24d10 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
24d20 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 72 61 63  on(newArg, "trac
24d30 65 46 6f 72 6d 61 74 22 29 29 0d 0a 20 20 20 20  eFormat"))..    
24d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d70 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
24d80 2e 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 74  .traceFormat = t
24d90 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
24da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24db0 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65    TraceOps.Trace
24dc0 46 6f 72 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75  Format = configu
24dd0 72 61 74 69 6f 6e 2e 74 72 61 63 65 46 6f 72 6d  ration.traceForm
24de0 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
24df0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
24e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e10 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
24e20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
24e30 41 72 67 2c 20 22 74 72 61 63 65 50 72 69 6f 72  Arg, "tracePrior
24e40 69 74 79 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ity"))..        
24e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
24e80 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61  bject value = Pa
24e90 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20  rseEnum(..      
24ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24eb0 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
24ec0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 2c  (TracePriority),
24ed0 20 74 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d   text, true);...
24ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
24f00 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
24f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24f20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
24f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f50 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
24f60 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
24f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f90 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
24fa0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
24fb0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
24fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
24fe0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
24ff0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
25000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25020 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76    "Invalid {0} v
25030 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
25040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25060 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
25070 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
25080 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
25090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250a0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
250b0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
250c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
250e0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
250f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
25110 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
25120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
25140 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
25150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25160 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
25170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25180 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
25190 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72 69  tion.tracePriori
251a0 74 79 20 3d 20 28 54 72 61 63 65 50 72 69 6f 72  ty = (TracePrior
251b0 69 74 79 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ity)value;..    
251c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251d0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
251e0 2e 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d  .TracePriority =
251f0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74   configuration.t
25200 72 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20  racePriority;.. 
25210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25220 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
25230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25240 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
25250 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
25260 76 65 72 62 6f 73 65 22 29 29 0d 0a 20 20 20 20  verbose"))..    
25270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25280 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252a0 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
252b0 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
252c0 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
252d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252e0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
252f0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
25300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25310 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25330 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
25340 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
25350 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
25360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25370 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
25380 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
25390 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
253a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
253b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253c0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
253d0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
253e0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
253f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25400 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
25410 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
25420 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
25430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25450 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
25460 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
25470 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
25480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25490 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
254a0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
254b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
254d0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
254e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
25500 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
25510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
25530 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
25540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25550 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
25560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25570 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
25580 69 6f 6e 2e 76 65 72 62 6f 73 65 20 3d 20 28 62  ion.verbose = (b
25590 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
255a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
255c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
255d0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
255e0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 76 73 56  ion(newArg, "vsV
255f0 65 72 73 69 6f 6e 53 75 66 66 69 78 22 29 29 0d  ersionSuffix")).
25600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25610 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
25620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25630 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
25640 61 74 69 6f 6e 2e 76 73 56 65 72 73 69 6f 6e 53  ation.vsVersionS
25650 75 66 66 69 78 20 3d 20 74 65 78 74 3b 0d 0a 20  uffix = text;.. 
25660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25670 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
25680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25690 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
256a0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
256b0 77 68 61 74 49 66 22 29 29 0d 0a 20 20 20 20 20  whatIf"))..     
256c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
256e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256f0 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
25700 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
25710 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
25720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25730 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
25740 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
25750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25760 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25780 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
25790 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
257a0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
257b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257c0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
257d0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
257e0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
257f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25810 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
25820 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
25830 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
25840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25850 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
25860 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
25870 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
25880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
258a0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
258b0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
258c0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
258d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258e0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
258f0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
25900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25910 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
25920 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
25930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25940 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
25950 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
25960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25970 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
25980 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
25990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
259b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259c0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
259d0 6f 6e 2e 77 68 61 74 49 66 20 3d 20 28 62 6f 6f  on.whatIf = (boo
259e0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
259f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a00 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
25a10 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
25a20 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
25a30 6e 28 6e 65 77 41 72 67 2c 20 22 77 6f 77 36 34  n(newArg, "wow64
25a40 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
25a50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
25a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a70 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
25a80 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
25a90 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
25aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
25ac0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
25ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
25af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b10 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
25b20 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
25b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b50 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
25b60 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
25b70 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
25b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
25ba0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
25bb0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
25bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25be0 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
25bf0 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
25c00 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
25c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
25c30 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
25c40 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
25c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c70 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
25c80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ca0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
25cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25cd0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
25ce0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
25cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d00 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
25d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
25d30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
25d50 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77 6f 77  onfiguration.wow
25d60 36 34 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  64 = (bool)value
25d70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
25d80 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
25d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25da0 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
25db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25dc0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25de0 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
25df0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
25e00 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
25e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
25e30 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
25e40 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
25e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e60 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
25e70 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
25e80 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
25e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ea0 20 20 20 20 20 20 20 20 20 22 55 6e 73 75 70 70           "Unsupp
25eb0 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69  orted command li
25ec0 6e 65 20 6f 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c  ne option: {0}",
25ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ef0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
25f00 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
25f10 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
25f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f30 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
25f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f60 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
25f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f80 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
25f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
25fa0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25fb0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
25fc0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
25fd0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
25fe0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
25ff0 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
26000 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
26010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26020 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
26030 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
26040 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
26050 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26060 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
26070 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
26080 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61 63  allback, e, trac
26090 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
260a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260b0 20 20 20 65 72 72 6f 72 20 3d 20 22 46 61 69 6c     error = "Fail
260c0 65 64 20 74 6f 20 6d 6f 64 69 66 79 20 63 6f 6e  ed to modify con
260d0 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20  figuration.";.. 
260e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
260f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26100 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
26110 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
26120 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26170 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
26180 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
26190 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
261a0 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
261b0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
261c0 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72  c static bool Pr
261d0 6f 63 65 73 73 28 0d 0a 20 20 20 20 20 20 20 20  ocess(..        
261e0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d          string[]
261f0 20 61 72 67 73 2c 0d 0a 20 20 20 20 20 20 20 20   args,..        
26200 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72          Configur
26210 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74  ation configurat
26220 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
26230 20 20 20 20 20 20 62 6f 6f 6c 20 73 74 72 69 63        bool stric
26240 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
26250 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
26260 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
26270 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
26280 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26290 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
262a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
262b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262c0 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
262d0 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ation == null)..
262e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
26310 72 72 6f 72 20 3d 20 22 49 6e 76 61 6c 69 64 20  rror = "Invalid 
26320 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b  configuration.";
26330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26340 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
26350 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
26360 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
26370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26380 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61        Assembly a
26390 73 73 65 6d 62 6c 79 20 3d 20 63 6f 6e 66 69 67  ssembly = config
263a0 75 72 61 74 69 6f 6e 2e 61 73 73 65 6d 62 6c 79  uration.assembly
263b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
263c0 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73           if (ass
263d0 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  embly == null)..
263e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
26410 72 72 6f 72 20 3d 20 22 49 6e 76 61 6c 69 64 20  rror = "Invalid 
26420 61 73 73 65 6d 62 6c 79 2e 22 3b 0d 0a 20 20 20  assembly.";..   
26430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26440 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
26450 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
26460 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
26470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26480 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74   if (!configurat
26490 69 6f 6e 2e 6e 6f 54 72 61 63 65 29 0d 0a 20 20  ion.noTrace)..  
264a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
264c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
264d0 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  (!configuration.
264e0 6e 6f 4c 6f 67 20 26 26 0d 0a 20 20 20 20 20 20  noLog &&..      
264f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26500 20 20 20 20 20 20 53 74 72 69 6e 67 2e 49 73 4e        String.IsN
26510 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 6e 66 69  ullOrEmpty(confi
26520 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65  guration.logFile
26530 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
26540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26550 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26570 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
26580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26590 2f 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20  / NOTE: Use the 
265a0 64 65 66 61 75 6c 74 20 6c 6f 67 20 66 69 6c 65  default log file
265b0 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20   name...        
265c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265d0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
265e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265f0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
26600 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20  n.logFileName = 
26610 47 65 74 4c 6f 67 46 69 6c 65 4e 61 6d 65 28 0d  GetLogFileName(.
26620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26640 20 22 74 72 61 63 65 22 29 3b 0d 0a 20 20 20 20   "trace");..    
26650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26660 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
26670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26680 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
26690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
266a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
266b0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
266c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266d0 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75      if (!configu
266e0 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65  ration.noConsole
266f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
26700 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26720 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
26730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26740 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
26750 45 3a 20 49 6e 20 76 65 72 62 6f 73 65 20 6d 6f  E: In verbose mo
26760 64 65 2c 20 64 65 62 75 67 20 6f 75 74 70 75 74  de, debug output
26770 20 28 74 68 61 74 20 6d 65 65 74 73 0d 0a 20 20   (that meets..  
26780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26790 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
267a0 20 20 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65     the configure
267b0 64 20 70 72 69 6f 72 69 74 79 20 63 72 69 74 65  d priority crite
267c0 72 69 61 29 20 77 69 6c 6c 20 62 65 0d 0a 20 20  ria) will be..  
267d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267e0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
267f0 20 20 20 64 69 73 70 6c 61 79 65 64 20 74 6f 20     displayed to 
26800 74 68 65 20 63 6f 6e 73 6f 6c 65 3b 20 6f 74 68  the console; oth
26810 65 72 77 69 73 65 2c 20 74 72 61 63 65 0d 0a 20  erwise, trace.. 
26820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26830 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
26840 20 20 20 20 6f 75 74 70 75 74 20 28 74 68 61 74      output (that
26850 20 6d 65 65 74 73 20 74 68 65 20 63 6f 6e 66 69   meets the confi
26860 67 75 72 65 64 20 70 72 69 6f 72 69 74 79 0d 0a  gured priority..
26870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26880 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
26890 20 20 20 20 20 63 72 69 74 65 72 69 61 29 20 77       criteria) w
268a0 69 6c 6c 20 62 65 20 64 69 73 70 6c 61 79 65 64  ill be displayed
268b0 20 74 6f 20 74 68 65 20 63 6f 6e 73 6f 6c 65 2e   to the console.
268c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
268d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
268e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
268f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
26900 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   (configuration.
26910 64 65 62 75 67 29 0d 0a 20 20 20 20 20 20 20 20  debug)..        
26920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26930 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26950 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
26960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26970 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
26980 54 45 3a 20 41 64 64 20 74 68 65 20 63 6f 6e 73  TE: Add the cons
26990 6f 6c 65 20 74 72 61 63 65 20 6c 69 73 74 65 6e  ole trace listen
269a0 65 72 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  er to the..     
269b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
269d0 20 20 20 20 6c 69 73 74 20 6f 66 20 74 72 61 63      list of trac
269e0 65 20 6c 69 73 74 65 6e 65 72 73 20 6d 61 69 6e  e listeners main
269f0 74 61 69 6e 65 64 20 62 79 0d 0a 20 20 20 20 20  tained by..     
26a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a10 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
26a20 20 20 20 20 74 68 65 20 54 72 61 63 65 4f 70 73      the TraceOps
26a30 20 63 6c 61 73 73 20 28 69 2e 65 2e 20 6f 6e 6c   class (i.e. onl
26a40 79 20 6d 65 73 73 61 67 65 73 0d 0a 20 20 20 20  y messages..    
26a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
26a70 20 20 20 20 20 74 68 61 74 20 6d 65 65 74 20 74       that meet t
26a80 68 65 20 64 65 62 75 67 20 70 72 69 6f 72 69 74  he debug priorit
26a90 79 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20  y will be..     
26aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ab0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
26ac0 20 20 20 20 73 65 65 6e 20 6f 6e 20 74 68 65 20      seen on the 
26ad0 63 6f 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20 20 20  console)...     
26ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26af0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
26b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
26b20 72 61 63 65 4f 70 73 2e 53 65 74 75 70 44 65 62  raceOps.SetupDeb
26b30 75 67 4c 69 73 74 65 6e 65 72 73 28 29 3b 0d 0a  ugListeners();..
26b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b50 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
26b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b70 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
26b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26b90 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
26ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bc0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
26bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26be0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 64 64      // NOTE: Add
26bf0 20 74 68 65 20 63 6f 6e 73 6f 6c 65 20 74 72 61   the console tra
26c00 63 65 20 6c 69 73 74 65 6e 65 72 20 74 6f 20 74  ce listener to t
26c10 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..            
26c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c30 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 69 73      //       lis
26c40 74 20 6f 66 20 62 75 69 6c 74 2d 69 6e 20 74 72  t of built-in tr
26c50 61 63 65 20 6c 69 73 74 65 6e 65 72 73 20 28 69  ace listeners (i
26c60 2e 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .e...           
26c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c80 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 6e       //       on
26c90 6c 79 20 6d 65 73 73 61 67 65 73 20 74 68 61 74  ly messages that
26ca0 20 6d 65 65 74 20 74 68 65 20 74 72 61 63 65 0d   meet the trace.
26cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cd0 20 2f 2f 20 20 20 20 20 20 20 70 72 69 6f 72 69   //       priori
26ce0 74 79 20 77 69 6c 6c 20 62 65 20 73 65 65 6e 20  ty will be seen 
26cf0 6f 6e 20 74 68 65 20 63 6f 6e 73 6f 6c 65 29 2e  on the console).
26d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
26d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d40 20 20 20 20 20 20 54 72 61 63 65 2e 4c 69 73 74        Trace.List
26d50 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 20 43 6f  eners.Add(new Co
26d60 6e 73 6f 6c 65 54 72 61 63 65 4c 69 73 74 65 6e  nsoleTraceListen
26d70 65 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  er());..        
26d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d90 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
26da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
26db0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26dc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
26dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e00 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
26e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
26e20 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
26e30 6e 2e 6e 6f 4c 6f 67 20 26 26 0d 0a 20 20 20 20  n.noLog &&..    
26e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e50 20 20 20 20 20 20 20 20 21 53 74 72 69 6e 67 2e          !String.
26e60 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f  IsNullOrEmpty(co
26e70 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46  nfiguration.logF
26e80 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ileName))..     
26e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ea0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ec0 20 20 54 72 61 63 65 2e 4c 69 73 74 65 6e 65 72    Trace.Listener
26ed0 73 2e 41 64 64 28 6e 65 77 20 54 65 78 74 57 72  s.Add(new TextWr
26ee0 69 74 65 72 54 72 61 63 65 4c 69 73 74 65 6e 65  iterTraceListene
26ef0 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
26f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f10 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
26f20 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 3b  n.logFileName));
26f30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f50 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
26f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f70 2f 2f 20 4e 4f 54 45 3a 20 54 65 63 68 6e 69 63  // NOTE: Technic
26f80 61 6c 6c 79 2c 20 77 65 20 63 72 65 61 74 65 64  ally, we created
26f90 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 0d 0a   the log file...
26fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
26fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fd0 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
26fe0 73 43 72 65 61 74 65 64 2b 2b 3b 0d 0a 20 20 20  sCreated++;..   
26ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27000 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
27010 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
27020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27030 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
27040 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
27050 4e 4f 54 45 3a 20 44 75 6d 70 20 74 68 65 20 63  NOTE: Dump the c
27060 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6e 6f 77  onfiguration now
27070 20 69 6e 20 63 61 73 65 20 77 65 20 6e 65 65 64   in case we need
27080 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   to..           
27090 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
270a0 20 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74 20 61    troubleshoot a
270b0 6e 79 20 69 73 73 75 65 73 2e 0d 0a 20 20 20 20  ny issues...    
270c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270d0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
270e0 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
270f0 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 50  iguration.debugP
27100 72 69 6f 72 69 74 79 20 3c 3d 20 54 72 61 63 65  riority <= Trace
27110 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 29  Priority.Medium)
27120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27130 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
27140 75 72 61 74 69 6f 6e 2e 44 75 6d 70 28 64 65 62  uration.Dump(deb
27150 75 67 43 61 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a  ugCallback);....
27160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27170 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
27180 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72  ation.tracePrior
27190 69 74 79 20 3c 3d 20 54 72 61 63 65 50 72 69 6f  ity <= TracePrio
271a0 72 69 74 79 2e 4d 65 64 69 75 6d 29 0d 0a 20 20  rity.Medium)..  
271b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271c0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
271d0 69 6f 6e 2e 44 75 6d 70 28 74 72 61 63 65 43 61  ion.Dump(traceCa
271e0 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20  llback);....    
271f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27200 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
27210 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
27220 20 53 68 6f 77 20 77 68 65 72 65 20 77 65 20 61   Show where we a
27230 72 65 20 72 75 6e 6e 69 6e 67 20 66 72 6f 6d 20  re running from 
27240 61 6e 64 20 68 6f 77 20 77 65 20 77 65 72 65 0d  and how we were.
27250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27260 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 6e       //       in
27270 76 6f 6b 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  voked...        
27280 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
27290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272a0 20 20 20 20 73 74 72 69 6e 67 20 6c 6f 63 61 74      string locat
272b0 69 6f 6e 20 3d 20 61 73 73 65 6d 62 6c 79 2e 4c  ion = assembly.L
272c0 6f 63 61 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20  ocation;....    
272d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272e0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
272f0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
27300 72 69 74 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d  rity.MediumLow,.
27310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27320 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
27330 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
27340 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
27350 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
27360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
27370 52 75 6e 6e 69 6e 67 20 65 78 65 63 75 74 61 62  Running executab
27380 6c 65 20 69 73 3a 20 7b 30 7d 22 2c 20 46 6f 72  le is: {0}", For
27390 44 69 73 70 6c 61 79 28 6c 6f 63 61 74 69 6f 6e  Display(location
273a0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
273b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
273c0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
273d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273e0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
273f0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
27400 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 4c  Priority.MediumL
27410 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
27420 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
27430 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
27440 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
27450 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
27460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27470 20 20 20 22 4f 72 69 67 69 6e 61 6c 20 63 6f 6d     "Original com
27480 6d 61 6e 64 20 6c 69 6e 65 20 69 73 3a 20 7b 30  mand line is: {0
27490 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
274a0 20 20 20 20 20 20 20 20 20 20 20 20 20 45 6e 76               Env
274b0 69 72 6f 6e 6d 65 6e 74 2e 43 6f 6d 6d 61 6e 64  ironment.Command
274c0 4c 69 6e 65 29 2c 20 74 72 61 63 65 43 61 74 65  Line), traceCate
274d0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
274e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
274f0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
27500 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
27510 74 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20  ty.MediumLow,.. 
27520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27530 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
27540 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
27550 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
27560 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
27570 20 20 20 20 20 20 20 20 20 20 20 20 20 22 52 75               "Ru
27580 6e 6e 69 6e 67 20 70 72 6f 63 65 73 73 20 69 73  nning process is
27590 20 7b 30 7d 2e 22 2c 20 49 73 36 34 42 69 74 50   {0}.", Is64BitP
275a0 72 6f 63 65 73 73 28 29 20 3f 0d 0a 20 20 20 20  rocess() ?..    
275b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275c0 20 20 20 20 20 20 20 20 22 36 34 2d 62 69 74 22          "64-bit"
275d0 20 3a 20 22 33 32 2d 62 69 74 22 29 2c 20 74 72   : "32-bit"), tr
275e0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
275f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27600 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
27610 75 72 61 74 69 6f 6e 2e 77 68 61 74 49 66 29 0d  uration.whatIf).
27620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27630 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27650 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
27660 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
27670 4f 54 45 3a 20 49 66 20 74 68 65 20 64 65 62 75  OTE: If the debu
27680 67 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64  gger is attached
27690 20 61 6e 64 20 22 77 68 61 74 2d 69 66 22 0d 0a   and "what-if"..
276a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276b0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
276c0 20 6d 6f 64 65 20 69 73 20 5b 6e 6f 77 5d 20 64   mode is [now] d
276d0 69 73 61 62 6c 65 64 2c 20 69 73 73 75 65 20 61  isabled, issue a
276e0 20 77 61 72 6e 69 6e 67 2e 0d 0a 20 20 20 20 20   warning...     
276f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27700 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
27710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
27720 66 20 28 44 65 62 75 67 67 65 72 2e 49 73 41 74  f (Debugger.IsAt
27730 74 61 63 68 65 64 29 0d 0a 20 20 20 20 20 20 20  tached)..       
27740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27750 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27770 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
27780 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
27790 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c  rity.MediumHigh,
277a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
277b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277c0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
277d0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d   traceCallback,.
277e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
277f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27800 20 22 46 6f 72 63 65 64 20 74 6f 20 64 69 73 61   "Forced to disa
27810 62 6c 65 20 5c 22 77 68 61 74 2d 69 66 5c 22 20  ble \"what-if\" 
27820 6d 6f 64 65 20 77 69 74 68 20 22 20 2b 0d 0a 20  mode with " +.. 
27830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
27850 64 65 62 75 67 67 65 72 20 61 74 74 61 63 68 65  debugger attache
27860 64 2e 22 2c 20 74 72 61 63 65 43 61 74 65 67 6f  d.", traceCatego
27870 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
27880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
27890 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
278a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
278b0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
278c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
278d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
278e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278f0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
27900 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
27910 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68  ority.MediumHigh
27920 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
27930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
27940 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
27950 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
27960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27970 20 20 20 20 20 20 20 20 20 20 22 4e 6f 20 61 63            "No ac
27980 74 75 61 6c 20 63 68 61 6e 67 65 73 20 77 69 6c  tual changes wil
27990 6c 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68 69  l be made to thi
279a0 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  s " +..         
279b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279c0 20 20 20 22 73 79 73 74 65 6d 20 62 65 63 61 75     "system becau
279d0 73 65 20 5c 22 77 68 61 74 2d 69 66 5c 22 20 6d  se \"what-if\" m
279e0 6f 64 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 22  ode is enabled."
279f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
27a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
27a10 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
27a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
27a40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
27a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27a60 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66       // NOTE: If
27a70 20 74 68 65 20 72 65 67 69 73 74 72 79 20 6c 6f   the registry lo
27a80 67 20 66 69 6c 65 20 6e 61 6d 65 20 68 61 73 20  g file name has 
27a90 62 65 65 6e 20 73 65 74 2c 20 69 74 73 0d 0a 20  been set, its.. 
27aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ab0 20 20 20 2f 2f 20 20 20 20 20 20 20 76 61 6c 75     //       valu
27ac0 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 76  e will be used v
27ad0 65 72 62 61 74 69 6d 20 61 73 20 74 68 65 20 70  erbatim as the p
27ae0 6c 61 63 65 20 77 68 65 72 65 0d 0a 20 20 20 20  lace where..    
27af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b00 2f 2f 20 20 20 20 20 20 20 61 6c 6c 20 72 65 67  //       all reg
27b10 69 73 74 72 79 20 77 72 69 74 65 20 6f 70 65 72  istry write oper
27b20 61 74 69 6f 6e 73 20 77 69 6c 6c 20 28 65 76 65  ations will (eve
27b30 6e 74 75 61 6c 6c 79 29 0d 0a 20 20 20 20 20 20  ntually)..      
27b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
27b50 20 20 20 20 20 20 20 62 65 20 6c 6f 67 67 65 64         be logged
27b60 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  .  Make sure the
27b70 20 72 65 67 69 73 74 72 79 20 68 65 6c 70 65 72   registry helper
27b80 20 63 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   class..        
27b90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
27ba0 20 20 20 20 20 68 61 73 20 61 20 76 61 6c 69 64       has a valid
27bb0 20 6f 70 65 72 61 74 69 6f 6e 20 6c 69 73 74 3b   operation list;
27bc0 20 6f 74 68 65 72 77 69 73 65 2c 20 69 74 20 77   otherwise, it w
27bd0 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ill..           
27be0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
27bf0 20 20 6e 6f 74 20 70 65 72 66 6f 72 6d 20 61 6e    not perform an
27c00 79 20 6c 6f 67 67 69 6e 67 2e 0d 0a 20 20 20 20  y logging...    
27c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
27c30 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
27c40 69 67 75 72 61 74 69 6f 6e 2e 72 65 67 69 73 74  iguration.regist
27c50 72 79 4c 6f 67 46 69 6c 65 4e 61 6d 65 20 21 3d  ryLogFileName !=
27c60 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
27c70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
27c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c90 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
27ca0 65 6c 70 65 72 2e 45 6e 61 62 6c 65 4f 72 44 69  elper.EnableOrDi
27cb0 73 61 62 6c 65 4f 70 65 72 61 74 69 6f 6e 4c 69  sableOperationLi
27cc0 73 74 28 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20  st(true);....   
27cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ce0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
27cf0 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
27d00 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
27d10 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  High,..         
27d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d30 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
27d40 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
27d50 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
27d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27d70 20 20 20 20 20 20 20 20 20 20 20 20 20 22 52 65               "Re
27d80 67 69 73 74 72 79 20 6c 6f 67 67 69 6e 67 20 74  gistry logging t
27d90 6f 20 66 69 6c 65 20 7b 30 7d 20 65 6e 61 62 6c  o file {0} enabl
27da0 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ed.",..         
27db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27dc0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f     ForDisplay(co
27dd0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 72 65 67 69  nfiguration.regi
27de0 73 74 72 79 4c 6f 67 46 69 6c 65 4e 61 6d 65 29  stryLogFileName)
27df0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
27e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e10 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
27e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27e30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
27e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
27e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27e60 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
27e70 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69  f the command li
27e80 6e 65 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20  ne has not been 
27e90 6d 61 6e 75 61 6c 6c 79 0d 0a 20 20 20 20 20 20  manually..      
27ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
27eb0 20 20 20 20 20 20 20 63 6f 6e 66 69 72 6d 65 64         confirmed
27ec0 20 28 69 2e 65 2e 20 76 69 61 20 74 68 65 20 65   (i.e. via the e
27ed0 78 70 6c 69 63 69 74 20 63 6f 6d 6d 61 6e 64 20  xplicit command 
27ee0 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20  line..          
27ef0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
27f00 20 20 20 6f 70 74 69 6f 6e 29 2c 20 74 68 65 6e     option), then
27f10 20 73 74 6f 70 20 70 72 6f 63 65 73 73 69 6e 67   stop processing
27f20 20 6e 6f 77 2e 20 20 57 65 20 65 6e 66 6f 72 63   now.  We enforc
27f30 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
27f40 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
27f50 74 68 69 73 20 72 75 6c 65 20 73 6f 20 74 68 61  this rule so tha
27f60 74 20 73 69 6d 70 6c 79 20 64 6f 75 62 6c 65 2d  t simply double-
27f70 63 6c 69 63 6b 69 6e 67 20 74 68 65 0d 0a 20 20  clicking the..  
27f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f90 20 20 2f 2f 20 20 20 20 20 20 20 65 78 65 63 75    //       execu
27fa0 74 61 62 6c 65 20 77 69 6c 6c 20 6e 6f 74 20 72  table will not r
27fb0 65 73 75 6c 74 20 69 6e 20 61 6e 79 20 63 68 61  esult in any cha
27fc0 6e 67 65 73 20 62 65 69 6e 67 0d 0a 20 20 20 20  nges being..    
27fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27fe0 2f 2f 20 20 20 20 20 20 20 6d 61 64 65 20 74 6f  //       made to
27ff0 20 74 68 65 20 73 79 73 74 65 6d 2e 0d 0a 20 20   the system...  
28000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28010 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
28020 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
28030 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e  onfiguration.con
28040 66 69 72 6d 29 0d 0a 20 20 20 20 20 20 20 20 20  firm)..         
28050 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
28060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28070 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 43        error = "C
28080 61 6e 6e 6f 74 20 63 6f 6e 74 69 6e 75 65 2c 20  annot continue, 
28090 74 68 65 20 5c 22 63 6f 6e 66 69 72 6d 5c 22 20  the \"confirm\" 
280a0 6f 70 74 69 6f 6e 20 69 73 20 22 20 2b 0d 0a 20  option is " +.. 
280b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280c0 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 74 20             "not 
280d0 65 6e 61 62 6c 65 64 2e 22 3b 0d 0a 0d 0a 20 20  enabled.";....  
280e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
28100 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
28110 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
28120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28130 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
28140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28150 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
28160 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
28170 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
28180 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
281a0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
281b0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
281c0 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
281d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281e0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
281f0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
28200 63 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65  ck, e, traceCate
28210 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
28220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
28230 72 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f  ror = "Failed to
28240 20 70 72 6f 63 65 73 73 20 63 6f 6e 66 69 67 75   process configu
28250 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20  ration.";..     
28260 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
28270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28280 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
28290 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
282a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
282b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
282c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
282d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
282e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
282f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
28300 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
28310 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
28320 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
28330 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
28340 61 74 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b 52  atic bool CheckR
28350 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a  untimeVersion(..
28360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28370 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  Configuration co
28380 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20  nfiguration,..  
28390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
283a0 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20  ol strict,..    
283b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
283c0 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
283d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
283e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
283f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28400 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
28410 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28420 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
28430 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
28440 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
28450 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
28460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28470 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
28480 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72  Invalid configur
28490 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20  ation.";..      
284a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
284b0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
284c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
284d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
284e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
284f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28500 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
28510 68 61 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  hat version of t
28520 68 65 20 72 75 6e 74 69 6d 65 20 77 61 73 20 74  he runtime was t
28530 68 65 20 63 6f 72 65 20 28 70 72 69 6d 61 72 79  he core (primary
28540 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
28550 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
28560 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65  assembly compile
28570 64 20 61 67 61 69 6e 73 74 20 28 65 2e 67 2e 20  d against (e.g. 
28580 22 76 32 2e 30 2e 35 30 37 32 37 22 20 6f 72 0d  "v2.0.50727" or.
28590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
285a0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 22 76       //       "v
285b0 34 2e 30 2e 33 30 33 31 39 22 29 2e 0d 0a 20 20  4.0.30319")...  
285c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285d0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
285e0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
285f0 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d   coreImageRuntim
28600 65 56 65 72 73 69 6f 6e 20 3d 20 47 65 74 49 6d  eVersion = GetIm
28610 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
28620 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
28630 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
28640 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69  iguration.coreFi
28650 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
28660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28670 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
28680 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
28690 20 57 65 20 61 6c 6c 6f 77 20 74 68 65 20 61 63   We allow the ac
286a0 74 75 61 6c 20 69 6d 61 67 65 20 72 75 6e 74 69  tual image runti
286b0 6d 65 20 63 68 65 63 6b 69 6e 67 20 74 6f 20 62  me checking to b
286c0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
286d0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
286e0 62 79 70 61 73 73 65 64 20 76 69 61 20 74 68 65  bypassed via the
286f0 20 22 2d 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73   "-noRuntimeVers
28700 69 6f 6e 22 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  ion" command lin
28710 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
28720 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
28730 6f 70 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d  option.  The com
28740 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e  mand line option
28750 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72   is intended for
28760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28770 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65        //       e
28780 78 70 65 72 74 20 75 73 65 20 6f 6e 6c 79 2e 0d  xpert use only..
28790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
287a0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
287b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
287c0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e  (configuration.n
287d0 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  oRuntimeVersion)
287e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
287f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28810 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
28820 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
28830 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20  ority.Medium,.. 
28840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28850 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
28860 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
28870 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
28880 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
28890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288a0 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69       "Assembly i
288b0 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74  s compiled for t
288c0 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  he .NET Framewor
288d0 6b 20 7b 30 7d 3b 20 22 20 2b 0d 0a 20 20 20 20  k {0}; " +..    
288e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288f0 20 20 20 20 20 20 20 20 22 68 6f 77 65 76 65 72          "however
28900 2c 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 72  , installation r
28910 65 73 74 72 69 63 74 69 6f 6e 73 20 62 61 73 65  estrictions base
28920 64 20 6f 6e 20 74 68 69 73 20 22 20 2b 0d 0a 20  d on this " +.. 
28930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28940 20 20 20 20 20 20 20 20 20 20 20 22 66 61 63 74             "fact
28950 20 68 61 76 65 20 62 65 65 6e 20 64 69 73 61 62   have been disab
28960 6c 65 64 20 76 69 61 20 74 68 65 20 63 6f 6d 6d  led via the comm
28970 61 6e 64 20 6c 69 6e 65 2e 22 2c 0d 0a 20 20 20  and line.",..   
28980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28990 20 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61           coreIma
289a0 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
289b0 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
289c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
289d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
289e0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
289f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a00 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
28a10 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
28a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a30 20 2f 2f 20 54 4f 44 4f 3a 20 52 65 73 74 72 69   // TODO: Restri
28a40 63 74 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  ct the configura
28a50 74 69 6f 6e 20 62 61 73 65 64 20 6f 6e 20 77 68  tion based on wh
28a60 69 63 68 20 69 6d 61 67 65 0d 0a 20 20 20 20 20  ich image..     
28a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
28a80 2f 20 20 20 20 20 20 20 72 75 6e 74 69 6d 65 20  /       runtime 
28a90 76 65 72 73 69 6f 6e 73 20 28 77 68 69 63 68 20  versions (which 
28aa0 6d 6f 72 65 2d 6f 72 2d 6c 65 73 73 20 63 6f 72  more-or-less cor
28ab0 72 65 73 70 6f 6e 64 0d 0a 20 20 20 20 20 20 20  respond..       
28ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
28ad0 20 20 20 20 20 20 74 6f 20 2e 4e 45 54 20 46 72        to .NET Fr
28ae0 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73  amework versions
28af0 29 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20  ) are supported 
28b00 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  by the..        
28b10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
28b20 20 20 20 20 20 76 65 72 73 69 6f 6e 73 20 6f 66       versions of
28b30 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 74   Visual Studio t
28b40 68 61 74 20 61 72 65 20 69 6e 73 74 61 6c 6c 65  hat are installe
28b50 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
28b60 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
28b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b80 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
28b90 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65 49 6d 61  lOrEmpty(coreIma
28ba0 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
28bb0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
28bc0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28be0 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
28bf0 6c 69 64 20 63 6f 72 65 20 66 69 6c 65 20 69 6d  lid core file im
28c00 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73  age runtime vers
28c10 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion";..         
28c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
28c30 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
28c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c50 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
28c60 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
28c70 20 28 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28   (String.Equals(
28c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
28ca0 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  reImageRuntimeVe
28cb0 72 73 69 6f 6e 2c 20 43 4c 52 76 32 49 6d 61 67  rsion, CLRv2Imag
28cc0 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c  eRuntimeVersion,
28cd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
28cf0 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
28d00 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20  rdinal))..      
28d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
28d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28d30 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
28d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d50 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f       // NOTE: Fo
28d60 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30 20 72  r the CLR v2.0 r
28d70 75 6e 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72  untime, make sur
28d80 65 20 77 65 20 64 69 73 61 62 6c 65 0d 0a 20 20  e we disable..  
28d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28da0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
28db0 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20 75 73  ny attempt to us
28dc0 65 20 69 74 20 66 6f 72 20 74 68 69 6e 67 73 20  e it for things 
28dd0 74 68 61 74 20 72 65 71 75 69 72 65 0d 0a 20 20  that require..  
28de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28df0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
28e00 6e 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69  n assembly compi
28e10 6c 65 64 20 66 6f 72 20 74 68 65 20 43 4c 52 20  led for the CLR 
28e20 76 34 2e 30 2e 20 20 49 74 20 69 73 0d 0a 20 20  v4.0.  It is..  
28e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e40 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75        //       u
28e50 6e 63 65 72 74 61 69 6e 20 69 66 20 74 68 69 73  ncertain if this
28e60 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 70   is actually a p
28e70 72 6f 62 6c 65 6d 20 69 6e 0d 0a 20 20 20 20 20  roblem in..     
28e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e90 20 20 20 2f 2f 20 20 20 20 20 20 20 70 72 61 63     //       prac
28ea0 74 69 63 65 20 61 73 20 74 68 65 20 43 4c 52 20  tice as the CLR 
28eb0 76 34 2e 30 20 63 61 6e 20 6c 6f 61 64 20 61 6e  v4.0 can load an
28ec0 64 20 75 73 65 20 61 6e 0d 0a 20 20 20 20 20 20  d use an..      
28ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ee0 20 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d    //       assem
28ef0 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 77 69 74  bly compiled wit
28f00 68 20 74 68 65 20 43 4c 52 20 76 32 2e 30 3b 20  h the CLR v2.0; 
28f10 68 6f 77 65 76 65 72 2c 0d 0a 20 20 20 20 20 20  however,..      
28f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f30 20 20 2f 2f 20 20 20 20 20 20 20 73 69 6e 63 65    //       since
28f40 20 74 68 69 73 20 70 72 6f 6a 65 63 74 20 6f 66   this project of
28f50 66 65 72 73 20 62 6f 74 68 20 63 6f 6e 66 69 67  fers both config
28f60 75 72 61 74 69 6f 6e 73 2c 0d 0a 20 20 20 20 20  urations,..     
28f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f80 20 20 20 2f 2f 20 20 20 20 20 20 20 77 65 20 63     //       we c
28f90 75 72 72 65 6e 74 6c 79 20 64 69 73 61 6c 6c 6f  urrently disallo
28fa0 77 20 74 68 69 73 20 6d 69 73 6d 61 74 63 68 2e  w this mismatch.
28fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28fc0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
28fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28fe0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
28ff0 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20  ion.noNetFx40 = 
29000 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
29010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
29020 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
29030 65 74 46 78 34 35 20 3d 20 74 72 75 65 3b 0d 0a  etFx45 = true;..
29040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29050 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
29060 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 31  ation.noNetFx451
29070 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
29080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29090 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
290a0 6e 6f 4e 65 74 46 78 34 35 32 20 3d 20 74 72 75  noNetFx452 = tru
290b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
290c0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
290d0 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46  iguration.noNetF
290e0 78 34 36 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  x46 = true;..   
290f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29100 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
29110 6f 6e 2e 6e 6f 4e 65 74 46 78 34 36 31 20 3d 20  on.noNetFx461 = 
29120 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
29130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
29140 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
29150 65 74 46 78 34 36 32 20 3d 20 74 72 75 65 3b 0d  etFx462 = true;.
29160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29170 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
29180 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 37  ration.noNetFx47
29190 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
291a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291b0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
291c0 6e 6f 4e 65 74 46 78 34 37 31 20 3d 20 74 72 75  noNetFx471 = tru
291d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
291e0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
291f0 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30  iguration.noVs20
29200 31 30 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  10 = true;..    
29210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29220 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
29230 6e 2e 6e 6f 56 73 32 30 31 32 20 3d 20 74 72 75  n.noVs2012 = tru
29240 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
29250 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
29260 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30  iguration.noVs20
29270 31 33 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  13 = true;..    
29280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29290 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
292a0 6e 2e 6e 6f 56 73 32 30 31 35 20 3d 20 74 72 75  n.noVs2015 = tru
292b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
292c0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
292d0 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30  iguration.noVs20
292e0 31 37 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20  17 = true;....  
292f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29300 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
29310 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
29320 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75  cePriority.Mediu
29330 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m,..            
29340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29350 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
29360 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
29370 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
29380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29390 20 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d            "Assem
293a0 62 6c 79 20 69 73 20 63 6f 6d 70 69 6c 65 64 20  bly is compiled 
293b0 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61  for the .NET Fra
293c0 6d 65 77 6f 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d  mework {0}, " +.
293d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
293e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73 75               "su
293f0 70 70 6f 72 74 20 66 6f 72 20 74 68 65 20 2e 4e  pport for the .N
29400 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 31 7d  ET Framework {1}
29410 20 69 73 20 6e 6f 77 20 64 69 73 61 62 6c 65 64   is now disabled
29420 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
29430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29440 20 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69   CLRv2ImageRunti
29450 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34  meVersion, CLRv4
29460 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
29470 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ion),..         
29480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29490 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
294a0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
294b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
294c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
294d0 6c 73 65 20 69 66 20 28 53 74 72 69 6e 67 2e 45  lse if (String.E
294e0 71 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20  quals(..        
294f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29500 20 20 20 20 63 6f 72 65 49 6d 61 67 65 52 75 6e      coreImageRun
29510 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52  timeVersion, CLR
29520 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v4ImageRuntimeVe
29530 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
29540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29550 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72      StringCompar
29560 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a  ison.Ordinal))..
29570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29580 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
29590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
295a0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
295b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
295c0 54 45 3a 20 46 6f 72 20 74 68 65 20 43 4c 52 20  TE: For the CLR 
295d0 76 34 2e 30 20 72 75 6e 74 69 6d 65 2c 20 6d 61  v4.0 runtime, ma
295e0 6b 65 20 73 75 72 65 20 77 65 20 64 69 73 61 62  ke sure we disab
295f0 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  le..            
29600 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
29610 20 20 20 20 20 61 6e 79 20 61 74 74 65 6d 70 74       any attempt
29620 20 74 6f 20 75 73 65 20 69 74 20 66 6f 72 20 74   to use it for t
29630 68 69 6e 67 73 20 74 68 61 74 20 72 65 71 75 69  hings that requi
29640 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  re..            
29650 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
29660 20 20 20 20 20 61 6e 20 61 73 73 65 6d 62 6c 79       an assembly
29670 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68   compiled for th
29680 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20  e CLR v2.0...   
29690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296a0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
296b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296c0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
296d0 6f 4e 65 74 46 78 32 30 20 3d 20 74 72 75 65 3b  oNetFx20 = true;
296e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
296f0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
29700 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 33  uration.noNetFx3
29710 35 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  5 = true;..     
29720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29730 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
29740 2e 6e 6f 56 73 32 30 30 35 20 3d 20 74 72 75 65  .noVs2005 = true
29750 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
29760 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
29770 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30  guration.noVs200
29780 38 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  8 = true;....   
29790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297a0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
297b0 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
297c0 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
297d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
297e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
297f0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
29800 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
29810 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
29820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29830 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62           "Assemb
29840 6c 79 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 66  ly is compiled f
29850 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d  or the .NET Fram
29860 65 77 6f 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a  ework {0}, " +..
29870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29880 20 20 20 20 20 20 20 20 20 20 20 20 22 73 75 70              "sup
29890 70 6f 72 74 20 66 6f 72 20 74 68 65 20 2e 4e 45  port for the .NE
298a0 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 31 7d 20  T Framework {1} 
298b0 69 73 20 6e 6f 77 20 64 69 73 61 62 6c 65 64 2e  is now disabled.
298c0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
298d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298e0 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76 34  ForDisplay(CLRv4
298f0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
29900 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ion),..         
29910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29920 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c     ForDisplay(CL
29930 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  Rv2ImageRuntimeV
29940 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  ersion)),..     
29950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29960 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
29970 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
29980 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
29990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
299a0 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
299b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
299c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
299d0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
299e0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
299f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a00 20 20 20 20 20 20 20 20 20 20 20 20 22 75 6e 73              "uns
29a10 75 70 70 6f 72 74 65 64 20 63 6f 72 65 20 66 69  upported core fi
29a20 6c 65 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65  le image runtime
29a30 20 76 65 72 73 69 6f 6e 20 22 20 2b 0d 0a 20 20   version " +..  
29a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a50 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 2c 20            "{0}, 
29a60 6d 75 73 74 20 62 65 20 7b 31 7d 20 6f 72 20 7b  must be {1} or {
29a70 32 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  2}",..          
29a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a90 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 72    ForDisplay(cor
29aa0 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  eImageRuntimeVer
29ab0 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20  sion),..        
29ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ad0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43      ForDisplay(C
29ae0 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65  LRv2ImageRuntime
29af0 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20  Version),..     
29b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b10 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
29b20 79 28 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74  y(CLRv4ImageRunt
29b30 69 6d 65 56 65 72 73 69 6f 6e 29 29 3b 0d 0a 0d  imeVersion));...
29b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29b50 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
29b60 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
29b70 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
29b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29b90 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
29ba0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
29bb0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
29bc0 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
29bd0 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20  eption e)..     
29be0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c00 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
29c10 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
29c20 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
29c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29c40 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
29c50 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
29c60 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61 63 65 43  lback, e, traceC
29c70 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
29c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c90 20 65 72 72 6f 72 20 3d 20 22 46 61 69 6c 65 64   error = "Failed
29ca0 20 74 6f 20 63 68 65 63 6b 20 69 6d 61 67 65 20   to check image 
29cb0 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 2e  runtime version.
29cc0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
29cd0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
29ce0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
29cf0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
29d00 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
29d10 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
29d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
29d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29d80 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
29d90 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
29da0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
29db0 69 6e 67 20 47 65 74 49 6e 76 61 72 69 61 6e 74  ing GetInvariant
29dc0 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
29dd0 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 72 61 63         bool trac
29de0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
29df0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
29e00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
29e10 20 20 20 20 20 72 65 74 75 72 6e 20 55 73 65 45       return UseE
29e20 66 36 50 72 6f 76 69 64 65 72 28 74 72 61 63 65  f6Provider(trace
29e30 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
29e40 20 20 20 20 20 20 20 20 20 45 66 36 49 6e 76 61           Ef6Inva
29e50 72 69 61 6e 74 4e 61 6d 65 20 3a 20 49 6e 76 61  riantName : Inva
29e60 72 69 61 6e 74 4e 61 6d 65 3b 0d 0a 20 20 20 20  riantName;..    
29e70 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
29e80 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
29e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
29ed0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
29ee0 61 74 65 20 62 6f 6f 6c 20 49 73 53 79 73 74 65  ate bool IsSyste
29ef0 6d 45 66 36 41 73 73 65 6d 62 6c 79 41 76 61 69  mEf6AssemblyAvai
29f00 6c 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20  lable(..        
29f10 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 72 61          bool tra
29f20 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
29f30 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
29f40 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29f50 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
29f60 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f80 20 20 69 66 20 28 73 79 73 74 65 6d 45 66 36 41    if (systemEf6A
29f90 73 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29  ssembly == null)
29fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29fb0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29fd0 20 73 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62   systemEf6Assemb
29fe0 6c 79 20 3d 20 41 73 73 65 6d 62 6c 79 2e 52 65  ly = Assembly.Re
29ff0 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79 4c 6f 61 64  flectionOnlyLoad
2a000 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2a010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
2a020 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79  ystemEf6Assembly
2a030 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
2a040 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2a050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a060 20 20 20 20 20 69 66 20 28 73 79 73 74 65 6d 45       if (systemE
2a070 66 36 41 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75  f6Assembly != nu
2a080 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2a090 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0b0 20 20 20 20 69 66 20 28 74 72 61 63 65 20 26 26      if (trace &&
2a0c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 48                !H
2a0e0 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64 65 72  asFlags(Provider
2a0f0 46 6c 61 67 73 2e 44 69 64 45 66 36 52 65 73 6f  Flags.DidEf6Reso
2a100 6c 76 65 54 72 61 63 65 2c 20 74 72 75 65 29 29  lveTrace, true))
2a110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a120 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a140 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
2a150 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
2a160 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
2a170 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
2a180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a190 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
2a1a0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
2a1b0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
2a1c0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2a1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1e0 20 20 20 20 20 20 22 45 6e 74 69 74 79 20 46 72        "Entity Fr
2a1f0 61 6d 65 77 6f 72 6b 20 36 20 61 73 73 65 6d 62  amework 6 assemb
2a200 6c 79 20 77 61 73 20 22 20 2b 0d 0a 20 20 20 20  ly was " +..    
2a210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a220 20 20 20 20 20 20 20 20 20 20 20 20 22 72 65 73              "res
2a230 6f 6c 76 65 64 20 74 6f 20 7b 30 7d 2e 22 2c 20  olved to {0}.", 
2a240 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20  ForDisplay(..   
2a250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a260 20 20 20 20 20 20 20 20 20 20 20 20 20 73 79 73               sys
2a270 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 2e 4c  temEf6Assembly.L
2a280 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  ocation)),..    
2a290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a2a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
2a2b0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
2a2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a2d0 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 76 69             provi
2a2e0 64 65 72 46 6c 61 67 73 20 7c 3d 20 50 72 6f 76  derFlags |= Prov
2a2f0 69 64 65 72 46 6c 61 67 73 2e 44 69 64 45 66 36  iderFlags.DidEf6
2a300 52 65 73 6f 6c 76 65 54 72 61 63 65 3b 0d 0a 20  ResolveTrace;.. 
2a310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a320 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2a330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a340 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
2a350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a360 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2a370 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2a380 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
2a390 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  h..             
2a3a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a3b0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
2a3c0 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
2a3d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2a3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2a3f0 66 20 28 74 72 61 63 65 20 26 26 0d 0a 20 20 20  f (trace &&..   
2a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a410 20 21 48 61 73 46 6c 61 67 73 28 50 72 6f 76 69   !HasFlags(Provi
2a420 64 65 72 46 6c 61 67 73 2e 44 69 64 45 66 36 52  derFlags.DidEf6R
2a430 65 73 6f 6c 76 65 54 72 61 63 65 2c 20 74 72 75  esolveTrace, tru
2a440 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2a450 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2a460 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
2a470 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
2a480 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
2a490 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
2a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a4b0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
2a4c0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
2a4d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a4e0 20 20 20 20 20 20 20 20 20 20 22 45 6e 74 69 74            "Entit
2a4f0 79 20 46 72 61 6d 65 77 6f 72 6b 20 36 20 61 73  y Framework 6 as
2a500 73 65 6d 62 6c 79 20 77 61 73 20 6e 6f 74 20 72  sembly was not r
2a510 65 73 6f 6c 76 65 64 2e 22 2c 0d 0a 20 20 20 20  esolved.",..    
2a520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a530 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
2a540 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2a550 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 76 69             provi
2a560 64 65 72 46 6c 61 67 73 20 7c 3d 20 50 72 6f 76  derFlags |= Prov
2a570 69 64 65 72 46 6c 61 67 73 2e 44 69 64 45 66 36  iderFlags.DidEf6
2a580 52 65 73 6f 6c 76 65 54 72 61 63 65 3b 0d 0a 20  ResolveTrace;.. 
2a590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2a5a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a5b0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2a5c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2a5d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
2a5e0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2a5f0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2a600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2a640 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
2a650 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64  on Public Method
2a660 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
2a670 75 62 6c 69 63 20 62 6f 6f 6c 20 48 61 73 46 6c  ublic bool HasFl
2a680 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ags(..          
2a690 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61        InstallFla
2a6a0 67 73 20 68 61 73 46 6c 61 67 73 2c 0d 0a 20 20  gs hasFlags,..  
2a6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
2a6c0 6f 6c 20 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20  ol all..        
2a6d0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2a6e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2a6f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 6c            if (al
2a700 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2a710 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
2a720 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 26 20  (installFlags & 
2a730 68 61 73 46 6c 61 67 73 29 20 3d 3d 20 68 61 73  hasFlags) == has
2a740 46 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20 20 20  Flags);..       
2a750 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
2a760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a770 20 20 20 72 65 74 75 72 6e 20 28 28 69 6e 73 74     return ((inst
2a780 61 6c 6c 46 6c 61 67 73 20 26 20 68 61 73 46 6c  allFlags & hasFl
2a790 61 67 73 29 20 21 3d 20 49 6e 73 74 61 6c 6c 46  ags) != InstallF
2a7a0 6c 61 67 73 2e 4e 6f 6e 65 29 3b 0d 0a 20 20 20  lags.None);..   
2a7b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2a7c0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2a7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2a810 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
2a820 6c 69 63 20 62 6f 6f 6c 20 48 61 73 46 6c 61 67  lic bool HasFlag
2a830 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
2a840 20 20 20 20 50 72 6f 76 69 64 65 72 46 6c 61 67      ProviderFlag
2a850 73 20 68 61 73 46 6c 61 67 73 2c 0d 0a 20 20 20  s hasFlags,..   
2a860 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
2a870 6c 20 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20  l all..         
2a880 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2a890 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2a8a0 20 20 20 20 20 20 20 20 20 69 66 20 28 61 6c 6c           if (all
2a8b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2a8c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 28         return ((
2a8d0 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20 26 20  providerFlags & 
2a8e0 68 61 73 46 6c 61 67 73 29 20 3d 3d 20 68 61 73  hasFlags) == has
2a8f0 46 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20 20 20  Flags);..       
2a900 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
2a910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a920 20 20 20 72 65 74 75 72 6e 20 28 28 70 72 6f 76     return ((prov
2a930 69 64 65 72 46 6c 61 67 73 20 26 20 68 61 73 46  iderFlags & hasF
2a940 6c 61 67 73 29 20 21 3d 20 50 72 6f 76 69 64 65  lags) != Provide
2a950 72 46 6c 61 67 73 2e 4e 6f 6e 65 29 3b 0d 0a 20  rFlags.None);.. 
2a960 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2a970 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2a980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2a9c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
2a9d0 75 62 6c 69 63 20 62 6f 6f 6c 20 49 73 4c 69 6e  ublic bool IsLin
2a9e0 71 53 75 70 70 6f 72 74 65 64 28 0d 0a 20 20 20  qSupported(..   
2a9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
2aa00 6c 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20  l trace..       
2aa10 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2aa20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2aa30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2aa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2aa50 2f 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 6f  / NOTE: Check to
2aa60 20 73 65 65 20 69 66 20 74 68 65 20 63 61 6c 6c   see if the call
2aa70 65 72 20 68 61 73 20 66 6f 72 63 65 64 20 4c 49  er has forced LI
2aa80 4e 51 20 73 75 70 70 6f 72 74 20 74 6f 0d 0a 20  NQ support to.. 
2aa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2aaa0 2f 20 20 20 20 20 20 20 62 65 20 65 6e 61 62 6c  /       be enabl
2aab0 65 64 20 2d 4f 52 2d 20 64 69 73 61 62 6c 65 64  ed -OR- disabled
2aac0 2c 20 74 68 65 72 65 62 79 20 62 79 70 61 73 73  , thereby bypass
2aad0 69 6e 67 20 74 68 65 20 6e 65 65 64 0d 0a 20 20  ing the need..  
2aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2aaf0 20 20 20 20 20 20 20 66 6f 72 20 22 61 75 74 6f         for "auto
2ab00 6d 61 74 69 63 20 64 65 74 65 63 74 69 6f 6e 22  matic detection"
2ab10 20 62 79 20 74 68 69 73 20 6d 65 74 68 6f 64 2e   by this method.
2ab20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ab30 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2ab40 20 20 20 20 20 20 69 66 20 28 48 61 73 46 6c 61        if (HasFla
2ab50 67 73 28 50 72 6f 76 69 64 65 72 46 6c 61 67 73  gs(ProviderFlags
2ab60 2e 46 6f 72 63 65 4c 69 6e 71 45 6e 61 62 6c 65  .ForceLinqEnable
2ab70 64 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20  d, true))..     
2ab80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2ab90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aba0 20 20 69 66 20 28 74 72 61 63 65 20 26 26 0d 0a    if (trace &&..
2abb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2abc0 20 20 20 20 20 20 20 20 21 48 61 73 46 6c 61 67          !HasFlag
2abd0 73 28 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e  s(ProviderFlags.
2abe0 44 69 64 4c 69 6e 71 46 6f 72 63 65 54 72 61 63  DidLinqForceTrac
2abf0 65 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20  e, true))..     
2ac00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2ac10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ac20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
2ac30 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
2ac40 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
2ac50 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20  ediumHigh,..    
2ac60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac70 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
2ac80 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
2ac90 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
2aca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2acb0 20 20 20 22 46 6f 72 63 65 64 20 74 6f 20 65 6e     "Forced to en
2acc0 61 62 6c 65 20 73 75 70 70 6f 72 74 20 66 6f 72  able support for
2acd0 20 5c 22 4c 69 6e 71 5c 22 2e 22 2c 0d 0a 20 20   \"Linq\".",..  
2ace0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2acf0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
2ad00 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
2ad10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad20 20 20 20 20 20 70 72 6f 76 69 64 65 72 46 6c 61       providerFla
2ad30 67 73 20 7c 3d 20 50 72 6f 76 69 64 65 72 46 6c  gs |= ProviderFl
2ad40 61 67 73 2e 44 69 64 4c 69 6e 71 46 6f 72 63 65  ags.DidLinqForce
2ad50 54 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20  Trace;..        
2ad60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2ad70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ad80 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
2ad90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2ada0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2adb0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 48        else if (H
2adc0 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64 65 72  asFlags(Provider
2add0 46 6c 61 67 73 2e 46 6f 72 63 65 4c 69 6e 71 44  Flags.ForceLinqD
2ade0 69 73 61 62 6c 65 64 2c 20 74 72 75 65 29 29 0d  isabled, true)).
2adf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ae00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ae10 20 20 20 20 20 20 20 20 69 66 20 28 74 72 61 63          if (trac
2ae20 65 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  e &&..          
2ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 48                !H
2ae40 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64 65 72  asFlags(Provider
2ae50 46 6c 61 67 73 2e 44 69 64 4c 69 6e 71 46 6f 72  Flags.DidLinqFor
2ae60 63 65 54 72 61 63 65 2c 20 74 72 75 65 29 29 0d  ceTrace, true)).
2ae70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ae80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ae90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aea0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
2aeb0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
2aec0 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c  rity.MediumHigh,
2aed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2aee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
2aef0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
2af00 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ceCallback,..   
2af10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af20 20 20 20 20 20 20 20 20 20 22 46 6f 72 63 65 64           "Forced
2af30 20 74 6f 20 64 69 73 61 62 6c 65 20 73 75 70 70   to disable supp
2af40 6f 72 74 20 66 6f 72 20 5c 22 4c 69 6e 71 5c 22  ort for \"Linq\"
2af50 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
2af60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af70 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
2af80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2af90 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 76              prov
2afa0 69 64 65 72 46 6c 61 67 73 20 7c 3d 20 50 72 6f  iderFlags |= Pro
2afb0 76 69 64 65 72 46 6c 61 67 73 2e 44 69 64 4c 69  viderFlags.DidLi
2afc0 6e 71 46 6f 72 63 65 54 72 61 63 65 3b 0d 0a 20  nqForceTrace;.. 
2afd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2afe0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2aff0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2b000 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2b010 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2b020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b030 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2b040 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74      // NOTE: Ret
2b050 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20  urn non-zero if 
2b060 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
2b070 53 51 4c 69 74 65 2e 4c 69 6e 71 0d 0a 20 20 20  SQLite.Linq..   
2b080 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2b090 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 73        assembly s
2b0a0 68 6f 75 6c 64 20 62 65 20 70 72 6f 63 65 73 73  hould be process
2b0b0 65 64 20 64 75 72 69 6e 67 20 74 68 65 20 69 6e  ed during the in
2b0c0 73 74 61 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20  stall...        
2b0d0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
2b0e0 20 49 66 20 74 68 65 20 74 61 72 67 65 74 20 69   If the target i
2b0f0 73 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  s Visual Studio 
2b100 32 30 30 35 2c 20 74 68 69 73 20 6d 75 73 74 0d  2005, this must.
2b110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b120 20 2f 2f 20 20 20 20 20 20 20 72 65 74 75 72 6e   //       return
2b130 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20 20 20   zero...        
2b140 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2b150 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2b160 72 6e 20 21 6e 6f 4e 65 74 46 78 33 35 20 7c 7c  rn !noNetFx35 ||
2b170 20 21 6e 6f 4e 65 74 46 78 34 30 20 7c 7c 20 21   !noNetFx40 || !
2b180 6e 6f 4e 65 74 46 78 34 35 20 7c 7c 0d 0a 20 20  noNetFx45 ||..  
2b190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1a0 20 20 21 6e 6f 4e 65 74 46 78 34 35 31 20 7c 7c    !noNetFx451 ||
2b1b0 20 21 6e 6f 4e 65 74 46 78 34 35 32 20 7c 7c 20   !noNetFx452 || 
2b1c0 21 6e 6f 4e 65 74 46 78 34 36 20 7c 7c 0d 0a 20  !noNetFx46 ||.. 
2b1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1e0 20 20 20 21 6e 6f 4e 65 74 46 78 34 36 31 20 7c     !noNetFx461 |
2b1f0 7c 20 21 6e 6f 4e 65 74 46 78 34 36 32 20 7c 7c  | !noNetFx462 ||
2b200 20 21 6e 6f 4e 65 74 46 78 34 37 20 7c 7c 0d 0a   !noNetFx47 ||..
2b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b220 20 20 20 20 21 6e 6f 4e 65 74 46 78 34 37 31 3b      !noNetFx471;
2b230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2b240 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2b250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b290 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2b2a0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49 73    public bool Is
2b2b0 45 66 36 53 75 70 70 6f 72 74 65 64 28 0d 0a 20  Ef6Supported(.. 
2b2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
2b2d0 6f 6f 6c 20 74 72 61 63 65 0d 0a 20 20 20 20 20  ool trace..     
2b2e0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2b2f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2b300 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2b310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b320 20 2f 2f 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20   // NOTE: Check 
2b330 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 63 61  to see if the ca
2b340 6c 6c 65 72 20 68 61 73 20 66 6f 72 63 65 64 20  ller has forced 
2b350 45 46 36 20 73 75 70 70 6f 72 74 20 74 6f 0d 0a  EF6 support to..
2b360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b370 2f 2f 20 20 20 20 20 20 20 62 65 20 65 6e 61 62  //       be enab
2b380 6c 65 64 20 2d 4f 52 2d 20 64 69 73 61 62 6c 65  led -OR- disable
2b390 64 2c 20 74 68 65 72 65 62 79 20 62 79 70 61 73  d, thereby bypas
2b3a0 73 69 6e 67 20 74 68 65 20 6e 65 65 64 0d 0a 20  sing the need.. 
2b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2b3c0 2f 20 20 20 20 20 20 20 66 6f 72 20 22 61 75 74  /       for "aut
2b3d0 6f 6d 61 74 69 63 20 64 65 74 65 63 74 69 6f 6e  omatic detection
2b3e0 22 20 62 79 20 74 68 69 73 20 6d 65 74 68 6f 64  " by this method
2b3f0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2b400 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2b410 20 20 20 20 20 20 20 69 66 20 28 48 61 73 46 6c         if (HasFl
2b420 61 67 73 28 50 72 6f 76 69 64 65 72 46 6c 61 67  ags(ProviderFlag
2b430 73 2e 46 6f 72 63 65 45 66 36 45 6e 61 62 6c 65  s.ForceEf6Enable
2b440 64 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20  d, true))..     
2b450 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2b460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b470 20 20 69 66 20 28 74 72 61 63 65 20 26 26 0d 0a    if (trace &&..
2b480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b490 20 20 20 20 20 20 20 20 21 48 61 73 46 6c 61 67          !HasFlag
2b4a0 73 28 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e  s(ProviderFlags.
2b4b0 44 69 64 45 66 36 46 6f 72 63 65 54 72 61 63 65  DidEf6ForceTrace
2b4c0 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20  , true))..      
2b4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2b4e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b4f0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
2b500 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
2b510 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
2b520 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20  diumHigh,..     
2b530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b540 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
2b550 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
2b560 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
2b570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b580 20 20 22 46 6f 72 63 65 64 20 74 6f 20 65 6e 61    "Forced to ena
2b590 62 6c 65 20 73 75 70 70 6f 72 74 20 66 6f 72 20  ble support for 
2b5a0 5c 22 45 66 36 5c 22 2e 22 2c 0d 0a 20 20 20 20  \"Ef6\".",..    
2b5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b5c0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
2b5d0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
2b5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b5f0 20 20 20 70 72 6f 76 69 64 65 72 46 6c 61 67 73     providerFlags
2b600 20 7c 3d 20 50 72 6f 76 69 64 65 72 46 6c 61 67   |= ProviderFlag
2b610 73 2e 44 69 64 45 66 36 46 6f 72 63 65 54 72 61  s.DidEf6ForceTra
2b620 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce;..           
2b630 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2b640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b650 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
2b660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b670 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2b680 20 20 20 65 6c 73 65 20 69 66 20 28 48 61 73 46     else if (HasF
2b690 6c 61 67 73 28 50 72 6f 76 69 64 65 72 46 6c 61  lags(ProviderFla
2b6a0 67 73 2e 46 6f 72 63 65 45 66 36 44 69 73 61 62  gs.ForceEf6Disab
2b6b0 6c 65 64 2c 20 74 72 75 65 29 29 0d 0a 20 20 20  led, true))..   
2b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2b6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6e0 20 20 20 20 69 66 20 28 74 72 61 63 65 20 26 26      if (trace &&
2b6f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b700 20 20 20 20 20 20 20 20 20 20 21 48 61 73 46 6c            !HasFl
2b710 61 67 73 28 50 72 6f 76 69 64 65 72 46 6c 61 67  ags(ProviderFlag
2b720 73 2e 44 69 64 45 66 36 46 6f 72 63 65 54 72 61  s.DidEf6ForceTra
2b730 63 65 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20  ce, true))..    
2b740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b750 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2b760 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2b770 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
2b780 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
2b790 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20  MediumHigh,..   
2b7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7b0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
2b7c0 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
2b7d0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
2b7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7f0 20 20 20 20 22 46 6f 72 63 65 64 20 74 6f 20 64      "Forced to d
2b800 69 73 61 62 6c 65 20 73 75 70 70 6f 72 74 20 66  isable support f
2b810 6f 72 20 5c 22 45 66 36 5c 22 2e 22 2c 0d 0a 20  or \"Ef6\".",.. 
2b820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b830 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2b840 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2b850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b860 20 20 20 20 20 20 70 72 6f 76 69 64 65 72 46 6c        providerFl
2b870 61 67 73 20 7c 3d 20 50 72 6f 76 69 64 65 72 46  ags |= ProviderF
2b880 6c 61 67 73 2e 44 69 64 45 66 36 46 6f 72 63 65  lags.DidEf6Force
2b890 54 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20  Trace;..        
2b8a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2b8b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b8c0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2b8d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2b8e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2b8f0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2b900 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2b910 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 6e 6f 6e  NOTE: Return non
2b920 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 53 79 73  -zero if the Sys
2b930 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
2b940 45 46 36 0d 0a 20 20 20 20 20 20 20 20 20 20 20  EF6..           
2b950 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 73       //       as
2b960 73 65 6d 62 6c 79 20 73 68 6f 75 6c 64 20 62 65  sembly should be
2b970 20 70 72 6f 63 65 73 73 65 64 20 64 75 72 69 6e   processed durin
2b980 67 20 74 68 65 20 69 6e 73 74 61 6c 6c 2e 0d 0a  g the install...
2b990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b9a0 2f 2f 20 20 20 20 20 20 20 49 66 20 74 68 65 20  //       If the 
2b9b0 74 61 72 67 65 74 20 69 73 20 56 69 73 75 61 6c  target is Visual
2b9c0 20 53 74 75 64 69 6f 20 32 30 30 35 20 6f 72 20   Studio 2005 or 
2b9d0 56 69 73 75 61 6c 0d 0a 20 20 20 20 20 20 20 20  Visual..        
2b9e0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
2b9f0 20 53 74 75 64 69 6f 20 32 30 30 38 2c 20 74 68   Studio 2008, th
2ba00 69 73 20 6d 75 73 74 20 72 65 74 75 72 6e 20 7a  is must return z
2ba10 65 72 6f 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ero...          
2ba20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2ba30 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 6f            if (no
2ba40 4e 65 74 46 78 34 30 20 26 26 0d 0a 20 20 20 20  NetFx40 &&..    
2ba50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba60 6e 6f 4e 65 74 46 78 34 35 20 26 26 20 6e 6f 4e  noNetFx45 && noN
2ba70 65 74 46 78 34 35 31 20 26 26 20 6e 6f 4e 65 74  etFx451 && noNet
2ba80 46 78 34 35 32 20 26 26 20 6e 6f 4e 65 74 46 78  Fx452 && noNetFx
2ba90 34 36 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  46 &&..         
2baa0 20 20 20 20 20 20 20 20 20 20 20 6e 6f 4e 65 74             noNet
2bab0 46 78 34 36 31 20 26 26 20 6e 6f 4e 65 74 46 78  Fx461 && noNetFx
2bac0 34 36 32 20 26 26 20 6e 6f 4e 65 74 46 78 34 37  462 && noNetFx47
2bad0 20 26 26 20 6e 6f 4e 65 74 46 78 34 37 31 29 0d   && noNetFx471).
2bae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2baf0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2bb00 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2bb10 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2bb20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2bb30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2bb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb50 2f 2f 20 4e 4f 54 45 3a 20 41 6c 73 6f 2c 20 69  // NOTE: Also, i
2bb60 66 20 74 68 65 20 45 46 36 20 63 6f 72 65 20 61  f the EF6 core a
2bb70 73 73 65 6d 62 6c 79 20 69 73 20 75 6e 61 76 61  ssembly is unava
2bb80 69 6c 61 62 6c 65 2c 20 74 68 69 73 0d 0a 20 20  ilable, this..  
2bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2bba0 20 20 20 20 20 20 20 6d 75 73 74 20 72 65 74 75         must retu
2bbb0 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20  rn zero...      
2bbc0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2bbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2bbe0 20 28 21 49 73 53 79 73 74 65 6d 45 66 36 41 73   (!IsSystemEf6As
2bbf0 73 65 6d 62 6c 79 41 76 61 69 6c 61 62 6c 65 28  semblyAvailable(
2bc00 74 72 61 63 65 29 29 0d 0a 20 20 20 20 20 20 20  trace))..       
2bc10 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2bc20 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
2bc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2bc40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bc50 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 69 6e 61 6c    // NOTE: Final
2bc60 6c 79 2c 20 69 66 20 74 68 65 20 45 46 36 20 63  ly, if the EF6 c
2bc70 6f 72 65 20 61 73 73 65 6d 62 6c 79 20 69 73 20  ore assembly is 
2bc80 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20  not available.. 
2bc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2bca0 2f 20 20 20 20 20 20 20 67 6c 6f 62 61 6c 6c 79  /       globally
2bcb0 20 5b 61 6e 64 20 74 68 69 73 20 69 73 20 61 20   [and this is a 
2bcc0 72 65 71 75 69 72 65 6d 65 6e 74 20 66 6f 72 20  requirement for 
2bcd0 74 68 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20  the current..   
2bce0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2bcf0 20 20 20 20 20 20 69 6e 73 74 61 6c 6c 5d 2c 20        install], 
2bd00 72 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20  return zero...  
2bd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2bd20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bd30 20 20 72 65 74 75 72 6e 20 48 61 73 46 6c 61 67    return HasFlag
2bd40 73 28 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e  s(ProviderFlags.
2bd50 53 79 73 74 65 6d 45 66 36 4d 75 73 74 42 65 47  SystemEf6MustBeG
2bd60 6c 6f 62 61 6c 2c 20 74 72 75 65 29 20 3f 0d 0a  lobal, true) ?..
2bd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd80 20 20 20 20 49 73 53 79 73 74 65 6d 45 66 36 41      IsSystemEf6A
2bd90 73 73 65 6d 62 6c 79 47 6c 6f 62 61 6c 28 29 20  ssemblyGlobal() 
2bda0 3a 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  : true;..       
2bdb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2bdc0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2bdd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bde0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bdf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be00 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2be10 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
2be20 20 62 6f 6f 6c 20 49 73 45 66 36 41 73 73 65 6d   bool IsEf6Assem
2be30 62 6c 79 47 6c 6f 62 61 6c 28 29 0d 0a 20 20 20  blyGlobal()..   
2be40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2be50 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2be60 65 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  ef6AssemblyName 
2be70 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2be80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2be90 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
2bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
2beb0 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79  ssembly assembly
2bec0 20 3d 20 41 73 73 65 6d 62 6c 79 2e 52 65 66 6c   = Assembly.Refl
2bed0 65 63 74 69 6f 6e 4f 6e 6c 79 4c 6f 61 64 28 0d  ectionOnlyLoad(.
2bee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bef0 20 20 20 20 20 65 66 36 41 73 73 65 6d 62 6c 79       ef6Assembly
2bf00 4e 61 6d 65 2e 54 6f 53 74 72 69 6e 67 28 29 29  Name.ToString())
2bf10 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2bf20 20 20 20 20 20 72 65 74 75 72 6e 20 28 61 73 73       return (ass
2bf30 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 20 26  embly != null) &
2bf40 26 20 61 73 73 65 6d 62 6c 79 2e 47 6c 6f 62 61  & assembly.Globa
2bf50 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 3b 0d  lAssemblyCache;.
2bf60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2bf70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2bf80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bfa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bfb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bfc0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2bfd0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 55 73 65   public bool Use
2bfe0 45 66 36 50 72 6f 76 69 64 65 72 28 0d 0a 20 20  Ef6Provider(..  
2bff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
2c000 6f 6c 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20  ol trace..      
2c010 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2c020 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2c030 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2c040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c050 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 63 61 6e 6e  // NOTE: We cann
2c060 6f 74 20 75 73 65 20 74 68 65 20 45 46 36 20 61  ot use the EF6 a
2c070 73 73 65 6d 62 6c 79 20 61 73 20 74 68 65 20 70  ssembly as the p
2c080 72 6f 76 69 64 65 72 20 69 66 20 69 74 0d 0a 20  rovider if it.. 
2c090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2c0a0 2f 20 20 20 20 20 20 20 69 73 20 6e 6f 74 20 73  /       is not s
2c0b0 75 70 70 6f 72 74 65 64 20 62 79 20 74 68 69 73  upported by this
2c0c0 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 2e 0d 0a   installation...
2c0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0e0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2c0f0 20 20 20 20 69 66 20 28 21 49 73 45 66 36 53 75      if (!IsEf6Su
2c100 70 70 6f 72 74 65 64 28 74 72 61 63 65 29 29 0d  pported(trace)).
2c110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c120 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2c130 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
2c140 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2c150 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2c160 45 3a 20 46 6f 72 20 74 68 65 20 45 46 36 20 61  E: For the EF6 a
2c170 73 73 65 6d 62 6c 79 20 74 6f 20 62 65 20 75 73  ssembly to be us
2c180 61 62 6c 65 20 61 73 20 61 20 70 72 6f 76 69 64  able as a provid
2c190 65 72 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 20  er in..         
2c1a0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2c1b0 74 68 65 20 6d 61 63 68 69 6e 65 20 63 6f 6e 66  the machine conf
2c1c0 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 2c 20  iguration file, 
2c1d0 69 74 20 6d 75 73 74 20 62 65 20 69 6e 20 74 68  it must be in th
2c1e0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
2c1f0 20 20 20 2f 2f 20 20 20 20 20 20 20 67 6c 6f 62     //       glob
2c200 61 6c 20 61 73 73 65 6d 62 6c 79 20 63 61 63 68  al assembly cach
2c210 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
2c220 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2c230 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49          return I
2c240 73 45 66 36 41 73 73 65 6d 62 6c 79 47 6c 6f 62  sEf6AssemblyGlob
2c250 61 6c 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  al();..         
2c260 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2c270 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2c280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c2a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c2b0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2c2c0 20 20 20 20 20 20 20 2f 2a 20 52 45 51 55 49 52         /* REQUIR
2c2d0 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ED */..         
2c2e0 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62     public Assemb
2c2f0 6c 79 4e 61 6d 65 20 47 65 74 43 6f 72 65 41 73  lyName GetCoreAs
2c300 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20  semblyName(..   
2c310 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
2c320 6c 20 74 72 61 63 65 20 2f 2a 20 4e 4f 54 20 55  l trace /* NOT U
2c330 53 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  SED */..        
2c340 20 20 20 20 20 20 20 20 29 20 2f 2a 20 74 68 72          ) /* thr
2c350 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
2c360 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2c370 20 20 20 20 20 20 69 66 20 28 63 6f 72 65 41 73        if (coreAs
2c380 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 3d 20 6e 75  semblyName == nu
2c390 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2c3a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2c3b0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65              core
2c3c0 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 41  AssemblyName = A
2c3d0 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47 65 74 41  ssemblyName.GetA
2c3e0 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20  ssemblyName(..  
2c3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c400 20 20 20 20 20 20 43 6f 72 65 46 69 6c 65 4e 61        CoreFileNa
2c410 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  me); /* throw */
2c420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c430 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2c440 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f         return co
2c450 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d  reAssemblyName;.
2c460 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2c470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4c0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2c4d0 20 2f 2a 20 4f 50 54 49 4f 4e 41 4c 20 2a 2f 0d   /* OPTIONAL */.
2c4e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
2c4f0 6c 69 63 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65  lic AssemblyName
2c500 20 47 65 74 4c 69 6e 71 41 73 73 65 6d 62 6c 79   GetLinqAssembly
2c510 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
2c520 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 72 61 63         bool trac
2c530 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
2c540 20 20 20 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f     ) /* throw */
2c550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2c560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c570 20 69 66 20 28 49 73 4c 69 6e 71 53 75 70 70 6f   if (IsLinqSuppo
2c580 72 74 65 64 28 74 72 61 63 65 29 20 26 26 20 28  rted(trace) && (
2c590 6c 69 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65  linqAssemblyName
2c5a0 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   == null))..    
2c5b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2c5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5d0 20 20 20 6c 69 6e 71 41 73 73 65 6d 62 6c 79 4e     linqAssemblyN
2c5e0 61 6d 65 20 3d 20 41 73 73 65 6d 62 6c 79 4e 61  ame = AssemblyNa
2c5f0 6d 65 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e 61  me.GetAssemblyNa
2c600 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
2c610 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 69 6e               Lin
2c620 71 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74  qFileName); /* t
2c630 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
2c640 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2c650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2c660 74 75 72 6e 20 6c 69 6e 71 41 73 73 65 6d 62 6c  turn linqAssembl
2c670 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
2c680 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2c690 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2c6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c6d0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2c6e0 20 20 20 20 20 20 20 20 2f 2a 20 4f 50 54 49 4f          /* OPTIO
2c6f0 4e 41 4c 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  NAL */..        
2c700 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d      public Assem
2c710 62 6c 79 4e 61 6d 65 20 47 65 74 45 66 36 41 73  blyName GetEf6As
2c720 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20  semblyName(..   
2c730 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
2c740 6c 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20  l trace..       
2c750 20 20 20 20 20 20 20 20 20 29 20 2f 2a 20 74 68           ) /* th
2c760 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
2c770 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2c780 20 20 20 20 20 20 20 69 66 20 28 49 73 45 66 36         if (IsEf6
2c790 53 75 70 70 6f 72 74 65 64 28 74 72 61 63 65 29  Supported(trace)
2c7a0 20 26 26 20 28 65 66 36 41 73 73 65 6d 62 6c 79   && (ef6Assembly
2c7b0 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  Name == null))..
2c7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c7d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2c7e0 20 20 20 20 20 20 20 65 66 36 41 73 73 65 6d 62         ef6Assemb
2c7f0 6c 79 4e 61 6d 65 20 3d 20 41 73 73 65 6d 62 6c  lyName = Assembl
2c800 79 4e 61 6d 65 2e 47 65 74 41 73 73 65 6d 62 6c  yName.GetAssembl
2c810 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
2c820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c830 45 66 36 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a  Ef6FileName); /*
2c840 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
2c850 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2c860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c870 72 65 74 75 72 6e 20 65 66 36 41 73 73 65 6d 62  return ef6Assemb
2c880 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  lyName;..       
2c890 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2c8a0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2c8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2c8f0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 45 51 55           /* REQU
2c900 49 52 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20  IRED */..       
2c910 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65       public Asse
2c920 6d 62 6c 79 4e 61 6d 65 20 47 65 74 44 65 73 69  mblyName GetDesi
2c930 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65  gnerAssemblyName
2c940 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2c950 20 20 20 62 6f 6f 6c 20 74 72 61 63 65 20 2f 2a     bool trace /*
2c960 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0d 0a 20 20   NOT USED */..  
2c970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 20                ) 
2c980 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
2c990 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2c9a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2c9b0 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79  designerAssembly
2c9c0 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  Name == null).. 
2c9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2c9e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c9f0 20 20 20 20 20 20 64 65 73 69 67 6e 65 72 41 73        designerAs
2ca00 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 41 73 73  semblyName = Ass
2ca10 65 6d 62 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73  emblyName.GetAss
2ca20 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20  emblyName(..    
2ca30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca40 20 20 20 20 44 65 73 69 67 6e 65 72 46 69 6c 65      DesignerFile
2ca50 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20  Name); /* throw 
2ca60 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
2ca70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2ca80 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2ca90 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79  designerAssembly
2caa0 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
2cab0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2cac0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2cad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2caf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cb00 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2cb10 20 20 20 20 20 20 20 2f 2a 20 52 45 51 55 49 52         /* REQUIR
2cb20 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ED */..         
2cb30 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62     public Assemb
2cb40 6c 79 4e 61 6d 65 20 47 65 74 50 72 6f 76 69 64  lyName GetProvid
2cb50 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d  erAssemblyName(.
2cb60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cb70 20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a 20 20 20   bool trace..   
2cb80 20 20 20 20 20 20 20 20 20 20 20 20 20 29 20 2f               ) /
2cb90 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
2cba0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2cbb0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2cbc0 6e 20 55 73 65 45 66 36 50 72 6f 76 69 64 65 72  n UseEf6Provider
2cbd0 28 74 72 61 63 65 29 20 3f 0d 0a 20 20 20 20 20  (trace) ?..     
2cbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
2cbf0 65 74 45 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d  etEf6AssemblyNam
2cc00 65 28 74 72 61 63 65 29 20 3a 20 47 65 74 43 6f  e(trace) : GetCo
2cc10 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 74  reAssemblyName(t
2cc20 72 61 63 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  race);..        
2cc30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2cc40 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2cc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc80 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2cc90 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
2cca0 74 72 69 6e 67 20 47 65 74 43 6f 6e 66 69 67 49  tring GetConfigI
2ccb0 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28 0d 0a 20  nvariantName(.. 
2ccc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
2ccd0 6f 6f 6c 20 74 72 61 63 65 0d 0a 20 20 20 20 20  ool trace..     
2cce0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2ccf0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2cd00 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2cd10 75 72 6e 20 47 65 74 49 6e 76 61 72 69 61 6e 74  urn GetInvariant
2cd20 4e 61 6d 65 28 74 72 61 63 65 29 3b 0d 0a 20 20  Name(trace);..  
2cd30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2cd40 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2cd50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2cd90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
2cda0 62 6c 69 63 20 73 74 72 69 6e 67 20 47 65 74 50  blic string GetP
2cdb0 72 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74  roviderInvariant
2cdc0 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
2cdd0 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 72 61 63         bool trac
2cde0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
2cdf0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
2ce00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2ce10 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 49       return GetI
2ce20 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28 74 72 61  nvariantName(tra
2ce30 63 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ce);..          
2ce40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2ce50 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2ce60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ce70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ce80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ce90 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2cea0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
2ceb0 69 6e 67 20 47 65 74 46 61 63 74 6f 72 79 54 79  ing GetFactoryTy
2cec0 70 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  peName(..       
2ced0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 72           bool tr
2cee0 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ace..           
2cef0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2cf00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2cf10 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 73         return Us
2cf20 65 45 66 36 50 72 6f 76 69 64 65 72 28 74 72 61  eEf6Provider(tra
2cf30 63 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  ce) ?..         
2cf40 20 20 20 20 20 20 20 20 20 20 20 45 66 36 46 61             Ef6Fa
2cf50 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 20 3a 20  ctoryTypeName : 
2cf60 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 3b  FactoryTypeName;
2cf70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2cf80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2cf90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cfa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cfb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cfc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cfd0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2cfe0 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 75    public void Du
2cff0 6d 70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mp(..           
2d000 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61       TraceCallba
2d010 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  ck traceCallback
2d020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d030 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
2d040 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2d050 20 20 20 20 69 66 20 28 74 72 61 63 65 43 61 6c      if (traceCal
2d060 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 0d 0a  lback != null)..
2d070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d080 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2d090 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
2d0a0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
2d0b0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
2d0c0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
2d0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0e0 22 41 73 73 65 6d 62 6c 79 22 2c 20 46 6f 72 44  "Assembly", ForD
2d0f0 69 73 70 6c 61 79 28 61 73 73 65 6d 62 6c 79 29  isplay(assembly)
2d100 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2d110 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
2d120 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
2d130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d140 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
2d150 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
2d160 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
2d170 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
2d180 20 20 20 20 20 20 20 20 20 20 20 20 22 4c 6f 67              "Log
2d190 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69  FileName", ForDi
2d1a0 73 70 6c 61 79 28 6c 6f 67 46 69 6c 65 4e 61 6d  splay(logFileNam
2d1b0 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
2d1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
2d1d0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
2d1e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d1f0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
2d200 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
2d210 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
2d220 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
2d230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 52                "R
2d240 65 67 69 73 74 72 79 4c 6f 67 46 69 6c 65 4e 61  egistryLogFileNa
2d250 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  me",..          
2d260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
2d270 72 44 69 73 70 6c 61 79 28 72 65 67 69 73 74 72  rDisplay(registr
2d280 79 4c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 2c 0d  yLogFileName)),.
2d290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d2a0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
2d2b0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
2d2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2d0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
2d2e0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
2d2f0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
2d300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d310 20 20 20 20 20 20 20 20 20 22 44 69 72 65 63 74           "Direct
2d320 6f 72 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ory", ForDisplay
2d330 28 64 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20  (directory)),.. 
2d340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d350 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
2d360 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
2d370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
2d380 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
2d390 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
2d3a0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
2d3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d3c0 20 20 20 20 20 20 20 22 43 6f 72 65 46 69 6c 65         "CoreFile
2d3d0 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  Name", ForDispla
2d3e0 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29  y(coreFileName))
2d3f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2d400 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2d410 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2d420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d430 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
2d440 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
2d450 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
2d460 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2d470 20 20 20 20 20 20 20 20 20 20 20 22 4c 69 6e 71             "Linq
2d480 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69  FileName", ForDi
2d490 73 70 6c 61 79 28 6c 69 6e 71 46 69 6c 65 4e 61  splay(linqFileNa
2d4a0 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me)),..         
2d4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2d4c0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2d4d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d4e0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
2d4f0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
2d500 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
2d510 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
2d520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2d530 45 66 36 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f  Ef6FileName", Fo
2d540 72 44 69 73 70 6c 61 79 28 65 66 36 46 69 6c 65  rDisplay(ef6File
2d550 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
2d560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d570 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
2d580 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d590 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
2d5a0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
2d5b0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
2d5c0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
2d5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d5e0 20 22 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61   "DesignerFileNa
2d5f0 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
2d600 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
2d610 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
2d620 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
2d630 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
2d640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d650 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
2d660 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
2d670 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
2d680 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
2d690 20 20 20 20 20 20 20 20 20 20 20 20 20 22 52 65               "Re
2d6a0 67 69 73 74 72 79 56 65 72 73 69 6f 6e 22 2c 20  gistryVersion", 
2d6b0 46 6f 72 44 69 73 70 6c 61 79 28 72 65 67 69 73  ForDisplay(regis
2d6c0 74 72 79 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20  tryVersion)),.. 
2d6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d6e0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
2d6f0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
2d700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
2d710 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
2d720 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
2d730 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
2d740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d750 20 20 20 20 20 20 20 22 43 6f 6e 66 69 67 56 65         "ConfigVe
2d760 72 73 69 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c  rsion", ForDispl
2d770 61 79 28 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e  ay(configVersion
2d780 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
2d790 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
2d7a0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
2d7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d7c0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
2d7d0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
2d7e0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
2d7f0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
2d800 20 20 20 20 20 20 20 20 20 20 20 20 20 22 56 73               "Vs
2d810 56 65 72 73 69 6f 6e 53 75 66 66 69 78 22 2c 20  VersionSuffix", 
2d820 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65 72  ForDisplay(vsVer
2d830 73 69 6f 6e 53 75 66 66 69 78 29 29 2c 0d 0a 20  sionSuffix)),.. 
2d840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d850 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
2d860 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
2d870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
2d880 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
2d890 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
2d8a0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
2d8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8c0 20 20 20 20 20 20 20 22 44 65 62 75 67 46 6f 72         "DebugFor
2d8d0 6d 61 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  mat", ForDisplay
2d8e0 28 64 65 62 75 67 46 6f 72 6d 61 74 29 29 2c 0d  (debugFormat)),.
2d8f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d900 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
2d910 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
2d920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d930 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
2d940 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
2d950 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
2d960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d970 20 20 20 20 20 20 20 20 20 22 54 72 61 63 65 46           "TraceF
2d980 6f 72 6d 61 74 22 2c 20 46 6f 72 44 69 73 70 6c  ormat", ForDispl
2d990 61 79 28 74 72 61 63 65 46 6f 72 6d 61 74 29 29  ay(traceFormat))
2d9a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2d9b0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2d9c0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2d9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d9e0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
2d9f0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
2da00 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
2da10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2da20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 73 74             "Inst
2da30 61 6c 6c 46 6c 61 67 73 22 2c 20 46 6f 72 44 69  allFlags", ForDi
2da40 73 70 6c 61 79 28 69 6e 73 74 61 6c 6c 46 6c 61  splay(installFla
2da50 67 73 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  gs)),..         
2da60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2da70 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2da80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2da90 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
2daa0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
2dab0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
2dac0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
2dad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2dae0 50 72 6f 76 69 64 65 72 46 6c 61 67 73 22 2c 20  ProviderFlags", 
2daf0 46 6f 72 44 69 73 70 6c 61 79 28 70 72 6f 76 69  ForDisplay(provi
2db00 64 65 72 46 6c 61 67 73 29 29 2c 0d 0a 20 20 20  derFlags)),..   
2db10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
2db30 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
2db40 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
2db50 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
2db60 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
2db70 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
2db80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db90 20 20 20 20 20 22 44 65 62 75 67 50 72 69 6f 72       "DebugPrior
2dba0 69 74 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ity", ForDisplay
2dbb0 28 64 65 62 75 67 50 72 69 6f 72 69 74 79 29 29  (debugPriority))
2dbc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2dbd0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2dbe0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2dbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc00 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
2dc10 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
2dc20 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
2dc30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2dc40 20 20 20 20 20 20 20 20 20 20 20 22 54 72 61 63             "Trac
2dc50 65 50 72 69 6f 72 69 74 79 22 2c 20 46 6f 72 44  ePriority", ForD
2dc60 69 73 70 6c 61 79 28 74 72 61 63 65 50 72 69 6f  isplay(tracePrio
2dc70 72 69 74 79 29 29 2c 0d 0a 20 20 20 20 20 20 20  rity)),..       
2dc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc90 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
2dca0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2dcb0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
2dcc0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
2dcd0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
2dce0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
2dcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd00 20 22 50 65 72 55 73 65 72 22 2c 20 46 6f 72 44   "PerUser", ForD
2dd10 69 73 70 6c 61 79 28 70 65 72 55 73 65 72 29 29  isplay(perUser))
2dd20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2dd30 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2dd40 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2dd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd60 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
2dd70 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
2dd80 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
2dd90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2dda0 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 73 74             "Inst
2ddb0 61 6c 6c 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  all", ForDisplay
2ddc0 28 69 6e 73 74 61 6c 6c 29 29 2c 0d 0a 20 20 20  (install)),..   
2ddd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dde0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
2ddf0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
2de00 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
2de10 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
2de20 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
2de30 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
2de40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de50 20 20 20 20 20 22 57 6f 77 36 34 22 2c 20 46 6f       "Wow64", Fo
2de60 72 44 69 73 70 6c 61 79 28 77 6f 77 36 34 29 29  rDisplay(wow64))
2de70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2de80 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2de90 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2dea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2deb0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
2dec0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
2ded0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
2dee0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2def0 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 52 75             "NoRu
2df00 6e 74 69 6d 65 56 65 72 73 69 6f 6e 22 2c 20 46  ntimeVersion", F
2df10 6f 72 44 69 73 70 6c 61 79 28 6e 6f 52 75 6e 74  orDisplay(noRunt
2df20 69 6d 65 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20  imeVersion)),.. 
2df30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df40 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
2df50 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
2df60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
2df70 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
2df80 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
2df90 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
2dfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dfb0 20 20 20 20 20 20 20 22 4e 6f 44 65 73 6b 74 6f         "NoDeskto
2dfc0 70 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  p", ForDisplay(n
2dfd0 6f 44 65 73 6b 74 6f 70 29 29 2c 0d 0a 20 20 20  oDesktop)),..   
2dfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dff0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
2e000 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
2e010 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
2e020 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
2e030 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
2e040 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
2e050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e060 20 20 20 20 20 22 4e 6f 43 6f 6d 70 61 63 74 22       "NoCompact"
2e070 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43  , ForDisplay(noC
2e080 6f 6d 70 61 63 74 29 29 2c 0d 0a 20 20 20 20 20  ompact)),..     
2e090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e0a0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
2e0b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2e0c0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
2e0d0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
2e0e0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
2e0f0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
2e100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e110 20 20 20 22 4e 6f 4e 65 74 46 78 32 30 22 2c 20     "NoNetFx20", 
2e120 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74  ForDisplay(noNet
2e130 46 78 32 30 29 29 2c 0d 0a 20 20 20 20 20 20 20  Fx20)),..       
2e140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e150 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
2e160 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e170 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
2e180 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
2e190 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
2e1a0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
2e1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e1c0 20 22 4e 6f 4e 65 74 46 78 33 35 22 2c 20 46 6f   "NoNetFx35", Fo
2e1d0 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78  rDisplay(noNetFx
2e1e0 33 35 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  35)),..         
2e1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2e200 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2e210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e220 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
2e230 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
2e240 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
2e250 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
2e260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2e270 4e 6f 4e 65 74 46 78 34 30 22 2c 20 46 6f 72 44  NoNetFx40", ForD
2e280 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 30  isplay(noNetFx40
2e290 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
2e2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
2e2b0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
2e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e2d0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
2e2e0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
2e2f0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
2e300 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
2e310 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
2e320 4e 65 74 46 78 34 35 22 2c 20 46 6f 72 44 69 73  NetFx45", ForDis
2e330 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 35 29 29  play(noNetFx45))
2e340 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e350 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2e360 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2e370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e380 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
2e390 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
2e3a0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
2e3b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e3c0 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65             "NoNe
2e3d0 74 46 78 34 35 31 22 2c 20 46 6f 72 44 69 73 70  tFx451", ForDisp
2e3e0 6c 61 79 28 6e 6f 4e 65 74 46 78 34 35 31 29 29  lay(noNetFx451))
2e3f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e400 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2e410 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2e420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e430 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
2e440 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
2e450 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
2e460 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e470 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65             "NoNe
2e480 74 46 78 34 35 32 22 2c 20 46 6f 72 44 69 73 70  tFx452", ForDisp
2e490 6c 61 79 28 6e 6f 4e 65 74 46 78 34 35 32 29 29  lay(noNetFx452))
2e4a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e4b0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2e4c0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2e4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e4e0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
2e4f0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
2e500 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
2e510 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e520 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65             "NoNe
2e530 74 46 78 34 36 22 2c 20 46 6f 72 44 69 73 70 6c  tFx46", ForDispl
2e540 61 79 28 6e 6f 4e 65 74 46 78 34 36 29 29 2c 0d  ay(noNetFx46)),.
2e550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e560 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
2e570 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
2e580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e590 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
2e5a0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
2e5b0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
2e5c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e5d0 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46           "NoNetF
2e5e0 78 34 36 31 22 2c 20 46 6f 72 44 69 73 70 6c 61  x461", ForDispla
2e5f0 79 28 6e 6f 4e 65 74 46 78 34 36 31 29 29 2c 0d  y(noNetFx461)),.
2e600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e610 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
2e620 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
2e630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e640 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
2e650 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
2e660 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
2e670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e680 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46           "NoNetF
2e690 78 34 36 32 22 2c 20 46 6f 72 44 69 73 70 6c 61  x462", ForDispla
2e6a0 79 28 6e 6f 4e 65 74 46 78 34 36 32 29 29 2c 0d  y(noNetFx462)),.
2e6b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e6c0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
2e6d0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
2e6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e6f0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
2e700 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
2e710 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
2e720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e730 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46           "NoNetF
2e740 78 34 37 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  x47", ForDisplay
2e750 28 6e 6f 4e 65 74 46 78 34 37 29 29 2c 0d 0a 20  (noNetFx47)),.. 
2e760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e770 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
2e780 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
2e790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
2e7a0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
2e7b0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
2e7c0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
2e7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e7e0 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 34         "NoNetFx4
2e7f0 37 31 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  71", ForDisplay(
2e800 6e 6f 4e 65 74 46 78 34 37 31 29 29 2c 0d 0a 20  noNetFx471)),.. 
2e810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e820 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
2e830 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
2e840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
2e850 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
2e860 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
2e870 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
2e880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e890 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30 30 35         "NoVs2005
2e8a0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
2e8b0 56 73 32 30 30 35 29 29 2c 0d 0a 20 20 20 20 20  Vs2005)),..     
2e8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e8d0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
2e8e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2e8f0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
2e900 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
2e910 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
2e920 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
2e930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e940 20 20 20 22 4e 6f 56 73 32 30 30 38 22 2c 20 46     "NoVs2008", F
2e950 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30  orDisplay(noVs20
2e960 30 38 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  08)),..         
2e970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2e980 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2e990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e9a0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
2e9b0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
2e9c0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
2e9d0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
2e9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2e9f0 4e 6f 56 73 32 30 31 30 22 2c 20 46 6f 72 44 69  NoVs2010", ForDi
2ea00 73 70 6c 61 79 28 6e 6f 56 73 32 30 31 30 29 29  splay(noVs2010))
2ea10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2ea20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2ea30 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2ea40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea50 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
2ea60 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
2ea70 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
2ea80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2ea90 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73             "NoVs
2eaa0 32 30 31 32 22 2c 20 46 6f 72 44 69 73 70 6c 61  2012", ForDispla
2eab0 79 28 6e 6f 56 73 32 30 31 32 29 29 2c 0d 0a 20  y(noVs2012)),.. 
2eac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ead0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
2eae0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
2eaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
2eb00 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
2eb10 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
2eb20 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
2eb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb40 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30 31 33         "NoVs2013
2eb50 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
2eb60 56 73 32 30 31 33 29 29 2c 0d 0a 20 20 20 20 20  Vs2013)),..     
2eb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb80 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
2eb90 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2eba0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
2ebb0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
2ebc0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
2ebd0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
2ebe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ebf0 20 20 20 22 4e 6f 56 73 32 30 31 35 22 2c 20 46     "NoVs2015", F
2ec00 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30  orDisplay(noVs20
2ec10 31 35 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  15)),..         
2ec20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2ec30 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2ec40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ec50 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
2ec60 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
2ec70 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
2ec80 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
2ec90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2eca0 4e 6f 56 73 32 30 31 37 22 2c 20 46 6f 72 44 69  NoVs2017", ForDi
2ecb0 73 70 6c 61 79 28 6e 6f 56 73 32 30 31 37 29 29  splay(noVs2017))
2ecc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2ecd0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2ece0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2ecf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed00 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
2ed10 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
2ed20 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
2ed30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2ed40 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 54 72             "NoTr
2ed50 61 63 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ace", ForDisplay
2ed60 28 6e 6f 54 72 61 63 65 29 29 2c 0d 0a 20 20 20  (noTrace)),..   
2ed70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed80 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
2ed90 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
2eda0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
2edb0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
2edc0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
2edd0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
2ede0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2edf0 20 20 20 20 20 22 4e 6f 43 6f 6e 73 6f 6c 65 22       "NoConsole"
2ee00 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43  , ForDisplay(noC
2ee10 6f 6e 73 6f 6c 65 29 29 2c 0d 0a 20 20 20 20 20  onsole)),..     
2ee20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee30 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
2ee40 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2ee50 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
2ee60 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
2ee70 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
2ee80 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
2ee90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eea0 20 20 20 22 4e 6f 4c 6f 67 22 2c 20 46 6f 72 44     "NoLog", ForD
2eeb0 69 73 70 6c 61 79 28 6e 6f 4c 6f 67 29 29 2c 0d  isplay(noLog)),.
2eec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2eed0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
2eee0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
2eef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef00 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
2ef10 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
2ef20 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
2ef30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ef40 20 20 20 20 20 20 20 20 20 22 54 68 72 6f 77 4f           "ThrowO
2ef50 6e 4d 69 73 73 69 6e 67 22 2c 20 46 6f 72 44 69  nMissing", ForDi
2ef60 73 70 6c 61 79 28 74 68 72 6f 77 4f 6e 4d 69 73  splay(throwOnMis
2ef70 73 69 6e 67 29 29 2c 0d 0a 20 20 20 20 20 20 20  sing)),..       
2ef80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef90 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
2efa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2efb0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
2efc0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
2efd0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
2efe0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
2eff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f000 20 22 57 68 61 74 49 66 22 2c 20 46 6f 72 44 69   "WhatIf", ForDi
2f010 73 70 6c 61 79 28 77 68 61 74 49 66 29 29 2c 0d  splay(whatIf)),.
2f020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f030 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
2f040 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
2f050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f060 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
2f070 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
2f080 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
2f090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f0a0 20 20 20 20 20 20 20 20 20 22 44 65 62 75 67 22           "Debug"
2f0b0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62  , ForDisplay(deb
2f0c0 75 67 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ug)),..         
2f0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2f0e0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2f0f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f100 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
2f110 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
2f120 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
2f130 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
2f140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2f150 56 65 72 62 6f 73 65 22 2c 20 46 6f 72 44 69 73  Verbose", ForDis
2f160 70 6c 61 79 28 76 65 72 62 6f 73 65 29 29 2c 0d  play(verbose)),.
2f170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f180 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
2f190 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
2f1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f1b0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
2f1c0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
2f1d0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
2f1e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f1f0 20 20 20 20 20 20 20 20 20 22 43 6f 6e 66 69 72           "Confir
2f200 6d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63  m", ForDisplay(c
2f210 6f 6e 66 69 72 6d 29 29 2c 0d 0a 20 20 20 20 20  onfirm)),..     
2f220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f230 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
2f240 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2f250 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2f260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f290 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2f2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2f2b0 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c  (assembly != nul
2f2c0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2f2d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2f2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f2f0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
2f300 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
2f310 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
2f320 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
2f330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f340 22 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 22 2c  "AssemblyTitle",
2f350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
2f370 72 44 69 73 70 6c 61 79 28 47 65 74 41 73 73 65  rDisplay(GetAsse
2f380 6d 62 6c 79 54 69 74 6c 65 28 61 73 73 65 6d 62  mblyTitle(assemb
2f390 6c 79 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ly))),..        
2f3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f3b0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
2f3c0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2f3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2f3e0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
2f3f0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
2f400 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
2f410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f420 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73              "Ass
2f430 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69  emblyConfigurati
2f440 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on",..          
2f450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f460 20 20 46 6f 72 44 69 73 70 6c 61 79 28 47 65 74    ForDisplay(Get
2f470 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72  AssemblyConfigur
2f480 61 74 69 6f 6e 28 61 73 73 65 6d 62 6c 79 29 29  ation(assembly))
2f490 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2f4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4b0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
2f4c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f4d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2f4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2f4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f520 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f540 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
2f550 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
2f560 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
2f570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f580 20 20 20 20 20 20 20 20 20 20 22 49 73 53 79 73            "IsSys
2f590 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 41 76  temEf6AssemblyAv
2f5a0 61 69 6c 61 62 6c 65 22 2c 20 46 6f 72 44 69 73  ailable", ForDis
2f5b0 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20  play(..         
2f5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2f5d0 73 53 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62  sSystemEf6Assemb
2f5e0 6c 79 41 76 61 69 6c 61 62 6c 65 28 66 61 6c 73  lyAvailable(fals
2f5f0 65 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  e))),..         
2f600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2f610 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2f620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f630 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
2f640 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
2f650 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
2f660 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
2f670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2f680 49 73 53 79 73 74 65 6d 45 66 36 41 73 73 65 6d  IsSystemEf6Assem
2f690 62 6c 79 47 6c 6f 62 61 6c 22 2c 20 46 6f 72 44  blyGlobal", ForD
2f6a0 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20  isplay(..       
2f6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f6c0 20 49 73 53 79 73 74 65 6d 45 66 36 41 73 73 65   IsSystemEf6Asse
2f6d0 6d 62 6c 79 47 6c 6f 62 61 6c 28 29 29 29 2c 0d  mblyGlobal())),.
2f6e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f6f0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
2f700 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
2f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2f760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f770 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
2f780 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
2f790 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
2f7a0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
2f7b0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 73 4c              "IsL
2f7c0 69 6e 71 53 75 70 70 6f 72 74 65 64 22 2c 20 46  inqSupported", F
2f7d0 6f 72 44 69 73 70 6c 61 79 28 49 73 4c 69 6e 71  orDisplay(IsLinq
2f7e0 53 75 70 70 6f 72 74 65 64 28 66 61 6c 73 65 29  Supported(false)
2f7f0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
2f800 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
2f810 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
2f820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f830 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
2f840 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
2f850 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
2f860 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
2f870 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 73               "Is
2f880 45 66 36 53 75 70 70 6f 72 74 65 64 22 2c 20 46  Ef6Supported", F
2f890 6f 72 44 69 73 70 6c 61 79 28 49 73 45 66 36 53  orDisplay(IsEf6S
2f8a0 75 70 70 6f 72 74 65 64 28 66 61 6c 73 65 29 29  upported(false))
2f8b0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2f8c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
2f8d0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
2f8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8f0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
2f900 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
2f910 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
2f920 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
2f930 20 20 20 20 20 20 20 20 20 20 20 20 22 49 73 45              "IsE
2f940 66 36 41 73 73 65 6d 62 6c 79 47 6c 6f 62 61 6c  f6AssemblyGlobal
2f950 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a  ", ForDisplay(..
2f960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f970 20 20 20 20 20 20 20 20 49 73 45 66 36 41 73 73          IsEf6Ass
2f980 65 6d 62 6c 79 47 6c 6f 62 61 6c 28 29 29 29 2c  emblyGlobal())),
2f990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f9a0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
2f9b0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
2f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f9d0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
2f9e0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
2f9f0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
2fa00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fa10 20 20 20 20 20 20 20 20 20 20 22 55 73 65 45 66            "UseEf
2fa20 36 50 72 6f 76 69 64 65 72 22 2c 20 46 6f 72 44  6Provider", ForD
2fa30 69 73 70 6c 61 79 28 55 73 65 45 66 36 50 72 6f  isplay(UseEf6Pro
2fa40 76 69 64 65 72 28 66 61 6c 73 65 29 29 29 2c 0d  vider(false))),.
2fa50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fa60 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
2fa70 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
2fa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2faa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2fad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fae0 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
2faf0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2fb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb10 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
2fb20 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
2fb30 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
2fb40 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
2fb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb60 20 20 20 20 22 47 65 74 43 6f 72 65 41 73 73 65      "GetCoreAsse
2fb70 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69  mblyName", ForDi
2fb80 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20  splay(..        
2fb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fba0 20 20 20 20 47 65 74 43 6f 72 65 41 73 73 65 6d      GetCoreAssem
2fbb0 62 6c 79 4e 61 6d 65 28 66 61 6c 73 65 29 29 29  blyName(false)))
2fbc0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
2fbd0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2fbe0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2fbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
2fc00 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
2fc10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2fc20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2fc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc40 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
2fc50 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
2fc60 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
2fc70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2fc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2fc90 47 65 74 43 6f 72 65 41 73 73 65 6d 62 6c 79 4e  GetCoreAssemblyN
2fca0 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame", ForDisplay
2fcb0 28 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  (e)),..         
2fcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fcd0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
2fce0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2fcf0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2fd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd10 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2fd20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2fd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd60 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
2fd70 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2fd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd90 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
2fda0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
2fdb0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
2fdc0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
2fdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fde0 20 20 20 20 20 22 47 65 74 4c 69 6e 71 41 73 73       "GetLinqAss
2fdf0 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44  emblyName", ForD
2fe00 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20  isplay(..       
2fe10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe20 20 20 20 20 20 47 65 74 4c 69 6e 71 41 73 73 65       GetLinqAsse
2fe30 6d 62 6c 79 4e 61 6d 65 28 66 61 6c 73 65 29 29  mblyName(false))
2fe40 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
2fe50 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2fe60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2fe70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2fe80 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
2fe90 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
2fea0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2feb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fec0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
2fed0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
2fee0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
2fef0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
2ff00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff10 22 47 65 74 4c 69 6e 71 41 73 73 65 6d 62 6c 79  "GetLinqAssembly
2ff20 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  Name", ForDispla
2ff30 79 28 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  y(e)),..        
2ff40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff50 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
2ff60 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
2ff70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2ff80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff90 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2ffa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ffb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ffc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2ffd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ffe0 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
2fff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
30000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30010 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
30020 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
30030 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
30040 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
30050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30060 20 20 20 20 20 20 22 47 65 74 45 66 36 41 73 73        "GetEf6Ass
30070 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44  emblyName", ForD
30080 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20  isplay(..       
30090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
300a0 20 20 20 20 20 47 65 74 45 66 36 41 73 73 65 6d       GetEf6Assem
300b0 62 6c 79 4e 61 6d 65 28 66 61 6c 73 65 29 29 29  blyName(false)))
300c0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
300d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
300e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
300f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
30100 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
30110 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
30120 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
30130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30140 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
30150 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
30160 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
30170 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
30180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
30190 47 65 74 45 66 36 41 73 73 65 6d 62 6c 79 4e 61  GetEf6AssemblyNa
301a0 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
301b0 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
301c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301d0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
301e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
301f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
30250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30260 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
30270 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
30280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30290 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
302a0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
302b0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
302c0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
302d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
302e0 20 20 20 20 22 47 65 74 44 65 73 69 67 6e 65 72      "GetDesigner
302f0 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46  AssemblyName", F
30300 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20  orDisplay(..    
30310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30320 20 20 20 20 20 20 20 20 47 65 74 44 65 73 69 67          GetDesig
30330 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28  nerAssemblyName(
30340 66 61 6c 73 65 29 29 29 2c 20 74 72 61 63 65 43  false))), traceC
30350 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
30360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
30370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30380 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
30390 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20  eption e)..     
303a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
303b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
303c0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
303d0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
303e0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
303f0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
30400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30410 20 20 20 20 20 20 20 22 47 65 74 44 65 73 69 67         "GetDesig
30420 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22  nerAssemblyName"
30430 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 65 29 29  , ForDisplay(e))
30440 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
30450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
30460 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
30470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30480 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
30490 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
304a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
304b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
304c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
304d0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
304e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
304f0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
30500 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
30510 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
30520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30530 20 20 20 20 20 20 20 20 20 22 47 65 74 49 6e 76           "GetInv
30540 61 72 69 61 6e 74 4e 61 6d 65 22 2c 20 46 6f 72  ariantName", For
30550 44 69 73 70 6c 61 79 28 47 65 74 49 6e 76 61 72  Display(GetInvar
30560 69 61 6e 74 4e 61 6d 65 28 0d 0a 20 20 20 20 20  iantName(..     
30570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30580 20 20 20 66 61 6c 73 65 29 29 29 2c 20 74 72 61     false))), tra
30590 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
305a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
305b0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
305c0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
305d0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
305e0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
305f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65               "Ge
30600 74 43 6f 6e 66 69 67 49 6e 76 61 72 69 61 6e 74  tConfigInvariant
30610 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  Name", ForDispla
30620 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
30630 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 43              GetC
30640 6f 6e 66 69 67 49 6e 76 61 72 69 61 6e 74 4e 61  onfigInvariantNa
30650 6d 65 28 66 61 6c 73 65 29 29 29 2c 20 74 72 61  me(false))), tra
30660 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
30670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30680 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
30690 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
306a0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
306b0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
306c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65               "Ge
306d0 74 50 72 6f 76 69 64 65 72 49 6e 76 61 72 69 61  tProviderInvaria
306e0 6e 74 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70  ntName", ForDisp
306f0 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lay(..          
30700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65                Ge
30710 74 50 72 6f 76 69 64 65 72 49 6e 76 61 72 69 61  tProviderInvaria
30720 6e 74 4e 61 6d 65 28 66 61 6c 73 65 29 29 29 2c  ntName(false))),
30730 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
30740 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30750 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
30760 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
30770 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
30780 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
30790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
307a0 20 22 47 65 74 46 61 63 74 6f 72 79 54 79 70 65   "GetFactoryType
307b0 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  Name", ForDispla
307c0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
307d0 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 46              GetF
307e0 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 28 66  actoryTypeName(f
307f0 61 6c 73 65 29 29 29 2c 20 74 72 61 63 65 43 61  alse))), traceCa
30800 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
30810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
30860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30870 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
30880 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
30890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
308a0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
308b0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
308c0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
308d0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
308e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
308f0 20 20 20 20 22 47 65 74 50 72 6f 76 69 64 65 72      "GetProvider
30900 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46  AssemblyName", F
30910 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20  orDisplay(..    
30920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30930 20 20 20 20 20 20 20 20 47 65 74 50 72 6f 76 69          GetProvi
30940 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28  derAssemblyName(
30950 66 61 6c 73 65 29 29 29 2c 20 74 72 61 63 65 43  false))), traceC
30960 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
30970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
30980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30990 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
309a0 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20  eption e)..     
309b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
309c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
309d0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
309e0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
309f0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
30a00 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
30a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a20 20 20 20 20 20 20 20 22 47 65 74 50 72 6f 76 69         "GetProvi
30a30 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22  derAssemblyName"
30a40 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 65 29 29  , ForDisplay(e))
30a50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
30a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
30a70 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
30a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a90 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
30aa0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
30ab0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
30ac0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
30ad0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
30ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30b20 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
30b30 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
30b40 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20   Properties..   
30b50 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
30b60 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62   Assembly assemb
30b70 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly;..           
30b80 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79   public Assembly
30b90 20 41 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   Assembly..     
30ba0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
30bb0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
30bc0 72 65 74 75 72 6e 20 61 73 73 65 6d 62 6c 79 3b  return assembly;
30bd0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
30be0 20 20 20 20 73 65 74 20 7b 20 61 73 73 65 6d 62      set { assemb
30bf0 6c 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ly = value; }.. 
30c00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
30c10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
30c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
30c60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
30c70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 6c 6f  rivate string lo
30c80 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  gFileName;..    
30c90 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
30ca0 74 72 69 6e 67 20 4c 6f 67 46 69 6c 65 4e 61 6d  tring LogFileNam
30cb0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
30cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30cd0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6c    get { return l
30ce0 6f 67 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20  ogFileName; }.. 
30cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
30d00 65 74 20 7b 20 6c 6f 67 46 69 6c 65 4e 61 6d 65  et { logFileName
30d10 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
30d20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
30d30 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
30d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
30d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
30d90 76 61 74 65 20 73 74 72 69 6e 67 20 72 65 67 69  vate string regi
30da0 73 74 72 79 4c 6f 67 46 69 6c 65 4e 61 6d 65 3b  stryLogFileName;
30db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
30dc0 62 6c 69 63 20 73 74 72 69 6e 67 20 52 65 67 69  blic string Regi
30dd0 73 74 72 79 4c 6f 67 46 69 6c 65 4e 61 6d 65 0d  stryLogFileName.
30de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
30df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e00 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72 65 67  get { return reg
30e10 69 73 74 72 79 4c 6f 67 46 69 6c 65 4e 61 6d 65  istryLogFileName
30e20 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
30e30 20 20 20 20 20 73 65 74 20 7b 20 72 65 67 69 73       set { regis
30e40 74 72 79 4c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d  tryLogFileName =
30e50 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
30e60 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30e70 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
30e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
30ec0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
30ed0 74 65 20 73 74 72 69 6e 67 20 64 69 72 65 63 74  te string direct
30ee0 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ory;..          
30ef0 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
30f00 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20  Directory..     
30f10 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
30f20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
30f30 72 65 74 75 72 6e 20 64 69 72 65 63 74 6f 72 79  return directory
30f40 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
30f50 20 20 20 20 20 73 65 74 20 7b 20 64 69 72 65 63       set { direc
30f60 74 6f 72 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  tory = value; }.
30f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
30f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
30f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30fd0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
30fe0 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
30ff0 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20  coreFileName;.. 
31000 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
31010 63 20 73 74 72 69 6e 67 20 43 6f 72 65 46 69 6c  c string CoreFil
31020 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..         
31030 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
31040 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
31050 72 6e 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b  rn coreFileName;
31060 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
31070 20 20 20 20 73 65 74 20 7b 20 63 6f 72 65 46 69      set { coreFi
31080 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20  leName = value; 
31090 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
310a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
310b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
310c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
310d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
310e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
310f0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
31100 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
31110 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d  g linqFileName;.
31120 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
31130 6c 69 63 20 73 74 72 69 6e 67 20 4c 69 6e 71 46  lic string LinqF
31140 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..       
31150 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31160 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
31170 74 75 72 6e 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  turn linqFileNam
31180 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
31190 20 20 20 20 20 20 73 65 74 20 7b 20 6c 69 6e 71        set { linq
311a0 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65  FileName = value
311b0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
311c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
311d0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
311e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
311f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31210 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
31220 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
31230 69 6e 67 20 65 66 36 46 69 6c 65 4e 61 6d 65 3b  ing ef6FileName;
31240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
31250 62 6c 69 63 20 73 74 72 69 6e 67 20 45 66 36 46  blic string Ef6F
31260 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..       
31270 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31280 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
31290 74 75 72 6e 20 65 66 36 46 69 6c 65 4e 61 6d 65  turn ef6FileName
312a0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
312b0 20 20 20 20 20 73 65 74 20 7b 20 65 66 36 46 69       set { ef6Fi
312c0 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20  leName = value; 
312d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
312e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
312f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31330 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
31340 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
31350 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  g designerFileNa
31360 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
31370 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44   public string D
31380 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 0d  esignerFileName.
31390 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
313a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313b0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65 73  get { return des
313c0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 20 7d  ignerFileName; }
313d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
313e0 20 20 73 65 74 20 7b 20 64 65 73 69 67 6e 65 72    set { designer
313f0 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65  FileName = value
31400 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
31410 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
31420 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
31430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31460 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
31470 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
31480 69 6e 67 20 72 65 67 69 73 74 72 79 56 65 72 73  ing registryVers
31490 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ion;..          
314a0 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
314b0 52 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 0d  RegistryVersion.
314c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
314d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314e0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72 65 67  get { return reg
314f0 69 73 74 72 79 56 65 72 73 69 6f 6e 3b 20 7d 0d  istryVersion; }.
31500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31510 20 73 65 74 20 7b 20 72 65 67 69 73 74 72 79 56   set { registryV
31520 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20  ersion = value; 
31530 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
31540 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31590 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
315a0 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
315b0 67 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 3b  g configVersion;
315c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
315d0 62 6c 69 63 20 73 74 72 69 6e 67 20 43 6f 6e 66  blic string Conf
315e0 69 67 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20  igVersion..     
315f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31600 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
31610 72 65 74 75 72 6e 20 63 6f 6e 66 69 67 56 65 72  return configVer
31620 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 20  sion; }..       
31630 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 63           set { c
31640 6f 6e 66 69 67 56 65 72 73 69 6f 6e 20 3d 20 76  onfigVersion = v
31650 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
31660 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
31670 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
31680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
316a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
316b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
316c0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
316d0 20 73 74 72 69 6e 67 20 76 73 56 65 72 73 69 6f   string vsVersio
316e0 6e 53 75 66 66 69 78 3b 0d 0a 20 20 20 20 20 20  nSuffix;..      
316f0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
31700 69 6e 67 20 56 73 56 65 72 73 69 6f 6e 53 75 66  ing VsVersionSuf
31710 66 69 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20  fix..           
31720 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
31730 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
31740 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78   vsVersionSuffix
31750 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
31760 20 20 20 20 20 73 65 74 20 7b 20 76 73 56 65 72       set { vsVer
31770 73 69 6f 6e 53 75 66 66 69 78 20 3d 20 76 61 6c  sionSuffix = val
31780 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
31790 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
317a0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
317b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
317c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
317d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
317e0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
317f0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
31800 74 72 69 6e 67 20 64 65 62 75 67 46 6f 72 6d 61  tring debugForma
31810 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
31820 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44 65  public string De
31830 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20  bugFormat..     
31840 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31850 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
31860 72 65 74 75 72 6e 20 64 65 62 75 67 46 6f 72 6d  return debugForm
31870 61 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  at; }..         
31880 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 65 62         set { deb
31890 75 67 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65  ugFormat = value
318a0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
318b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
318c0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
318d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
318e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
318f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31900 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
31910 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
31920 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74 3b  ing traceFormat;
31930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
31940 62 6c 69 63 20 73 74 72 69 6e 67 20 54 72 61 63  blic string Trac
31950 65 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 20  eFormat..       
31960 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31970 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
31980 74 75 72 6e 20 74 72 61 63 65 46 6f 72 6d 61 74  turn traceFormat
31990 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
319a0 20 20 20 20 20 73 65 74 20 7b 20 74 72 61 63 65       set { trace
319b0 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20  Format = value; 
319c0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
319d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
319e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
319f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31a20 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
31a30 20 20 20 70 72 69 76 61 74 65 20 49 6e 73 74 61     private Insta
31a40 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61 6c 6c 46  llFlags installF
31a50 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20 20  lags;..         
31a60 20 20 20 70 75 62 6c 69 63 20 49 6e 73 74 61 6c     public Instal
31a70 6c 46 6c 61 67 73 20 49 6e 73 74 61 6c 6c 46 6c  lFlags InstallFl
31a80 61 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ags..           
31a90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
31aa0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
31ab0 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 20 7d   installFlags; }
31ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31ad0 20 20 73 65 74 20 7b 20 69 6e 73 74 61 6c 6c 46    set { installF
31ae0 6c 61 67 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  lags = value; }.
31af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
31b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
31b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b50 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
31b60 20 70 72 69 76 61 74 65 20 50 72 6f 76 69 64 65   private Provide
31b70 72 46 6c 61 67 73 20 70 72 6f 76 69 64 65 72 46  rFlags providerF
31b80 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20 20  lags;..         
31b90 20 20 20 70 75 62 6c 69 63 20 50 72 6f 76 69 64     public Provid
31ba0 65 72 46 6c 61 67 73 20 50 72 6f 76 69 64 65 72  erFlags Provider
31bb0 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 20  Flags..         
31bc0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
31bd0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
31be0 72 6e 20 70 72 6f 76 69 64 65 72 46 6c 61 67 73  rn providerFlags
31bf0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
31c00 20 20 20 20 20 73 65 74 20 7b 20 70 72 6f 76 69       set { provi
31c10 64 65 72 46 6c 61 67 73 20 3d 20 76 61 6c 75 65  derFlags = value
31c20 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
31c30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
31c40 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
31c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c80 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
31c90 20 20 20 20 20 70 72 69 76 61 74 65 20 54 72 61       private Tra
31ca0 63 65 50 72 69 6f 72 69 74 79 20 64 65 62 75 67  cePriority debug
31cb0 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20  Priority;..     
31cc0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 54 72         public Tr
31cd0 61 63 65 50 72 69 6f 72 69 74 79 20 44 65 62 75  acePriority Debu
31ce0 67 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20  gPriority..     
31cf0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31d00 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
31d10 72 65 74 75 72 6e 20 64 65 62 75 67 50 72 69 6f  return debugPrio
31d20 72 69 74 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20  rity; }..       
31d30 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64           set { d
31d40 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 76  ebugPriority = v
31d50 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
31d60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
31d70 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
31d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
31dc0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
31dd0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
31de0 72 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20  racePriority;.. 
31df0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
31e00 63 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20  c TracePriority 
31e10 54 72 61 63 65 50 72 69 6f 72 69 74 79 0d 0a 20  TracePriority.. 
31e20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
31e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
31e40 74 20 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65  t { return trace
31e50 50 72 69 6f 72 69 74 79 3b 20 7d 0d 0a 20 20 20  Priority; }..   
31e60 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
31e70 20 7b 20 74 72 61 63 65 50 72 69 6f 72 69 74 79   { tracePriority
31e80 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
31e90 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
31ea0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
31eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
31ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
31f00 76 61 74 65 20 62 6f 6f 6c 20 70 65 72 55 73 65  vate bool perUse
31f10 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r;..            
31f20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 50 65 72 55  public bool PerU
31f30 73 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ser..           
31f40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
31f50 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
31f60 20 70 65 72 55 73 65 72 3b 20 7d 0d 0a 20 20 20   perUser; }..   
31f70 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
31f80 20 7b 20 70 65 72 55 73 65 72 20 3d 20 76 61 6c   { perUser = val
31f90 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
31fa0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
31fb0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
31fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ff0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
32000 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
32010 6f 6f 6c 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20  ool install;..  
32020 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
32030 20 62 6f 6f 6c 20 49 6e 73 74 61 6c 6c 0d 0a 20   bool Install.. 
32040 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
32050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
32060 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 73 74 61  t { return insta
32070 6c 6c 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ll; }..         
32080 20 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73         set { ins
32090 74 61 6c 6c 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  tall = value; }.
320a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
320b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
320c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
320d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
320e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
320f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32100 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
32110 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 6f   private bool wo
32120 77 36 34 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  w64;..          
32130 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 6f    public bool Wo
32140 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20  w64..           
32150 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
32160 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
32170 20 77 6f 77 36 34 3b 20 7d 0d 0a 20 20 20 20 20   wow64; }..     
32180 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
32190 20 77 6f 77 36 34 20 3d 20 76 61 6c 75 65 3b 20   wow64 = value; 
321a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
321b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
321c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
321d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
321e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
321f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32200 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
32210 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
32220 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  noRuntimeVersion
32230 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
32240 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 52 75 6e  ublic bool NoRun
32250 74 69 6d 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20  timeVersion..   
32260 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
32270 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
32280 7b 20 72 65 74 75 72 6e 20 6e 6f 52 75 6e 74 69  { return noRunti
32290 6d 65 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20  meVersion; }..  
322a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
322b0 74 20 7b 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72  t { noRuntimeVer
322c0 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  sion = value; }.
322d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
322e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
322f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32330 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
32340 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
32350 44 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20  Desktop;..      
32360 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
32370 6c 20 4e 6f 44 65 73 6b 74 6f 70 0d 0a 20 20 20  l NoDesktop..   
32380 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
32390 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
323a0 7b 20 72 65 74 75 72 6e 20 6e 6f 44 65 73 6b 74  { return noDeskt
323b0 6f 70 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  op; }..         
323c0 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 44         set { noD
323d0 65 73 6b 74 6f 70 20 3d 20 76 61 6c 75 65 3b 20  esktop = value; 
323e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
323f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32440 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
32450 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
32460 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20 20  noCompact;..    
32470 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
32480 6f 6f 6c 20 4e 6f 43 6f 6d 70 61 63 74 0d 0a 20  ool NoCompact.. 
32490 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
324a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
324b0 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6d  t { return noCom
324c0 70 61 63 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20  pact; }..       
324d0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
324e0 6f 43 6f 6d 70 61 63 74 20 3d 20 76 61 6c 75 65  oCompact = value
324f0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
32500 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
32510 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
32520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32550 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
32560 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
32570 6c 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20  l noNetFx20;..  
32580 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
32590 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 32 30 0d   bool NoNetFx20.
325a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
325b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
325c0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e  get { return noN
325d0 65 74 46 78 32 30 3b 20 7d 0d 0a 20 20 20 20 20  etFx20; }..     
325e0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
325f0 20 6e 6f 4e 65 74 46 78 32 30 20 3d 20 76 61 6c   noNetFx20 = val
32600 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
32610 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
32620 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
32630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32660 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
32670 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
32680 6f 6f 6c 20 6e 6f 4e 65 74 46 78 33 35 3b 0d 0a  ool noNetFx35;..
32690 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
326a0 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 33  ic bool NoNetFx3
326b0 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  5..            {
326c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
326d0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
326e0 6f 4e 65 74 46 78 33 35 3b 20 7d 0d 0a 20 20 20  oNetFx35; }..   
326f0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
32700 20 7b 20 6e 6f 4e 65 74 46 78 33 35 20 3d 20 76   { noNetFx35 = v
32710 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
32720 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
32730 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
32740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32770 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
32780 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
32790 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 3b   bool noNetFx40;
327a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
327b0 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46  blic bool NoNetF
327c0 78 34 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x40..           
327d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
327e0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
327f0 20 6e 6f 4e 65 74 46 78 34 30 3b 20 7d 0d 0a 20   noNetFx40; }.. 
32800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
32810 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 30 20 3d  et { noNetFx40 =
32820 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
32830 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
32840 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
32850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
32890 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
328a0 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34  te bool noNetFx4
328b0 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5;..            
328c0 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65  public bool NoNe
328d0 74 46 78 34 35 0d 0a 20 20 20 20 20 20 20 20 20  tFx45..         
328e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
328f0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
32900 72 6e 20 6e 6f 4e 65 74 46 78 34 35 3b 20 7d 0d  rn noNetFx45; }.
32910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32920 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 35   set { noNetFx45
32930 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
32940 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
32950 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
32960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
329a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
329b0 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46  vate bool noNetF
329c0 78 34 35 31 3b 0d 0a 20 20 20 20 20 20 20 20 20  x451;..         
329d0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
329e0 6f 4e 65 74 46 78 34 35 31 0d 0a 20 20 20 20 20  oNetFx451..     
329f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
32a00 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
32a10 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 35  return noNetFx45
32a20 31 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  1; }..          
32a30 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65        set { noNe
32a40 74 46 78 34 35 31 20 3d 20 76 61 6c 75 65 3b 20  tFx451 = value; 
32a50 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
32a60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32ab0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
32ac0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
32ad0 6e 6f 4e 65 74 46 78 34 35 32 3b 0d 0a 20 20 20  noNetFx452;..   
32ae0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
32af0 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 35 32 0d  bool NoNetFx452.
32b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
32b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e  get { return noN
32b30 65 74 46 78 34 35 32 3b 20 7d 0d 0a 20 20 20 20  etFx452; }..    
32b40 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
32b50 7b 20 6e 6f 4e 65 74 46 78 34 35 32 20 3d 20 76  { noNetFx452 = v
32b60 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
32b70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
32b80 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
32b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
32bd0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
32be0 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 36 3b   bool noNetFx46;
32bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
32c00 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46  blic bool NoNetF
32c10 78 34 36 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x46..           
32c20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
32c30 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
32c40 20 6e 6f 4e 65 74 46 78 34 36 3b 20 7d 0d 0a 20   noNetFx46; }.. 
32c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
32c60 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 36 20 3d  et { noNetFx46 =
32c70 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
32c80 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
32c90 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
32ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
32ce0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
32cf0 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34  te bool noNetFx4
32d00 36 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  61;..           
32d10 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e   public bool NoN
32d20 65 74 46 78 34 36 31 0d 0a 20 20 20 20 20 20 20  etFx461..       
32d30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
32d40 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
32d50 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 36 31 3b  turn noNetFx461;
32d60 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
32d70 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46      set { noNetF
32d80 78 34 36 31 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  x461 = value; }.
32d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
32da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
32db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32df0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
32e00 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
32e10 4e 65 74 46 78 34 36 32 3b 0d 0a 20 20 20 20 20  NetFx462;..     
32e20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
32e30 6f 6c 20 4e 6f 4e 65 74 46 78 34 36 32 0d 0a 20  ol NoNetFx462.. 
32e40 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
32e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
32e60 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74  t { return noNet
32e70 46 78 34 36 32 3b 20 7d 0d 0a 20 20 20 20 20 20  Fx462; }..      
32e80 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
32e90 6e 6f 4e 65 74 46 78 34 36 32 20 3d 20 76 61 6c  noNetFx462 = val
32ea0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
32eb0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
32ec0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
32ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32f00 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
32f10 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
32f20 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 37 3b 0d 0a  ool noNetFx47;..
32f30 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
32f40 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34  ic bool NoNetFx4
32f50 37 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  7..            {
32f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32f70 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
32f80 6f 4e 65 74 46 78 34 37 3b 20 7d 0d 0a 20 20 20  oNetFx47; }..   
32f90 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
32fa0 20 7b 20 6e 6f 4e 65 74 46 78 34 37 20 3d 20 76   { noNetFx47 = v
32fb0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
32fc0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
32fd0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
32fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33010 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
33020 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
33030 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 37 31   bool noNetFx471
33040 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
33050 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74  ublic bool NoNet
33060 46 78 34 37 31 0d 0a 20 20 20 20 20 20 20 20 20  Fx471..         
33070 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
33080 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
33090 72 6e 20 6e 6f 4e 65 74 46 78 34 37 31 3b 20 7d  rn noNetFx471; }
330a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
330b0 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34    set { noNetFx4
330c0 37 31 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  71 = value; }.. 
330d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
330e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
330f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
33130 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
33140 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73  rivate bool noVs
33150 32 30 30 35 3b 0d 0a 20 20 20 20 20 20 20 20 20  2005;..         
33160 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
33170 6f 56 73 32 30 30 35 0d 0a 20 20 20 20 20 20 20  oVs2005..       
33180 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
33190 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
331a0 74 75 72 6e 20 6e 6f 56 73 32 30 30 35 3b 20 7d  turn noVs2005; }
331b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
331c0 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 30 35    set { noVs2005
331d0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
331e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
331f0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
33200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
33240 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
33250 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30  vate bool noVs20
33260 30 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  08;..           
33270 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56   public bool NoV
33280 73 32 30 30 38 0d 0a 20 20 20 20 20 20 20 20 20  s2008..         
33290 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
332a0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
332b0 72 6e 20 6e 6f 56 73 32 30 30 38 3b 20 7d 0d 0a  rn noVs2008; }..
332c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
332d0 73 65 74 20 7b 20 6e 6f 56 73 32 30 30 38 20 3d  set { noVs2008 =
332e0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
332f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
33300 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
33310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
33350 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
33360 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 30  te bool noVs2010
33370 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
33380 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32  ublic bool NoVs2
33390 30 31 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20  010..           
333a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
333b0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
333c0 20 6e 6f 56 73 32 30 31 30 3b 20 7d 0d 0a 20 20   noVs2010; }..  
333d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
333e0 74 20 7b 20 6e 6f 56 73 32 30 31 30 20 3d 20 76  t { noVs2010 = v
333f0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
33400 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
33410 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
33420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33450 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
33460 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
33470 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 32 3b 0d   bool noVs2012;.
33480 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
33490 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31  lic bool NoVs201
334a0 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  2..            {
334b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
334c0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
334d0 6f 56 73 32 30 31 32 3b 20 7d 0d 0a 20 20 20 20  oVs2012; }..    
334e0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
334f0 7b 20 6e 6f 56 73 32 30 31 32 20 3d 20 76 61 6c  { noVs2012 = val
33500 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
33510 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
33520 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
33530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33560 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
33570 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
33580 6f 6f 6c 20 6e 6f 56 73 32 30 31 33 3b 0d 0a 20  ool noVs2013;.. 
33590 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
335a0 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 33 0d  c bool NoVs2013.
335b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
335c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335d0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56  get { return noV
335e0 73 32 30 31 33 3b 20 7d 0d 0a 20 20 20 20 20 20  s2013; }..      
335f0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
33600 6e 6f 56 73 32 30 31 33 20 3d 20 76 61 6c 75 65  noVs2013 = value
33610 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
33620 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
33630 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
33640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33670 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
33680 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
33690 6c 20 6e 6f 56 73 32 30 31 35 3b 0d 0a 20 20 20  l noVs2015;..   
336a0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
336b0 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 35 0d 0a 20  bool NoVs2015.. 
336c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
336d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
336e0 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32  t { return noVs2
336f0 30 31 35 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  015; }..        
33700 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
33710 56 73 32 30 31 35 20 3d 20 76 61 6c 75 65 3b 20  Vs2015 = value; 
33720 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
33730 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33780 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
33790 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
337a0 6e 6f 56 73 32 30 31 37 3b 0d 0a 20 20 20 20 20  noVs2017;..     
337b0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
337c0 6f 6c 20 4e 6f 56 73 32 30 31 37 0d 0a 20 20 20  ol NoVs2017..   
337d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
337e0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
337f0 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 31  { return noVs201
33800 37 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  7; }..          
33810 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73        set { noVs
33820 32 30 31 37 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  2017 = value; }.
33830 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
33840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
33850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33890 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
338a0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
338b0 54 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20  Trace;..        
338c0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
338d0 4e 6f 54 72 61 63 65 0d 0a 20 20 20 20 20 20 20  NoTrace..       
338e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
338f0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
33900 74 75 72 6e 20 6e 6f 54 72 61 63 65 3b 20 7d 0d  turn noTrace; }.
33910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33920 20 73 65 74 20 7b 20 6e 6f 54 72 61 63 65 20 3d   set { noTrace =
33930 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
33940 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
33950 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
33960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
339a0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
339b0 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c  te bool noConsol
339c0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
339d0 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f  public bool NoCo
339e0 6e 73 6f 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  nsole..         
339f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
33a00 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
33a10 72 6e 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 20 7d 0d  rn noConsole; }.
33a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33a30 20 73 65 74 20 7b 20 6e 6f 43 6f 6e 73 6f 6c 65   set { noConsole
33a40 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
33a50 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
33a60 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
33a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
33ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
33ac0 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 3b  vate bool noLog;
33ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
33ae0 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4c 6f 67 0d  blic bool NoLog.
33af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
33b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b10 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4c  get { return noL
33b20 6f 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  og; }..         
33b30 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4c         set { noL
33b40 6f 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  og = value; }.. 
33b50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
33b60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
33b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
33bb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
33bc0 72 69 76 61 74 65 20 62 6f 6f 6c 20 74 68 72 6f  rivate bool thro
33bd0 77 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20 20 20  wOnMissing;..   
33be0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
33bf0 62 6f 6f 6c 20 54 68 72 6f 77 4f 6e 4d 69 73 73  bool ThrowOnMiss
33c00 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ing..           
33c10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
33c20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
33c30 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b   throwOnMissing;
33c40 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
33c50 20 20 20 20 73 65 74 20 7b 20 74 68 72 6f 77 4f      set { throwO
33c60 6e 4d 69 73 73 69 6e 67 20 3d 20 76 61 6c 75 65  nMissing = value
33c70 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
33c80 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
33c90 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
33ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33cd0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
33ce0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
33cf0 6c 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20  l whatIf;..     
33d00 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
33d10 6f 6c 20 57 68 61 74 49 66 0d 0a 20 20 20 20 20  ol WhatIf..     
33d20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
33d30 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
33d40 72 65 74 75 72 6e 20 77 68 61 74 49 66 3b 20 7d  return whatIf; }
33d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33d60 20 20 73 65 74 20 7b 20 77 68 61 74 49 66 20 3d    set { whatIf =
33d70 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
33d80 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
33d90 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
33da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
33de0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
33df0 74 65 20 62 6f 6f 6c 20 64 65 62 75 67 3b 0d 0a  te bool debug;..
33e00 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
33e10 69 63 20 62 6f 6f 6c 20 44 65 62 75 67 0d 0a 20  ic bool Debug.. 
33e20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
33e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
33e40 74 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67  t { return debug
33e50 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
33e60 20 20 20 20 20 73 65 74 20 7b 20 64 65 62 75 67       set { debug
33e70 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
33e80 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
33e90 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
33ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
33ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
33ef0 76 61 74 65 20 62 6f 6f 6c 20 76 65 72 62 6f 73  vate bool verbos
33f00 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
33f10 70 75 62 6c 69 63 20 62 6f 6f 6c 20 56 65 72 62  public bool Verb
33f20 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
33f30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
33f40 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
33f50 20 76 65 72 62 6f 73 65 3b 20 7d 0d 0a 20 20 20   verbose; }..   
33f60 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
33f70 20 7b 20 76 65 72 62 6f 73 65 20 3d 20 76 61 6c   { verbose = val
33f80 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
33f90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
33fa0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
33fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33fe0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
33ff0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
34000 6f 6f 6c 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20  ool confirm;..  
34010 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
34020 20 62 6f 6f 6c 20 43 6f 6e 66 69 72 6d 0d 0a 20   bool Confirm.. 
34030 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
34040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
34050 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 6e 66 69  t { return confi
34060 72 6d 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  rm; }..         
34070 20 20 20 20 20 20 20 73 65 74 20 7b 20 63 6f 6e         set { con
34080 66 69 72 6d 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  firm = value; }.
34090 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
340a0 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
340b0 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
340c0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
340d0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
340e0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
340f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34120 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
34130 20 20 20 20 23 72 65 67 69 6f 6e 20 46 72 61 6d      #region Fram
34140 65 77 6f 72 6b 4c 69 73 74 20 43 6c 61 73 73 0d  eworkList Class.
34150 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
34160 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 46 72   sealed class Fr
34170 61 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 20 20  ameworkList..   
34180 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
34190 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
341a0 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  ic Constructors.
341b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
341c0 6c 69 63 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73  lic FrameworkLis
341d0 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t()..           
341e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
341f0 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
34200 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
34210 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
34220 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
34230 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
34240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
34280 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
34290 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f  ion Public Metho
342a0 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ds..            
342b0 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69  private MockRegi
342c0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 3b  stryKey rootKey;
342d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
342e0 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
342f0 79 4b 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20  yKey RootKey..  
34300 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
34310 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
34320 20 7b 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65   { return rootKe
34330 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
34340 20 20 20 20 20 20 73 65 74 20 7b 20 72 6f 6f 74        set { root
34350 4b 65 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  Key = value; }..
34360 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
34370 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
34380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
343a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
343b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
343c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
343d0 70 72 69 76 61 74 65 20 53 74 72 69 6e 67 4c 69  private StringLi
343e0 73 74 20 6e 61 6d 65 73 3b 0d 0a 20 20 20 20 20  st names;..     
343f0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 74         public St
34400 72 69 6e 67 4c 69 73 74 20 4e 61 6d 65 73 0d 0a  ringList Names..
34410 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
34420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
34430 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 61 6d 65  et { return name
34440 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  s; }..          
34450 20 20 20 20 20 20 73 65 74 20 7b 20 6e 61 6d 65        set { name
34460 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  s = value; }..  
34470 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
34480 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
34490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
344a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
344b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
344c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
344d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
344e0 69 76 61 74 65 20 56 65 72 73 69 6f 6e 4d 61 70  ivate VersionMap
344f0 20 76 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20 20   versions;..    
34500 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56          public V
34510 65 72 73 69 6f 6e 4d 61 70 20 56 65 72 73 69 6f  ersionMap Versio
34520 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ns..            
34530 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
34540 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
34550 76 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20  versions; }..   
34560 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
34570 20 7b 20 76 65 72 73 69 6f 6e 73 20 3d 20 76 61   { versions = va
34580 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
34590 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
345a0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
345b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
345c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
345d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
345e0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
345f0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
34600 53 74 72 69 6e 67 4c 69 73 74 20 70 6c 61 74 66  StringList platf
34610 6f 72 6d 4e 61 6d 65 73 3b 0d 0a 20 20 20 20 20  ormNames;..     
34620 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 74         public St
34630 72 69 6e 67 4c 69 73 74 20 50 6c 61 74 66 6f 72  ringList Platfor
34640 6d 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20  mNames..        
34650 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
34660 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
34670 75 72 6e 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  urn platformName
34680 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  s; }..          
34690 20 20 20 20 20 20 73 65 74 20 7b 20 70 6c 61 74        set { plat
346a0 66 6f 72 6d 4e 61 6d 65 73 20 3d 20 76 61 6c 75  formNames = valu
346b0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
346c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
346d0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
346e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
346f0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
34700 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
34710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
34750 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
34760 20 56 73 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20   VsList Class.. 
34770 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
34780 65 61 6c 65 64 20 63 6c 61 73 73 20 56 73 4c 69  ealed class VsLi
34790 73 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  st..        {.. 
347a0 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
347b0 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72  on Public Constr
347c0 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
347d0 20 20 20 20 70 75 62 6c 69 63 20 56 73 4c 69 73      public VsLis
347e0 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t()..           
347f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
34800 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
34810 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
34820 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
34830 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
34840 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
34850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
34890 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
348a0 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65  ion Public Prope
348b0 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20  rties..         
348c0 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52     private MockR
348d0 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
348e0 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey;..           
348f0 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
34900 73 74 72 79 4b 65 79 20 52 6f 6f 74 4b 65 79 0d  stryKey RootKey.
34910 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
34920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34930 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72 6f 6f  get { return roo
34940 74 4b 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20  tKey; }..       
34950 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 72           set { r
34960 6f 6f 74 4b 65 79 20 3d 20 76 61 6c 75 65 3b 20  ootKey = value; 
34970 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
34980 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
34990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
349a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
349b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
349c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
349d0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
349e0 20 20 20 70 72 69 76 61 74 65 20 56 65 72 73 69     private Versi
349f0 6f 6e 4c 69 73 74 20 76 65 72 73 69 6f 6e 73 3b  onList versions;
34a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
34a10 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74  blic VersionList
34a20 20 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20   Versions..     
34a30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34a40 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
34a50 72 65 74 75 72 6e 20 76 65 72 73 69 6f 6e 73 3b  return versions;
34a60 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
34a70 20 20 20 20 73 65 74 20 7b 20 76 65 72 73 69 6f      set { versio
34a80 6e 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ns = value; }.. 
34a90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
34aa0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
34ab0 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  gion..        }.
34ac0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
34ad0 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ion..        #en
34ae0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
34af0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
34b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
34b40 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
34b50 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 20 44  ivate Constant D
34b60 61 74 61 0d 0a 20 20 20 20 20 20 20 20 23 72 65  ata..        #re
34b70 67 69 6f 6e 20 50 61 63 6b 61 67 65 20 26 20 50  gion Package & P
34b80 72 6f 76 69 64 65 72 20 4e 61 6d 65 73 0d 0a 20  rovider Names.. 
34b90 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
34ba0 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 6f 72 65  onst string Core
34bb0 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73 74  FileName = "Syst
34bc0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
34bd0 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  ll";..        pr
34be0 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
34bf0 6e 67 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 20  ng LinqFileName 
34c00 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  = "System.Data.S
34c10 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 22 3b  QLite.Linq.dll";
34c20 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
34c30 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 45  e const string E
34c40 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 79  f6FileName = "Sy
34c50 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
34c60 2e 45 46 36 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20  .EF6.dll";..    
34c70 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
34c80 74 20 73 74 72 69 6e 67 20 44 65 73 69 67 6e 65  t string Designe
34c90 72 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 51 4c  rFileName = "SQL
34ca0 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 64 6c 6c  ite.Designer.dll
34cb0 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
34cc0 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
34cd0 20 50 72 6f 76 69 64 65 72 4e 61 6d 65 20 3d 20   ProviderName = 
34ce0 22 53 51 4c 69 74 65 20 44 61 74 61 20 50 72 6f  "SQLite Data Pro
34cf0 76 69 64 65 72 22 3b 0d 0a 20 20 20 20 20 20 20  vider";..       
34d00 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
34d10 74 72 69 6e 67 20 50 72 6f 6a 65 63 74 4e 61 6d  tring ProjectNam
34d20 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61  e = "System.Data
34d30 2e 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20  .SQLite";..     
34d40 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
34d50 20 73 74 72 69 6e 67 20 4c 65 67 61 63 79 50 72   string LegacyPr
34d60 6f 6a 65 63 74 4e 61 6d 65 20 3d 20 22 53 51 4c  ojectName = "SQL
34d70 69 74 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ite";....       
34d80 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
34d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34dc0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
34dd0 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
34de0 74 20 73 74 72 69 6e 67 20 44 65 73 63 72 69 70  t string Descrip
34df0 74 69 6f 6e 20 3d 0d 0a 20 20 20 20 20 20 20 20  tion =..        
34e00 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77      ".NET Framew
34e10 6f 72 6b 20 44 61 74 61 20 50 72 6f 76 69 64 65  ork Data Provide
34e20 72 20 66 6f 72 20 53 51 4c 69 74 65 22 3b 0d 0a  r for SQLite";..
34e30 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
34e40 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
34e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34e90 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
34ea0 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
34eb0 74 72 69 6e 67 20 43 4c 52 76 32 49 6d 61 67 65  tring CLRv2Image
34ec0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d  RuntimeVersion =
34ed0 20 22 76 32 2e 30 2e 35 30 37 32 37 22 3b 0d 0a   "v2.0.50727";..
34ee0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
34ef0 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 4c 52  const string CLR
34f00 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v4ImageRuntimeVe
34f10 72 73 69 6f 6e 20 3d 20 22 76 34 2e 30 2e 33 30  rsion = "v4.0.30
34f20 33 31 39 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  319";....       
34f30 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
34f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34f70 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
34f80 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
34f90 74 20 73 74 72 69 6e 67 20 53 79 73 74 65 6d 45  t string SystemE
34fa0 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  f6AssemblyName =
34fb0 20 22 45 6e 74 69 74 79 46 72 61 6d 65 77 6f 72   "EntityFramewor
34fc0 6b 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  k, " +..        
34fd0 20 20 20 20 22 56 65 72 73 69 6f 6e 3d 36 2e 30      "Version=6.0
34fe0 2e 30 2e 30 2c 20 43 75 6c 74 75 72 65 3d 6e 65  .0.0, Culture=ne
34ff0 75 74 72 61 6c 2c 20 50 75 62 6c 69 63 4b 65 79  utral, PublicKey
35000 54 6f 6b 65 6e 3d 62 37 37 61 35 63 35 36 31 39  Token=b77a5c5619
35010 33 34 65 30 38 39 22 3b 0d 0a 0d 0a 20 20 20 20  34e089";....    
35020 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
35030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
35070 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
35080 6f 6e 73 74 20 73 74 72 69 6e 67 20 4e 61 6d 65  onst string Name
35090 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 20 3d  AndValueFormat =
350a0 20 22 7b 30 7d 3a 20 7b 31 7d 22 3b 0d 0a 20 20   "{0}: {1}";..  
350b0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
350c0 6e 73 74 20 73 74 72 69 6e 67 20 4c 6f 67 46 69  nst string LogFi
350d0 6c 65 53 75 66 66 69 78 20 3d 20 22 2e 6c 6f 67  leSuffix = ".log
350e0 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ";....        //
350f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35130 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
35140 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
35150 74 72 69 6e 67 20 56 73 44 65 76 45 6e 76 53 65  tring VsDevEnvSe
35160 74 75 70 46 6f 72 6d 61 74 20 3d 20 22 7b 30 7d  tupFormat = "{0}
35170 3a 20 7b 31 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20  : {1}";....     
35180 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
35190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
351a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
351b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
351c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
351d0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
351e0 6e 73 74 20 73 74 72 69 6e 67 20 52 6f 6f 74 4b  nst string RootK
351f0 65 79 4e 61 6d 65 20 3d 20 22 53 6f 66 74 77 61  eyName = "Softwa
35200 72 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  re";..        pr
35210 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
35220 6e 67 20 57 6f 77 36 34 53 75 62 4b 65 79 4e 61  ng Wow64SubKeyNa
35230 6d 65 20 3d 20 22 57 6f 77 36 34 33 32 4e 6f 64  me = "Wow6432Nod
35240 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  e";....        /
35250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35290 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
352a0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
352b0 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54 20   NOTE: The .NET 
352c0 46 72 61 6d 65 77 6f 72 6b 20 68 61 73 20 62 6f  Framework has bo
352d0 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34  th 32-bit and 64
352e0 2d 62 69 74 20 65 64 69 74 69 6f 6e 73 2e 0d 0a  -bit editions...
352f0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
35300 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
35310 69 63 20 72 65 61 64 6f 6e 6c 79 20 62 6f 6f 6c  ic readonly bool
35320 20 4e 65 74 46 78 49 73 33 32 42 69 74 4f 6e 6c   NetFxIs32BitOnl
35330 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  y = false;....  
35340 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
35350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
35390 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
353a0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f       // NOTE: Fo
353b0 72 20 6e 6f 77 2c 20 56 69 73 75 61 6c 20 53 74  r now, Visual St
353c0 75 64 69 6f 20 69 73 20 61 6c 77 61 79 73 20 61  udio is always a
353d0 20 33 32 2d 62 69 74 20 61 70 70 6c 69 63 61 74   32-bit applicat
353e0 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
353f0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
35400 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c  e static readonl
35410 79 20 62 6f 6f 6c 20 56 73 49 73 33 32 42 69 74  y bool VsIs32Bit
35420 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a  Only = true;....
35430 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
35440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
35480 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
35490 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
354a0 6c 79 20 73 74 72 69 6e 67 20 56 73 49 64 46 6f  ly string VsIdFo
354b0 72 6d 61 74 20 3d 20 22 42 22 3b 0d 0a 0d 0a 20  rmat = "B";.... 
354c0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
354d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
354e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
354f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
35510 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
35520 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c  e static readonl
35530 79 20 73 74 72 69 6e 67 20 58 50 61 74 68 46 6f  y string XPathFo
35540 72 41 64 64 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20  rAddElement =.. 
35550 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66             "conf
35560 69 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65 6d  iguration/system
35570 2e 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65 72  .data/DbProvider
35580 46 61 63 74 6f 72 69 65 73 2f 61 64 64 5b 40 69  Factories/add[@i
35590 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22  nvariant=\"{0}\"
355a0 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ]";....        p
355b0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65  rivate static re
355c0 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58 50  adonly string XP
355d0 61 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65 6d  athForRemoveElem
355e0 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  ent =..         
355f0 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f     "configuratio
35600 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44 62  n/system.data/Db
35610 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69 65  ProviderFactorie
35620 73 2f 72 65 6d 6f 76 65 5b 40 69 6e 76 61 72 69  s/remove[@invari
35630 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a  ant=\"{0}\"]";..
35640 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
35650 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
35660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
356a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
356b0 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
356c0 20 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20   Static Data..  
356d0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44 69        #region Di
356e0 61 67 6e 6f 73 74 69 63 73 20 26 20 4c 6f 67 67  agnostics & Logg
356f0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  ing..        //.
35700 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  .        // NOTE
35710 3a 20 43 61 63 68 65 20 74 68 65 20 63 75 72 72  : Cache the curr
35720 65 6e 74 20 70 72 6f 63 65 73 73 20 61 6e 64 20  ent process and 
35730 61 73 73 65 6d 62 6c 79 20 61 73 20 74 68 65 79  assembly as they
35740 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65 0d 0a   do not change..
35750 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
35760 20 61 6e 64 20 6d 61 79 20 62 65 20 6e 65 65 64   and may be need
35770 65 64 20 69 6e 20 71 75 69 74 65 20 61 20 66 65  ed in quite a fe
35780 77 20 64 69 66 66 65 72 65 6e 74 20 70 6c 61 63  w different plac
35790 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  es...        //.
357a0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
357b0 20 73 74 61 74 69 63 20 50 72 6f 63 65 73 73 20   static Process 
357c0 74 68 69 73 50 72 6f 63 65 73 73 20 3d 20 50 72  thisProcess = Pr
357d0 6f 63 65 73 73 2e 47 65 74 43 75 72 72 65 6e 74  ocess.GetCurrent
357e0 50 72 6f 63 65 73 73 28 29 3b 0d 0a 20 20 20 20  Process();..    
357f0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
35800 69 63 20 41 73 73 65 6d 62 6c 79 20 74 68 69 73  ic Assembly this
35810 41 73 73 65 6d 62 6c 79 20 3d 20 41 73 73 65 6d  Assembly = Assem
35820 62 6c 79 2e 47 65 74 45 78 65 63 75 74 69 6e 67  bly.GetExecuting
35830 41 73 73 65 6d 62 6c 79 28 29 3b 0d 0a 0d 0a 20  Assembly();.... 
35840 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
35850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
35890 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
358a0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
358b0 68 65 20 74 72 61 63 65 20 63 61 74 65 67 6f 72  he trace categor
358c0 79 20 69 73 20 74 68 65 20 73 61 6d 65 20 66 6f  y is the same fo
358d0 72 20 62 6f 74 68 20 74 68 65 20 64 65 62 75 67  r both the debug
358e0 20 61 6e 64 20 74 72 61 63 65 0d 0a 20 20 20 20   and trace..    
358f0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c      //       cal
35900 6c 62 61 63 6b 73 2e 0d 0a 20 20 20 20 20 20 20  lbacks...       
35910 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 70 72 69   //..        pri
35920 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
35930 6e 67 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ng traceCategory
35940 20 3d 20 28 74 68 69 73 41 73 73 65 6d 62 6c 79   = (thisAssembly
35950 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20   != null) ?..   
35960 20 20 20 20 20 20 20 20 20 50 61 74 68 2e 47 65           Path.Ge
35970 74 46 69 6c 65 4e 61 6d 65 28 74 68 69 73 41 73  tFileName(thisAs
35980 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29  sembly.Location)
35990 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   : null;....    
359a0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
359b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
359c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
359d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
359e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
359f0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
35a00 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 65 74 20     // NOTE: Set 
35a10 74 68 65 20 64 65 62 75 67 20 61 6e 64 20 74 72  the debug and tr
35a20 61 63 65 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c  ace logging call
35a30 62 61 63 6b 73 20 75 73 65 64 20 62 79 20 74 68  backs used by th
35a40 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  e..        //   
35a50 20 20 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e      application.
35a60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
35a70 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
35a80 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c 62 61  atic TraceCallba
35a90 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  ck debugCallback
35aa0 20 3d 20 41 70 70 44 65 62 75 67 3b 0d 0a 20 20   = AppDebug;..  
35ab0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
35ac0 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c 62 61  atic TraceCallba
35ad0 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  ck traceCallback
35ae0 20 3d 20 41 70 70 54 72 61 63 65 3b 0d 0a 20 20   = AppTrace;..  
35af0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
35b00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
35b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35b50 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
35b60 72 65 67 69 6f 6e 20 53 79 73 74 65 6d 20 44 69  region System Di
35b70 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20  rectory..       
35b80 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
35b90 73 74 72 69 6e 67 20 73 79 73 74 65 6d 44 69 72  string systemDir
35ba0 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a  ectory = null;..
35bb0 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20  ..#if WINDOWS.. 
35bc0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
35bd0 74 61 74 69 63 20 73 74 72 69 6e 67 20 73 79 73  tatic string sys
35be0 74 65 6d 44 69 72 65 63 74 6f 72 79 57 6f 77 36  temDirectoryWow6
35bf0 34 20 3d 20 6e 75 6c 6c 3b 0d 0a 23 65 6e 64 69  4 = null;..#endi
35c00 66 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  f..        #endr
35c10 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
35c20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
35c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35c60 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
35c70 20 20 20 20 23 72 65 67 69 6f 6e 20 52 65 67 69      #region Regi
35c80 73 74 72 79 20 53 74 61 74 69 73 74 69 63 73 0d  stry Statistics.
35c90 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
35ca0 20 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c 65   static int file
35cb0 73 43 72 65 61 74 65 64 20 3d 20 30 3b 0d 0a 20  sCreated = 0;.. 
35cc0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
35cd0 74 61 74 69 63 20 69 6e 74 20 66 69 6c 65 73 4d  tatic int filesM
35ce0 6f 64 69 66 69 65 64 20 3d 20 30 3b 0d 0a 20 20  odified = 0;..  
35cf0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
35d00 61 74 69 63 20 69 6e 74 20 66 69 6c 65 73 44 65  atic int filesDe
35d10 6c 65 74 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20  leted = 0;..    
35d20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
35d30 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
35d40 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
35d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d90 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
35da0 20 23 72 65 67 69 6f 6e 20 54 72 61 63 65 20 48   #region Trace H
35db0 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
35dc0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
35dd0 73 74 72 69 6e 67 20 47 65 74 4c 6f 67 46 69 6c  string GetLogFil
35de0 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  eName(..        
35df0 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e      string typeN
35e00 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
35e10 20 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a   ) /* throw */..
35e20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
35e30 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
35e40 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65  leName = Path.Ge
35e50 74 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28 29 3b  tTempFileName();
35e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
35e70 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d  ring directory =
35e80 20 50 61 74 68 2e 47 65 74 44 69 72 65 63 74 6f   Path.GetDirecto
35e90 72 79 4e 61 6d 65 28 66 69 6c 65 4e 61 6d 65 29  ryName(fileName)
35ea0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ;..            s
35eb0 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 4f 6e  tring fileNameOn
35ec0 6c 79 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c  ly = Path.GetFil
35ed0 65 4e 61 6d 65 57 69 74 68 6f 75 74 45 78 74 65  eNameWithoutExte
35ee0 6e 73 69 6f 6e 28 66 69 6c 65 4e 61 6d 65 29 3b  nsion(fileName);
35ef0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35f00 73 74 72 69 6e 67 20 6e 65 77 46 69 6c 65 4e 61  string newFileNa
35f10 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  me = Path.Combin
35f20 65 28 64 69 72 65 63 74 6f 72 79 2c 20 53 74 72  e(directory, Str
35f30 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
35f40 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30               "{0
35f50 7d 7b 31 7d 7b 32 7d 22 2c 20 74 72 61 63 65 43  }{1}{2}", traceC
35f60 61 74 65 67 6f 72 79 2c 20 21 53 74 72 69 6e 67  ategory, !String
35f70 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74  .IsNullOrEmpty(t
35f80 79 70 65 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20  ypeName) ?..    
35f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fa0 22 2e 22 20 2b 20 74 79 70 65 4e 61 6d 65 20 3a  "." + typeName :
35fb0 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 2c 20 22   String.Empty, "
35fc0 2e 22 20 2b 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c  ." + fileNameOnl
35fd0 79 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y +..           
35fe0 20 20 20 20 20 20 20 20 20 4c 6f 67 46 69 6c 65           LogFile
35ff0 53 75 66 66 69 78 29 29 3b 0d 0a 0d 0a 20 20 20  Suffix));....   
36000 20 20 20 20 20 20 20 20 20 46 69 6c 65 2e 4d 6f           File.Mo
36010 76 65 28 66 69 6c 65 4e 61 6d 65 2c 20 6e 65 77  ve(fileName, new
36020 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
36030 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
36040 20 6e 65 77 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20   newFileName;.. 
36050 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
36060 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
36070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
360a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
360b0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
360c0 74 61 74 69 63 20 76 6f 69 64 20 41 70 70 44 65  tatic void AppDe
360d0 62 75 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20  bug(..          
360e0 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65    string message
360f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
36100 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a  tring category..
36110 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
36120 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36130 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
36140 65 62 75 67 43 6f 72 65 28 53 74 72 69 6e 67 2e  ebugCore(String.
36150 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
36160 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
36170 73 2e 44 65 62 75 67 46 6f 72 6d 61 74 2c 20 54  s.DebugFormat, T
36180 72 61 63 65 4f 70 73 2e 4e 65 78 74 44 65 62 75  raceOps.NextDebu
36190 67 49 64 28 29 2c 0d 0a 20 20 20 20 20 20 20 20  gId(),..        
361a0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
361b0 2e 54 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54  .TimeStamp(DateT
361c0 69 6d 65 2e 55 74 63 4e 6f 77 29 2c 20 6d 65 73  ime.UtcNow), mes
361d0 73 61 67 65 29 2c 20 63 61 74 65 67 6f 72 79 29  sage), category)
361e0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
361f0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
36200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
36240 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
36250 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 41  te static void A
36260 70 70 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ppTrace(..      
36270 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73        string mes
36280 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  sage,..         
36290 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f     string catego
362a0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
362b0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
362c0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
362d0 70 73 2e 54 72 61 63 65 43 6f 72 65 28 53 74 72  ps.TraceCore(Str
362e0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
362f0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
36300 63 65 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61  ceOps.TraceForma
36310 74 2c 20 54 72 61 63 65 4f 70 73 2e 4e 65 78 74  t, TraceOps.Next
36320 54 72 61 63 65 49 64 28 29 2c 0d 0a 20 20 20 20  TraceId(),..    
36330 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
36340 65 4f 70 73 2e 54 69 6d 65 53 74 61 6d 70 28 44  eOps.TimeStamp(D
36350 61 74 65 54 69 6d 65 2e 55 74 63 4e 6f 77 29 2c  ateTime.UtcNow),
36360 20 6d 65 73 73 61 67 65 29 2c 20 63 61 74 65 67   message), categ
36370 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ory);..        }
36380 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
36390 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
363a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
363b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
363c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
363d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
363e0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
363f0 20 20 20 23 72 65 67 69 6f 6e 20 47 65 6e 65 72     #region Gener
36400 69 63 20 50 6c 61 74 66 6f 72 6d 20 48 61 6e 64  ic Platform Hand
36410 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
36420 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
36430 6c 20 49 73 36 34 42 69 74 50 72 6f 63 65 73 73  l Is64BitProcess
36440 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
36450 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
36460 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
36470 54 45 3a 20 52 65 74 75 72 6e 73 20 74 72 75 65  TE: Returns true
36480 20 69 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   if the current 
36490 70 72 6f 63 65 73 73 20 69 73 20 36 34 2d 62 69  process is 64-bi
364a0 74 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20  t.  If this..   
364b0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
364c0 20 20 69 73 20 74 72 75 65 2c 20 77 65 20 2a 6b    is true, we *k
364d0 6e 6f 77 2a 20 74 68 61 74 20 77 65 20 6d 75 73  now* that we mus
364e0 74 20 62 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20  t be running on 
364f0 61 20 36 34 2d 62 69 74 0d 0a 20 20 20 20 20 20  a 64-bit..      
36500 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
36510 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20  perating system 
36520 61 73 20 77 65 6c 6c 2e 20 20 48 6f 77 65 76 65  as well.  Howeve
36530 72 2c 20 69 66 20 74 68 69 73 20 69 73 20 66 61  r, if this is fa
36540 6c 73 65 2c 20 77 65 0d 0a 20 20 20 20 20 20 20  lse, we..       
36550 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 6f       //       do
36560 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79   not necessarily
36570 20 6b 6e 6f 77 20 74 68 61 74 20 77 65 20 61 72   know that we ar
36580 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 33  e running on a 3
36590 32 2d 62 69 74 0d 0a 20 20 20 20 20 20 20 20 20  2-bit..         
365a0 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65 72     //       oper
365b0 61 74 69 6e 67 20 73 79 73 74 65 6d 2c 20 64 75  ating system, du
365c0 65 20 74 6f 20 57 6f 57 36 34 20 28 57 69 6e 33  e to WoW64 (Win3
365d0 32 2d 6f 6e 2d 57 69 6e 36 34 29 2c 20 65 74 63  2-on-Win64), etc
365e0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
365f0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  /..            r
36600 65 74 75 72 6e 20 28 49 6e 74 50 74 72 2e 53 69  eturn (IntPtr.Si
36610 7a 65 20 3d 3d 20 73 69 7a 65 6f 66 28 6c 6f 6e  ze == sizeof(lon
36620 67 29 29 3b 20 2f 2f 20 4e 4f 54 45 3a 20 50 6f  g)); // NOTE: Po
36630 69 6e 74 65 72 20 69 73 20 36 34 2d 62 69 74 73  inter is 64-bits
36640 3f 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ?..        }....
36650 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
36660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
366a0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
366b0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 49  te static bool I
366c0 73 53 75 70 70 6f 72 74 65 64 52 6f 6f 74 4b 65  sSupportedRootKe
366d0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
366e0 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65 67  MockRegistry reg
366f0 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  istry,..        
36700 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
36710 4b 65 79 20 72 6f 6f 74 4b 65 79 0d 0a 20 20 20  Key rootKey..   
36720 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
36730 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
36740 20 20 20 72 65 74 75 72 6e 20 4f 62 6a 65 63 74     return Object
36750 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73  .ReferenceEquals
36760 28 72 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73 74  (rootKey, regist
36770 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72 29 20  ry.CurrentUser) 
36780 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
36790 20 20 20 20 4f 62 6a 65 63 74 2e 52 65 66 65 72      Object.Refer
367a0 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b  enceEquals(rootK
367b0 65 79 2c 20 72 65 67 69 73 74 72 79 2e 4c 6f 63  ey, registry.Loc
367c0 61 6c 4d 61 63 68 69 6e 65 29 3b 0d 0a 20 20 20  alMachine);..   
367d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
367e0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
367f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36820 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
36830 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
36840 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 52 6f  tic string GetRo
36850 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20  otKeyName(..    
36860 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
36870 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
36880 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20     bool wow64.. 
36890 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
368a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
368b0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
368c0 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20       // BUGFIX: 
368d0 41 70 70 61 72 65 6e 74 6c 79 2c 20 74 68 65 20  Apparently, the 
368e0 70 65 72 2d 75 73 65 72 20 72 65 67 69 73 74 72  per-user registr
368f0 79 20 68 69 76 65 20 64 6f 65 73 20 6e 6f 74 20  y hive does not 
36900 75 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  use..           
36910 20 2f 2f 20 20 20 20 20 20 20 20 20 74 68 65 20   //         the 
36920 22 57 6f 77 36 34 33 32 4e 6f 64 65 22 20 6e 6f  "Wow6432Node" no
36930 64 65 20 74 6f 20 73 74 6f 72 65 20 73 65 74 74  de to store sett
36940 69 6e 67 73 20 66 6f 72 20 33 32 2d 62 69 74 0d  ings for 32-bit.
36950 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
36960 20 20 20 20 20 20 20 20 61 70 70 6c 69 63 61 74          applicat
36970 69 6f 6e 73 20 72 75 6e 6e 69 6e 67 20 6f 6e 20  ions running on 
36980 61 20 36 34 2d 62 69 74 20 6f 70 65 72 61 74 69  a 64-bit operati
36990 6e 67 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20  ng system...    
369a0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
369b0 20 20 20 54 69 63 6b 65 74 20 5b 61 30 36 37 37     Ticket [a0677
369c0 33 30 39 66 30 5d 20 68 61 73 20 66 75 72 74 68  309f0] has furth
369d0 65 72 20 64 65 74 61 69 6c 73 2e 0d 0a 20 20 20  er details...   
369e0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
369f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
36a00 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4a  RegistryHelper.J
36a10 6f 69 6e 4b 65 79 4e 61 6d 65 73 28 52 6f 6f 74  oinKeyNames(Root
36a20 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
36a30 20 20 20 20 20 20 20 20 20 20 21 70 65 72 55 73            !perUs
36a40 65 72 20 26 26 20 77 6f 77 36 34 20 26 26 20 49  er && wow64 && I
36a50 73 36 34 42 69 74 50 72 6f 63 65 73 73 28 29 20  s64BitProcess() 
36a60 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
36a70 20 20 20 20 20 20 20 57 6f 77 36 34 53 75 62 4b         Wow64SubK
36a80 65 79 4e 61 6d 65 20 3a 20 53 74 72 69 6e 67 2e  eyName : String.
36a90 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20 20 20  Empty);..       
36aa0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
36ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36af0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
36b00 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
36b10 73 74 72 69 6e 67 20 47 65 74 53 79 73 74 65 6d  string GetSystem
36b20 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20  Directory(..    
36b30 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
36b40 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  64..            
36b50 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  )..        {..#i
36b60 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20  f WINDOWS..     
36b70 20 20 20 20 20 20 20 69 66 20 28 77 6f 77 36 34         if (wow64
36b80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
36b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36ba0 20 20 69 66 20 28 73 79 73 74 65 6d 44 69 72 65    if (systemDire
36bb0 63 74 6f 72 79 57 6f 77 36 34 20 3d 3d 20 6e 75  ctoryWow64 == nu
36bc0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
36bd0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
36be0 20 20 20 20 20 20 20 20 20 20 20 20 73 79 73 74              syst
36bf0 65 6d 44 69 72 65 63 74 6f 72 79 57 6f 77 36 34  emDirectoryWow64
36c00 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
36c10 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
36c20 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
36c30 47 65 74 53 79 73 74 65 6d 44 69 72 65 63 74 6f  GetSystemDirecto
36c40 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ry();..         
36c50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
36c60 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
36c70 72 6e 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f  rn systemDirecto
36c80 72 79 57 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20  ryWow64;..      
36c90 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
36ca0 20 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69       else..#endi
36cb0 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  f..            {
36cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36cd0 20 20 69 66 20 28 73 79 73 74 65 6d 44 69 72 65    if (systemDire
36ce0 63 74 6f 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ctory == null)..
36cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d00 20 20 20 20 73 79 73 74 65 6d 44 69 72 65 63 74      systemDirect
36d10 6f 72 79 20 3d 20 45 6e 76 69 72 6f 6e 6d 65 6e  ory = Environmen
36d20 74 2e 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72  t.SystemDirector
36d30 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  y;....          
36d40 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 79 73        return sys
36d50 74 65 6d 44 69 72 65 63 74 6f 72 79 3b 0d 0a 20  temDirectory;.. 
36d60 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
36d70 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
36d80 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
36d90 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
36da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
36de0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
36df0 6e 20 47 65 6e 65 72 69 63 20 53 74 72 69 6e 67  n Generic String
36e00 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
36e10 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
36e20 63 20 73 74 72 69 6e 67 20 46 6f 72 44 69 73 70  c string ForDisp
36e30 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lay(..          
36e40 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a    object value..
36e50 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
36e60 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36e70 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
36e80 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
36e90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
36ea0 20 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a 20 20   "<null>";....  
36eb0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
36ec0 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20   result;..      
36ed0 20 20 20 20 20 20 54 79 70 65 20 74 79 70 65 20        Type type 
36ee0 3d 20 76 61 6c 75 65 2e 47 65 74 54 79 70 65 28  = value.GetType(
36ef0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
36f00 20 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79    if (type == ty
36f10 70 65 6f 66 28 58 6d 6c 45 6c 65 6d 65 6e 74 29  peof(XmlElement)
36f20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
36f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36f40 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 65 6c 65    XmlElement ele
36f50 6d 65 6e 74 20 3d 20 28 58 6d 6c 45 6c 65 6d 65  ment = (XmlEleme
36f60 6e 74 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  nt)value;....   
36f70 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
36f80 75 6c 74 20 3d 20 65 6c 65 6d 65 6e 74 2e 4f 75  ult = element.Ou
36f90 74 65 72 58 6d 6c 3b 0d 0a 20 20 20 20 20 20 20  terXml;..       
36fa0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
36fb0 20 20 20 20 65 6c 73 65 20 69 66 20 28 74 79 70      else if (typ
36fc0 65 20 3d 3d 20 74 79 70 65 6f 66 28 56 65 72 73  e == typeof(Vers
36fd0 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ion))..         
36fe0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
36ff0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 65        Version ve
37000 72 73 69 6f 6e 20 3d 20 28 56 65 72 73 69 6f 6e  rsion = (Version
37010 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  )value;....     
37020 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
37030 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  t = String.Forma
37040 74 28 22 76 7b 30 7d 22 2c 20 76 65 72 73 69 6f  t("v{0}", versio
37050 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n);..           
37060 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
37070 65 6c 73 65 20 69 66 20 28 74 79 70 65 20 3d 3d  else if (type ==
37080 20 74 79 70 65 6f 66 28 50 72 6f 63 65 73 73 53   typeof(ProcessS
37090 74 61 72 74 49 6e 66 6f 29 29 0d 0a 20 20 20 20  tartInfo))..    
370a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
370b0 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 63 65             Proce
370c0 73 73 53 74 61 72 74 49 6e 66 6f 20 73 74 61 72  ssStartInfo star
370d0 74 49 6e 66 6f 20 3d 20 28 50 72 6f 63 65 73 73  tInfo = (Process
370e0 53 74 61 72 74 49 6e 66 6f 29 76 61 6c 75 65 3b  StartInfo)value;
370f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37100 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53 74 72      result = Str
37110 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
37120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37130 20 22 66 69 6c 65 4e 61 6d 65 20 3d 20 7b 30 7d   "fileName = {0}
37140 2c 20 61 72 67 75 6d 65 6e 74 73 20 3d 20 7b 31  , arguments = {1
37150 7d 2c 20 77 6f 72 6b 69 6e 67 44 69 72 65 63 74  }, workingDirect
37160 6f 72 79 20 3d 20 7b 32 7d 2c 20 22 20 2b 0d 0a  ory = {2}, " +..
37170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37180 20 20 20 20 22 75 73 65 53 68 65 6c 6c 45 78 65      "useShellExe
37190 63 75 74 65 20 3d 20 7b 33 7d 2c 20 72 65 64 69  cute = {3}, redi
371a0 72 65 63 74 53 74 61 6e 64 61 72 64 4f 75 74 70  rectStandardOutp
371b0 75 74 20 3d 20 7b 34 7d 2c 20 22 20 2b 0d 0a 20  ut = {4}, " +.. 
371c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371d0 20 20 20 22 72 65 64 69 72 65 63 74 53 74 61 6e     "redirectStan
371e0 64 61 72 64 45 72 72 6f 72 20 3d 20 7b 35 7d 22  dardError = {5}"
371f0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20  , ForDisplay(.. 
37200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37210 20 20 20 73 74 61 72 74 49 6e 66 6f 2e 46 69 6c     startInfo.Fil
37220 65 4e 61 6d 65 29 2c 20 46 6f 72 44 69 73 70 6c  eName), ForDispl
37230 61 79 28 73 74 61 72 74 49 6e 66 6f 2e 41 72 67  ay(startInfo.Arg
37240 75 6d 65 6e 74 73 29 2c 0d 0a 20 20 20 20 20 20  uments),..      
37250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
37260 72 44 69 73 70 6c 61 79 28 73 74 61 72 74 49 6e  rDisplay(startIn
37270 66 6f 2e 57 6f 72 6b 69 6e 67 44 69 72 65 63 74  fo.WorkingDirect
37280 6f 72 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  ory), ForDisplay
37290 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
372a0 20 20 20 20 20 20 20 73 74 61 72 74 49 6e 66 6f         startInfo
372b0 2e 55 73 65 53 68 65 6c 6c 45 78 65 63 75 74 65  .UseShellExecute
372c0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a  ), ForDisplay(..
372d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
372e0 20 20 20 20 73 74 61 72 74 49 6e 66 6f 2e 52 65      startInfo.Re
372f0 64 69 72 65 63 74 53 74 61 6e 64 61 72 64 4f 75  directStandardOu
37300 74 70 75 74 29 2c 20 46 6f 72 44 69 73 70 6c 61  tput), ForDispla
37310 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
37320 20 20 20 20 20 20 20 20 73 74 61 72 74 49 6e 66          startInf
37330 6f 2e 52 65 64 69 72 65 63 74 53 74 61 6e 64 61  o.RedirectStanda
37340 72 64 45 72 72 6f 72 29 29 3b 20 2f 2a 20 52 45  rdError)); /* RE
37350 43 55 52 53 49 56 45 20 2a 2f 0d 0a 20 20 20 20  CURSIVE */..    
37360 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
37370 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
37380 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 50  type == typeof(P
37390 72 6f 63 65 73 73 29 29 0d 0a 20 20 20 20 20 20  rocess))..      
373a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
373b0 20 20 20 20 20 20 20 20 20 50 72 6f 63 65 73 73           Process
373c0 20 70 72 6f 63 65 73 73 20 3d 20 28 50 72 6f 63   process = (Proc
373d0 65 73 73 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20  ess)value;....  
373e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
373f0 73 75 6c 74 20 3d 20 70 72 6f 63 65 73 73 2e 49  sult = process.I
37400 64 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20  d.ToString();.. 
37410 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
37420 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
37430 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f  f (type == typeo
37440 66 28 44 61 74 61 52 65 63 65 69 76 65 64 45 76  f(DataReceivedEv
37450 65 6e 74 41 72 67 73 29 29 0d 0a 20 20 20 20 20  entArgs))..     
37460 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
37470 20 20 20 20 20 20 20 20 20 20 44 61 74 61 52 65            DataRe
37480 63 65 69 76 65 64 45 76 65 6e 74 41 72 67 73 20  ceivedEventArgs 
37490 65 76 65 6e 74 41 72 67 73 20 3d 20 28 44 61 74  eventArgs = (Dat
374a0 61 52 65 63 65 69 76 65 64 45 76 65 6e 74 41 72  aReceivedEventAr
374b0 67 73 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  gs)value;....   
374c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
374d0 75 6c 74 20 3d 20 46 6f 72 44 69 73 70 6c 61 79  ult = ForDisplay
374e0 28 65 76 65 6e 74 41 72 67 73 2e 44 61 74 61 29  (eventArgs.Data)
374f0 3b 20 2f 2a 20 52 45 43 55 52 53 49 56 45 20 2a  ; /* RECURSIVE *
37500 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  /..            }
37510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
37520 73 65 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74  se if (type == t
37530 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73 74  ypeof(MockRegist
37540 72 79 4b 65 79 29 29 0d 0a 20 20 20 20 20 20 20  ryKey))..       
37550 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
37560 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
37570 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 28 4d  stryKey key = (M
37580 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 29 76  ockRegistryKey)v
37590 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alue;....       
375a0 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
375b0 3d 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79  = ForDisplay(key
375c0 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 20 2f 2a  .ToString()); /*
375d0 20 52 45 43 55 52 53 49 56 45 20 2a 2f 0d 0a 20   RECURSIVE */.. 
375e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
375f0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
37600 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
37610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
37620 65 73 75 6c 74 20 3d 20 76 61 6c 75 65 2e 54 6f  esult = value.To
37630 53 74 72 69 6e 67 28 29 3b 0d 0a 0d 0a 20 20 20  String();....   
37640 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
37650 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3d  (result.Length =
37660 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
37670 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
37680 20 22 3c 65 6d 70 74 79 3e 22 3b 0d 0a 0d 0a 20   "<empty>";.... 
37690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
376a0 66 20 28 74 79 70 65 2e 49 73 53 75 62 63 6c 61  f (type.IsSubcla
376b0 73 73 4f 66 28 74 79 70 65 6f 66 28 45 78 63 65  ssOf(typeof(Exce
376c0 70 74 69 6f 6e 29 29 29 0d 0a 20 20 20 20 20 20  ption)))..      
376d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
376e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376f0 20 72 65 73 75 6c 74 20 3d 20 53 74 72 69 6e 67   result = String
37700 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
37710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37720 20 20 22 7b 30 7d 7b 31 7d 7b 30 7d 22 2c 20 45    "{0}{1}{0}", E
37730 6e 76 69 72 6f 6e 6d 65 6e 74 2e 4e 65 77 4c 69  nvironment.NewLi
37740 6e 65 2c 20 72 65 73 75 6c 74 29 3b 0d 0a 20 20  ne, result);..  
37750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
37760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37770 20 65 6c 73 65 20 69 66 20 28 21 74 79 70 65 2e   else if (!type.
37780 49 73 53 75 62 63 6c 61 73 73 4f 66 28 74 79 70  IsSubclassOf(typ
37790 65 6f 66 28 56 61 6c 75 65 54 79 70 65 29 29 29  eof(ValueType)))
377a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
377b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
377c0 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
377d0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
377e0 22 5c 22 7b 30 7d 5c 22 22 2c 20 72 65 73 75 6c  "\"{0}\"", resul
377f0 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t);..           
37800 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
37810 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
37820 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
37830 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  lt;..        }..
37840 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
37850 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
37860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
378a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
378b0 20 23 72 65 67 69 6f 6e 20 41 73 73 65 6d 62 6c   #region Assembl
378c0 79 20 41 74 74 72 69 62 75 74 65 20 48 61 6e 64  y Attribute Hand
378d0 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 75  ling..        pu
378e0 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
378f0 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79 43 6f  ng GetAssemblyCo
37900 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20 20  nfiguration(..  
37910 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
37920 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20  ly assembly..   
37930 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
37940 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
37950 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20     if (assembly 
37960 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
37970 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
37980 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
37990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
379a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
379b0 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c       if (assembl
379c0 79 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a 20 20  y.IsDefined(..  
379d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
379e0 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
379f0 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75  (AssemblyConfigu
37a00 72 61 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29  rationAttribute)
37a10 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20  , false))..     
37a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
37a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37a40 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
37a50 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41  lyConfigurationA
37a60 74 74 72 69 62 75 74 65 20 63 6f 6e 66 69 67 75  ttribute configu
37a70 72 61 74 69 6f 6e 20 3d 0d 0a 20 20 20 20 20 20  ration =..      
37a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a90 20 20 20 20 20 20 28 41 73 73 65 6d 62 6c 79 43        (AssemblyC
37aa0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72  onfigurationAttr
37ab0 69 62 75 74 65 29 0d 0a 20 20 20 20 20 20 20 20  ibute)..        
37ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ad0 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 47 65 74      assembly.Get
37ae0 43 75 73 74 6f 6d 41 74 74 72 69 62 75 74 65 73  CustomAttributes
37af0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
37b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b10 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62     typeof(Assemb
37b20 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41  lyConfigurationA
37b30 74 74 72 69 62 75 74 65 29 2c 0d 0a 20 20 20 20  ttribute),..    
37b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b50 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73              fals
37b60 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  e)[0];....      
37b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b80 20 20 72 65 74 75 72 6e 20 63 6f 6e 66 69 67 75    return configu
37b90 72 61 74 69 6f 6e 2e 43 6f 6e 66 69 67 75 72 61  ration.Configura
37ba0 74 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  tion;..         
37bb0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
37bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
37bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37be0 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
37bf0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
37c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
37c10 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
37c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
37c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
37c40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
37c50 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
37c60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
37c70 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
37c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
37cc0 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
37cd0 69 63 20 73 74 72 69 6e 67 20 47 65 74 41 73 73  ic string GetAss
37ce0 65 6d 62 6c 79 54 69 74 6c 65 28 0d 0a 20 20 20  emblyTitle(..   
37cf0 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
37d00 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20  y assembly..    
37d10 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
37d20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
37d30 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21    if (assembly !
37d40 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
37d50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
37d60 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
37d70 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
37d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d90 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79      if (assembly
37da0 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a 20 20 20  .IsDefined(..   
37db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37dc0 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
37dd0 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74  AssemblyTitleAtt
37de0 72 69 62 75 74 65 29 2c 20 66 61 6c 73 65 29 29  ribute), false))
37df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37e00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
37e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e20 20 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74   AssemblyTitleAt
37e30 74 72 69 62 75 74 65 20 74 69 74 6c 65 20 3d 0d  tribute title =.
37e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37e50 20 20 20 20 20 20 20 20 20 20 20 20 20 28 41 73               (As
37e60 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69  semblyTitleAttri
37e70 62 75 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bute)..         
37e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e90 20 20 20 61 73 73 65 6d 62 6c 79 2e 47 65 74 43     assembly.GetC
37ea0 75 73 74 6f 6d 41 74 74 72 69 62 75 74 65 73 28  ustomAttributes(
37eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ed0 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62 6c    typeof(Assembl
37ee0 79 54 69 74 6c 65 41 74 74 72 69 62 75 74 65 29  yTitleAttribute)
37ef0 2c 20 66 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a  , false)[0];....
37f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f10 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
37f20 69 74 6c 65 2e 54 69 74 6c 65 3b 0d 0a 20 20 20  itle.Title;..   
37f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f40 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
37f50 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
37f60 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20         catch..  
37f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
37f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37f90 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
37fa0 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
37fb0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
37fc0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
37fd0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
37fe0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
37ff0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
38000 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
38010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38050 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
38060 72 65 67 69 6f 6e 20 2e 4e 45 54 20 46 72 61 6d  region .NET Fram
38070 65 77 6f 72 6b 20 48 61 6e 64 6c 69 6e 67 0d 0a  ework Handling..
38080 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
38090 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
380a0 74 46 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65  tFrameworkRootKe
380b0 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
380c0 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
380d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
380e0 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20  ool wow64..     
380f0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
38100 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
38110 20 72 65 74 75 72 6e 20 52 65 67 69 73 74 72 79   return Registry
38120 48 65 6c 70 65 72 2e 4a 6f 69 6e 4b 65 79 4e 61  Helper.JoinKeyNa
38130 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mes(..          
38140 20 20 20 20 20 20 47 65 74 52 6f 6f 74 4b 65 79        GetRootKey
38150 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f  Name(perUser, wo
38160 77 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  w64),..         
38170 20 20 20 20 20 20 20 22 4d 69 63 72 6f 73 6f 66         "Microsof
38180 74 22 2c 20 22 2e 4e 45 54 46 72 61 6d 65 77 6f  t", ".NETFramewo
38190 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rk");..        }
381a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
381b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
381c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
381d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
381e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
381f0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
38200 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
38210 72 69 6e 67 20 47 65 74 46 72 61 6d 65 77 6f 72  ring GetFramewor
38220 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  kKeyName(..     
38230 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72         string fr
38240 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20  ameworkName,..  
38250 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
38260 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  n frameworkVersi
38270 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
38280 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d   string platform
38290 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
382a0 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
382b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
382c0 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20  ol wow64..      
382d0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
382e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
382f0 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
38300 56 65 72 73 69 6f 6e 53 74 72 69 6e 67 20 3d 20  VersionString = 
38310 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
38320 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20  n != null) ?..  
38330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 76                "v
38340 22 20 2b 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  " + frameworkVer
38350 73 69 6f 6e 2e 54 6f 53 74 72 69 6e 67 28 29 20  sion.ToString() 
38360 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  : null;....     
38370 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
38380 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4a 6f 69  gistryHelper.Joi
38390 6e 4b 65 79 4e 61 6d 65 73 28 0d 0a 20 20 20 20  nKeyNames(..    
383a0 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 52              GetR
383b0 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 73  ootKeyName(perUs
383c0 65 72 2c 20 77 6f 77 36 34 29 2c 20 22 4d 69 63  er, wow64), "Mic
383d0 72 6f 73 6f 66 74 22 2c 20 66 72 61 6d 65 77 6f  rosoft", framewo
383e0 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rkName,..       
383f0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
38400 72 6b 56 65 72 73 69 6f 6e 53 74 72 69 6e 67 2c  rkVersionString,
38410 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d   platformName);.
38420 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
38430 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
38440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
38480 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
38490 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
384a0 65 74 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  etImageRuntimeVe
384b0 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  rsion(..        
384c0 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
384d0 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
384e0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
384f0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
38500 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
38510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
38520 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79  ssembly assembly
38530 20 3d 20 41 73 73 65 6d 62 6c 79 2e 52 65 66 6c   = Assembly.Refl
38540 65 63 74 69 6f 6e 4f 6e 6c 79 4c 6f 61 64 46 72  ectionOnlyLoadFr
38550 6f 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  om(..           
38560 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
38570 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  e); /* throw */.
38580 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
38590 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20     if (assembly 
385a0 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
385b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
385c0 74 75 72 6e 20 61 73 73 65 6d 62 6c 79 2e 49 6d  turn assembly.Im
385d0 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
385e0 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
385f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
38600 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20  atch..          
38610 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
38620 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
38630 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
38640 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
38650 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
38660 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
38670 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
38680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
386a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
386b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
386c0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
386d0 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
386e0 74 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74  tFrameworkDirect
386f0 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
38700 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
38710 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
38720 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
38730 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
38740 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
38750 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
38760 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
38770 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
38780 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
38790 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
387a0 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20  l verbose..     
387b0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
387c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
387d0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
387e0 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
387f0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
38800 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
38810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
38820 6f 74 4b 65 79 2c 20 47 65 74 46 72 61 6d 65 77  otKey, GetFramew
38830 6f 72 6b 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70  orkRootKeyName(p
38840 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 2c 0d  erUser, wow64),.
38850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38860 20 20 20 20 20 66 61 6c 73 65 2c 20 77 68 61 74       false, what
38870 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
38880 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
38890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
388a0 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
388b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
388c0 20 20 20 20 72 65 74 75 72 6