def saveMongoService(json): conn, collection = utils.conn(host=masarconfig.get('mongodb', 'host'), port=masarconfig.get('mongodb', 'port'), db=masarconfig.get('mongodb', 'database')) for conf in json['configs']: params = { "desc": conf['config_desc'], "system": conf['system'], "status": "active" } try: saveconfig(conn, collection, conf['config_name'], **params) except: # TODO: This should be more specific print("configuration name (%s) exists already." % (conf['config_name'])) pvgroups = {} # {"pvgname":["pv1","pv2"]} for pvgroup in json['pvgroups']: pvlist = [] pv_file = pvgroup['pvlist'] if os.path.exists(pv_file): with open(pv_file) as file: for line in file: pvlist.append(line.strip()) pvgroups[pvgroup['name']] = pvlist for conf in json['pvg2config']: pvs = [] for pvgroup in conf['pvgroups']: pvs = pvs + pvgroups[pvgroup] updateconfig(conn, collection, conf['config_name'], pvlist={"names": pvs})
def MONGODB_TEST_SETUP(self): self.conn, collection = utils.conn(host=masarconfig.get('mongodb', 'host'), port=masarconfig.get('mongodb', 'port'), db=masarconfig.get('mongodb', 'database')) self.conn.drop_database(masarconfig.get('mongodb', 'database')) name = "SR_All_20140421" params = {"desc": "SR daily SCR setpoint without IS kick and septum: SR and RF", "system": "SR", "status": "active", "version": 20140421, } newid = saveconfig(self.conn, collection, name, **params) # res0 = retrieveconfig(self.conn, collection, name) pvs = ["masarExample0000", "masarExample0001", # "masarExampleBoUninit", "masarExampleMbboUninit", "masarExample0002", "masarExample0003", "masarExample0004", "masarExampleCharArray", "masarExampleShortArray", "masarExampleLongArray", "masarExampleStringArray", "masarExampleFloatArray", "masarExampleDoubleArray", "masarExampleMbboUninitTest"] # TODO: Save will fail if list contains only 1 PV updateconfig(self.conn, collection, name, pvlist={"names": pvs}) # res3 = retrieveconfig(self.conn, collection, name, withpvs=True) return self.conn
def saveMongoService(json): conn, collection = utils.conn(host=masarconfig.get('mongodb', 'host'), port=masarconfig.get('mongodb', 'port'), db=masarconfig.get('mongodb', 'database')) for conf in json['configs']: params = {"desc": conf['config_desc'], "system": conf['system'], "status": "active"} try: saveconfig(conn, collection, conf['config_name'], **params) except: # TODO: This should be more specific print ("configuration name (%s) exists already." % (conf['config_name'])) pvgroups = {} # {"pvgname":["pv1","pv2"]} for pvgroup in json['pvgroups']: pvlist = [] pv_file = pvgroup['pvlist'] if os.path.exists(pv_file): with open(pv_file) as file: for line in file: pvlist.append(line.strip()) pvgroups[pvgroup['name']] = pvlist for conf in json['pvg2config']: pvs = [] for pvgroup in conf['pvgroups']: pvs = pvs + pvgroups[pvgroup] updateconfig(conn, collection, conf['config_name'], pvlist={"names": pvs})
def mongoSetUp(): # DB SETUP conn, collection = utils.conn(host=masarconfig.get('mongodb', 'host'), port=masarconfig.get('mongodb', 'port'), db=masarconfig.get('mongodb', 'database')) conn.drop_database(masarconfig.get('mongodb', 'database')) name = "SR_All_20140421" params = { "desc": "SR daily SCR setpoint without IS kick and septum: SR and RF", "system": "SR", "status": "active", "version": 20140421, } newid = saveconfig(conn, collection, name, **params) # res0 = retrieveconfig(self.conn, collection, name) pvs = [ "masarExample0000", "masarExample0001", # "masarExampleBoUninit", "masarExampleMbboUninit", "masarExample0002", "masarExample0003", "masarExample0004", "masarExampleCharArray", "masarExampleShortArray", "masarExampleLongArray", "masarExampleStringArray", "masarExampleFloatArray", "masarExampleDoubleArray", "masarExampleMbboUninitTest" ] # TODO: Save will fail if list contains only 1 PV updateconfig(conn, collection, name, pvlist={"names": pvs})
def testConfiguration(self): channel = 'masarService' self.mc = masarClient.client(channelname=channel) # DB SETUP self.conn, collection = utils.conn( host=masarconfig.get('mongodb', 'host'), port=masarconfig.get('mongodb', 'port'), db=masarconfig.get('mongodb', 'database')) self.conn.drop_database(masarconfig.get('mongodb', 'database')) name = "SR_All_20140421" test_status = 'active' test_version = 20140421 test_system = 'SR' test_desc = "SR daily SCR setpoint without IS kick and septum: SR and RF" params = { "desc": test_desc, "system": test_system, "status": test_status, "version": test_version, } newid = saveconfig(self.conn, collection, name, **params) self.assertNotEqual(None, newid) res0 = retrieveconfig(self.conn, collection, name) self.assertEqual(test_status, res0[0]['status']) self.assertEqual(1, res0[0]['configidx']) self.assertEqual(name, res0[0]['name']) self.assertEqual(test_system, res0[0]['system']) self.assertNotEqual(None, res0[0]['created_on']) # The following 2 tests are to confirm the date string is in the correct format self.assertEqual(3, len(res0[0]['created_on'].split('-'))) self.assertEqual(3, len(res0[0]['created_on'].split(':'))) self.assertEqual(test_version, res0[0]['version']) self.assertEqual(test_desc, res0[0]['desc']) pvs = ["masarExampleDoubleArray"] pvlist = {"names": pvs} res = updateconfig(self.conn, collection, name, pvlist=pvlist) self.assertEqual(True, res) res3 = retrieveconfig(self.conn, collection, name, withpvs=True) self.assertEqual(test_status, res3[0]['status']) self.assertEqual(1, res3[0]['configidx']) self.assertEqual(name, res3[0]['name']) self.assertEqual(test_system, res3[0]['system']) self.assertNotEqual(None, res3[0]['created_on']) # The following 2 tests are to confirm the date string is in the correct format self.assertEqual(3, len(res3[0]['created_on'].split('-'))) self.assertEqual(3, len(res3[0]['created_on'].split(':'))) self.assertEqual(test_version, res3[0]['version']) self.assertEqual(test_desc, res3[0]['desc']) self.assertEqual(pvlist, res3[0]['pvlist']) self.assertNotEqual(None, res3[0]['updated_on']) # The following 2 tests are to confirm the date string is in the correct format self.assertEqual(3, len(res3[0]['updated_on'].split('-'))) self.assertEqual(3, len(res3[0]['updated_on'].split(':'))) # drop DB self.conn.drop_database(masarconfig.get('mongodb', 'database')) utils.close(self.conn)
def testConfiguration(self): channel = 'masarService' self.mc = masarClient.client(channelname=channel) # DB SETUP self.conn, collection = utils.conn(host=masarconfig.get('mongodb', 'host'), port=masarconfig.get('mongodb', 'port'), db=masarconfig.get('mongodb', 'database')) self.conn.drop_database(masarconfig.get('mongodb', 'database')) name = "SR_All_20140421" test_status = 'active' test_version = 20140421 test_system = 'SR' test_desc = "SR daily SCR setpoint without IS kick and septum: SR and RF" params = {"desc": test_desc, "system": test_system, "status": test_status, "version": test_version, } newid = saveconfig(self.conn, collection, name, **params) self.assertNotEqual(None, newid) res0 = retrieveconfig(self.conn, collection, name) self.assertEqual(test_status, res0[0]['status']) self.assertEqual(1, res0[0]['configidx']) self.assertEqual(name, res0[0]['name']) self.assertEqual(test_system, res0[0]['system']) self.assertNotEqual(None, res0[0]['created_on']) # The following 2 tests are to confirm the date string is in the correct format self.assertEqual(3, len(res0[0]['created_on'].split('-'))) self.assertEqual(3, len(res0[0]['created_on'].split(':'))) self.assertEqual(test_version, res0[0]['version']) self.assertEqual(test_desc, res0[0]['desc']) pvs = ["masarExampleDoubleArray"] pvlist = {"names": pvs} res = updateconfig(self.conn, collection, name, pvlist=pvlist) self.assertEqual(True, res) res3 = retrieveconfig(self.conn, collection, name, withpvs=True) self.assertEqual(test_status, res3[0]['status']) self.assertEqual(1, res3[0]['configidx']) self.assertEqual(name, res3[0]['name']) self.assertEqual(test_system, res3[0]['system']) self.assertNotEqual(None, res3[0]['created_on']) # The following 2 tests are to confirm the date string is in the correct format self.assertEqual(3, len(res3[0]['created_on'].split('-'))) self.assertEqual(3, len(res3[0]['created_on'].split(':'))) self.assertEqual(test_version, res3[0]['version']) self.assertEqual(test_desc, res3[0]['desc']) self.assertEqual(pvlist, res3[0]['pvlist']) self.assertNotEqual(None,res3[0]['updated_on']) # The following 2 tests are to confirm the date string is in the correct format self.assertEqual(3, len(res3[0]['updated_on'].split('-'))) self.assertEqual(3, len(res3[0]['updated_on'].split(':'))) # drop DB self.conn.drop_database(masarconfig.get('mongodb', 'database')) utils.close(self.conn)
def testUpdateconfig(self): """""" name = "SR_All_20140421" params = { "desc": "SR daily SCR setpoint without IS kick and septum: SR and RF", "system": "SR", "status": "active", "version": 20140421, } with self.assertRaises(RuntimeError) as context: updateconfig(self.conn, self.collection, None) self.assertEqual(context.exception.message, "Cannot identify configuration to update.") time.sleep(1) with self.assertRaises(RuntimeError) as context: updateconfig(self.conn, self.collection, name) self.assertEqual(context.exception.message, "Wrong Mongo document for %s" % name) newid = saveconfig(self.conn, self.collection, name, **params) res0 = retrieveconfig(self.conn, self.collection, name) self.assertTrue( updateconfig(self.conn, self.collection, name, status="inactive")) res1 = retrieveconfig(self.conn, self.collection, name) self.assertEqual(newid, res0[0]["_id"]) self.assertEqual(newid, res1[0]["_id"]) self.assertEqual(res0[0]["status"], "active") self.assertEqual(res1[0]["status"], "inactive") self.assertEqual(res1[0]["created_on"], res0[0]["created_on"]) time.sleep(1) # delay required for below updated_on inequality test self.assertTrue( updateconfig(self.conn, self.collection, name, status="active")) res2 = retrieveconfig(self.conn, self.collection, name) self.assertEqual(res2[0]["status"], "active") self.assertNotEqual(res1[0]["updated_on"], res2[0]["updated_on"]) self.assertEqual(res1[0]["created_on"], res2[0]["created_on"]) self.assertEqual(res1[0]["created_on"], res0[0]["created_on"]) pvs = [ "RF{Osc:1}Freq:I", "SR-RF{CFC:D}E:Fb-SP", "SR-RF{CFC:D}Phs:Fb-SP", "SR-RF{CFC:D}Tuner:PhaOff-SP", "SR:C01-MG{PS:BT1A}I:Sp1-SP", "SR:C01-MG{PS:BT1A}I:Sp2-SP", "SR:C01-MG{PS:CH1B}I:Sp1-SP", "SR:C01-MG{PS:CH1B}I:Sp2-SP", "SR:C01-MG{PS:CH2B}I:Sp1-SP", "SR:C01-MG{PS:CH2B}I:Sp2-SP", "SR:C01-MG{PS:CL1A}I:Sp1-SP", "SR:C01-MG{PS:CL1A}I:Sp2-SP", "SR:C01-MG{PS:CL2A}I:Sp1-SP", "SR:C01-MG{PS:CL2A}I:Sp2-SP", "SR:C01-MG{PS:CM1A}I:Sp1-SP", "SR:C01-MG{PS:CM1A}I:Sp2-SP", "SR:C01-MG{PS:CM1B}I:Sp1-SP", "SR:C01-MG{PS:CM1B}I:Sp2-SP", "SR:C01-MG{PS:QH1B}I:Sp1-SP", "SR:C01-MG{PS:QH2B}I:Sp1-SP", "SR:C01-MG{PS:QH3B}I:Sp1-SP", "SR:C01-MG{PS:QL1A}I:Sp1-SP", "SR:C01-MG{PS:QL2A}I:Sp1-SP", "SR:C01-MG{PS:QL3A}I:Sp1-SP", "SR:C01-MG{PS:QM1A}I:Sp1-SP", "SR:C01-MG{PS:QM1B}I:Sp1-SP", "SR:C01-MG{PS:QM2A}I:Sp1-SP", "SR:C01-MG{PS:QM2B}I:Sp1-SP", "SR:C01-MG{PS:SH4-P2}I:Sp1-SP", "SR:C01-MG{PS:SM1A-P2}I:Sp1-SP", "SR:C01-MG{PS:SQKM1A}I:Sp1-SP", "SR:C02-MG{PS:BT1A}I:Sp1-SP", "SR:C02-MG{PS:BT1A}I:Sp2-SP", "SR:C02-MG{PS:CH1A}I:Sp1-SP", "SR:C02-MG{PS:CH1A}I:Sp2-SP", "SR:C02-MG{PS:CH2A}I:Sp1-SP", "SR:C02-MG{PS:CH2A}I:Sp2-SP", "SR:C02-MG{PS:CL1B}I:Sp1-SP", "SR:C02-MG{PS:CL1B}I:Sp2-SP", "SR:C02-MG{PS:CL2B}I:Sp1-SP", "SR:C02-MG{PS:CL2B}I:Sp2-SP", "SR:C02-MG{PS:CM1A}I:Sp1-SP", "SR:C02-MG{PS:CM1A}I:Sp2-SP", "SR:C02-MG{PS:CM1B}I:Sp1-SP", "SR:C02-MG{PS:CM1B}I:Sp2-SP", "SR:C02-MG{PS:QH1A}I:Sp1-SP", "SR:C02-MG{PS:QH2A}I:Sp1-SP", "SR:C02-MG{PS:QH3A}I:Sp1-SP", "SR:C02-MG{PS:QL1B}I:Sp1-SP", "SR:C02-MG{PS:QL2B}I:Sp1-SP", "SR:C02-MG{PS:QL3B}I:Sp1-SP", "SR:C02-MG{PS:QM1A}I:Sp1-SP", "SR:C02-MG{PS:QM1B}I:Sp1-SP", "SR:C02-MG{PS:QM2A}I:Sp1-SP", "SR:C02-MG{PS:QM2B}I:Sp1-SP", "SR:C02-MG{PS:SM1B-P2}I:Sp1-SP", "SR:C02-MG{PS:SM2B-P2}I:Sp1-SP", "SR:C02-MG{PS:SQKH1A}I:Sp1-SP", "SR:C03-MG{PS:BT1A}I:Sp1-SP", "SR:C03-MG{PS:BT1A}I:Sp2-SP", "SR:C03-MG{PS:CH1B}I:Sp1-SP", "SR:C03-MG{PS:CH1B}I:Sp2-SP", "SR:C03-MG{PS:CH2B}I:Sp1-SP", "SR:C03-MG{PS:CH2B}I:Sp2-SP", "SR:C03-MG{PS:CL1A}I:Sp1-SP", "SR:C03-MG{PS:CL1A}I:Sp2-SP", "SR:C03-MG{PS:CL2A}I:Sp1-SP", "SR:C03-MG{PS:CL2A}I:Sp2-SP", "SR:C03-MG{PS:CM1A}I:Sp1-SP", "SR:C03-MG{PS:CM1A}I:Sp2-SP", "SR:C03-MG{PS:CM1B}I:Sp1-SP", "SR:C03-MG{PS:CM1B}I:Sp2-SP", "SR:C03-MG{PS:D-SP}I:Sp1-SP", "SR:C03-MG{PS:QH1B}I:Sp1-SP", "SR:C03-MG{PS:QH2B}I:Sp1-SP", "SR:C03-MG{PS:QH3B}I:Sp1-SP", "SR:C03-MG{PS:QL1A}I:Sp1-SP", "SR:C03-MG{PS:QL2A}I:Sp1-SP", "SR:C03-MG{PS:QL3A}I:Sp1-SP", "SR:C03-MG{PS:QM1A}I:Sp1-SP", "SR:C03-MG{PS:QM1B}I:Sp1-SP", "SR:C03-MG{PS:QM2A}I:Sp1-SP", "SR:C03-MG{PS:QM2B}I:Sp1-SP", "SR:C03-MG{PS:SL2-P2}I:Sp1-SP", "SR:C03-MG{PS:SL3-P2}I:Sp1-SP", "SR:C03-MG{PS:SQKM1A}I:Sp1-SP", "SR:C04-MG{PS:BT1A}I:Sp1-SP", "SR:C04-MG{PS:BT1A}I:Sp2-SP", "SR:C04-MG{PS:CH1A}I:Sp1-SP", "SR:C04-MG{PS:CH1A}I:Sp2-SP", "SR:C04-MG{PS:CH2A}I:Sp1-SP", "SR:C04-MG{PS:CH2A}I:Sp2-SP", "SR:C04-MG{PS:CL1B}I:Sp1-SP", "SR:C04-MG{PS:CL1B}I:Sp2-SP", "SR:C04-MG{PS:CL2B}I:Sp1-SP", "SR:C04-MG{PS:CL2B}I:Sp2-SP", "SR:C04-MG{PS:CM1A}I:Sp1-SP", "SR:C04-MG{PS:CM1A}I:Sp2-SP", "SR:C04-MG{PS:CM1B}I:Sp1-SP", "SR:C04-MG{PS:CM1B}I:Sp2-SP", "SR:C04-MG{PS:QH1A}I:Sp1-SP", "SR:C04-MG{PS:QH2A}I:Sp1-SP", "SR:C04-MG{PS:QH3A}I:Sp1-SP", "SR:C04-MG{PS:QL1B}I:Sp1-SP", "SR:C04-MG{PS:QL2B}I:Sp1-SP", "SR:C04-MG{PS:QL3B}I:Sp1-SP", "SR:C04-MG{PS:QM1A}I:Sp1-SP", "SR:C04-MG{PS:QM1B}I:Sp1-SP", "SR:C04-MG{PS:QM2A}I:Sp1-SP", "SR:C04-MG{PS:QM2B}I:Sp1-SP", "SR:C04-MG{PS:SL1-P2}I:Sp1-SP", "SR:C04-MG{PS:SQKH1A}I:Sp1-SP", "SR:C05-MG{PS:BT1A}I:Sp1-SP", "SR:C05-MG{PS:BT1A}I:Sp2-SP", "SR:C05-MG{PS:CH1B}I:Sp1-SP", "SR:C05-MG{PS:CH1B}I:Sp2-SP", "SR:C05-MG{PS:CH2B}I:Sp1-SP", "SR:C05-MG{PS:CH2B}I:Sp2-SP", "SR:C05-MG{PS:CL1A}I:Sp1-SP", "SR:C05-MG{PS:CL1A}I:Sp2-SP", "SR:C05-MG{PS:CL2A}I:Sp1-SP", "SR:C05-MG{PS:CL2A}I:Sp2-SP", "SR:C05-MG{PS:CM1A}I:Sp1-SP", "SR:C05-MG{PS:CM1A}I:Sp2-SP", "SR:C05-MG{PS:CM1B}I:Sp1-SP", "SR:C05-MG{PS:CM1B}I:Sp2-SP", "SR:C05-MG{PS:QH1B}I:Sp1-SP", "SR:C05-MG{PS:QH2B}I:Sp1-SP", "SR:C05-MG{PS:QH3B}I:Sp1-SP", "SR:C05-MG{PS:QL1A}I:Sp1-SP", "SR:C05-MG{PS:QL2A}I:Sp1-SP", "SR:C05-MG{PS:QL3A}I:Sp1-SP", "SR:C05-MG{PS:QM1A}I:Sp1-SP", "SR:C05-MG{PS:QM1B}I:Sp1-SP", "SR:C05-MG{PS:QM2A}I:Sp1-SP", "SR:C05-MG{PS:QM2B}I:Sp1-SP", "SR:C05-MG{PS:SQKM1A}I:Sp1-SP", "SR:C06-MG{PS:BT1A}I:Sp1-SP", "SR:C06-MG{PS:BT1A}I:Sp2-SP", "SR:C06-MG{PS:CH1A}I:Sp1-SP", "SR:C06-MG{PS:CH1A}I:Sp2-SP", "SR:C06-MG{PS:CH2A}I:Sp1-SP", "SR:C06-MG{PS:CH2A}I:Sp2-SP", "SR:C06-MG{PS:CL1B}I:Sp1-SP", "SR:C06-MG{PS:CL1B}I:Sp2-SP", "SR:C06-MG{PS:CL2B}I:Sp1-SP", "SR:C06-MG{PS:CL2B}I:Sp2-SP", "SR:C06-MG{PS:CM1A}I:Sp1-SP", "SR:C06-MG{PS:CM1A}I:Sp2-SP", "SR:C06-MG{PS:CM1B}I:Sp1-SP", "SR:C06-MG{PS:CM1B}I:Sp2-SP", "SR:C06-MG{PS:QH1A}I:Sp1-SP", "SR:C06-MG{PS:QH2A}I:Sp1-SP", "SR:C06-MG{PS:QH3A}I:Sp1-SP", "SR:C06-MG{PS:QL1B}I:Sp1-SP", "SR:C06-MG{PS:QL2B}I:Sp1-SP", "SR:C06-MG{PS:QL3B}I:Sp1-SP", "SR:C06-MG{PS:QM1A}I:Sp1-SP", "SR:C06-MG{PS:QM1B}I:Sp1-SP", "SR:C06-MG{PS:QM2A}I:Sp1-SP", "SR:C06-MG{PS:QM2B}I:Sp1-SP", "SR:C06-MG{PS:SH1-P3}I:Sp1-SP", "SR:C06-MG{PS:SH3-P3}I:Sp1-SP", "SR:C06-MG{PS:SQKH1A}I:Sp1-SP", "SR:C07-MG{PS:BT1A}I:Sp1-SP", "SR:C07-MG{PS:BT1A}I:Sp2-SP", "SR:C07-MG{PS:CH1B}I:Sp1-SP", "SR:C07-MG{PS:CH1B}I:Sp2-SP", "SR:C07-MG{PS:CH2B}I:Sp1-SP", "SR:C07-MG{PS:CH2B}I:Sp2-SP", "SR:C07-MG{PS:CL1A}I:Sp1-SP", "SR:C07-MG{PS:CL1A}I:Sp2-SP", "SR:C07-MG{PS:CL2A}I:Sp1-SP", "SR:C07-MG{PS:CL2A}I:Sp2-SP", "SR:C07-MG{PS:CM1A}I:Sp1-SP", "SR:C07-MG{PS:CM1A}I:Sp2-SP", "SR:C07-MG{PS:CM1B}I:Sp1-SP", "SR:C07-MG{PS:CM1B}I:Sp2-SP", "SR:C07-MG{PS:QH1B}I:Sp1-SP", "SR:C07-MG{PS:QH2B}I:Sp1-SP", "SR:C07-MG{PS:QH3B}I:Sp1-SP", "SR:C07-MG{PS:QL1A}I:Sp1-SP", "SR:C07-MG{PS:QL2A}I:Sp1-SP", "SR:C07-MG{PS:QL3A}I:Sp1-SP", "SR:C07-MG{PS:QM1A}I:Sp1-SP", "SR:C07-MG{PS:QM1B}I:Sp1-SP", "SR:C07-MG{PS:QM2A}I:Sp1-SP", "SR:C07-MG{PS:QM2B}I:Sp1-SP", "SR:C07-MG{PS:SH4-P3}I:Sp1-SP", "SR:C07-MG{PS:SM1A-P3}I:Sp1-SP", "SR:C07-MG{PS:SQKM1A}I:Sp1-SP", "SR:C08-MG{PS:BT1A}I:Sp1-SP", "SR:C08-MG{PS:BT1A}I:Sp2-SP", "SR:C08-MG{PS:CH1A}I:Sp1-SP", "SR:C08-MG{PS:CH1A}I:Sp2-SP", "SR:C08-MG{PS:CH2A}I:Sp1-SP", "SR:C08-MG{PS:CH2A}I:Sp2-SP", "SR:C08-MG{PS:CL1B}I:Sp1-SP", "SR:C08-MG{PS:CL1B}I:Sp2-SP", "SR:C08-MG{PS:CL2B}I:Sp1-SP", "SR:C08-MG{PS:CL2B}I:Sp2-SP", "SR:C08-MG{PS:CM1A}I:Sp1-SP", "SR:C08-MG{PS:CM1A}I:Sp2-SP", "SR:C08-MG{PS:CM1B}I:Sp1-SP", "SR:C08-MG{PS:CM1B}I:Sp2-SP", "SR:C08-MG{PS:QH1A}I:Sp1-SP", "SR:C08-MG{PS:QH2A}I:Sp1-SP", "SR:C08-MG{PS:QH3A}I:Sp1-SP", "SR:C08-MG{PS:QL1B}I:Sp1-SP", "SR:C08-MG{PS:QL2B}I:Sp1-SP", "SR:C08-MG{PS:QL3B}I:Sp1-SP", "SR:C08-MG{PS:QM1A}I:Sp1-SP", "SR:C08-MG{PS:QM1B}I:Sp1-SP", "SR:C08-MG{PS:QM2A}I:Sp1-SP", "SR:C08-MG{PS:QM2B}I:Sp1-SP", "SR:C08-MG{PS:SH1-DW08}I:Sp1-SP", "SR:C08-MG{PS:SH3-DW08}I:Sp1-SP", "SR:C08-MG{PS:SH4-DW08}I:Sp1-SP", "SR:C08-MG{PS:SM1B-P3}I:Sp1-SP", "SR:C08-MG{PS:SM2B-P3}I:Sp1-SP", "SR:C08-MG{PS:SQKH1A}I:Sp1-SP", "SR:C09-MG{PS:BT1A}I:Sp1-SP", "SR:C09-MG{PS:BT1A}I:Sp2-SP", "SR:C09-MG{PS:CH1B}I:Sp1-SP", "SR:C09-MG{PS:CH1B}I:Sp2-SP", "SR:C09-MG{PS:CH2B}I:Sp1-SP", "SR:C09-MG{PS:CH2B}I:Sp2-SP", "SR:C09-MG{PS:CL1A}I:Sp1-SP", "SR:C09-MG{PS:CL1A}I:Sp2-SP", "SR:C09-MG{PS:CL2A}I:Sp1-SP", "SR:C09-MG{PS:CL2A}I:Sp2-SP", "SR:C09-MG{PS:CM1A}I:Sp1-SP", "SR:C09-MG{PS:CM1A}I:Sp2-SP", "SR:C09-MG{PS:CM1B}I:Sp1-SP", "SR:C09-MG{PS:CM1B}I:Sp2-SP", "SR:C09-MG{PS:QH1B}I:Sp1-SP", "SR:C09-MG{PS:QH2B}I:Sp1-SP", "SR:C09-MG{PS:QH3B}I:Sp1-SP", "SR:C09-MG{PS:QL1A}I:Sp1-SP", "SR:C09-MG{PS:QL2A}I:Sp1-SP", "SR:C09-MG{PS:QL3A}I:Sp1-SP", "SR:C09-MG{PS:QM1A}I:Sp1-SP", "SR:C09-MG{PS:QM1B}I:Sp1-SP", "SR:C09-MG{PS:QM2A}I:Sp1-SP", "SR:C09-MG{PS:QM2B}I:Sp1-SP", "SR:C09-MG{PS:SL2-P3}I:Sp1-SP", "SR:C09-MG{PS:SL3-P3}I:Sp1-SP", "SR:C09-MG{PS:SQKM1A}I:Sp1-SP", "SR:C10-MG{PS:BT1A}I:Sp1-SP", "SR:C10-MG{PS:BT1A}I:Sp2-SP", "SR:C10-MG{PS:CH1A}I:Sp1-SP", "SR:C10-MG{PS:CH1A}I:Sp2-SP", "SR:C10-MG{PS:CH2A}I:Sp1-SP", "SR:C10-MG{PS:CH2A}I:Sp2-SP", "SR:C10-MG{PS:CL1B}I:Sp1-SP", "SR:C10-MG{PS:CL1B}I:Sp2-SP", "SR:C10-MG{PS:CL2B}I:Sp1-SP", "SR:C10-MG{PS:CL2B}I:Sp2-SP", "SR:C10-MG{PS:CM1A}I:Sp1-SP", "SR:C10-MG{PS:CM1A}I:Sp2-SP", "SR:C10-MG{PS:CM1B}I:Sp1-SP", "SR:C10-MG{PS:CM1B}I:Sp2-SP", "SR:C10-MG{PS:QH1A}I:Sp1-SP", "SR:C10-MG{PS:QH2A}I:Sp1-SP", "SR:C10-MG{PS:QH3A}I:Sp1-SP", "SR:C10-MG{PS:QL1B}I:Sp1-SP", "SR:C10-MG{PS:QL2B}I:Sp1-SP", "SR:C10-MG{PS:QL3B}I:Sp1-SP", "SR:C10-MG{PS:QM1A}I:Sp1-SP", "SR:C10-MG{PS:QM1B}I:Sp1-SP", "SR:C10-MG{PS:QM2A}I:Sp1-SP", "SR:C10-MG{PS:QM2B}I:Sp1-SP", "SR:C10-MG{PS:SL1-P3}I:Sp1-SP", "SR:C10-MG{PS:SQKH1A}I:Sp1-SP", "SR:C11-MG{PS:BT1A}I:Sp1-SP", "SR:C11-MG{PS:BT1A}I:Sp2-SP", "SR:C11-MG{PS:CH1B}I:Sp1-SP", "SR:C11-MG{PS:CH1B}I:Sp2-SP", "SR:C11-MG{PS:CH2B}I:Sp1-SP", "SR:C11-MG{PS:CH2B}I:Sp2-SP", "SR:C11-MG{PS:CL1A}I:Sp1-SP", "SR:C11-MG{PS:CL1A}I:Sp2-SP", "SR:C11-MG{PS:CL2A}I:Sp1-SP", "SR:C11-MG{PS:CL2A}I:Sp2-SP", "SR:C11-MG{PS:CM1A}I:Sp1-SP", "SR:C11-MG{PS:CM1A}I:Sp2-SP", "SR:C11-MG{PS:CM1B}I:Sp1-SP", "SR:C11-MG{PS:CM1B}I:Sp2-SP", "SR:C11-MG{PS:QH1B}I:Sp1-SP", "SR:C11-MG{PS:QH2B}I:Sp1-SP", "SR:C11-MG{PS:QH3B}I:Sp1-SP", "SR:C11-MG{PS:QL1A}I:Sp1-SP", "SR:C11-MG{PS:QL2A}I:Sp1-SP", "SR:C11-MG{PS:QL3A}I:Sp1-SP", "SR:C11-MG{PS:QM1A}I:Sp1-SP", "SR:C11-MG{PS:QM1B}I:Sp1-SP", "SR:C11-MG{PS:QM2A}I:Sp1-SP", "SR:C11-MG{PS:QM2B}I:Sp1-SP", "SR:C11-MG{PS:SQKM1A}I:Sp1-SP", "SR:C12-MG{PS:BT1A}I:Sp1-SP", "SR:C12-MG{PS:BT1A}I:Sp2-SP", "SR:C12-MG{PS:CH1A}I:Sp1-SP", "SR:C12-MG{PS:CH1A}I:Sp2-SP", "SR:C12-MG{PS:CH2A}I:Sp1-SP", "SR:C12-MG{PS:CH2A}I:Sp2-SP", "SR:C12-MG{PS:CL1B}I:Sp1-SP", "SR:C12-MG{PS:CL1B}I:Sp2-SP", "SR:C12-MG{PS:CL2B}I:Sp1-SP", "SR:C12-MG{PS:CL2B}I:Sp2-SP", "SR:C12-MG{PS:CM1A}I:Sp1-SP", "SR:C12-MG{PS:CM1A}I:Sp2-SP", "SR:C12-MG{PS:CM1B}I:Sp1-SP", "SR:C12-MG{PS:CM1B}I:Sp2-SP", "SR:C12-MG{PS:QH1A}I:Sp1-SP", "SR:C12-MG{PS:QH2A}I:Sp1-SP", "SR:C12-MG{PS:QH3A}I:Sp1-SP", "SR:C12-MG{PS:QL1B}I:Sp1-SP", "SR:C12-MG{PS:QL2B}I:Sp1-SP", "SR:C12-MG{PS:QL3B}I:Sp1-SP", "SR:C12-MG{PS:QM1A}I:Sp1-SP", "SR:C12-MG{PS:QM1B}I:Sp1-SP", "SR:C12-MG{PS:QM2A}I:Sp1-SP", "SR:C12-MG{PS:QM2B}I:Sp1-SP", "SR:C12-MG{PS:SH1-P4}I:Sp1-SP", "SR:C12-MG{PS:SH3-P4}I:Sp1-SP", "SR:C12-MG{PS:SQKH1A}I:Sp1-SP", "SR:C13-MG{PS:BT1A}I:Sp1-SP", "SR:C13-MG{PS:BT1A}I:Sp2-SP", "SR:C13-MG{PS:CH1B}I:Sp1-SP", "SR:C13-MG{PS:CH1B}I:Sp2-SP", "SR:C13-MG{PS:CH2B}I:Sp1-SP", "SR:C13-MG{PS:CH2B}I:Sp2-SP", "SR:C13-MG{PS:CL1A}I:Sp1-SP", "SR:C13-MG{PS:CL1A}I:Sp2-SP", "SR:C13-MG{PS:CL2A}I:Sp1-SP", "SR:C13-MG{PS:CL2A}I:Sp2-SP", "SR:C13-MG{PS:CM1A}I:Sp1-SP", "SR:C13-MG{PS:CM1A}I:Sp2-SP", "SR:C13-MG{PS:CM1B}I:Sp1-SP", "SR:C13-MG{PS:CM1B}I:Sp2-SP", "SR:C13-MG{PS:QH1B}I:Sp1-SP", "SR:C13-MG{PS:QH2B}I:Sp1-SP", "SR:C13-MG{PS:QH3B}I:Sp1-SP", "SR:C13-MG{PS:QL1A}I:Sp1-SP", "SR:C13-MG{PS:QL2A}I:Sp1-SP", "SR:C13-MG{PS:QL3A}I:Sp1-SP", "SR:C13-MG{PS:QM1A}I:Sp1-SP", "SR:C13-MG{PS:QM1B}I:Sp1-SP", "SR:C13-MG{PS:QM2A}I:Sp1-SP", "SR:C13-MG{PS:QM2B}I:Sp1-SP", "SR:C13-MG{PS:SH4-P4}I:Sp1-SP", "SR:C13-MG{PS:SM1A-P4}I:Sp1-SP", "SR:C13-MG{PS:SQKM1A}I:Sp1-SP", "SR:C14-MG{PS:BT1A}I:Sp1-SP", "SR:C14-MG{PS:BT1A}I:Sp2-SP", "SR:C14-MG{PS:CH1A}I:Sp1-SP", "SR:C14-MG{PS:CH1A}I:Sp2-SP", "SR:C14-MG{PS:CH2A}I:Sp1-SP", "SR:C14-MG{PS:CH2A}I:Sp2-SP", "SR:C14-MG{PS:CL1B}I:Sp1-SP", "SR:C14-MG{PS:CL1B}I:Sp2-SP", "SR:C14-MG{PS:CL2B}I:Sp1-SP", "SR:C14-MG{PS:CL2B}I:Sp2-SP", "SR:C14-MG{PS:CM1A}I:Sp1-SP", "SR:C14-MG{PS:CM1A}I:Sp2-SP", "SR:C14-MG{PS:CM1B}I:Sp1-SP", "SR:C14-MG{PS:CM1B}I:Sp2-SP", "SR:C14-MG{PS:QH1A}I:Sp1-SP", "SR:C14-MG{PS:QH2A}I:Sp1-SP", "SR:C14-MG{PS:QH3A}I:Sp1-SP", "SR:C14-MG{PS:QL1B}I:Sp1-SP", "SR:C14-MG{PS:QL2B}I:Sp1-SP", "SR:C14-MG{PS:QL3B}I:Sp1-SP", "SR:C14-MG{PS:QM1A}I:Sp1-SP", "SR:C14-MG{PS:QM1B}I:Sp1-SP", "SR:C14-MG{PS:QM2A}I:Sp1-SP", "SR:C14-MG{PS:QM2B}I:Sp1-SP", "SR:C14-MG{PS:SM1B-P4}I:Sp1-SP", "SR:C14-MG{PS:SM2B-P4}I:Sp1-SP", "SR:C14-MG{PS:SQKH1A}I:Sp1-SP", "SR:C15-MG{PS:BT1A}I:Sp1-SP", "SR:C15-MG{PS:BT1A}I:Sp2-SP", "SR:C15-MG{PS:CH1B}I:Sp1-SP", "SR:C15-MG{PS:CH1B}I:Sp2-SP", "SR:C15-MG{PS:CH2B}I:Sp1-SP", "SR:C15-MG{PS:CH2B}I:Sp2-SP", "SR:C15-MG{PS:CL1A}I:Sp1-SP", "SR:C15-MG{PS:CL1A}I:Sp2-SP", "SR:C15-MG{PS:CL2A}I:Sp1-SP", "SR:C15-MG{PS:CL2A}I:Sp2-SP", "SR:C15-MG{PS:CM1A}I:Sp1-SP", "SR:C15-MG{PS:CM1A}I:Sp2-SP", "SR:C15-MG{PS:CM1B}I:Sp1-SP", "SR:C15-MG{PS:CM1B}I:Sp2-SP", "SR:C15-MG{PS:QH1B}I:Sp1-SP", "SR:C15-MG{PS:QH2B}I:Sp1-SP", "SR:C15-MG{PS:QH3B}I:Sp1-SP", "SR:C15-MG{PS:QL1A}I:Sp1-SP", "SR:C15-MG{PS:QL2A}I:Sp1-SP", "SR:C15-MG{PS:QL3A}I:Sp1-SP", "SR:C15-MG{PS:QM1A}I:Sp1-SP", "SR:C15-MG{PS:QM1B}I:Sp1-SP", "SR:C15-MG{PS:QM2A}I:Sp1-SP", "SR:C15-MG{PS:QM2B}I:Sp1-SP", "SR:C15-MG{PS:SL2-P4}I:Sp1-SP", "SR:C15-MG{PS:SL3-P4}I:Sp1-SP", "SR:C15-MG{PS:SQKM1A}I:Sp1-SP", "SR:C16-MG{PS:BT1A}I:Sp1-SP", "SR:C16-MG{PS:BT1A}I:Sp2-SP", "SR:C16-MG{PS:CH1A}I:Sp1-SP", "SR:C16-MG{PS:CH1A}I:Sp2-SP", "SR:C16-MG{PS:CH2A}I:Sp1-SP", "SR:C16-MG{PS:CH2A}I:Sp2-SP", "SR:C16-MG{PS:CL1B}I:Sp1-SP", "SR:C16-MG{PS:CL1B}I:Sp2-SP", "SR:C16-MG{PS:CL2B}I:Sp1-SP", "SR:C16-MG{PS:CL2B}I:Sp2-SP", "SR:C16-MG{PS:CM1A}I:Sp1-SP", "SR:C16-MG{PS:CM1A}I:Sp2-SP", "SR:C16-MG{PS:CM1B}I:Sp1-SP", "SR:C16-MG{PS:CM1B}I:Sp2-SP", "SR:C16-MG{PS:QH1A}I:Sp1-SP", "SR:C16-MG{PS:QH2A}I:Sp1-SP", "SR:C16-MG{PS:QH3A}I:Sp1-SP", "SR:C16-MG{PS:QL1B}I:Sp1-SP", "SR:C16-MG{PS:QL2B}I:Sp1-SP", "SR:C16-MG{PS:QL3B}I:Sp1-SP", "SR:C16-MG{PS:QM1A}I:Sp1-SP", "SR:C16-MG{PS:QM1B}I:Sp1-SP", "SR:C16-MG{PS:QM2A}I:Sp1-SP", "SR:C16-MG{PS:QM2B}I:Sp1-SP", "SR:C16-MG{PS:SL1-P4}I:Sp1-SP", "SR:C16-MG{PS:SQKH1A}I:Sp1-SP", "SR:C17-MG{PS:BT1A}I:Sp1-SP", "SR:C17-MG{PS:BT1A}I:Sp2-SP", "SR:C17-MG{PS:CH1B}I:Sp1-SP", "SR:C17-MG{PS:CH1B}I:Sp2-SP", "SR:C17-MG{PS:CH2B}I:Sp1-SP", "SR:C17-MG{PS:CH2B}I:Sp2-SP", "SR:C17-MG{PS:CL1A}I:Sp1-SP", "SR:C17-MG{PS:CL1A}I:Sp2-SP", "SR:C17-MG{PS:CL2A}I:Sp1-SP", "SR:C17-MG{PS:CL2A}I:Sp2-SP", "SR:C17-MG{PS:CM1A}I:Sp1-SP", "SR:C17-MG{PS:CM1A}I:Sp2-SP", "SR:C17-MG{PS:CM1B}I:Sp1-SP", "SR:C17-MG{PS:CM1B}I:Sp2-SP", "SR:C17-MG{PS:QH1B}I:Sp1-SP", "SR:C17-MG{PS:QH2B}I:Sp1-SP", "SR:C17-MG{PS:QH3B}I:Sp1-SP", "SR:C17-MG{PS:QL1A}I:Sp1-SP", "SR:C17-MG{PS:QL2A}I:Sp1-SP", "SR:C17-MG{PS:QL3A}I:Sp1-SP", "SR:C17-MG{PS:QM1A}I:Sp1-SP", "SR:C17-MG{PS:QM1B}I:Sp1-SP", "SR:C17-MG{PS:QM2A}I:Sp1-SP", "SR:C17-MG{PS:QM2B}I:Sp1-SP", "SR:C17-MG{PS:SQKM1A}I:Sp1-SP", "SR:C18-MG{PS:BT1A}I:Sp1-SP", "SR:C18-MG{PS:BT1A}I:Sp2-SP", "SR:C18-MG{PS:CH1A}I:Sp1-SP", "SR:C18-MG{PS:CH1A}I:Sp2-SP", "SR:C18-MG{PS:CH2A}I:Sp1-SP", "SR:C18-MG{PS:CH2A}I:Sp2-SP", "SR:C18-MG{PS:CL1B}I:Sp1-SP", "SR:C18-MG{PS:CL1B}I:Sp2-SP", "SR:C18-MG{PS:CL2B}I:Sp1-SP", "SR:C18-MG{PS:CL2B}I:Sp2-SP", "SR:C18-MG{PS:CM1A}I:Sp1-SP", "SR:C18-MG{PS:CM1A}I:Sp2-SP", "SR:C18-MG{PS:CM1B}I:Sp1-SP", "SR:C18-MG{PS:CM1B}I:Sp2-SP", "SR:C18-MG{PS:QH1A}I:Sp1-SP", "SR:C18-MG{PS:QH2A}I:Sp1-SP", "SR:C18-MG{PS:QH3A}I:Sp1-SP", "SR:C18-MG{PS:QL1B}I:Sp1-SP", "SR:C18-MG{PS:QL2B}I:Sp1-SP", "SR:C18-MG{PS:QL3B}I:Sp1-SP", "SR:C18-MG{PS:QM1A}I:Sp1-SP", "SR:C18-MG{PS:QM1B}I:Sp1-SP", "SR:C18-MG{PS:QM2A}I:Sp1-SP", "SR:C18-MG{PS:QM2B}I:Sp1-SP", "SR:C18-MG{PS:SH1-DW18}I:Sp1-SP", "SR:C18-MG{PS:SH1-P5}I:Sp1-SP", "SR:C18-MG{PS:SH3-DW18}I:Sp1-SP", "SR:C18-MG{PS:SH3-P5}I:Sp1-SP", "SR:C18-MG{PS:SH4-DW18}I:Sp1-SP", "SR:C18-MG{PS:SQKH1A}I:Sp1-SP", "SR:C19-MG{PS:BT1A}I:Sp1-SP", "SR:C19-MG{PS:BT1A}I:Sp2-SP", "SR:C19-MG{PS:CH1B}I:Sp1-SP", "SR:C19-MG{PS:CH1B}I:Sp2-SP", "SR:C19-MG{PS:CH2B}I:Sp1-SP", "SR:C19-MG{PS:CH2B}I:Sp2-SP", "SR:C19-MG{PS:CL1A}I:Sp1-SP", "SR:C19-MG{PS:CL1A}I:Sp2-SP", "SR:C19-MG{PS:CL2A}I:Sp1-SP", "SR:C19-MG{PS:CL2A}I:Sp2-SP", "SR:C19-MG{PS:CM1A}I:Sp1-SP", "SR:C19-MG{PS:CM1A}I:Sp2-SP", "SR:C19-MG{PS:CM1B}I:Sp1-SP", "SR:C19-MG{PS:CM1B}I:Sp2-SP", "SR:C19-MG{PS:QH1B}I:Sp1-SP", "SR:C19-MG{PS:QH2B}I:Sp1-SP", "SR:C19-MG{PS:QH3B}I:Sp1-SP", "SR:C19-MG{PS:QL1A}I:Sp1-SP", "SR:C19-MG{PS:QL2A}I:Sp1-SP", "SR:C19-MG{PS:QL3A}I:Sp1-SP", "SR:C19-MG{PS:QM1A}I:Sp1-SP", "SR:C19-MG{PS:QM1B}I:Sp1-SP", "SR:C19-MG{PS:QM2A}I:Sp1-SP", "SR:C19-MG{PS:QM2B}I:Sp1-SP", "SR:C19-MG{PS:SH4-P5}I:Sp1-SP", "SR:C19-MG{PS:SM1A-P5}I:Sp1-SP", "SR:C19-MG{PS:SQKM1A}I:Sp1-SP", "SR:C20-MG{PS:BT1A}I:Sp1-SP", "SR:C20-MG{PS:BT1A}I:Sp2-SP", "SR:C20-MG{PS:CH1A}I:Sp1-SP", "SR:C20-MG{PS:CH1A}I:Sp2-SP", "SR:C20-MG{PS:CH2A}I:Sp1-SP", "SR:C20-MG{PS:CH2A}I:Sp2-SP", "SR:C20-MG{PS:CL1B}I:Sp1-SP", "SR:C20-MG{PS:CL1B}I:Sp2-SP", "SR:C20-MG{PS:CL2B}I:Sp1-SP", "SR:C20-MG{PS:CL2B}I:Sp2-SP", "SR:C20-MG{PS:CM1A}I:Sp1-SP", "SR:C20-MG{PS:CM1A}I:Sp2-SP", "SR:C20-MG{PS:CM1B}I:Sp1-SP", "SR:C20-MG{PS:CM1B}I:Sp2-SP", "SR:C20-MG{PS:QH1A}I:Sp1-SP", "SR:C20-MG{PS:QH2A}I:Sp1-SP", "SR:C20-MG{PS:QH3A}I:Sp1-SP", "SR:C20-MG{PS:QL1B}I:Sp1-SP", "SR:C20-MG{PS:QL2B}I:Sp1-SP", "SR:C20-MG{PS:QL3B}I:Sp1-SP", "SR:C20-MG{PS:QM1A}I:Sp1-SP", "SR:C20-MG{PS:QM1B}I:Sp1-SP", "SR:C20-MG{PS:QM2A}I:Sp1-SP", "SR:C20-MG{PS:QM2B}I:Sp1-SP", "SR:C20-MG{PS:SM1B-P5}I:Sp1-SP", "SR:C20-MG{PS:SM2B-P5}I:Sp1-SP", "SR:C20-MG{PS:SQKH1A}I:Sp1-SP", "SR:C21-MG{PS:BT1A}I:Sp1-SP", "SR:C21-MG{PS:BT1A}I:Sp2-SP", "SR:C21-MG{PS:CH1B}I:Sp1-SP", "SR:C21-MG{PS:CH1B}I:Sp2-SP", "SR:C21-MG{PS:CH2B}I:Sp1-SP", "SR:C21-MG{PS:CH2B}I:Sp2-SP", "SR:C21-MG{PS:CL1A}I:Sp1-SP", "SR:C21-MG{PS:CL1A}I:Sp2-SP", "SR:C21-MG{PS:CL2A}I:Sp1-SP", "SR:C21-MG{PS:CL2A}I:Sp2-SP", "SR:C21-MG{PS:CM1A}I:Sp1-SP", "SR:C21-MG{PS:CM1A}I:Sp2-SP", "SR:C21-MG{PS:CM1B}I:Sp1-SP", "SR:C21-MG{PS:CM1B}I:Sp2-SP", "SR:C21-MG{PS:QH1B}I:Sp1-SP", "SR:C21-MG{PS:QH2B}I:Sp1-SP", "SR:C21-MG{PS:QH3B}I:Sp1-SP", "SR:C21-MG{PS:QL1A}I:Sp1-SP", "SR:C21-MG{PS:QL2A}I:Sp1-SP", "SR:C21-MG{PS:QL3A}I:Sp1-SP", "SR:C21-MG{PS:QM1A}I:Sp1-SP", "SR:C21-MG{PS:QM1B}I:Sp1-SP", "SR:C21-MG{PS:QM2A}I:Sp1-SP", "SR:C21-MG{PS:QM2B}I:Sp1-SP", "SR:C21-MG{PS:SL2-P5}I:Sp1-SP", "SR:C21-MG{PS:SL3-P5}I:Sp1-SP", "SR:C21-MG{PS:SQKM1A}I:Sp1-SP", "SR:C22-MG{PS:BT1A}I:Sp1-SP", "SR:C22-MG{PS:BT1A}I:Sp2-SP", "SR:C22-MG{PS:CH1A}I:Sp1-SP", "SR:C22-MG{PS:CH1A}I:Sp2-SP", "SR:C22-MG{PS:CH2A}I:Sp1-SP", "SR:C22-MG{PS:CH2A}I:Sp2-SP", "SR:C22-MG{PS:CL1B}I:Sp1-SP", "SR:C22-MG{PS:CL1B}I:Sp2-SP", "SR:C22-MG{PS:CL2B}I:Sp1-SP", "SR:C22-MG{PS:CL2B}I:Sp2-SP", "SR:C22-MG{PS:CM1A}I:Sp1-SP", "SR:C22-MG{PS:CM1A}I:Sp2-SP", "SR:C22-MG{PS:CM1B}I:Sp1-SP", "SR:C22-MG{PS:CM1B}I:Sp2-SP", "SR:C22-MG{PS:QH1A}I:Sp1-SP", "SR:C22-MG{PS:QH2A}I:Sp1-SP", "SR:C22-MG{PS:QH3A}I:Sp1-SP", "SR:C22-MG{PS:QL1B}I:Sp1-SP", "SR:C22-MG{PS:QL2B}I:Sp1-SP", "SR:C22-MG{PS:QL3B}I:Sp1-SP", "SR:C22-MG{PS:QM1A}I:Sp1-SP", "SR:C22-MG{PS:QM1B}I:Sp1-SP", "SR:C22-MG{PS:QM2A}I:Sp1-SP", "SR:C22-MG{PS:QM2B}I:Sp1-SP", "SR:C22-MG{PS:SL1-P5}I:Sp1-SP", "SR:C22-MG{PS:SQKH1A}I:Sp1-SP", "SR:C23-MG{PS:BT1A}I:Sp1-SP", "SR:C23-MG{PS:BT1A}I:Sp2-SP", "SR:C23-MG{PS:CH1B}I:Sp1-SP", "SR:C23-MG{PS:CH1B}I:Sp2-SP", "SR:C23-MG{PS:CH2B}I:Sp1-SP", "SR:C23-MG{PS:CH2B}I:Sp2-SP", "SR:C23-MG{PS:CL1A}I:Sp1-SP", "SR:C23-MG{PS:CL1A}I:Sp2-SP", "SR:C23-MG{PS:CL2A}I:Sp1-SP", "SR:C23-MG{PS:CL2A}I:Sp2-SP", "SR:C23-MG{PS:CM1A}I:Sp1-SP", "SR:C23-MG{PS:CM1A}I:Sp2-SP", "SR:C23-MG{PS:CM1B}I:Sp1-SP", "SR:C23-MG{PS:CM1B}I:Sp2-SP", "SR:C23-MG{PS:QH1B}I:Sp1-SP", "SR:C23-MG{PS:QH2B}I:Sp1-SP", "SR:C23-MG{PS:QH3B}I:Sp1-SP", "SR:C23-MG{PS:QL1A}I:Sp1-SP", "SR:C23-MG{PS:QL2A}I:Sp1-SP", "SR:C23-MG{PS:QL3A}I:Sp1-SP", "SR:C23-MG{PS:QM1A}I:Sp1-SP", "SR:C23-MG{PS:QM1B}I:Sp1-SP", "SR:C23-MG{PS:QM2A}I:Sp1-SP", "SR:C23-MG{PS:QM2B}I:Sp1-SP", "SR:C23-MG{PS:SQKM1A}I:Sp1-SP", "SR:C24-MG{PS:BT1A}I:Sp1-SP", "SR:C24-MG{PS:BT1A}I:Sp2-SP", "SR:C24-MG{PS:CH1A}I:Sp1-SP", "SR:C24-MG{PS:CH1A}I:Sp2-SP", "SR:C24-MG{PS:CH2A}I:Sp1-SP", "SR:C24-MG{PS:CH2A}I:Sp2-SP", "SR:C24-MG{PS:CL1B}I:Sp1-SP", "SR:C24-MG{PS:CL1B}I:Sp2-SP", "SR:C24-MG{PS:CL2B}I:Sp1-SP", "SR:C24-MG{PS:CL2B}I:Sp2-SP", "SR:C24-MG{PS:CM1A}I:Sp1-SP", "SR:C24-MG{PS:CM1A}I:Sp2-SP", "SR:C24-MG{PS:CM1B}I:Sp1-SP", "SR:C24-MG{PS:CM1B}I:Sp2-SP", "SR:C24-MG{PS:QH1A}I:Sp1-SP", "SR:C24-MG{PS:QH2A}I:Sp1-SP", "SR:C24-MG{PS:QH3A}I:Sp1-SP", "SR:C24-MG{PS:QL1B}I:Sp1-SP", "SR:C24-MG{PS:QL2B}I:Sp1-SP", "SR:C24-MG{PS:QL3B}I:Sp1-SP", "SR:C24-MG{PS:QM1A}I:Sp1-SP", "SR:C24-MG{PS:QM1B}I:Sp1-SP", "SR:C24-MG{PS:QM2A}I:Sp1-SP", "SR:C24-MG{PS:QM2B}I:Sp1-SP", "SR:C24-MG{PS:SH1-P1}I:Sp1-SP", "SR:C24-MG{PS:SH3-P1}I:Sp1-SP", "SR:C24-MG{PS:SQKH1A}I:Sp1-SP", "SR:C25-MG{PS:BT1A}I:Sp1-SP", "SR:C25-MG{PS:BT1A}I:Sp2-SP", "SR:C25-MG{PS:CH1B}I:Sp1-SP", "SR:C25-MG{PS:CH1B}I:Sp2-SP", "SR:C25-MG{PS:CH2B}I:Sp1-SP", "SR:C25-MG{PS:CH2B}I:Sp2-SP", "SR:C25-MG{PS:CL1A}I:Sp1-SP", "SR:C25-MG{PS:CL1A}I:Sp2-SP", "SR:C25-MG{PS:CL2A}I:Sp1-SP", "SR:C25-MG{PS:CL2A}I:Sp2-SP", "SR:C25-MG{PS:CM1A}I:Sp1-SP", "SR:C25-MG{PS:CM1A}I:Sp2-SP", "SR:C25-MG{PS:CM1B}I:Sp1-SP", "SR:C25-MG{PS:CM1B}I:Sp2-SP", "SR:C25-MG{PS:QH1B}I:Sp1-SP", "SR:C25-MG{PS:QH2B}I:Sp1-SP", "SR:C25-MG{PS:QH3B}I:Sp1-SP", "SR:C25-MG{PS:QL1A}I:Sp1-SP", "SR:C25-MG{PS:QL2A}I:Sp1-SP", "SR:C25-MG{PS:QL3A}I:Sp1-SP", "SR:C25-MG{PS:QM1A}I:Sp1-SP", "SR:C25-MG{PS:QM1B}I:Sp1-SP", "SR:C25-MG{PS:QM2A}I:Sp1-SP", "SR:C25-MG{PS:QM2B}I:Sp1-SP", "SR:C25-MG{PS:SH4-P1}I:Sp1-SP", "SR:C25-MG{PS:SM1A-P1}I:Sp1-SP", "SR:C25-MG{PS:SQKM1A}I:Sp1-SP", "SR:C26-MG{PS:BT1A}I:Sp1-SP", "SR:C26-MG{PS:BT1A}I:Sp2-SP", "SR:C26-MG{PS:CH1A}I:Sp1-SP", "SR:C26-MG{PS:CH1A}I:Sp2-SP", "SR:C26-MG{PS:CH2A}I:Sp1-SP", "SR:C26-MG{PS:CH2A}I:Sp2-SP", "SR:C26-MG{PS:CL1B}I:Sp1-SP", "SR:C26-MG{PS:CL1B}I:Sp2-SP", "SR:C26-MG{PS:CL2B}I:Sp1-SP", "SR:C26-MG{PS:CL2B}I:Sp2-SP", "SR:C26-MG{PS:CM1A}I:Sp1-SP", "SR:C26-MG{PS:CM1A}I:Sp2-SP", "SR:C26-MG{PS:CM1B}I:Sp1-SP", "SR:C26-MG{PS:CM1B}I:Sp2-SP", "SR:C26-MG{PS:QH1A}I:Sp1-SP", "SR:C26-MG{PS:QH2A}I:Sp1-SP", "SR:C26-MG{PS:QH3A}I:Sp1-SP", "SR:C26-MG{PS:QL1B}I:Sp1-SP", "SR:C26-MG{PS:QL2B}I:Sp1-SP", "SR:C26-MG{PS:QL3B}I:Sp1-SP", "SR:C26-MG{PS:QM1A}I:Sp1-SP", "SR:C26-MG{PS:QM1B}I:Sp1-SP", "SR:C26-MG{PS:QM2A}I:Sp1-SP", "SR:C26-MG{PS:QM2B}I:Sp1-SP", "SR:C26-MG{PS:SM1B-P1}I:Sp1-SP", "SR:C26-MG{PS:SM2B-P1}I:Sp1-SP", "SR:C26-MG{PS:SQKH1A}I:Sp1-SP", "SR:C27-MG{PS:BT1A}I:Sp1-SP", "SR:C27-MG{PS:BT1A}I:Sp2-SP", "SR:C27-MG{PS:CH1B}I:Sp1-SP", "SR:C27-MG{PS:CH1B}I:Sp2-SP", "SR:C27-MG{PS:CH2B}I:Sp1-SP", "SR:C27-MG{PS:CH2B}I:Sp2-SP", "SR:C27-MG{PS:CL1A}I:Sp1-SP", "SR:C27-MG{PS:CL1A}I:Sp2-SP", "SR:C27-MG{PS:CL2A}I:Sp1-SP", "SR:C27-MG{PS:CL2A}I:Sp2-SP", "SR:C27-MG{PS:CM1A}I:Sp1-SP", "SR:C27-MG{PS:CM1A}I:Sp2-SP", "SR:C27-MG{PS:CM1B}I:Sp1-SP", "SR:C27-MG{PS:CM1B}I:Sp2-SP", "SR:C27-MG{PS:QH1B}I:Sp1-SP", "SR:C27-MG{PS:QH2B}I:Sp1-SP", "SR:C27-MG{PS:QH3B}I:Sp1-SP", "SR:C27-MG{PS:QL1A}I:Sp1-SP", "SR:C27-MG{PS:QL2A}I:Sp1-SP", "SR:C27-MG{PS:QL3A}I:Sp1-SP", "SR:C27-MG{PS:QM1A}I:Sp1-SP", "SR:C27-MG{PS:QM1B}I:Sp1-SP", "SR:C27-MG{PS:QM2A}I:Sp1-SP", "SR:C27-MG{PS:QM2B}I:Sp1-SP", "SR:C27-MG{PS:SL2-P1}I:Sp1-SP", "SR:C27-MG{PS:SL3-P1}I:Sp1-SP", "SR:C27-MG{PS:SQKM1A}I:Sp1-SP", "SR:C28-MG{PS:BT1A}I:Sp1-SP", "SR:C28-MG{PS:BT1A}I:Sp2-SP", "SR:C28-MG{PS:CH1A}I:Sp1-SP", "SR:C28-MG{PS:CH1A}I:Sp2-SP", "SR:C28-MG{PS:CH2A}I:Sp1-SP", "SR:C28-MG{PS:CH2A}I:Sp2-SP", "SR:C28-MG{PS:CL1B}I:Sp1-SP", "SR:C28-MG{PS:CL1B}I:Sp2-SP", "SR:C28-MG{PS:CL2B}I:Sp1-SP", "SR:C28-MG{PS:CL2B}I:Sp2-SP", "SR:C28-MG{PS:CM1A}I:Sp1-SP", "SR:C28-MG{PS:CM1A}I:Sp2-SP", "SR:C28-MG{PS:CM1B}I:Sp1-SP", "SR:C28-MG{PS:CM1B}I:Sp2-SP", "SR:C28-MG{PS:QH1A}I:Sp1-SP", "SR:C28-MG{PS:QH2A}I:Sp1-SP", "SR:C28-MG{PS:QH3A}I:Sp1-SP", "SR:C28-MG{PS:QL1B}I:Sp1-SP", "SR:C28-MG{PS:QL2B}I:Sp1-SP", "SR:C28-MG{PS:QL3B}I:Sp1-SP", "SR:C28-MG{PS:QM1A}I:Sp1-SP", "SR:C28-MG{PS:QM1B}I:Sp1-SP", "SR:C28-MG{PS:QM2A}I:Sp1-SP", "SR:C28-MG{PS:QM2B}I:Sp1-SP", "SR:C28-MG{PS:SH1-DW28}I:Sp1-SP", "SR:C28-MG{PS:SH3-DW28}I:Sp1-SP", "SR:C28-MG{PS:SH4-DW28}I:Sp1-SP", "SR:C28-MG{PS:SL1-P1}I:Sp1-SP", "SR:C28-MG{PS:SQKH1A}I:Sp1-SP", "SR:C29-MG{PS:BT1A}I:Sp1-SP", "SR:C29-MG{PS:BT1A}I:Sp2-SP", "SR:C29-MG{PS:CH1B}I:Sp1-SP", "SR:C29-MG{PS:CH1B}I:Sp2-SP", "SR:C29-MG{PS:CH2B}I:Sp1-SP", "SR:C29-MG{PS:CH2B}I:Sp2-SP", "SR:C29-MG{PS:CL1A}I:Sp1-SP", "SR:C29-MG{PS:CL1A}I:Sp2-SP", "SR:C29-MG{PS:CL2A}I:Sp1-SP", "SR:C29-MG{PS:CL2A}I:Sp2-SP", "SR:C29-MG{PS:CM1A}I:Sp1-SP", "SR:C29-MG{PS:CM1A}I:Sp2-SP", "SR:C29-MG{PS:CM1B}I:Sp1-SP", "SR:C29-MG{PS:CM1B}I:Sp2-SP", "SR:C29-MG{PS:QH1B}I:Sp1-SP", "SR:C29-MG{PS:QH2B}I:Sp1-SP", "SR:C29-MG{PS:QH3B}I:Sp1-SP", "SR:C29-MG{PS:QL1A}I:Sp1-SP", "SR:C29-MG{PS:QL2A}I:Sp1-SP", "SR:C29-MG{PS:QL3A}I:Sp1-SP", "SR:C29-MG{PS:QM1A}I:Sp1-SP", "SR:C29-MG{PS:QM1B}I:Sp1-SP", "SR:C29-MG{PS:QM2A}I:Sp1-SP", "SR:C29-MG{PS:QM2B}I:Sp1-SP", "SR:C29-MG{PS:SQKM1A}I:Sp1-SP", "SR:C30-MG{PS:BT1A}I:Sp1-SP", "SR:C30-MG{PS:BT1A}I:Sp2-SP", "SR:C30-MG{PS:CH1A}I:Sp1-SP", "SR:C30-MG{PS:CH1A}I:Sp2-SP", "SR:C30-MG{PS:CH2A}I:Sp1-SP", "SR:C30-MG{PS:CH2A}I:Sp2-SP", "SR:C30-MG{PS:CL1B}I:Sp1-SP", "SR:C30-MG{PS:CL1B}I:Sp2-SP", "SR:C30-MG{PS:CL2B}I:Sp1-SP", "SR:C30-MG{PS:CL2B}I:Sp2-SP", "SR:C30-MG{PS:CM1A}I:Sp1-SP", "SR:C30-MG{PS:CM1A}I:Sp2-SP", "SR:C30-MG{PS:CM1B}I:Sp1-SP", "SR:C30-MG{PS:CM1B}I:Sp2-SP", "SR:C30-MG{PS:QH1A}I:Sp1-SP", "SR:C30-MG{PS:QH2A}I:Sp1-SP", "SR:C30-MG{PS:QH3A}I:Sp1-SP", "SR:C30-MG{PS:QL1B}I:Sp1-SP", "SR:C30-MG{PS:QL2B}I:Sp1-SP", "SR:C30-MG{PS:QL3B}I:Sp1-SP", "SR:C30-MG{PS:QM1A}I:Sp1-SP", "SR:C30-MG{PS:QM1B}I:Sp1-SP", "SR:C30-MG{PS:QM2A}I:Sp1-SP", "SR:C30-MG{PS:QM2B}I:Sp1-SP", "SR:C30-MG{PS:SH1-P2}I:Sp1-SP", "SR:C30-MG{PS:SH3-P2}I:Sp1-SP", "SR:C30-MG{PS:SQKH1A}I:Sp1-SP" ] pvs0 = [ 'SR:C01-MG{PS:SM1A-P2}I:Sp1-SP', 'SR:C02-MG{PS:SM1B-P2}I:Sp1-SP', 'SR:C02-MG{PS:SM2B-P2}I:Sp1-SP', 'SR:C07-MG{PS:SM1A-P3}I:Sp1-SP', 'SR:C08-MG{PS:SM1B-P3}I:Sp1-SP', 'SR:C08-MG{PS:SM2B-P3}I:Sp1-SP', 'SR:C13-MG{PS:SM1A-P4}I:Sp1-SP', 'SR:C14-MG{PS:SM1B-P4}I:Sp1-SP', 'SR:C14-MG{PS:SM2B-P4}I:Sp1-SP', 'SR:C19-MG{PS:SM1A-P5}I:Sp1-SP', 'SR:C20-MG{PS:SM1B-P5}I:Sp1-SP', 'SR:C20-MG{PS:SM2B-P5}I:Sp1-SP', 'SR:C25-MG{PS:SM1A-P1}I:Sp1-SP', 'SR:C26-MG{PS:SM1B-P1}I:Sp1-SP', 'SR:C26-MG{PS:SM2B-P1}I:Sp1-SP' ] with self.assertRaises(KeyError) as context: updateconfig(self.conn, self.collection, name, pvlist={"name": pvs0}) self.assertEqual(context.exception.message, 'Cannot find key ("names") for pv names.') self.assertTrue( updateconfig(self.conn, self.collection, name, pvlist={"names": pvs})) res3 = retrieveconfig(self.conn, self.collection, name, withpvs=True) self.assertEqual(res3[0]["status"], "active") self.assertNotEqual(res1[0]["updated_on"], res2[0]["updated_on"]) self.assertEqual(res3[0]["created_on"], res0[0]["created_on"]) self.assertEqual(res3[0]["pvlist"]["names"], pvs) with self.assertRaises(RuntimeError) as context: updateconfig(self.conn, self.collection, name, pvlist={"names": pvs0}) self.assertEqual( context.exception.message, "PV collection list exists already, and should not be changed.")
def testUpdateconfig(self): """""" name = "SR_All_20140421" params = {"desc": "SR daily SCR setpoint without IS kick and septum: SR and RF", "system": "SR", "status": "active", "version": 20140421, } with self.assertRaises(RuntimeError) as context: updateconfig(self.conn, self.collection, None) self.assertEqual(context.exception.message, "Cannot identify configuration to update.") time.sleep(1) with self.assertRaises(RuntimeError) as context: updateconfig(self.conn, self.collection, name) self.assertEqual(context.exception.message, "Wrong Mongo document for %s" % name) newid = saveconfig(self.conn, self.collection, name, **params) res0 = retrieveconfig(self.conn, self.collection, name) self.assertTrue(updateconfig(self.conn, self.collection, name, status="inactive")) res1 = retrieveconfig(self.conn, self.collection, name) self.assertEqual(newid, res0[0]["_id"]) self.assertEqual(newid, res1[0]["_id"]) self.assertEqual(res0[0]["status"], "active") self.assertEqual(res1[0]["status"], "inactive") self.assertEqual(res1[0]["created_on"], res0[0]["created_on"]) time.sleep(1) # delay required for below updated_on inequality test self.assertTrue(updateconfig(self.conn, self.collection, name, status="active")) res2 = retrieveconfig(self.conn, self.collection, name) self.assertEqual(res2[0]["status"], "active") self.assertNotEqual(res1[0]["updated_on"], res2[0]["updated_on"]) self.assertEqual(res1[0]["created_on"], res2[0]["created_on"]) self.assertEqual(res1[0]["created_on"], res0[0]["created_on"]) pvs = ["RF{Osc:1}Freq:I", "SR-RF{CFC:D}E:Fb-SP", "SR-RF{CFC:D}Phs:Fb-SP", "SR-RF{CFC:D}Tuner:PhaOff-SP", "SR:C01-MG{PS:BT1A}I:Sp1-SP", "SR:C01-MG{PS:BT1A}I:Sp2-SP", "SR:C01-MG{PS:CH1B}I:Sp1-SP", "SR:C01-MG{PS:CH1B}I:Sp2-SP", "SR:C01-MG{PS:CH2B}I:Sp1-SP", "SR:C01-MG{PS:CH2B}I:Sp2-SP", "SR:C01-MG{PS:CL1A}I:Sp1-SP", "SR:C01-MG{PS:CL1A}I:Sp2-SP", "SR:C01-MG{PS:CL2A}I:Sp1-SP", "SR:C01-MG{PS:CL2A}I:Sp2-SP", "SR:C01-MG{PS:CM1A}I:Sp1-SP", "SR:C01-MG{PS:CM1A}I:Sp2-SP", "SR:C01-MG{PS:CM1B}I:Sp1-SP", "SR:C01-MG{PS:CM1B}I:Sp2-SP", "SR:C01-MG{PS:QH1B}I:Sp1-SP", "SR:C01-MG{PS:QH2B}I:Sp1-SP", "SR:C01-MG{PS:QH3B}I:Sp1-SP", "SR:C01-MG{PS:QL1A}I:Sp1-SP", "SR:C01-MG{PS:QL2A}I:Sp1-SP", "SR:C01-MG{PS:QL3A}I:Sp1-SP", "SR:C01-MG{PS:QM1A}I:Sp1-SP", "SR:C01-MG{PS:QM1B}I:Sp1-SP", "SR:C01-MG{PS:QM2A}I:Sp1-SP", "SR:C01-MG{PS:QM2B}I:Sp1-SP", "SR:C01-MG{PS:SH4-P2}I:Sp1-SP", "SR:C01-MG{PS:SM1A-P2}I:Sp1-SP", "SR:C01-MG{PS:SQKM1A}I:Sp1-SP", "SR:C02-MG{PS:BT1A}I:Sp1-SP", "SR:C02-MG{PS:BT1A}I:Sp2-SP", "SR:C02-MG{PS:CH1A}I:Sp1-SP", "SR:C02-MG{PS:CH1A}I:Sp2-SP", "SR:C02-MG{PS:CH2A}I:Sp1-SP", "SR:C02-MG{PS:CH2A}I:Sp2-SP", "SR:C02-MG{PS:CL1B}I:Sp1-SP", "SR:C02-MG{PS:CL1B}I:Sp2-SP", "SR:C02-MG{PS:CL2B}I:Sp1-SP", "SR:C02-MG{PS:CL2B}I:Sp2-SP", "SR:C02-MG{PS:CM1A}I:Sp1-SP", "SR:C02-MG{PS:CM1A}I:Sp2-SP", "SR:C02-MG{PS:CM1B}I:Sp1-SP", "SR:C02-MG{PS:CM1B}I:Sp2-SP", "SR:C02-MG{PS:QH1A}I:Sp1-SP", "SR:C02-MG{PS:QH2A}I:Sp1-SP", "SR:C02-MG{PS:QH3A}I:Sp1-SP", "SR:C02-MG{PS:QL1B}I:Sp1-SP", "SR:C02-MG{PS:QL2B}I:Sp1-SP", "SR:C02-MG{PS:QL3B}I:Sp1-SP", "SR:C02-MG{PS:QM1A}I:Sp1-SP", "SR:C02-MG{PS:QM1B}I:Sp1-SP", "SR:C02-MG{PS:QM2A}I:Sp1-SP", "SR:C02-MG{PS:QM2B}I:Sp1-SP", "SR:C02-MG{PS:SM1B-P2}I:Sp1-SP", "SR:C02-MG{PS:SM2B-P2}I:Sp1-SP", "SR:C02-MG{PS:SQKH1A}I:Sp1-SP", "SR:C03-MG{PS:BT1A}I:Sp1-SP", "SR:C03-MG{PS:BT1A}I:Sp2-SP", "SR:C03-MG{PS:CH1B}I:Sp1-SP", "SR:C03-MG{PS:CH1B}I:Sp2-SP", "SR:C03-MG{PS:CH2B}I:Sp1-SP", "SR:C03-MG{PS:CH2B}I:Sp2-SP", "SR:C03-MG{PS:CL1A}I:Sp1-SP", "SR:C03-MG{PS:CL1A}I:Sp2-SP", "SR:C03-MG{PS:CL2A}I:Sp1-SP", "SR:C03-MG{PS:CL2A}I:Sp2-SP", "SR:C03-MG{PS:CM1A}I:Sp1-SP", "SR:C03-MG{PS:CM1A}I:Sp2-SP", "SR:C03-MG{PS:CM1B}I:Sp1-SP", "SR:C03-MG{PS:CM1B}I:Sp2-SP", "SR:C03-MG{PS:D-SP}I:Sp1-SP", "SR:C03-MG{PS:QH1B}I:Sp1-SP", "SR:C03-MG{PS:QH2B}I:Sp1-SP", "SR:C03-MG{PS:QH3B}I:Sp1-SP", "SR:C03-MG{PS:QL1A}I:Sp1-SP", "SR:C03-MG{PS:QL2A}I:Sp1-SP", "SR:C03-MG{PS:QL3A}I:Sp1-SP", "SR:C03-MG{PS:QM1A}I:Sp1-SP", "SR:C03-MG{PS:QM1B}I:Sp1-SP", "SR:C03-MG{PS:QM2A}I:Sp1-SP", "SR:C03-MG{PS:QM2B}I:Sp1-SP", "SR:C03-MG{PS:SL2-P2}I:Sp1-SP", "SR:C03-MG{PS:SL3-P2}I:Sp1-SP", "SR:C03-MG{PS:SQKM1A}I:Sp1-SP", "SR:C04-MG{PS:BT1A}I:Sp1-SP", "SR:C04-MG{PS:BT1A}I:Sp2-SP", "SR:C04-MG{PS:CH1A}I:Sp1-SP", "SR:C04-MG{PS:CH1A}I:Sp2-SP", "SR:C04-MG{PS:CH2A}I:Sp1-SP", "SR:C04-MG{PS:CH2A}I:Sp2-SP", "SR:C04-MG{PS:CL1B}I:Sp1-SP", "SR:C04-MG{PS:CL1B}I:Sp2-SP", "SR:C04-MG{PS:CL2B}I:Sp1-SP", "SR:C04-MG{PS:CL2B}I:Sp2-SP", "SR:C04-MG{PS:CM1A}I:Sp1-SP", "SR:C04-MG{PS:CM1A}I:Sp2-SP", "SR:C04-MG{PS:CM1B}I:Sp1-SP", "SR:C04-MG{PS:CM1B}I:Sp2-SP", "SR:C04-MG{PS:QH1A}I:Sp1-SP", "SR:C04-MG{PS:QH2A}I:Sp1-SP", "SR:C04-MG{PS:QH3A}I:Sp1-SP", "SR:C04-MG{PS:QL1B}I:Sp1-SP", "SR:C04-MG{PS:QL2B}I:Sp1-SP", "SR:C04-MG{PS:QL3B}I:Sp1-SP", "SR:C04-MG{PS:QM1A}I:Sp1-SP", "SR:C04-MG{PS:QM1B}I:Sp1-SP", "SR:C04-MG{PS:QM2A}I:Sp1-SP", "SR:C04-MG{PS:QM2B}I:Sp1-SP", "SR:C04-MG{PS:SL1-P2}I:Sp1-SP", "SR:C04-MG{PS:SQKH1A}I:Sp1-SP", "SR:C05-MG{PS:BT1A}I:Sp1-SP", "SR:C05-MG{PS:BT1A}I:Sp2-SP", "SR:C05-MG{PS:CH1B}I:Sp1-SP", "SR:C05-MG{PS:CH1B}I:Sp2-SP", "SR:C05-MG{PS:CH2B}I:Sp1-SP", "SR:C05-MG{PS:CH2B}I:Sp2-SP", "SR:C05-MG{PS:CL1A}I:Sp1-SP", "SR:C05-MG{PS:CL1A}I:Sp2-SP", "SR:C05-MG{PS:CL2A}I:Sp1-SP", "SR:C05-MG{PS:CL2A}I:Sp2-SP", "SR:C05-MG{PS:CM1A}I:Sp1-SP", "SR:C05-MG{PS:CM1A}I:Sp2-SP", "SR:C05-MG{PS:CM1B}I:Sp1-SP", "SR:C05-MG{PS:CM1B}I:Sp2-SP", "SR:C05-MG{PS:QH1B}I:Sp1-SP", "SR:C05-MG{PS:QH2B}I:Sp1-SP", "SR:C05-MG{PS:QH3B}I:Sp1-SP", "SR:C05-MG{PS:QL1A}I:Sp1-SP", "SR:C05-MG{PS:QL2A}I:Sp1-SP", "SR:C05-MG{PS:QL3A}I:Sp1-SP", "SR:C05-MG{PS:QM1A}I:Sp1-SP", "SR:C05-MG{PS:QM1B}I:Sp1-SP", "SR:C05-MG{PS:QM2A}I:Sp1-SP", "SR:C05-MG{PS:QM2B}I:Sp1-SP", "SR:C05-MG{PS:SQKM1A}I:Sp1-SP", "SR:C06-MG{PS:BT1A}I:Sp1-SP", "SR:C06-MG{PS:BT1A}I:Sp2-SP", "SR:C06-MG{PS:CH1A}I:Sp1-SP", "SR:C06-MG{PS:CH1A}I:Sp2-SP", "SR:C06-MG{PS:CH2A}I:Sp1-SP", "SR:C06-MG{PS:CH2A}I:Sp2-SP", "SR:C06-MG{PS:CL1B}I:Sp1-SP", "SR:C06-MG{PS:CL1B}I:Sp2-SP", "SR:C06-MG{PS:CL2B}I:Sp1-SP", "SR:C06-MG{PS:CL2B}I:Sp2-SP", "SR:C06-MG{PS:CM1A}I:Sp1-SP", "SR:C06-MG{PS:CM1A}I:Sp2-SP", "SR:C06-MG{PS:CM1B}I:Sp1-SP", "SR:C06-MG{PS:CM1B}I:Sp2-SP", "SR:C06-MG{PS:QH1A}I:Sp1-SP", "SR:C06-MG{PS:QH2A}I:Sp1-SP", "SR:C06-MG{PS:QH3A}I:Sp1-SP", "SR:C06-MG{PS:QL1B}I:Sp1-SP", "SR:C06-MG{PS:QL2B}I:Sp1-SP", "SR:C06-MG{PS:QL3B}I:Sp1-SP", "SR:C06-MG{PS:QM1A}I:Sp1-SP", "SR:C06-MG{PS:QM1B}I:Sp1-SP", "SR:C06-MG{PS:QM2A}I:Sp1-SP", "SR:C06-MG{PS:QM2B}I:Sp1-SP", "SR:C06-MG{PS:SH1-P3}I:Sp1-SP", "SR:C06-MG{PS:SH3-P3}I:Sp1-SP", "SR:C06-MG{PS:SQKH1A}I:Sp1-SP", "SR:C07-MG{PS:BT1A}I:Sp1-SP", "SR:C07-MG{PS:BT1A}I:Sp2-SP", "SR:C07-MG{PS:CH1B}I:Sp1-SP", "SR:C07-MG{PS:CH1B}I:Sp2-SP", "SR:C07-MG{PS:CH2B}I:Sp1-SP", "SR:C07-MG{PS:CH2B}I:Sp2-SP", "SR:C07-MG{PS:CL1A}I:Sp1-SP", "SR:C07-MG{PS:CL1A}I:Sp2-SP", "SR:C07-MG{PS:CL2A}I:Sp1-SP", "SR:C07-MG{PS:CL2A}I:Sp2-SP", "SR:C07-MG{PS:CM1A}I:Sp1-SP", "SR:C07-MG{PS:CM1A}I:Sp2-SP", "SR:C07-MG{PS:CM1B}I:Sp1-SP", "SR:C07-MG{PS:CM1B}I:Sp2-SP", "SR:C07-MG{PS:QH1B}I:Sp1-SP", "SR:C07-MG{PS:QH2B}I:Sp1-SP", "SR:C07-MG{PS:QH3B}I:Sp1-SP", "SR:C07-MG{PS:QL1A}I:Sp1-SP", "SR:C07-MG{PS:QL2A}I:Sp1-SP", "SR:C07-MG{PS:QL3A}I:Sp1-SP", "SR:C07-MG{PS:QM1A}I:Sp1-SP", "SR:C07-MG{PS:QM1B}I:Sp1-SP", "SR:C07-MG{PS:QM2A}I:Sp1-SP", "SR:C07-MG{PS:QM2B}I:Sp1-SP", "SR:C07-MG{PS:SH4-P3}I:Sp1-SP", "SR:C07-MG{PS:SM1A-P3}I:Sp1-SP", "SR:C07-MG{PS:SQKM1A}I:Sp1-SP", "SR:C08-MG{PS:BT1A}I:Sp1-SP", "SR:C08-MG{PS:BT1A}I:Sp2-SP", "SR:C08-MG{PS:CH1A}I:Sp1-SP", "SR:C08-MG{PS:CH1A}I:Sp2-SP", "SR:C08-MG{PS:CH2A}I:Sp1-SP", "SR:C08-MG{PS:CH2A}I:Sp2-SP", "SR:C08-MG{PS:CL1B}I:Sp1-SP", "SR:C08-MG{PS:CL1B}I:Sp2-SP", "SR:C08-MG{PS:CL2B}I:Sp1-SP", "SR:C08-MG{PS:CL2B}I:Sp2-SP", "SR:C08-MG{PS:CM1A}I:Sp1-SP", "SR:C08-MG{PS:CM1A}I:Sp2-SP", "SR:C08-MG{PS:CM1B}I:Sp1-SP", "SR:C08-MG{PS:CM1B}I:Sp2-SP", "SR:C08-MG{PS:QH1A}I:Sp1-SP", "SR:C08-MG{PS:QH2A}I:Sp1-SP", "SR:C08-MG{PS:QH3A}I:Sp1-SP", "SR:C08-MG{PS:QL1B}I:Sp1-SP", "SR:C08-MG{PS:QL2B}I:Sp1-SP", "SR:C08-MG{PS:QL3B}I:Sp1-SP", "SR:C08-MG{PS:QM1A}I:Sp1-SP", "SR:C08-MG{PS:QM1B}I:Sp1-SP", "SR:C08-MG{PS:QM2A}I:Sp1-SP", "SR:C08-MG{PS:QM2B}I:Sp1-SP", "SR:C08-MG{PS:SH1-DW08}I:Sp1-SP", "SR:C08-MG{PS:SH3-DW08}I:Sp1-SP", "SR:C08-MG{PS:SH4-DW08}I:Sp1-SP", "SR:C08-MG{PS:SM1B-P3}I:Sp1-SP", "SR:C08-MG{PS:SM2B-P3}I:Sp1-SP", "SR:C08-MG{PS:SQKH1A}I:Sp1-SP", "SR:C09-MG{PS:BT1A}I:Sp1-SP", "SR:C09-MG{PS:BT1A}I:Sp2-SP", "SR:C09-MG{PS:CH1B}I:Sp1-SP", "SR:C09-MG{PS:CH1B}I:Sp2-SP", "SR:C09-MG{PS:CH2B}I:Sp1-SP", "SR:C09-MG{PS:CH2B}I:Sp2-SP", "SR:C09-MG{PS:CL1A}I:Sp1-SP", "SR:C09-MG{PS:CL1A}I:Sp2-SP", "SR:C09-MG{PS:CL2A}I:Sp1-SP", "SR:C09-MG{PS:CL2A}I:Sp2-SP", "SR:C09-MG{PS:CM1A}I:Sp1-SP", "SR:C09-MG{PS:CM1A}I:Sp2-SP", "SR:C09-MG{PS:CM1B}I:Sp1-SP", "SR:C09-MG{PS:CM1B}I:Sp2-SP", "SR:C09-MG{PS:QH1B}I:Sp1-SP", "SR:C09-MG{PS:QH2B}I:Sp1-SP", "SR:C09-MG{PS:QH3B}I:Sp1-SP", "SR:C09-MG{PS:QL1A}I:Sp1-SP", "SR:C09-MG{PS:QL2A}I:Sp1-SP", "SR:C09-MG{PS:QL3A}I:Sp1-SP", "SR:C09-MG{PS:QM1A}I:Sp1-SP", "SR:C09-MG{PS:QM1B}I:Sp1-SP", "SR:C09-MG{PS:QM2A}I:Sp1-SP", "SR:C09-MG{PS:QM2B}I:Sp1-SP", "SR:C09-MG{PS:SL2-P3}I:Sp1-SP", "SR:C09-MG{PS:SL3-P3}I:Sp1-SP", "SR:C09-MG{PS:SQKM1A}I:Sp1-SP", "SR:C10-MG{PS:BT1A}I:Sp1-SP", "SR:C10-MG{PS:BT1A}I:Sp2-SP", "SR:C10-MG{PS:CH1A}I:Sp1-SP", "SR:C10-MG{PS:CH1A}I:Sp2-SP", "SR:C10-MG{PS:CH2A}I:Sp1-SP", "SR:C10-MG{PS:CH2A}I:Sp2-SP", "SR:C10-MG{PS:CL1B}I:Sp1-SP", "SR:C10-MG{PS:CL1B}I:Sp2-SP", "SR:C10-MG{PS:CL2B}I:Sp1-SP", "SR:C10-MG{PS:CL2B}I:Sp2-SP", "SR:C10-MG{PS:CM1A}I:Sp1-SP", "SR:C10-MG{PS:CM1A}I:Sp2-SP", "SR:C10-MG{PS:CM1B}I:Sp1-SP", "SR:C10-MG{PS:CM1B}I:Sp2-SP", "SR:C10-MG{PS:QH1A}I:Sp1-SP", "SR:C10-MG{PS:QH2A}I:Sp1-SP", "SR:C10-MG{PS:QH3A}I:Sp1-SP", "SR:C10-MG{PS:QL1B}I:Sp1-SP", "SR:C10-MG{PS:QL2B}I:Sp1-SP", "SR:C10-MG{PS:QL3B}I:Sp1-SP", "SR:C10-MG{PS:QM1A}I:Sp1-SP", "SR:C10-MG{PS:QM1B}I:Sp1-SP", "SR:C10-MG{PS:QM2A}I:Sp1-SP", "SR:C10-MG{PS:QM2B}I:Sp1-SP", "SR:C10-MG{PS:SL1-P3}I:Sp1-SP", "SR:C10-MG{PS:SQKH1A}I:Sp1-SP", "SR:C11-MG{PS:BT1A}I:Sp1-SP", "SR:C11-MG{PS:BT1A}I:Sp2-SP", "SR:C11-MG{PS:CH1B}I:Sp1-SP", "SR:C11-MG{PS:CH1B}I:Sp2-SP", "SR:C11-MG{PS:CH2B}I:Sp1-SP", "SR:C11-MG{PS:CH2B}I:Sp2-SP", "SR:C11-MG{PS:CL1A}I:Sp1-SP", "SR:C11-MG{PS:CL1A}I:Sp2-SP", "SR:C11-MG{PS:CL2A}I:Sp1-SP", "SR:C11-MG{PS:CL2A}I:Sp2-SP", "SR:C11-MG{PS:CM1A}I:Sp1-SP", "SR:C11-MG{PS:CM1A}I:Sp2-SP", "SR:C11-MG{PS:CM1B}I:Sp1-SP", "SR:C11-MG{PS:CM1B}I:Sp2-SP", "SR:C11-MG{PS:QH1B}I:Sp1-SP", "SR:C11-MG{PS:QH2B}I:Sp1-SP", "SR:C11-MG{PS:QH3B}I:Sp1-SP", "SR:C11-MG{PS:QL1A}I:Sp1-SP", "SR:C11-MG{PS:QL2A}I:Sp1-SP", "SR:C11-MG{PS:QL3A}I:Sp1-SP", "SR:C11-MG{PS:QM1A}I:Sp1-SP", "SR:C11-MG{PS:QM1B}I:Sp1-SP", "SR:C11-MG{PS:QM2A}I:Sp1-SP", "SR:C11-MG{PS:QM2B}I:Sp1-SP", "SR:C11-MG{PS:SQKM1A}I:Sp1-SP", "SR:C12-MG{PS:BT1A}I:Sp1-SP", "SR:C12-MG{PS:BT1A}I:Sp2-SP", "SR:C12-MG{PS:CH1A}I:Sp1-SP", "SR:C12-MG{PS:CH1A}I:Sp2-SP", "SR:C12-MG{PS:CH2A}I:Sp1-SP", "SR:C12-MG{PS:CH2A}I:Sp2-SP", "SR:C12-MG{PS:CL1B}I:Sp1-SP", "SR:C12-MG{PS:CL1B}I:Sp2-SP", "SR:C12-MG{PS:CL2B}I:Sp1-SP", "SR:C12-MG{PS:CL2B}I:Sp2-SP", "SR:C12-MG{PS:CM1A}I:Sp1-SP", "SR:C12-MG{PS:CM1A}I:Sp2-SP", "SR:C12-MG{PS:CM1B}I:Sp1-SP", "SR:C12-MG{PS:CM1B}I:Sp2-SP", "SR:C12-MG{PS:QH1A}I:Sp1-SP", "SR:C12-MG{PS:QH2A}I:Sp1-SP", "SR:C12-MG{PS:QH3A}I:Sp1-SP", "SR:C12-MG{PS:QL1B}I:Sp1-SP", "SR:C12-MG{PS:QL2B}I:Sp1-SP", "SR:C12-MG{PS:QL3B}I:Sp1-SP", "SR:C12-MG{PS:QM1A}I:Sp1-SP", "SR:C12-MG{PS:QM1B}I:Sp1-SP", "SR:C12-MG{PS:QM2A}I:Sp1-SP", "SR:C12-MG{PS:QM2B}I:Sp1-SP", "SR:C12-MG{PS:SH1-P4}I:Sp1-SP", "SR:C12-MG{PS:SH3-P4}I:Sp1-SP", "SR:C12-MG{PS:SQKH1A}I:Sp1-SP", "SR:C13-MG{PS:BT1A}I:Sp1-SP", "SR:C13-MG{PS:BT1A}I:Sp2-SP", "SR:C13-MG{PS:CH1B}I:Sp1-SP", "SR:C13-MG{PS:CH1B}I:Sp2-SP", "SR:C13-MG{PS:CH2B}I:Sp1-SP", "SR:C13-MG{PS:CH2B}I:Sp2-SP", "SR:C13-MG{PS:CL1A}I:Sp1-SP", "SR:C13-MG{PS:CL1A}I:Sp2-SP", "SR:C13-MG{PS:CL2A}I:Sp1-SP", "SR:C13-MG{PS:CL2A}I:Sp2-SP", "SR:C13-MG{PS:CM1A}I:Sp1-SP", "SR:C13-MG{PS:CM1A}I:Sp2-SP", "SR:C13-MG{PS:CM1B}I:Sp1-SP", "SR:C13-MG{PS:CM1B}I:Sp2-SP", "SR:C13-MG{PS:QH1B}I:Sp1-SP", "SR:C13-MG{PS:QH2B}I:Sp1-SP", "SR:C13-MG{PS:QH3B}I:Sp1-SP", "SR:C13-MG{PS:QL1A}I:Sp1-SP", "SR:C13-MG{PS:QL2A}I:Sp1-SP", "SR:C13-MG{PS:QL3A}I:Sp1-SP", "SR:C13-MG{PS:QM1A}I:Sp1-SP", "SR:C13-MG{PS:QM1B}I:Sp1-SP", "SR:C13-MG{PS:QM2A}I:Sp1-SP", "SR:C13-MG{PS:QM2B}I:Sp1-SP", "SR:C13-MG{PS:SH4-P4}I:Sp1-SP", "SR:C13-MG{PS:SM1A-P4}I:Sp1-SP", "SR:C13-MG{PS:SQKM1A}I:Sp1-SP", "SR:C14-MG{PS:BT1A}I:Sp1-SP", "SR:C14-MG{PS:BT1A}I:Sp2-SP", "SR:C14-MG{PS:CH1A}I:Sp1-SP", "SR:C14-MG{PS:CH1A}I:Sp2-SP", "SR:C14-MG{PS:CH2A}I:Sp1-SP", "SR:C14-MG{PS:CH2A}I:Sp2-SP", "SR:C14-MG{PS:CL1B}I:Sp1-SP", "SR:C14-MG{PS:CL1B}I:Sp2-SP", "SR:C14-MG{PS:CL2B}I:Sp1-SP", "SR:C14-MG{PS:CL2B}I:Sp2-SP", "SR:C14-MG{PS:CM1A}I:Sp1-SP", "SR:C14-MG{PS:CM1A}I:Sp2-SP", "SR:C14-MG{PS:CM1B}I:Sp1-SP", "SR:C14-MG{PS:CM1B}I:Sp2-SP", "SR:C14-MG{PS:QH1A}I:Sp1-SP", "SR:C14-MG{PS:QH2A}I:Sp1-SP", "SR:C14-MG{PS:QH3A}I:Sp1-SP", "SR:C14-MG{PS:QL1B}I:Sp1-SP", "SR:C14-MG{PS:QL2B}I:Sp1-SP", "SR:C14-MG{PS:QL3B}I:Sp1-SP", "SR:C14-MG{PS:QM1A}I:Sp1-SP", "SR:C14-MG{PS:QM1B}I:Sp1-SP", "SR:C14-MG{PS:QM2A}I:Sp1-SP", "SR:C14-MG{PS:QM2B}I:Sp1-SP", "SR:C14-MG{PS:SM1B-P4}I:Sp1-SP", "SR:C14-MG{PS:SM2B-P4}I:Sp1-SP", "SR:C14-MG{PS:SQKH1A}I:Sp1-SP", "SR:C15-MG{PS:BT1A}I:Sp1-SP", "SR:C15-MG{PS:BT1A}I:Sp2-SP", "SR:C15-MG{PS:CH1B}I:Sp1-SP", "SR:C15-MG{PS:CH1B}I:Sp2-SP", "SR:C15-MG{PS:CH2B}I:Sp1-SP", "SR:C15-MG{PS:CH2B}I:Sp2-SP", "SR:C15-MG{PS:CL1A}I:Sp1-SP", "SR:C15-MG{PS:CL1A}I:Sp2-SP", "SR:C15-MG{PS:CL2A}I:Sp1-SP", "SR:C15-MG{PS:CL2A}I:Sp2-SP", "SR:C15-MG{PS:CM1A}I:Sp1-SP", "SR:C15-MG{PS:CM1A}I:Sp2-SP", "SR:C15-MG{PS:CM1B}I:Sp1-SP", "SR:C15-MG{PS:CM1B}I:Sp2-SP", "SR:C15-MG{PS:QH1B}I:Sp1-SP", "SR:C15-MG{PS:QH2B}I:Sp1-SP", "SR:C15-MG{PS:QH3B}I:Sp1-SP", "SR:C15-MG{PS:QL1A}I:Sp1-SP", "SR:C15-MG{PS:QL2A}I:Sp1-SP", "SR:C15-MG{PS:QL3A}I:Sp1-SP", "SR:C15-MG{PS:QM1A}I:Sp1-SP", "SR:C15-MG{PS:QM1B}I:Sp1-SP", "SR:C15-MG{PS:QM2A}I:Sp1-SP", "SR:C15-MG{PS:QM2B}I:Sp1-SP", "SR:C15-MG{PS:SL2-P4}I:Sp1-SP", "SR:C15-MG{PS:SL3-P4}I:Sp1-SP", "SR:C15-MG{PS:SQKM1A}I:Sp1-SP", "SR:C16-MG{PS:BT1A}I:Sp1-SP", "SR:C16-MG{PS:BT1A}I:Sp2-SP", "SR:C16-MG{PS:CH1A}I:Sp1-SP", "SR:C16-MG{PS:CH1A}I:Sp2-SP", "SR:C16-MG{PS:CH2A}I:Sp1-SP", "SR:C16-MG{PS:CH2A}I:Sp2-SP", "SR:C16-MG{PS:CL1B}I:Sp1-SP", "SR:C16-MG{PS:CL1B}I:Sp2-SP", "SR:C16-MG{PS:CL2B}I:Sp1-SP", "SR:C16-MG{PS:CL2B}I:Sp2-SP", "SR:C16-MG{PS:CM1A}I:Sp1-SP", "SR:C16-MG{PS:CM1A}I:Sp2-SP", "SR:C16-MG{PS:CM1B}I:Sp1-SP", "SR:C16-MG{PS:CM1B}I:Sp2-SP", "SR:C16-MG{PS:QH1A}I:Sp1-SP", "SR:C16-MG{PS:QH2A}I:Sp1-SP", "SR:C16-MG{PS:QH3A}I:Sp1-SP", "SR:C16-MG{PS:QL1B}I:Sp1-SP", "SR:C16-MG{PS:QL2B}I:Sp1-SP", "SR:C16-MG{PS:QL3B}I:Sp1-SP", "SR:C16-MG{PS:QM1A}I:Sp1-SP", "SR:C16-MG{PS:QM1B}I:Sp1-SP", "SR:C16-MG{PS:QM2A}I:Sp1-SP", "SR:C16-MG{PS:QM2B}I:Sp1-SP", "SR:C16-MG{PS:SL1-P4}I:Sp1-SP", "SR:C16-MG{PS:SQKH1A}I:Sp1-SP", "SR:C17-MG{PS:BT1A}I:Sp1-SP", "SR:C17-MG{PS:BT1A}I:Sp2-SP", "SR:C17-MG{PS:CH1B}I:Sp1-SP", "SR:C17-MG{PS:CH1B}I:Sp2-SP", "SR:C17-MG{PS:CH2B}I:Sp1-SP", "SR:C17-MG{PS:CH2B}I:Sp2-SP", "SR:C17-MG{PS:CL1A}I:Sp1-SP", "SR:C17-MG{PS:CL1A}I:Sp2-SP", "SR:C17-MG{PS:CL2A}I:Sp1-SP", "SR:C17-MG{PS:CL2A}I:Sp2-SP", "SR:C17-MG{PS:CM1A}I:Sp1-SP", "SR:C17-MG{PS:CM1A}I:Sp2-SP", "SR:C17-MG{PS:CM1B}I:Sp1-SP", "SR:C17-MG{PS:CM1B}I:Sp2-SP", "SR:C17-MG{PS:QH1B}I:Sp1-SP", "SR:C17-MG{PS:QH2B}I:Sp1-SP", "SR:C17-MG{PS:QH3B}I:Sp1-SP", "SR:C17-MG{PS:QL1A}I:Sp1-SP", "SR:C17-MG{PS:QL2A}I:Sp1-SP", "SR:C17-MG{PS:QL3A}I:Sp1-SP", "SR:C17-MG{PS:QM1A}I:Sp1-SP", "SR:C17-MG{PS:QM1B}I:Sp1-SP", "SR:C17-MG{PS:QM2A}I:Sp1-SP", "SR:C17-MG{PS:QM2B}I:Sp1-SP", "SR:C17-MG{PS:SQKM1A}I:Sp1-SP", "SR:C18-MG{PS:BT1A}I:Sp1-SP", "SR:C18-MG{PS:BT1A}I:Sp2-SP", "SR:C18-MG{PS:CH1A}I:Sp1-SP", "SR:C18-MG{PS:CH1A}I:Sp2-SP", "SR:C18-MG{PS:CH2A}I:Sp1-SP", "SR:C18-MG{PS:CH2A}I:Sp2-SP", "SR:C18-MG{PS:CL1B}I:Sp1-SP", "SR:C18-MG{PS:CL1B}I:Sp2-SP", "SR:C18-MG{PS:CL2B}I:Sp1-SP", "SR:C18-MG{PS:CL2B}I:Sp2-SP", "SR:C18-MG{PS:CM1A}I:Sp1-SP", "SR:C18-MG{PS:CM1A}I:Sp2-SP", "SR:C18-MG{PS:CM1B}I:Sp1-SP", "SR:C18-MG{PS:CM1B}I:Sp2-SP", "SR:C18-MG{PS:QH1A}I:Sp1-SP", "SR:C18-MG{PS:QH2A}I:Sp1-SP", "SR:C18-MG{PS:QH3A}I:Sp1-SP", "SR:C18-MG{PS:QL1B}I:Sp1-SP", "SR:C18-MG{PS:QL2B}I:Sp1-SP", "SR:C18-MG{PS:QL3B}I:Sp1-SP", "SR:C18-MG{PS:QM1A}I:Sp1-SP", "SR:C18-MG{PS:QM1B}I:Sp1-SP", "SR:C18-MG{PS:QM2A}I:Sp1-SP", "SR:C18-MG{PS:QM2B}I:Sp1-SP", "SR:C18-MG{PS:SH1-DW18}I:Sp1-SP", "SR:C18-MG{PS:SH1-P5}I:Sp1-SP", "SR:C18-MG{PS:SH3-DW18}I:Sp1-SP", "SR:C18-MG{PS:SH3-P5}I:Sp1-SP", "SR:C18-MG{PS:SH4-DW18}I:Sp1-SP", "SR:C18-MG{PS:SQKH1A}I:Sp1-SP", "SR:C19-MG{PS:BT1A}I:Sp1-SP", "SR:C19-MG{PS:BT1A}I:Sp2-SP", "SR:C19-MG{PS:CH1B}I:Sp1-SP", "SR:C19-MG{PS:CH1B}I:Sp2-SP", "SR:C19-MG{PS:CH2B}I:Sp1-SP", "SR:C19-MG{PS:CH2B}I:Sp2-SP", "SR:C19-MG{PS:CL1A}I:Sp1-SP", "SR:C19-MG{PS:CL1A}I:Sp2-SP", "SR:C19-MG{PS:CL2A}I:Sp1-SP", "SR:C19-MG{PS:CL2A}I:Sp2-SP", "SR:C19-MG{PS:CM1A}I:Sp1-SP", "SR:C19-MG{PS:CM1A}I:Sp2-SP", "SR:C19-MG{PS:CM1B}I:Sp1-SP", "SR:C19-MG{PS:CM1B}I:Sp2-SP", "SR:C19-MG{PS:QH1B}I:Sp1-SP", "SR:C19-MG{PS:QH2B}I:Sp1-SP", "SR:C19-MG{PS:QH3B}I:Sp1-SP", "SR:C19-MG{PS:QL1A}I:Sp1-SP", "SR:C19-MG{PS:QL2A}I:Sp1-SP", "SR:C19-MG{PS:QL3A}I:Sp1-SP", "SR:C19-MG{PS:QM1A}I:Sp1-SP", "SR:C19-MG{PS:QM1B}I:Sp1-SP", "SR:C19-MG{PS:QM2A}I:Sp1-SP", "SR:C19-MG{PS:QM2B}I:Sp1-SP", "SR:C19-MG{PS:SH4-P5}I:Sp1-SP", "SR:C19-MG{PS:SM1A-P5}I:Sp1-SP", "SR:C19-MG{PS:SQKM1A}I:Sp1-SP", "SR:C20-MG{PS:BT1A}I:Sp1-SP", "SR:C20-MG{PS:BT1A}I:Sp2-SP", "SR:C20-MG{PS:CH1A}I:Sp1-SP", "SR:C20-MG{PS:CH1A}I:Sp2-SP", "SR:C20-MG{PS:CH2A}I:Sp1-SP", "SR:C20-MG{PS:CH2A}I:Sp2-SP", "SR:C20-MG{PS:CL1B}I:Sp1-SP", "SR:C20-MG{PS:CL1B}I:Sp2-SP", "SR:C20-MG{PS:CL2B}I:Sp1-SP", "SR:C20-MG{PS:CL2B}I:Sp2-SP", "SR:C20-MG{PS:CM1A}I:Sp1-SP", "SR:C20-MG{PS:CM1A}I:Sp2-SP", "SR:C20-MG{PS:CM1B}I:Sp1-SP", "SR:C20-MG{PS:CM1B}I:Sp2-SP", "SR:C20-MG{PS:QH1A}I:Sp1-SP", "SR:C20-MG{PS:QH2A}I:Sp1-SP", "SR:C20-MG{PS:QH3A}I:Sp1-SP", "SR:C20-MG{PS:QL1B}I:Sp1-SP", "SR:C20-MG{PS:QL2B}I:Sp1-SP", "SR:C20-MG{PS:QL3B}I:Sp1-SP", "SR:C20-MG{PS:QM1A}I:Sp1-SP", "SR:C20-MG{PS:QM1B}I:Sp1-SP", "SR:C20-MG{PS:QM2A}I:Sp1-SP", "SR:C20-MG{PS:QM2B}I:Sp1-SP", "SR:C20-MG{PS:SM1B-P5}I:Sp1-SP", "SR:C20-MG{PS:SM2B-P5}I:Sp1-SP", "SR:C20-MG{PS:SQKH1A}I:Sp1-SP", "SR:C21-MG{PS:BT1A}I:Sp1-SP", "SR:C21-MG{PS:BT1A}I:Sp2-SP", "SR:C21-MG{PS:CH1B}I:Sp1-SP", "SR:C21-MG{PS:CH1B}I:Sp2-SP", "SR:C21-MG{PS:CH2B}I:Sp1-SP", "SR:C21-MG{PS:CH2B}I:Sp2-SP", "SR:C21-MG{PS:CL1A}I:Sp1-SP", "SR:C21-MG{PS:CL1A}I:Sp2-SP", "SR:C21-MG{PS:CL2A}I:Sp1-SP", "SR:C21-MG{PS:CL2A}I:Sp2-SP", "SR:C21-MG{PS:CM1A}I:Sp1-SP", "SR:C21-MG{PS:CM1A}I:Sp2-SP", "SR:C21-MG{PS:CM1B}I:Sp1-SP", "SR:C21-MG{PS:CM1B}I:Sp2-SP", "SR:C21-MG{PS:QH1B}I:Sp1-SP", "SR:C21-MG{PS:QH2B}I:Sp1-SP", "SR:C21-MG{PS:QH3B}I:Sp1-SP", "SR:C21-MG{PS:QL1A}I:Sp1-SP", "SR:C21-MG{PS:QL2A}I:Sp1-SP", "SR:C21-MG{PS:QL3A}I:Sp1-SP", "SR:C21-MG{PS:QM1A}I:Sp1-SP", "SR:C21-MG{PS:QM1B}I:Sp1-SP", "SR:C21-MG{PS:QM2A}I:Sp1-SP", "SR:C21-MG{PS:QM2B}I:Sp1-SP", "SR:C21-MG{PS:SL2-P5}I:Sp1-SP", "SR:C21-MG{PS:SL3-P5}I:Sp1-SP", "SR:C21-MG{PS:SQKM1A}I:Sp1-SP", "SR:C22-MG{PS:BT1A}I:Sp1-SP", "SR:C22-MG{PS:BT1A}I:Sp2-SP", "SR:C22-MG{PS:CH1A}I:Sp1-SP", "SR:C22-MG{PS:CH1A}I:Sp2-SP", "SR:C22-MG{PS:CH2A}I:Sp1-SP", "SR:C22-MG{PS:CH2A}I:Sp2-SP", "SR:C22-MG{PS:CL1B}I:Sp1-SP", "SR:C22-MG{PS:CL1B}I:Sp2-SP", "SR:C22-MG{PS:CL2B}I:Sp1-SP", "SR:C22-MG{PS:CL2B}I:Sp2-SP", "SR:C22-MG{PS:CM1A}I:Sp1-SP", "SR:C22-MG{PS:CM1A}I:Sp2-SP", "SR:C22-MG{PS:CM1B}I:Sp1-SP", "SR:C22-MG{PS:CM1B}I:Sp2-SP", "SR:C22-MG{PS:QH1A}I:Sp1-SP", "SR:C22-MG{PS:QH2A}I:Sp1-SP", "SR:C22-MG{PS:QH3A}I:Sp1-SP", "SR:C22-MG{PS:QL1B}I:Sp1-SP", "SR:C22-MG{PS:QL2B}I:Sp1-SP", "SR:C22-MG{PS:QL3B}I:Sp1-SP", "SR:C22-MG{PS:QM1A}I:Sp1-SP", "SR:C22-MG{PS:QM1B}I:Sp1-SP", "SR:C22-MG{PS:QM2A}I:Sp1-SP", "SR:C22-MG{PS:QM2B}I:Sp1-SP", "SR:C22-MG{PS:SL1-P5}I:Sp1-SP", "SR:C22-MG{PS:SQKH1A}I:Sp1-SP", "SR:C23-MG{PS:BT1A}I:Sp1-SP", "SR:C23-MG{PS:BT1A}I:Sp2-SP", "SR:C23-MG{PS:CH1B}I:Sp1-SP", "SR:C23-MG{PS:CH1B}I:Sp2-SP", "SR:C23-MG{PS:CH2B}I:Sp1-SP", "SR:C23-MG{PS:CH2B}I:Sp2-SP", "SR:C23-MG{PS:CL1A}I:Sp1-SP", "SR:C23-MG{PS:CL1A}I:Sp2-SP", "SR:C23-MG{PS:CL2A}I:Sp1-SP", "SR:C23-MG{PS:CL2A}I:Sp2-SP", "SR:C23-MG{PS:CM1A}I:Sp1-SP", "SR:C23-MG{PS:CM1A}I:Sp2-SP", "SR:C23-MG{PS:CM1B}I:Sp1-SP", "SR:C23-MG{PS:CM1B}I:Sp2-SP", "SR:C23-MG{PS:QH1B}I:Sp1-SP", "SR:C23-MG{PS:QH2B}I:Sp1-SP", "SR:C23-MG{PS:QH3B}I:Sp1-SP", "SR:C23-MG{PS:QL1A}I:Sp1-SP", "SR:C23-MG{PS:QL2A}I:Sp1-SP", "SR:C23-MG{PS:QL3A}I:Sp1-SP", "SR:C23-MG{PS:QM1A}I:Sp1-SP", "SR:C23-MG{PS:QM1B}I:Sp1-SP", "SR:C23-MG{PS:QM2A}I:Sp1-SP", "SR:C23-MG{PS:QM2B}I:Sp1-SP", "SR:C23-MG{PS:SQKM1A}I:Sp1-SP", "SR:C24-MG{PS:BT1A}I:Sp1-SP", "SR:C24-MG{PS:BT1A}I:Sp2-SP", "SR:C24-MG{PS:CH1A}I:Sp1-SP", "SR:C24-MG{PS:CH1A}I:Sp2-SP", "SR:C24-MG{PS:CH2A}I:Sp1-SP", "SR:C24-MG{PS:CH2A}I:Sp2-SP", "SR:C24-MG{PS:CL1B}I:Sp1-SP", "SR:C24-MG{PS:CL1B}I:Sp2-SP", "SR:C24-MG{PS:CL2B}I:Sp1-SP", "SR:C24-MG{PS:CL2B}I:Sp2-SP", "SR:C24-MG{PS:CM1A}I:Sp1-SP", "SR:C24-MG{PS:CM1A}I:Sp2-SP", "SR:C24-MG{PS:CM1B}I:Sp1-SP", "SR:C24-MG{PS:CM1B}I:Sp2-SP", "SR:C24-MG{PS:QH1A}I:Sp1-SP", "SR:C24-MG{PS:QH2A}I:Sp1-SP", "SR:C24-MG{PS:QH3A}I:Sp1-SP", "SR:C24-MG{PS:QL1B}I:Sp1-SP", "SR:C24-MG{PS:QL2B}I:Sp1-SP", "SR:C24-MG{PS:QL3B}I:Sp1-SP", "SR:C24-MG{PS:QM1A}I:Sp1-SP", "SR:C24-MG{PS:QM1B}I:Sp1-SP", "SR:C24-MG{PS:QM2A}I:Sp1-SP", "SR:C24-MG{PS:QM2B}I:Sp1-SP", "SR:C24-MG{PS:SH1-P1}I:Sp1-SP", "SR:C24-MG{PS:SH3-P1}I:Sp1-SP", "SR:C24-MG{PS:SQKH1A}I:Sp1-SP", "SR:C25-MG{PS:BT1A}I:Sp1-SP", "SR:C25-MG{PS:BT1A}I:Sp2-SP", "SR:C25-MG{PS:CH1B}I:Sp1-SP", "SR:C25-MG{PS:CH1B}I:Sp2-SP", "SR:C25-MG{PS:CH2B}I:Sp1-SP", "SR:C25-MG{PS:CH2B}I:Sp2-SP", "SR:C25-MG{PS:CL1A}I:Sp1-SP", "SR:C25-MG{PS:CL1A}I:Sp2-SP", "SR:C25-MG{PS:CL2A}I:Sp1-SP", "SR:C25-MG{PS:CL2A}I:Sp2-SP", "SR:C25-MG{PS:CM1A}I:Sp1-SP", "SR:C25-MG{PS:CM1A}I:Sp2-SP", "SR:C25-MG{PS:CM1B}I:Sp1-SP", "SR:C25-MG{PS:CM1B}I:Sp2-SP", "SR:C25-MG{PS:QH1B}I:Sp1-SP", "SR:C25-MG{PS:QH2B}I:Sp1-SP", "SR:C25-MG{PS:QH3B}I:Sp1-SP", "SR:C25-MG{PS:QL1A}I:Sp1-SP", "SR:C25-MG{PS:QL2A}I:Sp1-SP", "SR:C25-MG{PS:QL3A}I:Sp1-SP", "SR:C25-MG{PS:QM1A}I:Sp1-SP", "SR:C25-MG{PS:QM1B}I:Sp1-SP", "SR:C25-MG{PS:QM2A}I:Sp1-SP", "SR:C25-MG{PS:QM2B}I:Sp1-SP", "SR:C25-MG{PS:SH4-P1}I:Sp1-SP", "SR:C25-MG{PS:SM1A-P1}I:Sp1-SP", "SR:C25-MG{PS:SQKM1A}I:Sp1-SP", "SR:C26-MG{PS:BT1A}I:Sp1-SP", "SR:C26-MG{PS:BT1A}I:Sp2-SP", "SR:C26-MG{PS:CH1A}I:Sp1-SP", "SR:C26-MG{PS:CH1A}I:Sp2-SP", "SR:C26-MG{PS:CH2A}I:Sp1-SP", "SR:C26-MG{PS:CH2A}I:Sp2-SP", "SR:C26-MG{PS:CL1B}I:Sp1-SP", "SR:C26-MG{PS:CL1B}I:Sp2-SP", "SR:C26-MG{PS:CL2B}I:Sp1-SP", "SR:C26-MG{PS:CL2B}I:Sp2-SP", "SR:C26-MG{PS:CM1A}I:Sp1-SP", "SR:C26-MG{PS:CM1A}I:Sp2-SP", "SR:C26-MG{PS:CM1B}I:Sp1-SP", "SR:C26-MG{PS:CM1B}I:Sp2-SP", "SR:C26-MG{PS:QH1A}I:Sp1-SP", "SR:C26-MG{PS:QH2A}I:Sp1-SP", "SR:C26-MG{PS:QH3A}I:Sp1-SP", "SR:C26-MG{PS:QL1B}I:Sp1-SP", "SR:C26-MG{PS:QL2B}I:Sp1-SP", "SR:C26-MG{PS:QL3B}I:Sp1-SP", "SR:C26-MG{PS:QM1A}I:Sp1-SP", "SR:C26-MG{PS:QM1B}I:Sp1-SP", "SR:C26-MG{PS:QM2A}I:Sp1-SP", "SR:C26-MG{PS:QM2B}I:Sp1-SP", "SR:C26-MG{PS:SM1B-P1}I:Sp1-SP", "SR:C26-MG{PS:SM2B-P1}I:Sp1-SP", "SR:C26-MG{PS:SQKH1A}I:Sp1-SP", "SR:C27-MG{PS:BT1A}I:Sp1-SP", "SR:C27-MG{PS:BT1A}I:Sp2-SP", "SR:C27-MG{PS:CH1B}I:Sp1-SP", "SR:C27-MG{PS:CH1B}I:Sp2-SP", "SR:C27-MG{PS:CH2B}I:Sp1-SP", "SR:C27-MG{PS:CH2B}I:Sp2-SP", "SR:C27-MG{PS:CL1A}I:Sp1-SP", "SR:C27-MG{PS:CL1A}I:Sp2-SP", "SR:C27-MG{PS:CL2A}I:Sp1-SP", "SR:C27-MG{PS:CL2A}I:Sp2-SP", "SR:C27-MG{PS:CM1A}I:Sp1-SP", "SR:C27-MG{PS:CM1A}I:Sp2-SP", "SR:C27-MG{PS:CM1B}I:Sp1-SP", "SR:C27-MG{PS:CM1B}I:Sp2-SP", "SR:C27-MG{PS:QH1B}I:Sp1-SP", "SR:C27-MG{PS:QH2B}I:Sp1-SP", "SR:C27-MG{PS:QH3B}I:Sp1-SP", "SR:C27-MG{PS:QL1A}I:Sp1-SP", "SR:C27-MG{PS:QL2A}I:Sp1-SP", "SR:C27-MG{PS:QL3A}I:Sp1-SP", "SR:C27-MG{PS:QM1A}I:Sp1-SP", "SR:C27-MG{PS:QM1B}I:Sp1-SP", "SR:C27-MG{PS:QM2A}I:Sp1-SP", "SR:C27-MG{PS:QM2B}I:Sp1-SP", "SR:C27-MG{PS:SL2-P1}I:Sp1-SP", "SR:C27-MG{PS:SL3-P1}I:Sp1-SP", "SR:C27-MG{PS:SQKM1A}I:Sp1-SP", "SR:C28-MG{PS:BT1A}I:Sp1-SP", "SR:C28-MG{PS:BT1A}I:Sp2-SP", "SR:C28-MG{PS:CH1A}I:Sp1-SP", "SR:C28-MG{PS:CH1A}I:Sp2-SP", "SR:C28-MG{PS:CH2A}I:Sp1-SP", "SR:C28-MG{PS:CH2A}I:Sp2-SP", "SR:C28-MG{PS:CL1B}I:Sp1-SP", "SR:C28-MG{PS:CL1B}I:Sp2-SP", "SR:C28-MG{PS:CL2B}I:Sp1-SP", "SR:C28-MG{PS:CL2B}I:Sp2-SP", "SR:C28-MG{PS:CM1A}I:Sp1-SP", "SR:C28-MG{PS:CM1A}I:Sp2-SP", "SR:C28-MG{PS:CM1B}I:Sp1-SP", "SR:C28-MG{PS:CM1B}I:Sp2-SP", "SR:C28-MG{PS:QH1A}I:Sp1-SP", "SR:C28-MG{PS:QH2A}I:Sp1-SP", "SR:C28-MG{PS:QH3A}I:Sp1-SP", "SR:C28-MG{PS:QL1B}I:Sp1-SP", "SR:C28-MG{PS:QL2B}I:Sp1-SP", "SR:C28-MG{PS:QL3B}I:Sp1-SP", "SR:C28-MG{PS:QM1A}I:Sp1-SP", "SR:C28-MG{PS:QM1B}I:Sp1-SP", "SR:C28-MG{PS:QM2A}I:Sp1-SP", "SR:C28-MG{PS:QM2B}I:Sp1-SP", "SR:C28-MG{PS:SH1-DW28}I:Sp1-SP", "SR:C28-MG{PS:SH3-DW28}I:Sp1-SP", "SR:C28-MG{PS:SH4-DW28}I:Sp1-SP", "SR:C28-MG{PS:SL1-P1}I:Sp1-SP", "SR:C28-MG{PS:SQKH1A}I:Sp1-SP", "SR:C29-MG{PS:BT1A}I:Sp1-SP", "SR:C29-MG{PS:BT1A}I:Sp2-SP", "SR:C29-MG{PS:CH1B}I:Sp1-SP", "SR:C29-MG{PS:CH1B}I:Sp2-SP", "SR:C29-MG{PS:CH2B}I:Sp1-SP", "SR:C29-MG{PS:CH2B}I:Sp2-SP", "SR:C29-MG{PS:CL1A}I:Sp1-SP", "SR:C29-MG{PS:CL1A}I:Sp2-SP", "SR:C29-MG{PS:CL2A}I:Sp1-SP", "SR:C29-MG{PS:CL2A}I:Sp2-SP", "SR:C29-MG{PS:CM1A}I:Sp1-SP", "SR:C29-MG{PS:CM1A}I:Sp2-SP", "SR:C29-MG{PS:CM1B}I:Sp1-SP", "SR:C29-MG{PS:CM1B}I:Sp2-SP", "SR:C29-MG{PS:QH1B}I:Sp1-SP", "SR:C29-MG{PS:QH2B}I:Sp1-SP", "SR:C29-MG{PS:QH3B}I:Sp1-SP", "SR:C29-MG{PS:QL1A}I:Sp1-SP", "SR:C29-MG{PS:QL2A}I:Sp1-SP", "SR:C29-MG{PS:QL3A}I:Sp1-SP", "SR:C29-MG{PS:QM1A}I:Sp1-SP", "SR:C29-MG{PS:QM1B}I:Sp1-SP", "SR:C29-MG{PS:QM2A}I:Sp1-SP", "SR:C29-MG{PS:QM2B}I:Sp1-SP", "SR:C29-MG{PS:SQKM1A}I:Sp1-SP", "SR:C30-MG{PS:BT1A}I:Sp1-SP", "SR:C30-MG{PS:BT1A}I:Sp2-SP", "SR:C30-MG{PS:CH1A}I:Sp1-SP", "SR:C30-MG{PS:CH1A}I:Sp2-SP", "SR:C30-MG{PS:CH2A}I:Sp1-SP", "SR:C30-MG{PS:CH2A}I:Sp2-SP", "SR:C30-MG{PS:CL1B}I:Sp1-SP", "SR:C30-MG{PS:CL1B}I:Sp2-SP", "SR:C30-MG{PS:CL2B}I:Sp1-SP", "SR:C30-MG{PS:CL2B}I:Sp2-SP", "SR:C30-MG{PS:CM1A}I:Sp1-SP", "SR:C30-MG{PS:CM1A}I:Sp2-SP", "SR:C30-MG{PS:CM1B}I:Sp1-SP", "SR:C30-MG{PS:CM1B}I:Sp2-SP", "SR:C30-MG{PS:QH1A}I:Sp1-SP", "SR:C30-MG{PS:QH2A}I:Sp1-SP", "SR:C30-MG{PS:QH3A}I:Sp1-SP", "SR:C30-MG{PS:QL1B}I:Sp1-SP", "SR:C30-MG{PS:QL2B}I:Sp1-SP", "SR:C30-MG{PS:QL3B}I:Sp1-SP", "SR:C30-MG{PS:QM1A}I:Sp1-SP", "SR:C30-MG{PS:QM1B}I:Sp1-SP", "SR:C30-MG{PS:QM2A}I:Sp1-SP", "SR:C30-MG{PS:QM2B}I:Sp1-SP", "SR:C30-MG{PS:SH1-P2}I:Sp1-SP", "SR:C30-MG{PS:SH3-P2}I:Sp1-SP", "SR:C30-MG{PS:SQKH1A}I:Sp1-SP"] pvs0 =['SR:C01-MG{PS:SM1A-P2}I:Sp1-SP', 'SR:C02-MG{PS:SM1B-P2}I:Sp1-SP', 'SR:C02-MG{PS:SM2B-P2}I:Sp1-SP', 'SR:C07-MG{PS:SM1A-P3}I:Sp1-SP', 'SR:C08-MG{PS:SM1B-P3}I:Sp1-SP', 'SR:C08-MG{PS:SM2B-P3}I:Sp1-SP', 'SR:C13-MG{PS:SM1A-P4}I:Sp1-SP', 'SR:C14-MG{PS:SM1B-P4}I:Sp1-SP', 'SR:C14-MG{PS:SM2B-P4}I:Sp1-SP', 'SR:C19-MG{PS:SM1A-P5}I:Sp1-SP', 'SR:C20-MG{PS:SM1B-P5}I:Sp1-SP', 'SR:C20-MG{PS:SM2B-P5}I:Sp1-SP', 'SR:C25-MG{PS:SM1A-P1}I:Sp1-SP', 'SR:C26-MG{PS:SM1B-P1}I:Sp1-SP', 'SR:C26-MG{PS:SM2B-P1}I:Sp1-SP'] with self.assertRaises(KeyError) as context: updateconfig(self.conn, self.collection, name, pvlist={"name": pvs0}) self.assertEqual(context.exception.message, 'Cannot find key ("names") for pv names.') self.assertTrue(updateconfig(self.conn, self.collection, name, pvlist={"names": pvs})) res3 = retrieveconfig(self.conn, self.collection, name, withpvs=True) self.assertEqual(res3[0]["status"], "active") self.assertNotEqual(res1[0]["updated_on"], res2[0]["updated_on"]) self.assertEqual(res3[0]["created_on"], res0[0]["created_on"]) self.assertEqual(res3[0]["pvlist"]["names"], pvs) with self.assertRaises(RuntimeError) as context: updateconfig(self.conn, self.collection, name, pvlist={"names": pvs0}) self.assertEqual(context.exception.message, "PV collection list exists already, and should not be changed.")