diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..cd42ee3
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+bin/
+obj/
diff --git a/BitMappings.cs b/BitMappings.cs
new file mode 100644
index 0000000..4b4da4f
--- /dev/null
+++ b/BitMappings.cs
@@ -0,0 +1,310 @@
+namespace Transmutate
+{
+ public class BitMappings
+ {
+ public static int[] ProgramBlueToRRBitMapping_RAE =
+ {
+ 81 , 82 , 83 , 84 , 85 , 86 , 88 , 87 ,
+ 89 , 90 , 91 , 92 , 93 , 94 , 0 , 0 ,
+ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ,
+ 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 ,
+ 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 ,
+ 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 ,
+ 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 ,
+ 49 , 50 , 51 , 52 , 53 , 54 , 55 , 0 ,
+ 57 , 58 , 59 , 60 , 61 , 62 , 63 , 64 ,
+ 0 , 66 , 67 , 68 , 69 , 0 , 71 , 72 ,
+ 73 , 74 , 75 , 76 , 77 , 78 , 79 , 80 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 231, 232, 233, 234, 235, 236, 237, 238,
+ 239, 240, 241, 242, 243, 244, 245, 246,
+ 151, 152, 153, 154, 155, 156, 157, 158,
+ 159, 160, 161, 162, 163, 164, 165, 166,
+ 167, 168, 169, 170, 171, 172, 173, 174,
+ 175, 176, 177, 178, 179, 180, 181, 182,
+ 183, 184, 185, 186, 187, 188, 189, 190,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 191, 192, 193, 194, 0 , 196, 197, 198,
+ 199, 200, 201, 202, 203, 204, 205, 206,
+ 207, 208, 209, 0 , 211, 212, 213, 0 ,
+ 0 , 216, 217, 218, 219, 220, 221, 222,
+ 223, 224, 225, 226, 227, 228, 229, 230,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
+ };
+
+ public static int[] RRToProgramBlueBitMapping_RAE =
+ {
+ 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 ,
+ 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 ,
+ 47 , 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 73 , 74 , 75 , 76 , 77 ,
+ 78 , 79 , 80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 , 91 , 92 ,
+ 93 , 94 , 95 , 96 , 97 , 98 , 99 , 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, 109, 110, 111, 112, 1 , 2 , 3 , 4 , 5 , 6 , 8 , 7 , 9 , 10 ,
+ 11 , 12 , 13 , 14 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
+ 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
+ 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 193, 194, 195, 196, 197,
+ 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
+ 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
+ 228, 229, 230, 231, 232, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
+ 131, 132, 133, 134, 135, 136, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ };
+
+
+ public static int[] ProgramBlueToRRBitMapping_3ST =
+ {
+ 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 ,
+ 89 , 90 , 91 , 92 , 93 , 94 , 0 , 0 ,
+ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ,
+ 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 ,
+ 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 ,
+ 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 ,
+ 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 ,
+ 49 , 50 , 51 , 52 , 53 , 54 , 55 , 0 ,
+ 57 , 58 , 59 , 60 , 61 , 62 , 63 , 64 ,
+ 0 , 66 , 67 , 68 , 69 , 0 , 71 , 72 ,
+ 73 , 74 , 75 , 76 , 77 , 78 , 79 , 80 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 231, 232, 233, 234, 235, 236, 237, 238,
+ 239, 240, 241, 242, 243, 244, 245, 246,
+ 151, 152, 153, 154, 155, 156, 157, 158,
+ 159, 160, 161, 162, 163, 164, 165, 166,
+ 167, 168, 169, 170, 171, 172, 173, 174,
+ 175, 176, 177, 178, 179, 180, 181, 182,
+ 183, 184, 185, 186, 187, 188, 189, 190,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 191, 192, 193, 194, 0 , 196, 197, 198,
+ 199, 200, 201, 202, 203, 204, 205, 206,
+ 207, 208, 209, 0 , 211, 212, 213, 0 ,
+ 0 , 216, 217, 218, 219, 220, 221, 222,
+ 223, 224, 225, 226, 227, 228, 229, 230,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
+ };
+
+ public static int[] RRToProgramBlueBitMapping_3ST =
+ {
+ 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 ,
+ 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 ,
+ 47 , 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 73 , 74 , 75 , 76 , 77 ,
+ 78 , 79 , 80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 , 91 , 92 ,
+ 93 , 94 , 95 , 96 , 97 , 98 , 99 , 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, 109, 110, 111, 112, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ,
+ 11 , 12 , 13 , 14 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
+ 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
+ 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 193, 194, 195, 196, 197,
+ 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
+ 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
+ 228, 229, 230, 231, 232, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
+ 131, 132, 133, 134, 135, 136, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ };
+
+
+ public static int[] ProgramBlueToRRBitMapping_CYBERS =
+ {
+ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ,
+ 9 , 10 , 11 , 12 , 13 , 14 ,
+ 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 ,
+ 25 , 26 , 27 , 28 , 29 , 30 ,
+ 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 ,
+ 41 , 42 , 43 , 44 , 45 , 46 ,
+ 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 ,
+ 57 , 58 , 59 , 60 , 61 , 62 ,
+ 65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 ,
+ 73 , 74 , 75 , 76 , 77 , 78 ,
+ 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 ,
+ 89 , 90 , 91 , 92 , 93 , 94 ,
+ 97 , 98 , 99 , 100, 101, 102, 103, 104,
+ 105, 106, 107, 108, 109, 110, 111, 112,
+ 113, 114, 115, 116, 117, 118, 119, 120,
+ 121, 122, 123, 124, 125, 126, 127, 128,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ };
+
+ public static int[] RRToProgramBlueBitMapping_CYBERS =
+ {
+ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 0 ,
+ 0 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 26 , 27 , 28 , 29 , 30 ,
+ 0 , 0 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 ,
+ 44 , 0 , 0 , 45 , 46 , 47 , 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 ,
+ 57 , 58 , 0 , 0 , 59 , 60 , 61 , 62 , 63 , 64 , 65 , 66 , 67 , 68 , 69 ,
+ 70 , 71 , 72 , 0 , 0 , 73 , 74 , 75 , 76 , 77 , 78 , 79 , 80 , 81 , 82 ,
+ 83 , 84 , 85 , 86 , 0 , 0 , 87 , 88 , 89 , 90 , 91 , 92 , 93 , 94 , 95 ,
+ 96 , 97 , 98 , 99 , 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
+ 111, 112, 113, 114, 115, 116, 117, 118, 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ };
+
+
+ public static int[] ProgramBlueToRRBitMapping_STUDIOC =
+ {
+ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ,
+ 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 ,
+ 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 ,
+ 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 ,
+ 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 ,
+ 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 ,
+ 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 ,
+ 57 , 58 , 59 , 60 , 61 , 62 , 63 , 64 ,
+ 151, 152, 153, 154, 155, 156, 157, 158,
+ 159, 160, 161, 162, 163, 164, 165, 166,
+ 167, 168, 169, 170, 171, 172, 173, 174,
+ 175, 176, 177, 178, 179, 180, 181, 182,
+ 183, 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ };
+
+ public static int[] RRToProgramBlueBitMapping_STUDIOC =
+ {
+ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 ,
+ 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 ,
+ 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 ,
+ 46 , 47 , 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 ,
+ 61 , 62 , 63 , 64 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 65 , 66 , 67 , 67 , 68 , 69 , 70 , 71 , 72 , 73 , 75 , 76 , 77 , 78 , 79 ,
+ 80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 , 91 , 92 , 93 , 94 ,
+ 95 , 96 , 97 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ };
+
+ public static int[] ProgramBlueToRRBitMapping_NRAE =
+ {
+ 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 ,
+ 89 , 90 , 91 , 92 , 93 , 94 , 95 , 96 ,
+ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ,
+ 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 ,
+ 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 ,
+ 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 ,
+ 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 ,
+ 97 , 98 , 99 , 100, 101, 102, 103, 104,
+ 105, 106, 0 , 0 , 0 , 0 , 0 , 0 ,
+ 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 ,
+ 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 ,
+ 57 , 58 , 59 , 60 , 61 , 62 , 63 , 64 ,
+ 65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 ,
+ 73 , 74 , 75 , 76 , 77 , 78 , 79 , 80 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 231, 0 , 0 , 0 , 235, 236, 237, 238,
+ 0 , 0 , 0 , 0 , 243, 244, 245, 246,
+ 151, 152, 153, 154, 155, 156, 157, 158,
+ 159, 160, 161, 162, 163, 164, 165, 166,
+ 167, 168, 169, 170, 171, 172, 173, 174,
+ 175, 176, 177, 178, 179, 180, 181, 182,
+ 183, 184, 185, 186, 187, 188, 189, 190,
+ 247, 248, 249, 250, 251, 252, 253, 254,
+ 255, 256, 257, 258, 259, 260, 261, 262,
+ 191, 192, 193, 194, 195, 196, 197, 198,
+ 199, 200, 201, 202, 203, 204, 205, 206,
+ 207, 208, 209, 210, 211, 0 , 213, 214,
+ 215, 216, 217, 218, 219, 220, 221, 222,
+ 223, 224, 225, 226, 227, 228, 229, 230,
+ 263, 264, 265, 266, 267, 268, 269, 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ };
+
+ public static int[] RRToProgramBlueBitMapping_NRAE =
+ {
+ 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 ,
+ 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 ,
+ 47 , 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 73 , 74 , 75 , 76 , 77 ,
+ 78 , 79 , 80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 , 91 , 92 ,
+ 93 , 94 , 95 , 96 , 97 , 98 , 99 , 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, 109, 110, 111, 112, 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 ,
+ 91 , 92 , 93 , 94 , 95 , 96 , 57 , 58 , 59 , 60 , 61 , 62 , 63 , 64 , 65 ,
+ 66 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
+ 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
+ 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 193, 194, 195, 196, 197,
+ 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
+ 213, 0 , 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
+ 228, 229, 230, 231, 232, 121, 0 , 0 , 0 , 125, 126, 127, 128, 0 , 0 ,
+ 0 , 0 , 133, 134, 135, 136, 177, 178, 179, 180, 181, 182, 183, 184, 185,
+ 186, 187, 188, 189, 190, 191, 192, 233, 234, 235, 236, 237, 238, 239, 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
+ };
+ }
+}
diff --git a/ChannelMappings.cs b/ChannelMappings.cs
new file mode 100644
index 0000000..2313564
--- /dev/null
+++ b/ChannelMappings.cs
@@ -0,0 +1,17 @@
+namespace Transmutate
+{
+ public class ChannelMappings
+ {
+ public static string CTM_3ST = "\r\n1=Wink^Spotlight=0xff0000\r\n2=Jasper^Spotlight=0xff0000\r\n3=Camera^Spotlight=0xff0000\r\n4=Pasqually^Spotlight=0xff0000\r\n5=Munch^Spotlight=0xff0000\r\n6=Helen^Spotlight=0xff0000\r\n7=Helicopter^Light=0xff0000\r\n8=CEC^Spotlight=0xff0000\r\n9=CEC^Curtains^Open=0xff0000\r\n10=CEC^Curtains^Close=0xff0000\r\n11=Center^Curtains^Open=0xff0000\r\n12=Center^Curtains^Close=0xff0000\r\n13=Pasqually^Curtains^Open=0xff0000\r\n14=Pasqually^Curtains^Close=0xff0000\r\n15=Channel^15=0xff0000\r\n16=Channel^16=0xff0000\r\n17=CEC^Mouth=0xff0000\r\n18=CEC^Left^Eyelid=0xff0000\r\n19=CEC^Right^Eyelid=0xff0000\r\n20=CEC^Eyes^Left=0xff0000\r\n21=CEC^Eyes^Right=0xff0000\r\n22=CEC^Head^Left=0xff0000\r\n23=CEC^Head^Right=0xff0000\r\n24=CEC^Head^Up=0xff0000\r\n25=CEC^Left^Ear=0xff0000\r\n26=CEC^Right^Ear=0xff0000\r\n27=CEC^Left^Arm^Raise=0xff0000\r\n28=CEC^Left^Arm^Twist=0xff0000\r\n29=CEC^Left^Elbow=0xff0000\r\n30=CEC^Body^Left=0xff0000\r\n31=CEC^Body^Right=0xff0000\r\n32=CEC^Body^Lean=0xff0000\r\n33=CEC^Right^Arm^Raise=0xff0000\r\n34=CEC^Right^Arm^Twist=0xff0000\r\n35=CEC^Right^Elbow=0xff0000\r\n36=Channel^36=0xff0000\r\n37=Pasqually^Head^Right=0xff0000\r\n38=Pasqually^Head^Up=0xff0000\r\n39=Channel^39=0xff0000\r\n40=Channel^40=0xff0000\r\n41=Pasqually^Head^Left=0xff0000\r\n42=Pasqually^Left^Eyelid=0xff0000\r\n43=Pasqually^Right^Eyelid=0xff0000\r\n44=Pasqually^Eyes^Left=0xff0000\r\n45=Pasqually^Eyes^Right=0xff0000\r\n46=Pasqually^Mouth=0xff0000\r\n47=Pasqually^Right^Elbow=0xff0000\r\n48=Pasqually^High^Hat=0xff0000\r\n49=Pasqually^Left^Arm^Swing=0xff0000\r\n50=Pasqually^Right^Arm^Swing=0xff0000\r\n51=Pasqually^Left^Elbow=0xff0000\r\n52=Channel^52=0xff0000\r\n53=Channel^53=0xff0000\r\n54=Building^Mouth=0xff0000\r\n55=Building^Raise=0xff0000\r\n56=Channel^56=0xff0000\r\n57=Channel^57=0xff0000\r\n58=Channel^58=0xff0000\r\n59=Channel^59=0xff0000\r\n60=Channel^60=0xff0000\r\n61=Channel^61=0xff0000\r\n62=Channel^62=0xff0000\r\n63=Channel^63=0xff0000\r\n64=Channel^64=0xff0000\r\n65=Channel^65=0xff0000\r\n66=Channel^66=0xff0000\r\n67=Channel^67=0xff0000\r\n68=Channel^68=0xff0000\r\n69=Channel^69=0xff0000\r\n70=Channel^70=0xff0000\r\n71=Channel^71=0xff0000\r\n72=Channel^72=0xff0000\r\n73=Munch^Left^Eyelid=0xff0000\r\n74=Munch^Right^Eyelid=0xff0000\r\n75=Munch^Eyes^Left=0xff0000\r\n76=Munch^Eyes^Right=0xff0000\r\n77=Munch^Mouth=0xff0000\r\n78=Moon^Mouth=0xff0000\r\n79=Moon^Raise=0xff0000\r\n80=Channel^80=0xff0000\r\n81=Wink=0xff0000\r\n82=Munch^Jr^Raise=0xff0000\r\n83=Munch^Head^Tilt^Left=0xff0000\r\n84=Munch^Head^Tilt^Right=0xff0000\r\n85=Munch^Head^Up=0xff0000\r\n86=Munch^Head^Left=0xff0000\r\n87=Munch^Head^Right=0xff0000\r\n88=Channel^88=0xff0000\r\n89=Munch^Left^Arm^Swing=0xff0000\r\n90=Munch^Right^Arm^Swing=0xff0000\r\n91=Munch^Left^Elbow=0xff0000\r\n92=Munch^Right^Elbow=0xff0000\r\n93=Munch^Foot^Tap=0xff0000\r\n94=Munch^Body^Lean=0xff0000\r\n95=Channel^95=0xff0000\r\n96=Pasqually^Body^Lean=0xff0000\r\n97=Channel^97=0xff0000\r\n98=Organ^Top^Blue^Lights=0xff0000\r\n99=Organ^Top^Red^Lights=0xff0000\r\n100=Organ^Top^Amber^Lights=0xff0000\r\n101=Organ^Top^Green^Lights=0xff0000\r\n102=Channel^102=0xff0000\r\n103=Organ^Leg^Top^Lights=0xff0000\r\n104=Organ^Leg^Middle^Lights=0xff0000\r\n105=Organ^Leg^Bottom^Lights=0xff0000\r\n106=Organ^Strobe^Lights^Continuous=0xff0000\r\n107=Organ^Strobe^Lights^Flash=0xff0000\r\n108=Sign^Inner^Lights=0xff0000\r\n109=Sign^Middle^Lights=0xff0000\r\n110=Sign^Outer^Lights=0xff0000\r\n111=Sign^Strobe^Lights^Flash=0xff0000\r\n112=Sign^Strobe^Lights^Continuous=0xff0000\r\n113=Channel^113=0xff0000\r\n114=Channel^114=0xff0000\r\n115=Channel^115=0xff0000\r\n116=Channel^116=0xff0000\r\n117=Channel^117=0xff0000\r\n118=Channel^118=0xff0000\r\n119=Channel^119=0xff0000\r\n120=Channel^120=0xff0000\r\n121=Center^Green^Backdrop^Lights=0xff0000\r\n122=Center^Amber^Sides^Backdrop^Lights=0xff0000\r\n123=Center^Red^Sides^Backdrop^Lights=0xff0000\r\n124=Center^Blue^Backdrop^Lights=0xff0000\r\n125=Center^Red^Backdrop^Lights=0xff0000\r\n126=Center^Red^Amber^Backdrop^Lights=0xff0000\r\n127=Center^Blue^Amber^Backdrop^Lights=0xff0000\r\n128=Building^Spotlight=0xff0000\r\n129=Moon^Spotlight=0xff0000\r\n130=Center^Gobo^_^Munch^Jr^Spotlight=0xff0000\r\n131=Pasqually^Amber^Bass^Lights=0xff0000\r\n132=Pasqually^Red^Backdrop^Lights=0xff0000\r\n133=Pasqually^Blue^Backdrop^Lights=0xff0000\r\n134=CEC^Neon^Light=0xff0000\r\n135=CEC^Star^Jukebox^Blue^Lights=0xff0000\r\n136=Guitar^Spotlight=0xff0000\r\n137=Jasper^Left^Eyelid=0xff0000\r\n138=Jasper^Right^Eyelid=0xff0000\r\n139=Jasper^Eyes^Cross=0xff0000\r\n140=Jasper^Guitar^Slide=0xff0000\r\n141=Jasper^Guitar^Raise=0xff0000\r\n142=Jasper^Head^Left=0xff0000\r\n143=Jasper^Head^Right=0xff0000\r\n144=Jasper^Head^Up=0xff0000\r\n145=Jasper^Left^Leg=0xff0000\r\n146=Jasper^Right^Leg=0xff0000\r\n147=Jasper^Right^Arm^Raise=0xff0000\r\n148=Jasper^Right^Arm^Twist=0xff0000\r\n149=Jasper^Strum=0xff0000\r\n150=Jasper^Strum^Hand^Out=0xff0000\r\n151=Jasper^Body^Lean=0xff0000\r\n152=Jasper^Mouth=0xff0000\r\n153=Camera^Mouth=0xff0000\r\n154=Helen^Right^Arm^Raise=0xff0000\r\n155=Helen^Right^Elbow=0xff0000\r\n156=Helen^Right^Arm^Twist=0xff0000\r\n157=Camera^Head^Right=0xff0000\r\n158=Camera^Up=0xff0000\r\n159=Helen^Left^Arm^Raise=0xff0000\r\n160=Helen^Left^Elbow=0xff0000\r\n161=Helen^Left^Arm^Twist=0xff0000\r\n162=Helen^Left^Ear=0xff0000\r\n163=Helen^Right^Ear=0xff0000\r\n164=Helen^Head^Left=0xff0000\r\n165=Helen^Head^Right=0xff0000\r\n166=Helen^Head^Up=0xff0000\r\n167=Helen^Left^Eyelid=0xff0000\r\n168=Helen^Right^Eyelid=0xff0000\r\n169=Helen^Eyes^Left=0xff0000\r\n170=Helen^Eyes^Right=0xff0000\r\n171=Helen^Mouth=0xff0000\r\n172=Helen^Body^Left=0xff0000\r\n173=Helen^Body^Right=0xff0000\r\n174=Helen^Body^Lean=0xff0000\r\n175=Channel^175=0xff0000\r\n176=Channel^176=0xff0000\r\n177=House^Lights^Dim=0xff0000\r\n178=Channel^178=0xff0000\r\n179=Channel^179=0xff0000\r\n180=Channel^180=0xff0000\r\n181=Channel^181=0xff0000\r\n182=Channel^182=0xff0000\r\n183=Channel^183=0xff0000\r\n184=Channel^184=0xff0000\r\n185=Channel^185=0xff0000\r\n186=Channel^186=0xff0000\r\n187=Channel^187=0xff0000\r\n188=Channel^188=0xff0000\r\n189=Channel^189=0xff0000\r\n190=Channel^190=0xff0000\r\n191=Channel^191=0xff0000\r\n192=Channel^192=0xff0000\r\n193=Camera^Left^Eyelid=0xff0000\r\n194=Camera^Right^Eyelid=0xff0000\r\n195=Camera^Eyes^Cross=0xff0000\r\n196=Channel^196=0xff0000\r\n197=Channel^197=0xff0000\r\n198=Channel^198=0xff0000\r\n199=Channel^199=0xff0000\r\n200=Channel^200=0xff0000\r\n201=Channel^201=0xff0000\r\n202=Channel^202=0xff0000\r\n203=Channel^203=0xff0000\r\n204=Channel^204=0xff0000\r\n205=Channel^205=0xff0000\r\n206=Channel^206=0xff0000\r\n207=Channel^207=0xff0000\r\n208=Channel^208=0xff0000\r\n209=Channel^209=0xff0000\r\n210=Channel^210=0xff0000\r\n211=Channel^211=0xff0000\r\n212=Channel^212=0xff0000\r\n213=Channel^213=0xff0000\r\n214=Channel^214=0xff0000\r\n215=Channel^215=0xff0000\r\n216=Channel^216=0xff0000\r\n217=Channel^217=0xff0000\r\n218=CEC^Top^Blue^Lights=0xff0000\r\n219=CEC^Top^Green^Lights=0xff0000\r\n220=CEC^Top^Amber^Lights=0xff0000\r\n221=CEC^Top^Red^Lights=0xff0000\r\n222=CEC^Star^Light=0xff0000\r\n223=Center^Top^Blue^Lights=0xff0000\r\n224=Center^Live^Flood^Lights=0xff0000\r\n225=Center^Top^Amber^Lights=0xff0000\r\n226=Center^Top^Red^Lights=0xff0000\r\n227=Center^Stage^Fiberoptic^Lights=0xff0000\r\n228=Pasqually^Top^Blue^Lights=0xff0000\r\n229=Pasqually^Top^Green^Lights=0xff0000\r\n230=Pasqually^Top^Amber^Lights=0xff0000\r\n231=Pasqually^Top^Red^Lights=0xff0000\r\n232=Pasqually^Red^Snare^Lights=0xff0000\r\n233=Channel^233=0xff0000\r\n234=Channel^234=0xff0000\r\n235=Channel^235=0xff0000\r\n236=Channel^236=0xff0000\r\n237=Channel^237=0xff0000\r\n238=Channel^238=0xff0000\r\n239=Channel^239=0xff0000\r\n240=Channel^240=0xff0000\r\n241=Channel^241=0xff0000\r\n242=Channel^242=0xff0000\r\n243=Channel^243=0xff0000\r\n244=Channel^244=0xff0000\r\n245=Channel^245=0xff0000\r\n246=Channel^246=0xff0000\r\n247=Channel^247=0xff0000\r\n248=Channel^248=0xff0000\r\n249=Channel^249=0xff0000\r\n250=Channel^250=0xff0000\r\n251=Channel^251=0xff0000\r\n252=Channel^252=0xff0000\r\n253=Channel^253=0xff0000\r\n254=Channel^254=0xff0000\r\n255=Channel^255=0xff0000\r\n256=Channel^256=0xff0000\r\n\r\n";
+
+ public static string CTM_RAE = "\r\n1=Mitzi^Spotlight=0xff0000\r\n2=Beach^Bear^Spotlight=0xff0000\r\n3=Looney^Bird^Spotlight=0xff0000\r\n4=Billy^Bob^Spotlight=0xff0000\r\n5=Fatz^Spotlight=0xff0000\r\n6=Dook^Spotlight=0xff0000\r\n7=Rolfe^Earl^Up^Spotlight=0xff0000\r\n8=Rolfe^Earl^Down^Spotlight=0xff0000\r\n9=Rolfe^Curtains^Open=0xff0000\r\n10=Rolfe^Curtains^Close=0xff0000\r\n11=Center^Curtains^Open=0xff0000\r\n12=Center^Curtains^Close=0xff0000\r\n13=Billy^Bob^Curtains^Open=0xff0000\r\n14=Billy^Bob^Curtains^Close=0xff0000\r\n15=Channel^15=0xff0000\r\n16=Channel^16=0xff0000\r\n17=Rolfe^Mouth=0xff0000\r\n18=Rolfe^Left^Eyelid=0xff0000\r\n19=Rolfe^Right^Eyelid=0xff0000\r\n20=Rolfe^Eyes^Left=0xff0000\r\n21=Rolfe^Eyes^Right=0xff0000\r\n22=Rolfe^Head^Left=0xff0000\r\n23=Rolfe^Head^Right=0xff0000\r\n24=Rolfe^Head^Up=0xff0000\r\n25=Rolfe^Left^Ear=0xff0000\r\n26=Rolfe^Right^Ear=0xff0000\r\n27=Rolfe^Left^Arm^Raise=0xff0000\r\n28=Rolfe^Left^Arm^Twist=0xff0000\r\n29=Rolfe^Left^Elbow=0xff0000\r\n30=Rolfe^Body^Left=0xff0000\r\n31=Rolfe^Body^Right=0xff0000\r\n32=Rolfe^Body^Lean=0xff0000\r\n33=Earl^Arm^Raise=0xff0000\r\n34=Earl^Arm^Twist=0xff0000\r\n35=Earl^Arm^Elbow=0xff0000\r\n36=Earl^Head^Tilt=0xff0000\r\n37=Dook^Head^Right=0xff0000\r\n38=Dook^Head^Up=0xff0000\r\n39=Dook^Left^Ear=0xff0000\r\n40=Dook^Right^Ear=0xff0000\r\n41=Dook^Head^Left=0xff0000\r\n42=Dook^Left^Eyelid=0xff0000\r\n43=Dook^Right^Eyelid=0xff0000\r\n44=Dook^Eyes^Left=0xff0000\r\n45=Dook^Eyes^Right=0xff0000\r\n46=Dook^Mouth=0xff0000\r\n47=Dook^Right^Elbow=0xff0000\r\n48=Dook^High^Hat=0xff0000\r\n49=Dook^Left^Arm^Swing=0xff0000\r\n50=Dook^Right^Arm^Swing=0xff0000\r\n51=Dook^Left^Elbow=0xff0000\r\n52=Earl^Mouth=0xff0000\r\n53=Earl^Eyebrow=0xff0000\r\n54=Sun^Mouth=0xff0000\r\n55=Sun^Raise=0xff0000\r\n56=Dual^Pressure=0xff0000\r\n57=Channel^57=0xff0000\r\n58=Channel^58=0xff0000\r\n59=Channel^59=0xff0000\r\n60=Channel^60=0xff0000\r\n61=Channel^61=0xff0000\r\n62=Channel^62=0xff0000\r\n63=Channel^63=0xff0000\r\n64=Channel^64=0xff0000\r\n65=Channel^65=0xff0000\r\n66=Channel^66=0xff0000\r\n67=Channel^67=0xff0000\r\n68=Channel^68=0xff0000\r\n69=Channel^69=0xff0000\r\n70=Channel^70=0xff0000\r\n71=Channel^71=0xff0000\r\n72=Channel^72=0xff0000\r\n73=Fatz^Left^Eyelid=0xff0000\r\n74=Fatz^Right^Eyelid=0xff0000\r\n75=Fatz^Eyes^Left=0xff0000\r\n76=Fatz^Eyes^Right=0xff0000\r\n77=Fatz^Mouth=0xff0000\r\n78=Moon^Mouth=0xff0000\r\n79=Moon^Raise=0xff0000\r\n80=Looney^Bird^Hand=0xff0000\r\n81=Antioch^Drop=0xff0000\r\n82=Choo^Choo^Up=0xff0000\r\n83=Fatz^Head^Tilt^Left=0xff0000\r\n84=Fatz^Head^Tilt^Right=0xff0000\r\n85=Fatz^Head^Up=0xff0000\r\n86=Fatz^Head^Left=0xff0000\r\n87=Fatz^Head^Right=0xff0000\r\n88=Channel^88=0xff0000\r\n89=Fatz^Left^Arm^Swing=0xff0000\r\n90=Fatz^Right^Arm^Swing=0xff0000\r\n91=Fatz^Left^Elbow=0xff0000\r\n92=Fatz^Right^Elbow=0xff0000\r\n93=Fatz^Foot^Up=0xff0000\r\n94=Fatz^Body^Lean=0xff0000\r\n95=Dook^Bass^Drum=0xff0000\r\n96=Dook^Body^Lean=0xff0000\r\n97=Channel^97=0xff0000\r\n98=Fatz^Organ^Top^Blue=0xff0000\r\n99=Fatz^Organ^Top^Red=0xff0000\r\n100=Fatz^Organ^Top^Amber=0xff0000\r\n101=Fatz^Organ^Top^Green=0xff0000\r\n102=Channel^102=0xff0000\r\n103=Fatz^Organ^Leg^Top=0xff0000\r\n104=Fatz^Organ^Leg^Middle=0xff0000\r\n105=Fatz^Organ^Leg^Bottom=0xff0000\r\n106=Fatz^Organ^Strobe^Continuous=0xff0000\r\n107=Fatz^Organ^Strobe^Flash=0xff0000\r\n108=Sign^Orange=0xff0000\r\n109=Sign^Red=0xff0000\r\n110=Sign^White=0xff0000\r\n111=Sign^Strobe^Flash=0xff0000\r\n112=Sign^Strobe^Continuous=0xff0000\r\n113=Channel^113=0xff0000\r\n114=Channel^114=0xff0000\r\n115=Channel^115=0xff0000\r\n116=Channel^116=0xff0000\r\n117=Channel^117=0xff0000\r\n118=Channel^118=0xff0000\r\n119=Channel^119=0xff0000\r\n120=Channel^120=0xff0000\r\n121=Lights^Backdrop^Outside^Blue=0xff0000\r\n122=Lights^Backdrop^Inside^Amber=0xff0000\r\n123=Lights^Backdrop^Inside^Blue=0xff0000\r\n124=Lights^Treeline^Red=0xff0000\r\n125=Lights^Treeline^Blue=0xff0000\r\n126=Lights^Bushes^Green=0xff0000\r\n127=Lights^Bushes^Red^Amber=0xff0000\r\n128=Sun^Spotlight=0xff0000\r\n129=Moon^Spotlight=0xff0000\r\n130=Antioch^Spotlight=0xff0000\r\n131=Billy^Service^Station^Pump=0xff0000\r\n132=Billy^Service^Station^Red=0xff0000\r\n133=Billy^Service^Station^Blue=0xff0000\r\n134=Rolfe^Rainbow^Red=0xff0000\r\n135=Rolfe^Rainbow^Amber=0xff0000\r\n136=Beach^Bear^Guitar^Spotlight=0xff0000\r\n137=Beach^Bear^Left^Eyelid=0xff0000\r\n138=Beach^Bear^Right^Eyelid=0xff0000\r\n139=Beach^Bear^Eyes^Cross=0xff0000\r\n140=Beach^Bear^Guitar^Slide=0xff0000\r\n141=Beach^Bear^Guitar^Raise=0xff0000\r\n142=Beach^Bear^Head^Left=0xff0000\r\n143=Beach^Bear^Head^Right=0xff0000\r\n144=Beach^Bear^Head^Up=0xff0000\r\n145=Beach^Bear^Left^Leg=0xff0000\r\n146=Beach^Bear^Right^Leg=0xff0000\r\n147=Beach^Bear^Right^Arm^Raise=0xff0000\r\n148=Beach^Bear^Right^Arm^Twist=0xff0000\r\n149=Beach^Bear^Strum^Hand=0xff0000\r\n150=Beach^Bear^Right^Hand^Out=0xff0000\r\n151=Beach^Bear^Body^Lean=0xff0000\r\n152=Beach^Bear^Mouth=0xff0000\r\n153=Looney^Bird^Mouth=0xff0000\r\n154=Mitzi^Right^Arm^Raise=0xff0000\r\n155=Mitzi^Right^Elbow=0xff0000\r\n156=Mitzi^Right^Arm^Twist=0xff0000\r\n157=Looney^Bird^Head^Left=0xff0000\r\n158=Looney^Bird^Up=0xff0000\r\n159=Mitzi^Left^Arm^Raise=0xff0000\r\n160=Mitzi^Left^Elbow=0xff0000\r\n161=Mitzi^Left^Arm^Twist=0xff0000\r\n162=Mitzi^Left^Ear=0xff0000\r\n163=Mitzi^Right^Ear=0xff0000\r\n164=Mitzi^Head^Left=0xff0000\r\n165=Mitzi^Head^Right=0xff0000\r\n166=Mitzi^Head^Up=0xff0000\r\n167=Mitzi^Left^Eyelid=0xff0000\r\n168=Mitzi^Right^Eyelid=0xff0000\r\n169=Mitzi^Eyes^Left=0xff0000\r\n170=Mitzi^Eyes^Right=0xff0000\r\n171=Mitzi^Mouth=0xff0000\r\n172=Mitzi^Body^Left=0xff0000\r\n173=Mitzi^Body^Right=0xff0000\r\n174=Mitzi^Body^Lean=0xff0000\r\n175=Billy^Bob^Guitar^Slide=0xff0000\r\n176=Billy^Bob^Guitar^Up=0xff0000\r\n177=Channel^177=0xff0000\r\n178=Fog^Machine=0xff0000\r\n179=Moose^Spot^Light=0xff0000\r\n180=Moose^Mouth=0xff0000\r\n181=Moose^Eyes^Close=0xff0000\r\n182=Moose^Ears=0xff0000\r\n183=Moose^Head^Left=0xff0000\r\n184=Moose^Head^Up=0xff0000\r\n185=Disco^Ball^and^Lights=0xff0000\r\n186=Channel^186=0xff0000\r\n187=Channel^187=0xff0000\r\n188=Channel^188=0xff0000\r\n189=Channel^189=0xff0000\r\n190=Channel^190=0xff0000\r\n191=Channel^191=0xff0000\r\n192=Channel^192=0xff0000\r\n193=Looney^Bird^Left^Eyelid=0xff0000\r\n194=Looney^Bird^Right^Eyelid=0xff0000\r\n195=Looney^Bird^Eyes^Cross=0xff0000\r\n196=Billy^Bob^Foot^Up=0xff0000\r\n197=Channel^197=0xff0000\r\n198=Billy^Bob^Mouth=0xff0000\r\n199=Billy^Bob^Left^Eyelid=0xff0000\r\n200=Billy^Bob^Right^Eyelid=0xff0000\r\n201=Billy^Bob^Eyes^Left=0xff0000\r\n202=Billy^Bob^Eyes^Right=0xff0000\r\n203=Billy^Bob^Head^Left=0xff0000\r\n204=Billy^Bob^Head^Right=0xff0000\r\n205=Billy^Bob^Head^Tilt^Left=0xff0000\r\n206=Billy^Bob^Head^Tilt^Right=0xff0000\r\n207=Billy^Bob^Head^Up=0xff0000\r\n208=Billy^Bob^Right^Arm^Raise=0xff0000\r\n209=Billy^Bob^Right^Arm^Twist=0xff0000\r\n210=Billy^Bob^Strum^Hand=0xff0000\r\n211=Billy^Bob^Right^Hand^Out=0xff0000\r\n212=Channel^212=0xff0000\r\n213=Billy^Bob^Body^Left=0xff0000\r\n214=Billy^Bob^Body^Right=0xff0000\r\n215=Billy^Bob^Body^Lean=0xff0000\r\n216=Channel^216=0xff0000\r\n217=Channel^217=0xff0000\r\n218=Rolfe^Top^Blue^Lights=0xff0000\r\n219=Rolfe^Top^Green^Lights=0xff0000\r\n220=Rolfe^Top^Amber^Lights=0xff0000\r\n221=Rolfe^Top^Red^Lights=0xff0000\r\n222=Rolfe^Applause^Sign=0xff0000\r\n223=Center^Top^Blue^Lights=0xff0000\r\n224=Center^Top^Green^Lights=0xff0000\r\n225=Center^Top^Amber^Lights=0xff0000\r\n226=Center^Top^Red^Lights=0xff0000\r\n227=Dook^Drum^Lights=0xff0000\r\n228=Billy^Bob^Top^Blue^Lights=0xff0000\r\n229=Billy^Bob^Top^Green^Lights=0xff0000\r\n230=Billy^Bob^Top^Amber^Lights=0xff0000\r\n231=Billy^Bob^Top^Red^Lights=0xff0000\r\n232=Billy^Bob^Fire^Still=0xff0000\r\n233=Channel^233=0xff0000\r\n234=Channel^234=0xff0000\r\n235=Channel^235=0xff0000\r\n236=Channel^236=0xff0000\r\n237=Channel^237=0xff0000\r\n238=Channel^238=0xff0000\r\n239=Channel^239=0xff0000\r\n240=Channel^240=0xff0000\r\n241=Channel^241=0xff0000\r\n242=Channel^242=0xff0000\r\n243=Channel^243=0xff0000\r\n244=Channel^244=0xff0000\r\n245=Channel^245=0xff0000\r\n246=Channel^246=0xff0000\r\n247=Channel^247=0xff0000\r\n248=Channel^248=0xff0000\r\n249=Channel^249=0xff0000\r\n250=Channel^250=0xff0000\r\n251=Channel^251=0xff0000\r\n252=Channel^252=0xff0000\r\n253=Channel^253=0xff0000\r\n254=Channel^254=0xff0000\r\n255=Channel^255=0xff0000\r\n256=Channel^256=0xff0000\r\n\r\n";
+
+ public static string CTM_PTT = "\r\n1=Chuck^Mouth=0xff0000\r\n2=Chuck^Head^Left=0xff0000\r\n3=Chuck^Head^Right=0xff0000\r\n4=Chuck^Head^Up=0xff0000\r\n5=Chuck^Eyes^Right=0xff0000\r\n6=Chuck^Eyelids=0xff0000\r\n7=Chuck^Hand=0xff0000\r\n8=Chuck^Eyes^Left=0xff0000\r\n9=Bird^Mouth=0xff0000\r\n10=Bird^Rock=0xff0000\r\n11=Channel^11=0xff0000\r\n12=Channel^12=0xff0000\r\n13=Channel^13=0xff0000\r\n14=Channel^14=0xff0000\r\n15=Jasper^Mouth=0xff0000\r\n16=Jasper^Head^Left=0xff0000\r\n17=Jasper^Head^Right=0xff0000\r\n18=Jasper^Head^Up=0xff0000\r\n19=Jasper^Eyes^Right=0xff0000\r\n20=Jasper^Eyelids=0xff0000\r\n21=Jasper^Strum=0xff0000\r\n22=Jasper^Eyes^Left=0xff0000\r\n23=Channel^23=0xff0000\r\n24=Channel^24=0xff0000\r\n25=Channel^25=0xff0000\r\n26=Channel^26=0xff0000\r\n27=Channel^27=0xff0000\r\n28=Channel^28=0xff0000\r\n29=Pasqually^Mouth=0xff0000\r\n30=Pasqually^Head^Left=0xff0000\r\n31=Pasqually^Head^Right=0xff0000\r\n32=Pasqually^Hands=0xff0000\r\n33=Pasqually^Eyes^Right=0xff0000\r\n34=Pasqually^Eyelids=0xff0000\r\n35=Pasqually^Mustache=0xff0000\r\n36=Pasqually^Eyes^Left=0xff0000\r\n37=Pasqually^Door=0xff0000\r\n38=Channel^38=0xff0000\r\n39=Channel^39=0xff0000\r\n40=Channel^40=0xff0000\r\n41=Channel^41=0xff0000\r\n42=Channel^42=0xff0000\r\n43=Munch^Mouth=0xff0000\r\n44=Munch^Head^Left=0xff0000\r\n45=Munch^Head^Right=0xff0000\r\n46=Munch^Left^Arm=0xff0000\r\n47=Munch^Eyes^Right=0xff0000\r\n48=Munch^Eyelids=0xff0000\r\n49=Munch^Right^Arm=0xff0000\r\n50=Munch^Eyes^Left=0xff0000\r\n51=Munch^Door=0xff0000\r\n52=Channel^52=0xff0000\r\n53=Channel^53=0xff0000\r\n54=Channel^54=0xff0000\r\n55=Channel^55=0xff0000\r\n56=Channel^56=0xff0000\r\n57=Guest^Mouth=0xff0000\r\n58=Guest^Head^Left=0xff0000\r\n59=Guest^Head^Right=0xff0000\r\n60=Guest^Head^Up=0xff0000\r\n61=Guest^Eyes^Right=0xff0000\r\n62=Guest^Eyelids=0xff0000\r\n63=Guest^Hand=0xff0000\r\n64=Guest^Eyes^Left=0xff0000\r\n65=Lights^House^Dim=0xff0000\r\n66=Flag^USA=0xff0000\r\n67=Flag^Confederate=0xff0000\r\n68=Flag^State=0xff0000\r\n69=Flag^CEC=0xff0000\r\n70=Flag^Italy=0xff0000\r\n71=Band^Cowbell=0xff0000\r\n72=Band^Large^Block=0xff0000\r\n73=Band^Medium^Block=0xff0000\r\n74=Band^Tambourine=0xff0000\r\n75=Band^Bass^Drum=0xff0000\r\n76=Band^Snare^Drum=0xff0000\r\n77=Band^Triangle=0xff0000\r\n78=Band^Cymbal=0xff0000\r\n79=Band^Large^Pan=0xff0000\r\n80=Band^Medium^Pan=0xff0000\r\n81=Band^Small^Pan=0xff0000\r\n82=Lights^Razzle=0xff0000\r\n83=Clapper^Clap=0xff0000\r\n84=Clapper^Elephant=0xff0000\r\n85=Clapper^Spot^Light=0xff0000\r\n86=Lights^Introduction=0xff0000\r\n87=Pasqually^Flood^Light=0xff0000\r\n88=Pasqually^Spot^Light=0xff0000\r\n89=Guest^Flood^Light=0xff0000\r\n90=Guest^Spot^Light=0xff0000\r\n91=Chuck^Flood^Light^1=0xff0000\r\n92=Chuck^Spot^Light=0xff0000\r\n93=Chuck^Flood^Light^2=0xff0000\r\n94=Jasper^Flood^Light=0xff0000\r\n95=Jasper^Spot^Light=0xff0000\r\n96=Munch^Flood^Light=0xff0000\r\n97=Munch^Spot^Light=0xff0000\r\n98=Bird^Flood^Light=0xff0000\r\n99=Bird^Spot^Light=0xff0000\r\n100=Channel^100=0xff0000\r\n101=Lights^Valence^Left=0xff0000\r\n102=Lights^Valence^Left^Center=0xff0000\r\n103=Lights^Valence^Center=0xff0000\r\n104=Lights^Valence^Right^Center=0xff0000\r\n105=Lights^Valence^Right=0xff0000\r\n106=Lights^Red^Left=0xff0000\r\n107=Lights^Amber^Left=0xff0000\r\n108=Lights^Blue^Left=0xff0000\r\n109=Lights^Red^Center=0xff0000\r\n110=Lights^Amber^Center=0xff0000\r\n111=Lights^Blue^Center=0xff0000\r\n112=Lights^Red^Right=0xff0000\r\n113=Lights^Amber^Right=0xff0000\r\n114=Lights^Blue^Right=0xff0000\r\n115=Channel^115=0xff0000\r\n116=Channel^116=0xff0000\r\n117=Channel^117=0xff0000\r\n118=Channel^118=0xff0000\r\n119=Channel^119=0xff0000\r\n120=Channel^120=0xff0000\r\n121=Channel^121=0xff0000\r\n122=Channel^122=0xff0000\r\n123=Channel^123=0xff0000\r\n124=Channel^124=0xff0000\r\n125=Channel^125=0xff0000\r\n126=Channel^126=0xff0000\r\n127=Channel^127=0xff0000\r\n128=Channel^128=0xff0000\r\n129=Channel^129=0xff0000\r\n130=Channel^130=0xff0000\r\n131=Channel^131=0xff0000\r\n132=Channel^132=0xff0000\r\n133=Channel^133=0xff0000\r\n134=Channel^134=0xff0000\r\n135=Channel^135=0xff0000\r\n136=Channel^136=0xff0000\r\n137=Channel^137=0xff0000\r\n138=Channel^138=0xff0000\r\n139=Channel^139=0xff0000\r\n140=Channel^140=0xff0000\r\n141=Channel^141=0xff0000\r\n142=Channel^142=0xff0000\r\n143=Channel^143=0xff0000\r\n144=Channel^144=0xff0000\r\n145=Channel^145=0xff0000\r\n146=Channel^146=0xff0000\r\n147=Channel^147=0xff0000\r\n148=Channel^148=0xff0000\r\n149=Channel^149=0xff0000\r\n150=Channel^150=0xff0000\r\n151=Channel^151=0xff0000\r\n152=Channel^152=0xff0000\r\n153=Channel^153=0xff0000\r\n154=Channel^154=0xff0000\r\n155=Channel^155=0xff0000\r\n156=Channel^156=0xff0000\r\n157=Channel^157=0xff0000\r\n158=Channel^158=0xff0000\r\n159=Channel^159=0xff0000\r\n160=Channel^160=0xff0000\r\n161=Channel^161=0xff0000\r\n162=Channel^162=0xff0000\r\n163=Channel^163=0xff0000\r\n164=Channel^164=0xff0000\r\n165=Channel^165=0xff0000\r\n166=Channel^166=0xff0000\r\n167=Channel^167=0xff0000\r\n168=Channel^168=0xff0000\r\n169=Channel^169=0xff0000\r\n170=Channel^170=0xff0000\r\n171=Channel^171=0xff0000\r\n172=Channel^172=0xff0000\r\n173=Channel^173=0xff0000\r\n174=Channel^174=0xff0000\r\n175=Channel^175=0xff0000\r\n176=Channel^176=0xff0000\r\n177=Channel^177=0xff0000\r\n178=Channel^178=0xff0000\r\n179=Channel^179=0xff0000\r\n180=Channel^180=0xff0000\r\n181=Channel^181=0xff0000\r\n182=Channel^182=0xff0000\r\n183=Channel^183=0xff0000\r\n184=Channel^184=0xff0000\r\n185=Channel^185=0xff0000\r\n186=Channel^186=0xff0000\r\n187=Channel^187=0xff0000\r\n188=Channel^188=0xff0000\r\n189=Channel^189=0xff0000\r\n190=Channel^190=0xff0000\r\n191=Channel^191=0xff0000\r\n192=Channel^192=0xff0000\r\n193=Channel^193=0xff0000\r\n194=Channel^194=0xff0000\r\n195=Channel^195=0xff0000\r\n196=Channel^196=0xff0000\r\n197=Channel^197=0xff0000\r\n198=Channel^198=0xff0000\r\n199=Channel^199=0xff0000\r\n200=Channel^200=0xff0000\r\n201=Channel^201=0xff0000\r\n202=Channel^202=0xff0000\r\n203=Channel^203=0xff0000\r\n204=Channel^204=0xff0000\r\n205=Channel^205=0xff0000\r\n206=Channel^206=0xff0000\r\n207=Channel^207=0xff0000\r\n208=Channel^208=0xff0000\r\n209=Channel^209=0xff0000\r\n210=Channel^210=0xff0000\r\n211=Channel^211=0xff0000\r\n212=Channel^212=0xff0000\r\n213=Channel^213=0xff0000\r\n214=Channel^214=0xff0000\r\n215=Channel^215=0xff0000\r\n216=Channel^216=0xff0000\r\n217=Channel^217=0xff0000\r\n218=Channel^218=0xff0000\r\n219=Channel^219=0xff0000\r\n220=Channel^220=0xff0000\r\n221=Channel^221=0xff0000\r\n222=Channel^222=0xff0000\r\n223=Channel^223=0xff0000\r\n224=Channel^224=0xff0000\r\n225=Channel^225=0xff0000\r\n226=Channel^226=0xff0000\r\n227=Channel^227=0xff0000\r\n228=Channel^228=0xff0000\r\n229=Channel^229=0xff0000\r\n230=Channel^230=0xff0000\r\n231=Channel^231=0xff0000\r\n232=Channel^232=0xff0000\r\n233=Channel^233=0xff0000\r\n234=Channel^234=0xff0000\r\n235=Channel^235=0xff0000\r\n236=Channel^236=0xff0000\r\n237=Channel^237=0xff0000\r\n238=Channel^238=0xff0000\r\n239=Channel^239=0xff0000\r\n240=Channel^240=0xff0000\r\n241=Channel^241=0xff0000\r\n242=Channel^242=0xff0000\r\n243=Channel^243=0xff0000\r\n244=Channel^244=0xff0000\r\n245=Channel^245=0xff0000\r\n246=Channel^246=0xff0000\r\n247=Channel^247=0xff0000\r\n248=Channel^248=0xff0000\r\n249=Channel^249=0xff0000\r\n250=Channel^250=0xff0000\r\n251=Channel^251=0xff0000\r\n252=Channel^252=0xff0000\r\n253=Channel^253=0xff0000\r\n254=Channel^254=0xff0000\r\n255=Channel^255=0xff0000\r\n256=Channel^256=0xff0000\r\n\r\n";
+
+ public static string CTM_R12 = "\r\n1=Chuck^Mouth=0xff0000\r\n2=Chuck^Head^Left=0xff0000\r\n3=Chuck^Head^Right=0xff0000\r\n4=Chuck^Head^Up=0xff0000\r\n5=Chuck^Eyes^Right=0xff0000\r\n6=Chuck^Eyelids=0xff0000\r\n7=Chuck^Hand=0xff0000\r\n8=Chuck^Eyes^Left=0xff0000\r\n9=Wink=0xff0000\r\n10=Channel^10=0xff0000\r\n11=Channel^11=0xff0000\r\n12=Channel^12=0xff0000\r\n13=Channel^13=0xff0000\r\n14=Channel^14=0xff0000\r\n15=Jasper^Mouth=0xff0000\r\n16=Jasper^Head^Left=0xff0000\r\n17=Jasper^Head^Right=0xff0000\r\n18=Jasper^Head^Up=0xff0000\r\n19=Jasper^Eyes^Right=0xff0000\r\n20=Jasper^Eyelids=0xff0000\r\n21=Jasper^Strum=0xff0000\r\n22=Jasper^Eyes^Left=0xff0000\r\n23=Channel^23=0xff0000\r\n24=Channel^24=0xff0000\r\n25=Channel^25=0xff0000\r\n26=Channel^26=0xff0000\r\n27=Channel^27=0xff0000\r\n28=Channel^28=0xff0000\r\n29=Pasqually^Mouth=0xff0000\r\n30=Pasqually^Head^Left=0xff0000\r\n31=Pasqually^Head^Right=0xff0000\r\n32=Pasqually^Right^Arm=0xff0000\r\n33=Pasqually^Eyes^Right=0xff0000\r\n34=Pasqually^Eyelids=0xff0000\r\n35=Pasqually^Left^Arm=0xff0000\r\n36=Pasqually^Eyes^Left=0xff0000\r\n37=Channel^37=0xff0000\r\n38=Channel^38=0xff0000\r\n39=Channel^39=0xff0000\r\n40=Channel^40=0xff0000\r\n41=Channel^41=0xff0000\r\n42=Channel^42=0xff0000\r\n43=Munch^Mouth=0xff0000\r\n44=Munch^Head^Left=0xff0000\r\n45=Munch^Head^Right=0xff0000\r\n46=Munch^Left^Arm=0xff0000\r\n47=Munch^Eyes^Right=0xff0000\r\n48=Munch^Eyelids=0xff0000\r\n49=Munch^Right^Arm=0xff0000\r\n50=Munch^Eyes^Left=0xff0000\r\n51=CEC^Turntable^Hide=0xff0000\r\n52=CEC^Turntable^Show=0xff0000\r\n53=Channel^53=0xff0000\r\n54=Channel^54=0xff0000\r\n55=Channel^55=0xff0000\r\n56=Channel^56=0xff0000\r\n57=Helen^Mouth=0xff0000\r\n58=Helen^Head^Left=0xff0000\r\n59=Helen^Head^Right=0xff0000\r\n60=Helen^Head^Up=0xff0000\r\n61=Helen^Eyes^Right=0xff0000\r\n62=Helen^Eyelids=0xff0000\r\n63=Helen^Hand=0xff0000\r\n64=Helen^Eyes^Left=0xff0000\r\n65=Lights^House^Dim=0xff0000\r\n66=Flag^USA=0xff0000\r\n67=Flag^Confederate=0xff0000\r\n68=Flag^State=0xff0000\r\n69=Flag^CEC=0xff0000\r\n70=Flag^Italy=0xff0000\r\n71=Channel^71=0xff0000\r\n72=Channel^72=0xff0000\r\n73=Channel^73=0xff0000\r\n74=Channel^74=0xff0000\r\n75=Channel^75=0xff0000\r\n76=Channel^76=0xff0000\r\n77=Channel^77=0xff0000\r\n78=Channel^78=0xff0000\r\n79=Channel^79=0xff0000\r\n80=Channel^80=0xff0000\r\n81=Channel^81=0xff0000\r\n82=Channel^82=0xff0000\r\n83=Channel^83=0xff0000\r\n84=Channel^84=0xff0000\r\n85=Bandstand^Performance^Lights=0xff0000\r\n86=CEC^Strobe^Light=0xff0000\r\n87=Pasqually^Drum^Light=0xff0000\r\n88=Pasqually^Spot^Light=0xff0000\r\n89=Organ^Leg^Outer^Lights=0xff0000\r\n90=Guest^Spot^Light=0xff0000\r\n91=Chuck^Star^-^Rope^Light=0xff0000\r\n92=Chuck^Spot^Light=0xff0000\r\n93=Chuck^Sign^-^Neon=0xff0000\r\n94=Organ^Leg^Middle^Lights=0xff0000\r\n95=Jasper^Spot^Light=0xff0000\r\n96=Organ^Face^#2^Lights=0xff0000\r\n97=Munch^Spot^Light=0xff0000\r\n98=Organ^Face^#1^Lights=0xff0000\r\n99=Organ^Leg^Inner^Lights=0xff0000\r\n100=Channel^100=0xff0000\r\n101=Amber^Backdrop^Lights=0xff0000\r\n102=Red^Backdrop^Lights=0xff0000\r\n103=Blue^Backdrop^Lights=0xff0000\r\n104=Chuck^Top^Amber^Lights=0xff0000\r\n105=Top^Amber^Lights=0xff0000\r\n106=Top^Red^Lights=0xff0000\r\n107=Top^Blue^Lights=0xff0000\r\n108=Chuck^Top^Red^Lights=0xff0000\r\n109=Fiber^Optic^Curtain=0xff0000\r\n110=Helicopter^Light=0xff0000\r\n111=Channel^111=0xff0000\r\n112=Channel^112=0xff0000\r\n113=Channel^113=0xff0000\r\n114=Pasqually^Band^Sign^Light=0xff0000\r\n115=Chuck^Top^Blue^Lights=0xff0000\r\n116=Channel^116=0xff0000\r\n117=Channel^117=0xff0000\r\n118=Channel^118=0xff0000\r\n119=Channel^119=0xff0000\r\n120=Channel^120=0xff0000\r\n121=Channel^121=0xff0000\r\n122=Channel^122=0xff0000\r\n123=Channel^123=0xff0000\r\n124=Channel^124=0xff0000\r\n125=Channel^125=0xff0000\r\n126=Channel^126=0xff0000\r\n127=Channel^127=0xff0000\r\n128=Channel^128=0xff0000\r\n129=Channel^129=0xff0000\r\n130=Channel^130=0xff0000\r\n131=Channel^131=0xff0000\r\n132=Channel^132=0xff0000\r\n133=Channel^133=0xff0000\r\n134=Channel^134=0xff0000\r\n135=Channel^135=0xff0000\r\n136=Channel^136=0xff0000\r\n137=Channel^137=0xff0000\r\n138=Channel^138=0xff0000\r\n139=Channel^139=0xff0000\r\n140=Channel^140=0xff0000\r\n141=Channel^141=0xff0000\r\n142=Channel^142=0xff0000\r\n143=Channel^143=0xff0000\r\n144=Channel^144=0xff0000\r\n145=Channel^145=0xff0000\r\n146=Channel^146=0xff0000\r\n147=Channel^147=0xff0000\r\n148=Channel^148=0xff0000\r\n149=Channel^149=0xff0000\r\n150=Channel^150=0xff0000\r\n151=Channel^151=0xff0000\r\n152=Channel^152=0xff0000\r\n153=Channel^153=0xff0000\r\n154=Channel^154=0xff0000\r\n155=Channel^155=0xff0000\r\n156=Channel^156=0xff0000\r\n157=Channel^157=0xff0000\r\n158=Channel^158=0xff0000\r\n159=Channel^159=0xff0000\r\n160=Channel^160=0xff0000\r\n161=Channel^161=0xff0000\r\n162=Channel^162=0xff0000\r\n163=Channel^163=0xff0000\r\n164=Channel^164=0xff0000\r\n165=Channel^165=0xff0000\r\n166=Channel^166=0xff0000\r\n167=Channel^167=0xff0000\r\n168=Channel^168=0xff0000\r\n169=Channel^169=0xff0000\r\n170=Channel^170=0xff0000\r\n171=Channel^171=0xff0000\r\n172=Channel^172=0xff0000\r\n173=Channel^173=0xff0000\r\n174=Channel^174=0xff0000\r\n175=Channel^175=0xff0000\r\n176=Channel^176=0xff0000\r\n177=Channel^177=0xff0000\r\n178=Channel^178=0xff0000\r\n179=Channel^179=0xff0000\r\n180=Channel^180=0xff0000\r\n181=Channel^181=0xff0000\r\n182=Channel^182=0xff0000\r\n183=Channel^183=0xff0000\r\n184=Channel^184=0xff0000\r\n185=Channel^185=0xff0000\r\n186=Channel^186=0xff0000\r\n187=Channel^187=0xff0000\r\n188=Channel^188=0xff0000\r\n189=Channel^189=0xff0000\r\n190=Channel^190=0xff0000\r\n191=Channel^191=0xff0000\r\n192=Channel^192=0xff0000\r\n193=Channel^193=0xff0000\r\n194=Channel^194=0xff0000\r\n195=Channel^195=0xff0000\r\n196=Channel^196=0xff0000\r\n197=Channel^197=0xff0000\r\n198=Channel^198=0xff0000\r\n199=Channel^199=0xff0000\r\n200=Channel^200=0xff0000\r\n201=Channel^201=0xff0000\r\n202=Channel^202=0xff0000\r\n203=Channel^203=0xff0000\r\n204=Channel^204=0xff0000\r\n205=Channel^205=0xff0000\r\n206=Channel^206=0xff0000\r\n207=Channel^207=0xff0000\r\n208=Channel^208=0xff0000\r\n209=Channel^209=0xff0000\r\n210=Channel^210=0xff0000\r\n211=Channel^211=0xff0000\r\n212=Channel^212=0xff0000\r\n213=Channel^213=0xff0000\r\n214=Channel^214=0xff0000\r\n215=Channel^215=0xff0000\r\n216=Channel^216=0xff0000\r\n217=Channel^217=0xff0000\r\n218=Channel^218=0xff0000\r\n219=Channel^219=0xff0000\r\n220=Channel^220=0xff0000\r\n221=Channel^221=0xff0000\r\n222=Channel^222=0xff0000\r\n223=Channel^223=0xff0000\r\n224=Channel^224=0xff0000\r\n225=Channel^225=0xff0000\r\n226=Channel^226=0xff0000\r\n227=Channel^227=0xff0000\r\n228=Channel^228=0xff0000\r\n229=Channel^229=0xff0000\r\n230=Channel^230=0xff0000\r\n231=Channel^231=0xff0000\r\n232=Channel^232=0xff0000\r\n233=Channel^233=0xff0000\r\n234=Channel^234=0xff0000\r\n235=Channel^235=0xff0000\r\n236=Channel^236=0xff0000\r\n237=Channel^237=0xff0000\r\n238=Channel^238=0xff0000\r\n239=Channel^239=0xff0000\r\n240=Channel^240=0xff0000\r\n241=Channel^241=0xff0000\r\n242=Channel^242=0xff0000\r\n243=Channel^243=0xff0000\r\n244=Channel^244=0xff0000\r\n245=Channel^245=0xff0000\r\n246=Channel^246=0xff0000\r\n247=Channel^247=0xff0000\r\n248=Channel^248=0xff0000\r\n249=Channel^249=0xff0000\r\n250=Channel^250=0xff0000\r\n251=Channel^251=0xff0000\r\n252=Channel^252=0xff0000\r\n253=Channel^253=0xff0000\r\n254=Channel^254=0xff0000\r\n255=Channel^255=0xff0000\r\n256=Channel^256=0xff0000\r\n\r\n";
+
+ public static string CTM_NRAE = "\r\n1=Mitzi^Lids^Open=0xff0000\r\n2=Mitzi^Eyes^Left=0xff0000\r\n3=Mitzi^Eyes^Right=0xff0000\r\n4=Mitzi^Eyes^Up=0xff0000\r\n5=Mitzi^Eyes^Down=0xff0000\r\n6=Mitzi^Lids^Close=0xff0000\r\n7=Billy^Bob^Lids^Open=0xff0000\r\n8=Billy^Bob^Eyes^Left=0xff0000\r\n9=Billy^Bob^Eyes^Right=0xff0000\r\n10=Billy^Bob^Eyes^Up=0xff0000\r\n11=Billy^Bob^Eyes^Down=0xff0000\r\n12=Billy^Bob^Lids^Close=0xff0000\r\n13=Fatz^Lids^Open=0xff0000\r\n14=Fatz^Eyes^Left=0xff0000\r\n15=Fatz^Eyes^Right=0xff0000\r\n16=Fatz^Eyes^Up=0xff0000\r\n17=Mitzi^Mouth=0xff0000\r\n18=Mitzi^Lip=0xff0000\r\n19=Mitzi^Head^Down=0xff0000\r\n20=Mitzi^Head^Turn=0xff0000\r\n21=Mitzi^Head^Tilt^Left=0xff0000\r\n22=Mitzi^Wrist^Right=0xff0000\r\n23=Mitzi^Elbow^Right=0xff0000\r\n24=Mitzi^Arm^Twist^Right=0xff0000\r\n25=Mitzi^Arm^Raise^Right=0xff0000\r\n26=Mitzi^Shoulder^Right=0xff0000\r\n27=Mitzi^Wrist^Left=0xff0000\r\n28=Mitzi^Elbow^Left=0xff0000\r\n29=Mitzi^Arm^Twist^Left=0xff0000\r\n30=Mitzi^Arm^Raise^Left=0xff0000\r\n31=Mitzi^Shoulder^Left=0xff0000\r\n32=Mitzi^Head^Tilt^Right=0xff0000\r\n33=Mitzi^Body^Turn^Right=0xff0000\r\n34=Mitzi^Body^Tilt^Left=0xff0000\r\n35=Mitzi^Body^Tilt^Right=0xff0000\r\n36=Mitzi^Knee^Bend=0xff0000\r\n37=Billy^Bob^Mouth=0xff0000\r\n38=Billy^Bob^Lip=0xff0000\r\n39=Billy^Bob^Head^Down=0xff0000\r\n40=Billy^Bob^Head^Turn=0xff0000\r\n41=Billy^Bob^Head^Tilt^Left=0xff0000\r\n42=Billy^Bob^Wrist^Right=0xff0000\r\n43=Billy^Bob^Elbow^Right=0xff0000\r\n44=Billy^Bob^Arm^Twist^Right=0xff0000\r\n45=Billy^Bob^Arm^Raise^Right=0xff0000\r\n46=Billy^Bob^Shoulder^Right=0xff0000\r\n47=Billy^Bob^Wrist^Left=0xff0000\r\n48=Billy^Bob^Elbow^Left=0xff0000\r\n49=Billy^Bob^Arm^Twist^Left=0xff0000\r\n50=Billy^Bob^Arm^Raise^Left=0xff0000\r\n51=Billy^Bob^Shoulder^Left=0xff0000\r\n52=Billy^Bob^Head^Tilt^Right=0xff0000\r\n53=Billy^Bob^Body^Turn^Right=0xff0000\r\n54=Billy^Bob^Body^Tilt^Left=0xff0000\r\n55=Billy^Bob^Body^Tilt^Right=0xff0000\r\n56=Billy^Bob^Knee^Bend=0xff0000\r\n57=Fatz^Eyes^Down=0xff0000\r\n58=Fatz^Lids^Close=0xff0000\r\n59=Dook^Lids^Open=0xff0000\r\n60=Dook^Eyes^Left=0xff0000\r\n61=Dook^Eyes^Right=0xff0000\r\n62=Dook^Eyes^Up=0xff0000\r\n63=Dook^Eyes^Down=0xff0000\r\n64=Dook^Lids^Close=0xff0000\r\n65=Mitzi^Ears=0xff0000\r\n66=Dook^Ears=0xff0000\r\n67=Channel^67=0xff0000\r\n68=Channel^68=0xff0000\r\n69=Channel^69=0xff0000\r\n70=Channel^70=0xff0000\r\n71=Channel^71=0xff0000\r\n72=Channel^72=0xff0000\r\n73=Fatz^Mouth=0xff0000\r\n74=Fatz^Lip=0xff0000\r\n75=Fatz^Head^Down=0xff0000\r\n76=Fatz^Head^Turn=0xff0000\r\n77=Fatz^Head^Tilt^Left=0xff0000\r\n78=Fatz^Wrist^Right=0xff0000\r\n79=Fatz^Elbow^Right=0xff0000\r\n80=Fatz^Arm^Twist^Right=0xff0000\r\n81=Fatz^Arm^Raise^Right=0xff0000\r\n82=Fatz^Shoulder^Right=0xff0000\r\n83=Fatz^Wrist^Left=0xff0000\r\n84=Fatz^Elbow^Left=0xff0000\r\n85=Fatz^Arm^Twist^Left=0xff0000\r\n86=Fatz^Arm^Raise^Left=0xff0000\r\n87=Fatz^Shoulder^Left=0xff0000\r\n88=Fatz^Head^Tilt^Right=0xff0000\r\n89=Fatz^Body^Turn^Right=0xff0000\r\n90=Fatz^Body^Tilt^Left=0xff0000\r\n91=Fatz^Body^Tilt^Right=0xff0000\r\n92=Fatz^Knee^Bend=0xff0000\r\n93=Dook^Mouth=0xff0000\r\n94=Dook^Lip=0xff0000\r\n95=Dook^Head^Down=0xff0000\r\n96=Dook^Head^Turn=0xff0000\r\n97=Dook^Head^Tilt^Left=0xff0000\r\n98=Dook^Wrist^Right=0xff0000\r\n99=Dook^Elbow^Right=0xff0000\r\n100=Dook^Arm^Twist^Right=0xff0000\r\n101=Dook^Arm^Raise^Right=0xff0000\r\n102=Dook^Shoulder^Right=0xff0000\r\n103=Dook^Wrist^Left=0xff0000\r\n104=Dook^Elbow^Left=0xff0000\r\n105=Dook^Arm^Twist^Left=0xff0000\r\n106=Dook^Arm^Raise^Left=0xff0000\r\n107=Dook^Shoulder^Left=0xff0000\r\n108=Dook^Head^Tilt^Right=0xff0000\r\n109=Dook^Body^Turn^Right=0xff0000\r\n110=Dook^Body^Tilt^Left=0xff0000\r\n111=Dook^Body^Tilt^Right=0xff0000\r\n112=Dook^Knee^Bend=0xff0000\r\n113=Channel^113=0xff0000\r\n114=Channel^114=0xff0000\r\n115=Channel^115=0xff0000\r\n116=Channel^116=0xff0000\r\n117=Channel^117=0xff0000\r\n118=Channel^118=0xff0000\r\n119=Channel^119=0xff0000\r\n120=Channel^120=0xff0000\r\n121=Color^lights^Strobe=0xff0000\r\n122=Channel^122=0xff0000\r\n123=Channel^123=0xff0000\r\n124=Channel^124=0xff0000\r\n125=Turntables^Billy^Bob^1=0xff0000\r\n126=Turntables^Billy^Bob^2=0xff0000\r\n127=Turntables^Billy^Bob^3=0xff0000\r\n128=Turntables^Billy^Bob^4=0xff0000\r\n129=Channel^129=0xff0000\r\n130=Channel^130=0xff0000\r\n131=Channel^131=0xff0000\r\n132=Channel^132=0xff0000\r\n133=Turntables^Fatz=0xff0000\r\n134=Turntables^Fatz=0xff0000\r\n135=Turntables^Fatz=0xff0000\r\n136=Turntables^Fatz=0xff0000\r\n137=Looney^Bird^Lab^Mouth=0xff0000\r\n138=Looney^Bird^Lab^Lip=0xff0000\r\n139=Looney^Bird^Lab^Head^Down=0xff0000\r\n140=Looney^Bird^Lab^Head^Turn=0xff0000\r\n141=Looney^Bird^Lab^Head^Tilt^Left=0xff0000\r\n142=Looney^Bird^Lab^Wrist^Right=0xff0000\r\n143=Looney^Bird^Lab^Elbow^Right=0xff0000\r\n144=Looney^Bird^Lab^Arm^Twist^Right=0xff0000\r\n145=Looney^Bird^Lab^Head^Tilt^Right=0xff0000\r\n146=Looney^Bird^Lab^Shoulder^Right=0xff0000\r\n147=Looney^Bird^Lab^Wrist^Left=0xff0000\r\n148=Looney^Bird^Lab^Elbow^Left=0xff0000\r\n149=Looney^Bird^Lab^Arm^Twist^Left=0xff0000\r\n150=Looney^Bird^Lab^Body^Turn^Right=0xff0000\r\n151=Looney^Bird^Lab^Shoulder^Left=0xff0000\r\n152=Looney^Window^Mouth=0xff0000\r\n153=Looney^Window^Lip=0xff0000\r\n154=Looney^Window^Head^Down=0xff0000\r\n155=Looney^Window^Head^Turn=0xff0000\r\n156=Props^Computer^Swivel=0xff0000\r\n157=Beach^Bear^Mouth=0xff0000\r\n158=Beach^Bear^Lip=0xff0000\r\n159=Beach^Bear^Head^Down=0xff0000\r\n160=Beach^Bear^Head^Turn=0xff0000\r\n161=Beach^Bear^Head^Tilt^Left=0xff0000\r\n162=Beach^Bear^Wrist^Right=0xff0000\r\n163=Beach^Bear^Elbow^Right=0xff0000\r\n164=Beach^Bear^Arm^Twist^Right=0xff0000\r\n165=Beach^Bear^Arm^Raise^Right=0xff0000\r\n166=Beach^Bear^Shoulder^Right=0xff0000\r\n167=Beach^Bear^Wrist^Left=0xff0000\r\n168=Beach^Bear^Elbow^Left=0xff0000\r\n169=Beach^Bear^Arm^Twist^Left=0xff0000\r\n170=Beach^Bear^Arm^Raise^Left=0xff0000\r\n171=Beach^Bear^Shoulder^Left=0xff0000\r\n172=Beach^Bear^Head^Tilt^Right=0xff0000\r\n173=Beach^Bear^Body^Turn^Right=0xff0000\r\n174=Beach^Bear^Body^Tilt^Left=0xff0000\r\n175=Beach^Bear^Body^Tilt^Right=0xff0000\r\n176=Beach^Bear^Knee^Bend=0xff0000\r\n177=Color^lights^Looney^Set^Light=0xff0000\r\n178=Color^lights^Dook^Window=0xff0000\r\n179=Controls^Stop=0xff0000\r\n180=Controls^Rewind=0xff0000\r\n181=Stage^Lights^Stage^L^Spo=0xff0000t\r\n182=Stage^Lights^Stage^R^Spot=0xff0000\r\n183=Stage^Lights^Center^L^Spot=0xff0000\r\n184=Stage^Lights^Center^Cent^Spot=0xff0000\r\n185=Stage^Lights^Center^R^Spot=0xff0000\r\n186=Stage^Lights^Note^1=0xff0000\r\n187=Stage^Lights^Note^2=0xff0000\r\n188=Stage^Lights^Rockafire^Neon=0xff0000\r\n189=Color^lights^Color^1=0xff0000\r\n190=Color^lights^Color^2=0xff0000\r\n191=Color^lights^Color^3=0xff0000\r\n192=Color^lights^Color^4=0xff0000\r\n193=Controls^Turn^Stage^Right=0xff0000\r\n194=Controls^Turn^Stage^Left=0xff0000\r\n195=Props^Beach^B^Window=0xff0000\r\n196=Props^Coconut^Drop=0xff0000\r\n197=Props^Speaker^Left=0xff0000\r\n198=Props^RAB^Ears^Top^L=0xff0000\r\n199=Props^RAB^Ears^Top^R=0xff0000\r\n200=Props^RAB^Ears^Bot^L=0xff0000\r\n201=Props^RAB^Ears^Bot^R=0xff0000\r\n202=Looney^Bird^Lab^Lids^Open=0xff0000\r\n203=Looney^Bird^Lab^Eyes^Left=0xff0000\r\n204=Looney^Bird^Lab^Eyes^Right=0xff0000\r\n205=Looney^Bird^Lab^Eyes^Up=0xff0000\r\n206=Looney^Bird^Lab^Eyes^Down=0xff0000\r\n207=Looney^Bird^Lab^Lids^Close=0xff0000\r\n208=Props^Karaoke^Sign=0xff0000\r\n209=Stage^Lights^Right^Floor^Spots=0xff0000\r\n210=Controls^Stage^L^Curtians=0xff0000\r\n211=Controls^Stage^R^Curtians=0xff0000\r\n212=Controls^Center^Curtians=0xff0000\r\n213=Props^Speaker^Right=0xff0000\r\n214=Channel^214=0xff0000\r\n215=Beach^Bear^Lids^Open=0xff0000\r\n216=Beach^Bear^Eyes^Left=0xff0000\r\n217=Beach^Bear^Eyes^Right=0xff0000\r\n218=Beach^Bear^Eyes^Up=0xff0000\r\n219=Beach^Bear^Eyes^Down=0xff0000\r\n220=Turntables^Center^Stage=0xff0000\r\n221=Turntables^Center^Stage=0xff0000\r\n222=Turntables^Center^Stage=0xff0000\r\n223=Turntables^Center^Stage=0xff0000\r\n224=Turntables^Center^Stage=0xff0000\r\n225=Beach^Bear^Lids^Close=0xff0000\r\n226=Stage^Lights^Left^Floor^Spots=0xff0000\r\n227=Props^Large^TV=0xff0000\r\n228=Props^Small^TV=0xff0000\r\n229=Turntables^Mitzi=0xff0000\r\n230=Turntables^Mitzi=0xff0000\r\n231=Turntables^Mitzi=0xff0000\r\n232=Turntables^Mitzi=0xff0000\r\n233=Color^lights^Color^5=0xff0000\r\n234=Color^lights^Color^6=0xff0000\r\n235=Color^lights^Color^7=0xff0000\r\n236=Color^lights^Color^8=0xff0000\r\n237=Color^lights^Color^9=0xff0000\r\n238=Stage^Lights^Note^4=0xff0000\r\n239=Stage^Lights^Note^3=0xff0000\r\n240=Channel^240=0xff0000\r\n241=Channel^241=0xff0000\r\n242=Channel^242=0xff0000\r\n243=Channel^243=0xff0000\r\n244=Channel^244=0xff0000\r\n245=Channel^245=0xff0000\r\n246=Channel^246=0xff0000\r\n247=Channel^247=0xff0000\r\n248=Channel^248=0xff0000\r\n249=Channel^249=0xff0000\r\n250=Channel^250=0xff0000\r\n251=Channel^251=0xff0000\r\n252=Channel^252=0xff0000\r\n253=Channel^253=0xff0000\r\n254=Channel^254=0xff0000\r\n255=Channel^255=0xff0000\r\n256=Channel^256=0xff0000\r\n\r\n";
+
+ public static string CTM_STUDIOC = "\r\n1=CEC^Right^Arm^Out=0xff0000\r\n2=CEC^Right^Arm^Swing=0xff0000\r\n3=CEC^Right^Elbow^Up=0xff0000\r\n4=CEC^Right^Wrist^Turn=0xff0000\r\n5=CEC^Right^Wave=0xff0000\r\n6=CEC^Left^Arm^Out=0xff0000\r\n7=CEC^Left^Arm^Swing=0xff0000\r\n8=CEC^Left^Elbow^Up=0xff0000\r\n9=CEC^Left^Wrist^Turn=0xff0000\r\n10=CEC^Left^Wave=0xff0000\r\n11=CEC^Left^Arm^Forward=0xff0000\r\n12=CEC^Body^Forward=0xff0000\r\n13=CEC^Body^Left^Side^Bend=0xff0000\r\n14=CEC^Body^Right=0xff0000\r\n15=CEC^Torso^Twist^Right=0xff0000\r\n16=CEC^Torso^Twist^Left=0xff0000\r\n17=CEC^Right^Arm^Forward=0xff0000\r\n18=CEC^Head^Turn^Left=0xff0000\r\n19=CEC^Head^Turn^Right=0xff0000\r\n20=CEC^Head^Up=0xff0000\r\n21=CEC^Mouth=0xff0000\r\n22=CEC^Head^Tilt^Right=0xff0000\r\n23=CEC^Head^Tilt^Left=0xff0000\r\n24=CEC^Eye^Blink^Down=0xff0000\r\n25=CEC^Eye^Blink^Up=0xff0000\r\n26=CEC^Nose=0xff0000\r\n27=CEC^Eye^Turn^Left=0xff0000\r\n28=CEC^Eye^Turn^Right=0xff0000\r\n29=CEC^Eyebrows^Up=0xff0000\r\n30=CEC^Eyebrows^Down=0xff0000\r\n31=CEC^Ears=0xff0000\r\n32=CEC^Foot^Tap=0xff0000\r\n33=Bird^Mouth=0xff0000\r\n34=Bird^Bow=0xff0000\r\n35=Bird^Turn=0xff0000\r\n36=Bird^Wings=0xff0000\r\n37=Bird^Spare=0xff0000\r\n38=Bird^Spare^2=0xff0000\r\n39=Bird^Spare^3=0xff0000\r\n40=Phone^Swing=0xff0000\r\n41=Phone^Spare=0xff0000\r\n42=Phone^Spare^2=0xff0000\r\n43=Channel^43=0xff0000\r\n44=Curtain^Open=0xff0000\r\n45=Curtain^Close=0xff0000\r\n46=Channel^46=0xff0000\r\n47=Channel^47=0xff0000\r\n48=Channel^48=0xff0000\r\n49=Phone^Spare^3=0xff0000\r\n50=Channel^50=0xff0000\r\n51=Channel^51=0xff0000\r\n52=Channel^52=0xff0000\r\n53=Channel^53=0xff0000\r\n54=Channel^54=0xff0000\r\n55=Channel^55=0xff0000\r\n56=Channel^56=0xff0000\r\n57=Channel^57=0xff0000\r\n58=Channel^58=0xff0000\r\n59=Channel^59=0xff0000\r\n60=Channel^60=0xff0000\r\n61=Channel^61=0xff0000\r\n62=Channel^62=0xff0000\r\n63=Channel^63=0xff0000\r\n64=Channel^64=0xff0000\r\n65=CEC^Red^Floods=0xff0000\r\n66=CEC^Green^Floods=0xff0000\r\n67=CEC^Blue^Floods=0xff0000\r\n68=CEC^Amber^Floods=0xff0000\r\n69=BS^Red^Floods=0xff0000\r\n70=BS^Green^Floods=0xff0000\r\n71=BS^Amber^Floods=0xff0000\r\n72=Channel^72=0xff0000\r\n73=Clock^Neon=0xff0000\r\n74=Clock^Forward=0xff0000\r\n75=Clock^Reverse=0xff0000\r\n76=Strobe=0xff0000\r\n77=City^Lights=0xff0000\r\n78=Desk^Panel^Inner^Blue=0xff0000\r\n79=Desk^Panel^Mid^Green=0xff0000\r\n80=Desk^Panel^Outer^Red=0xff0000\r\n81=Phone^Handset^LTS=0xff0000\r\n82=Phone^Dial^LTS=0xff0000\r\n83=On^Air^Show=0xff0000\r\n84=Applause^Sign=0xff0000\r\n85=Monitor^Chase^Lights=0xff0000\r\n86=Monitor^Inner^Pink^Neon=0xff0000\r\n87=Monitor^Mid^Blue^Neon=0xff0000\r\n88=Monitor^Outer^Green^Neon=0xff0000\r\n89=Channel^89=0xff0000\r\n90=Gemini^Warp=0xff0000\r\n91=CEC^Spot=0xff0000\r\n92=Bird^Spot=0xff0000\r\n93=Live^Floods=0xff0000\r\n94=Amber^Room^Floods=0xff0000\r\n95=Pink^Room^Floods=0xff0000\r\n96=Blue^Room^Floods=0xff0000\r\n97=House^Lights^Dim=0xff0000\r\n98=Channel^98=0xff0000\r\n99=Channel^99=0xff0000\r\n100=Channel^100=0xff0000\r\n101=Channel^101=0xff0000\r\n102=Channel^102=0xff0000\r\n103=Channel^103=0xff0000\r\n104=Channel^104=0xff0000\r\n105=Channel^105=0xff0000\r\n106=Channel^106=0xff0000\r\n107=Channel^107=0xff0000\r\n108=Channel^108=0xff0000\r\n109=Channel^109=0xff0000\r\n110=Channel^110=0xff0000\r\n111=Channel^111=0xff0000\r\n112=Channel^112=0xff0000\r\n113=Channel^113=0xff0000\r\n114=Channel^114=0xff0000\r\n115=Channel^115=0xff0000\r\n116=Channel^116=0xff0000\r\n117=Channel^117=0xff0000\r\n118=Channel^118=0xff0000\r\n119=Channel^119=0xff0000\r\n120=Channel^120=0xff0000\r\n121=Channel^121=0xff0000\r\n122=Channel^122=0xff0000\r\n123=Channel^123=0xff0000\r\n124=Channel^124=0xff0000\r\n125=Channel^125=0xff0000\r\n126=Channel^126=0xff0000\r\n127=Channel^127=0xff0000\r\n128=Channel^128=0xff0000\r\n129=Channel^129=0xff0000\r\n130=Channel^130=0xff0000\r\n131=Channel^131=0xff0000\r\n132=Channel^132=0xff0000\r\n133=Channel^133=0xff0000\r\n134=Channel^134=0xff0000\r\n135=Channel^135=0xff0000\r\n136=Channel^136=0xff0000\r\n137=Channel^137=0xff0000\r\n138=Channel^138=0xff0000\r\n139=Channel^139=0xff0000\r\n140=Channel^140=0xff0000\r\n141=Channel^141=0xff0000\r\n142=Channel^142=0xff0000\r\n143=Channel^143=0xff0000\r\n144=Channel^144=0xff0000\r\n145=Channel^145=0xff0000\r\n146=Channel^146=0xff0000\r\n147=Channel^147=0xff0000\r\n148=Channel^148=0xff0000\r\n149=Channel^149=0xff0000\r\n150=Channel^150=0xff0000\r\n151=Channel^151=0xff0000\r\n152=Channel^152=0xff0000\r\n153=Channel^153=0xff0000\r\n154=Channel^154=0xff0000\r\n155=Channel^155=0xff0000\r\n156=Channel^156=0xff0000\r\n157=Channel^157=0xff0000\r\n158=Channel^158=0xff0000\r\n159=Channel^159=0xff0000\r\n160=Channel^160=0xff0000\r\n161=Channel^161=0xff0000\r\n162=Channel^162=0xff0000\r\n163=Channel^163=0xff0000\r\n164=Channel^164=0xff0000\r\n165=Channel^165=0xff0000\r\n166=Channel^166=0xff0000\r\n167=Channel^167=0xff0000\r\n168=Channel^168=0xff0000\r\n169=Channel^169=0xff0000\r\n170=Channel^170=0xff0000\r\n171=Channel^171=0xff0000\r\n172=Channel^172=0xff0000\r\n173=Channel^173=0xff0000\r\n174=Channel^174=0xff0000\r\n175=Channel^175=0xff0000\r\n176=Channel^176=0xff0000\r\n177=Channel^177=0xff0000\r\n178=Channel^178=0xff0000\r\n179=Channel^179=0xff0000\r\n180=Channel^180=0xff0000\r\n181=Channel^181=0xff0000\r\n182=Channel^182=0xff0000\r\n183=Channel^183=0xff0000\r\n184=Channel^184=0xff0000\r\n185=Channel^185=0xff0000\r\n186=Channel^186=0xff0000\r\n187=Channel^187=0xff0000\r\n188=Channel^188=0xff0000\r\n189=Channel^189=0xff0000\r\n190=Channel^190=0xff0000\r\n191=Channel^191=0xff0000\r\n192=Channel^192=0xff0000\r\n193=Channel^193=0xff0000\r\n194=Channel^194=0xff0000\r\n195=Channel^195=0xff0000\r\n196=Channel^196=0xff0000\r\n197=Channel^197=0xff0000\r\n198=Channel^198=0xff0000\r\n199=Channel^199=0xff0000\r\n200=Channel^200=0xff0000\r\n201=Channel^201=0xff0000\r\n202=Channel^202=0xff0000\r\n203=Channel^203=0xff0000\r\n204=Channel^204=0xff0000\r\n205=Channel^205=0xff0000\r\n206=Channel^206=0xff0000\r\n207=Channel^207=0xff0000\r\n208=Channel^208=0xff0000\r\n209=Channel^209=0xff0000\r\n210=Channel^210=0xff0000\r\n211=Channel^211=0xff0000\r\n212=Channel^212=0xff0000\r\n213=Channel^213=0xff0000\r\n214=Channel^214=0xff0000\r\n215=Channel^215=0xff0000\r\n216=Channel^216=0xff0000\r\n217=Channel^217=0xff0000\r\n218=Channel^218=0xff0000\r\n219=Channel^219=0xff0000\r\n220=Channel^220=0xff0000\r\n221=Channel^221=0xff0000\r\n222=Channel^222=0xff0000\r\n223=Channel^223=0xff0000\r\n224=Channel^224=0xff0000\r\n225=Channel^225=0xff0000\r\n226=Channel^226=0xff0000\r\n227=Channel^227=0xff0000\r\n228=Channel^228=0xff0000\r\n229=Channel^229=0xff0000\r\n230=Channel^230=0xff0000\r\n231=Channel^231=0xff0000\r\n232=Channel^232=0xff0000\r\n233=Channel^233=0xff0000\r\n234=Channel^234=0xff0000\r\n235=Channel^235=0xff0000\r\n236=Channel^236=0xff0000\r\n237=Channel^237=0xff0000\r\n238=Channel^238=0xff0000\r\n239=Channel^239=0xff0000\r\n240=Channel^240=0xff0000\r\n241=Channel^241=0xff0000\r\n242=Channel^242=0xff0000\r\n243=Channel^243=0xff0000\r\n244=Channel^244=0xff0000\r\n245=Channel^245=0xff0000\r\n246=Channel^246=0xff0000\r\n247=Channel^247=0xff0000\r\n248=Channel^248=0xff0000\r\n249=Channel^249=0xff0000\r\n250=Channel^250=0xff0000\r\n251=Channel^251=0xff0000\r\n252=Channel^252=0xff0000\r\n253=Channel^253=0xff0000\r\n254=Channel^254=0xff0000\r\n255=Channel^255=0xff0000\r\n256=Channel^256=0xff0000\r\n\r\n";
+ }
+}
diff --git a/Program.cs b/Program.cs
new file mode 100644
index 0000000..0336fb7
--- /dev/null
+++ b/Program.cs
@@ -0,0 +1,606 @@
+using System.Collections;
+using System.Diagnostics;
+using System.Text;
+
+namespace Transmutate
+{
+ public class Program
+ {
+ public static int succeededFiles = 0;
+ public static int failedFiles = 0;
+
+ static byte[] BlankArea =
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF
+ };
+
+ static byte[] ProgramBlueKey =
+ {
+ 0x85, 0x7D, 0x67, 0x9B, 0x6E, 0x96, 0x73, 0xA1, 0xD3, 0xCD, 0xBA, 0x75, 0x98, 0x9C, 0x83, 0x70, 0xA0, 0x9C, 0x5D, 0x9E, 0x91, 0x68, 0x9E, 0x91, 0x88, 0x8D, 0x8A, 0xA9, 0x90, 0x64, 0x6A, 0xA8, 0x9B
+ };
+
+ public static bool FFMpegCheck()
+ {
+ Process checkProcess = new Process();
+ checkProcess.StartInfo.FileName = "ffmpeg";
+ checkProcess.StartInfo.Arguments = "-loglevel quiet";
+ try { checkProcess.Start(); }
+ catch { return false; }
+ return true;
+ }
+
+ public static void Main(string[] args)
+ {
+ Console.WriteLine("Transmutate Show Converter v1.2");
+ if (!FFMpegCheck())
+ {
+ Console.WriteLine("FFMpeg was not found. Please check README.txt. Press any key to close.");
+ Console.ReadKey();
+ return;
+ }
+ if (args.Length == 0)
+ {
+ Console.WriteLine("No files specified. Press any key to close.");
+ Console.ReadKey();
+ return;
+ }
+ if (args[0] == "special")
+ {
+ Console.WriteLine("Performing special function " + args[1]);
+ SpecialFunction(args[1], args[2], args.Length == 4 ? args[3] : "");
+ Console.WriteLine("Complete.");
+ return;
+ }
+ foreach (string enumFile in args)
+ {
+ if (!File.Exists(enumFile))
+ {
+ Console.WriteLine($"Specified file {enumFile} does not exist. Press any key to continue.");
+ Console.ReadKey();
+ failedFiles++;
+ continue;
+ }
+ switch (enumFile.Split(".").Last())
+ {
+ case "shw":
+ Console.WriteLine($"Converting {Path.GetFileNameWithoutExtension(enumFile)} from ProgramBlue to RR-Engine.");
+ ProgramBlueToRR(enumFile);
+ break;
+ case "rshw":
+ case "cshw":
+ case "sshw":
+ case "nshw":
+ Console.WriteLine($"Converting {Path.GetFileNameWithoutExtension(enumFile)} from RR-Engine to ProgramBlue.");
+ RRToProgramBlue(enumFile);
+ break;
+ default:
+ Console.WriteLine("Unsupported format. Press any key to continue.");
+ Console.ReadKey();
+ failedFiles++;
+ continue;
+ }
+ }
+ Console.WriteLine($"Complete. {succeededFiles} Converted, {failedFiles} Failed.");
+ }
+
+ public static void SpecialFunction(string function, string argument, string filePath)
+ {
+ if (function == "decode")
+ {
+ List outData = new List();
+ byte[] fullFile = File.ReadAllBytes(filePath);
+ switch (argument)
+ {
+ case "old":
+ foreach (byte b in fullFile) outData.Add((byte)(b - 0x36));
+ break;
+ case "new":
+ long keyIndex = 0;
+ foreach (byte b in fullFile)
+ {
+ outData.Add((byte)(b - (ProgramBlueKey[keyIndex % 33])));
+ keyIndex++;
+ }
+ break;
+ }
+ File.WriteAllBytes("pb_decoded.dat", outData.ToArray());
+ }
+ else if (function == "reconstruct")
+ {
+ List outData = new List();
+ UTF8Encoding utf8 = new UTF8Encoding();
+ List audioData = new List(File.ReadAllBytes("pboutaudio.tmp"));
+ while (audioData.Last() == 0)
+ {
+ audioData.RemoveAt(audioData.Count - 1);
+ }
+ string versionFooter = "";
+ int dataIndex = audioData.Count + 0x7D;
+ string veryTopHeader = dataIndex.ToString() + "";
+ outData.AddRange(utf8.GetBytes(veryTopHeader));
+ outData.AddRange(audioData);
+ outData.AddRange(BlankArea);
+ outData.AddRange(ProgramBlue501Obfuscate(File.ReadAllBytes("pboutdata.xml")));
+ outData.AddRange(utf8.GetBytes(versionFooter));
+ File.WriteAllBytes("reconstructed", outData.ToArray());
+ }
+
+ }
+
+ public static void ProgramBlueToRR(string filePath)
+ {
+ string fileCheckAgainst = File.ReadAllText(filePath);
+ string verString = fileCheckAgainst.Split("<").Last().Split(">")[0];
+ bool mp4Present = fileCheckAgainst.Split(">").Last().Contains("mp4");
+ switch (verString)
+ {
+ case "v2.20":
+ ProgramBlue220Decode(filePath);
+ break;
+
+ /*case "v4.71":
+ ProgramBlue471Decode(filePath);
+ break;
+
+ case "v5.00":*/
+ case "v5.01":
+ ProgramBlue501Decode(filePath, mp4Present);
+ break;
+
+ default:
+ Console.WriteLine($"Unsupported ProgramBlue Version \"{verString}\".\nPlease open and re-save this showtape in ProgramBlue v5.41.\nPress any key to continue.");
+ Console.ReadKey();
+ failedFiles++;
+ return;
+ }
+
+ if (File.Exists("rshwin.wav")) File.Delete("rshwin.wav");
+ Process ffmpegProcess = new Process();
+ ffmpegProcess.StartInfo.FileName = "ffmpeg";
+ ffmpegProcess.StartInfo.Arguments = "-loglevel quiet -i pboutaudio.tmp rshwin.wav";
+ ffmpegProcess.Start();
+ ffmpegProcess.WaitForExit();
+
+ string[] pbXmlData = File.ReadAllLines("pboutdata.xml");
+ string channelLine = "";
+ bool readingDataFlag = false;
+ bool readingCHMLine = false;
+ List debitted = new List();
+ int frame = 0;
+ foreach (string line in pbXmlData)
+ {
+ //Console.WriteLine(line);
+ if (line.Trim() == "")
+ {
+ readingDataFlag = true;
+ continue;
+ }
+ if (line.Trim() == "")
+ {
+ readingDataFlag = false;
+ continue;
+ }
+ if (line.Trim() == "")
+ {
+ readingCHMLine = true;
+ continue;
+ }
+ if (readingDataFlag)
+ {
+ if (line.Trim() == "") continue;
+ debitted.Add(new BitArray(256));
+ int bitIndex = 0;
+ foreach (char bit in line.ToCharArray())
+ {
+ debitted[frame].Set(bitIndex, bit == '1');
+ bitIndex++;
+ }
+ frame++;
+ }
+ if (readingCHMLine)
+ {
+ channelLine = line;
+ readingCHMLine = false;
+ }
+ }
+
+ string fileExtension = ".rshw";
+ int[] bitMapping = {};
+ switch (channelLine)
+ {
+ case "1=Mitzi^Spotlight=0xff0000":
+ bitMapping = BitMappings.ProgramBlueToRRBitMapping_RAE;
+ fileExtension = ".rshw";
+ break;
+ case "1=Chuck^Mouth=0xff0000":
+ bitMapping = BitMappings.ProgramBlueToRRBitMapping_CYBERS;
+ fileExtension = ".cshw";
+ break;
+ case "1=Wink^Spotlight=0xff0000":
+ bitMapping = BitMappings.ProgramBlueToRRBitMapping_3ST;
+ fileExtension = ".rshw";
+ break;
+ case "1=CEC^Right^Arm^Out=0xff0000":
+ bitMapping = BitMappings.ProgramBlueToRRBitMapping_STUDIOC;
+ fileExtension = ".sshw";
+ break;
+ case "1=Mitzi^Lids^Open=0xff0000":
+ bitMapping = BitMappings.ProgramBlueToRRBitMapping_NRAE;
+ fileExtension = ".nshw";
+ break;
+ default:
+ Console.WriteLine("Could not automatically determine bit mapping.");
+ bool pickedBitMapping = false;
+ while (!pickedBitMapping)
+ {
+ Console.WriteLine("Please specify a channel mapping:\nrae\nptt\nr12\nstudioc\n3st\nnrae\n");
+ Console.Write("> ");
+ string pick = Console.ReadLine();
+ switch (pick)
+ {
+ case "rae":
+ bitMapping = BitMappings.ProgramBlueToRRBitMapping_RAE;
+ fileExtension = ".rshw";
+ pickedBitMapping = true;
+ break;
+ case "r12":
+ case "ptt":
+ bitMapping = BitMappings.ProgramBlueToRRBitMapping_CYBERS;
+ fileExtension = ".cshw";
+ pickedBitMapping = true;
+ break;
+ case "3st":
+ bitMapping = BitMappings.ProgramBlueToRRBitMapping_3ST;
+ fileExtension = ".rshw";
+ pickedBitMapping = true;
+ break;
+ case "nrae":
+ bitMapping = BitMappings.ProgramBlueToRRBitMapping_NRAE;
+ fileExtension = ".nshw";
+ pickedBitMapping = true;
+ break;
+ case "studioc":
+ bitMapping = BitMappings.ProgramBlueToRRBitMapping_STUDIOC;
+ fileExtension = ".sshw";
+ pickedBitMapping = true;
+ break;
+ default:
+ Console.WriteLine("Invalid selection, please try again.");
+ break;
+ }
+ }
+ break;
+ }
+
+ List signalData = new List();
+ int oddcheck = 0;
+ foreach (BitArray ba in debitted)
+ {
+ signalData.Add(0);
+ for (int i = 0; i < 256; i++) if (ba.Get(i)) if (bitMapping[i] != 0) signalData.Add(bitMapping[i]);
+ // 40 to 60 fps "interpolation"
+ if (oddcheck % 2 == 1)
+ {
+ signalData.Add(0);
+ for (int i = 0; i < 256; i++) if (ba.Get(i)) if (bitMapping[i] != 0) signalData.Add(bitMapping[i]);
+ }
+ oddcheck++;
+ }
+
+ rshwFormat rSHWOut = new rshwFormat();
+ rSHWOut.signalData = signalData.ToArray();
+ rSHWOut.audioData = File.ReadAllBytes("rshwin.wav");
+ rshwFormat.Save(filePath.Replace(".shw", fileExtension), rSHWOut);
+ CleanUpTempFiles();
+ succeededFiles++;
+ }
+
+ public static void ProgramBlue220Decode(string filePath)
+ {
+ byte[] fullFile = File.ReadAllBytes(filePath);
+ List outData = new List();
+ foreach (byte b in fullFile) outData.Add((byte)(b - 0x36));
+ File.WriteAllBytes("pbdecoded.tmp", outData.ToArray());
+ ProgramBlueGenericDecode();
+ }
+
+ public static void ProgramBlue471Decode(string filePath)
+ {
+ byte[] fullFile = File.ReadAllBytes(filePath);
+ List outData = new List();
+ long keyIndex = 0;
+ foreach (byte b in fullFile)
+ {
+ outData.Add((byte)(b - (ProgramBlueKey[keyIndex % 33])));
+ keyIndex++;
+ }
+ File.WriteAllBytes("pbdecoded.tmp", outData.ToArray());
+ ProgramBlueGenericDecode();
+ }
+
+ public static void ProgramBlue501Decode(string filePath, bool videoPresent)
+ {
+ string deviddedpath = filePath;
+
+ if (videoPresent)
+ {
+ byte[] vidding = File.ReadAllBytes(filePath);
+ int mp4PosMarker = vidding.Length - 1;
+ while(vidding[mp4PosMarker] != (byte)'#')
+ {
+ mp4PosMarker--;
+ }
+ mp4PosMarker++;
+
+ List mp4IndexString = new List();
+ for (int i = mp4PosMarker; i < vidding.Length; i++)
+ {
+ if (vidding[i] > 47 && vidding[i] < 58) mp4IndexString.Add((char)vidding[i]);
+ else break;
+ }
+ int mp4Index = int.Parse(new string(mp4IndexString.ToArray()));
+
+ List outVideoData = new List();
+ for (long l = 0; l < mp4Index; l++)
+ {
+ outVideoData.Add(vidding[l]);
+ }
+ File.WriteAllBytes(filePath.Replace(".shw", ".mp4"), outVideoData.ToArray());
+
+ List outDeViddedData = new List();
+ for (long l = mp4Index; l < vidding.Length; l++)
+ {
+ outDeViddedData.Add(vidding[l]);
+ }
+ File.WriteAllBytes("pbdecoded.tmp", outDeViddedData.ToArray());
+ deviddedpath = "pbdecoded.tmp";
+ }
+
+ string fileCheckAgainst = File.ReadAllText(deviddedpath);
+ long audioIndex = fileCheckAgainst.Split("<")[0].Length + 6;
+ long dataIndex = long.Parse(fileCheckAgainst.Split("<")[0]);
+ byte[] fullFile = File.ReadAllBytes(deviddedpath);
+
+ long dataEnd = fullFile.Length - 8;
+
+ List outAudioData = new List();
+ for (long l = audioIndex; l < dataIndex; l++)
+ {
+ outAudioData.Add(fullFile[l]);
+ }
+ while (outAudioData.Last() == 0)
+ {
+ outAudioData.RemoveAt(outAudioData.Count - 1);
+ }
+ File.WriteAllBytes("pboutaudio.tmp", outAudioData.ToArray());
+
+ while(fullFile[dataIndex] != 0x92)
+ {
+ dataIndex++;
+ }
+
+ List outData = new List();
+ long keyIndex = 0;
+ for (long l = dataIndex; l <= dataEnd; l++)
+ {
+ outData.Add((byte)(fullFile[l] - (ProgramBlueKey[keyIndex % 33])));
+ keyIndex++;
+ }
+
+ File.WriteAllBytes("pboutdata.xml", outData.ToArray());
+ }
+
+ public static void ProgramBlueGenericDecode()
+ {
+ byte[] fullFile = File.ReadAllBytes("pbdecoded.tmp");
+
+ int dataPosMarker = fullFile.Length - 1;
+ while(fullFile[dataPosMarker] != (byte)'#')
+ {
+ dataPosMarker--;
+ }
+ dataPosMarker++;
+
+ List dataIndexString = new List();
+ for (int i = dataPosMarker; i < fullFile.Length; i++)
+ {
+ if (fullFile[i] > 47 && fullFile[i] < 58) dataIndexString.Add((char)fullFile[i]);
+ else break;
+ }
+ int dataIndex = int.Parse(new string(dataIndexString.ToArray()));
+
+ List outAudioData = new List();
+ for (long l = 0; l < dataIndex; l++)
+ {
+ outAudioData.Add(fullFile[l]);
+ }
+ File.WriteAllBytes("pboutaudio.tmp", outAudioData.ToArray());
+
+ List outData = new List();
+ for (long l = dataIndex; l <= fullFile.Length - 1; l++) outData.Add(fullFile[l]);
+
+ File.WriteAllBytes("pboutdata.xml", outData.ToArray());
+ }
+
+ public static void RRToProgramBlue(string filePath)
+ {
+ string fileExtension = ".rshw";
+ int[] bitMapping = {};
+ string ctm = "";
+ bool pickedBitMapping = false;
+ while (!pickedBitMapping)
+ {
+ Console.WriteLine("Please specify a channel mapping:\nrae\nptt\nr12\nstudioc\n3st\nnrae\n");
+ Console.Write("> ");
+ string pick = Console.ReadLine();
+ switch (pick)
+ {
+ case "rae":
+ bitMapping = BitMappings.RRToProgramBlueBitMapping_RAE;
+ ctm = ChannelMappings.CTM_RAE;
+ fileExtension = ".rshw";
+ pickedBitMapping = true;
+ break;
+ case "ptt":
+ bitMapping = BitMappings.RRToProgramBlueBitMapping_CYBERS;
+ ctm = ChannelMappings.CTM_PTT;
+ fileExtension = ".cshw";
+ pickedBitMapping = true;
+ break;
+ case "3st":
+ bitMapping = BitMappings.RRToProgramBlueBitMapping_3ST;
+ ctm = ChannelMappings.CTM_3ST;
+ fileExtension = ".rshw";
+ pickedBitMapping = true;
+ break;
+ case "r12":
+ bitMapping = BitMappings.RRToProgramBlueBitMapping_CYBERS;
+ ctm = ChannelMappings.CTM_R12;
+ fileExtension = ".cshw";
+ pickedBitMapping = true;
+ break;
+ case "nrae":
+ bitMapping = BitMappings.RRToProgramBlueBitMapping_NRAE;
+ ctm = ChannelMappings.CTM_NRAE;
+ fileExtension = ".nshw";
+ pickedBitMapping = true;
+ break;
+ case "studioc":
+ bitMapping = BitMappings.RRToProgramBlueBitMapping_STUDIOC;
+ ctm = ChannelMappings.CTM_STUDIOC;
+ fileExtension = ".sshw";
+ pickedBitMapping = true;
+ break;
+ default:
+ Console.WriteLine("Invalid selection, please try again.");
+ break;
+ }
+ }
+
+ rshwFormat file = rshwFormat.Load(filePath);
+ if (file.signalData == null)
+ {
+ Console.WriteLine("File contains no signal data. Press any key to continue.");
+ Console.ReadKey();
+ failedFiles++;
+ return;
+ }
+ if (file.audioData == null)
+ {
+ Console.WriteLine("File contains no audio data. Press any key to continue.");
+ Console.ReadKey();
+ failedFiles++;
+ return;
+ }
+
+ List rshwBits = new List();
+ int countlength = 0;
+ if (file.signalData[0] != 0)
+ {
+ countlength = 1;
+ BitArray bit = new BitArray(300);
+ rshwBits.Add(bit);
+ }
+ for (int i = 0; i < file.signalData.Length; i++)
+ {
+ if (file.signalData[i] == 0)
+ {
+ countlength += 1;
+ BitArray bit = new BitArray(300);
+ rshwBits.Add(bit);
+ }
+ else
+ {
+ rshwBits[countlength - 1].Set(file.signalData[i], true);
+ }
+ }
+
+ List writeOut = new List();
+ int fIndex = 0;
+ foreach (BitArray bits in rshwBits)
+ {
+ fIndex++;
+ if (fIndex % 3 == 0) continue;
+ char[] frame = new char[256];
+ Array.Fill(frame, '0');
+ for (int i = 0; i < 300; i++) if (bitMapping[i] != 0) frame[bitMapping[i]-1] = bits.Get(i+1) ? '1' : '0';
+ writeOut.Add(new string(frame));
+ }
+
+ string xmlHeader = "\r\n\r\n";
+ string versionFooter = "";
+ int dataIndex = file.audioData.Length + 0x7D;
+ string veryTopHeader = dataIndex.ToString() + "";
+
+ string xmlData = xmlHeader + String.Join("\r\n", writeOut.ToArray())+"\r\n\r\n"+ctm+MakeFooter(Path.GetFileNameWithoutExtension(filePath), dataIndex);
+
+ UTF8Encoding utf8 = new UTF8Encoding();
+
+ byte[] writeOutFullData = utf8.GetBytes(veryTopHeader)
+ .Concat(file.audioData).ToArray()
+ .Concat(BlankArea).ToArray()
+ .Concat(ProgramBlue501Obfuscate(utf8.GetBytes(xmlData))).ToArray()
+ .Concat(utf8.GetBytes(versionFooter)).ToArray();
+
+ if (File.Exists(filePath.Replace(fileExtension, ".mp4")))
+ {
+ byte[] mp4File = File.ReadAllBytes(filePath.Replace(fileExtension, ".mp4"));
+ string mp4Footer = "mp4#"+mp4File.Length.ToString();
+ writeOutFullData = mp4File
+ .Concat(writeOutFullData).ToArray()
+ .Concat(utf8.GetBytes(mp4Footer)).ToArray();
+ }
+
+ File.WriteAllBytes(filePath.Replace(fileExtension, ".shw"),
+ writeOutFullData
+ );
+ succeededFiles++;
+ }
+
+ public static string MakeFooter(string name, int dataIndex)
+ {
+ return $"\r\n" +
+ $"ProjectName={name.Replace(" ", "^")}\r\n" +
+ "FPS=40\r\n" +
+ "AudioExtension=wav\r\n" +
+ "AuthorName=Transmutate\r\n" +
+ "Revision=1\r\n" +
+ "Registration=\r\n" +
+ "Bouncer=\r\n" +
+ "ProgramTime=0\r\n" +
+ "Audiopeak=\r\n" +
+ "Audiochan=0\r\n" +
+ $"Created={DateTime.Now.ToString("MM/dd/yyyy^HH:mm:ss")}\r\n" +
+ "VideoOffset=0\r\n" +
+ "\r\n" +
+ $"#{dataIndex.ToString()}";
+ }
+
+ public static byte[] ProgramBlue501Obfuscate(byte[] inData)
+ {
+ List outData = new List();
+ long keyIndex = 0;
+ foreach (byte b in inData)
+ {
+ outData.Add((byte)(b + (ProgramBlueKey[keyIndex % 33])));
+ keyIndex++;
+ }
+ return outData.ToArray();
+ }
+
+ public static void CleanUpTempFiles()
+ {
+ if (File.Exists("pboutaudio.tmp")) File.Delete("pboutaudio.tmp");
+ if (File.Exists("pboutdata.xml")) File.Delete("pboutdata.xml");
+ if (File.Exists("rshwin.wav")) File.Delete("rshwin.wav");
+ if (File.Exists("pbdecoded.tmp")) File.Delete("pbdecoded.tmp");
+ }
+ }
+}
diff --git a/RSHWFile.cs b/RSHWFile.cs
new file mode 100644
index 0000000..f851299
--- /dev/null
+++ b/RSHWFile.cs
@@ -0,0 +1,74 @@
+using System.Reflection;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Runtime.Serialization;
+
+sealed class LoadingBinder : System.Runtime.Serialization.SerializationBinder
+{
+ public override Type BindToType(string assemblyName, string typeName)
+ {
+ return Type.GetType(String.Format("rshwFormat, " + Assembly.GetExecutingAssembly().FullName));
+ }
+}
+
+
+public class SavingBinder : SerializationBinder
+{
+ public override Type BindToType(string assemblyName, string typeName)
+ {
+ if (assemblyName.Equals("Transmutate"))
+ return Type.GetType(typeName);
+ else
+ return defaultBinder.BindToType(assemblyName, typeName);
+ }
+
+ public override void BindToName(Type serializedType, out string assemblyName, out string typeName)
+ {
+ // specify a neutral code for the assembly name to be recognized by the BindToType method.
+ assemblyName = "Assembly-CSharp";
+ typeName = serializedType.FullName;
+ }
+
+ private static SerializationBinder defaultBinder = new BinaryFormatter().Binder;
+
+ private static object locker = new object();
+ private static SavingBinder _default = null;
+
+ public static SavingBinder Default
+ {
+ get
+ {
+ lock (locker)
+ {
+ if (_default == null)
+ _default = new SavingBinder();
+ }
+ return _default;
+ }
+ }
+}
+
+[System.Serializable]
+public class rshwFormat
+{
+ public byte[]? audioData { get; set; }
+ public int[]? signalData { get; set; }
+ public byte[]? videoData { get; set; }
+
+ public static rshwFormat Load(string path)
+ {
+ BinaryFormatter formatter = new BinaryFormatter();
+ formatter.Binder = new LoadingBinder();
+ FileStream stream = File.OpenRead(path);
+ return (rshwFormat)formatter.Deserialize(stream);
+ }
+
+ public static void Save(string path, rshwFormat file)
+ {
+ BinaryFormatter formatter = new BinaryFormatter();
+ formatter.Binder = new SavingBinder();
+ FileStream stream = File.Open(path, FileMode.Create);
+ formatter.Serialize(stream, file);
+ stream.Close();
+ }
+}
+
diff --git a/Transmutate.csproj b/Transmutate.csproj
new file mode 100644
index 0000000..84a8b72
--- /dev/null
+++ b/Transmutate.csproj
@@ -0,0 +1,11 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+ true
+
+
+