diff --git a/.gitignore b/.gitignore
index a320c3c..9f5642d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@
*/obj/
*/*/*/bin/
*/*/*/obj/
+*.tmp
diff --git a/Arduino Firmware/Firmware-32Valve-Mega/Firmware-32Valve-Mega.ino b/Arduino Firmware/Firmware-32Valve-Mega/Firmware-32Valve-Mega.ino
index 401c848..684d842 100644
--- a/Arduino Firmware/Firmware-32Valve-Mega/Firmware-32Valve-Mega.ino
+++ b/Arduino Firmware/Firmware-32Valve-Mega/Firmware-32Valve-Mega.ino
@@ -13,7 +13,6 @@ void setup()
{
for (int i = 22; i <= 53; i++) pinMode(i, OUTPUT);
Serial.begin(9600);
- Serial.write("PC2,32,Universal,END");
}
void loop()
@@ -22,12 +21,21 @@ void loop()
{
byte1 = Serial.read();
byte2 = Serial.read();
- byte3 = Serial.read();
- byte4 = Serial.read();
- byte5 = Serial.read();
- byte6 = Serial.read();
- byte7 = Serial.read();
- byte8 = Serial.read();
+
+
+ if ((byte1 & 32) && (byte2 & 32))
+ {
+ if (byte1 & 1) Serial.write("PC3,32\n");
+ }
+ else
+ {
+ byte3 = Serial.read();
+ byte4 = Serial.read();
+ byte5 = Serial.read();
+ byte6 = Serial.read();
+ byte7 = Serial.read();
+ byte8 = Serial.read();
+ }
if ((byte1 & 64) && (byte2 & 64) && (byte3 & 64) && (byte4 & 64) && (byte5 & 64) && (byte6 & 64) && (byte7 & 64) && (byte8 & 64))
{
diff --git a/Arduino Firmware/Firmware-8Valve/Firmware-8Valve.ino b/Arduino Firmware/Firmware-8Valve/Firmware-8Valve.ino
index 9c4fd69..6054452 100644
--- a/Arduino Firmware/Firmware-8Valve/Firmware-8Valve.ino
+++ b/Arduino Firmware/Firmware-8Valve/Firmware-8Valve.ino
@@ -14,7 +14,6 @@ void setup()
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
Serial.begin(9600);
- Serial.write("PC2,8,Universal,END");
}
void loop()
@@ -24,6 +23,11 @@ void loop()
byte1 = Serial.read();
byte2 = Serial.read();
+ if ((byte1 & 32) && (byte2 & 32))
+ {
+ if (byte1 & 1) Serial.write("PC3,8\n");
+ }
+
if ((byte1 & 64) && (byte2 & 64))
{
if (byte1 & 1) digitalWrite(2, 1);
diff --git a/Arduino Firmware/Servo/Firmware-Servo-ChuckEHelenGuestStar/Firmware-Servo-ChuckEHelenGuestStar.ino b/Arduino Firmware/Servo/Firmware-Servo-ChuckEHelenGuestStar/Firmware-Servo-ChuckEHelenGuestStar.ino
index 17c095e..9b60dda 100644
--- a/Arduino Firmware/Servo/Firmware-Servo-ChuckEHelenGuestStar/Firmware-Servo-ChuckEHelenGuestStar.ino
+++ b/Arduino Firmware/Servo/Firmware-Servo-ChuckEHelenGuestStar/Firmware-Servo-ChuckEHelenGuestStar.ino
@@ -20,7 +20,6 @@ void setup()
servoChannel[5].attach(7);
for (int i = 0; i < 8; i++) servoChannel[mapping[i]].write(offDegrees[i]);
Serial.begin(9600);
- Serial.write("PC2,8,Chuck E./Helen/Guest Star,END");
}
void loop()
@@ -30,6 +29,11 @@ void loop()
byte1 = Serial.read();
byte2 = Serial.read();
+ if ((byte1 & 32) && (byte2 & 32))
+ {
+ if (byte1 & 1) Serial.write("PC3,8\n");
+ }
+
if ((byte1 & 64) && (byte2 & 64))
{
if (byte1 & 1) servoChannel[mapping[0]].write(onDegrees[0]);
diff --git a/Arduino Firmware/Servo/Firmware-Servo-HelenMitzi/Firmware-Servo-HelenMitzi.ino b/Arduino Firmware/Servo/Firmware-Servo-HelenMitzi/Firmware-Servo-HelenMitzi.ino
index e17e30c..1311e8d 100644
--- a/Arduino Firmware/Servo/Firmware-Servo-HelenMitzi/Firmware-Servo-HelenMitzi.ino
+++ b/Arduino Firmware/Servo/Firmware-Servo-HelenMitzi/Firmware-Servo-HelenMitzi.ino
@@ -29,7 +29,6 @@ void setup()
servoChannel[8].attach(10);
for (int i = 0; i < 19; i++) servoChannel[mapping[i]].write(offDegrees[i]);
Serial.begin(9600);
- Serial.write("PC2,32,Mitzi/Helen,END");
}
void loop() {
@@ -37,12 +36,21 @@ void loop() {
{
byte1 = Serial.read();
byte2 = Serial.read();
- byte3 = Serial.read();
- byte4 = Serial.read();
- byte5 = Serial.read();
- byte6 = Serial.read();
- byte7 = Serial.read();
- byte8 = Serial.read();
+
+ if ((byte1 & 32) && (byte2 & 32))
+ {
+ if (byte1 & 1) Serial.write("PC3,8\n");
+ }
+
+ else
+ {
+ byte3 = Serial.read();
+ byte4 = Serial.read();
+ byte5 = Serial.read();
+ byte6 = Serial.read();
+ byte7 = Serial.read();
+ byte8 = Serial.read();
+ }
if ((byte1 & 64) && (byte2 & 64) && (byte3 & 64) && (byte4 & 64) && (byte5 & 64))
{
diff --git a/Bit Mappings.md b/Bit Mappings.md
index 8f8d6d8..d1a1a4a 100644
--- a/Bit Mappings.md
+++ b/Bit Mappings.md
@@ -1,4 +1,4 @@
-# PINKCONNECTION2 Bit Mappings
+# UST Bit Mappings
This information was sourced from Cheese-E-Pedia, the Showbiz Pizza Cyberstar Install Manual, and the Chuck E. Cheese 2-Stage Install Manual.
@@ -6,7 +6,7 @@ This information was sourced from Cheese-E-Pedia, the Showbiz Pizza Cyberstar In
### Rolfe Dewolfe & Earl Schmerle/Chuck E. Cheese
-| Movement Name | UST Single Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
+| Movement Name | UST Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
| --------------- | ------------------------ | ------------------ | ------------- | ----------- | ------------ | ------------ |
| Mouth | 1 | 1 | 1 | 1-1 | TB1 1-2 H1 | No |
| Left Ear | 2 | 2 | 9 | 1-9 | | |
@@ -17,7 +17,7 @@ This information was sourced from Cheese-E-Pedia, the Showbiz Pizza Cyberstar In
| Eyes Right | 7 | 7 | 5 | 1-5 | TB1 9-10 H1 | No |
| Head Left | 8 | 8 | 6 | 1-6 | TB1 3-4 H1 | No |
| Head Right | 9 | 9 | 7 | 1-7 | TB1 5-6 H1 | No |
-| Head Up | 10 | 10 | 8 | 1-8 | TB1 7-8 H1 | Yes |
+| Head Up | 10 | 10 | 8 | 1-8 | TB1 7-8 H1 | No |
| Left Arm Up | 11 | 11 | 11 | 1-11 | | |
| Left Arm Twist | 12 | 12 | 12 | 1-12 | | |
| Left Elbow | 13 | 13 | 13 | 1-13 | | |
@@ -35,7 +35,7 @@ Earl's movements were removed during Concept Unification.
### Mitzi Mozzarella/Helen Henny
-| Movement Name | UST Single Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
+| Movement Name | UST Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
| --------------- | ------------------------ | ------------------ | ------------- | ----------- | ------------ | ------------ |
| Mouth | 1 | 23 | 185 | 2-35 | TB1 1-2 H5 | No |
| Left Ear | 2 | 24 | 176 | 2-26 | | |
@@ -46,7 +46,7 @@ Earl's movements were removed during Concept Unification.
| Eyes Right | 7 | 29 | 184 | 2-34 | TB1 9-10 H5 | No |
| Head Left | 8 | 30 | 178 | 2-28 | TB1 3-4 H5 | No |
| Head Right | 9 | 31 | 179 | 2-29 | TB1 5-6 H5 | No |
-| Head Up | 10 | 32 | 180 | 2-30 | TB1 7-8 H5 | Yes |
+| Head Up | 10 | 32 | 180 | 2-30 | TB1 7-8 H5 | No |
| Left Arm Up | 11 | 33 | 173 | 2-23 | | |
| Left Arm Twist | 12 | 34 | 175 | 2-25 | | |
| Left Elbow | 13 | 35 | 174 | 2-24 | | |
@@ -61,7 +61,7 @@ No movements were removed during Concept Unification.
### Fatz Geronimo/Mr. Munch
-| Movement Name | UST Single Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
+| Movement Name | UST Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
| --------------- | ------------------------ | ------------------ | ------------- | ----------- | ------------ | ------------ |
| Mouth | 1 | 42 | 45 | 1-45 | TB1 1-2 H4 | No |
| Left Eyelid | 2 | 43 | 41 | 1-41 | TB1 11-12 H4 | Yes |
@@ -84,7 +84,7 @@ No movements were removed during Concept Unification.
### Beach Bear/Jasper T. Jowls
-| Movement Name | UST Single Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
+| Movement Name | UST Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
| --------------- | ------------------------ | ------------------ | ------------- | ----------- | ------------------------- | ------------ |
| Mouth | 1 | 58 | 166 | 2-16 | TB1 1-2 H2 | No |
| Left Eyelid | 2 | 59 | 151 | 2-1 | TB1 11-12 H2 | Yes |
@@ -92,7 +92,7 @@ No movements were removed during Concept Unification.
| Eyes Cross | 4 | 61 | 153 | 2-3 | | |
| Head Left | 5 | 62 | 156 | 2-6 | TB1 3-4 H2 & TB1 15-16 H2 | No |
| Head Right | 6 | 63 | 157 | 2-7 | TB1 5-6 H2 & TB1 9-10 H2 | No |
-| Head Up | 7 | 64 | 158 | 2-8 | TB1 7-8 H2 | Yes |
+| Head Up | 7 | 64 | 158 | 2-8 | TB1 7-8 H2 | No |
| Right Arm Raise | 8 | 65 | 161 | 2-11 | | |
| Right Arm Twist | 9 | 66 | 162 | 2-12 | | |
| Right Elbow | 10 | 67 | 163 | 2-13 | TB1 13-14 H2 | No |
@@ -107,7 +107,7 @@ No movements were removed during Concept Unification.
### Dook Larue/Pasqually
-| Movement Name | UST Single Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
+| Movement Name | UST Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
| --------------- | ------------------------ | ------------------ | ------------- | ----------- | ------------ | ------------ |
| Mouth | 1 | 74 | 30 | 1-30 | TB1 1-2 H3 | No |
| Left Ear | 2 | 75 | 23 | 1-23 | | |
@@ -131,7 +131,7 @@ Ear movements and Kick Drum were removed during Concept Unification.
### Billy Bob
-| Movement Name | UST Single Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit |
+| Movement Name | UST Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit |
| --------------- | ------------------------ | ------------------ | ------------- | ----------- |
| Mouth | 1 | 91 | 196 | 2-46 |
| Left Eyelid | 2 | 92 | 197 | 2-47 |
@@ -158,7 +158,7 @@ Entire bot was removed during Concept Unification.
### Looney Bird/Pizzacam
-| Movement Name | UST Single Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit |
+| Movement Name | UST Character Bit | UST Full Stage Bit | RR Engine Bit | Greybox Bit |
| --------------- | ------------------------ | ------------------ | ------------- | ----------- |
| Mouth | 1 | 111 | 167 | 2-17 |
| Left Eyelid | 2 | 112 | 191 | 2-41 |
@@ -170,11 +170,114 @@ Entire bot was removed during Concept Unification.
Hand movement was removed during Concept Unification.
-## R12 (Road/1-Stage/2-Stage)
+### Props
+
+| Name | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
+| ------------------- | ------------------ | ------------- | ----------- | ---------- | ------------ |
+| Sun/Building Raise | 118 | 39 | 1-39 | | |
+| Sun/Building Mouth | 119 | 38 | 1-38 | | |
+| Moon Raise | 120 | 47 | 1-47 | | |
+| Moon Mouth | 121 | 46 | 1-46 | | |
+| Antioch/Wink | 122 | 49 | 1-49 | TB2 3-4 H1 | No |
+| Choo-Choo/Munch Jr. | 123 | 50 | 1-50 | | |
+
+### Spots
+
+| Name | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
+| --------------------------------- | ------------------ | ------------- | ----------- | ------------ | ------------ |
+| Rolfe/Chuck E. Spot | 124 | 88 | 1-88 | TB1 15-16 H7 | No |
+| Dook/Helen Spot | 125 | 86 | 1-86 | TB1 11-12 H7 | No |
+| Fatz/Munch Spot | 126 | 85 | 1-85 | TB2 9-10 H7 | No |
+| Beach Bear/Jasper Spot | 127 | 82 | 1-82 | TB2 5-6 H7 | No |
+| Beach Bear/Jasper Guitar Spot | 128 | 242 | 2-96 | | |
+| Billy Bob/Pasqually Spot | 129 | 84 | 1-84 | TB1 7-8 H7 | No |
+| Looney Bird/Pizzacam Spot | 130 | 83 | 1-83 | | |
+| Mitzi/Wink Spot | 131 | 81 | 1-81 | TB2 5-6 H8 | No |
+| Sun/Building Spot | 132 | 238 | 2-88 | | |
+| Moon Spot | 133 | 239 | 2-89 | | |
+| Antioch/Munch Jr. Spot/Gobo Light | 134 | 240 | 2-90 | TB1 7-8 H8 | No |
+| Earl Spot/Helicopter Light/Gemini | 135 | 87 | 1-87 | TB2 3-4 H8 | No |
+
+### Curtains
+
+| Name | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
+| ------------------ | ------------------ | ------------- | ----------- | ------------------------- | ------------ |
+| Stage Left Open | 136 | 93 | 1-93 | TB2 5-6 H2 & TB2 1-2 H2 | No |
+| Stage Left Close | 137 | 94 | 1-94 | TB2 7-8 H2 & TB2 3-4 H2 | No |
+| Center Stage Open | 138 | 91 | 1-91 | TB2 9-10 H2 & TB2 1-2 H2 | No |
+| Center Stage Close | 139 | 92 | 1-92 | TB2 11-12 H2 & TB2 3-4 H2 | No |
+| Stage Right Open | 140 | 89 | 1-89 | TB2 9-10 H2 & TB2 1-2 H2 | No |
+| Stage Right Close | 141 | 90 | 1-90 | TB2 11-12 H2 & TB2 3-4 H2 | No |
+
+### Floods
+
+| Name | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
+| ------------------ | ------------------ | ------------- | ----------- | ------------ | ------------ |
+| Stage Left Red | 142 | 229 | 2-79 | TB1 15-16 H8 | No |
+| Stage Left Amber | 143 | 228 | 2-78 | TB1 7-8 H8 | No |
+| Stage Left Green | 144 | 227 | 2-77 | | |
+| Stage Left Blue | 145 | 226 | 2-76 | TB2 13-14 H8 | No |
+| Center Stage Red | 146 | 224 | 2-74 | TB1 11-12 H8 | No |
+| Center Stage Amber | 147 | 223 | 2-73 | TB1 9-10 H8 | No |
+| Center Stage Blue | 148 | 221 | 2-71 | TB1 13-14 H8 | No |
+| Stage Right Red | 149 | 219 | 2-69 | | |
+| Stage Right Amber | 150 | 218 | 2-68 | | |
+| Stage Right Green | 151 | 217 | 2-67 | | |
+| Stage Right Blue | 152 | 216 | 2-66 | | |
+| Live Flood | 153 | 222 | 2-72 | TB1 1-2 H7 | No |
+
+### Backdrop
+
+| Name | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
+| ---------------------- | ------------------ | ------------- | ----------- | ---------- | ------------ |
+| Backdrop Red | 154 | 235 | 2-85 | TB1 3-4 H8 | No |
+| Backdrop Yellow | 155 | 232 | 2-82 | TB1 1-2 H8 | No |
+| Backdrop Green | 156 | 231 | 2-81 | | |
+| Backdrop Blue | 157 | 234 | 2-84 | TB2 5-6 H8 | No |
+| Backdrop Red Outer | 158 | 236 | 2-86 | | |
+| Backdrop Blue Outer | 159 | 237 | 2-87 | | |
+| Backdrop Red Buildings | 160 | 233 | 2-83 | | |
+| Stage Right Red Floor | 161 | 242 | 2-92 | | |
+| Stage Right Blue Floor | 162 | 243 | 2-93 | | |
+
+### Organ
+
+| Name | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
+| ----------------- | ------------------ | ------------- | ----------- | ------------ | ------------ |
+| Organ Face Red | 163 | 67 | 1-67 | TB2 11-12 H7 | No |
+| Organ Face Amber | 164 | 68 | 1-68 | TB2 7-8 H7 | No |
+| Organ Face Green | 165 | 69 | 1-69 | | |
+| Organ Face Blue | 166 | 66 | 1-66 | | |
+| Organ Legs Top | 167 | 71 | 1-71 | TB1 9-10 H7 | No |
+| Organ Legs Middle | 168 | 72 | 1-72 | TB2 3-4 H7 | No |
+| Organ Legs Bottom | 169 | 73 | 1-73 | TB2 13-14 H7 | No |
+
+### Sign
+
+| Name | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
+| ----------- | ------------------ | ------------- | ----------- | ------------ | ------------ |
+| Sign Outer | 170 | 78 | 1-78 | | |
+| Sign Middle | 171 | 77 | 1-77 | TB2 11-12 H8 | No |
+| Sign Inner | 172 | 76 | 1-76 | | |
+| Sign Strobe | 173 | 79 | 1-79 | | |
+| Sign Flash | 174 | 80 | 1-80 | | |
+
+### Special
+
+| Name | UST Full Stage Bit | RR Engine Bit | Greybox Bit | R12 Bit | R12 Inverted |
+| ------------------- | ------------------ | ------------- | ----------- | ------------ | ------------ |
+| Chuck E. Star | 175 | 220 | 2-70 | TB1 13-14 H7 | No |
+| Chuck E. Neon | 176 | 244 | 2-94 | TB2 1-2 H7 | No |
+| Jukebox Topper | 177 | 245 | 2-95 | TB2 9-10 H8 | No |
+| Fiber Optic Curtain | 178 | 225 | 2-75 | TB2 1-2 H8 | No |
+| Snare Drum Light | 179 | 230 | 2-80 | | |
+| Kick Drum Light | 180 | 241 | 2-91 | TB1 5-6 H7 | No |
+
+## Cyberamics
### Chuck E. Cheese
-| Movement Name | UST Single Character Bit | UST Full Stage Bit | RR Engine Bit | CCS Bit |
+| Movement Name | Character Bit | UST Full Stage Bit | RR Engine Bit | CCS Bit |
| ------------- | ------------------------ | ------------------ | ------------- | ------------ |
| Mouth | 1 | 1 | 1 | TB1 1-2 H1 |
| Head Left | 2 | 2 | 2 | TB1 3-4 H1 |
@@ -187,7 +290,7 @@ Hand movement was removed during Concept Unification.
### Helen Henny/Guest Star
-| Movement Name | UST Single Character Bit | UST Full Stage Bit | RR Engine Bit | CCS Bit |
+| Movement Name | UST Character Bit | UST Full Stage Bit | RR Engine Bit | CCS Bit |
| ------------- | ------------------------ | ------------------ | ------------- | ------------ |
| Mouth | 1 | 9 | 65 | TB1 1-2 H5 |
| Head Left | 2 | 10 | 66 | TB1 3-4 H5 |
@@ -200,7 +303,7 @@ Hand movement was removed during Concept Unification.
### Mr. Munch
-| Movement Name | UST Single Character Bit | UST Full Stage Bit | RR Engine Bit | CCS Bit |
+| Movement Name | UST Character Bit | UST Full Stage Bit | RR Engine Bit | CCS Bit |
| ------------- | ------------------------ | ------------------ | ------------- | ------------ |
| Mouth | 1 | 17 | 49 | TB1 1-2 H4 |
| Head Left | 2 | 18 | 50 | TB1 3-4 H4 |
@@ -213,7 +316,7 @@ Hand movement was removed during Concept Unification.
### Jasper T. Jowls
-| Movement Name | UST Single Character Bit | UST Full Stage Bit | RR Engine Bit | CCS Bit |
+| Movement Name | UST Character Bit | UST Full Stage Bit | RR Engine Bit | CCS Bit |
| ------------- | ------------------------ | ------------------ | ------------- | ------------ |
| Mouth | 1 | 25 | 17 | TB1 1-2 H2 |
| Head Left | 2 | 26 | 18 | TB1 3-4 H2 |
@@ -226,7 +329,7 @@ Hand movement was removed during Concept Unification.
### Pasqually
-| Movement Name | UST Single Character Bit | UST Full Stage Bit | RR Engine Bit | CCS Bit |
+| Movement Name | UST Character Bit | UST Full Stage Bit | RR Engine Bit | CCS Bit |
| ------------- | ------------------------ | ------------------ | ------------- | ------------ |
| Mouth | 1 | 33 | 33 | TB1 1-2 H3 |
| Head Left | 2 | 34 | 34 | TB1 3-4 H3 |
@@ -236,3 +339,197 @@ Hand movement was removed during Concept Unification.
| Eyelids | 6 | 38 | 38 | TB1 11-12 H3 |
| Right Arm | 7 | 39 | 39 | TB1 13-14 H3 |
| Left Arm | 8 | 40 | 36 | TB1 7-8 H3 |
+
+### Props
+
+| Name | UST Full Stage Bit | RR Engine Bit | CCS Bit |
+| ------------------------- | ------------------ | ------------- | ------------ |
+| Warblettes/Flower Mouth 1 | 41 | 9 | TB2 1-2 H1 |
+| Flower Mouth 2 | 42 | 46 | TB2 11-12 H3 |
+| Flower Mouth 3 | 43 | 62 | TB2 11-12 H4 |
+| Warblettes Body Rock/Wink | 44 | 10 | TB2 3-4 H1 |
+| Flag 1 | 45 | 74 | TB2 3-4 H5 |
+| Flag 2 | 46 | 75 | TB2 5-6 H5 |
+| Flag 3 | 47 | 76 | TB2 7-8 H5 |
+| Flag 4 | 48 | 77 | TB2 9-10 H5 |
+| Flag 5 | 49 | 78 | TB2 11-12 H5 |
+
+### Spots
+
+| Name | UST Full Stage Bit | RR Engine Bit | CCS Bit |
+| ----------------------- | ------------------ | ------------- | ------------ |
+| Chuck E. Spot | 50 | 104 | TB1 15-16 H7 |
+| Helen Spot | 51 | 102 | TB1 11-12 H7 |
+| Munch Spot | 52 | 109 | TB2 9-10 H7 |
+| Jasper Spot | 53 | 107 | TB2 5-6 H7 |
+| Pasqually Spot | 54 | 100 | TB1 7-8 H7 |
+| Wink Spot | 55 | 123 | TB2 5-6 H8 |
+| Flowers/Warblettes Spot | 56 | 41 | TB2 1-2 H3 |
+
+### Curtains
+
+| Name | UST Full Stage Bit | RR Engine Bit | CCS Bit |
+| ------------------------ | ------------------ | ------------- | ------------ |
+| CEC Stage Curtain Open | 57 | 27 | TB2 5-6 H2 |
+| CEC Stage Curtain Close | 58 | 28 | TB2 7-8 H2 |
+| Main Stage Curtain Open | 59 | 29 | TB2 9-10 H2 |
+| Main Stage Curtain Close | 60 | 30 | TB2 11-12 H2 |
+| 1-Stage Curtain Open | 61 | 25 | TB2 1-2 H2 |
+| 1-Stage Curtain Close | 62 | 26 | TB2 3-4 H2 |
+| Turntable Bot Side | 63 | 57 | TB2 1-2 H4 |
+| Turntable Live Side | 64 | 58 | TB2 3-4 H4 |
+
+### Floods
+
+| Name | UST Full Stage Bit | RR Engine Bit | CCS Bit |
+| ------------------------- | ------------------ | ------------- | ------------ |
+| CEC Stage Red Overhead | 65 | 120 | TB1 15-16 H8 |
+| CEC Stage Amber Overhead | 66 | 116 | TB1 7-8 H8 |
+| CEC Stage Blue Overhead | 67 | 127 | TB2 13-14 H8 |
+| Main Stage Red Overhead | 68 | 118 | TB1 11-12 H8 |
+| Main Stage Amber Overhead | 69 | 117 | TB1 9-10 H8 |
+| Main Stage Blue Overhead | 70 | 119 | TB1 13-14 H8 |
+
+### Backdrop
+
+| Name | UST Full Stage Bit | RR Engine Bit | CCS Bit |
+| -------------- | ------------------ | ------------- | ---------- |
+| Red Backdrop | 71 | 114 | TB1 3-4 H8 |
+| Amber Backdrop | 72 | 113 | TB1 1-2 H8 |
+| Blue Backdrop | 73 | 115 | TB1 5-6 H8 |
+
+### Organ
+
+| Name | UST Full Stage Bit | RR Engine Bit | CCS Bit |
+| ----------------- | ------------------ | ------------- | ------------ |
+| Organ Face Amber | 74 | 110 | TB2 11-12 H7 |
+| Organ Face Blue | 75 | 108 | TB2 7-8 H7 |
+| Organ Legs Outer | 76 | 101 | TB1 9-10 H7 |
+| Organ Legs Middle | 77 | 106 | TB2 3-4 H7 |
+| Organ Legs Inner | 78 | 111 | TB2 13-14 H7 |
+
+### Special
+
+| Name | UST Full Stage Bit | RR Engine Bit | CCS Bit |
+| -------------------- | ------------------ | ------------- | ------------ |
+| CEC Star/Rope Lights | 79 | 103 | TB1 13-14 H7 |
+| CEC Sign | 80 | 105 | TB2 1-2 H7 |
+| Jukebox Topper | 81 | 125 | TB2 9-10 H8 |
+| Fiber Curtain | 82 | 121 | TB2 1-2 H8 |
+| Band Sign | 83 | 126 | TB2 11-12 H8 |
+| Kick Drum | 84 | 99 | TB1 5-6 H7 |
+| Gobo Light | 85 | 124 | TB2 7-8 H8 |
+| Helicopter/Gemini | 86 | 122 | TB2 3-4 H8 |
+| Live Flood | 87 | 97 | TB1 1-2 H7 |
+| Live Strobe | 88 | 98 | TB1 3-4 H7 |
+
+## Studio C
+
+### Chuck E.
+
+| Movement Name | UST Character Bit | UST Full Stage Bit | RR Engine Bit | DTU Bit | 16M |
+| ----------------- | ------------------------ | ------------------ | ------------- | ------- | --- |
+| Mouth | 1 | 1 | 21 | 1-21 | Yes |
+| Nose | 2 | 2 | 28 | 1-28 | No |
+| Eyelids Up | 3 | 3 | 25 | 1-25 | No |
+| Eyelids Down | 4 | 4 | 24 | 1-24 | Yes |
+| Eyes Left | 5 | 5 | 26 | 1-26 | Yes |
+| Eyes Right | 6 | 6 | 27 | 1-27 | Yes |
+| Eyebrows Up | 7 | 7 | 29 | 1-29 | No |
+| Eyebrows Down | 8 | 8 | 30 | 1-30 | No |
+| Ears | 9 | 9 | 31 | 1-31 | No |
+| Head Turn Left | 10 | 10 | 18 | 1-18 | Yes |
+| Head Turn Right | 11 | 11 | 19 | 1-19 | Yes |
+| Head Tilt Left | 12 | 12 | 23 | 1-23 | No |
+| Head Tilt Right | 13 | 13 | 22 | 1-22 | No |
+| Head Up | 14 | 14 | 20 | 1-20 | Yes |
+| Left Arm Out | 15 | 15 | 6 | 1-6 | No |
+| Left Arm Swing | 16 | 16 | 7 | 1-7 | Yes |
+| Left Arm Forward | 17 | 17 | 11 | 1-11 | No |
+| Left Elbow | 18 | 18 | 8 | 1-8 | Yes |
+| Left Wrist | 19 | 19 | 9 | 1-9 | No |
+| Left Hand Wave | 20 | 20 | 10 | 1-10 | Yes |
+| Right Arm Out | 21 | 21 | 1 | 1-1 | No |
+| Right Arm Swing | 22 | 22 | 2 | 1-2 | Yes |
+| Right Arm Forward | 23 | 23 | 17 | 1-17 | No |
+| Right Elbow | 24 | 24 | 3 | 1-3 | Yes |
+| Right Wrist | 25 | 25 | 4 | 1-4 | No |
+| Right Hand Wave | 26 | 26 | 5 | 1-5 | Yes |
+| Body Forward | 27 | 27 | 12 | 1-12 | Yes |
+| Body Turn Left | 28 | 28 | 16 | 1-16 | Yes |
+| Body Turn Right | 29 | 29 | 15 | 1-15 | Yes |
+| Body Tilt Left | 30 | 30 | 13 | 1-13 | No |
+| Body Tilt Right | 31 | 31 | 14 | 1-14 | No |
+| Foot Tap | 32 | 32 | 32 | 1-32 | No |
+
+### Props
+
+| Name | UST Full Stage Bit | RR Engine Bit | DTU Bit |
+| ------------- | ------------------ | ------------- | ------- |
+| Bird Mouth | 33 | 33 | 1-33 |
+| Bird Wings | 34 | 36 | 1-36 |
+| Bird Bow | 35 | 34 | 1-34 |
+| Bird Turn | 36 | 35 | 1-35 |
+| Phone Swing | 37 | 40 | 1-40 |
+| Clock Forward | 38 | 160 | 2-10 |
+| Clock Reverse | 39 | 161 | 2-11 |
+
+### Spots
+
+| Name | UST Full Stage Bit | RR Engine Bit | DTU Bit |
+| ------------- | ------------------ | ------------- | ------- |
+| Chuck E. Spot | 40 | 177 | 2-27 |
+| Bird Spot | 41 | 178 | 2-28 |
+
+### Curtains
+
+| Name | UST Full Stage Bit | RR Engine Bit | DTU Bit |
+| -------------- | ------------------ | ------------- | ------- |
+| Curtains Open | 42 | 44 | 1-44 |
+| Curtains Close | 43 | 45 | 1-45 |
+
+### Floods
+
+| Name | UST Full Stage Bit | RR Engine Bit | DTU Bit |
+| ------------------------ | ------------------ | ------------- | ------- |
+| CEC Red Floods | 44 | 151 | 2-1 |
+| CEC Amber Floods | 45 | 154 | 2-4 |
+| CEC Green Floods | 46 | 152 | 2-2 |
+| CEC Blue Floods | 47 | 153 | 2-3 |
+| Blue Screen Red Floods | 48 | 155 | 2-5 |
+| Blue Screen Amber Floods | 49 | 157 | 2-7 |
+| Blue Screen Green Floods | 50 | 156 | 2-6 |
+| Room Pink Floods | 51 | 181 | 2-31 |
+| Room Amber Floods | 52 | 180 | 2-30 |
+| Room Blue Floods | 53 | 182 | 2-32 |
+
+### Monitor
+
+| Name | UST Full Stage Bit | RR Engine Bit | DTU Bit |
+| ------------- | ------------------ | ------------- | ------- |
+| Monitor Pink | 54 | 172 | 2-22 |
+| Monitor Green | 55 | 174 | 2-24 |
+| Monitor Blue | 56 | 173 | 2-23 |
+| Monitor Chase | 57 | 171 | 2-21 |
+
+### Desk
+
+| Name | UST Full Stage Bit | RR Engine Bit | DTU Bit |
+| ----------- | ------------------ | ------------- | ------- |
+| Desk Outer | 58 | 166 | 2-16 |
+| Desk Middle | 59 | 165 | 2-15 |
+| Desk Inner | 60 | 164 | 2-14 |
+
+### Special
+
+| Name | UST Full Stage Bit | RR Engine Bit | DTU Bit |
+| -------------------- | ------------------ | ------------- | ------- |
+| Clock Neon | 61 | 159 | 2-9 |
+| City Lights | 62 | 163 | 2-13 |
+| Phone Handset Lights | 63 | 167 | 2-17 |
+| Phone Dial Lights | 64 | 168 | 2-18 |
+| Gemini | 65 | 176 | 2-26 |
+| On Air Sign | 66 | 169 | 2-19 |
+| Applause Sign | 67 | 170 | 2-20 |
+| Strobe | 68 | 162 | 2-12 |
+| Live Floods | 69 | 179 | 2-29 |
diff --git a/ConsolePlayer/ConsolePlayer.csproj b/ConsolePlayer/ConsolePlayer.csproj
new file mode 100644
index 0000000..c461e59
--- /dev/null
+++ b/ConsolePlayer/ConsolePlayer.csproj
@@ -0,0 +1,15 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
+
+
+
+
+
diff --git a/ConsolePlayer/Program.cs b/ConsolePlayer/Program.cs
new file mode 100644
index 0000000..d8c7ba2
--- /dev/null
+++ b/ConsolePlayer/Program.cs
@@ -0,0 +1,308 @@
+using System.Globalization;
+using System.IO.Ports;
+using System.Numerics;
+using System.Timers;
+
+using SoundFlow.Backends.MiniAudio;
+using SoundFlow.Components;
+using SoundFlow.Enums;
+using SoundFlow.Providers;
+
+namespace ConsolePlayer
+{
+ public class Program
+ {
+ static SerialPort Port;
+ static System.Timers.Timer FrameTimer;
+ static System.Timers.Timer ResyncTimer;
+ static SoundPlayer AudioPlayer;
+
+ static int FramesPerTick = 6;
+ static int ShowtapeIndex = 0;
+ static int ControllerBits;
+
+ static string ShowtapeName;
+ static string ShowtapeFormattedLength;
+
+ static bool DetectedController = false;
+ static bool Playing = false;
+ static bool TripFlag = false;
+ static bool Paused = false;
+ static bool SyncMsg = false;
+
+ static string[] ShowtapeFrames;
+
+ public static void Main(string[] args)
+ {
+ Console.WriteLine("PinkConnection3 Console Player");
+ if (args.Length < 2)
+ {
+ Console.WriteLine("Not enough arguments!");
+ Console.WriteLine("Press any key to exit.");
+ Console.ReadKey();
+ return;
+ }
+ if (!File.Exists(args[0]))
+ {
+ Console.WriteLine("Specified showtape does not exist!");
+ Console.WriteLine("Press any key to exit.");
+ Console.ReadKey();
+ return;
+ }
+ if (!File.Exists(args[1]))
+ {
+ Console.WriteLine("Specified mapping file does not exist!");
+ Console.WriteLine("Press any key to exit.");
+ Console.ReadKey();
+ return;
+ }
+
+ if (args.Length == 3) OpenSerialPortSpecific(args[2]);
+ else OpenSerialPort();
+ if (TripFlag) return;
+
+ LoadShowtape(args[0], args[1]);
+ if (TripFlag) return;
+
+ FrameTimer = new System.Timers.Timer((1000d/60d)*FramesPerTick);
+ FrameTimer.Elapsed += PlayFrame;
+ FrameTimer.AutoReset = true;
+
+ ResyncTimer = new System.Timers.Timer(15000);
+ ResyncTimer.Elapsed += Resync;
+ ResyncTimer.AutoReset = true;
+
+ using MiniAudioEngine audioEngine = new MiniAudioEngine(48000, Capability.Playback);
+
+ using StreamDataProvider dataProvider = new StreamDataProvider(File.OpenRead("pc3playertempaudio.tmp"));
+ AudioPlayer = new SoundPlayer(dataProvider);
+
+ Mixer.Master.AddComponent(AudioPlayer);
+
+ Console.WriteLine($"Playing Showtape \"{ShowtapeName}\" ({ShowtapeFormattedLength})");
+ Console.WriteLine("Controls:\n[SPACE] to pause and unpause\n[TAB] to toggle sync messages");
+ Playing = true;
+ AudioPlayer.Play();
+ FrameTimer.Start();
+ ResyncTimer.Start();
+ while (Playing)
+ {
+ ConsoleKeyInfo input = Console.ReadKey();
+ if (Playing)
+ {
+ if (input.Key == ConsoleKey.Spacebar)
+ {
+ if (Paused)
+ {
+ Paused = false;
+ FrameTimer.Start();
+ ResyncTimer.Start();
+ AudioPlayer.Seek((float)(((float)ShowtapeIndex) / 60.0));
+ AudioPlayer.Play();
+ }
+ else
+ {
+ Paused = true;
+ FrameTimer.Stop();
+ ResyncTimer.Stop();
+ AudioPlayer.Pause();
+ }
+ }
+ else if (input.Key == ConsoleKey.Tab) SyncMsg = !SyncMsg;
+ }
+ else if (!Playing) break;
+ }
+ Mixer.Master.RemoveComponent(AudioPlayer);
+ }
+
+ static void OpenSerialPortSpecific(string specifiedPortName)
+ {
+ string successPortName = "";
+
+ Console.WriteLine("Serial port was manually specified");
+ try
+ {
+ Console.Write("Waiting for controller");
+ Port = new SerialPort(specifiedPortName, 9600, Parity.None, 8, StopBits.One);
+ Port.Open();
+
+ for (int i = 0; i < 10; i++)
+ {
+ if (i % 5 == 0) Console.Write(".");
+ Port.Write("! ");
+ Thread.Sleep(100);
+ string readAttempt = Port.ReadExisting();
+ if (readAttempt.Split(",")[0] == "PC3")
+ {
+ ControllerBits = int.Parse(readAttempt.Split(",")[1]);
+ DetectedController = true;
+ successPortName = specifiedPortName;
+ break;
+ }
+ }
+
+ if (!DetectedController)
+ {
+ Console.WriteLine("\nCould not detect a PinkConnection3 controller on the specified serial port.");
+ Console.WriteLine("Press any key to exit.");
+ Console.ReadKey();
+ TripFlag = true;
+ return;
+ }
+
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine("\nFailed to connect to the specified serial port.");
+ Console.WriteLine(e.Message);
+ Console.WriteLine("Press any key to exit.");
+ Console.ReadKey();
+ TripFlag = true;
+ return;
+ }
+ }
+
+ static void OpenSerialPort()
+ {
+ string successPortName = "";
+
+ Console.Write("Searching for controller");
+ foreach (string portName in SerialPort.GetPortNames())
+ {
+ if (DetectedController) break;
+ try
+ {
+ Port = new SerialPort(portName, 9600, Parity.None, 8, StopBits.One);
+ Port.Open();
+
+ for (int i = 0; i < 10; i++)
+ {
+ if (i % 5 == 0) Console.Write(".");
+ Port.Write("! ");
+ Thread.Sleep(100);
+ string readAttempt = Port.ReadExisting();
+ if (readAttempt.Split(",")[0] == "PC3")
+ {
+ ControllerBits = int.Parse(readAttempt.Split(",")[1]);
+ DetectedController = true;
+ successPortName = portName;
+ break;
+ }
+ }
+
+ } catch (Exception) { continue; }
+ }
+ if (!DetectedController)
+ {
+ Console.WriteLine("\nCould not detect a PinkConnection3 controller on any of your serial ports.");
+ Console.WriteLine("Press any key to exit.");
+ Console.ReadKey();
+ TripFlag = true;
+ return;
+ }
+ Console.WriteLine("\nDetected PinkConnection3 Controller on " + successPortName);
+ }
+
+ static void LoadShowtape(string ustPath, string mappingPath)
+ {
+ Console.WriteLine("Loading showtape file...");
+ string tempMappingData = File.ReadAllText(mappingPath);
+ if (!tempMappingData.StartsWith("PC3MAPPING;"))
+ {
+ Console.WriteLine("Specified mapping file is not a PinkConnection3 channel map.");
+ Console.WriteLine("Press any key to exit.");
+ Console.ReadKey();
+ TripFlag = true;
+ return;
+ }
+
+ List targetBits = new List();
+ foreach (string s in tempMappingData.Split(";")[1].Split(","))
+ {
+ targetBits.Add(int.Parse(s));
+ }
+
+ if (targetBits.Count != ControllerBits)
+ {
+ Console.WriteLine("The mapped channel count is not equal to the connected controller's bit count.");
+ Console.WriteLine("Press any key to exit.");
+ Console.ReadKey();
+ TripFlag = true;
+ return;
+ }
+
+ if (targetBits.Count % 4 != 0)
+ {
+ Console.WriteLine("The mapped channel count is not divisible by 4.");
+ Console.WriteLine("Press any key to exit.");
+ Console.ReadKey();
+ TripFlag = true;
+ return;
+ }
+
+ string tempUSTData = File.ReadAllText(ustPath);
+ if (!tempUSTData.StartsWith("UST,2,"))
+ {
+ Console.WriteLine("Specified showtape is not a UST version 2 showtape.");
+ Console.WriteLine("Press any key to exit.");
+ Console.ReadKey();
+ TripFlag = true;
+ return;
+ }
+
+ string[] headerData = tempUSTData.Split(';')[0].Split(',');
+ string[] stringyBits = tempUSTData.Split(';')[1].Split(',');
+ File.WriteAllBytes("pc3playertempaudio.tmp", Convert.FromBase64String(tempUSTData.Split(';')[2]));
+
+ tempUSTData = null;
+
+ ShowtapeName = headerData[2];
+
+ TimeSpan time = TimeSpan.FromSeconds(stringyBits.Length/60);
+ ShowtapeFormattedLength = time.ToString(@"hh\:mm\:ss");
+
+ List tempShowData = new List();
+
+ foreach (string stringyFrame in stringyBits)
+ {
+ BigInteger frame = BigInteger.Parse(stringyFrame, NumberStyles.HexNumber);
+ int selectBit = 0;
+ char[] frameStringOut = new char[64];
+ for (int i = 0; i < targetBits.Count / 4; i++)
+ {
+ byte quartet = 64;
+ for (int j = 0; j < 4; j++)
+ {
+ if (targetBits[selectBit] == 0) continue;
+ if ((frame & BigInteger.Pow(2, targetBits[selectBit]-1)) == BigInteger.Pow(2, targetBits[selectBit]-1)) quartet += (byte)Math.Pow(2, j);
+ selectBit++;
+ }
+ frameStringOut[i] = (char)quartet;
+ }
+ tempShowData.Add(new string(frameStringOut).Trim());
+ }
+
+ ShowtapeFrames = tempShowData.ToArray();
+ }
+
+ static void PlayFrame(Object sender, ElapsedEventArgs e)
+ {
+ if (ShowtapeIndex >= ShowtapeFrames.Length)
+ {
+ FrameTimer.Stop();
+ Playing = false;
+ Console.WriteLine("Complete! Press any key to exit.");
+ if (File.Exists("pc3playertempaudio.tmp")) File.Delete("pc3playertempaudio.tmp");
+ return;
+ }
+ Port.Write(ShowtapeFrames[ShowtapeIndex]);
+ ShowtapeIndex += FramesPerTick;
+ }
+
+ static void Resync(Object sender, ElapsedEventArgs e)
+ {
+ if (SyncMsg) Console.WriteLine($"Resynced by {(int)(AudioPlayer.Time * 60) - ShowtapeIndex} frames");
+ ShowtapeIndex = (int)(AudioPlayer.Time * 60);
+ }
+ }
+}
diff --git a/ConsolePlayer/channel mappings/BeachBearJasper.pcm b/ConsolePlayer/channel mappings/BeachBearJasper.pcm
new file mode 100644
index 0000000..f25db0c
--- /dev/null
+++ b/ConsolePlayer/channel mappings/BeachBearJasper.pcm
@@ -0,0 +1 @@
+PC3MAPPING;58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/ConsolePlayer/channel mappings/BillyBob.pcm b/ConsolePlayer/channel mappings/BillyBob.pcm
new file mode 100644
index 0000000..d2f42d2
--- /dev/null
+++ b/ConsolePlayer/channel mappings/BillyBob.pcm
@@ -0,0 +1 @@
+PC3MAPPING;91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/ConsolePlayer/channel mappings/CyberChuck.pcm b/ConsolePlayer/channel mappings/CyberChuck.pcm
new file mode 100644
index 0000000..7225c89
--- /dev/null
+++ b/ConsolePlayer/channel mappings/CyberChuck.pcm
@@ -0,0 +1 @@
+PC3MAPPING;1,2,3,4,5,6,7,8
diff --git a/ConsolePlayer/channel mappings/CyberHelen.pcm b/ConsolePlayer/channel mappings/CyberHelen.pcm
new file mode 100644
index 0000000..71bd573
--- /dev/null
+++ b/ConsolePlayer/channel mappings/CyberHelen.pcm
@@ -0,0 +1 @@
+PC3MAPPING;9,10,11,12,13,14,15,16
diff --git a/ConsolePlayer/channel mappings/CyberJasper.pcm b/ConsolePlayer/channel mappings/CyberJasper.pcm
new file mode 100644
index 0000000..103181b
--- /dev/null
+++ b/ConsolePlayer/channel mappings/CyberJasper.pcm
@@ -0,0 +1 @@
+PC3MAPPING;25,26,27,28,29,30,31,32
diff --git a/ConsolePlayer/channel mappings/CyberMunch.pcm b/ConsolePlayer/channel mappings/CyberMunch.pcm
new file mode 100644
index 0000000..8338e88
--- /dev/null
+++ b/ConsolePlayer/channel mappings/CyberMunch.pcm
@@ -0,0 +1 @@
+PC3MAPPING;17,18,19,20,21,22,23,24
diff --git a/ConsolePlayer/channel mappings/CyberPasqually.pcm b/ConsolePlayer/channel mappings/CyberPasqually.pcm
new file mode 100644
index 0000000..eac80d9
--- /dev/null
+++ b/ConsolePlayer/channel mappings/CyberPasqually.pcm
@@ -0,0 +1 @@
+PC3MAPPING;33,34,35,36,37,38,39,40
diff --git a/ConsolePlayer/channel mappings/DookPasqually.pcm b/ConsolePlayer/channel mappings/DookPasqually.pcm
new file mode 100644
index 0000000..19b2875
--- /dev/null
+++ b/ConsolePlayer/channel mappings/DookPasqually.pcm
@@ -0,0 +1 @@
+PC3MAPPING;74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/ConsolePlayer/channel mappings/FatzMunch.pcm b/ConsolePlayer/channel mappings/FatzMunch.pcm
new file mode 100644
index 0000000..b9ea160
--- /dev/null
+++ b/ConsolePlayer/channel mappings/FatzMunch.pcm
@@ -0,0 +1 @@
+PC3MAPPING;42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/ConsolePlayer/channel mappings/MitziHelen.pcm b/ConsolePlayer/channel mappings/MitziHelen.pcm
new file mode 100644
index 0000000..40eed4d
--- /dev/null
+++ b/ConsolePlayer/channel mappings/MitziHelen.pcm
@@ -0,0 +1 @@
+PC3MAPPING;23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/ConsolePlayer/channel mappings/RolfeChuck.pcm b/ConsolePlayer/channel mappings/RolfeChuck.pcm
new file mode 100644
index 0000000..72b6811
--- /dev/null
+++ b/ConsolePlayer/channel mappings/RolfeChuck.pcm
@@ -0,0 +1 @@
+PC3MAPPING;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,0,0,0,0,0,0,0,0,0,0
diff --git a/Future Goals.md b/Future Goals.md
index 30f46c1..54cdff2 100644
--- a/Future Goals.md
+++ b/Future Goals.md
@@ -1,18 +1,15 @@
# Future Goals
-## PC2Converter
+## USTConverter
- .SHW (ProgramBlue) input format
- .3ST/.R12/.C&R (APS) input format
- Biphase (Pianocorder and Cyberstar) from tape input format
- Studio C from Floppy Disk input format
- - UST Full Stage to Single Character Stripper
## PC2Player
- - ~~make the program~~ done!!
- - fix memory leak issue
- - make audio player work on windows
+ - ~~burn the damn thing to the ground and start over~~ Done!
## Firmwares
diff --git a/PC2Player/PC2Player.Gtk/PC2Player.Gtk.csproj b/Legacy Tools/PC2Player.Old/PC2Player.Gtk/PC2Player.Gtk.csproj
similarity index 100%
rename from PC2Player/PC2Player.Gtk/PC2Player.Gtk.csproj
rename to Legacy Tools/PC2Player.Old/PC2Player.Gtk/PC2Player.Gtk.csproj
diff --git a/PC2Player/PC2Player.Gtk/Program.cs b/Legacy Tools/PC2Player.Old/PC2Player.Gtk/Program.cs
similarity index 100%
rename from PC2Player/PC2Player.Gtk/Program.cs
rename to Legacy Tools/PC2Player.Old/PC2Player.Gtk/Program.cs
diff --git a/PC2Converter/PC2Converter.Mac/Icon.icns b/Legacy Tools/PC2Player.Old/PC2Player.Mac/Icon.icns
similarity index 100%
rename from PC2Converter/PC2Converter.Mac/Icon.icns
rename to Legacy Tools/PC2Player.Old/PC2Player.Mac/Icon.icns
diff --git a/PC2Player/PC2Player.Mac/Info.plist b/Legacy Tools/PC2Player.Old/PC2Player.Mac/Info.plist
similarity index 100%
rename from PC2Player/PC2Player.Mac/Info.plist
rename to Legacy Tools/PC2Player.Old/PC2Player.Mac/Info.plist
diff --git a/PC2Player/PC2Player.Mac/PC2Player.Mac.csproj b/Legacy Tools/PC2Player.Old/PC2Player.Mac/PC2Player.Mac.csproj
similarity index 100%
rename from PC2Player/PC2Player.Mac/PC2Player.Mac.csproj
rename to Legacy Tools/PC2Player.Old/PC2Player.Mac/PC2Player.Mac.csproj
diff --git a/PC2Player/PC2Player.Mac/Program.cs b/Legacy Tools/PC2Player.Old/PC2Player.Mac/Program.cs
similarity index 100%
rename from PC2Player/PC2Player.Mac/Program.cs
rename to Legacy Tools/PC2Player.Old/PC2Player.Mac/Program.cs
diff --git a/PC2Player/PC2Player.Wpf/PC2Player.Wpf.csproj b/Legacy Tools/PC2Player.Old/PC2Player.Wpf/PC2Player.Wpf.csproj
similarity index 100%
rename from PC2Player/PC2Player.Wpf/PC2Player.Wpf.csproj
rename to Legacy Tools/PC2Player.Old/PC2Player.Wpf/PC2Player.Wpf.csproj
diff --git a/PC2Player/PC2Player.Wpf/Program.cs b/Legacy Tools/PC2Player.Old/PC2Player.Wpf/Program.cs
similarity index 100%
rename from PC2Player/PC2Player.Wpf/Program.cs
rename to Legacy Tools/PC2Player.Old/PC2Player.Wpf/Program.cs
diff --git a/PC2Player/PC2Player/MainForm.cs b/Legacy Tools/PC2Player.Old/PC2Player/MainForm.cs
similarity index 100%
rename from PC2Player/PC2Player/MainForm.cs
rename to Legacy Tools/PC2Player.Old/PC2Player/MainForm.cs
diff --git a/PC2Player/PC2Player/PC2Player.csproj b/Legacy Tools/PC2Player.Old/PC2Player/PC2Player.csproj
similarity index 100%
rename from PC2Player/PC2Player/PC2Player.csproj
rename to Legacy Tools/PC2Player.Old/PC2Player/PC2Player.csproj
diff --git a/PC2Converter/PC2Converter/MainForm.cs b/PC2Converter/PC2Converter/MainForm.cs
deleted file mode 100644
index 296aa21..0000000
--- a/PC2Converter/PC2Converter/MainForm.cs
+++ /dev/null
@@ -1,478 +0,0 @@
-using System;
-using System.Collections;
-using System.Diagnostics;
-using System.IO;
-
-using Eto.Forms;
-using Eto.Drawing;
-
-namespace PC2Converter
-{
- public partial class MainForm : Form
- {
- DropDown InputTypeSelector = new DropDown();
- DropDown OutputTypeSelector = new DropDown();
- DropDown CharacterSelector = new DropDown();
- TextBox FilePathTextBox = new TextBox();
- Button BrowseFileButton = new Button { Text = "Browse", Width = 100 };
- Button ConvertButton = new Button { Text = "Convert", Width = 100 };
- CheckBox CompressAudioCheckBox = new CheckBox { Text = "Compress Audio", Width = 100 };
-
- string[] InputTypes = {
- "RSHW File (RR Engine)", "CSHW File (RR Engine)", "SSHW File (RR Engine)"/*,
- "3ST File (APS)", "ROA/R12/C&R File (APS)"*/
- };
-
- string[] RAE3stOutputTypes = { "UST 32 Bits (Single Bot RAE/3st)", "UST 8 Bits (Single Bot Cybers Rosetta)", "UST 256 Bits (Full RAE/3st)" , "UST 256 Bits (Full Cybers Rosetta)" };
- string[] CyberOutputTypes = { "UST 8 Bits (Single Bot Cybers)", "UST 256 Bits (Full Cybers)" };
- string[] StudioCOutputTypes = { "UST 32 Bits (Single Bot Studio C)", "UST 256 Bits (Full Studio C)" };
-
- string[] RAE3stCharacters = { "Rolfe/Chuck E.", "Mitzi/Helen", "Fatz/Munch", "Beach Bear/Jasper", "Dook/Pasqually", "Billy Bob", "Looney Bird/PizzaCam"};
- string[] CyberCharacters = { "Chuck E.", "Helen/Guest Star", "Munch", "Jasper", "Pasqually" };
- string[] StudioCCharacters = { "Chuck E." };
-
- int[][] SC_CyberBitMapR12 =
- {
- /* chuck */ new int[]{ 1, 2, 3, 4, 8, 5, 6, 7 },
- /* helen */ new int[]{ 65, 66, 67, 68, 72, 69, 70, 71 },
- /* munch */ new int[]{ 49, 50, 51, 56, 53, 54, 55, 52 },
- /* jasper */ new int[]{ 17, 18, 19, 20, 24, 21, 22, 23 },
- /* pasqually */ new int[]{ 33, 34, 35, 40, 37, 38, 39, 36 }
- };
-
- int[][] SC_CyberBitMapRosetta =
- {
- /* chuck */ new int[]{ 1, 6, 7, 8, 4, 5, 2, 19 },
- /* helen */ new int[]{ 185, 178, 179, 180, 183, 184, 181, 169 },
- /* munch */ new int[]{ 45, 54, 55, 43, 44, 41, 58, 59 },
- /* jasper */ new int[]{ 166, 156, 157, 158, 156, 157, 151, 163 },
- /* pasqually */ new int[]{ 30, 25, 21, 28, 29, 26, 31, 35 }
- };
-
- int[][] SC_RAE3stBitMap =
- {
- /* rolfe/chuck */ new int[]{ 1, 9, 10, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 17, 18, 19, 14, 15, 16, 20, 36, 37 },
- /* mitzi/helen */ new int[]{ 185, 176, 177, 181, 182, 183, 184, 178, 179, 180, 173, 175, 174, 168, 170, 169, 186, 187, 188 },
- /* fatz/munch */ new int[]{ 45, 41, 42, 43, 44, 54, 55, 51, 52, 53, 57, 59, 58, 60, 61, 62 },
- /* beach bear/jasper */ new int[]{ 166, 151, 152, 153, 156, 157, 158, 161, 162, 163, 164, 154, 155, 159, 160, 165 },
- /* dook/pasqually */ new int[]{ 30, 23, 24, 26, 27, 28, 29, 25, 21, 22, 33, 35, 34, 31, 32, 63, 64 },
- /* billy bob */ new int[]{ 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 189, 190, 194, 211, 212, 213 },
- /* looney/pizzacam */ new int[]{ 167, 191, 192, 193, 171, 172, 48 }
- };
-
- int[][] SC_StudioCBitMap =
- {
- /* chuck e. */ new int[]{ 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 }
- };
-
- int[] CyberRosettaInvertedBits = { 2, 8, 181, 169, 41, 59, 58, 151, 158, 26, 35, 31 };
- int[] RAE3stAPSDescrambleTable = { 10, 11, 0, 1, 2, 3, 4, 12, 13, 5, 6, 7, 8, 9, 14, 15};
-
- bool FullStage = false;
- const int USTVersion = 1;
-
- public MainForm()
- {
- Title = "PinkConnection2 Showtape Converter";
- Size = new Size(512, 384);
- Maximizable = false;
- Resizable = false;
-
- BrowseFileButton.Command = new Command((sender, e) => { Event_BrowseFileButton(); });
- ConvertButton.Command = new Command((sender, e) => { Event_ConvertFileButton(); });
-
- InputTypeSelector.SelectedValueChanged += (sender, e) => Event_ChangeInputType();
- OutputTypeSelector.SelectedValueChanged += (sender, e) => Event_ChangeOutputType();
-
- foreach (string s in InputTypes)
- {
- InputTypeSelector.Items.Add(s);
- }
-
- Content = BuildLayout();
- }
-
- DynamicLayout BuildLayout()
- {
- DynamicLayout layout = new DynamicLayout { DefaultSpacing = new Size(10, 10), DefaultPadding = new Padding(5, 5, 5, 5) };
-
- layout.BeginVertical();
- layout.BeginHorizontal();
- layout.Add(new Label { Text = "Input Format" });
- layout.EndHorizontal();
-
- layout.BeginHorizontal();
- layout.Add(InputTypeSelector, true);
- layout.EndHorizontal();
-
- layout.BeginHorizontal();
- layout.Add(new Label { Text = "Output Type" });
- layout.EndHorizontal();
-
- layout.BeginHorizontal();
- layout.Add(OutputTypeSelector, true);
- layout.EndHorizontal();
-
- layout.BeginHorizontal();
- layout.Add(new Label { Text = "Character" });
- layout.EndHorizontal();
-
- layout.BeginHorizontal();
- layout.Add(CharacterSelector, true);
- layout.EndHorizontal();
- layout.EndVertical();
-
- layout.BeginVertical();
- layout.BeginHorizontal();
- layout.Add(new Label { Text = "File to convert" });
- layout.EndHorizontal();
-
- layout.BeginHorizontal();
- layout.Add(FilePathTextBox, true);
- layout.Add(BrowseFileButton);
- layout.EndHorizontal();
- layout.EndVertical();
-
- layout.BeginVertical();
- layout.BeginHorizontal();
- layout.Add(null, true);
- layout.Add(CompressAudioCheckBox);
- layout.Add(ConvertButton);
- layout.EndHorizontal();
- layout.EndVertical();
-
- layout.BeginVertical();
- layout.Add(null, true);
- layout.EndVertical();
-
- return layout;
- }
-
- string MakeHeader(string showName, string outputType, string character)
- {
- string headerOut = $"UST,{USTVersion.ToString()},{showName.Replace(",", "_").Replace(";", "_")},";
- bool fullStage = false;
- switch (outputType)
- {
- case "UST 32 Bits (Single Bot RAE/3st)":
- headerOut += "32,";
- headerOut += "Rockafire Explosion/3-Stage (Single Character),";
- break;
- case "UST 8 Bits (Single Bot Cybers Rosetta)":
- headerOut += "8,";
- headerOut += "Cyberamics (Single Character),";
- break;
- case "UST 256 Bits (Full RAE/3st)":
- headerOut += "256,";
- headerOut += "Rockafire Explosion/3-Stage (Full Stage),";
- fullStage = true;
- break;
- case "UST 256 Bits (Full Cybers Rosetta)":
- headerOut += "256,";
- headerOut += "Cyberamics (Full Stage),";
- fullStage = true;
- break;
- case "UST 8 Bits (Single Bot Cybers)":
- headerOut += "8,";
- headerOut += "Cyberamics (Single Character),";
- break;
- case "UST 256 Bits (Full Cybers)":
- headerOut += "256,";
- headerOut += "Cyberamics (Full Stage),";
- fullStage = true;
- break;
- case "UST 32 Bits (Single Bot Studio C)":
- headerOut += "32,";
- headerOut += "Studio C (Single Character),";
- break;
- case "UST 256 Bits (Full Studio C)":
- headerOut += "256,";
- headerOut += "Studio C (Full Stage),";
- fullStage = true;
- break;
- }
- if (fullStage) headerOut += "All,";
- else headerOut += character + ";";
- return headerOut;
- }
-
- void Event_ChangeInputType()
- {
- switch(InputTypeSelector.SelectedIndex)
- {
- case 0:
- OutputTypeSelector.Items.Clear();
- CharacterSelector.Items.Clear();
- foreach (string s in RAE3stOutputTypes)
- {
- OutputTypeSelector.Items.Add(s);
- }
- break;
- case 1:
- OutputTypeSelector.Items.Clear();
- CharacterSelector.Items.Clear();
- foreach (string s in CyberOutputTypes)
- {
- OutputTypeSelector.Items.Add(s);
- }
- break;
- case 2:
- OutputTypeSelector.Items.Clear();
- CharacterSelector.Items.Clear();
- foreach (string s in StudioCOutputTypes)
- {
- OutputTypeSelector.Items.Add(s);
- }
- break;
- }
- }
-
- void Event_ChangeOutputType()
- {
- switch(InputTypeSelector.SelectedIndex)
- {
- case 0:
- switch(OutputTypeSelector.SelectedIndex)
- {
- case 0:
- CharacterSelector.Items.Clear();
- foreach (string s in RAE3stCharacters)
- {
- CharacterSelector.Items.Add(s);
- }
- CharacterSelector.Enabled = true;
- FullStage = false;
- break;
- case 1:
- CharacterSelector.Items.Clear();
- foreach (string s in CyberCharacters)
- {
- CharacterSelector.Items.Add(s);
- }
- CharacterSelector.Enabled = true;
- FullStage = false;
- break;
- case 2:
- CharacterSelector.Items.Clear();
- CharacterSelector.Enabled = false;
- FullStage = true;
- break;
- case 3:
- CharacterSelector.Items.Clear();
- CharacterSelector.Enabled = false;
- FullStage = true;
- break;
- }
- break;
- case 1:
- switch(OutputTypeSelector.SelectedIndex)
- {
- case 0:
- CharacterSelector.Items.Clear();
- foreach (string s in CyberCharacters)
- {
- CharacterSelector.Items.Add(s);
- }
- CharacterSelector.Enabled = true;
- FullStage = false;
- break;
- case 1:
- CharacterSelector.Items.Clear();
- CharacterSelector.Enabled = false;
- FullStage = true;
- break;
- }
- break;
- case 2:
- switch(OutputTypeSelector.SelectedIndex)
- {
- case 0:
- CharacterSelector.Items.Clear();
- foreach (string s in StudioCCharacters)
- {
- CharacterSelector.Items.Add(s);
- }
- CharacterSelector.Enabled = true;
- FullStage = false;
- break;
- case 1:
- CharacterSelector.Items.Clear();
- CharacterSelector.Enabled = false;
- FullStage = true;
- break;
- }
- break;
- }
- }
-
- void Event_BrowseFileButton()
- {
- OpenFileDialog fileDialog = new OpenFileDialog();
- string[] showFiles = { ".rshw", ".cshw", ".sshw" };
- string[] allFiles = { ".*" };
- fileDialog.Filters.Add(new FileFilter("Show Files (.rshw, .cshw, .sshw)", showFiles));
- fileDialog.Filters.Add(new FileFilter("All Files", allFiles));
- fileDialog.Title = "Select Show File.";
- fileDialog.ShowDialog(this);
- if (File.Exists(fileDialog.FileName)) FilePathTextBox.Text = fileDialog.FileName;
- }
-
- void Event_ConvertFileButton()
- {
- // safeties
- if (InputTypeSelector.SelectedIndex == -1)
- {
- MessageBox.Show("Fatal: You must select an input type.");
- return;
- }
- if (OutputTypeSelector.SelectedIndex == -1)
- {
- MessageBox.Show("Fatal: You must select an output type.");
- return;
- }
- if (CharacterSelector.SelectedIndex == -1 && !FullStage)
- {
- MessageBox.Show("Fatal: You must select a character.");
- return;
- }
- if (FilePathTextBox.Text.Trim() == "")
- {
- MessageBox.Show("Fatal: You must select an input file.");
- return;
- }
- if (!File.Exists(FilePathTextBox.Text.Trim()))
- {
- MessageBox.Show("Fatal: Specified input file does not exist.");
- return;
- }
-
- if (FullStage)
- {
- MessageBox.Show("Fatal: Full Stage mode is not supported at this time.");
- return;
- }
-
- SaveFileDialog fileDialog = new SaveFileDialog();
- fileDialog.Filters.Add(new FileFilter("UST Files (.ust)", new string[]{".ust"}));
- fileDialog.Title = "Select Show File.";
- fileDialog.ShowDialog(this);
- if (fileDialog.FileName.Trim() == "") return;
- string outFilePath = fileDialog.FileName;
-
- // now its actually time to start doing some shit
- string inputType = InputTypeSelector.SelectedKey;
- string outputType = OutputTypeSelector.SelectedKey;
- string filePath = FilePathTextBox.Text.Trim();
- if (inputType == "RSHW File (RR Engine)" || inputType == "CSHW File (RR Engine)" || inputType == "SSHW File (RR Engine)")
- {
- // at some point there should be a warning displayed if the input type does not match the file extension but i dont feel like doing that right now
-
- // rshw time
- RSHWFile file = RSHWLoader.Load(filePath);
- if (file.signalData == null)
- {
- MessageBox.Show("Fatal: This file contains no signal data.");
- return;
- }
- if (file.audioData == null)
- {
- MessageBox.Show("Fatal: This file contains no audio data.");
- 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);
- }
- }
-
- // pick which target bits to use and how many bytes the output should be
- int bitsCount = 0;
- int[] targetBits = { 0 };
- switch (outputType)
- {
- case "UST 32 Bits (Single Bot RAE/3st)":
- bitsCount = 32;
- targetBits = SC_RAE3stBitMap[Array.IndexOf(RAE3stCharacters, CharacterSelector.SelectedKey)];
- break;
- case "UST 8 Bits (Single Bot Cybers Rosetta)":
- bitsCount = 8;
- targetBits = SC_CyberBitMapRosetta[Array.IndexOf(CyberCharacters, CharacterSelector.SelectedKey)];
- break;
- case "UST 256 Bits (Full RAE/3st)":
- bitsCount = 256;
- break;
- case "UST 256 Bits (Full Cybers Rosetta)":
- bitsCount = 256;
- break;
- case "UST 8 Bits (Single Bot Cybers)":
- bitsCount = 8;
- targetBits = SC_CyberBitMapR12[Array.IndexOf(CyberCharacters, CharacterSelector.SelectedKey)];
- break;
- case "UST 256 Bits (Full Cybers)":
- bitsCount = 256;
- break;
- case "UST 32 Bits (Single Bot Studio C)":
- bitsCount = 32;
- targetBits = SC_StudioCBitMap[Array.IndexOf(StudioCCharacters, CharacterSelector.SelectedKey)];
- break;
- case "UST 256 Bits (Full Studio C)":
- bitsCount = 256;
- break;
- }
-
- List writeOut = new List();
- foreach (BitArray bits in rshwBits)
- {
- int frameByte = 0;
- for (int i = 0; i < targetBits.Length; i++)
- {
- if (bits.Get(targetBits[i])) frameByte += 1 << i;
- }
- writeOut.Add(frameByte.ToString($"X{(bitsCount/4).ToString()}"));
- }
-
- byte[] audioOut = file.audioData;
- if ((bool)CompressAudioCheckBox.Checked)
- {
- if (File.Exists("tmp.mp3")) File.Delete("tmp.mp3");
- File.WriteAllBytes("tmp.wav", audioOut);
- Process ffmpegProcess = new Process();
- ffmpegProcess.StartInfo.FileName = "ffmpeg";
- ffmpegProcess.StartInfo.Arguments = "-i tmp.wav -c:a mp3 -b:a 128 tmp.mp3";
- ffmpegProcess.Start();
- ffmpegProcess.WaitForExit();
- audioOut = File.ReadAllBytes("tmp.mp3");
- File.Delete("tmp.wav");
- File.Delete("tmp.mp3");
- }
-
- File.WriteAllText(outFilePath, MakeHeader(Path.GetFileNameWithoutExtension(outFilePath), outputType, CharacterSelector.SelectedKey)+String.Join(",", writeOut.ToArray())+";"+Convert.ToBase64String(audioOut));
- }
- MessageBox.Show("Conversion complete!");
- }
-
- int RRtoAPSBit(int rrBit) // aps lower drawer starts at 129 instead of 151
- {
- int outAPSBit = rrBit;
- if (rrBit > 150) outAPSBit = rrBit - 22;
- return outAPSBit;
- }
- }
-}
diff --git a/PC3Player/PC3Player.sln b/PC3Player/PC3Player.sln
new file mode 100644
index 0000000..d93fe6e
--- /dev/null
+++ b/PC3Player/PC3Player.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.14.36221.1 d17.14
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PC3Player", "PC3Player\PC3Player.csproj", "{13092811-9CBA-4FD5-B780-E67E14221992}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {13092811-9CBA-4FD5-B780-E67E14221992}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {13092811-9CBA-4FD5-B780-E67E14221992}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {13092811-9CBA-4FD5-B780-E67E14221992}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {13092811-9CBA-4FD5-B780-E67E14221992}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {7BE19417-D601-45AA-B189-5AC9C4B041B6}
+ EndGlobalSection
+EndGlobal
diff --git a/PC3Player/PC3Player/AdvancedSettingsForm.Designer.cs b/PC3Player/PC3Player/AdvancedSettingsForm.Designer.cs
new file mode 100644
index 0000000..86739b4
--- /dev/null
+++ b/PC3Player/PC3Player/AdvancedSettingsForm.Designer.cs
@@ -0,0 +1,829 @@
+namespace PC3Player
+{
+ partial class AdvancedSettingsForm
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ components = new System.ComponentModel.Container();
+ PlaylistPlaybackGroupBox = new GroupBox();
+ LoopCheckBox = new CheckBox();
+ IntermissionUnitDropDown = new ComboBox();
+ IntermissionTimeCounter = new NumericUpDown();
+ IntermissionCheckBox = new CheckBox();
+ label2 = new Label();
+ ShowEndedDropDown = new ComboBox();
+ label1 = new Label();
+ PlaylistStartedDropDown = new ComboBox();
+ ShowSelectorGroupBox = new GroupBox();
+ AddSkitButton = new Button();
+ SkitCheckBox = new CheckBox();
+ label5 = new Label();
+ AlreadyPlayingDropDown = new ComboBox();
+ CooldownUnitDropDown = new ComboBox();
+ CooldownTimeCounter = new NumericUpDown();
+ CooldownCheckBox = new CheckBox();
+ label3 = new Label();
+ SelectedShowEndDropDown = new ComboBox();
+ label4 = new Label();
+ ButtonPressDropDown = new ComboBox();
+ ShowSelectorAssignmentGroupBox = new GroupBox();
+ AssignmentPanel = new Panel();
+ ButtonAssignDropDown1 = new ComboBox();
+ ButtonAssignDropDown2 = new ComboBox();
+ ButtonAssignDropDown3 = new ComboBox();
+ ButtonAssignDropDown4 = new ComboBox();
+ ButtonAssignDropDown5 = new ComboBox();
+ ButtonAssignDropDown6 = new ComboBox();
+ ButtonAssignDropDown7 = new ComboBox();
+ ButtonAssignDropDown8 = new ComboBox();
+ ButtonAssignDropDown9 = new ComboBox();
+ ButtonAssignDropDown10 = new ComboBox();
+ ButtonAssignDropDown11 = new ComboBox();
+ ButtonAssignDropDown12 = new ComboBox();
+ label14 = new Label();
+ label15 = new Label();
+ label16 = new Label();
+ label17 = new Label();
+ label10 = new Label();
+ label11 = new Label();
+ label12 = new Label();
+ label13 = new Label();
+ label8 = new Label();
+ label9 = new Label();
+ label7 = new Label();
+ label6 = new Label();
+ SkitListView = new ListView();
+ NameColumnHeader = new ColumnHeader();
+ LengthColumnHeader = new ColumnHeader();
+ SkitContextMenu = new ContextMenuStrip(components);
+ RemoveButton = new ToolStripMenuItem();
+ SaveButton = new Button();
+ CancelButton = new Button();
+ SelectShowFileDialog = new OpenFileDialog();
+ PlaybackGroupBox = new GroupBox();
+ label20 = new Label();
+ label19 = new Label();
+ label18 = new Label();
+ ResyncTimeOption = new NumericUpDown();
+ FrameShiftOption = new NumericUpDown();
+ FrameSkipOption = new NumericUpDown();
+ PlaylistPlaybackGroupBox.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)IntermissionTimeCounter).BeginInit();
+ ShowSelectorGroupBox.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)CooldownTimeCounter).BeginInit();
+ ShowSelectorAssignmentGroupBox.SuspendLayout();
+ AssignmentPanel.SuspendLayout();
+ SkitContextMenu.SuspendLayout();
+ PlaybackGroupBox.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)ResyncTimeOption).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)FrameShiftOption).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)FrameSkipOption).BeginInit();
+ SuspendLayout();
+ //
+ // PlaylistPlaybackGroupBox
+ //
+ PlaylistPlaybackGroupBox.Controls.Add(LoopCheckBox);
+ PlaylistPlaybackGroupBox.Controls.Add(IntermissionUnitDropDown);
+ PlaylistPlaybackGroupBox.Controls.Add(IntermissionTimeCounter);
+ PlaylistPlaybackGroupBox.Controls.Add(IntermissionCheckBox);
+ PlaylistPlaybackGroupBox.Controls.Add(label2);
+ PlaylistPlaybackGroupBox.Controls.Add(ShowEndedDropDown);
+ PlaylistPlaybackGroupBox.Controls.Add(label1);
+ PlaylistPlaybackGroupBox.Controls.Add(PlaylistStartedDropDown);
+ PlaylistPlaybackGroupBox.Location = new Point(12, 12);
+ PlaylistPlaybackGroupBox.Name = "PlaylistPlaybackGroupBox";
+ PlaylistPlaybackGroupBox.Size = new Size(350, 138);
+ PlaylistPlaybackGroupBox.TabIndex = 0;
+ PlaylistPlaybackGroupBox.TabStop = false;
+ PlaylistPlaybackGroupBox.Text = "Playlist Playback";
+ //
+ // LoopCheckBox
+ //
+ LoopCheckBox.AutoSize = true;
+ LoopCheckBox.Location = new Point(6, 111);
+ LoopCheckBox.Name = "LoopCheckBox";
+ LoopCheckBox.Size = new Size(162, 19);
+ LoopCheckBox.TabIndex = 5;
+ LoopCheckBox.Text = "Loop when Playlist is over";
+ LoopCheckBox.UseVisualStyleBackColor = true;
+ //
+ // IntermissionUnitDropDown
+ //
+ IntermissionUnitDropDown.DropDownStyle = ComboBoxStyle.DropDownList;
+ IntermissionUnitDropDown.FormattingEnabled = true;
+ IntermissionUnitDropDown.Items.AddRange(new object[] { "Minutes", "Seconds" });
+ IntermissionUnitDropDown.Location = new Point(250, 80);
+ IntermissionUnitDropDown.Name = "IntermissionUnitDropDown";
+ IntermissionUnitDropDown.Size = new Size(94, 23);
+ IntermissionUnitDropDown.TabIndex = 4;
+ //
+ // IntermissionTimeCounter
+ //
+ IntermissionTimeCounter.Location = new Point(194, 80);
+ IntermissionTimeCounter.Maximum = new decimal(new int[] { 60, 0, 0, 0 });
+ IntermissionTimeCounter.Name = "IntermissionTimeCounter";
+ IntermissionTimeCounter.Size = new Size(50, 23);
+ IntermissionTimeCounter.TabIndex = 3;
+ //
+ // IntermissionCheckBox
+ //
+ IntermissionCheckBox.AutoSize = true;
+ IntermissionCheckBox.Location = new Point(6, 82);
+ IntermissionCheckBox.Name = "IntermissionCheckBox";
+ IntermissionCheckBox.Size = new Size(135, 19);
+ IntermissionCheckBox.TabIndex = 2;
+ IntermissionCheckBox.Text = "Wait between Shows";
+ IntermissionCheckBox.UseVisualStyleBackColor = true;
+ IntermissionCheckBox.CheckedChanged += IntermissionCheckBox_CheckedChanged;
+ //
+ // label2
+ //
+ label2.AutoSize = true;
+ label2.Location = new Point(6, 54);
+ label2.Name = "label2";
+ label2.Size = new Size(107, 15);
+ label2.TabIndex = 3;
+ label2.Text = "When a Show ends";
+ //
+ // ShowEndedDropDown
+ //
+ ShowEndedDropDown.DropDownStyle = ComboBoxStyle.DropDownList;
+ ShowEndedDropDown.FormattingEnabled = true;
+ ShowEndedDropDown.Items.AddRange(new object[] { "Play Next Show", "Play Random Show", "Repeat Show", "Stop Playlist" });
+ ShowEndedDropDown.Location = new Point(194, 51);
+ ShowEndedDropDown.Name = "ShowEndedDropDown";
+ ShowEndedDropDown.Size = new Size(150, 23);
+ ShowEndedDropDown.TabIndex = 1;
+ //
+ // label1
+ //
+ label1.AutoSize = true;
+ label1.Location = new Point(6, 25);
+ label1.Name = "label1";
+ label1.Size = new Size(128, 15);
+ label1.TabIndex = 1;
+ label1.Text = "When Playlist is started";
+ //
+ // PlaylistStartedDropDown
+ //
+ PlaylistStartedDropDown.DropDownStyle = ComboBoxStyle.DropDownList;
+ PlaylistStartedDropDown.FormattingEnabled = true;
+ PlaylistStartedDropDown.Items.AddRange(new object[] { "Play First Show", "Play Random Show" });
+ PlaylistStartedDropDown.Location = new Point(194, 22);
+ PlaylistStartedDropDown.Name = "PlaylistStartedDropDown";
+ PlaylistStartedDropDown.Size = new Size(150, 23);
+ PlaylistStartedDropDown.TabIndex = 0;
+ //
+ // ShowSelectorGroupBox
+ //
+ ShowSelectorGroupBox.Controls.Add(AddSkitButton);
+ ShowSelectorGroupBox.Controls.Add(SkitCheckBox);
+ ShowSelectorGroupBox.Controls.Add(label5);
+ ShowSelectorGroupBox.Controls.Add(AlreadyPlayingDropDown);
+ ShowSelectorGroupBox.Controls.Add(CooldownUnitDropDown);
+ ShowSelectorGroupBox.Controls.Add(CooldownTimeCounter);
+ ShowSelectorGroupBox.Controls.Add(CooldownCheckBox);
+ ShowSelectorGroupBox.Controls.Add(label3);
+ ShowSelectorGroupBox.Controls.Add(SelectedShowEndDropDown);
+ ShowSelectorGroupBox.Controls.Add(label4);
+ ShowSelectorGroupBox.Controls.Add(ButtonPressDropDown);
+ ShowSelectorGroupBox.Location = new Point(12, 156);
+ ShowSelectorGroupBox.Name = "ShowSelectorGroupBox";
+ ShowSelectorGroupBox.Size = new Size(350, 165);
+ ShowSelectorGroupBox.TabIndex = 1;
+ ShowSelectorGroupBox.TabStop = false;
+ ShowSelectorGroupBox.Text = "Show Selector";
+ //
+ // AddSkitButton
+ //
+ AddSkitButton.Location = new Point(250, 136);
+ AddSkitButton.Name = "AddSkitButton";
+ AddSkitButton.Size = new Size(94, 23);
+ AddSkitButton.TabIndex = 7;
+ AddSkitButton.Text = "Add Skit";
+ AddSkitButton.UseVisualStyleBackColor = true;
+ AddSkitButton.Click += AddSkitButton_Click;
+ //
+ // SkitCheckBox
+ //
+ SkitCheckBox.AutoSize = true;
+ SkitCheckBox.Location = new Point(6, 138);
+ SkitCheckBox.Name = "SkitCheckBox";
+ SkitCheckBox.Size = new Size(231, 19);
+ SkitCheckBox.TabIndex = 6;
+ SkitCheckBox.Text = "Play random Skit before Selected Show";
+ SkitCheckBox.UseVisualStyleBackColor = true;
+ //
+ // label5
+ //
+ label5.AutoSize = true;
+ label5.Location = new Point(6, 54);
+ label5.Name = "label5";
+ label5.Size = new Size(149, 15);
+ label5.TabIndex = 8;
+ label5.Text = "If a Show is already playing";
+ //
+ // AlreadyPlayingDropDown
+ //
+ AlreadyPlayingDropDown.DropDownStyle = ComboBoxStyle.DropDownList;
+ AlreadyPlayingDropDown.FormattingEnabled = true;
+ AlreadyPlayingDropDown.Items.AddRange(new object[] { "Stop current", "Play after finished", "Ignore button" });
+ AlreadyPlayingDropDown.Location = new Point(194, 51);
+ AlreadyPlayingDropDown.Name = "AlreadyPlayingDropDown";
+ AlreadyPlayingDropDown.Size = new Size(150, 23);
+ AlreadyPlayingDropDown.TabIndex = 1;
+ //
+ // CooldownUnitDropDown
+ //
+ CooldownUnitDropDown.DropDownStyle = ComboBoxStyle.DropDownList;
+ CooldownUnitDropDown.FormattingEnabled = true;
+ CooldownUnitDropDown.Items.AddRange(new object[] { "Minutes", "Seconds" });
+ CooldownUnitDropDown.Location = new Point(250, 107);
+ CooldownUnitDropDown.Name = "CooldownUnitDropDown";
+ CooldownUnitDropDown.Size = new Size(94, 23);
+ CooldownUnitDropDown.TabIndex = 5;
+ //
+ // CooldownTimeCounter
+ //
+ CooldownTimeCounter.Location = new Point(194, 107);
+ CooldownTimeCounter.Maximum = new decimal(new int[] { 60, 0, 0, 0 });
+ CooldownTimeCounter.Name = "CooldownTimeCounter";
+ CooldownTimeCounter.Size = new Size(50, 23);
+ CooldownTimeCounter.TabIndex = 4;
+ //
+ // CooldownCheckBox
+ //
+ CooldownCheckBox.AutoSize = true;
+ CooldownCheckBox.Location = new Point(6, 109);
+ CooldownCheckBox.Name = "CooldownCheckBox";
+ CooldownCheckBox.Size = new Size(185, 19);
+ CooldownCheckBox.TabIndex = 3;
+ CooldownCheckBox.Text = "Cooldown between Selections";
+ CooldownCheckBox.UseVisualStyleBackColor = true;
+ CooldownCheckBox.CheckedChanged += CooldownCheckBox_CheckedChanged;
+ //
+ // label3
+ //
+ label3.AutoSize = true;
+ label3.Location = new Point(6, 83);
+ label3.Name = "label3";
+ label3.Size = new Size(154, 15);
+ label3.TabIndex = 3;
+ label3.Text = "When a Selected Show ends";
+ //
+ // SelectedShowEndDropDown
+ //
+ SelectedShowEndDropDown.DropDownStyle = ComboBoxStyle.DropDownList;
+ SelectedShowEndDropDown.FormattingEnabled = true;
+ SelectedShowEndDropDown.Items.AddRange(new object[] { "Return to Playlist", "Do Nothing" });
+ SelectedShowEndDropDown.Location = new Point(194, 80);
+ SelectedShowEndDropDown.Name = "SelectedShowEndDropDown";
+ SelectedShowEndDropDown.Size = new Size(150, 23);
+ SelectedShowEndDropDown.TabIndex = 2;
+ //
+ // label4
+ //
+ label4.AutoSize = true;
+ label4.Location = new Point(6, 25);
+ label4.Name = "label4";
+ label4.Size = new Size(140, 15);
+ label4.TabIndex = 1;
+ label4.Text = "When a Button is pressed";
+ //
+ // ButtonPressDropDown
+ //
+ ButtonPressDropDown.DropDownStyle = ComboBoxStyle.DropDownList;
+ ButtonPressDropDown.FormattingEnabled = true;
+ ButtonPressDropDown.Items.AddRange(new object[] { "Play Assigned Show", "Play Random Show" });
+ ButtonPressDropDown.Location = new Point(194, 22);
+ ButtonPressDropDown.Name = "ButtonPressDropDown";
+ ButtonPressDropDown.Size = new Size(150, 23);
+ ButtonPressDropDown.TabIndex = 0;
+ //
+ // ShowSelectorAssignmentGroupBox
+ //
+ ShowSelectorAssignmentGroupBox.Controls.Add(AssignmentPanel);
+ ShowSelectorAssignmentGroupBox.Controls.Add(label14);
+ ShowSelectorAssignmentGroupBox.Controls.Add(label15);
+ ShowSelectorAssignmentGroupBox.Controls.Add(label16);
+ ShowSelectorAssignmentGroupBox.Controls.Add(label17);
+ ShowSelectorAssignmentGroupBox.Controls.Add(label10);
+ ShowSelectorAssignmentGroupBox.Controls.Add(label11);
+ ShowSelectorAssignmentGroupBox.Controls.Add(label12);
+ ShowSelectorAssignmentGroupBox.Controls.Add(label13);
+ ShowSelectorAssignmentGroupBox.Controls.Add(label8);
+ ShowSelectorAssignmentGroupBox.Controls.Add(label9);
+ ShowSelectorAssignmentGroupBox.Controls.Add(label7);
+ ShowSelectorAssignmentGroupBox.Controls.Add(label6);
+ ShowSelectorAssignmentGroupBox.Location = new Point(368, 12);
+ ShowSelectorAssignmentGroupBox.Name = "ShowSelectorAssignmentGroupBox";
+ ShowSelectorAssignmentGroupBox.Size = new Size(256, 370);
+ ShowSelectorAssignmentGroupBox.TabIndex = 3;
+ ShowSelectorAssignmentGroupBox.TabStop = false;
+ ShowSelectorAssignmentGroupBox.Text = "Show Selector Assignment";
+ //
+ // AssignmentPanel
+ //
+ AssignmentPanel.Controls.Add(ButtonAssignDropDown1);
+ AssignmentPanel.Controls.Add(ButtonAssignDropDown2);
+ AssignmentPanel.Controls.Add(ButtonAssignDropDown3);
+ AssignmentPanel.Controls.Add(ButtonAssignDropDown4);
+ AssignmentPanel.Controls.Add(ButtonAssignDropDown5);
+ AssignmentPanel.Controls.Add(ButtonAssignDropDown6);
+ AssignmentPanel.Controls.Add(ButtonAssignDropDown7);
+ AssignmentPanel.Controls.Add(ButtonAssignDropDown8);
+ AssignmentPanel.Controls.Add(ButtonAssignDropDown9);
+ AssignmentPanel.Controls.Add(ButtonAssignDropDown10);
+ AssignmentPanel.Controls.Add(ButtonAssignDropDown11);
+ AssignmentPanel.Controls.Add(ButtonAssignDropDown12);
+ AssignmentPanel.Location = new Point(100, 22);
+ AssignmentPanel.Name = "AssignmentPanel";
+ AssignmentPanel.Size = new Size(150, 342);
+ AssignmentPanel.TabIndex = 0;
+ //
+ // ButtonAssignDropDown1
+ //
+ ButtonAssignDropDown1.DropDownStyle = ComboBoxStyle.DropDownList;
+ ButtonAssignDropDown1.FormattingEnabled = true;
+ ButtonAssignDropDown1.Items.AddRange(new object[] { "(None)" });
+ ButtonAssignDropDown1.Location = new Point(0, 0);
+ ButtonAssignDropDown1.Name = "ButtonAssignDropDown1";
+ ButtonAssignDropDown1.Size = new Size(150, 23);
+ ButtonAssignDropDown1.TabIndex = 0;
+ //
+ // ButtonAssignDropDown2
+ //
+ ButtonAssignDropDown2.DropDownStyle = ComboBoxStyle.DropDownList;
+ ButtonAssignDropDown2.FormattingEnabled = true;
+ ButtonAssignDropDown2.Items.AddRange(new object[] { "(None)" });
+ ButtonAssignDropDown2.Location = new Point(0, 29);
+ ButtonAssignDropDown2.Name = "ButtonAssignDropDown2";
+ ButtonAssignDropDown2.Size = new Size(150, 23);
+ ButtonAssignDropDown2.TabIndex = 1;
+ //
+ // ButtonAssignDropDown3
+ //
+ ButtonAssignDropDown3.DropDownStyle = ComboBoxStyle.DropDownList;
+ ButtonAssignDropDown3.FormattingEnabled = true;
+ ButtonAssignDropDown3.Items.AddRange(new object[] { "(None)" });
+ ButtonAssignDropDown3.Location = new Point(0, 58);
+ ButtonAssignDropDown3.Name = "ButtonAssignDropDown3";
+ ButtonAssignDropDown3.Size = new Size(150, 23);
+ ButtonAssignDropDown3.TabIndex = 2;
+ //
+ // ButtonAssignDropDown4
+ //
+ ButtonAssignDropDown4.DropDownStyle = ComboBoxStyle.DropDownList;
+ ButtonAssignDropDown4.FormattingEnabled = true;
+ ButtonAssignDropDown4.Items.AddRange(new object[] { "(None)" });
+ ButtonAssignDropDown4.Location = new Point(0, 87);
+ ButtonAssignDropDown4.Name = "ButtonAssignDropDown4";
+ ButtonAssignDropDown4.Size = new Size(150, 23);
+ ButtonAssignDropDown4.TabIndex = 3;
+ //
+ // ButtonAssignDropDown5
+ //
+ ButtonAssignDropDown5.DropDownStyle = ComboBoxStyle.DropDownList;
+ ButtonAssignDropDown5.FormattingEnabled = true;
+ ButtonAssignDropDown5.Items.AddRange(new object[] { "(None)" });
+ ButtonAssignDropDown5.Location = new Point(0, 116);
+ ButtonAssignDropDown5.Name = "ButtonAssignDropDown5";
+ ButtonAssignDropDown5.Size = new Size(150, 23);
+ ButtonAssignDropDown5.TabIndex = 4;
+ //
+ // ButtonAssignDropDown6
+ //
+ ButtonAssignDropDown6.DropDownStyle = ComboBoxStyle.DropDownList;
+ ButtonAssignDropDown6.FormattingEnabled = true;
+ ButtonAssignDropDown6.Items.AddRange(new object[] { "(None)" });
+ ButtonAssignDropDown6.Location = new Point(0, 145);
+ ButtonAssignDropDown6.Name = "ButtonAssignDropDown6";
+ ButtonAssignDropDown6.Size = new Size(150, 23);
+ ButtonAssignDropDown6.TabIndex = 5;
+ //
+ // ButtonAssignDropDown7
+ //
+ ButtonAssignDropDown7.DropDownStyle = ComboBoxStyle.DropDownList;
+ ButtonAssignDropDown7.FormattingEnabled = true;
+ ButtonAssignDropDown7.Items.AddRange(new object[] { "(None)" });
+ ButtonAssignDropDown7.Location = new Point(0, 174);
+ ButtonAssignDropDown7.Name = "ButtonAssignDropDown7";
+ ButtonAssignDropDown7.Size = new Size(150, 23);
+ ButtonAssignDropDown7.TabIndex = 6;
+ //
+ // ButtonAssignDropDown8
+ //
+ ButtonAssignDropDown8.DropDownStyle = ComboBoxStyle.DropDownList;
+ ButtonAssignDropDown8.FormattingEnabled = true;
+ ButtonAssignDropDown8.Items.AddRange(new object[] { "(None)" });
+ ButtonAssignDropDown8.Location = new Point(0, 203);
+ ButtonAssignDropDown8.Name = "ButtonAssignDropDown8";
+ ButtonAssignDropDown8.Size = new Size(150, 23);
+ ButtonAssignDropDown8.TabIndex = 7;
+ //
+ // ButtonAssignDropDown9
+ //
+ ButtonAssignDropDown9.DropDownStyle = ComboBoxStyle.DropDownList;
+ ButtonAssignDropDown9.FormattingEnabled = true;
+ ButtonAssignDropDown9.Items.AddRange(new object[] { "(None)" });
+ ButtonAssignDropDown9.Location = new Point(0, 232);
+ ButtonAssignDropDown9.Name = "ButtonAssignDropDown9";
+ ButtonAssignDropDown9.Size = new Size(150, 23);
+ ButtonAssignDropDown9.TabIndex = 8;
+ //
+ // ButtonAssignDropDown10
+ //
+ ButtonAssignDropDown10.DropDownStyle = ComboBoxStyle.DropDownList;
+ ButtonAssignDropDown10.FormattingEnabled = true;
+ ButtonAssignDropDown10.Items.AddRange(new object[] { "(None)" });
+ ButtonAssignDropDown10.Location = new Point(0, 261);
+ ButtonAssignDropDown10.Name = "ButtonAssignDropDown10";
+ ButtonAssignDropDown10.Size = new Size(150, 23);
+ ButtonAssignDropDown10.TabIndex = 9;
+ //
+ // ButtonAssignDropDown11
+ //
+ ButtonAssignDropDown11.DropDownStyle = ComboBoxStyle.DropDownList;
+ ButtonAssignDropDown11.FormattingEnabled = true;
+ ButtonAssignDropDown11.Items.AddRange(new object[] { "(None)" });
+ ButtonAssignDropDown11.Location = new Point(0, 290);
+ ButtonAssignDropDown11.Name = "ButtonAssignDropDown11";
+ ButtonAssignDropDown11.Size = new Size(150, 23);
+ ButtonAssignDropDown11.TabIndex = 10;
+ //
+ // ButtonAssignDropDown12
+ //
+ ButtonAssignDropDown12.DropDownStyle = ComboBoxStyle.DropDownList;
+ ButtonAssignDropDown12.FormattingEnabled = true;
+ ButtonAssignDropDown12.Items.AddRange(new object[] { "(None)" });
+ ButtonAssignDropDown12.Location = new Point(0, 319);
+ ButtonAssignDropDown12.Name = "ButtonAssignDropDown12";
+ ButtonAssignDropDown12.Size = new Size(150, 23);
+ ButtonAssignDropDown12.TabIndex = 11;
+ //
+ // label14
+ //
+ label14.AutoSize = true;
+ label14.Location = new Point(6, 344);
+ label14.Name = "label14";
+ label14.Size = new Size(58, 15);
+ label14.TabIndex = 30;
+ label14.Text = "Button 12";
+ //
+ // label15
+ //
+ label15.AutoSize = true;
+ label15.Location = new Point(6, 315);
+ label15.Name = "label15";
+ label15.Size = new Size(58, 15);
+ label15.TabIndex = 28;
+ label15.Text = "Button 11";
+ //
+ // label16
+ //
+ label16.AutoSize = true;
+ label16.Location = new Point(6, 286);
+ label16.Name = "label16";
+ label16.Size = new Size(58, 15);
+ label16.TabIndex = 26;
+ label16.Text = "Button 10";
+ //
+ // label17
+ //
+ label17.AutoSize = true;
+ label17.Location = new Point(6, 257);
+ label17.Name = "label17";
+ label17.Size = new Size(52, 15);
+ label17.TabIndex = 24;
+ label17.Text = "Button 9";
+ //
+ // label10
+ //
+ label10.AutoSize = true;
+ label10.Location = new Point(6, 228);
+ label10.Name = "label10";
+ label10.Size = new Size(52, 15);
+ label10.TabIndex = 22;
+ label10.Text = "Button 8";
+ //
+ // label11
+ //
+ label11.AutoSize = true;
+ label11.Location = new Point(6, 199);
+ label11.Name = "label11";
+ label11.Size = new Size(52, 15);
+ label11.TabIndex = 20;
+ label11.Text = "Button 7";
+ //
+ // label12
+ //
+ label12.AutoSize = true;
+ label12.Location = new Point(6, 170);
+ label12.Name = "label12";
+ label12.Size = new Size(52, 15);
+ label12.TabIndex = 18;
+ label12.Text = "Button 6";
+ //
+ // label13
+ //
+ label13.AutoSize = true;
+ label13.Location = new Point(6, 141);
+ label13.Name = "label13";
+ label13.Size = new Size(52, 15);
+ label13.TabIndex = 16;
+ label13.Text = "Button 5";
+ //
+ // label8
+ //
+ label8.AutoSize = true;
+ label8.Location = new Point(6, 112);
+ label8.Name = "label8";
+ label8.Size = new Size(52, 15);
+ label8.TabIndex = 14;
+ label8.Text = "Button 4";
+ //
+ // label9
+ //
+ label9.AutoSize = true;
+ label9.Location = new Point(6, 83);
+ label9.Name = "label9";
+ label9.Size = new Size(52, 15);
+ label9.TabIndex = 12;
+ label9.Text = "Button 3";
+ //
+ // label7
+ //
+ label7.AutoSize = true;
+ label7.Location = new Point(6, 54);
+ label7.Name = "label7";
+ label7.Size = new Size(52, 15);
+ label7.TabIndex = 10;
+ label7.Text = "Button 2";
+ //
+ // label6
+ //
+ label6.AutoSize = true;
+ label6.Location = new Point(6, 25);
+ label6.Name = "label6";
+ label6.Size = new Size(52, 15);
+ label6.TabIndex = 8;
+ label6.Text = "Button 1";
+ //
+ // SkitListView
+ //
+ SkitListView.AutoArrange = false;
+ SkitListView.Columns.AddRange(new ColumnHeader[] { NameColumnHeader, LengthColumnHeader });
+ SkitListView.ContextMenuStrip = SkitContextMenu;
+ SkitListView.GridLines = true;
+ SkitListView.HeaderStyle = ColumnHeaderStyle.Nonclickable;
+ SkitListView.Location = new Point(12, 327);
+ SkitListView.MultiSelect = false;
+ SkitListView.Name = "SkitListView";
+ SkitListView.Size = new Size(350, 201);
+ SkitListView.TabIndex = 2;
+ SkitListView.UseCompatibleStateImageBehavior = false;
+ SkitListView.View = View.Details;
+ //
+ // NameColumnHeader
+ //
+ NameColumnHeader.Text = "Skit Name";
+ NameColumnHeader.Width = 260;
+ //
+ // LengthColumnHeader
+ //
+ LengthColumnHeader.Text = "Length";
+ //
+ // SkitContextMenu
+ //
+ SkitContextMenu.Items.AddRange(new ToolStripItem[] { RemoveButton });
+ SkitContextMenu.Name = "ShowContextMenu";
+ SkitContextMenu.Size = new Size(118, 26);
+ //
+ // RemoveButton
+ //
+ RemoveButton.Name = "RemoveButton";
+ RemoveButton.Size = new Size(117, 22);
+ RemoveButton.Text = "Remove";
+ RemoveButton.Click += RemoveButton_Click;
+ //
+ // SaveButton
+ //
+ SaveButton.DialogResult = DialogResult.OK;
+ SaveButton.Location = new Point(549, 503);
+ SaveButton.Name = "SaveButton";
+ SaveButton.Size = new Size(75, 25);
+ SaveButton.TabIndex = 10;
+ SaveButton.Text = "Save";
+ SaveButton.UseVisualStyleBackColor = true;
+ SaveButton.Click += SaveButton_Click;
+ //
+ // CancelButton
+ //
+ CancelButton.DialogResult = DialogResult.Cancel;
+ CancelButton.Location = new Point(468, 503);
+ CancelButton.Name = "CancelButton";
+ CancelButton.Size = new Size(75, 25);
+ CancelButton.TabIndex = 11;
+ CancelButton.Text = "Cancel";
+ CancelButton.UseVisualStyleBackColor = true;
+ //
+ // SelectShowFileDialog
+ //
+ SelectShowFileDialog.Filter = "UST Showtapes|*.ust";
+ SelectShowFileDialog.Multiselect = true;
+ //
+ // PlaybackGroupBox
+ //
+ PlaybackGroupBox.Controls.Add(label20);
+ PlaybackGroupBox.Controls.Add(label19);
+ PlaybackGroupBox.Controls.Add(label18);
+ PlaybackGroupBox.Controls.Add(ResyncTimeOption);
+ PlaybackGroupBox.Controls.Add(FrameShiftOption);
+ PlaybackGroupBox.Controls.Add(FrameSkipOption);
+ PlaybackGroupBox.Location = new Point(368, 388);
+ PlaybackGroupBox.Name = "PlaybackGroupBox";
+ PlaybackGroupBox.Size = new Size(256, 109);
+ PlaybackGroupBox.TabIndex = 4;
+ PlaybackGroupBox.TabStop = false;
+ PlaybackGroupBox.Text = "Tracking Adjustments";
+ //
+ // label20
+ //
+ label20.AutoSize = true;
+ label20.Location = new Point(6, 82);
+ label20.Name = "label20";
+ label20.Size = new Size(67, 15);
+ label20.TabIndex = 5;
+ label20.Text = "Frame Shift";
+ //
+ // label19
+ //
+ label19.AutoSize = true;
+ label19.Location = new Point(6, 53);
+ label19.Name = "label19";
+ label19.Size = new Size(73, 15);
+ label19.TabIndex = 4;
+ label19.Text = "Resync Time";
+ //
+ // label18
+ //
+ label18.AutoSize = true;
+ label18.Location = new Point(6, 24);
+ label18.Name = "label18";
+ label18.Size = new Size(65, 15);
+ label18.TabIndex = 3;
+ label18.Text = "Frame Skip";
+ //
+ // ResyncTimeOption
+ //
+ ResyncTimeOption.Location = new Point(200, 51);
+ ResyncTimeOption.Maximum = new decimal(new int[] { 60, 0, 0, 0 });
+ ResyncTimeOption.Minimum = new decimal(new int[] { 1, 0, 0, 0 });
+ ResyncTimeOption.Name = "ResyncTimeOption";
+ ResyncTimeOption.Size = new Size(50, 23);
+ ResyncTimeOption.TabIndex = 1;
+ ResyncTimeOption.Value = new decimal(new int[] { 1, 0, 0, 0 });
+ //
+ // FrameShiftOption
+ //
+ FrameShiftOption.Location = new Point(200, 80);
+ FrameShiftOption.Maximum = new decimal(new int[] { 60, 0, 0, 0 });
+ FrameShiftOption.Minimum = new decimal(new int[] { 60, 0, 0, int.MinValue });
+ FrameShiftOption.Name = "FrameShiftOption";
+ FrameShiftOption.Size = new Size(50, 23);
+ FrameShiftOption.TabIndex = 2;
+ //
+ // FrameSkipOption
+ //
+ FrameSkipOption.Location = new Point(200, 22);
+ FrameSkipOption.Maximum = new decimal(new int[] { 10, 0, 0, 0 });
+ FrameSkipOption.Minimum = new decimal(new int[] { 1, 0, 0, 0 });
+ FrameSkipOption.Name = "FrameSkipOption";
+ FrameSkipOption.Size = new Size(50, 23);
+ FrameSkipOption.TabIndex = 0;
+ FrameSkipOption.Value = new decimal(new int[] { 1, 0, 0, 0 });
+ //
+ // AdvancedSettingsForm
+ //
+ AutoScaleDimensions = new SizeF(7F, 15F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(636, 540);
+ Controls.Add(PlaybackGroupBox);
+ Controls.Add(CancelButton);
+ Controls.Add(SaveButton);
+ Controls.Add(SkitListView);
+ Controls.Add(ShowSelectorAssignmentGroupBox);
+ Controls.Add(ShowSelectorGroupBox);
+ Controls.Add(PlaylistPlaybackGroupBox);
+ FormBorderStyle = FormBorderStyle.FixedDialog;
+ MaximizeBox = false;
+ Name = "AdvancedSettingsForm";
+ Text = "Advanced Settings";
+ PlaylistPlaybackGroupBox.ResumeLayout(false);
+ PlaylistPlaybackGroupBox.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)IntermissionTimeCounter).EndInit();
+ ShowSelectorGroupBox.ResumeLayout(false);
+ ShowSelectorGroupBox.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)CooldownTimeCounter).EndInit();
+ ShowSelectorAssignmentGroupBox.ResumeLayout(false);
+ ShowSelectorAssignmentGroupBox.PerformLayout();
+ AssignmentPanel.ResumeLayout(false);
+ SkitContextMenu.ResumeLayout(false);
+ PlaybackGroupBox.ResumeLayout(false);
+ PlaybackGroupBox.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)ResyncTimeOption).EndInit();
+ ((System.ComponentModel.ISupportInitialize)FrameShiftOption).EndInit();
+ ((System.ComponentModel.ISupportInitialize)FrameSkipOption).EndInit();
+ ResumeLayout(false);
+ }
+
+ #endregion
+
+ private GroupBox PlaylistPlaybackGroupBox;
+ private Label label1;
+ private ComboBox PlaylistStartedDropDown;
+ private ComboBox ShowEndedDropDown;
+ private ComboBox IntermissionUnitDropDown;
+ private NumericUpDown IntermissionTimeCounter;
+ private CheckBox IntermissionCheckBox;
+ private Label label2;
+ private GroupBox ShowSelectorGroupBox;
+ private ComboBox CooldownUnitDropDown;
+ private NumericUpDown CooldownTimeCounter;
+ private CheckBox CooldownCheckBox;
+ private Label label3;
+ private ComboBox SelectedShowEndDropDown;
+ private Label label4;
+ private ComboBox ButtonPressDropDown;
+ private Label label5;
+ private ComboBox AlreadyPlayingDropDown;
+ private CheckBox SkitCheckBox;
+ private Button AddSkitButton;
+ private GroupBox ShowSelectorAssignmentGroupBox;
+ private Label label14;
+ private ComboBox ButtonAssignDropDown12;
+ private Label label15;
+ private ComboBox ButtonAssignDropDown11;
+ private Label label16;
+ private ComboBox ButtonAssignDropDown10;
+ private Label label17;
+ private ComboBox ButtonAssignDropDown9;
+ private Label label10;
+ private ComboBox ButtonAssignDropDown8;
+ private Label label11;
+ private ComboBox ButtonAssignDropDown7;
+ private Label label12;
+ private ComboBox ButtonAssignDropDown6;
+ private Label label13;
+ private ComboBox ButtonAssignDropDown5;
+ private Label label8;
+ private ComboBox ButtonAssignDropDown4;
+ private Label label9;
+ private ComboBox ButtonAssignDropDown3;
+ private Label label7;
+ private ComboBox ButtonAssignDropDown2;
+ private Label label6;
+ private ComboBox ButtonAssignDropDown1;
+ private ListView SkitListView;
+ private ColumnHeader NameColumnHeader;
+ private ColumnHeader LengthColumnHeader;
+ private Button SaveButton;
+ private Button CancelButton;
+ private ContextMenuStrip SkitContextMenu;
+ private ToolStripMenuItem RemoveButton;
+ private OpenFileDialog SelectShowFileDialog;
+ private Panel AssignmentPanel;
+ private CheckBox LoopCheckBox;
+ private GroupBox PlaybackGroupBox;
+ private Label label18;
+ private NumericUpDown ResyncTimeOption;
+ private NumericUpDown FrameShiftOption;
+ private NumericUpDown FrameSkipOption;
+ private Label label20;
+ private Label label19;
+ }
+}
\ No newline at end of file
diff --git a/PC3Player/PC3Player/AdvancedSettingsForm.cs b/PC3Player/PC3Player/AdvancedSettingsForm.cs
new file mode 100644
index 0000000..59d0df6
--- /dev/null
+++ b/PC3Player/PC3Player/AdvancedSettingsForm.cs
@@ -0,0 +1,146 @@
+namespace PC3Player
+{
+ public partial class AdvancedSettingsForm : Form
+ {
+ public PlaylistConfig EditingObject { get; set; }
+ public AdvancedSettingsForm(PlaylistConfig playlist)
+ {
+ InitializeComponent();
+ EditingObject = playlist;
+
+ PlaylistStartedDropDown.SelectedIndex = EditingObject.PlaylistStartOption;
+ ShowEndedDropDown.SelectedIndex = EditingObject.PlaylistShowEndOption;
+ IntermissionCheckBox.Checked = EditingObject.PlaylistIntermissionOption;
+ IntermissionTimeCounter.Value = EditingObject.PlaylistIntermissionTimeOption;
+ IntermissionUnitDropDown.SelectedIndex = EditingObject.PlaylistIntermissionUnitOption;
+ LoopCheckBox.Checked = EditingObject.PlaylistLoopOption;
+
+ ButtonPressDropDown.SelectedIndex = EditingObject.SelectorButtonPressOption;
+ AlreadyPlayingDropDown.SelectedIndex = EditingObject.SelectorShowAlreadyPlayingOption;
+ SelectedShowEndDropDown.SelectedIndex = EditingObject.SelectorShowEndOption;
+ CooldownCheckBox.Checked = EditingObject.SelectorCooldownOption;
+ CooldownTimeCounter.Value = EditingObject.SelectorCooldownTimeOption;
+ CooldownUnitDropDown.SelectedIndex = EditingObject.SelectorCooldownUnitOption;
+ SkitCheckBox.Checked = EditingObject.SelectorPlaySkitOption;
+
+ FrameSkipOption.Value = EditingObject.FramesPerTick;
+ FrameShiftOption.Value = EditingObject.FrameShift;
+ ResyncTimeOption.Value = EditingObject.ResyncSeconds;
+
+ IntermissionTimeCounter.Enabled = IntermissionCheckBox.Checked;
+ IntermissionUnitDropDown.Enabled = IntermissionCheckBox.Checked;
+
+ CooldownTimeCounter.Enabled = CooldownCheckBox.Checked;
+ CooldownUnitDropDown.Enabled = CooldownCheckBox.Checked;
+
+ int i = 0;
+ foreach (ComboBox c in AssignmentPanel.Controls)
+ {
+ foreach (PlaylistShow s in EditingObject.Shows) c.Items.Add(s.Name);
+ if (EditingObject.SelectorAssignments[i] == null) c.SelectedIndex = 0;
+ else c.SelectedIndex = (int)EditingObject.SelectorAssignments[i] + 1;
+ i++;
+ }
+
+ UpdateListView();
+ }
+
+ private void UpdateListView()
+ {
+ SkitListView.Items.Clear();
+ foreach (PlaylistShow s in EditingObject.Skits) SkitListView.Items.Add(new ListViewItem(new[] { s.Name, s.Length }));
+ SkitCheckBox.Enabled = EditingObject.Skits.Count != 0;
+ if (EditingObject.Skits.Count == 0) SkitCheckBox.Checked = false;
+ }
+
+ private void IntermissionCheckBox_CheckedChanged(object sender, EventArgs e)
+ {
+ IntermissionTimeCounter.Enabled = IntermissionCheckBox.Checked;
+ IntermissionUnitDropDown.Enabled = IntermissionCheckBox.Checked;
+ }
+
+ private void CooldownCheckBox_CheckedChanged(object sender, EventArgs e)
+ {
+ CooldownTimeCounter.Enabled = CooldownCheckBox.Checked;
+ CooldownUnitDropDown.Enabled = CooldownCheckBox.Checked;
+ }
+
+ private void RemoveButton_Click(object sender, EventArgs e)
+ {
+ if (SkitListView.SelectedIndices.Count == 0) return;
+ EditingObject.Skits.RemoveAt(SkitListView.SelectedIndices[0]);
+ UpdateListView();
+ }
+
+ private void AddSkitButton_Click(object sender, EventArgs e)
+ {
+ if (!MainForm.ChannelMappingLoaded)
+ {
+ MessageBox.Show("You must load a channel mapping first.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ return;
+ }
+
+ if (SelectShowFileDialog.ShowDialog() == DialogResult.OK)
+ {
+ string tempUSTData = File.ReadAllText(SelectShowFileDialog.FileName);
+ if (!tempUSTData.StartsWith("UST,2,"))
+ {
+ MessageBox.Show("Selected showtape is not a UST version 2 showtape.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+
+ string[] headerData = tempUSTData.Split(';')[0].Split(',');
+ string[] stringyBits = tempUSTData.Split(';')[1].Split(',');
+
+ TimeSpan time = TimeSpan.FromSeconds(stringyBits.Length / 60);
+ string formattedLength = time.ToString(@"hh\:mm\:ss");
+
+ tempUSTData = null;
+ stringyBits = null;
+
+ if (headerData[3] != EditingObject.Mapping.Type)
+ {
+ MessageBox.Show(
+ $"Selected showtape type does not match the loaded Channel Map." +
+ $"\nLoaded Channel Map Type: {EditingObject.Mapping.Type}" +
+ $"\nShowtape Type: {headerData[3]}"
+ , "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+
+ EditingObject.Skits.Add(new PlaylistShow(headerData[2], formattedLength, headerData[3], SelectShowFileDialog.FileName));
+ UpdateListView();
+ }
+ }
+
+ private void SaveButton_Click(object sender, EventArgs e)
+ {
+ EditingObject.PlaylistStartOption = PlaylistStartedDropDown.SelectedIndex;
+ EditingObject.PlaylistShowEndOption = ShowEndedDropDown.SelectedIndex;
+ EditingObject.PlaylistIntermissionOption = IntermissionCheckBox.Checked;
+ EditingObject.PlaylistIntermissionTimeOption = (int)IntermissionTimeCounter.Value;
+ EditingObject.PlaylistIntermissionUnitOption = IntermissionUnitDropDown.SelectedIndex;
+ EditingObject.PlaylistLoopOption = LoopCheckBox.Checked;
+
+ EditingObject.SelectorButtonPressOption = ButtonPressDropDown.SelectedIndex;
+ EditingObject.SelectorShowAlreadyPlayingOption = AlreadyPlayingDropDown.SelectedIndex;
+ EditingObject.SelectorShowEndOption = SelectedShowEndDropDown.SelectedIndex;
+ EditingObject.SelectorCooldownOption = CooldownCheckBox.Checked;
+ EditingObject.SelectorCooldownTimeOption = (int)CooldownTimeCounter.Value;
+ EditingObject.SelectorCooldownUnitOption = CooldownUnitDropDown.SelectedIndex;
+ EditingObject.SelectorPlaySkitOption = SkitCheckBox.Checked;
+
+ EditingObject.ResyncSeconds = (int)ResyncTimeOption.Value;
+ EditingObject.FrameShift = (int)FrameShiftOption.Value;
+ EditingObject.FramesPerTick = (int)FrameSkipOption.Value;
+
+ int i = 0;
+ foreach (ComboBox c in AssignmentPanel.Controls)
+ {
+ if (c.SelectedIndex == 0) EditingObject.SelectorAssignments[i] = null;
+ else EditingObject.SelectorAssignments[i] = c.SelectedIndex - 1;
+ i++;
+ }
+ }
+ }
+}
diff --git a/PC3Player/PC3Player/AdvancedSettingsForm.resx b/PC3Player/PC3Player/AdvancedSettingsForm.resx
new file mode 100644
index 0000000..d429170
--- /dev/null
+++ b/PC3Player/PC3Player/AdvancedSettingsForm.resx
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 51, 28
+
+
+ 215, 23
+
+
\ No newline at end of file
diff --git a/PC3Player/PC3Player/Channel Mappings/BeachBearJasper.pcm b/PC3Player/PC3Player/Channel Mappings/BeachBearJasper.pcm
new file mode 100644
index 0000000..e9e947d
--- /dev/null
+++ b/PC3Player/PC3Player/Channel Mappings/BeachBearJasper.pcm
@@ -0,0 +1 @@
+PC3MAPPING,2,Beach Bear/Jasper,Rockafire Explosion/3-Stage;58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;0
diff --git a/PC3Player/PC3Player/Channel Mappings/BillyBob.pcm b/PC3Player/PC3Player/Channel Mappings/BillyBob.pcm
new file mode 100644
index 0000000..d416da3
--- /dev/null
+++ b/PC3Player/PC3Player/Channel Mappings/BillyBob.pcm
@@ -0,0 +1 @@
+PC3MAPPING,2,Billy Bob,Rockafire Explosion/3-Stage;91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,0,0,0,0,0,0,0,0,0,0,0,0;0
diff --git a/PC3Player/PC3Player/Channel Mappings/CyberChuck.pcm b/PC3Player/PC3Player/Channel Mappings/CyberChuck.pcm
new file mode 100644
index 0000000..9e9bdc3
--- /dev/null
+++ b/PC3Player/PC3Player/Channel Mappings/CyberChuck.pcm
@@ -0,0 +1 @@
+PC3MAPPING,2,Cyberamic Chuck E.,Cyberamics;1,2,3,4,5,6,7,8;0
diff --git a/PC3Player/PC3Player/Channel Mappings/CyberHelen.pcm b/PC3Player/PC3Player/Channel Mappings/CyberHelen.pcm
new file mode 100644
index 0000000..32ff5a8
--- /dev/null
+++ b/PC3Player/PC3Player/Channel Mappings/CyberHelen.pcm
@@ -0,0 +1 @@
+PC3MAPPING,2,Cyberamic Helen,Cyberamics;9,10,11,12,13,14,15,16;0
diff --git a/PC3Player/PC3Player/Channel Mappings/CyberJasper.pcm b/PC3Player/PC3Player/Channel Mappings/CyberJasper.pcm
new file mode 100644
index 0000000..f44b677
--- /dev/null
+++ b/PC3Player/PC3Player/Channel Mappings/CyberJasper.pcm
@@ -0,0 +1 @@
+PC3MAPPING,2,Cyberamic Jasper,Cyberamics;25,26,27,28,29,30,31,32;0
diff --git a/PC3Player/PC3Player/Channel Mappings/CyberMunch.pcm b/PC3Player/PC3Player/Channel Mappings/CyberMunch.pcm
new file mode 100644
index 0000000..cc82fc2
--- /dev/null
+++ b/PC3Player/PC3Player/Channel Mappings/CyberMunch.pcm
@@ -0,0 +1 @@
+PC3MAPPING,2,Cyberamic Munch,Cyberamics;17,18,19,20,21,22,23,24;0
diff --git a/PC3Player/PC3Player/Channel Mappings/CyberPasqually.pcm b/PC3Player/PC3Player/Channel Mappings/CyberPasqually.pcm
new file mode 100644
index 0000000..679f158
--- /dev/null
+++ b/PC3Player/PC3Player/Channel Mappings/CyberPasqually.pcm
@@ -0,0 +1 @@
+PC3MAPPING,2,Cyberamic Pasqually,Cyberamics;33,34,35,36,37,38,39,40;0
diff --git a/PC3Player/PC3Player/Channel Mappings/DookPasqually.pcm b/PC3Player/PC3Player/Channel Mappings/DookPasqually.pcm
new file mode 100644
index 0000000..3735c20
--- /dev/null
+++ b/PC3Player/PC3Player/Channel Mappings/DookPasqually.pcm
@@ -0,0 +1 @@
+PC3MAPPING,2,Dook/Pasqually,Rockafire Explosion/3-Stage;74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;0
diff --git a/PC3Player/PC3Player/Channel Mappings/FatzMunch.pcm b/PC3Player/PC3Player/Channel Mappings/FatzMunch.pcm
new file mode 100644
index 0000000..2e49933
--- /dev/null
+++ b/PC3Player/PC3Player/Channel Mappings/FatzMunch.pcm
@@ -0,0 +1 @@
+PC3MAPPING,2,Fatz/Munch,Rockafire Explosion/3-Stage;42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;0
diff --git a/PC3Player/PC3Player/Channel Mappings/MitziHelen.pcm b/PC3Player/PC3Player/Channel Mappings/MitziHelen.pcm
new file mode 100644
index 0000000..511704a
--- /dev/null
+++ b/PC3Player/PC3Player/Channel Mappings/MitziHelen.pcm
@@ -0,0 +1 @@
+PC3MAPPING,2,Mitzi/Helen,Rockafire Explosion/3-Stage;23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,0,0,0,0,0,0,0,0,0,0,0,0,0;0
diff --git a/PC3Player/PC3Player/Channel Mappings/RolfeChuck.pcm b/PC3Player/PC3Player/Channel Mappings/RolfeChuck.pcm
new file mode 100644
index 0000000..6875d55
--- /dev/null
+++ b/PC3Player/PC3Player/Channel Mappings/RolfeChuck.pcm
@@ -0,0 +1 @@
+PC3MAPPING,2,Rolfe/Chuck,Rockafire Explosion/3-Stage;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,0,0,0,0,0,0,0,0,0,0;0
diff --git a/PC3Player/PC3Player/DataTypes.cs b/PC3Player/PC3Player/DataTypes.cs
new file mode 100644
index 0000000..353eb32
--- /dev/null
+++ b/PC3Player/PC3Player/DataTypes.cs
@@ -0,0 +1,73 @@
+using System.Diagnostics.Eventing.Reader;
+
+namespace PC3Player
+{
+ public class PlaylistShow
+ {
+ public PlaylistShow(string name, string length, string type, string filePath)
+ {
+ Name = name;
+ Type = type;
+ Length = length;
+ FilePath = filePath;
+ }
+
+ public string Name { get; set; }
+ public string Type { get; set; }
+ public string Length { get; set; }
+ public string FilePath { get; set; }
+ }
+
+ public class ChannelMapping
+ {
+ public ChannelMapping(string name, string type, int[] bits, int[] invertedBits)
+ {
+ Name = name;
+ Type = type;
+ Bits = bits;
+ InvertedBits = invertedBits;
+ }
+
+ public string Name { get; set; }
+ public string Type { get; set; }
+ public int[] Bits { get; set; }
+ public int[] InvertedBits { get; set; }
+ }
+
+ public class PlaylistConfig
+ {
+ public int PlaylistStartOption { get; set; } = 0;
+ public int PlaylistShowEndOption { get; set; } = 0;
+ public bool PlaylistIntermissionOption { get; set; } = false;
+ public int PlaylistIntermissionTimeOption { get; set; } = 8;
+ public int PlaylistIntermissionUnitOption { get; set; } = 0;
+ public bool PlaylistLoopOption { get; set; } = true;
+
+ public int SelectorButtonPressOption { get; set; } = 0;
+ public int SelectorShowAlreadyPlayingOption { get; set; } = 0;
+ public int SelectorShowEndOption { get; set; } = 0;
+ public bool SelectorCooldownOption { get; set; } = false;
+ public int SelectorCooldownTimeOption { get; set; } = 30;
+ public int SelectorCooldownUnitOption { get; set; } = 1;
+ public bool SelectorPlaySkitOption { get; set; } = false;
+
+ public int?[] SelectorAssignments { get; set; } = new int?[12];
+
+ public int FramesPerTick { get; set; } = 6;
+ public int ResyncSeconds { get; set; } = 1;
+ public int FrameShift { get; set; } = 0;
+
+ public ChannelMapping Mapping { get; set; }
+
+ public List Shows { get; set; } = new List();
+ public List Skits { get; set; } = new List();
+ }
+
+ public enum StartMethod
+ {
+ PlaylistStart,
+ PlaylistShowEnd,
+ SelectorPress,
+ SelectorShowEnd
+ }
+}
diff --git a/PC3Player/PC3Player/MainForm.Designer.cs b/PC3Player/PC3Player/MainForm.Designer.cs
new file mode 100644
index 0000000..377a583
--- /dev/null
+++ b/PC3Player/PC3Player/MainForm.Designer.cs
@@ -0,0 +1,414 @@
+namespace PC3Player
+{
+ partial class MainForm
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ components = new System.ComponentModel.Container();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
+ ControllerGroupBox = new GroupBox();
+ ControllerSelectSerialPortButton = new Button();
+ ControllerAutoDetectButton = new Button();
+ PlaybackControlsGroupBox = new GroupBox();
+ TimeLabel = new Label();
+ StopButton = new Button();
+ SkipButton = new Button();
+ PauseButton = new Button();
+ StartButton = new Button();
+ ShowSelectorGroupBox = new GroupBox();
+ ShowSelectorSelectPortButton = new Button();
+ ShowSelectorAutoDetectButton = new Button();
+ PlaylistGroupBox = new GroupBox();
+ AdvancedSettingsButton = new Button();
+ AddShowButton = new Button();
+ LoadPlaylistButton = new Button();
+ SavePlaylistButton = new Button();
+ ChannelMappingGroupBox = new GroupBox();
+ LoadChannelMapButton = new Button();
+ PlaylistListView = new ListView();
+ NameColumnHeader = new ColumnHeader();
+ LengthColumnHeader = new ColumnHeader();
+ ShowContextMenu = new ContextMenuStrip(components);
+ MoveUpButton = new ToolStripMenuItem();
+ MoveDownButton = new ToolStripMenuItem();
+ RemoveButton = new ToolStripMenuItem();
+ SelectShowFileDialog = new OpenFileDialog();
+ SelectMappingFileDialog = new OpenFileDialog();
+ SavePlaylistFileDialog = new SaveFileDialog();
+ OpenPlaylistFileDialog = new OpenFileDialog();
+ NewPlaylistButton = new Button();
+ ControllerGroupBox.SuspendLayout();
+ PlaybackControlsGroupBox.SuspendLayout();
+ ShowSelectorGroupBox.SuspendLayout();
+ PlaylistGroupBox.SuspendLayout();
+ ChannelMappingGroupBox.SuspendLayout();
+ ShowContextMenu.SuspendLayout();
+ SuspendLayout();
+ //
+ // ControllerGroupBox
+ //
+ ControllerGroupBox.Controls.Add(ControllerSelectSerialPortButton);
+ ControllerGroupBox.Controls.Add(ControllerAutoDetectButton);
+ ControllerGroupBox.Location = new Point(12, 12);
+ ControllerGroupBox.Name = "ControllerGroupBox";
+ ControllerGroupBox.Size = new Size(256, 84);
+ ControllerGroupBox.TabIndex = 0;
+ ControllerGroupBox.TabStop = false;
+ ControllerGroupBox.Text = "Controller: Not Connected";
+ //
+ // ControllerSelectSerialPortButton
+ //
+ ControllerSelectSerialPortButton.Location = new Point(6, 53);
+ ControllerSelectSerialPortButton.Name = "ControllerSelectSerialPortButton";
+ ControllerSelectSerialPortButton.Size = new Size(244, 25);
+ ControllerSelectSerialPortButton.TabIndex = 1;
+ ControllerSelectSerialPortButton.Text = "Select Serial Port";
+ ControllerSelectSerialPortButton.UseVisualStyleBackColor = true;
+ ControllerSelectSerialPortButton.Click += ControllerSelectSerialPortButton_Click;
+ //
+ // ControllerAutoDetectButton
+ //
+ ControllerAutoDetectButton.Location = new Point(6, 22);
+ ControllerAutoDetectButton.Name = "ControllerAutoDetectButton";
+ ControllerAutoDetectButton.Size = new Size(244, 25);
+ ControllerAutoDetectButton.TabIndex = 0;
+ ControllerAutoDetectButton.Text = "Auto Detect";
+ ControllerAutoDetectButton.UseVisualStyleBackColor = true;
+ ControllerAutoDetectButton.Click += ControllerAutoDetectButton_Click;
+ //
+ // PlaybackControlsGroupBox
+ //
+ PlaybackControlsGroupBox.Controls.Add(TimeLabel);
+ PlaybackControlsGroupBox.Controls.Add(StopButton);
+ PlaybackControlsGroupBox.Controls.Add(SkipButton);
+ PlaybackControlsGroupBox.Controls.Add(PauseButton);
+ PlaybackControlsGroupBox.Controls.Add(StartButton);
+ PlaybackControlsGroupBox.Location = new Point(12, 376);
+ PlaybackControlsGroupBox.Name = "PlaybackControlsGroupBox";
+ PlaybackControlsGroupBox.Size = new Size(256, 99);
+ PlaybackControlsGroupBox.TabIndex = 4;
+ PlaybackControlsGroupBox.TabStop = false;
+ PlaybackControlsGroupBox.Text = "Controls: Not Playing";
+ //
+ // TimeLabel
+ //
+ TimeLabel.AutoSize = true;
+ TimeLabel.Location = new Point(6, 81);
+ TimeLabel.Name = "TimeLabel";
+ TimeLabel.Size = new Size(104, 15);
+ TimeLabel.TabIndex = 4;
+ TimeLabel.Text = "(00:00:00/00:00:00)";
+ //
+ // StopButton
+ //
+ StopButton.Enabled = false;
+ StopButton.Location = new Point(131, 53);
+ StopButton.Name = "StopButton";
+ StopButton.Size = new Size(119, 25);
+ StopButton.TabIndex = 3;
+ StopButton.Text = "Stop";
+ StopButton.UseVisualStyleBackColor = true;
+ StopButton.Click += StopButton_Click;
+ //
+ // SkipButton
+ //
+ SkipButton.Enabled = false;
+ SkipButton.Location = new Point(6, 53);
+ SkipButton.Name = "SkipButton";
+ SkipButton.Size = new Size(119, 25);
+ SkipButton.TabIndex = 2;
+ SkipButton.Text = "Skip";
+ SkipButton.UseVisualStyleBackColor = true;
+ SkipButton.Click += SkipButton_Click;
+ //
+ // PauseButton
+ //
+ PauseButton.Enabled = false;
+ PauseButton.Location = new Point(131, 22);
+ PauseButton.Name = "PauseButton";
+ PauseButton.Size = new Size(119, 25);
+ PauseButton.TabIndex = 1;
+ PauseButton.Text = "Pause";
+ PauseButton.UseVisualStyleBackColor = true;
+ PauseButton.Click += PauseButton_Click;
+ //
+ // StartButton
+ //
+ StartButton.Location = new Point(6, 22);
+ StartButton.Name = "StartButton";
+ StartButton.Size = new Size(119, 25);
+ StartButton.TabIndex = 0;
+ StartButton.Text = "Start Playlist";
+ StartButton.UseVisualStyleBackColor = true;
+ StartButton.Click += StartButton_Click;
+ //
+ // ShowSelectorGroupBox
+ //
+ ShowSelectorGroupBox.Controls.Add(ShowSelectorSelectPortButton);
+ ShowSelectorGroupBox.Controls.Add(ShowSelectorAutoDetectButton);
+ ShowSelectorGroupBox.Enabled = false;
+ ShowSelectorGroupBox.Location = new Point(12, 102);
+ ShowSelectorGroupBox.Name = "ShowSelectorGroupBox";
+ ShowSelectorGroupBox.Size = new Size(256, 84);
+ ShowSelectorGroupBox.TabIndex = 1;
+ ShowSelectorGroupBox.TabStop = false;
+ ShowSelectorGroupBox.Text = "Show Selector: Not Connected";
+ //
+ // ShowSelectorSelectPortButton
+ //
+ ShowSelectorSelectPortButton.Location = new Point(6, 53);
+ ShowSelectorSelectPortButton.Name = "ShowSelectorSelectPortButton";
+ ShowSelectorSelectPortButton.Size = new Size(244, 25);
+ ShowSelectorSelectPortButton.TabIndex = 1;
+ ShowSelectorSelectPortButton.Text = "Select Serial Port";
+ ShowSelectorSelectPortButton.UseVisualStyleBackColor = true;
+ ShowSelectorSelectPortButton.Click += ShowSelectorSelectPortButton_Click;
+ //
+ // ShowSelectorAutoDetectButton
+ //
+ ShowSelectorAutoDetectButton.Location = new Point(6, 22);
+ ShowSelectorAutoDetectButton.Name = "ShowSelectorAutoDetectButton";
+ ShowSelectorAutoDetectButton.Size = new Size(244, 25);
+ ShowSelectorAutoDetectButton.TabIndex = 0;
+ ShowSelectorAutoDetectButton.Text = "Auto Detect";
+ ShowSelectorAutoDetectButton.UseVisualStyleBackColor = true;
+ ShowSelectorAutoDetectButton.Click += ShowSelectorAutoDetectButton_Click;
+ //
+ // PlaylistGroupBox
+ //
+ PlaylistGroupBox.Controls.Add(NewPlaylistButton);
+ PlaylistGroupBox.Controls.Add(AdvancedSettingsButton);
+ PlaylistGroupBox.Controls.Add(AddShowButton);
+ PlaylistGroupBox.Controls.Add(LoadPlaylistButton);
+ PlaylistGroupBox.Controls.Add(SavePlaylistButton);
+ PlaylistGroupBox.Location = new Point(12, 254);
+ PlaylistGroupBox.Name = "PlaylistGroupBox";
+ PlaylistGroupBox.Size = new Size(256, 116);
+ PlaylistGroupBox.TabIndex = 3;
+ PlaylistGroupBox.TabStop = false;
+ PlaylistGroupBox.Text = "Playlist: Unsaved";
+ //
+ // AdvancedSettingsButton
+ //
+ AdvancedSettingsButton.Location = new Point(131, 22);
+ AdvancedSettingsButton.Name = "AdvancedSettingsButton";
+ AdvancedSettingsButton.Size = new Size(119, 25);
+ AdvancedSettingsButton.TabIndex = 1;
+ AdvancedSettingsButton.Text = "Advanced";
+ AdvancedSettingsButton.UseVisualStyleBackColor = true;
+ AdvancedSettingsButton.Click += AdvancedSettingsButton_Click;
+ //
+ // AddShowButton
+ //
+ AddShowButton.Location = new Point(6, 22);
+ AddShowButton.Name = "AddShowButton";
+ AddShowButton.Size = new Size(119, 25);
+ AddShowButton.TabIndex = 0;
+ AddShowButton.Text = "Add Show";
+ AddShowButton.UseVisualStyleBackColor = true;
+ AddShowButton.Click += AddShowButton_Click;
+ //
+ // LoadPlaylistButton
+ //
+ LoadPlaylistButton.Location = new Point(131, 53);
+ LoadPlaylistButton.Name = "LoadPlaylistButton";
+ LoadPlaylistButton.Size = new Size(119, 25);
+ LoadPlaylistButton.TabIndex = 3;
+ LoadPlaylistButton.Text = "Load Playlist";
+ LoadPlaylistButton.UseVisualStyleBackColor = true;
+ LoadPlaylistButton.Click += LoadPlaylistButton_Click;
+ //
+ // SavePlaylistButton
+ //
+ SavePlaylistButton.Location = new Point(6, 53);
+ SavePlaylistButton.Name = "SavePlaylistButton";
+ SavePlaylistButton.Size = new Size(119, 25);
+ SavePlaylistButton.TabIndex = 2;
+ SavePlaylistButton.Text = "Save Playlist";
+ SavePlaylistButton.UseVisualStyleBackColor = true;
+ SavePlaylistButton.Click += SavePlaylistButton_Click;
+ //
+ // ChannelMappingGroupBox
+ //
+ ChannelMappingGroupBox.Controls.Add(LoadChannelMapButton);
+ ChannelMappingGroupBox.Location = new Point(12, 192);
+ ChannelMappingGroupBox.Name = "ChannelMappingGroupBox";
+ ChannelMappingGroupBox.Size = new Size(256, 56);
+ ChannelMappingGroupBox.TabIndex = 2;
+ ChannelMappingGroupBox.TabStop = false;
+ ChannelMappingGroupBox.Text = "Channel Map: None Loaded";
+ //
+ // LoadChannelMapButton
+ //
+ LoadChannelMapButton.Location = new Point(6, 22);
+ LoadChannelMapButton.Name = "LoadChannelMapButton";
+ LoadChannelMapButton.Size = new Size(244, 25);
+ LoadChannelMapButton.TabIndex = 0;
+ LoadChannelMapButton.Text = "Load Channel Map";
+ LoadChannelMapButton.UseVisualStyleBackColor = true;
+ LoadChannelMapButton.Click += LoadChannelMapButton_Click;
+ //
+ // PlaylistListView
+ //
+ PlaylistListView.AutoArrange = false;
+ PlaylistListView.Columns.AddRange(new ColumnHeader[] { NameColumnHeader, LengthColumnHeader });
+ PlaylistListView.ContextMenuStrip = ShowContextMenu;
+ PlaylistListView.GridLines = true;
+ PlaylistListView.HeaderStyle = ColumnHeaderStyle.Nonclickable;
+ PlaylistListView.Location = new Point(274, 12);
+ PlaylistListView.MultiSelect = false;
+ PlaylistListView.Name = "PlaylistListView";
+ PlaylistListView.Size = new Size(400, 463);
+ PlaylistListView.TabIndex = 5;
+ PlaylistListView.UseCompatibleStateImageBehavior = false;
+ PlaylistListView.View = View.Details;
+ //
+ // NameColumnHeader
+ //
+ NameColumnHeader.Text = "Show Name";
+ NameColumnHeader.Width = 310;
+ //
+ // LengthColumnHeader
+ //
+ LengthColumnHeader.Text = "Length";
+ //
+ // ShowContextMenu
+ //
+ ShowContextMenu.Items.AddRange(new ToolStripItem[] { MoveUpButton, MoveDownButton, RemoveButton });
+ ShowContextMenu.Name = "ShowContextMenu";
+ ShowContextMenu.Size = new Size(139, 70);
+ //
+ // MoveUpButton
+ //
+ MoveUpButton.Name = "MoveUpButton";
+ MoveUpButton.Size = new Size(138, 22);
+ MoveUpButton.Text = "Move Up";
+ MoveUpButton.Click += MoveUpButton_Click;
+ //
+ // MoveDownButton
+ //
+ MoveDownButton.Name = "MoveDownButton";
+ MoveDownButton.Size = new Size(138, 22);
+ MoveDownButton.Text = "Move Down";
+ MoveDownButton.Click += MoveDownButton_Click;
+ //
+ // RemoveButton
+ //
+ RemoveButton.Name = "RemoveButton";
+ RemoveButton.Size = new Size(138, 22);
+ RemoveButton.Text = "Remove";
+ RemoveButton.Click += RemoveButton_Click;
+ //
+ // SelectShowFileDialog
+ //
+ SelectShowFileDialog.Filter = "UST Showtapes|*.ust";
+ SelectShowFileDialog.Multiselect = true;
+ //
+ // SelectMappingFileDialog
+ //
+ SelectMappingFileDialog.Filter = "PinkConnection Channel Map|*.pcm";
+ //
+ // SavePlaylistFileDialog
+ //
+ SavePlaylistFileDialog.Filter = "PC3Player Playlists (JSON Files)|*.json";
+ //
+ // OpenPlaylistFileDialog
+ //
+ OpenPlaylistFileDialog.Filter = "PC3Player Playlists (JSON Files)|*.json";
+ //
+ // NewPlaylistButton
+ //
+ NewPlaylistButton.Location = new Point(6, 84);
+ NewPlaylistButton.Name = "NewPlaylistButton";
+ NewPlaylistButton.Size = new Size(244, 25);
+ NewPlaylistButton.TabIndex = 4;
+ NewPlaylistButton.Text = "New Playlist";
+ NewPlaylistButton.UseVisualStyleBackColor = true;
+ NewPlaylistButton.Click += NewPlaylistButton_Click;
+ //
+ // MainForm
+ //
+ AutoScaleDimensions = new SizeF(7F, 15F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(686, 487);
+ Controls.Add(PlaylistListView);
+ Controls.Add(ChannelMappingGroupBox);
+ Controls.Add(PlaylistGroupBox);
+ Controls.Add(ShowSelectorGroupBox);
+ Controls.Add(PlaybackControlsGroupBox);
+ Controls.Add(ControllerGroupBox);
+ FormBorderStyle = FormBorderStyle.FixedSingle;
+ Icon = (Icon)resources.GetObject("$this.Icon");
+ MaximizeBox = false;
+ Name = "MainForm";
+ Text = "PinkConnection3 Player";
+ FormClosing += MainForm_FormClosing;
+ ControllerGroupBox.ResumeLayout(false);
+ PlaybackControlsGroupBox.ResumeLayout(false);
+ PlaybackControlsGroupBox.PerformLayout();
+ ShowSelectorGroupBox.ResumeLayout(false);
+ PlaylistGroupBox.ResumeLayout(false);
+ ChannelMappingGroupBox.ResumeLayout(false);
+ ShowContextMenu.ResumeLayout(false);
+ ResumeLayout(false);
+ }
+
+ #endregion
+
+ private GroupBox ControllerGroupBox;
+ private Button ControllerSelectSerialPortButton;
+ private Button ControllerAutoDetectButton;
+ private GroupBox PlaybackControlsGroupBox;
+ private Button SkipButton;
+ private Button PauseButton;
+ private Button StartButton;
+ private GroupBox ShowSelectorGroupBox;
+ private Button ShowSelectorSelectPortButton;
+ private Button ShowSelectorAutoDetectButton;
+ private GroupBox PlaylistGroupBox;
+ private Button AddShowButton;
+ private GroupBox ChannelMappingGroupBox;
+ private Button LoadChannelMapButton;
+ private ListView PlaylistListView;
+ private ColumnHeader NameColumnHeader;
+ private ColumnHeader LengthColumnHeader;
+ private Button StopButton;
+ private Button SavePlaylistButton;
+ private Button LoadPlaylistButton;
+ private OpenFileDialog SelectShowFileDialog;
+ private OpenFileDialog SelectMappingFileDialog;
+ private Button AdvancedSettingsButton;
+ private ContextMenuStrip ShowContextMenu;
+ private ToolStripMenuItem RemoveButton;
+ private ToolStripMenuItem MoveUpButton;
+ private ToolStripMenuItem MoveDownButton;
+ private SaveFileDialog SavePlaylistFileDialog;
+ private OpenFileDialog OpenPlaylistFileDialog;
+ private Label TimeLabel;
+ private Button NewPlaylistButton;
+ }
+}
diff --git a/PC3Player/PC3Player/MainForm.cs b/PC3Player/PC3Player/MainForm.cs
new file mode 100644
index 0000000..27aee6a
--- /dev/null
+++ b/PC3Player/PC3Player/MainForm.cs
@@ -0,0 +1,900 @@
+using SoundFlow.Backends.MiniAudio;
+using SoundFlow.Components;
+using SoundFlow.Enums;
+using SoundFlow.Providers;
+
+using System.Globalization;
+using System.IO.Ports;
+using System.Numerics;
+using System.Text.Json;
+using System.Timers;
+
+namespace PC3Player
+{
+ public partial class MainForm : Form
+ {
+ static PlaylistConfig Config = new();
+
+ static SerialPort ControllerPort;
+ static SerialPort ShowSelectorPort;
+
+ static Random SelectRandom = new Random();
+
+ System.Timers.Timer FrameTimer;
+ System.Timers.Timer ResyncTimer;
+ System.Timers.Timer GUIUpdateTimer;
+
+ SoundPlayer AudioPlayer;
+ StreamDataProvider dataProvider;
+
+ static int ShowtapeIndex = 0;
+ static int PlaylistIndex = 0;
+ static int IntermissionSecondsLeft = 0;
+ static int IntermissionTotalTime = 0;
+ static int ControllerBits;
+ static int SelectorButtons;
+
+ static bool ControllerConnected = false;
+ static bool ShowSelectorConnected = false;
+
+ public static bool ChannelMappingLoaded = false;
+
+ static bool Playing = false;
+ static bool Paused = false;
+ static bool InvalidateSave = false;
+ static bool Intermission;
+
+ static string[] ShowtapeFrames;
+ static PlaylistShow CurrentlyPlaying;
+
+ public MainForm()
+ {
+ InitializeComponent();
+ GUIUpdateTimer = new System.Timers.Timer(1000);
+ GUIUpdateTimer.Elapsed += GUIUpdateTick;
+ GUIUpdateTimer.AutoReset = true;
+ MiniAudioEngine audioEngine = new MiniAudioEngine(48000, Capability.Playback);
+ }
+
+ private void UpdateListView()
+ {
+ PlaylistListView.Items.Clear();
+ foreach (PlaylistShow s in Config.Shows) PlaylistListView.Items.Add(new ListViewItem(new[] { s.Name, s.Length }));
+ }
+
+ private void LoadChannelMapButton_Click(object sender, EventArgs e)
+ {
+ if (!ControllerConnected)
+ {
+ MessageBox.Show("You must connect a Controller first.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ return;
+ }
+
+ if (SelectMappingFileDialog.ShowDialog() == DialogResult.OK)
+ {
+ string tempMappingData = File.ReadAllText(SelectMappingFileDialog.FileName);
+ if (!tempMappingData.StartsWith("PC3MAPPING,2,"))
+ {
+ MessageBox.Show("Selected mapping file is not a Version 2 PinkConnection channel map.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+
+ string[] header = tempMappingData.Split(";")[0].Split(",");
+
+ List targetBits = new List();
+ foreach (string s in tempMappingData.Split(";")[1].Split(","))
+ {
+ targetBits.Add(int.Parse(s));
+ }
+
+ if (ChannelMappingLoaded)
+ {
+ if (header[3] != Config.Mapping.Type)
+ {
+ MessageBox.Show(
+ $"Selected Channel Map \"{header[2]}\"'s type does not match the old Channel Map's type." +
+ $"\nOld Channel Map Type: {Config.Mapping.Type}" +
+ $"\nNew Channel Map Type: {header[3]}"
+ , "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+ }
+
+ if (targetBits.Count != ControllerBits)
+ {
+ MessageBox.Show("The mapped channel count is not equal to the connected controller's bit count.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+
+ if (targetBits.Count % 4 != 0)
+ {
+ MessageBox.Show("The mapped channel count is not divisible by 4.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+
+ List invertedBits = new List();
+ foreach (string s in tempMappingData.Split(";")[2].Split(","))
+ {
+ int ints = int.Parse(s);
+ if (ints == 0) continue;
+ invertedBits.Add(ints);
+ }
+
+ Config.Mapping = new ChannelMapping(header[2], header[3], targetBits.ToArray(), invertedBits.ToArray());
+ ChannelMappingLoaded = true;
+
+ ChannelMappingGroupBox.Text = $"Channel Map: {Config.Mapping.Name}";
+ InvalidateSave = true;
+ }
+ }
+
+ private void ControllerAutoDetectButton_Click(object sender, EventArgs e)
+ {
+ if (ControllerConnected)
+ {
+ MessageBox.Show("A Controller is already connected.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ return;
+ }
+
+ string successPortName = "";
+
+ foreach (string portName in SerialPort.GetPortNames())
+ {
+ if (ControllerConnected) break;
+ try
+ {
+ SerialPort tempPort = new SerialPort(portName, 9600, Parity.None, 8, StopBits.One);
+ tempPort.Open();
+
+ for (int i = 0; i < 10; i++)
+ {
+ tempPort.Write("! ");
+ Thread.Sleep(100);
+ string readAttempt = tempPort.ReadExisting();
+ if (readAttempt.Split(",")[0] == "PC3")
+ {
+ ControllerBits = int.Parse(readAttempt.Split(",")[1]);
+ ControllerConnected = true;
+ tempPort.Close();
+ ControllerPort = new SerialPort(portName, 9600, Parity.None, 8, StopBits.One);
+ ControllerPort.Open();
+ successPortName = portName;
+ break;
+ }
+ }
+ tempPort.Close();
+ }
+ catch (Exception) { continue; }
+ }
+ if (!ControllerConnected)
+ {
+ MessageBox.Show("Could not detect a PinkConnection3 controller on any of your serial ports.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+ ControllerGroupBox.Text = $"Controller: {ControllerBits} channel on {successPortName}";
+ ControllerAutoDetectButton.Enabled = false;
+ ControllerSelectSerialPortButton.Enabled = false;
+ }
+
+ private void ControllerSelectSerialPortButton_Click(object sender, EventArgs e)
+ {
+ if (ControllerConnected)
+ {
+ MessageBox.Show("A Controller is already connected.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ return;
+ }
+
+ SerialPortSelector portDialog = new SerialPortSelector();
+ if (portDialog.ShowDialog() != DialogResult.OK) return;
+
+ string successPortName = "";
+
+ try
+ {
+ SerialPort tempPort = new SerialPort(portDialog.PortName, 9600, Parity.None, 8, StopBits.One);
+ tempPort.Open();
+
+ for (int i = 0; i < 10; i++)
+ {
+ tempPort.Write("! ");
+ Thread.Sleep(100);
+ string readAttempt = tempPort.ReadExisting();
+ if (readAttempt.Split(",")[0] == "PC3")
+ {
+ ControllerBits = int.Parse(readAttempt.Split(",")[1]);
+ ControllerConnected = true;
+ tempPort.Close();
+ ControllerPort = new SerialPort(portDialog.PortName, 9600, Parity.None, 8, StopBits.One);
+ ControllerPort.Open();
+ successPortName = portDialog.PortName;
+ break;
+ }
+ }
+
+ tempPort.Close();
+
+ if (!ControllerConnected)
+ {
+ MessageBox.Show("Could not detect a PinkConnection3 controller on the specified serial port.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show("Could not detect a PinkConnection3 controller on the specified serial port.\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+ ControllerGroupBox.Text = $"Controller: {ControllerBits} channel on {successPortName}";
+ ControllerAutoDetectButton.Enabled = false;
+ ControllerSelectSerialPortButton.Enabled = false;
+ }
+
+ private void AddShowButton_Click(object sender, EventArgs e)
+ {
+ if (!ChannelMappingLoaded)
+ {
+ MessageBox.Show("You must load a channel mapping first.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ return;
+ }
+
+ if (SelectShowFileDialog.ShowDialog() == DialogResult.OK)
+ {
+ foreach (string showFilePath in SelectShowFileDialog.FileNames)
+ {
+ string tempUSTData = File.ReadAllText(showFilePath);
+ if (!tempUSTData.StartsWith("UST,2,"))
+ {
+ MessageBox.Show($"Selected showtape \"{Path.GetFileNameWithoutExtension(showFilePath)}\" is not a UST version 2 showtape.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+
+ string[] headerData = tempUSTData.Split(';')[0].Split(',');
+ string[] stringyBits = tempUSTData.Split(';')[1].Split(',');
+
+ TimeSpan time = TimeSpan.FromSeconds(stringyBits.Length / 60);
+ string formattedLength = time.ToString(@"hh\:mm\:ss");
+
+ tempUSTData = null;
+ stringyBits = null;
+
+ if (headerData[3] != Config.Mapping.Type)
+ {
+ MessageBox.Show(
+ $"Selected Show \"{headerData[2]}\"'s type does not match the loaded Channel Map." +
+ $"\nLoaded Channel Map Type: {Config.Mapping.Type}" +
+ $"\nShow Type: {headerData[3]}"
+ , "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+
+ Config.Shows.Add(new PlaylistShow(headerData[2], formattedLength, headerData[3], showFilePath));
+ }
+ UpdateListView();
+ InvalidateSave = true;
+ }
+ }
+
+ private void RemoveButton_Click(object sender, EventArgs e)
+ {
+ if (PlaylistListView.SelectedIndices.Count == 0) return;
+ Config = RemoveShowAt(PlaylistListView.SelectedIndices[0], Config);
+ UpdateListView();
+ InvalidateSave = true;
+ }
+
+ private void MoveUpButton_Click(object sender, EventArgs e)
+ {
+ if (PlaylistListView.SelectedIndices.Count == 0) return;
+ int selectedIndex = PlaylistListView.SelectedIndices[0];
+ if (selectedIndex == 0) return;
+ int assindex = 0;
+ foreach (int? assignment in Config.SelectorAssignments)
+ {
+ if (assignment == null) continue;
+ if (assignment == selectedIndex) Config.SelectorAssignments[assindex]--;
+ if (assignment == selectedIndex - 1) Config.SelectorAssignments[assindex]++;
+ assindex++;
+ }
+ PlaylistShow temp = Config.Shows[selectedIndex];
+ Config.Shows.RemoveAt(selectedIndex);
+ Config.Shows.Insert(selectedIndex - 1, temp);
+ UpdateListView();
+ InvalidateSave = true;
+ }
+
+ private void MoveDownButton_Click(object sender, EventArgs e)
+ {
+ if (PlaylistListView.SelectedIndices.Count == 0) return;
+ int selectedIndex = PlaylistListView.SelectedIndices[0];
+ if (selectedIndex >= PlaylistListView.Items.Count - 1) return;
+ int assindex = 0;
+ foreach (int? assignment in Config.SelectorAssignments)
+ {
+ if (assignment == null) continue;
+ if (assignment == selectedIndex) Config.SelectorAssignments[assindex]++;
+ if (assignment == selectedIndex + 1) Config.SelectorAssignments[assindex]--;
+ assindex++;
+ }
+ PlaylistShow temp = Config.Shows[selectedIndex];
+ Config.Shows.RemoveAt(selectedIndex);
+ Config.Shows.Insert(selectedIndex + 1, temp);
+ UpdateListView();
+ InvalidateSave = true;
+ }
+
+ private void AdvancedSettingsButton_Click(object sender, EventArgs e)
+ {
+ AdvancedSettingsForm advancedSettingsForm = new AdvancedSettingsForm(Config);
+ if (Config != advancedSettingsForm.EditingObject) InvalidateSave = true;
+ if (advancedSettingsForm.ShowDialog() == DialogResult.OK) Config = advancedSettingsForm.EditingObject;
+ }
+
+ private void ShowSelectorAutoDetectButton_Click(object sender, EventArgs e)
+ {
+ if (ShowSelectorConnected)
+ {
+ MessageBox.Show("A Show Selector is already connected.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ return;
+ }
+
+ string successPortName = "";
+
+ foreach (string portName in SerialPort.GetPortNames())
+ {
+ if (ShowSelectorConnected) break;
+ try
+ {
+ SerialPort tempPort = new SerialPort(portName, 9600, Parity.None, 8, StopBits.One);
+ tempPort.Open();
+
+ for (int i = 0; i < 10; i++)
+ {
+ tempPort.Write("\" ");
+ Thread.Sleep(100);
+ string readAttempt = tempPort.ReadExisting();
+ if (readAttempt.Split(",")[0] == "PCSELECTOR")
+ {
+ SelectorButtons = int.Parse(readAttempt.Split(",")[1]);
+ ShowSelectorConnected = true;
+ tempPort.Close();
+ ShowSelectorPort = new SerialPort(portName, 9600, Parity.None, 8, StopBits.One);
+ ShowSelectorPort.Open();
+ successPortName = portName;
+ break;
+ }
+ }
+ tempPort.Close();
+ }
+ catch (Exception) { continue; }
+ }
+ if (!ShowSelectorConnected)
+ {
+ MessageBox.Show("Could not detect a PinkConnection Show Selector on any of your serial ports.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+ ShowSelectorGroupBox.Text = $"{SelectorButtons} button on {successPortName}";
+ ShowSelectorAutoDetectButton.Enabled = false;
+ ShowSelectorSelectPortButton.Enabled = false;
+ }
+
+ private void ShowSelectorSelectPortButton_Click(object sender, EventArgs e)
+ {
+ if (ShowSelectorConnected)
+ {
+ MessageBox.Show("A Show Selector is already connected.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ return;
+ }
+
+ SerialPortSelector portDialog = new SerialPortSelector();
+ if (portDialog.ShowDialog() != DialogResult.OK) return;
+
+ string successPortName = "";
+
+ try
+ {
+ SerialPort tempPort = new SerialPort(portDialog.PortName, 9600, Parity.None, 8, StopBits.One);
+ tempPort.Open();
+
+ for (int i = 0; i < 10; i++)
+ {
+ tempPort.Write("\" ");
+ Thread.Sleep(100);
+ string readAttempt = tempPort.ReadExisting();
+ if (readAttempt.Split(",")[0] == "PCSELECTOR")
+ {
+ SelectorButtons = int.Parse(readAttempt.Split(",")[1]);
+ ShowSelectorConnected = true;
+ tempPort.Close();
+ ShowSelectorPort = new SerialPort(portDialog.PortName, 9600, Parity.None, 8, StopBits.One);
+ ShowSelectorPort.Open();
+ successPortName = portDialog.PortName;
+ break;
+ }
+ }
+
+ tempPort.Close();
+
+ if (!ShowSelectorConnected)
+ {
+ MessageBox.Show("Could not detect a PinkConnection Show Selector on the specified serial port.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show("Could not detect a PinkConnection Show Selector on the specified serial port.\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+ ShowSelectorGroupBox.Text = $"Show Selector: {SelectorButtons} button on {successPortName}";
+ ShowSelectorAutoDetectButton.Enabled = false;
+ ShowSelectorSelectPortButton.Enabled = false;
+ }
+
+ private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
+ {
+ if (Playing) Stop();
+ if (InvalidateSave)
+ if (MessageBox.Show(
+ "You have an unsaved Playlist!\nDo you still want to exit?",
+ "Unsaved Playlist",
+ MessageBoxButtons.YesNo,
+ MessageBoxIcon.Exclamation
+ ) != DialogResult.Yes)
+ e.Cancel = true;
+ }
+
+ private void SavePlaylistButton_Click(object sender, EventArgs e)
+ {
+ if (SavePlaylistFileDialog.ShowDialog() == DialogResult.OK)
+ {
+ File.WriteAllText(SavePlaylistFileDialog.FileName, JsonSerializer.Serialize(Config));
+ InvalidateSave = false;
+ PlaylistGroupBox.Text = "Playlist: " + Path.GetFileNameWithoutExtension(SavePlaylistFileDialog.FileName);
+ }
+ }
+
+ private void LoadPlaylistButton_Click(object sender, EventArgs e)
+ {
+ if (Playing)
+ {
+ if (MessageBox.Show(
+ "A show is currently playing!\nPerforming this action will stop it.\nAre you sure?",
+ "Show Playing",
+ MessageBoxButtons.YesNo,
+ MessageBoxIcon.Exclamation
+ ) != DialogResult.Yes)
+ return;
+ Stop();
+ }
+
+ if (!ControllerConnected)
+ {
+ MessageBox.Show("You must connect a Controller first.");
+ return;
+ }
+
+ if (InvalidateSave)
+ if (MessageBox.Show(
+ "You have an unsaved Playlist!\nDo you still want to load another?",
+ "Unsaved Playlist",
+ MessageBoxButtons.YesNo,
+ MessageBoxIcon.Exclamation
+ ) != DialogResult.Yes)
+ return;
+
+ if (OpenPlaylistFileDialog.ShowDialog() == DialogResult.OK)
+ {
+ PlaylistConfig? tempConfig;
+ try
+ {
+ tempConfig = JsonSerializer.Deserialize(File.ReadAllText(OpenPlaylistFileDialog.FileName));
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show("Could not read the selected Playlist file.\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+ if (tempConfig == null)
+ {
+ MessageBox.Show("Could not read the selected Playlist file.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+
+ if (tempConfig.Mapping != null)
+ {
+ if (tempConfig.Mapping.Bits.Length % 4 != 0)
+ {
+ MessageBox.Show("The mapped channel count is not divisible by 4.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+ ChannelMappingGroupBox.Text = $"Channel Map: {tempConfig.Mapping.Name}";
+ ChannelMappingLoaded = true;
+ }
+
+ int showIndex = 0;
+ foreach (PlaylistShow show in tempConfig.Shows)
+ {
+ if (tempConfig.Mapping == null)
+ {
+ MessageBox.Show(
+ "The Playlist does not have a loaded Channel Map" +
+ "\nNo Shows or Skits will be loaded."
+ , "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ break;
+ }
+ if (!File.Exists(show.FilePath))
+ {
+ if (MessageBox.Show(
+ $"Could not locate the file for the Show {show.Name}" +
+ $"\nWould you like to relocate it?",
+ "Could not find Show file",
+ MessageBoxButtons.YesNo,
+ MessageBoxIcon.Exclamation
+ ) == DialogResult.Yes)
+ {
+ if (SelectShowFileDialog.ShowDialog() == DialogResult.OK)
+ {
+ tempConfig.Shows[showIndex].FilePath = SelectShowFileDialog.FileName;
+ }
+ else tempConfig = RemoveShowAt(showIndex, tempConfig);
+ }
+ else tempConfig = RemoveShowAt(showIndex, tempConfig);
+ }
+ if (show.Type != tempConfig.Mapping.Type)
+ {
+ MessageBox.Show(
+ $"Show \"{show.Name}\"'s type does not match the Playlist's Channel Map." +
+ $"\nIt will be removed from the playlist." +
+ $"\nLoaded Channel Map Type: {tempConfig.Mapping.Type}" +
+ $"\nShow Type: {show.Type}"
+ , "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ tempConfig = RemoveShowAt(showIndex, tempConfig);
+ }
+
+ showIndex++;
+ }
+
+ int skitIndex = 0;
+ foreach (PlaylistShow skit in tempConfig.Skits)
+ {
+ if (tempConfig.Mapping == null) break;
+ if (!File.Exists(skit.FilePath))
+ {
+ if (MessageBox.Show(
+ $"Could not locate the file for the Skit {skit.Name}" +
+ $"\nWould you like to relocate it?",
+ "Could not find Skit file",
+ MessageBoxButtons.YesNo,
+ MessageBoxIcon.Exclamation
+ ) == DialogResult.Yes)
+ {
+ if (SelectShowFileDialog.ShowDialog() == DialogResult.OK)
+ {
+ tempConfig.Skits[skitIndex].FilePath = SelectShowFileDialog.FileName;
+ }
+ else tempConfig.Skits.RemoveAt(skitIndex);
+ }
+ else tempConfig.Skits.RemoveAt(skitIndex);
+ }
+ if (skit.Type != tempConfig.Mapping.Type)
+ {
+ MessageBox.Show(
+ $"Skit \"{skit.Name}\"'s type does not match the Playlist's Channel Map." +
+ $"\nIt will be removed from the playlist." +
+ $"\nLoaded Channel Map Type: {tempConfig.Mapping.Type}" +
+ $"\nSkit Type: {skit.Type}"
+ , "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ tempConfig.Skits.RemoveAt(skitIndex);
+ }
+
+ skitIndex++;
+ }
+
+ Config = tempConfig;
+ PlaylistGroupBox.Text = "Playlist: " + Path.GetFileNameWithoutExtension(OpenPlaylistFileDialog.FileName);
+ UpdateListView();
+ InvalidateSave = false;
+ }
+ }
+
+ private PlaylistConfig RemoveShowAt(int position, PlaylistConfig pcfg)
+ {
+ int assindex = 0;
+ foreach (int? assignment in pcfg.SelectorAssignments)
+ {
+ if (assignment == null) continue;
+ if (assignment == position) pcfg.SelectorAssignments[assindex] = null;
+ if (assignment > position) pcfg.SelectorAssignments[assindex]--;
+ assindex++;
+ }
+ pcfg.Shows.RemoveAt(position);
+ return pcfg;
+ }
+
+ private void LoadNextShowtape()
+ {
+ string tempUSTData = File.ReadAllText(CurrentlyPlaying.FilePath);
+ if (!tempUSTData.StartsWith("UST,2,"))
+ {
+ MessageBox.Show($"Selected showtape \"{Path.GetFileNameWithoutExtension(CurrentlyPlaying.FilePath)}\" is not a UST version 2 showtape.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+
+ string[] stringyBits = tempUSTData.Split(';')[1].Split(',');
+ if (File.Exists("pc3playertempaudio.tmp")) File.Delete("pc3playertempaudio.tmp");
+ File.WriteAllBytes("pc3playertempaudio.tmp", Convert.FromBase64String(tempUSTData.Split(';')[2]));
+
+ tempUSTData = null;
+
+ List tempShowData = new List();
+
+ foreach (string stringyFrame in stringyBits)
+ {
+ BigInteger frame = BigInteger.Parse(stringyFrame, NumberStyles.HexNumber);
+ int selectBit = 0;
+ char[] frameStringOut = new char[64];
+ for (int i = 0; i < Config.Mapping.Bits.Count() / 4; i++)
+ {
+ byte quartet = 64;
+ for (int j = 0; j < 4; j++)
+ {
+ if (Config.Mapping.Bits[selectBit] == 0) continue;
+ if (Config.Mapping.InvertedBits.Contains(Config.Mapping.Bits[selectBit])) { if (!((frame & BigInteger.Pow(2, Config.Mapping.Bits[selectBit] - 1)) == BigInteger.Pow(2, Config.Mapping.Bits[selectBit] - 1))) quartet += (byte)Math.Pow(2, j); }
+ else { if ((frame & BigInteger.Pow(2, Config.Mapping.Bits[selectBit] - 1)) == BigInteger.Pow(2, Config.Mapping.Bits[selectBit] - 1)) quartet += (byte)Math.Pow(2, j); }
+ selectBit++;
+ }
+ frameStringOut[i] = (char)quartet;
+ }
+ tempShowData.Add(new string(frameStringOut).Trim());
+ }
+
+ ShowtapeFrames = tempShowData.ToArray();
+ }
+
+ private void SelectNextShowtape(StartMethod method)
+ {
+ ShowtapeFrames = [];
+ ShowtapeIndex = 0;
+ if (Config.Shows.Count() == 0)
+ {
+ MessageBox.Show("There are no shows in the playlist.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
+ return;
+ }
+ bool willStartShow = false;
+ bool bypassIntermission = false;
+ if (Intermission)
+ {
+ Intermission = false;
+ bypassIntermission = true;
+ GUIUpdateTimer.Stop();
+ }
+ switch (method)
+ {
+ case StartMethod.PlaylistStart:
+ switch (Config.PlaylistStartOption)
+ {
+ case 0:
+ PlaylistIndex = 0;
+ willStartShow = true;
+ break;
+ case 1:
+ PlaylistIndex = SelectRandom.Next(Config.Shows.Count());
+ willStartShow = true;
+ break;
+ }
+ break;
+ case StartMethod.PlaylistShowEnd:
+ if (Config.PlaylistIntermissionOption && (!bypassIntermission))
+ {
+ Intermission = true;
+ IntermissionTotalTime = IntermissionSecondsLeft = Config.PlaylistIntermissionTimeOption * ((Config.PlaylistIntermissionUnitOption == 1) ? 1 : 60);
+ SkipButton.Enabled = true;
+ StopButton.Enabled = true;
+ PauseButton.Enabled = true;
+ Invoke(delegate { PlaybackControlsGroupBox.Text = "Controls: Intermission"; });
+ GUIUpdateTimer.Start();
+ }
+ else
+ {
+ switch (Config.PlaylistShowEndOption)
+ {
+ case 0:
+ PlaylistIndex++;
+ if (PlaylistIndex >= Config.Shows.Count())
+ {
+ if (Config.PlaylistLoopOption)
+ {
+ PlaylistIndex = 0;
+ willStartShow = true;
+ }
+ }
+ else willStartShow = true;
+ break;
+ case 1:
+ PlaylistIndex = SelectRandom.Next(Config.Shows.Count());
+ willStartShow = true;
+ break;
+ case 2:
+ willStartShow = true;
+ break;
+ case 3:
+ break;
+ }
+ }
+ break;
+ }
+
+ if (willStartShow)
+ {
+ CurrentlyPlaying = Config.Shows[PlaylistIndex];
+ LoadNextShowtape();
+
+ FrameTimer = new System.Timers.Timer((1000d / 60d) * Config.FramesPerTick);
+ FrameTimer.Elapsed += PlayFrame;
+ FrameTimer.AutoReset = true;
+
+ ResyncTimer = new System.Timers.Timer(Config.ResyncSeconds * 1000);
+ ResyncTimer.Elapsed += Resync;
+ ResyncTimer.AutoReset = true;
+
+ dataProvider = new StreamDataProvider(File.OpenRead("pc3playertempaudio.tmp"));
+ AudioPlayer = new SoundPlayer(dataProvider);
+
+ Invoke(delegate { PlaybackControlsGroupBox.Text = $"Controls: Playing {CurrentlyPlaying.Name}"; });
+
+ Mixer.Master.AddComponent(AudioPlayer);
+ Playing = true;
+ AudioPlayer.Play();
+ FrameTimer.Start();
+ ResyncTimer.Start();
+ GUIUpdateTimer.Start();
+ PauseButton.Enabled = true;
+ StopButton.Enabled = true;
+ SkipButton.Enabled = true;
+ }
+ }
+
+ void GUIUpdateTick(object sender, ElapsedEventArgs e)
+ {
+ if (Playing)
+ {
+ Invoke(delegate { TimeLabel.Text = $"({TimeSpan.FromSeconds(AudioPlayer.Time).ToString(@"hh\:mm\:ss")}/{CurrentlyPlaying.Length})"; });
+ }
+ if (Intermission)
+ {
+ if (IntermissionSecondsLeft == 0) SelectNextShowtape(StartMethod.PlaylistShowEnd);
+ Invoke(delegate { TimeLabel.Text = $"({TimeSpan.FromSeconds(IntermissionTotalTime - IntermissionSecondsLeft).ToString(@"hh\:mm\:ss")}/{TimeSpan.FromSeconds(IntermissionTotalTime).ToString(@"hh\:mm\:ss")})"; });
+ if (!Paused) IntermissionSecondsLeft--;
+ }
+ }
+
+ void PlayFrame(object sender, ElapsedEventArgs e)
+ {
+ if (ShowtapeIndex + Config.FrameShift >= ShowtapeFrames.Length)
+ {
+ Stop();
+ SelectNextShowtape(StartMethod.PlaylistShowEnd);
+ return;
+ }
+ ControllerPort.Write(ShowtapeFrames[ShowtapeIndex + Config.FrameShift]);
+ ShowtapeIndex += Config.FramesPerTick;
+ }
+
+ void Resync(object sender, ElapsedEventArgs e)
+ {
+ ShowtapeIndex = (int)(AudioPlayer.Time * 60f);
+ }
+
+ private void PauseButton_Click(object sender, EventArgs e)
+ {
+ if (Paused)
+ {
+ Paused = false;
+ PauseButton.Text = "Pause";
+ if (Playing)
+ {
+ FrameTimer.Start();
+ ResyncTimer.Start();
+ AudioPlayer.Seek((float)(((float)ShowtapeIndex) / 60.0));
+ AudioPlayer.Play();
+ }
+ }
+ else
+ {
+ Paused = true;
+ PauseButton.Text = "Unpause";
+ if (Playing)
+ {
+ FrameTimer.Stop();
+ ResyncTimer.Stop();
+ AudioPlayer.Pause();
+ }
+ }
+ }
+
+ private void StopButton_Click(object sender, EventArgs e)
+ {
+ Stop();
+ }
+
+ private void SkipButton_Click(object sender, EventArgs e)
+ {
+ if (Playing) Stop();
+ SelectNextShowtape(StartMethod.PlaylistShowEnd);
+ }
+
+ private void StartButton_Click(object sender, EventArgs e)
+ {
+ if (Playing)
+ {
+ if (MessageBox.Show(
+ "A show is currently playing!\nPerforming this action will stop it.\nAre you sure?",
+ "Show Playing",
+ MessageBoxButtons.YesNo,
+ MessageBoxIcon.Exclamation
+ ) != DialogResult.Yes)
+ return;
+ Stop();
+ }
+ SelectNextShowtape(StartMethod.PlaylistStart);
+ }
+
+ void Stop()
+ {
+ Playing = false;
+ AudioPlayer.Stop();
+ FrameTimer.Stop();
+ ResyncTimer.Stop();
+ GUIUpdateTimer.Stop();
+ ResyncTimer.Dispose();
+ FrameTimer.Dispose();
+ PauseButton.Enabled = false;
+ StopButton.Enabled = false;
+ SkipButton.Enabled = false;
+ if (Playing) Mixer.Master.RemoveComponent(AudioPlayer);
+ Paused = false;
+ Invoke(delegate
+ {
+ PlaybackControlsGroupBox.Text = "Controls: Not Playing";
+ PauseButton.Text = "Pause";
+ TimeLabel.Text = "(00:00:00/00:00:00)";
+ });
+ dataProvider.Dispose();
+ if (File.Exists("pc3playertempaudio.tmp")) File.Delete("pc3playertempaudio.tmp");
+ ShowtapeFrames = [];
+ ShowtapeIndex = 0;
+ }
+
+ private void NewPlaylistButton_Click(object sender, EventArgs e)
+ {
+ if (Playing)
+ {
+ if (MessageBox.Show(
+ "A show is currently playing!\nPerforming this action will stop it.\nAre you sure?",
+ "Show Playing",
+ MessageBoxButtons.YesNo,
+ MessageBoxIcon.Exclamation
+ ) != DialogResult.Yes)
+ return;
+ Stop();
+ }
+
+ if (InvalidateSave)
+ if (MessageBox.Show(
+ "You have an unsaved Playlist!\nDo you still want to create a new one?",
+ "Unsaved Playlist",
+ MessageBoxButtons.YesNo,
+ MessageBoxIcon.Exclamation
+ ) != DialogResult.Yes)
+ return;
+
+ Config = new PlaylistConfig();
+ ChannelMappingGroupBox.Text = "Channel Map: None Loaded";
+ PlaylistGroupBox.Text = "Playlist: Unsaved";
+ UpdateListView();
+ InvalidateSave = false;
+ }
+ }
+}
diff --git a/PC3Player/PC3Player/MainForm.resx b/PC3Player/PC3Player/MainForm.resx
new file mode 100644
index 0000000..95d5455
--- /dev/null
+++ b/PC3Player/PC3Player/MainForm.resx
@@ -0,0 +1,3064 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 387, 56
+
+
+ 36, 56
+
+
+ 202, 56
+
+
+ 543, 56
+
+
+ 710, 56
+
+
+ 131
+
+
+
+
+ AAABAAkAEBAAAAEAIABoBAAAlgAAABgYAAABACAAiAkAAP4EAAAgIAAAAQAgAKgQAACGDgAAMDAAAAEA
+ IACoJQAALh8AAEBAAAABACAAKEIAANZEAABISAAAAQAgAIhUAAD+hgAAYGAAAAEAIAColAAAhtsAAICA
+ AAABACAAKAgBAC5wAQAAAAAAAQAgADo0AABWeAIAKAAAABAAAAAgAAAAAQAgAAAAAAAABAAAACgAAAAo
+ AAAAAAAAAAAAAMmk/wTLqf9j07b/2trB//3Wwf//zsD//8/A///PwP//z8D//8/A///PwP//z8D//86/
+ //3Ntf/azKn/Y8ul/wTLqf9j3cb/7vbw///9+///9Pn//9jz///U8///1fP//9Xz///V8///1fP//9Xz
+ ///V8v//0+j//8/D/+7Mqf9j07b/2vbw///////////////////p+///1fb//9X2///V9v//1fb//9X3
+ ///V9///1fb//9X3///T6P//zbX/2trB//37+f///Pn//////////////f7//+X6///V9v//1fb//9X2
+ ///U8f//1O3//9Xy///V9///1fL//86///3bw///7eL//9rC///69//////////////9////7Pv//9r1
+ ///R1P//zbj//821///OvP//0t///9Xz///PwP//28T//+fY///Qsf//9/L/////////////////////
+ ///n3v//zq///9zP///d4P//18X//86z///k6f//2ML//9vE///o2P//0LH///Xu///9+////v7/////
+ ///9/P//2b///9zE///9/f///v////j2///Wu///693//9zE///bxP//6Nj//82r///Vuv//17z//93G
+ ///z7P7/+vX5/9K0/v/l1P//////////////////9/H///n1///bwv//28T//+jY///Pr///6Nj//+rc
+ ///Vuf//17z6//bq4f/TtPr/5NL8/////f////////////z6///8+f//28L//9vE///o2P//0bL///n1
+ ////////6Nj//9Cw+//16N3/2b70/9q/9f/99uL///7v//r2/P/bwv//7eH//9vD///bxP//6Nj//86u
+ ///o2f//697//9a7///Wuff//PHY/+3b5P/Pr/z/4svs/+/e4//dxfb/0bL9//Lp+//bw///28P///Dm
+ ///Yvv//17z//9a7///bwPX/8eHg///21f/+9db/69jm/9e69v/Ttfn/2Lz0/+/f4v/99N7/28H3/9rB
+ //38+v///fv///z6///8+fr//vXc///31P//9tX///bV///31f/88dj/+e3a//3y1///99T//fLX/9q+
+ 8/3Ttv/a9vD///////////////vs///21f//9tX///bV///21f//9tX///bV///31f//9tX///fU//bo
+ 3f/Ttfnay6n/Y93G/+728P///fr7//303//989b//fPX//3z1//989f//fPX//3z1//989f//fLX//bo
+ 3f/dw/Huy6n/Y8mk/wTLqf9j07b/2trA/P3awPT/2sDz/9rA8//awPP/2sDz/9rA8//awPP/2sDz/9q/
+ 9P3Ttfnay6n/Y8ml/wQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAKAAAABgAAAAwAAAAAQAgAAAAAAAACQAAACgAAAAoAAAAAAAAAAAAAMyq
+ /wDj0P8Ay6n/Q8uo/7TNq//wzq3//86t///Mrf//zK3//8yt///Mrf//zK3//8yt///Mrf//zK3//8yt
+ ///Mrf//zK3//8yt///Mq//wzKj/tMyp/0PQyf8AzKr/AOHN/wDLqf9ezq7/597I///t4v//8un//+7o
+ ///X4///0uP//9Pj///T4///0+P//9Pj///T4///0+P//9Pj///T4///0+P//9Pi///S3P//z8X//8yt
+ /+fMqf9ez8r/AMup/0POrv/n6dr///79///////////////////n+///1ff//9X3///V9///1ff//9X3
+ ///V9///1ff//9X3///V9///1ff//9X3///V9///1fX//9HV///Mrf/nzKn/Q8uo/7TeyP///v3/////
+ ///////////////////5/v//3Pj//9T2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X1///Pxf//zKj/tM2r//Dt4v//////////////////////////////////8/z//9n3
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1ff//9X2///V9v//1fb//9X3///S3P//zKv/8M6t
+ ///y6f////////v4///+/v////////////////////////H8///Z9///1Pb//9X2///V9v//1ff//9Xz
+ ///U7v//1O7//9Xy///V9///1fb//9X3///T4v//zK3//86u///z6v//7uL//9S4///u4///////////
+ ///////////////////0/f//3/j//9X2///V9P//0tr//86////NtP//zbP//867///R1f//1fL//9X4
+ ///S4///zK3//86u///y6v//4s///8qm///iz///////////////////////////////////+/7//+z6
+ ///U0v//zKv//8uq///Ntf//zbb//8ys///Mqv//0Mr//9f1///Y5P//za3//86u///y6v//4s7//8qn
+ ///izv////////////////////////////////////////Pq///Pr///z67//+LZ///k8v//4fP//97e
+ ///Qsv//zKz//+jl///w6v//zq7//86u///y6v//4s7//8qn///iz///////////////////////////
+ /////////////+HM///Kp///38r///7+/////////v////7////l1P//yqf//+TS///z6v//zq7//86u
+ ///y6v//4s7//8uo///bw///7+X//+/l///y6f//+fX//////////////Pr//9a7///Mqf//7OD/////
+ ///////////////////38f//2sL//+7j///y6v//zq7//86u///y6v//4s7//8up///Mqv//zKr//8yq
+ ///NrP//07b//+na///+/fr/+fT2/9O1///NrP//8ej//////////////////////////////fz/////
+ ///y6f//zq7//86u///y6v//4s7//8uo///XvP//5tb//+XT///awf//zKv//86u///x5Or/+u/b/9O0
+ +v/NrP//8ef////////////////////////////////////////y6f//zq7//86u///y6v//4s7//8qn
+ ///iz//////////////8+v//2sH//8qo///kzuv//PLX/9a69v/Lqf//69rw///98P///vz/////////
+ ///7+P//6dr///fx///y6v//zq7//86u///y6v//4s7//8qn///iz///////////////////38r//8qn
+ ///hyu3///bV/+HJ7v/KqP//3MLx//701///+d////zv////+//m1v//y6j//+XU///z6v//zq7//86u
+ ///y6v//4s7//8qn///gy///+vf///n2///w5v//07b//8up///o1Oj///jU//Pk3//QsPz/zaz+/+bR
+ 6v/67tn/+/DZ/+3d6//Qsf//zav//+7j///z6///zq7//86u///y6v//49D//8qn///Orv//07X//9K0
+ ///Orf//y6j//9a49//469v///fV///21f/p1ef/zq79/8yq///TtPn/1Lb4/82s/v/Mqv//4cnv//74
+ 6v/y6Pn/zq7//86u///y6v//8+r//9vC///Yv///2L7//9i+///awf3/48zt//bp3P//9tX///bV///2
+ 1f/+9dX/8N/i/9zC8v/Ttfn/0rP6/9i89f/q1ub//PLX///41P/y4+L/zq3+/86t///y6f////////79
+ ///9/P///fz///38///++e////bV///31f//9tX///bV///21f//9tX///fU//701v/679n/+e7a//3z
+ 1///99X///bV///31P/y4uD/zq39/82r//Dt4v///////////////////////////f//+OD///bU///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///fV///21f//9tX///bV///31P/t3OT/zav+8Muo
+ /7TeyP///v3////////////////////88v//9tb///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV//711v/exfD/y6j/tMup/0POrv/n6dr///79///////////9///6
+ 4f//99T///fU///31P//99T///fU///31P//99T///fU///31P//99T///fU///31P//99T//vXW/+nV
+ 5//Orf3ny6n/Q+DK/wDLqf9ezq7/597I///t4v//8uj4//Lj4v/y4+D/8uPg//Lj4P/y4+D/8uPg//Lj
+ 4P/y4+D/8uPg//Lj4P/y4+D/8uPg//Li4P/t3OT/3sXw/86t/efLqf9e4MjuAMyq/wDgzP8Ay6n/Q8uo
+ /7TNq//wzq3+/86t/f/Orf3/zq39/86t/f/Orf3/zq39/86t/f/Orf3/zq39/86t/f/Orf3/zq39/86t
+ /f/Nq/7wy6j/tMup/0Pfx+8AzKr/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA
+ AAAgAAAAQAAAAAEAIAAAAAAAABAAAAAoAAAAKAAAAAAAAAAAAADMqv8AzKr/AMyq/wDMqv8mzKr/iMup
+ /9bLqP/4y6j//8uo///MqP//zKn//8yp///Mqf//zKn//8yp///Mqf//zKn//8yp///Mqf//zKn//8yp
+ ///Mqf//zKn//8yp///Mqf//zKj/+Myp/9bMqv+JzKr/Jsyq/wDMqv8AzKr/AMyq/wDOrf8AzKr/UMup
+ /9PNrP//1rv//97J///hzf//4M3//9TK///Pyf//0Mn//9DJ///Qyf//0Mn//9DJ///Qyf//0Mn//9DJ
+ ///Qyf//0Mn//9DJ///Qyf//0Mn//9DJ///Pxf//zrn//8ys///Mqf/TzKr/UM+4/wDMqv8AzKr/AMyq
+ /1DMqf/r1Lj//+3h///7+f//////////////////6fv//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///U8f//0tz//823///Mqf/rzKr/UMyq
+ /wDMqv8my6n/09S4///17//////////////////////////////5/v//2/f//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9///0+f//823
+ ///Mqf/TzKr/Jsyq/4nNrP//7eL////////////////////////////////////////t+///1vb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9///0tz//8ys///Mqv+Iy6n/1ta7///7+f////////////////////////////////////////3/
+ ///k+f//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///U8f//zrn//8yp/9bLqP/43sn/////////////////////////////////////
+ //////////////v+///h+P//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1ff//9X3
+ ///V9v//1fb//9X2///V9v//1fb//9X2///Pxf//zKn/+Muo///hzf////////7+///69////fz/////
+ //////////////////////////////r+///i+f//1fb//9X2///V9v//1fb//9X2///V9///1fX//9Tx
+ ///U7f//1O7//9Xy///V9///1ff//9X2///V9v//1fb//9DJ///Mqf//y6j//+HN////////7N///9O2
+ ///izv///fz///////////////////////////////////z+///n+v//1/b//9T2///V9v//1fX//9Lg
+ ///Pxv//zrj//820///NtP//zrz//9HR///U7f//1ff//9X2///V9v//0Mn//8yp///LqP//4c3///79
+ ///awv//yqf//9Cx///38v////////////////////////////////////////7////y/P//3/j//9b0
+ ///Q0P//zK7//8yo///MqP//zKj//8yo///MqP//zKn//866///T5v//1ff//9T2///Qyf//zKn//8uo
+ ///hzf///fz//9m////LqP//0LD///Xv////////////////////////////////////////////////
+ ///8////4Nn//8ys///Mqf//zK7//87C///Qz///z8v//824///Mqv//zKn//867///Z8P//5fr//9rL
+ ///LqP//y6j//+HN///9/P//2b///8uo///QsP//9u//////////////////////////////////////
+ //////////////jz///Utv//y6n//8+v///n3v//6/n//+f7///k+v//5PH//9jE///Mqf//zKr//+bZ
+ ////////4c3//8uo///LqP//4c3///38///Zv///y6j//9Cw///27///////////////////////////
+ ////////////////////////6Nn//8yq///Lqf//4c3/////////////////////////////9e///9Gy
+ ///LqP//3MT///7+///hzf//y6j//8uo///hzf///fz//9m////LqP//0LD///Xu/////////v7////+
+ //////////////////////////////79///cxP//y6j//86t///x6P//////////////////////////
+ ///+/v//38r//8qn///dxv///v7//+HN///LqP//y6j//+HN///9/P//2b///8up///NrP//2cD//9zF
+ ///cxf//3sf//+PR///w5v///fv/////////////+/n//9W5///LqP//0bP///jz////////////////
+ ///////////////////38v//6Nj///bw////////4c3//8uo///LqP//4c3///38///Zv///y6n//8yq
+ ///LqP//yqf//8qn///Kp///y6j//82s///eyP//+vf////98v/59Pb/07X//8up///Ttv//+vb/////
+ ///////////////////////////////////////////////////hzf//y6j//8uo///hzf///fz//9m/
+ ///Lqf//zaz//9vD///fyv//3sj//9i+///Orv//zKn//8up///k0Pr///jb//nu3P/TtPr/y6n//9O2
+ ///69v///////////////////////////////////////////////////////+HN///LqP//y6j//+HN
+ ///9/P//2b///8uo///QsP//9e///////////v///fv//+vd///Orv//y6n//9S2+f/679n//PHY/9W4
+ 9//Lqf//0LH+//fv9v////3////////////////////////////+/f//+fX///79////////4c3//8uo
+ ///LqP//4c3///38///Zv///y6j//9Cw///27////////////////////Pr//9a7///Lqf//z6/8//Xo
+ 3f//9dX/3MLy/8up///Nq/7/7t7k///63////PD///78/////////////////+jZ///StP//6Nn/////
+ ///hzf//y6j//8uo///hzf///fz//9m////LqP//0LD///bv///////////////////8+v//17z//8up
+ ///Pr/z/9efd///41P/p1ef/zKr//8up///dxPH//vTV///31f//+N7///vt////+v/28P//0rP//8qn
+ ///bxP///v7//+HN///LqP//y6j//+HN///9/P//2b///8uo///QsP//9u///////////////v3//+3i
+ ///Prv//y6n//9O0+f/57dr///fU//js2v/Utvj/y6n//86s/v/o0+j//fPX///31P//99X/+e/h/9vD
+ +//Mqf//y6n//+bV////////4c3//8uo///LqP//4c3///38///Zv///y6n//82s///dxv//4cz//+DL
+ ///awv//z7D//8yq///Lqf//4cnu///11f//9tX///fV/+za5P/Orf3/y6n//82s/v/av/P/5M7r/+PM
+ 7P/WuPf/zKr//8up///Wufn/+PL3///////hzf//y6j//8uo///hzf///v7//93G///Kp///y6n//8qn
+ ///Kp///yqf//8qn///LqP//zKr//9q+9P/47Nv///fV///21f//9tX//vXV/+rX5v/Rsfv/y6n//8uo
+ ///LqP//y6j//8uo///Mqv//17r2//Tl3v//+Nn///rm/+HL+f/LqP//y6j//+HN////////8+z//97J
+ ///bw///28P//9vD///bw///3MX//+DJ9//r2Ob/+u/Z///31f//9tX///bV///21f//9tX///bV//Xm
+ 3v/iy+3/17r2/9O0+v/Ttfn/2b30/+fT6f/67tn///fV///21f//9tT/4cnu/8up///LqP//4c3/////
+ //////////7///79///+/f///v3///79///+/f7///ni///31P//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///fV///21f/88dj/+e3a//ru2f/989f///fV///31f//9tX///bV///21f/hye7/y6n//8uo
+ //jeyf/////////////////////////////////////////99P//99f///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//99X///fV///21f//9tX///bV///21f//9tX///bV/97F
+ 8P/LqP/4y6n/1ta7///7+f////////////////////////////////7///nl///21P//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f/78dj/1rn3/8up/9bMqv+Jzaz//+3i///////////////////////////////99v//99j///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///fU/+3c5P/NrP7/zKr/icyq/ybLqf/T1Lj///Xv//////////////////////////rn///2
+ 1P//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///31P/1593/1Lf4/8up/9PMqv8mzKr/AMyq/1DMqf/r1Lj//+3i///7+f/////////+
+ +P//99r///bU///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f/78dj/7dzk/9S3+P/Mqf/rzKr/UMyq/wDMqv8Azaz/AMyq/1DLqf/Tzaz//9a7
+ ///eyf//4cv5/+HJ7v/hye7/4cnu/+HJ7v/hye7/4cnu/+HJ7v/hye7/4cnu/+HJ7v/hye7/4cnu/+HJ
+ 7v/hye7/4cnu/+HJ7v/hye7/3sXw/9a59//NrP7/y6n/08yq/1DNrP4AzKr/AMyq/wDMqv8AzKr/AMyq
+ /ybMqv+Jy6n/1suo//nLqP//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up
+ ///Lqf//y6n//8up///Lqf//y6n//8up///LqP/4y6n/18yq/4nMqv8mzKr/AMyq/wDMqv8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAoAAAAMAAAAGAAAAABACAAAAAAAAAkAAAAKAAAACgAAAAAAAAAAAAAAAAAAMyq/wDMqv8AzKr/AMyq
+ /wDMqv8EzKr/Ocyq/4vMqv/NzKr/8cyq//7Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq//7Mqv/xzKr/zcyq/4zMqv85zKr/BMyq/wDMqv8AzKr/AMyq/wAAAAAAzKr/AMyq
+ /wDMqv8AzKr/AMyq/yTMqv+UzKr/58yp///Lqf//y6n//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqf//zKn//8yq///Mqv/nzKr/lMyq/yXMqv8AzKr/AMyr
+ /wDMqv8AzKr/AMyq/wDMqv8AzKr/RMyq/9HMqv//zKn//9Gy///cxP//5dT//+nb///q3P//6tz//+Pa
+ ///S1///0df//9HX///R1///0df//9HX///R1///0df//9HX///R1///0df//9HX///R1///0df//9HX
+ ///R1///0df//9HX///R1///0df//9HX///R1///0df//9HW///Qz///z8L//82x///Mqf//zKr//8yq
+ /9LMqv9EzKn/AMyq/wDMqv8AzKr/AMyq/wDMqv9EzKr/4cyp///Pr///4s7///bw///+/f//////////
+ //////////////v////d+f//1ff//9X3///V9///1ff//9X3///V9///1ff//9X3///V9///1ff//9X3
+ ///V9///1ff//9X3///V9///1ff//9X3///V9///1ff//9X3///V9///1ff//9X3///V9///1fT//9Po
+ ///Qy///zK7//8yp///Mqv/hzKr/RMyq/wDLqv8AzKr/AMyq/yXMqv/SzKn//9Gy///t4f///v7/////
+ ///////////////////////////////////s+///1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X3///V9f//0tv//82y///Mqf//zKr/0syq/yTMqv8AzKr/BMyq/5TMqv//z6///+3h
+ ///////////////////////////////////////////////////7/v//3vj//9T2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1ff//9Lb///Mrv//zKr//8yq/5TMqv8EzKr/Ocyq
+ /+fMqf//4s7///7+////////////////////////////////////////////////////////8fz//9f2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X1///Qy///zKn//8yq
+ /+fMqv85zKr/jMyp///Rsv//9vD/////////////////////////////////////////////////////
+ /////////v///+f6///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X3
+ ///T6P//zbH//8yq///Mqv+MzKr/zcup///cxP///v3/////////////////////////////////////
+ //////////////////////////////v+///g+P//1Pb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9P//z8L//8yp///Mqv/NzKr/8cup///l1P//////////////////////////
+ ///////////////////////////////////////////////////4/f//3fj//9T2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9///0M///8yp///Mqv/xzKr//syq///p2///////////
+ ////////////////////////////////////////////////////////////////////////9v3//9z4
+ ///U9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1ff//9X3
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9///0db//8yq///Mqv/+zKr//8yq
+ ///q3P//////////////////+/j///v4////////////////////////////////////////////////
+ //////////////f9///f+P//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9///1ff//9X1
+ ///U8f//1O7//9Tt///U7///1fP//9X2///V9///1fb//9X2///V9v//1fb//9X2///V9///0df//8yq
+ ///Mqv//zKr//8yq///q3P/////////////r3v//1bn//9W6///t4v//////////////////////////
+ ///////////////////////////////////6/v//5Pn//9b2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///U7P//0db//8/D///Ouf//zbX//820///Ntv//zr3//9DO///T5v//1fX//9X3///V9v//1fb//9X2
+ ///V9///0df//8yq///Mqv//zKr//8yq///q3P////////n0///Ttv//y6j//8uo///VuP//+vb/////
+ /////////////////////////////////////////////////////////f///+37///a9///1fb//9X2
+ ///V9v//1fT//9HX///Ntf//zKr//8yp///Mqf//zKn//8yp///Mqf//zKn//8yp///NsP//0Mz//9Tv
+ ///V9///1fb//9X2///V9///0df//8yq///Mqv//zKr//8yq///q3P////////Pr///Orv//zKr//8yq
+ ///Pr///9O3/////////////////////////////////////////////////////////////////////
+ ///4/f//5vr//9j3///V9P//0M7//8ys///Mqf//zKr//8yq///Mqf//zKn//8yp///Mqf//zKr//8yq
+ ///Mqv//zKr//8/B///U7v//1ff//9X2///V9///0df//8yq///Mqv//zKr//8yq///q3P////////Lq
+ ///Orf//zKr//8yq///Prv//9Oz/////////////////////////////////////////////////////
+ //////////////////////////////b9///a1///zKz//8yq///Mqv//zKn//8yr///Ntf//zr7//8/A
+ ///OuP//zK3//8yp///Mqv//zKr//8yp///Px///1PP//9b2///e+f//3Nn//8yq///Mqv//zKr//8yq
+ ///q3P////////Lq///Orf//zKr//8yq///Prv//9Oz/////////////////////////////////////
+ //////////////////////////////////////////////Xu///Ss///zKn//8yq///Mqf//0LP//9XW
+ ///V7f//1fT//9T0///U8P//0t///867///Mqv//zKr//8yq///MrP//3d////P9///8////6tz//8yq
+ ///Mqv//zKr//8yq///q3P////////Lq///Orf//zKr//8yq///Prv//9Oz/////////////////////
+ /////////////////////////////////////////////////////////v7//+DL///Lqf//zKr//8yp
+ ///Rsf//7+b///j+///z/f//7/z//+z7///r+///6/z//+vw///Xvf//zKn//8yq///Lqf//3MT///78
+ ////////6tz//8yq///Mqv//zKr//8yq///q3P////////Lq///Orf//zKr//8yq///Prv//9Oz/////
+ ////////////////////////////////////////////////////////////////////////9vH//9Gz
+ ///Mqf//zKr//8yq///l0//////////////////////////////////////////////w5v//zq7//8yq
+ ///Mqf//0bP///fy////////6tz//8yq///Mqv//zKr//8yq///q3P////////Lq///Orf//zKr//8yq
+ ///Prv//9Oz/////////////////////////////////////////////////////////////////////
+ ////////6tz//8yq///Mqv//zKn//9Gy///28f//////////////////////////////////////////
+ ///9+///2sH//8up///Mqv//zq7///Pr////////6tz//8yq///Mqv//zKr//8yq///q3P////////Lq
+ ///Orf//zKr//8yq///Prv//9O3/////////////////////////////////////////////////////
+ ////////////////////////38r//8up///Mqv//y6n//9rB///9/P//////////////////////////
+ ////////////////////////6t3//8yq///LqP//0rT///fy////////6tz//8yq///Mqv//zKr//8yq
+ ///q3P////////Lq///Orf//zKr//8yq///NrP//3sf//+PQ///j0P//49D//+PQ///l1P//697///Ts
+ ///8+//////////////////////////////9+///2L7//8up///Mqv//y6n//+LO////////////////
+ /////////////////////////////////////////Pn//+TS///cxP//7uP/////////////6tz//8yq
+ ///Mqv//zKr//8yq///q3P////////Lq///Orf//zKr//8yq///Mqv//y6n//8up///Lqf//y6n//8up
+ ///Lqf//zKr//8+v///awf//7+T///7+///////////////////69///1Lj//8up///Mqv//y6n//+bW
+ ///////////////////////////////////////////////////////////////////+/f//////////
+ ////////6tz//8yq///Mqv//zKr//8yq///q3P////////Lq///Orf//zKr//8yq///Mqv//zKn//8yp
+ ///Mqf//zKn//8yq///Mqv//zKr//8yq///Lqf//z67//+na/////v////zv///76P/59Pj/07X//8yp
+ ///Mqv//zKn//+jZ////////////////////////////////////////////////////////////////
+ ////////////////////////6tz//8yq///Mqv//zKr//8yq///q3P////////Lq///Orf//zKr//8yq
+ ///Mq///0bP//9O1///Ttf//0rX//9Cx///NrP//y6n//8yq///Mqv//zKn//8+w///x5/v///nd///2
+ 1P/57t3/07T6/8yp///Mqv//zKn//+jZ////////////////////////////////////////////////
+ ////////////////////////////////////////6tz//8yq///Mqv//zKr//8yq///q3P////////Lq
+ ///Orf//zKr//8yq///Orv//7+X///r2///59f//+fX///bx///u4///28P//8yr///Mqv//zKr//8up
+ ///exfX//vXX///31f/779j/1Lb4/8up///Mqv//y6n//+XU////////////////////////////////
+ ////////////////////////////////////////////////////////6tz//8yq///Mqv//zKr//8yq
+ ///q3P////////Lq///Orf//zKr//8yq///Prv//9O3/////////////////////////////+/n//9vD
+ ///Lqf//zKr//8yp///TtPn/+e3a///31f/989f/2Lz1/8up///Mqv//y6n//9/I9////PH///78////
+ //////////////////////////////////////////////v4///48////v3/////////////6tz//8yq
+ ///Mqv//zKr//8yq///q3P////////Lq///Orf//zKr//8yq///Prv//9Oz/////////////////////
+ /////////////+3h///Mq///zKr//8yq///Prv3/9OXe///31P//9tX/38fv/8up///Mqv//y6n//9e6
+ 9v/88tn///nf///87////vv/////////////////////////////////9vD//9i+///Rs///5tX///79
+ ////////6tz//8yq///Mqv//zKr//8yq///q3P////////Lq///Orf//zKr//8yq///Prv//9Oz/////
+ //////////////////////////////Lp///Orf//zKr//8yq///Orf7/8uLg///31P//99T/6tfm/8yq
+ ///Mqv//zKr//8+u/f/y49////fU///21v//+N3///vt///++v/////////////////+/f//3sj//8uo
+ ///Lqf//0bL///fy////////6tz//8yq///Mqv//zKr//8yq///q3P////////Lq///Orf//zKr//8yq
+ ///Prv//9Oz//////////////////////////////////+7i///Nq///zKr//8yq///Orv3/8+Tf///3
+ 1P//99X/9+rc/9Ky+v/Mqf//zKr//8up///fxvD//vTW///21f//9tX///bV///33P//++r///75////
+ ///w5v//z67//8yq///Mqv//0LH///bw////////6tz//8yq///Mqv//zKr//8yq///q3P////////Lq
+ ///Orf//zKr//8yq///Prv//9Oz//////////////////////////////fz//97I///Lqf//zKr//8yp
+ ///Ssvr/+Ovb///31f//9tX///XV/+HK7f/Lqf//zKr//8yq///Orf7/6tbn///21f//99X///bV///2
+ 1f//9tX///jZ//fu7f/Xu///y6n//8yq///Lqf//173///z5////////6tz//8yq///Mqv//zKr//8yq
+ ///q3P////////Lq///Orf//zKr//8yq///Orv//8Ob///v5///7+P//+vf///n0///y6v//4Mz//82s
+ ///Mqv//zKr//8up///bwPP//fPW///21f//9tX///fV//bp3P/Ttfn/y6n//8yq///Mqv//z679/+TO
+ 6//36tv//fPX//701v/88dj/8ODh/9e79f/Mqf//zKr//8yq///Mq///6tz/////////////6tz//8yq
+ ///Mqv//zKr//8yq///q3P////////Lq///Orf//zKr//8yq///Mq///07X//9W4///UuP//1Lj//9K0
+ ///Orv//zKn//8yq///Mqv//zKr//86s/v/u3OP///fU///21f//9tX///bV///31f/t2+T/z6/8/8yp
+ ///Mqv//zKr//8yq///Ssvr/2b30/9vA8//Wuff/zq79/8yp///Mqv//zKr//8up///cw/X//Pfz////
+ /f//////6tz//8yq///Mqv//zKr//8yq///q3P////////Xu///Pr///zKr//8yq///Mqv//zKn//8up
+ ///Lqf//y6n//8yp///Mqv//zKr//8yq///Lqf//zKv//+LL7f/99Nb///bV///21f//9tX///bV///2
+ 1f//9tX/69jl/9Cw/P/Lqf//zKr//8yq///Mqf//y6n//8up///Lqf//zKr//8yq///Mqf//zKr//9vA
+ 8//57Nr///fW///54f///fH/6tv8/8yq///Mqv//zKr//8yq///q3P////////z6///awf//y6n//8up
+ ///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//82r/v/TtPn/59Pp//3y1///9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV//Hi4P/ZvvT/zaz+/8up///Lqf//zKn//8yp///Lqf//y6n//8yp
+ ///Rsfv/5M7r//vw2f//99X///bV///21P//+Nb/6tfq/8yq///Mqv//zKr//8yq///q3P//////////
+ ///48///59f//+HN///hzf//4c3//+HN///hzf//4c3//+HN///j0P//5tX6/+7d5f/47Nr///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///31f/88dj/797i/+DI7v/Xu/b/07X5/9K0
+ +v/Ut/j/2r/z/+bR6v/16N3///bV///21f//9tX///bV///21f//99T/6tfm/8yq///Mqv//zKr//8yq
+ ///q3P////////////////////////////////////////////////////////////////////zr///3
+ 1P//99X///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///fU///2
+ 1f/88tf/+u7Z//nt2v/679n//fTW///31f//99X///bV///21f//9tX///bV///21f//99T/6tfm/8yq
+ ///Mqv//zKr//syq///p2///////////////////////////////////////////////////////////
+ /////vv///jc///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///fV///31f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//99T/6dbn/8yq///Mqv/+zKr/8cup///l1P//////////////////////////////////////////
+ ////////////////////++7///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//99T/5c/q/8up///Mqv/xzKr/zcup///cxP///v3/////////////////////
+ ///////////////////////////////+/P//+N7///bU///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f/+9Nb/3MLy/8up///Mqv/NzKr/jMyp///Rsv//9vD/////
+ ///////////////////////////////////////////////88P//9tb///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///31f/26N3/0bH7/8yq///Mqv+MzKr/Ocyq
+ /+fMqf//4s7///7+///////////////////////////////////////////9///44P//9tT///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV//711f/iy+3/zKn//8yq
+ /+fMqv85zKr/BMyq/5TMqv//z6///+3h//////////////////////////////////////////zy///2
+ 1///9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///fV/+3b
+ 5P/Prv3/zKr//8yq/5TMqv8EzKr/AMyq/yXMqv/SzKn//9Gy///t4f///v7/////////////////////
+ //////7///ni///21P//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///3
+ 1f//9dX/7dvk/9Gy+//Mqf//zKr/0syq/yXMqv8AzKr/AMyq/wDMqv9EzKr/4cyp///Pr///4s7///bw
+ ///+/f///////////////vT///jX///31P//99T///fU///31P//99T///fU///31P//99T///fU///3
+ 1P//99T///fU///31P//99T///fU///31P//99T///fU///31P//99T///fU///31P//99T///fU///3
+ 1P//99T//vTW//bo3f/iy+3/z679/8yp///Mqv/hzKr/RMyq/wDMqv8AzKr/AMyq/wDMqv8AzKr/RMyq
+ /9LMqv//zKn//9Gy///cxP//5dT//+nb///q2fL/6tfm/+rX5v/q1+b/6tfm/+rX5v/q1+b/6tfm/+rX
+ 5v/q1+b/6tfm/+rX5v/q1+b/6tfm/+rX5v/q1+b/6tfm/+rX5v/q1+b/6tfm/+rX5v/q1+b/6tfm/+rX
+ 5v/q1+b/6tfm/+nW5//lz+r/3MLy/9Gx+//Mqf//zKr//8yq/9LMqv9EzKr/AMyq/wDMqv8AzKr/AMyq
+ /wDMqv8AzKr/AMyq/yXMqv+UzKr/58yp///Lqf//y6n//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Lqf//y6n//8yq///Mqv/nzKr/lcyq/yXMqv8AzKr/AMyq
+ /wDMqv8AAAAAAMyq/wDMqv8AzKr/AMyq/wDMqv8EzKr/Ocyq/4zMqv/NzKr/8cyq//7Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq//7Mqv/xzKr/zcyq/4zMqv85zKr/BMyq
+ /wDMqv8AzKr/AMyq/wAAAAAAgAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAQAAKAAAAEAAAACAAAAAAQAgAAAA
+ AAAAQAAAACgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMuq/wDMqv8AzKr/AMyq/wDMqv8AzKr/Csyq
+ /z/Mqv+GzKr/wsyq/+jMqv/6zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr/+syq/+nMqv/CzKr/h8yq
+ /z/Mqv8KzKr/AMyq/wDMqv8AzKr/AMyq/wAAAAAAAAAAAAAAAAAAAAAAAAAAAMyq/wDMqv8AzKr/AMyq
+ /wDMqv8HzKr/S8yq/6/Mqv/rzKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv/szKr/r8yq/0vMqv8HzKr/AMyq/wDMqv8AzKr/AAAAAAAAAAAAAAAAAMyq
+ /wDMqv8AzKr/AMyq/wDMqv8hzKr/m8yq//PMqv//zKr//8up///Lqf//zKr//82s///Orf//zq3//86t
+ ///Orf//za3//8yt///Mrf//zK3//8yt///Mrf//zK3//8yt///Mrf//zK3//8yt///Mrf//zK3//8yt
+ ///Mrf//zK3//8yt///Mrf//zK3//8yt///Mrf//zK3//8yt///Mrf//zK3//8yt///Mrf//zK3//8yt
+ ///Mrf//zK3//8yt///MrP//zKr//8yp///Mqf//zKr//8yq///Mqv/zzKr/m8yq/yLMqv8AzKv/AMyr
+ /wDMqv8AAAAAAM2q/wDMqv8AzKr/AMyq/wDMqv84zKr/ycyq///Mqv//y6n//82s///Wuv//4s7//+ve
+ ///w5///8un///Lq///y6v//8un//97l///S4///0+P//9Pj///T4///0+P//9Pj///T4///0+P//9Pj
+ ///T4///0+P//9Pj///T4///0+P//9Pj///T4///0+P//9Pj///T4///0+P//9Pj///T4///0+P//9Pj
+ ///T4///0+P//9Pj///T4///0+P//9Pj///T4///0uD//9LZ///Qy///zrn//8ys///Mqf//zKr//8yq
+ ///Mqv/JzKr/OMyp/wDMqv8AzKr/AMyq/wDMqv8Azar/AMyq/wDMqv84zKr/1cyq///Mqv//zKr//9e9
+ ///t4P//+/j////////////////////////////////////////x/f//1vf//9X3///V9///1ff//9X3
+ ///V9///1ff//9X3///V9///1ff//9X3///V9///1ff//9X3///V9///1ff//9X3///V9///1ff//9X3
+ ///V9///1ff//9X3///V9///1ff//9X3///V9///1ff//9X3///V9///1ff//9X3///V9///1fb//9Tv
+ ///S2///zrv//8yq///Mqv//zKr//8yq/9bMqv84zKr/AMyq/wDMqv8AzKr/AMyq/wDMqv8izKr/ycyq
+ ///Mqv//zq3//+PQ///69////////////////////////////////////////////////////P7//9/4
+ ///U9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1ff//9Tv///QzP//zKz//8yq///Mqv//zKr/ycyq/yLMqv8AzKr/AMyq
+ /wDMqv8HzKr/m8yq///Mqv//zq3//+fX///+/f//////////////////////////////////////////
+ ///////////////////w/P//1vb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9///1fT//9HS///MrP//zKr//8yq
+ ///Mqv+bzKr/B8yq/wDMqv8AzKr/S8yq//PMqv//zKr//+PQ///+/f//////////////////////////
+ /////////////////////////////////////////f///+L5///U9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9P//0Mz//8yq///Mqv//zKr/88yq/0vMqv8AzKr/Csyq/6/Mqv//y6n//9e9///69///////////
+ ///////////////////////////////////////////////////////////////////1/f//2ff//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1ff//9Tv///Ou///zKn//8yq///Mqv+vzKr/Csyq/z/Mqv/szKr//82s
+ ///t4P//////////////////////////////////////////////////////////////////////////
+ /////////////+v7///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9///0tv//8ys///Mqv//zKr/68yq
+ /z/Mqv+HzKr//8up///Wuv//+/j/////////////////////////////////////////////////////
+ ///////////////////////////////////8/v//4vn//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9Tv
+ ///Ouf//zKn//8yq///Mqv+HzKr/wsyq///Lqf//4s7/////////////////////////////////////
+ //////////////////////////////////////////////////////////////j+///d+P//1Pb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//0Mr//8yp///Mqv//zKr/wsyq/+nMqv//zKr//+ve////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////9P3//9r3///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1ff//9LZ///Mqv//zKr//8yq/+nMqv/6zKr//82s
+ ///w5///////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////y/P//2ff//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X3///S4P//zKz//8yq
+ ///Mqv/6zKr//8yq///Orf//8un/////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////L8///a9///1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1ff//9X3///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9///0+P//8yt///Mqv//zKr//8yq///Mqv//zq3///Lq/////////////////////////Pn///n2
+ ///9/P//////////////////////////////////////////////////////////////////////////
+ ////////9P3//9z4///U9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9///1ff//9X1///U8f//1O7//9Tt///U7f//1PD//9X0///V9v//1ff//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1ff//9Pj///Mrf//zKr//8yq///Mqv//zKr//86t///y6v//////////
+ /////v//7eD//9e8///Ttv//3sf///fy////////////////////////////////////////////////
+ ///////////////////////////////////3/f//4fn//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X3///V8///0+X//9HS///Pw///zrr//822///NtP//zbT//864///Pv///0M7//9Pi
+ ///V8v//1ff//9X2///V9v//1fb//9X2///V9v//1fb//9X3///T4///zK3//8yq///Mqv//zKr//8yq
+ ///Orf//8ur/////////////9O3//9Gy///Lqf//zKn//8uo///dx////fz/////////////////////
+ //////////////////////////////////////////////////////////////z+///p+v//2Pf//9T2
+ ///V9v//1fb//9X2///V9v//1fb//9X1///T4v//z8L//82v///Mqf//zKn//8yp///Mqf//zKn//8yp
+ ///Mqf//zKn//8yp///Mrv//z8D//9Ph///V9f//1fb//9X2///V9v//1fb//9X2///V9///0+P//8yt
+ ///Mqv//zKr//8yq///Mqv//zq3///Lq/////////////+fX///Lqf//zKr//8yq///Mqf//0bL///bx
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////P8///g+P//1fb//9X2///V9v//1fb//9Xz///R0f//za///8yp///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yp///Nr///0dD//9Xy///V9v//1fb//9X2
+ ///V9v//1ff//9Pj///Mrf//zKr//8yq///Mqv//zKr//86t///y6v/////////////izv//y6n//8yq
+ ///Mqv//zKr//86t///y6v//////////////////////////////////////////////////////////
+ /////////////////////////////////////////P7//+37///d+P//1fb//9Tz///Qzf//zKv//8yp
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqf//zKn//8yq///Mqv//zKr//8yq///Mqv//zKr//8yr
+ ///QzP//1fP//9X2///V9v//1fb//9X3///S4///zK3//8yq///Mqv//zKr//8yq///Orf//8ur/////
+ ////////4c3//8up///Mqv//zKr//8yq///Orf//8un/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////+/7//+37
+ ///V1f//zKz//8yq///Mqv//zKr//8yq///Mqv//zKn//8ys///Nsf//zbT//82y///Mrf//zKn//8yq
+ ///Mqv//zKr//8yq///Mqv//zKz//9HU///V9v//1Pb//9X2///Z+P//2+X//82t///Mqv//zKr//8yq
+ ///Mqv//zq3///Lq/////////////+HN///Lqf//zKr//8yq///Mqv//zq3///Lp////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////z6v//0LH//8yp///Mqv//zKr//8yq///Mqf//zLD//8/J///S3///0+r//9Tt
+ ///U6///0uH//9DL///Nsf//zKn//8yq///Mqv//zKr//8yp///Nsv//1eb//9/5///q+///9/7///Hp
+ ///Orf//zKr//8yq///Mqv//zKr//86t///y6v/////////////hzf//y6n//8yq///Mqv//zKr//86t
+ ///y6f//////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////9+///28T//8up///Mqv//zKr//8yq///Mqf//1Ln//+Hk
+ ///e9///2vj//9j3///W9///1vf//9b3///V9v//1OT//8+5///Mqf//zKr//8yq///Mqv//y6n//9vJ
+ ///7/f/////////////y6v//zq3//8yq///Mqv//zKr//8yq///Orf//8ur/////////////4c3//8up
+ ///Mqv//zKr//8yq///Orf//8un/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////7+X//86t///Mqv//zKr//8yq
+ ///Mqf//0rT///Pr/////////P////n+///2/f//8/z///H8///w/P//8fz///L9///u7P//07b//8yp
+ ///Mqv//zKr//8yp///Ss///9/H/////////////8ur//86t///Mqv//zKr//8yq///Mqv//zq3///Lq
+ /////////////+HN///Lqf//zKr//8yq///Mqv//zq3///Lp////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////v3//93H
+ ///Lqf//zKr//8yq///Mqv//zKv//+jZ////////////////////////////////////////////////
+ /////////////+rc///Nq///zKr//8yq///Mqv//zKv//+zf//////////////Lq///Orf//zKr//8yq
+ ///Mqv//zKr//86t///y6v/////////////hzf//y6n//8yq///Mqv//zKr//86t///y6f//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////fy///Ss///zKn//8yq///Mqv//y6n//9W4///59v//////////////////////////
+ ///////////////////////////////////69///1rr//8up///Mqv//zKr//8up///k0f//////////
+ ///y6v//zq3//8yq///Mqv//zKr//8yq///Orf//8ur/////////////4c3//8up///Mqv//zKr//8yq
+ ///Orf//8un/////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////s4P//zav//8yq///Mqv//zKr//8up///izv//////////
+ /////////////////////////////////////////////////////////////+TT///Lqf//zKr//8yq
+ ///Lqf//4s//////////////8ur//86t///Mqv//zKr//8yq///Mqv//zq3///Lq/////////////+HN
+ ///Lqf//zKr//8yq///Mqv//zq3///Lq////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////4s///8up///Mqv//zKr//8yq
+ ///Nq///7eH/////////////////////////////////////////////////////////////////////
+ ///07f//0LH//8up///Lqf//zaz//+3h//////////////Lq///Orf//zKr//8yq///Mqv//zKr//86t
+ ///y6v/////////////hzf//y6n//8yq///Mqv//zKr//82s///hzv//6dv//+na///p2v//6dr//+nb
+ ///q3P//7eH///Lq///49P///v3//////////////////////////////////////////////v3//9vD
+ ///Lqf//zKr//8yq///Mqv//z6////Tt////////////////////////////////////////////////
+ //////////////////////////7//+nb///Ut///1Lf//+XU///9+//////////////y6v//zq3//8yq
+ ///Mqv//zKr//8yq///Orf//8ur/////////////4c3//8up///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//82r///Orv//07X//9zF///t4f///Pr/////////////////////
+ //////////////z5///Wu///y6n//8yq///Mqv//zKn//9K0///49P//////////////////////////
+ /////////////////////////////////////////////////////v//+vf///r2///+/v//////////
+ ////////8ur//86t///Mqv//zKr//8yq///Mqv//zq3///Lq/////////////+HN///Lqf//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yp///Lqf//zaz//9rC
+ ///17v////////////////7///77///////69///1Lf//8up///Mqv//zKr//8up///UuP//+vf/////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////Lq///Orf//zKr//8yq///Mqv//zKr//86t///y6v//////////
+ ///hzf//y6n//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Lqf//1Lj///Tt//////////zx///43f//++r/+fT5/9O1///Mqf//zKr//8yq
+ ///Lqf//1bn///v4////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////y6v//zq3//8yq///Mqv//zKr//8yq
+ ///Orf//8ur/////////////4c3//8up///Mqv//zKr//8yq///Mqv//zKv//82r///Nq///zav//82r
+ ///Mqv//y6n//8up///Mqv//zKr//8yq///Mqv//zKr//8up///ZwP//+/j9///54f//9tT///fV//nu
+ 3v/Ttfv/zKn//8yq///Mqv//y6n//9W5///7+P//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////8ur//86t
+ ///Mqv//zKr//8yq///Mqv//zq3///Lq/////////////+HN///Lqf//zKr//8yq///Mqv//zaz//+XU
+ ///u4///7uL//+7i///t4v//697//+XU///awv//z6///8yp///Mqv//zKr//8yq///Mqv//zKv//+ra
+ 9P//99f///bV///21f/679n/1Lb4/8up///Mqv//zKr//8yp///Ttv//+fb/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////Lq///Orf//zKr//8yq///Mqv//zKr//86t///y6v/////////////hzf//y6n//8yq
+ ///Mqv//zKr//86t///y6v///////////////////////////////////fz///Dm///UuP//zKn//8yq
+ ///Mqv//zKr//8up///av/P//fPX///21f//9tX//PHY/9e69v/Lqf//zKr//8yq///Mqf//0bL///fx
+ /v//////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////y6v//zq3//8yq///Mqv//zKr//8yq///Orf//8ur/////
+ ////////4c3//8up///Mqv//zKr//8yq///Orf//8un/////////////////////////////////////
+ ////////8Ob//8+v///Mqv//zKr//8yq///Mqf//0rP6//jr2///99X///bV//701v/bwfL/y6n//8yq
+ ///Mqv//zKr//86t/v/y5Ov///3w///+/P//////////////////////////////////////////////
+ ///////////////////+/f//+PP///jz///+/f//////////////////8ur//86t///Mqv//zKr//8yq
+ ///Mqv//zq3///Lq/////////////+HN///Lqf//zKr//8yq///Mqv//zq3///Lp////////////////
+ //////////////////////////////37///Zv///y6n//8yq///Mqv//zKr//86t/f/z49////fU///2
+ 1f//9tX/48zs/8up///Mqv//zKr//8yq///Mqv//6dTn///31f//+N////vu///++///////////////
+ ///////////////////////////////////9/P//5dP//9K0///Ss///5NP///38//////////////Lq
+ ///Orf//zKr//8yq///Mqv//zKr//86t///y6v/////////////hzf//y6n//8yq///Mqv//zKr//86t
+ ///y6f//////////////////////////////////////////////////4Mv//8up///Mqv//zKr//8yq
+ ///NrP7/79/i///31P//9tX///fU/+3b5P/Nq/7/zKr//8yq///Mqv//y6n//9zC8v/+9Nb///bU///2
+ 1f//+N3///vs///++v//////////////////////////////////////7uL//86t///Lqf//y6n//86t
+ ///v5f/////////////y6v//zq3//8yq///Mqv//zKr//8yq///Orf//8ur/////////////4c3//8up
+ ///Mqv//zKr//8yq///Orf//8un//////////////////////////////////////////////////+DL
+ ///Lqf//zKr//8yq///Mqv//zav+/+/e4v//99T///bV///31f/369v/0rP6/8yp///Mqv//zKr//8yq
+ ///QsPv/9Obe///31P//9tX///bV///21f//99v///rq///9+P//////////////////////+/n//9i/
+ ///Lqf//zKr//8yq///Lqf//5tX/////////////8ur//86t///Mqv//zKr//8yq///Mqv//zq3///Lq
+ /////////////+HN///Lqf//zKr//8yq///Mqv//zq3///Lp////////////////////////////////
+ //////////////38///awf//y6n//8yq///Mqv//zKr//86t/v/x4uD///fU///21f//9tX//vXW/9/G
+ 8P/Lqf//zKr//8yq///Mqv//zKn//+DH7//+9Nb///bV///21f//9tX///bV///21f//99r///rn///9
+ 9v////7//////+nb///Nq///zKr//8yq///Mqv//zKn//+jZ//////////////Lq///Orf//zKr//8yq
+ ///Mqv//zKr//86t///y6v/////////////hzf//y6n//8yq///Mqv//zKr//86t///y6f//////////
+ ///////////////////////////////////z6///0LH//8yq///Mqv//zKr//8yq///Rsfv/9unc///3
+ 1f//9tX///bV///31P/x4eH/z679/8yq///Mqv//zKr//8yq///Orf3/69jm///21f//9tX///bV///2
+ 1f//9tX///bV///21f//99n///vk//Pq+P/StP//zKn//8yq///Mqv//zKr//86u///y6f//////////
+ ///y6v//zq3//8yq///Mqv//zKr//8yq///Orf//8ur/////////////4c3//8up///Mqv//zKr//8yq
+ ///Orf//8ur////////////////////////////////////////28P//2cD//8yp///Mqv//zKr//8yq
+ ///Lqf//2Lv1//zx1///9tX///bV///21f//9tX//fTW/97F8P/Lqf//zKr//8yq///Mqv//zKn//9Cw
+ /P/q1ub//fPX///31P//99X///fV///31f//99T///bV//Pj3//VuPj/zKn//8yq///Mqv//zKr//8up
+ ///awf///Pr/////////////8ur//86t///Mqv//zKr//8yq///Mqv//zq3///Lq/////////////+HN
+ ///Lqf//zKr//8yq///Mqv//zaz//+fX///x6P//8ef///Hn///x5///7+T//+rc///gy///0rX//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//+bR6f//99X///bV///21f//9tX///bV///31f/26N3/07X5/8up
+ ///Mqv//zKr//8yq///Mqv//zqz+/9zC8v/t2+T/9unc//nt2v/469v/8uPg/+TN7P/Rsvv/zKn//8yq
+ ///Mqv//zKr//8yq///Prv//7+X///////////////////Lq///Orf//zKr//8yq///Mqv//zKr//86t
+ ///y6v/////////////hzf//y6n//8yq///Mqv//zKr//8yq///NrP//zq3//86t///Orf//zaz//82r
+ ///Mqv//y6n//8yp///Mqv//zKr//8yq///Mqv//y6n//9S2+P/469v///fV///21f//9tX///bV///2
+ 1f//9tX///fV/+7d4//QsPz/zKn//8yq///Mqv//zKr//8yq///Lqf//zav+/9Cw+//TtPr/0rL6/86u
+ /f/Mqf//zKn//8yq///Mqv//zKr//8yq///Mqv//5M7v//767f///vv////////////y6v//zq3//8yq
+ ///Mqv//zKr//8yq///Orf//8ur/////////////5NH//8up///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//8+v/P/u3OP///fV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX/7Nrl/9Cx+//Lqf//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKn//8yp///Mqv//zKr//8yq///Mqv//zKr//8yp///Nq/7/4cnu//zy1///99X///jc///7
+ 6/////n/8ur//86t///Mqv//zKr//8yq///Mqv//zq3///Lq/////////////+3h///Nq///zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Lqf//y6n//9Kz
+ +v/s2uT///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f/w4OH/1rn3/8yq
+ ///Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8up///Qsfv/59Lp//3y
+ 1///99X///bV///21f//9tX///jb//Lm7P/Orf7/zKr//8yq///Mqv//zKr//86t///y6v//////////
+ ///7+f//3sj//82s///Mqf//zKn//8yp///Mqf//zKn//8yp///Mqf//zKn//8yp///Mqf//zKr//8yr
+ ///Orv7/1Lb4/+LK7f/16N3///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///fV//nt2v/l0Or/1Lb5/82r///Lqf//y6n//8up///Mqf//zKn//8up///Lqf//zKn//8+v
+ /P/dxPH/8+Tf///21f//9tX///bV///21f//9tX///bV///31P/y49//zq39/8yq///Mqv//zKr//8yq
+ ///Orf//8ur///////////////////z6///w5v//6Nn//+fX///n1///59f//+fX///n1///59f//+fX
+ ///n1///59j//+nb///t4f3/8+Xm//ru2f//9tX///fV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//99X///bV//nt2v/s2uT/4Mju/9i89f/Utvj/07T6/9O1
+ +f/Wuff/3MHy/+bR6f/05d7//fTW///31f//9tX///bV///21f//9tX///bV///21f//99T/8uPg/86t
+ /f/Mqv//zKr//8yq///Mqv//zq3///Lq////////////////////////////////////////////////
+ //////////////////////////////////////////70///41///9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//99X///fU///2
+ 1f/88tf/+u/Z//nt2v/57dr/+/DY//701v//99X///fU///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///fU//Lj4P/Orf3/zKr//8yq///Mqv//zKr//86t///y6f//////////////////////////
+ ///////////////////////////////////////////////////////////+///55P//9tT///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//99X///fV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///31P/y4+D/zq39/8yq///Mqv//zKr/+syq///NrP//8Of/////
+ ///////////////////////////////////////////////////////////////////////////////9
+ 9v//99j///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//99T/8ODh/82s/v/Mqv//zKr/+syq
+ /+nMqv//zKr//+ve////////////////////////////////////////////////////////////////
+ ////////////////////+ub///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///fU/+vZ
+ 5f/Mqv//zKr//8yq/+nMqv/CzKr//8up///izv//////////////////////////////////////////
+ /////////////////////////////////////ff///fZ///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f/iy+3/y6n//8yq///Mqv/CzKr/h8yq///Lqf//1rr///v4////////////////
+ //////////////////////////////////////////////////////////rp///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f/779n/1rn3/8up///Mqv//zKr/h8yq/z/Mqv/szKr//82s
+ ///t4P////////////////////////////////////////////////////////////////////75///3
+ 2///9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//99T/7dvk/82s/v/Mqv//zKr/7Myq
+ /z/Mqv8KzKr/r8yq///Lqf//173///r3////////////////////////////////////////////////
+ ///////////////76///9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//99X/+u/Z/9e7
+ 9v/Lqf//zKr//8yq/6/Mqv8KzKr/AMyq/0zMqv/zzKr//8yq///j0P///v3/////////////////////
+ ///////////////////////////////++///+Nz///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX//vTW/+PM7P/Mqv//zKr//8yq//PMqv9LzKr/AMyq/wDMqv8HzKr/m8yq///Mqv//zq3//+fX
+ ///+/f//////////////////////////////////////////////++7///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//99X//vTW/+fS6f/OrP7/zKr//8yq///Mqv+bzKr/B8yq/wDMqv8AzKr/AMyq
+ /yLMqv/JzKr//8yq///Orf//49D///r3/////////////////////////////////////vz///je///2
+ 1P//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//99T/+u/Z/+PM7P/OrP7/zKr//8yq///Mqv/JzKr/Isyq
+ /wDMqv8AzKr/AMyq/wDMqv8AzKr/OMyq/9XMqv//zKr//8yq///Xvf//7eD///v4////////////////
+ //////////3v///31f//99T///fU///31P//99T///fU///31P//99T///fU///31P//99T///fU///3
+ 1P//99T///fU///31P//99T///fU///31P//99T///fU///31P//99T///fU///31P//99T///fU///3
+ 1P//99T///fU///31P//99T///fU///31P//99T///fU///21f/779n/7dvk/9e79v/Mqv//zKr//8yq
+ ///Mqv/WzKr/OMyq/wDMqv8AzKr/AMyq/wDMqv8AzKr/AMyq/wDMqv84zKr/ycyq///Mqv//y6n//82s
+ ///Wuv//4s7//+ve///w5///8un+//Ll6v/y49//8uPg//Lj4P/y4+D/8uPg//Lj4P/y4+D/8uPg//Lj
+ 4P/y4+D/8uPg//Lj4P/y4+D/8uPg//Lj4P/y4+D/8uPg//Lj4P/y4+D/8uPg//Lj4P/y4+D/8uPg//Lj
+ 4P/y4+D/8uPg//Lj4P/y4+D/8uPg//Lj4P/y4+D/8uPg//Lj4P/y4+D/8ODh/+vZ5f/iy+3/1rn3/82s
+ /v/Lqf//zKr//8yq///Mqv/JzKr/OMyq/wDMqv8AzKr/AMuq/wAAAAAAzKr/AMyq/wDMqv8AzKr/AMyq
+ /yLMqv+bzKr/88yq///Mqv//y6n//8up///Mqv//zaz//86t///Orf3/zq39/86t/f/Orf3/zq39/86t
+ /f/Orf3/zq39/86t/f/Orf3/zq39/86t/f/Orf3/zq39/86t/f/Orf3/zq39/86t/f/Orf3/zq39/86t
+ /f/Orf3/zq39/86t/f/Orf3/zq39/86t/f/Orf3/zq39/86t/f/Orf3/zq39/86t/f/Orf3/zq39/82s
+ /v/Mqv//y6n//8up///Mqv//zKr//8yq//PMqv+czKr/Isyq/wDMqv8AzKr/AMyq/wAAAAAAAAAAAAAA
+ AADMqv8AzKr/AMyq/wDMqv8AzKr/B8yq/0vMqv+vzKr/7Myq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr/7Myq/6/Mqv9MzKr/B8yq/wDMqv8AzKr/AMyq
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAMyq/wDMqv8AzKr/AMyq/wDMqv8AzKr/Csyq/z/Mqv+HzKr/wsyq
+ /+nMqv/7zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr/+syq/+nMqv/DzKr/h8yq/0DMqv8KzKr/AMyq
+ /wDMqv8AzKr/AM2p/wAAAAAAAAAAAAAAAADgAAAAAAAAB8AAAAAAAAADgAAAAAAAAAEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAABwAAAAAAAAAPgAAAAAAAABygA
+ AABIAAAAkAAAAAEAIAAAAAAAAFEAAAAoAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIRsqAMyq
+ /wDMqv8AzKr/AMyq/wDMqf8AzKr/Isyq/2HMqv+hzKr/0syq//DMqv/8zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq//zMqv/wzKr/08yq/6LMqv9hzKr/Isyr/wHMqv8AzKr/AMyq
+ /wDMqv8AKiE0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMqv8AzKr/AMyq/wDMqv8Ax6j/AMyq
+ /y3Mqv+JzKr/1syq//jMqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv/4zKr/1syq/4rMqv8ty7X/AMyq/wDMqv8AzKr/AMyq
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAMyq/wDMqv8AzKr/AMyq/wDMqv8SzKr/ecyq/+HMqv//zKr//8yq
+ ///Mqv//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up///Mqf//zKn//8yp///Mqf//zKn//8yp
+ ///Mqf//zKn//8yp///Mqf//zKn//8yp///Mqf//zKn//8yp///Mqf//zKn//8yp///Mqf//zKn//8yp
+ ///Mqf//zKn//8yp///Mqf//zKn//8yp///Mqf//zKn//8yp///Mqf//zKn//8yp///Mqf//zKn//8yp
+ ///Mqf//zKn//8yq///Mqv//zKr//8yq///Mqv/hzKr/esyq/xPMqv8AzK3/AMyr/wDMqf8AAAAAAAAA
+ AAAAAAAAzKr/AMyq/wDMqv8AzKr/AMyq/yrMqv+yzKr//cyq///Mqv//zKn//8yp///Pr///1rr//9zF
+ ///gy///4c3//+HN///hzf//4c3//9nL///Qyf//0Mn//9DJ///Qyf//0Mn//9DJ///Qyf//0Mn//9DJ
+ ///Qyf//0Mn//9DJ///Qyf//0Mn//9DJ///Qyf//0Mn//9DJ///Qyf//0Mn//9DJ///Qyf//0Mn//9DJ
+ ///Qyf//0Mn//9DJ///Qyf//0Mn//9DJ///Qyf//0Mn//9DJ///Qyf//0Mn//9DI///Pwv//zrn//82v
+ ///Mqv//zKn//8yq///Mqv//zKr//cyq/7PMqv8qzKn/AMys/wDMqv8AzKr/AAAAAAAqITQAzKr/AMyq
+ /wDMqv8AzKr/NMyq/8zMqv//zKr//8yq///Mqv//1Lj//+XU///z7P//+/j///79////////////////
+ //////////////P9///X9///1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9P//1PD//9Pl///Q0P//zbf//8yq
+ ///Mqv//zKr//8yq///Mqv/MzKr/NMyq/wDMq/8AzKr/ACQeLgDMqv8AzKr/AMyq/wDMqv8qzKr/zMyq
+ ///Mqv//zKn//9Cw///k0///+fT///////////////////////////////////////////////////3/
+ ///h+f//1Pb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X3///V9v//1O3//9DO///NsP//zKn//8yq
+ ///Mqv//zKr/zMyq/yrMqv8AzKr/AMyq/wDMqv8AzKr/AMyq/xLMqv+zzKr//8yq///Lqf//1Lf//+/l
+ ///////////////////////////////////////////////////////////////////x/P//1vb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1ff//9X2///S3///zbX//8yp///Mqv//zKr//8yq
+ /7PMqv8SzKr/AMyq/wDMqv8AyaT/AMyq/3rMqv/9zKr//8yp///Ut///8+v/////////////////////
+ ///////////////////////////////////////////////////9////4vn//9T2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9///0+T//821///Mqf//zKr//8yq//3Mqv95yav/AMyq
+ /wDMqv8AzKr/Lcyq/+HMqv//zKr//9Cw///w5f//////////////////////////////////////////
+ ////////////////////////////////////////9P3//9j3///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1ff//9Lf///NsP//zKr//8yq///Mqv/hzKr/Lcyq/wDNqv8AzKr/isyq
+ ///Mqv//zKr//+TT////////////////////////////////////////////////////////////////
+ /////////////////////////v///+f6///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///Qzv//zKr//8yq///Mqv//zKr/icyr/wDMqv8izKr/1syq///Mqf//1Lj///n0
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////r+///e+P//1Pb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X3
+ ///U7f//zbf//8yp///Mqv//zKr/1syq/yLMqv9hzKr/+Myq///Mqf//5dT/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///z/P//2Pf//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//0M///8yq
+ ///Mqv//zKr/+Myq/2HMqv+izKr//8yq///Pr///8+z/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////6/v//9b2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9///0+X//82v///Mqv//zKr//8yq
+ /6HMqv/TzKr//8up///Wuv//+/j/////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////f///+b6///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1PD//864///Mqf//zKr//8yq/9LMqv/wzKr//8up
+ ///cxf///v3/////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////v+///j+f//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fT//8/C///Mqf//zKr//8yq//DMqv/8zKr//8up///gy///////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////6/v//4vn//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9DI///Mqf//zKr//8yq//zMqv//zKr//8up///hzf//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////+v7//+L5///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X3///V9///1ff//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9DJ
+ ///Mqf//zKr//8yq///Mqv//zKr//8up///hzf/////////////////////////////8+v//+fX///z7
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////v+///m+v//1vb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9///1ff//9X2///V8///1PD//9Tu///U7f//1O7//9Tw///V9P//1ff//9X3
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9DJ///Mqf//zKr//8yq
+ ///Mqv//zKr//8up///hzf////////////////////7//+7i///Yvv//07X//9nA///w5v//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///9////6/v//9j3///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1ff//9X1
+ ///U6///0tn//9DJ///Ovv//zrj//821///NtP//zbX//865///PwP//0M7//9Lh///U8f//1ff//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9DJ///Mqf//zKr//8yq///Mqv//zKr//8up
+ ///hzf//////////////////8ur//9Cx///Lqf//zKn//8uo///Stf//9e//////////////////////
+ //////////////////////////////////////////////////////////////////////////////L8
+ ///d+P//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//0+f//9DJ///Ns///zKv//8yp
+ ///Mqf//zKn//8yp///Mqf//zKn//8yp///Mqf//zKn//8yt///Ovf//0tv//9Xz///V9///1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9DJ///Mqf//zKr//8yq///Mqv//zKr//8up///hzf//////////
+ ////////4s///8up///Mqv//zKr//8yq///Lqf//5dT/////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////5/v//5/r//9f3
+ ///U9v//1fb//9X2///V9v//1fb//9Xz///R1f//zbP//8yp///Mqf//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqf//zKz//8/F///U6///1ff//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9DJ///Mqf//zKr//8yq///Mqv//zKr//8up///hzf/////////////+/f//28L//8up
+ ///Mqv//zKr//8yq///Lqf//3cf///7+////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////v////P8///h+P//1vb//9T2
+ ///V9v//1fP//9DN///MrP//zKn//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yp///Ouv//0+j//9X3///V9v//1fb//9X2///V9v//1fb//9DJ
+ ///Mqf//zKr//8yq///Mqv//zKr//8up///hzf/////////////9/P//2cD//8up///Mqv//zKr//8yq
+ ///Lqf//28P///79////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////9/v//8Pz//+D5///X9f//0M///8yr
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqf//zKn//8yp///Mqf//zKn//8yp///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqf//zrv//9Ts///V9///1fb//9X2///V9v//1fb//9DK///Mqf//zKr//8yq
+ ///Mqv//zKr//8up///hzf/////////////9+///2cD//8up///Mqv//zKr//8yq///Lqf//28P///79
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////3////j3v//zK3//8yq///Mqv//zKr//8yq
+ ///Mqv//zKn//8yq///Ns///zr///8/H///QyP//z8P//865///Mrf//zKn//8yq///Mqv//zKr//8yq
+ ///Mqv//zKn//8/G///U8///1Pb//9b2///c+P//6fr//9zM///Lqf//zKr//8yq///Mqv//zKr//8up
+ ///hzf/////////////9+///2cD//8up///Mqv//zKr//8yq///Lqf//28P///79////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////fy///Ut///zKn//8yq///Mqv//zKr//8yq///Mqf//zbP//9DS
+ ///T6v//1PP//9X2///V9v//1fX//9Tw///S4P//z8D//8yr///Mqv//zKr//8yq///Mqv//zKr//8ys
+ ///W3P//5vr///H8///7/v///////+HN///Lqf//zKr//8yq///Mqv//zKr//8up///hzf//////////
+ ///9+///2cD//8up///Mqv//zKr//8yq///Lqf//28P///79////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////7//+LP///Mqf//zKr//8yq///Mqv//zKr//8yp///WvP//5+r//+T6///f+f//2/f//9n3
+ ///X9///1/b//9b3///W9///1vL//9PO///NrP//zKr//8yq///Mqv//zKr//8up///Yv///+/r/////
+ /////////////+HN///Lqf//zKr//8yq///Mqv//zKr//8up///hzf/////////////9+///2cD//8up
+ ///Mqv//zKr//8yq///Lqf//28P///79////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////9u///9Gz
+ ///Mqf//zKr//8yq///Mqv//zKn//9O1///07f////////7////9/v//+v7///j9///1/f//9P3///P8
+ ///z/P//9P3///X6///fy///zKr//8yq///Mqv//zKr//8yq///Orv//8ej//////////////////+HN
+ ///Lqf//zKr//8yq///Mqv//zKr//8up///hzf/////////////9+///2cD//8up///Mqv//zKr//8yq
+ ///Lqf//28P///79////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////5dT//8yp///Mqv//zKr//8yq
+ ///Mqv//zav//+nb////////////////////////////////////////////////////////////////
+ ///48///1Lj//8yp///Mqv//zKr//8yq///Lqf//5dP//////////////////+HN///Lqf//zKr//8yq
+ ///Mqv//zKr//8up///hzf/////////////9+///2cD//8up///Mqv//zKr//8yq///Lqf//28P///79
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////7+f//17z//8up///Mqv//zKr//8yq///Lqf//1rv///r3
+ ////////////////////////////////////////////////////////////////////////59b//8yq
+ ///Mqv//zKr//8yq///Lqf//3MX///79/////////////+HN///Lqf//zKr//8yq///Mqv//zKr//8up
+ ///hzf/////////////9+///2cD//8up///Mqv//zKr//8yq///Lqf//28P///79////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////z6///z6///8yq///Mqv//zKr//8yq///Mqf//5dT/////////////////////
+ ////////////////////////////////////////////////////////9vD//9Gy///Mqf//zKr//8yq
+ ///Lqf//2cD///38/////////////+HN///Lqf//zKr//8yq///Mqv//zKr//8up///hzf//////////
+ ///9+///2cD//8up///Mqv//zKr//8yq///Lqf//28P///79////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///p2v//zKr//8yq///Mqv//zKr//8yq///Orf//8ej/////////////////////////////////////
+ /////////////////////////////////////////v3//93G///Lqf//zKr//8yq///LqP//38n///7+
+ /////////////+HN///Lqf//zKr//8yq///Mqv//zKr//8up///hzf/////////////9+///2cD//8up
+ ///Mqv//zKr//8yq///Lqf//2sL///v4///8+v///Pr///z6///8+v///Pr///z7///9/P///v7/////
+ ///////////////////////////////////////////////////////////////////gy///y6n//8yq
+ ///Mqv//zKr//8yp///Ttf//+fT/////////////////////////////////////////////////////
+ //////////////////////////////Ho///Qsf//y6j//8uo///StP//8un//////////////////+HN
+ ///Lqf//zKr//8yq///Mqv//zKr//8up///hzf/////////////9+///2cD//8up///Mqv//zKr//8yq
+ ///Mqv//z7D//9e8///Xvf//173//9e9///Xvf//173//9i+///awf//3sj//+XT///u4///+PT////+
+ //////////////////////////////////////////////38///awf//y6n//8yq///Mqv//zKr//8up
+ ///Yvf///Pr/////////////////////////////////////////////////////////////////////
+ ///////////////+///w5v//4c3//+LP///z6////////////////////////+HN///Lqf//zKr//8yq
+ ///Mqv//zKr//8up///hzf/////////////9+///2cD//8up///Mqv//zKr//8yq///Mqv//zKr//8up
+ ///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up///NrP//07b//+LO///27///////////
+ //////////////////////////////v5///Wu///y6n//8yq///Mqv//zKr//8up///bxP///v3/////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////+HN///Lqf//zKr//8yq///Mqv//zKr//8up
+ ///hzf/////////////9+///2cD//8up///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKn//8up///Stf//697///7+///////////////+
+ +f///vr///////r3///Ut///zKn//8yq///Mqv//zKr//8up///eyP////7/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////+HN///Lqf//zKr//8yq///Mqv//zKr//8up///hzf//////////
+ ///9+///2cD//8up///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Lqf//zq7//+rc///////////9///54///+Nz///vr//n0
+ +f/Ttf//zKn//8yq///Mqv//zKr//8up///fyv//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////+HN///Lqf//zKr//8yq///Mqv//zKr//8up///hzf/////////////9+///2cD//8up
+ ///Mqv//zKr//8yq///Mqv//zKr//8yp///Mqf//zKn//8yp///Lqf//y6n//8up///Lqf//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKn//9Gy///y6v////70///21///9tT///fV//nu3v/Ttfv/zKn//8yq
+ ///Mqv//zKr//8up///fyf////7/////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////+HN
+ ///Lqf//zKr//8yq///Mqv//zKr//8up///hzf/////////////9+///2cD//8up///Mqv//zKr//8yq
+ ///Mqf//1Lf//+bV///n1///59f//+fX///m1v//5NL//9/K///Xvf//z6///8yp///Mqv//zKr//8yq
+ ///Mqv//zKr//8up///dxv7//fbk///21P//9tX///bV//ru2f/Utvj/zKn//8yq///Mqv//zKr//8up
+ ///dxv///v7/////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////+HN///Lqf//zKr//8yq
+ ///Mqv//zKr//8up///hzf/////////////9+///2cD//8up///Mqv//zKr//8yq///Lqf//28T///7+
+ ///////////////////////////////////8+v//8ej//9rC///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///QsP3/9Obf///31P//9tX///bV//zx2P/Wuff/y6n//8yq///Mqv//zKr//8up///ZwP///fz/////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////+HN///Lqf//zKr//8yq///Mqv//zKr//8up
+ ///hzf/////////////9+///2cD//8up///Mqv//zKr//8yq///Lqf//28P///79////////////////
+ //////////////////////////////r3///bwv//zKn//8yq///Mqv//zKr//8yq///Mqv//6NTo///3
+ 1P//9tX///bV//301v/av/P/y6n//8yq///Mqv//zKr//8up///VuPz/+/X0/////P//////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////+HN///Lqf//zKr//8yq///Mqv//zKr//8up///hzf//////////
+ ///9+///2cD//8up///Mqv//zKr//8yq///Lqf//28P///79////////////////////////////////
+ ///////////////////x5///zq7//8yq///Mqv//zKr//8yq///Lqf//4Mfv///21f//9tX///bV///2
+ 1f/hye7/y6n//8yq///Mqv//zKr//8yq///QsPv/9eje///53////O////77////////////////////
+ //////////////////////////////////////////////7+///x5///49D//+TT///17///////////
+ /////////////+HN///Lqf//zKr//8yq///Mqv//zKr//8up///hzf/////////////9+///2cD//8up
+ ///Mqv//zKr//8yq///Lqf//28P///79////////////////////////////////////////////////
+ ///69///1bj//8up///Mqv//zKr//8yq///Lqf//28Dz//301v//9tX///bV///31P/p1uf/zKr//8yq
+ ///Mqv//zKr//8yq///Mq///7Nrl///31P//9tb///je///77f///vr/////////////////////////
+ /////////////////////////////+/k///QsP//y6n//8up///VuP//9vD//////////////////+HN
+ ///Lqf//zKr//8yq///Mqv//zKr//8up///hzf/////////////9+///2cD//8up///Mqv//zKr//8yq
+ ///Lqf//28P///79///////////////////////////////////////////////////9+///2L7//8up
+ ///Mqv//zKr//8yq///Lqf//2Lz1//3y1///9tX///bV///31P/z5d//z6/8/8yq///Mqv//zKr//8yq
+ ///Lqf//3sXw//711v//9tX///bV///21f//99z///vq///++f//////////////////////////////
+ ////////+vf//9e8///Lqf//zKr//8yq///Lqf//49H//////////////////+HN///Lqf//zKr//8yq
+ ///Mqv//zKr//8up///hzf/////////////9+///2cD//8up///Mqv//zKr//8yq///Lqf//28P///79
+ ///////////////////////////////////////////////////8+v//173//8up///Mqv//zKr//8yq
+ ///Lqf//2b31//3z1///9tX///bV///21f/88dj/17v2/8up///Mqv//zKr//8yq///Mqv//0bH7//Xn
+ 3f//99T///bV///21f//9tX///bV///32v//+uj///33/////v//////////////////////6dr//8yr
+ ///Mqv//zKr//8yq///Lqf//3cb///7+/////////////+HN///Lqf//zKr//8yq///Mqv//zKr//8up
+ ///hzf/////////////9+///2cD//8up///Mqv//zKr//8yq///Lqf//28P///79////////////////
+ ///////////////////////////////////48///0rT//8yp///Mqv//zKr//8yq///Lqf//28Hz//70
+ 1v//9tX///bV///21f//99X/59Lp/8yq///Mqv//zKr//8yq///Mqv//zKn//+DI7//+9Nb///bV///2
+ 1f//9tX///bV///21f//9tX///fZ///65v///fX////+///////38v//1Lj//8yp///Mqv//zKr//8yq
+ ///Lqf//4cz//////////////////+HN///Lqf//zKr//8yq///Mqv//zKr//8up///hzf//////////
+ ///9+///2cD//8up///Mqv//zKr//8yq///Lqf//28P///79////////////////////////////////
+ ///////////////////q3f//zav//8yq///Mqv//zKr//8yq///Lqf//4cnu///21f//9tX///bV///2
+ 1f//99X/9+rc/9O0+v/Mqf//zKr//8yq///Mqv//zKr//86t/f/r2OX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21P//99j///rj//z49P/fyf//zKn//8yq///Mqv//zKr//8yq///Mq///697/////
+ /////////////+HN///Lqf//zKr//8yq///Mqv//zKr//8up///hzf/////////////9+///2cD//8up
+ ///Mqv//zKr//8yq///Lqf//28P///79//////////////////////////////////////////////Ts
+ ///UuP//zKn//8yq///Mqv//zKr//8yq///Mqv//69jm///31P//9tX///bV///21f//9tX///bV/+XQ
+ 6v/Mqv//zKr//8yq///Mqv//zKr//8yp///Qsfv/7Nnl//711v//99T///bV///21f//9tX///bV///2
+ 1f//99T//PHX/+LM7v/Nq///zKr//8yq///Mqv//zKr//8up///Ut///+PT//////////////////+HN
+ ///Lqf//zKr//8yq///Mqv//zKr//8up///hzf/////////////9+///2cD//8up///Mqv//zKr//8yq
+ ///Lqf//2sH///r3///7+f//+/n///v5///7+f//+vf///jz///x6P//5dP//9O1///Mqf//zKr//8yq
+ ///Mqv//zKr//8yp///Ss/r/9+rc///31f//9tX///bV///21f//9tX///fV//ru2f/Xu/b/y6n//8yq
+ ///Mqv//zKr//8yq///Mqf//zq79/+DI7v/05d7//PLX///11f//9tX//vXV//zx2P/x4uD/3MHy/82r
+ /v/Mqv//zKr//8yq///Mqv//zKr//8yq///n1////////////////////////+HN///Lqf//zKr//8yq
+ ///Mqv//zKr//8up///hzf/////////////9+///2cD//8up///Mqv//zKr//8yq///Mqv//z6///9a6
+ ///Wuv//1rr//9a6///Wuv//1Lj//9Kz///Orv//zKn//8yp///Mqv//zKr//8yq///Mqv//zKr//8up
+ ///iyu3//vXV///21f//9tX///bV///21f//9tX///bV///31f/y4uD/0bL7/8up///Mqv//zKr//8yq
+ ///Mqv//zKr//8yp///QsPz/2Lz1/97F8P/hye7/3sXw/9e69v/Prv3/y6n//8yq///Mqv//zKr//8yq
+ ///Mqv//y6n//9rA+f/79/n//////////////////////+HN///Lqf//zKr//8yq///Mqv//zKr//8up
+ ///hzf/////////////9/P//2sH//8up///Mqv//zKr//8yq///Mqv//zKr//8up///Lqf//y6n//8up
+ ///Lqf//y6n//8yp///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9W3+P/36tz///fV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX/7dvk/9Cw/P/Lqf//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//y6n//8up///Lqf//y6n//8up///Mqv//zKr//8yq///Mqv//zKr//8yq///Lqf//1bj3//Xo
+ 3v//+Nv///rq///++P///////////+HN///Lqf//zKr//8yq///Mqv//zKr//8up///hzf//////////
+ ///+/v//3sj//8up///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Lqf//0rP6//Dg4f//99X///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV/+7c4//Ss/r/y6n//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yp///Xu/b/9Obe///31f//9tX///bV///3
+ 2v//+uf///32/+HN/v/Lqf//zKr//8yq///Mqv//zKr//8up///hzf//////////////////693//8yr
+ ///Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqf//y6n//8yr///YvPX/8uPg///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f/05d7/28Dz/82r/v/Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Lqf//zq79/+DI7v/47Nr///fV///21f//9tX///bV///21f//9tX///fZ/+HK
+ 8v/Lqf//zKr//8yq///Mqv//zKr//8up///hzf///////////////////Pn//+HN///PsP//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zav//86u///Ss/r/2r/z/+rX
+ 5v/679n///fV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//99X//PHY/+zZ5f/ZvfX/z679/8yp///Lqf//y6n//8yp///Mqf//zKn//8up///Lqf//zKn//8+v
+ /P/bwfL/8N/i//701v//99X///bV///21f//9tX///bV///21f//9tX///bV/+HJ7f/Lqf//zKr//8yq
+ ///Mqv//zKr//8up///hzf////////////////////////38///07P//7N///+rc///q2///6tz//+rc
+ ///q3P//6tz//+rc///q3P//6tz//+rc///r3v//7uP///Lo9//47N3//fPW///31f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///3
+ 1f/88dj/8uLg/+XQ6v/cwvL/1rn3/9O1+f/TtPr/07X5/9e69v/dw/H/59Lp//Pk3//989f///fU///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV/+HJ7v/Lqf//zKr//8yq///Mqv//zKr//8up
+ ///hzf//////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////75///99T///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///fU///3
+ 1f/+9Nb/+/HY//nu2v/57dr/+u7Z//zx2P/+9db///fV///31P//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV/+HJ7v/Lqf//zKr//8yq///Mqv//zKr//8up///hzf//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////34///32v//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///3
+ 1f//99X///fV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV/+HJ7v/Lqf//zKr//8yq///Mqv/8zKr//8up///gy///////////////////////////
+ //////////////////////////////////////////////////////////////////////////rq///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV/+DI
+ 7//Lqf//zKr//8yq//zMqv/wzKr//8up///cxf///v3/////////////////////////////////////
+ /////////////////////////////////////////////////////vr///fb///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX//vTW/9zC8v/Lqf//zKr//8yq
+ //DMqv/TzKr//8up///Wuv//+/j/////////////////////////////////////////////////////
+ ////////////////////////////////////++z///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX/+/DY/9a49//Lqf//zKr//8yq/9PMqv+izKr//8yq
+ ///Pr///8+z/////////////////////////////////////////////////////////////////////
+ ///////////////++///+N3///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//99T/8+Xf/8+v/P/Mqv//zKr//8yq/6LMqv9hzKr/+Myq///Mqf//5dT/////
+ ///////////////////////////////////////////////////////////////////////////////7
+ 7v//9tb///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX/5dDq/8yq///Mqv//zKr/+Myq/2HMqv8izKr/1syq///Mqf//1Lj///n0////////////////
+ //////////////////////////////////////////////////////////78///43///9tT///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///31f/57dr/1Lf4/8yp
+ ///Mqv//zKr/1syq/yLMqv8AzKr/isyq///Mqv//zKr//+TT////////////////////////////////
+ //////////////////////////////////////////zx///21v//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f/kzuv/zKr//8yq///Mqv//zKr/is2p
+ /wDMqv8AzKr/Lcyq/+HMqv//zKr//9Cw///w5f//////////////////////////////////////////
+ //////////////////////3///nh///21P//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///fV//Df4v/QsPz/zKr//8yq///Mqv/hzKr/Lcyq/wDMqv8A/9T/AMyq
+ /3rMqv/9zKr//8yp///Ut///8+v/////////////////////////////////////////////////////
+ /////PP///bX///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//99X/8+Tf/9S1+f/Mqf//zKr//8yq//3Mqv962aL/AMyq/wDMqv8AzKr/AMyq/xPMqv+zzKr//8yq
+ ///Lqf//1Lf///Dl/////////////////////////////////////////////////v//+eP///bU///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///fV///21f/w3+L/1LX5/8up
+ ///Mqv//zKr//8yq/7PMqv8SzKr/AMyq/wDMqv8AzKr/AMyq/wDMqv8qzKr/zMyq///Mqv//zKn//9Cw
+ ///k0///+fT////////////////////////////////////99f//99j///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///31P//9tX/+e3a/+TP6//QsPz/zKn//8yq///Mqv//zKr/zMyq
+ /yrMqv8AzKr/AMyq/wAtJzoAzKr/AMyq/wDMqv8AzKr/NMyq/8zMqv//zKr//8yq///Mqv//1Lj//+XU
+ ///z7P//+/j///79///////////+///65f//9tT///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f/+9Nb/+/DY//Tl3v/l0Or/1bf4/8yq///Mqv//zKr//8yq///Mqv/MzKr/NMyq/wDMqv8AzKr/ACch
+ MQAAAAAAzKr/AMyq/wDMqv8AzKr/AMyq/yrMqv+zzKr//cyq///Mqv//zKn//8yp///Pr///1rr//9zF
+ ///gy///4c39/+HK8f/hye3/4cnu/+HJ7v/hye7/4cnu/+HJ7v/hye7/4cnu/+HJ7v/hye7/4cnu/+HJ
+ 7v/hye7/4cnu/+HJ7v/hye7/4cnu/+HJ7v/hye7/4cnu/+HJ7v/hye7/4cnu/+HJ7v/hye7/4cnu/+HJ
+ 7v/hye7/4cnu/+HJ7v/hye7/4cnu/+HJ7v/hye7/4cnu/+HJ7v/hye7/4cnu/+DI7//cwvL/1rn3/8+v
+ /P/Mqv//zKn//8yq///Mqv//zKr//cyq/7PMqv8qzKr/AMyq/wDMqv8AzKr/AAAAAAAAAAAAAAAAAMyp
+ /wDMqv8AzKr/AMyq/wDMqv8SzKr/esyq/+HMqv//zKr//8yq///Mqv//y6n//8up///Lqf//y6n//8up
+ ///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up
+ ///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up
+ ///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8yq///Mqv//zKr//8yq
+ ///Mqv/hzKr/esyq/xPMqv8AzKr/AMyq/wDMqv8AAAAAAAAAAAAAAAAAAAAAAAAAAADMqv8AzKr/AMyq
+ /wDMqv8A17X/AMyq/y3Mqv+JzKr/1syq//jMqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv/4zKr/1syq/4rMqv8t1K3/AMyq
+ /wDMqv8AzKr/AMyq/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJB4uAMyq/wDMqv8AzKr/AMyq
+ /wDNqf8AzKr/Isyq/2HMqv+hzKr/08yq//DMqv/9zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq//zMqv/wzKr/08yq/6LMqv9izKv/I8up/wHMqv8AzKr/AMyq/wDMqv8ALSc6AAAA
+ AAAAAAAAAAAAAAAAAADwAAAAAAAAAA8AAADgAAAAAAAAAAcAAADAAAAAAAAAAAMAAACAAAAAAAAAAAEA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAEA
+ AADAAAAAAAAAAAMAAADgAAAAAAAAAAcAAADwAAAAAAAAAA8AAAAoAAAAYAAAAMAAAAABACAAAAAAAACQ
+ AAAAKAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADNqv8AzKr/AMyq
+ /wDMqv8AzKr/AMyq/wDMqv8QzKr/PMyq/3XMqv+qzKr/1Myq/+7Mqv/6zKr//syq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv/+zKr/+syq/+7Mqv/UzKr/q8yq/3bMqv89zKr/EMyq/wDMqv8AzKr/AMyq
+ /wDMqv8Azar/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAALyc8AMyq/wDMqv8AzKr/AMyq/wDPqP8AzKr/JMyq/3DMqv+7zKr/6cyq//zMqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ //zMqv/pzKr/u8yq/3DMqv8lzqz/AMyq/wDMqv8AzKr/AMyq/wA8L0kAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMqv8AzKr/AMyq/wDMqv8AzKr/AMyq/yDMqv9/zKr/2cyq
+ //7Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq//7Mqv/ZzKr/gMyq/yDMqv8AzKr/AMyq
+ /wDNq/8AzKr/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMyq/wDMqv8AzKr/AMyq
+ /wDMqv8HzKr/Wsyq/87Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8up///Lqf//y6n//8up
+ ///Lqf//y6n//8up///Lqf//zKn//8yp///Mqf//zKn//8yp///Mqf//zKn//8yp///Mqf//zKn//8yp
+ ///Mqf//zKn//8yp///Mqf//zKn//8yp///Mqf//zKn//8yp///Mqf//zKn//8yp///Mqf//zKn//8yp
+ ///Mqf//zKn//8yp///Mqf//zKn//8yp///Mqf//zKn//8yp///Mqf//zKn//8yp///Mqf//zKn//8yp
+ ///Mqf//zKn//8yp///Mqf//zKn//8yp///Mqf//zKn//8yp///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq/8/Mqv9azKr/B8yq/wDMqv8AzKr/AMyr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAzKr/AMyq/wDMqf8AzKr/AMyq/xbMqv+PzKr/88yq///Mqv//zKr//8yq///Mqv//y6n//8up
+ ///NrP//0bL//9S4///Yvf//2b///9nA///ZwP//2cD//9nA///ZwP//0r7//869///Ovf//zr3//869
+ ///Ovf//zr3//869///Ovf//zr3//869///Ovf//zr3//869///Ovf//zr3//869///Ovf//zr3//869
+ ///Ovf//zr3//869///Ovf//zr3//869///Ovf//zr3//869///Ovf//zr3//869///Ovf//zr3//869
+ ///Ovf//zr3//869///Ovf//zr3//869///Ovf//zr3//869///Ovf//zr3//86+///Ovf//zrv//823
+ ///Nsf//zKz//8yp///Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv/zzKr/j8yq/xbMq/8AzKr/AMyq
+ /wDMqv8AAAAAAAAAAAAAAAAAAAAAAAAAAADMqv8Ay6r/AM2q/wDMqv8AzKr/Isyq/6/Mqv/+zKr//8yq
+ ///Mqv//zKr//8up///Nq///1bn//+LO///u4v//9u////r3///8+v///fv///37///9+////fv///37
+ ///9+///6ff//9Ty///V8///1fP//9Xz///V8///1fP//9Xz///V8///1fP//9Xz///V8///1fP//9Xz
+ ///V8///1fP//9Xz///V8///1fP//9Xz///V8///1fP//9Xz///V8///1fP//9Xz///V8///1fP//9Xz
+ ///V8///1fP//9Xz///V8///1fP//9Xz///V8///1fP//9Xz///V8///1fP//9Xz///V8///1fP//9Xz
+ ///V8///1fP//9Xz///V8v//1PH//9Tu///T6P//0tz//9DK///Ot///zKv//8yp///Mqv//zKr//8yq
+ ///Mqv//zKr//syq/6/Mq/8izKr/AMyr/wDMqv8AzKr/AAAAAAAAAAAAAAAAADwvSQDMqf8AzKr/AMyq
+ /wDMqv8izKr/uMyq///Mqv//zKr//8yq///Mqf//zav//9e9///r3f//+fX/////////////////////
+ ////////////////////////////////////////9/7//9r3///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9///1ff//9X2
+ ///U7v//0dj//867///Mq///zKn//8yq///Mqv//zKr//8yq///Mqv+5zKr/Isyq/wDMqv8AzKr/ADQr
+ QQAAAAAAAAAAAMyq/wDMqv8AzKr/AMyq/xbMqv+vzKr//8yq///Mqv//zKr//8up///Rsv//59b///r3
+ /////////////////////////////////////////////////////////////////////////v///+b6
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9///1ff//9Tv///R0v//zbH//8yp///Mqv//zKr//8yq
+ ///Mqv//zKr/r8yq/xbMqv8AzKr/AMyq/wAAAAAAzKr/AMyq/wDMqv8AzKr/B8yq/4/Mqv/+zKr//8yq
+ ///Mqv//zKn//9a7///x6P//////////////////////////////////////////////////////////
+ //////////////////////////////b9///Z9///1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X3
+ ///V9v//0+L//865///Mqf//zKr//8yq///Mqv//zKr//syq/4/Mqv8HzKr/AMyq/wDMqv8AzKr/AMyq
+ /wDMqv8AzKr/Wsyq//PMqv//zKr//8yq///Mqf//2L7///bw////////////////////////////////
+ //////////////////////////////////////////////////////////////7////m+v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1ff//9Pp///OvP//zKn//8yq///Mqv//zKr//8yq
+ //PMqv9azKr/AMyq/wDLqP8AzKr/AMyq/wDMqv8gzKr/z8yq///Mqv//zKr//8up///Wu///9vD/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////3/f//2vf//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X3
+ ///T6P//zrn//8yp///Mqv//zKr//8yq///Mqv/OzKr/IMyq/wDMqv8AzKr/AMqp/wDMqv+AzKr//8yq
+ ///Mqv//zKn//9Gy///x6P//////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////6vv//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9///0+L//82x///Mqf//zKr//8yq///Mqv//zKr/gM2t
+ /wDMqv8AzKr/AMyq/yXMqv/ZzKr//8yq///Mqv//zav//+fW////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////+/7//9/4///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9HS
+ ///Mq///zKr//8yq///Mqv//zKr/2cyq/yTMqv8AzKr/AMyq/3DMqv/+zKr//8yq///Lqf//2L3///r3
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////L8///Y9///1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1ff//9Tv///Ou///zKn//8yq///Mqv//zKr//syq/3DMqv8AzKr/EMyq
+ /7vMqv//zKr//8yq///NrP//697/////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////7/
+ ///o+v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X3///R2P//zKv//8yq
+ ///Mqv//zKr//8yq/7vMqv8QzKr/PMyq/+nMqv//zKr//8up///Vuf//+fb/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////7/v//4Pj//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X3///U7f//zrf//8yp///Mqv//zKr//8yq/+nMqv88zKr/dcyq//zMqv//zKr//8up
+ ///izv//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////9v3//9v3
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//0Mr//8yp///Mqv//zKr//8yq
+ //zMqv91zKr/q8yq///Mqv//zKr//82s///u4v//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////H8///Y9///1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9///0tz//8ys///Mqv//zKr//8yq///Mqv+qzKr/1Myq///Mqv//zKr//9Gy///27///////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////s+///1vb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9///0+j//82x///Mqv//zKr//8yq///Mqv/UzKr/7syq
+ ///Mqv//y6n//9W4///69///////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////+////6fr//9b2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1O7//863
+ ///Mqf//zKr//8yq///Mqv/uzKr/+syq///Mqv//y6n//9i9///8+v//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////f///+j6///W9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1PH//867///Mqf//zKr//8yq///Mqv/6zKr//syq///Mqv//y6n//9m/
+ ///9+///////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////3////o+v//1vb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fL//869///Mqf//zKr//8yq
+ ///Mqv/+zKr//8yq///Mqv//y6n//9nA///9+///////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////9////6vr//9f2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X3///V9///1ff//9X3///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fP//86+///Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////
+ /////////////////////////fz///n2///69v///v3/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////v///+37///Y9///1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X3///V9///1ff//9X1///V8v//1O///9Tt
+ ///U7P//1O3//9Tv///U8f//1fX//9X3///V9///1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fP//869///Mqf//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//y6n//9nA///9+//////////////////////////+///w5///3MT//9S3///Ut///3sj///Ps
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////y/P//3Pf//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9///1fX//9Ts
+ ///S3v//0ND//8/E///Ovf//zrj//821///NtP//zbX//863///OvP//z8T//9HQ///S4P//1O///9X2
+ ///V9///1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fP//869
+ ///Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA///9+/////////////////////////Dl
+ ///Rsv//y6n//8up///Lqf//y6n//9O2///z7P//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////9/3//+L5///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1ff//9Xz///S4P//z8f//821///MrP//zKn//8yp///Mqf//zKn//8yp///Mqf//zKn//8yp
+ ///Mqf//zKn//8yp///Mrf//zrj//9DQ///U6v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fP//869///Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA
+ ///9+////////////////////Pn//9m////Lqf//zKr//8yq///Mqv//zKr//8up///dxv///fz/////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////z+///r+///2ff//9T2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//0+T//8/D///Mrv//zKn//8yp///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKn//8yq///NtP//0dL//9Tv
+ ///V9///1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fP//869///Mqf//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////////////8+v//8+v///Mqv//zKr//8yq
+ ///Mqv//zKr//8yp///Rs///9vD/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////9P3//+H5///W9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9Xz///R1P//zbL//8yp
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqf//zKv//86////T5v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fP//869///Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////
+ ////////7eH//82r///Mqv//zKr//8yq///Mqv//zKr//8yq///Orf//8Ob/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////z+///u+///3Pj//9X2///V9v//1fb//9X2
+ ///V9///1PL//9DM///MrP//zKn//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yp///Ntv//0uH//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fP//869///Mqf//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//y6n//9nA///9+///////////////////6tz//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Nq///7eL/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////+f7//+r6///b9///1fb//9X2///V8///0Mv//8yr///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqf//zbT//9Pj///V9///1fb//9X2///V9v//1fb//9X2///V9v//1PL//869
+ ///Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////////////6tz//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Nq///7eH/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////5/v//6vv//9z3///R0v//zKz//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqf//zKn//8yp///Mqf//zKn//8yp
+ ///Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKn//865///U6v//1ff//9X2
+ ///V9v//1fb//9X2///V9v//1/P//9C+///Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA
+ ///9+///////////////////6tz//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Nq///7eH/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////+zl///OsP//zKn//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqf//zKr//82x
+ ///Ovf//0Mn//9DQ///R0f//0M7//8/F///Ouf//zK3//8yp///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yp///Pxv//1fP//9X2///U9v//1vb//9v3///n+v//8vn//9jA///Lqf//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////////////6tz//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Nq///7eH/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////+fX//9e8///Mqf//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yp///Ns///0M7//9Pn///V8v//1fb//9X3///V9///1fb//9X1///U7///0t///8/D
+ ///Mrf//zKn//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mrf//09v//9v4///k+f//8Pz///r+
+ /////////fv//9nA///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////
+ ////////6tz//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Nq///7eH/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////5dT//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//9TA///X5v//1vb//9X3///V9v//1Pb//9T2
+ ///V9v//1fb//9X2///V9v//1ff//9Tz///R1///zLL//8yp///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqf//1L3///X3///+/////////////////////fv//9nA///Lqf//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//y6n//9nA///9+///////////////////6tz//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Nq///7eH/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////28f//07X//8yp///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//3MT///f1
+ ///4/v//8vz//+37///n+v//4/n//+D4///e+P//3Pj//9v3///b9///2/f//9z4///d+P//29///9Cy
+ ///Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zqz//+7i/////////////////////////fv//9nA
+ ///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////////////6tz//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Nq///7eH/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////l0///zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8up///Wuv//9/L//////////////////////////////v////3////8/v//+/7///r+
+ ///6/v//+v7///r+///7/v///P7//+nb///Orf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//97I
+ ///+/f///////////////////fv//9nA///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA
+ ///9+///////////////////6tz//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Nq///7eH/////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////n1
+ ///Vuf//y6n//8yq///Mqv//zKr//8yq///Mqv//zKr//86u///u4v//////////////////////////
+ //////////////////////////////////////////////////////////////37///dxv//y6n//8yq
+ ///Mqv//zKr//8yq///Mqv//zKn//9O2///59P///////////////////fv//9nA///Lqf//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////////////6tz//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Nq///7eH/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////+3h///NrP//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9vE
+ ///9+///////////////////////////////////////////////////////////////////////////
+ ///////////////////y6f//z7D//8yq///Mqv//zKr//8yq///Mqv//zKr//86u///y6f//////////
+ /////////fv//9nA///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////
+ ////////6tz//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Nq///7eH/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////v7//9/K///Lqf//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zaz//+3h////////////////////////////////////////////////
+ ///////////////////////////////////////////////////9/P//28T//8up///Mqv//zKr//8yq
+ ///Mqv//zKr//8yr///s4P///////////////////fv//9nA///Lqf//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//y6n//9nA///9+///////////////////6tz//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Nq///7eH/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////+vb//9S4///Lqf//zKr//8yq///Mqv//zKr//8yq///Lqf//1bj///n2////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////693//8yr///Mqv//zKr//8yq///Mqv//zKr//8yq///q3f///////////////////fv//9nA
+ ///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////////////6tz//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Nq///7eH/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////8un//8+u///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Lqf//38n///7+////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////9/L//9O1///Mqf//zKr//8yq///Mqv//zKr//82s
+ ///v5f///////////////////fv//9nA///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA
+ ///9+///////////////////6tz//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Nq///7eL/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////6dv//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//6dr/////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////7//+PR
+ ///Mqf//zKr//8yq///Mqv//y6n//9e9///69////////////////////fv//9nA///Lqf//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////////////6tz//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Nq///5tb///Xu///07f//9O3///Tt///07f//9O3///Tt///07f//9e////fx
+ ///59f///Pr///7+////////////////////////////////////////////////////////////////
+ ////////////////////////4s///8up///Mqv//zKr//8yq///Mqv//zKr//8yq///Orf//8Of/////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////n0///ZwP//zKr//8up///Mqv//1bn///Lp////////////////
+ /////////fv//9nA///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////
+ ////////6tz//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zq7//9Cw///QsP//0LD//9Cw
+ ///QsP//0LD//9Cw///QsP//0LH//9Gz///Ut///2L7//9/J///o2f//8+v///z6////////////////
+ ///////////////////////////////////////////////////+/f//3MX//8up///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Qsf//9e//////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////59f//693//+XT
+ ///q2///+PP//////////////////////////////fv//9nA///Lqf//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//y6n//9nA///9+///////////////////6tz//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yp///Mqf//y6n//8up
+ ///Mqv//z7D//9nA///q3f//+/j/////////////////////////////////////////////////////
+ ///8+v//2L7//8up///Mqv//zKr//8yq///Mqv//zKr//8yp///Ttv//+fT/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////fv//9nA
+ ///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////////////6tz//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8up///Nq///2b////Hn/////v//////////
+ ///////////////////////////////////7+P//1br//8up///Mqv//zKr//8yq///Mqv//zKr//8up
+ ///Vuf//+vf/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////fv//9nA///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA
+ ///9+///////////////////6tz//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//y6n//9Cx///q3P///v7////////////////+///77f///PD///78///////59v//1Lf//8up
+ ///Mqv//zKr//8yq///Mqv//zKr//8up///Wu///+/n/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////fv//9nA///Lqf//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////////////6tz//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yp///Pr///7N////////////////33///3
+ 2f//9tb///jf///87v/59Pr/07b//8yp///Mqv//zKr//8yq///Mqv//zKr//8up///XvP///Pn/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////fv//9nA///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////
+ ////////6tz//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKn//8yp///Mqf//zKn//8yp
+ ///Mqf//zKn//8yp///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Lqf//0rT///Ts//////////rp///21f//9tX///bU///31f/57uD/07X7/8yp///Mqv//zKr//8yq
+ ///Mqv//zKr//8up///XvP//+/n/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////fv//9nA///Lqf//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//y6n//9nA///9+///////////////////6tz//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//0bL//9S3///Ut///1Lf//9S3///Ut///07b//9O1///Rsv//zq7//8yq///Lqf//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//93H///9+vn///jb///21f//9tX///bV///3
+ 1f/67tn/1Lb4/8up///Mqv//zKr//8yq///Mqv//zKr//8up///Wuv//+/j/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////fv//9nA
+ ///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////////////6tz//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Nq///6dv///r3///59v//+fb///n2///59v//+fX///j0
+ ///28P//8ej//+na///cxf//0LD//8yp///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8+v
+ ///y5ez///fV///21f//9tX///bV///21f/78Nj/1rj3/8up///Mqv//zKr//8yq///Mqv//zKr//8yp
+ ///Ut///+fX/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////fv//9nA///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA
+ ///9+///////////////////6tz//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Nq///7eL/////
+ ///////////////////////////////////////////////////9/P//8un//9nA///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8up///iy+3///bV///21f//9tX///bV///21f/88tf/2L31/8up
+ ///Mqv//zKr//8yq///Mqv//zKr//8yp///Rsv//9vH/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////fv//9nA///Lqf//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////////////6tz//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Nq///7eH/////////////////////////////////////////////////////
+ //////////////n0///ZwP//zKn//8yq///Mqv//zKr//8yq///Mqv//zKr//8up///Xuvb/+/DY///2
+ 1f//9tX///bV///21f/+9Nb/3cPx/8up///Mqv//zKr//8yq///Mqv//zKr//8yq///Prv7/8uj4////
+ /P//////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////fv//9nA///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////
+ ////////6tz//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Nq///7eH/////////////////////
+ ///////////////////////////////////////////////////y6f//0LD//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Qsfv/9ejd///31f//9tX///bV///21f//9tX/48zs/8up///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mq///69nn///64P///O////77////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////+/v//+PT///Xu
+ ///48////v7//////////////////////////////fv//9nA///Lqf//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//y6n//9nA///9+///////////////////6tz//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Nq///7eH/////////////////////////////////////////////////////////////////////
+ ///9+///2sL//8up///Mqv//zKr//8yq///Mqv//zKr//8yq///OrP7/8N/i///31P//9tX///bV///2
+ 1f//99T/6tfm/8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Lqf//4svt///21P//9tb///je///7
+ 7f///vr/////////////////////////////////////////////////////////////////////////
+ //////////////z6///k0///07b//9Cw///Ttf//5NP///z6/////////////////////////fv//9nA
+ ///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////////////6tz//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Nq///7eH/////////////////////////////////////
+ ////////////////////////////////////////5NL//8up///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mq///7Nnl///31P//9tX///bV///21f//99T/8+Pf/8+u/f/Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Lqf//2Lz1//zx2P//9tX///bU///21f//+Nz///vr///++f//////////////////////////////
+ /////////////////////////////////////////////+fX///Nq///y6n//8yq///Lqf//zKv//+XU
+ ///+/v///////////////////fv//9nA///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA
+ ///9+///////////////////6tz//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Nq///7eH/////
+ ////////////////////////////////////////////////////////////////////////6dr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//6dXn///31P//9tX///bV///21f//9tX/+u7Z/9W3
+ +P/Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//z6/8//Pk3///99T///bV///21f//9tX///bV///3
+ 2///+uj///33/////v//////////////////////////////////////////////////////9e7//9Kz
+ ///Mqf//zKr//8yq///Mqv//zKn//9K1///38v///////////////////fv//9nA///Lqf//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////////////6tz//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Nq///7eH/////////////////////////////////////////////////////
+ ////////////////////////6dr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//6dXn///3
+ 1P//9tX///bV///21f//9tX//vXW/+DI7//Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKn//+PM
+ 7P//9tX///bV///21f//9tX///bV///21f//9tX///fZ///65v///fX////+////////////////////
+ ///////////////////+/f//4Mz//8up///Mqv//zKr//8yq///Mqv//zKr//86t///w5v//////////
+ /////////fv//9nA///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////
+ ////////6tz//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Nq///7eH/////////////////////
+ ////////////////////////////////////////////////////////5dP//8up///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//6tfm///31P//9tX///bV///21f//9tX///fU/+7d4//NrP7/zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKn//9O0+v/26dz///fV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//99j///nk///88/////3////////////////////////////z6v//0LH//8yp///Mqv//zKr//8yq
+ ///Mqv//zKr//82s///w5v///////////////////fv//9nA///Lqf//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//y6n//9nA///9+///////////////////6tz//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Nq///7eH/////////////////////////////////////////////////////////////////////
+ ///+/f//3MX//8up///Mqv//zKr//8yq///Mqv//zKr//8yq///Nq/7/7tzj///31P//9tX///bV///2
+ 1f//9tX///bV//rv2f/Wuff/y6n//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///hye7//vTW///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21///+eL///zx///+/P////////////z6
+ ///cxf//y6n//8yq///Mqv//zKr//8yq///Mqv//zKr//9Cw///07f///////////////////fv//9nA
+ ///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////////////6tz//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Nq///7eH/////////////////////////////////////
+ ///////////////////////////////////17///0bP//8yp///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Pr/3/8+Tf///31P//9tX///bV///21f//9tX///bV///21f/n0+j/zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Prv3/7Nrl///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tT///bW///43////O////77/+jY///NrP//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9a7
+ ///7+P///////////////////fv//9nA///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA
+ ///9+///////////////////6tz//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Nq///7eH/////
+ //////////////////////////////////////////////////////////////38///gy///zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8up///Utvn/+e3a///31f//9tX///bV///21f//9tX///bV///3
+ 1f/57Nr/1bj4/8up///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqf//0rL6/+/e4v//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21P//9tb/7dzr/9Cw///Mqf//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKn//+TS/////////////////////////fv//9nA///Lqf//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////////////6tz//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Nq///7eH/////////////////////////////////////////////////////
+ ////////+vb//+TR///Orf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8up///exPD//vTW///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX/6tfm/82s/v/Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKn//9Gy+//q1+b//fPX///31P//9tX///bV///21f//9tX///bV///21f//9tX///fU//3z
+ 1//q1+b/0bH7/8yp///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqf//0rT///Xv////////////////
+ /////////fv//9nA///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////
+ ////////6tz//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Nq///697///37///8+v///Pr///z6
+ ///8+v///Pn///v5///69v//9vH///Dm///l1P//1rv//8yr///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//82r/v/s2uT///fU///21f//9tX///bV///21f//9tX///bV///21f//9tX//PLX/93D
+ 8f/Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yp///Orf7/3MPx//Df4v/679n//vXW///2
+ 1f//99X///fV///11f/88dj/8uLg/97F8P/Orf3/zKn//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//5dP////+/////////////////////////fv//9nA///Lqf//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//y6n//9nA///9+///////////////////6tz//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//07b//9e9///Xvf//173//9e9///Xvf//17z//9a7///Ut///0bL//86t///Mqf//y6n//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9e69v/679n///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///fV//bp3P/Vt/j/y6n//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//y6n//86t/f/Wuff/3sbw/+TO6//m0en/5c/q/+DI7//Yu/X/z6/9/8up///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8up///Yvfz/+fX9/////////////////////////////fv//9nA
+ ///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////////////6tz//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKn//8up///Lqf//y6n//8up///Lqf//y6n//8up
+ ///Mqf//zKn//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zq39/+za
+ 5P//99X///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///31f/x4eH/0rP6/8up
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Lqf//y6n//8up///Mqf//zKn//8up
+ ///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9Kz+v/y5OL///rj///8
+ 8v///v3//////////////////fv//9nA///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA
+ ///9+///////////////////7N///8yr///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//4cnu//3z1///9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX/797i/9Kz+v/Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Lqf//0rL6/+/e4v//9tX///bU///21///+eH///zw///+/P///////fv//9nA///Lqf//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////////////8un//86u///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///exPH/+u/Z///31f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV//Hh4f/Vt/j/y6n//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8up///Ut/j/8ODh///21f//9tX///bV///21f//9tT///bW///4
+ 3////O7//fr6/9nA///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////
+ ////////+vb//9a6///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Lqf//z679/+LL
+ 7f/779n///fV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///31f/26dz/3cTx/82s/v/Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Lqf//zaz+/9zC8f/26N3///fV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tb//fTe/9m++P/Lqf//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//y6n//9nA///9+////////////////////////+vd///Orv//y6n//8yp///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKn//8up
+ ///Lqf//zKn//8+u/f/av/P/797i//701v//99X///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//99X//PLX/+vZ5f/Xuvb/zav+/8up
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//8yr
+ ///WuPf/6tfm//zy1///99X///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX//fLX/9m9
+ 9P/Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA///9+/////////////////////////79
+ ///t4P//2cD//9Gy///Prv//zq7//86u///Orv//zq7//86u///Orv//zq7//86u///Orv//zq7//86u
+ ///Orv//zq7//8+v///Qsf//0rT//9a6/v/cwvP/5dDq//Li4P/88tf///fV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///31f/679n/69nl/9vA8//Rsfv/zKr//8up///Lqf//y6n//8yp///Mqf//zKn//8up
+ ///Lqf//y6n//8yq///Pr/z/2b31/+nV5//57dr///fV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX//fPX/9m99P/Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA
+ ///9+////////////////////////////////////Pr///bw///z6v//8un///Lp///y6f//8un///Lp
+ ///y6f//8un///Lp///y6f//8un///Lp///y6f//8ur///Ps///17///+PP///v18//99Nj///bV///3
+ 1P//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///fV//3z1//1593/69jm/+HJ
+ 7v/av/P/1rn3/9S1+f/TtPn/07X5/9W49//ZvfT/38fv/+jU6P/z5N///PHY///31f//99X///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX//fPX/9m99P/Lqf//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////+///64///9tT///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//99X///fU///21f/989f/+/DY//nt2v/57Nr/+e3a//rv2f/98tf///XV///3
+ 1P//99T///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX//fPX/9m99P/Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9nA///9+///////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////31///32P//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///3
+ 1f//99X///fV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX//fPX/9m+9P/Lqf//zKr//8yq///Mqv//zKr//syq
+ ///Mqv//y6n//9m////9+///////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////7///rm///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX//fLX/9m9
+ 9P/Lqf//zKr//8yq///Mqv//zKr/+syq///Mqv//y6n//9i9///8+v//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////ff///fZ///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX//PHY/9i79v/Lqf//zKr//8yq///Mqv/6zKr/7syq///Mqv//y6n//9W4
+ ///69///////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////+uj///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX/+u7Z/9S3+P/Lqf//zKr//8yq
+ ///Mqv/uzKr/1Myq///Mqv//zKr//9Gy///27///////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////////////+
+ +P//99v///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//99X/9ujd/9Gx+//Mqv//zKr//8yq///Mqv/UzKr/q8yq///Mqv//zKr//82s///u4v//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////76v//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//99T/7tzj/82s/v/Mqv//zKr//8yq///Mqv+rzKr/dcyq
+ //zMqv//zKr//8up///izv//////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////76///43P//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX/4srt/8up
+ ///Mqv//zKr//8yq//zMqv91zKr/Pcyq/+nMqv//zKr//8up///Vuf//+fb/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////vt///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///31f/57tr/1bf4/8up///Mqv//zKr//8yq/+nMqv88zKr/EMyq/7vMqv//zKr//8yq
+ ///NrP//697/////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////vv///je///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///31f/r2Ob/zav+/8yq///Mqv//zKr//8yq
+ /7vMqv8QzKr/AMyq/3DMqv/+zKr//8yq///Lqf//2L3///r3////////////////////////////////
+ /////////////////////////////////////////////////////////////////////O////bW///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///fV//rv
+ 2f/Yu/b/y6n//8yq///Mqv//zKr//syq/3DMqv8AzKr/AMyq/yXMqv/ZzKr//8yq///Mqv//zav//+fX
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////+/P//+OD///bU///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV/+fS6f/Nq///zKr//8yq///Mqv//zKr/2cyq/yTMqv8AzKr/AM6q
+ /wDMqv+AzKr//8yq///Mqv//zKn//9Gy///x6P//////////////////////////////////////////
+ ///////////////////////////////////////////////88f//9tf///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//99X/8eLg/9Gx+//Mqf//zKr//8yq
+ ///Mqv//zKr/gM6p/wDMqv8AzKr/AMyq/wDMqv8gzKr/z8yq///Mqv//zKr//8up///Wu///9vD/////
+ ///////////////////////////////////////////////////////////////////////////9///5
+ 4v//9tT///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///3
+ 1P/26dz/1rn3/8up///Mqv//zKr//8yq///Mqv/PzKr/IMyq/wDMqv8AzKr/AMyq/wDMqv8AzKr/Wsyq
+ //PMqv//zKr//8yq///Mqf//2L7///bw////////////////////////////////////////////////
+ //////////////////////////3z///31///9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///fV//bp3P/YvPX/zKn//8yq///Mqv//zKr//8yq//PMqv9azKr/AMyq
+ /wDMqv8AzKr/AMyq/wDMqv8AzKr/B8yq/4/Mqv/+zKr//8yq///Mqv//zKn//9a7///x6P//////////
+ //////////////////////////////////////////////////////7///nk///21P//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///31f//9tX/8eLg/9a59//Mqf//zKr//8yq
+ ///Mqv//zKr//syq/4/Mqv8HzKr/AMyq/wDMqv8AAAAAAMyq/wDMqv8AzKr/AMyq/xbMqv+vzKr//8yq
+ ///Mqv//zKr//8up///Rsv//59f///r3////////////////////////////////////////////////
+ /////fX///fY///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//99X///fV//rv
+ 2f/n0un/0bH7/8up///Mqv//zKr//8yq///Mqv//zKr/r8yq/xbMqv8AzKr/AMyq/wAAAAAAAAAAAEE4
+ UgDMrP8AzKr/AMyq/wDMqv8izKr/ucyq///Mqv//zKr//8yq///Mqf//zav//9i9///r3v//+fX/////
+ /////////////////////////////////v//+ub///bU///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//99X///fU///21f/57tr/69jl/9i79f/Nq///zKn//8yq///Mqv//zKr//8yq///Mqv+5zKr/Isyq
+ /wDMqv8AzKn/ADgvRQAAAAAAAAAAAAAAAADMqv8AzKr/AMup/wDMqv8AzKr/Isyq/6/Mqv/+zKr//8yq
+ ///Mqv//zKr//8up///NrP//1bn//+LO///u4v//9u////r3///8+v///fv///36+P/99Nz//fLX//3z
+ 1//989f//fPX//3z1//989f//fPX//3z1//989f//fPX//3z1//989f//fPX//3z1//989f//fPX//3z
+ 1//989f//fPX//3z1//989f//fPX//3z1//989f//fPX//3z1//989f//fPX//3z1//989f//fPX//3z
+ 1//989f//fPX//3z1//989f//fPX//3z1//989f//fPX//3z1//989f//fPX//3z1//989f//fPX//3z
+ 1//989f//fPX//3z1//98tf//PHY//ru2f/26N3/7tzj/+LL7f/Vt/j/zav+/8up///Mqv//zKr//8yq
+ ///Mqv//zKr//syq/6/Mqv8izKr/AMyr/wDMqv8AzKr/AAAAAAAAAAAAAAAAAAAAAAAAAAAAzKr/AMyq
+ /wDLqf8AzKr/AMyq/xbMqv+PzKr/88yq///Mqv//zKr//8yq///Mqv//y6n//8up///NrP//0bL//9W4
+ ///Yvf//2cD//9m/+//ZvvT/2b30/9m99P/ZvfT/2b30/9m99P/ZvfT/2b30/9m99P/ZvfT/2b30/9m9
+ 9P/ZvfT/2b30/9m99P/ZvfT/2b30/9m99P/ZvfT/2b30/9m99P/ZvfT/2b30/9m99P/ZvfT/2b30/9m9
+ 9P/ZvfT/2b30/9m99P/ZvfT/2b30/9m99P/ZvfT/2b30/9m99P/ZvfT/2b30/9m99P/ZvfT/2b30/9m9
+ 9P/ZvfT/2b30/9m99P/ZvfT/2b30/9m99P/ZvfT/2b30/9m+9P/ZvfT/2Lv1/9W3+P/Rsfv/zaz+/8up
+ ///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv/zzKr/j8yq/xbMqv8AzKr/AMyq/wDMqf8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMyq/wDMqv8AzKr/AMyq/wDMqv8HzKr/Wsyq/8/Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8up///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up
+ ///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up
+ ///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up
+ ///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up
+ ///Lqf//y6n//8up///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq/8/Mqv9bzKr/B8yq
+ /wDMqv8AzKr/AMyr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMqv8Azar/AMyq
+ /wDMqv8AzKr/AMyq/yDMqv+AzKr/2cyq//7Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ //7Mqv/azKr/gMyq/yHMqv8AzKr/AMyq/wDLqf8AzKr/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAANCtBAMyq/wDMqv8AzKr/AMyq/wDOqf8AzKr/JMyq/3DMqv+7zKr/6cyq
+ //zMqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq//zMqv/qzKr/vMyq/3HMqv8lzqv/AMyq/wDMqv8AzKr/AMyq/wBBOFIAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMqv8AzKr/AMyq
+ /wDMqv8AzKr/AMyq/wDMqv8QzKr/PMyq/3XMqv+qzKr/1Myq/+7Mq//8zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv/+zKr/+syq/+7Mqv/UzKr/q8yq/3bMqv89zaz+Ecup/wDMqv8AzKr/AMyq
+ /wDMqv8AzKr/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAD//AAAAAAA
+ AAAAAAA/+AAAAAAAAAAAAAAf8AAAAAAAAAAAAAAP4AAAAAAAAAAAAAAHwAAAAAAAAAAAAAADgAAAAAAA
+ AAAAAAABgAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAABgAAAAAAAAAAAAAABwAAAAAAAAAAAAAAD4AAAAAAA
+ AAAAAAAH8AAAAAAAAAAAAAAP+AAAAAAAAAAAAAAf/AAAAAAAAAAAAAA//wAAAAAAAAAAAAD/KAAAAIAA
+ AAAAAQAAAQAgAAAAAAAAAAEAACgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKq/8AzKr/AMyq/wDMqv8AzKr/AMyq/wDMqv8AzKr/EMyq
+ /zLMqv9izKr/ksyq/7zMqv/bzKr/78yq//nMqv/+zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq//7Mqv/5zKr/78yq/9vMqv+9zKr/k8yq/2PMqv8zzKr/EMyp/wDMqv8AzKr/AMyq
+ /wDMqv8AzKr/AM2q/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADNqv8AzKr/AMyq
+ /wDMqv8AzKr/AMyq/wDMqv8KzKr/Ncyq/3fMqv+2zKr/4Myq//bMqv/+zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv/+zKr/9syq/+HMqv+2zKr/eMyq/zXMqv8KzKr/AMyq/wDMqv8AzKr/AMyq/wDNqv8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADIpP8AzKr/AMyq/wDMqv8AzKr/AMyq/wDMqv8PzKr/T8yq/6fMqv/lzKr//syq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv/+zKr/5syq
+ /6jMqv9QzKr/D8yq/wDMqv8AzKr/AMyq/wDMqv8A0qX/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzKr/AMyq/wDMqv8AzKr/AMyq
+ /wDMqv8IzKr/Ssyq/7DMqv/xzKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq//LMqv+xzKr/Ssyq/wjMqv8AzKr/AMyq
+ /wDMqv8AzKr/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAMyq/wDsnv8AzKr/AMyq/wDMqv8AzKr/J8yq/5XMqv/szKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv/szKr/lcyq/yjMqv8AzKr/AMyq/wC8pP8AzKr/AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMqv8AzKr/AMyq/wDMqv8AzKr/BMyq
+ /1LMqv/MzKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yp///Lqf//y6n//8yp
+ ///Mqv//zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr
+ ///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr
+ ///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr
+ ///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr
+ ///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKr//8yp
+ ///Mqf//zKn//8yp///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr/zcyq
+ /1LMqv8EzKr/AMyq/wDMqv8AzKv/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAzKr/AMyq/wDMqv8AzKr/AMyq/w3Mqv94zKr/6syq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKn//8yp///Orf//0rX//9nA///fyv//5dP//+jY///p2///6tv//+rb///q2///6tv//+rb
+ ///q2///6tv//9zZ///R1v//0db//9HW///R1v//0db//9HW///R1v//0db//9HW///R1v//0db//9HW
+ ///R1v//0db//9HW///R1v//0db//9HW///R1v//0db//9HW///R1v//0db//9HW///R1v//0db//9HW
+ ///R1v//0db//9HW///R1v//0db//9HW///R1v//0db//9HW///R1v//0db//9HW///R1v//0db//9HW
+ ///R1v//0db//9HW///R1v//0db//9HW///R1v//0db//9HW///R1v//0db//9HW///R1v//0db//9HW
+ ///R1v//0db//9HW///R1v//0db//9HW///R0///0M///8/H///Ovf//zbT//8yt///Mqf//zKn//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr/6syq/3jMqv8NzKv/AMys/wDMqv8AzKr/AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMyq/wDMqv8AzKr/AMyq/wDMqv8TzKr/j8yq
+ //fMqv//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//82r///Ut///4c3//+7i///38f///Pr///7+
+ ////////////////////////////////////////////////////////8f3//9f3///V9///1ff//9X3
+ ///V9///1ff//9X3///V9///1ff//9X3///V9///1ff//9X3///V9///1ff//9X3///V9///1ff//9X3
+ ///V9///1ff//9X3///V9///1ff//9X3///V9///1ff//9X3///V9///1ff//9X3///V9///1ff//9X3
+ ///V9///1ff//9X3///V9///1ff//9X3///V9///1ff//9X3///V9///1ff//9X3///V9///1ff//9X3
+ ///V9///1ff//9X3///V9///1ff//9X3///V9///1ff//9X3///V9///1ff//9X3///V9///1ff//9X3
+ ///V9v//1fX//9Tx///U6v//0tz//9DJ///Ntv//zKv//8yp///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr/98yq/5DMrP8TzKv/AMyq/wDMqv8AzKr/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADMqv8Ayp3/AMyq/wDMqv8AzKr/E8yq/5fMqv/7zKr//8yq///Mqv//zKr//8yq///Mqv//zKn//82r
+ ///XvP//6dr///jz///+/v//////////////////////////////////////////////////////////
+ ///////////////////7/v//3/j//9T2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X3///V9///1fX//9Tr
+ ///R1f//zrv//8yr///Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr/+8yq/5fMqv8TzKr/AMyq
+ /wDSpP8AzKr/AAAAAAAAAAAAAAAAAAAAAAAAAAAA0qX/AMyq/wDMqv8AzKr/AMyq/w3Mqv+PzKr/+8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yp///Ttv//6Nj///n2////////////////////////////////
+ ///////////////////////////////////////////////////////////////////u+///1vb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1ff//9X2///U7v//0dP//821///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr/+8yq/4/Mqv8NzKr/AMyq/wDMqv8AzKr/AAAAAAAAAAAAAAAAAAAA
+ AADMqv8AzKr/AMyq/wDMqv8EzKr/eMyq//fMqv//zKr//8yq///Mqv//zKr//8yq///Nq///3MX///Tt
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////r+///d+P//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X3///V9v//0+b//8/C///Mq///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr/9syq
+ /3jMqv8EzKr/AMyq/wDMqv8AAAAAAAAAAAAAAAAAzKr/AMyq/wDMqv8AzKr/AMyq/1LMqv/qzKr//8yq
+ ///Mqv//zKr//8yq///Mqf//z67//+TS///7+P//////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////+z7
+ ///W9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9///1PD//9DO
+ ///Mrv//zKn//8yq///Mqv//zKr//8yq///Mqv//zKr/6syq/1LMqv8AzKr/AMyq/wDMqv8AAAAAAAAA
+ AADMqv8AzKr/AMyq/wDMqv8ozKr/zcyq///Mqv//zKr//8yq///Mqv//zKn//8+v///o2f///fz/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////+v7//974///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9///1fP//9HU///Nr///zKn//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr/zcyq/yfMqv8AzKr/AMyq/wBaWloAzKv/AMyq/wDMqv8AzKr/CMyq/5XMqv//zKr//8yq
+ ///Mqv//zKr//8yq///Prv//6Nn///79////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////7vv//9b2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fT//9HU///Mrv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr/lcyq/wjMqv8AzKr/AMmp
+ /wDMqv8AzKr/AMyq/wDMqv9KzKr/7Myq///Mqv//zKr//8yq///Mqv//zaz//+TS///9/P//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////8/v//4fn//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fP//9DO///Mq///zKr//8yq
+ ///Mqv//zKr//8yq///Mqv/szKr/Ssyq/wDNqv8AzKr/AMyq/wDMqv8AzKr/D8yq/7HMqv//zKr//8yq
+ ///Mqv//zKr//8yp///cxf//+/j/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////y/P//2Pf//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9///1PD//8/C///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv+wzKr/D8yq
+ /wDMqv8AzKr/AMyq/wDMqv9QzKr/8syq///Mqv//zKr//8yq///Mqf//07b///Tt////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////7////n+v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9///0+b//821
+ ///Mqf//zKr//8yq///Mqv//zKr//8yq//HMqv9QzKr/AMyr/wDMqv8AzKr/Csyq/6fMqv//zKr//8yq
+ ///Mqv//zKr//82r///o2P//////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////j+///d+P//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//0dP//8yr///Mqv//zKr//8yq///Mqv//zKr//8yq
+ /6fMqv8KzKr/AMyq/wDMqv81zKr/5cyq///Mqv//zKr//8yq///Lqf//173///n2////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////D8
+ ///X9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X3
+ ///U7v//zrv//8yp///Mqv//zKr//8yq///Mqv//zKr/5cyq/zXMqv8AzKr/AMyq/3jMqv/+zKr//8yq
+ ///Mqv//zKr//82r///p2///////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////f///+b6///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///R1f//zKv//8yq///Mqv//zKr//8yq
+ ///Mqv/+zKr/d8yp/wDMqv8QzKr/tsyq///Mqv//zKr//8yq///Mqf//1Lj///jz////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////+f7//9/4///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1ff//9Tr///Ntv//zKn//8yq///Mqv//zKr//8yq///Mqv+2zKr/EMyq/zPMqv/hzKr//8yq
+ ///Mqv//zKr//8yp///hzf///v7/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////9P3//9r3///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fX//9DJ///Mqf//zKr//8yq
+ ///Mqv//zKr//8yq/+HMqv8zzKr/Ysyq//bMqv//zKr//8yq///Mqv//zq3//+7i////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////7vv//9f2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9///0tz//8ys///Mqv//zKr//8yq///Mqv//zKr/9syq/2LMqv+TzKr//syq
+ ///Mqv//zKr//8yp///Stf//9/H/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////9////6Pr//9b2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X3///U6v//zbT//8yp
+ ///Mqv//zKr//8yq///Mqv/+zKr/ksyq/73Mqv//zKr//8yq///Mqv//y6n//9nA///8+v//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////8/v//5Pn//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9Tx///Ovf//zKn//8yq///Mqv//zKr//8yq///Mqv+8zKr/3Myq
+ ///Mqv//zKr//8yq///Lqf//38r///7+////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///6/v//4fn//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fX//8/H
+ ///Mqf//zKr//8yq///Mqv//zKr//8yq/9vMqv/vzKr//8yq///Mqv//zKr//8yp///l0///////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////4/v//3/j//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//0M7//8yp///Mqv//zKr//8yq///Mqv//zKr/78yq
+ //nMqv//zKr//8yq///Mqv//zKr//+jY////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////3/f//3/j//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X3
+ ///R0///zKr//8yq///Mqv//zKr//8yq///Mqv/5zKr//syq///Mqv//zKr//8yq///Mq///6dv/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////3/f//3/j//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1ff//9HW///Mqv//zKr//8yq///Mqv//zKr//8yq
+ //7Mqv//zKr//8yq///Mqv//zKr//8yr///q2///////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////4/f//4Pj//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9///0db//8yr///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKv//+rb
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///5/v//4/n//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1ff//9X3///V9///1ff//9X3///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X3///R1v//zKv//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mq///6tv/////////////////////////////////////
+ //////////////7+///7+P//+PT///r2///+/f//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////7/v//5/r//9b2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9///1ff//9X2///V9f//1fL//9Tw
+ ///U7v//1Oz//9Ts///U7P//1O7//9Tw///V8///1fX//9X3///V9///1ff//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1ff//9HW///Mq///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yr
+ ///q2//////////////////////////////////////////////07f//4s7//9e8///Ttv//1br//9/K
+ ///x6P///v7/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////9////7Pv//9n3///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X3
+ ///V9v//1PH//9Po///S3P//0dD//8/H///Pv///zrr//863///Ntf//zbX//821///Ot///zrr//8/A
+ ///Qyf//0dT//9Ph///U7f//1fX//9X3///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9///0db//8yr///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKv//+rb////////////////////////////////
+ ////////7+X//9S3///Mqf//y6n//8yp///Lqf//y6n//9Gy///r3f///v7/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////+////8vz//934
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X3///V8///0+X//9HQ///Ovv//zbL//8ys///Mqv//zKn//8yp
+ ///Mqf//zKn//8yp///Mqf//zKn//8yp///Mqf//zKn//8yp///Mqv//zK7//864///Qyf//0uD//9Tx
+ ///V9///1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X3///R1v//zKv//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mq///6tv///////////////////////////////////bx///Vuf//y6n//8yq///Mqv//zKr//8yq
+ ///Mqv//y6n//9Gy///x6P//////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////+P3//+P5///W9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X3///V8///0t///8/E
+ ///Nsf//zKr//8yp///Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKn//8yp///Nrv//z8D//9Lc///U8v//1ff//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1ff//9HW///Mq///zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yr///q2///////////////////////////
+ ////////5dT//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//93H///9/P//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////P7//+z7///a9///1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//0+b//8/F///Nr///zKn//8yp///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqf//zK7//8/E///T5f//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9///0db//8yr///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKv//+rb//////////////////////////////v5///Yvv//y6n//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqf//0rT///bx////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////b9///j+f//1vb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9///1fP//9HX///NtP//zKn//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKn//820///R1f//1fL//9X3
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X3///R1v//zKv//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mq///6tv/////////////////////
+ ////////9/H//9K0///Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Orf//7+X/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////z+///u+///3fj//9X2///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1ff//9Tx///Qzf//zK7//8yp///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKn//8yt///Qy///1O///9X3///V9v//1fb//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1ff//9HW///Mq///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yr///q2//////////////////////////////z6///0LD//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//82r///r3f//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///5/v//6fr//9r3///V9v//1fb//9X2///V9v//1fb//9X3///U8P//0Mn//8ys///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yr
+ ///Pxv//1O///9X3///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9///0db//8yr
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKv//+rb////////////////
+ //////////////Lp///Pr///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//+na
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////9/3//+f6///a9///1fb//9X2
+ ///V9v//1PL//9DK///Mq///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yr///Qyf//1PH//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X3///R1v//zKv//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mq///6tv/////////////////////////////8ej//8+v///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//6Nn/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////v////b9///n+v//2/f//9X0///R0f//zKz//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqf//zKn//8yp
+ ///Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8ys///R0f//1fX//9X2///V9v//1fb//9X2///V9v//1fb//9X2///V9v//1ff//9LW
+ ///Mq///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yr///q2///////////
+ ///////////////////x6P//z6///8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///o2f//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////7/
+ ///4/v//39///8yv///Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKn//8yp///Mq///za///82z///Ntf//zbb//820///NsP//zKz//8yp///Mqf//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKn//82w///S3v//1ff//9X2
+ ///V9v//1fb//9X2///U9v//1fb//9r3///m+v//4Nn//8yr///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKv//+rb//////////////////////////////Ho///Pr///zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//+jZ////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////fx///Wuv//zKn//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKn//8yr///Ntv//0Mj//9HY///T4///1Or//9Ts
+ ///U7f//1Or//9Pl///S2///0Mv//865///MrP//zKn//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKn//867///U7P//1ff//9T2///V9v//2Pf//+D4///s+///9/3/////
+ ///q2///zKv//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mq///6tv/////
+ ////////////////////////8ej//8+v///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//6Nn/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///9/P//4Mz//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Ntv//0dP//9Tr///V9f//1ff//9X3///V9///1ff//9X3///V9///1ff//9X3///V9f//1O7//9HY
+ ///Ouv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//9HP
+ ///Z9v//4Pj//+r6///0/f///P7//////////////////+rb///Mq///zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yr///q2//////////////////////////////x6P//z6///8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///o2f//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////+/l///Pr///zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///NrP//0cX//9Po///U9v//1ff//9X2///V9v//1fb//9X2
+ ///V9v//1fb//9X2///V9v//1fb//9X2///V9///1ff//9Ts///Qyv//zK3//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqf//z7T//+3t///9////////////////////////////
+ ////////6tv//8yr///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKv//+rb
+ //////////////////////////////Ho///Pr///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//+jZ////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///7+f//28L//8up///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zq3//+LR
+ ///x9///6/z//+X5///f+P//2/f//9n3///X9v//1vb//9X2///V9v//1fb//9T2///U9v//1Pb//9T2
+ ///U9v//1ff//9Tz///R0v//zK7//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//5NL////+///////////////////////////////////q2///zKv//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mq///6tv/////////////////////////////8ej//8+v
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//6Nn/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////+3h///Orv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//82r///izv///Pv//////////////v////z+///6/v//9v3///P8
+ ///v/P//7Pv//+r6///o+v//5vr//+X6///l+f//5fn//+b6///n+v//6fv//+v4///h0///zaz//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8up///Vuf//+fX/////////////////////
+ /////////////+rb///Mq///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yr
+ ///q2//////////////////////////////x6P//z6///8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///o2f//////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///8+v//28P//8up///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqf//2sL///r3
+ /////////////////////////////////////////////////////////////////////////v////7/
+ ///+//////////////////////////v5///dx///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//86t///u4v//////////////////////////////////6tv//8yr///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKv//+rb//////////////////////////////Ho
+ ///Pr///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//+jZ////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////Ho///QsP//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKn//9Gy///y6f//////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////Xu
+ ///Ttf//zKn//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//+HO///+/v//////////
+ ///////////////////q2///zKv//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mq///6tv/////////////////////////////8ej//8+v///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//6Nn/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///+/v//4s///8yp///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//4s////79
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////7//+XU///Mq///zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Lqf//2L7///v5/////////////////////////////+rb///Mq///zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yr///q2///////////////////////////
+ ///x6P//z6///8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///o2f//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////n1///Vuv//y6n//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKn//9Kz///07f//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////9/H//9O2///Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yp///Stf//9/L/////
+ ////////////////////////6tv//8yr///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKv//+rb//////////////////////////////Ho///Pr///zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//+jZ////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////7+X//86u///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Lqf//3sn///38
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////+/v//4s7//8yp///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//9Cw///z7P/////////////////////////////q2///zKv//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mq///6tv/////////////////////
+ ////////8ej//8+v///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//6Nn/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////k0f//zKn//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//86t///t4f//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////w5v//z6///8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//z6////Lp
+ /////////////////////////////+rb///Mq///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yr///q2//////////////////////////////x6P//z6///8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///o2f//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////Pr//9nA///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqf//07b///fy
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////r3///XvP//y6n//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yp///Qsf//9O3/////////////////////////////6tv//8yr
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKv//+rb////////////////
+ //////////////Ho///Pr///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//+jZ
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////38f//0rT//8yp///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8up///bxP///fv/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////+bW///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9e8
+ ///69//////////////////////////////q2///zKv//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mq///6tv/////////////////////////////8ej//8+v///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//6Nr/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////Dm///Orv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKn//+TS
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////9/L//9W5
+ ///Lqf//zKr//8yq///Mqv//zKr//8yq///NrP//6Nn//////////////////////////////////+rb
+ ///Mq///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yr///q2///////////
+ ///////////////////x6P//z6///8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///m1v///Pr///z5///8+f///Pn///z5///8+f///Pn///z5///8+f///Pn///z5///8+v///fv///79
+ /////v//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////6dr//8yr///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///NrP//7N//////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////697//8+v///Lqf//zKn//8yp///Lqf//zaz//+DM
+ ///7+f//////////////////////////////////6tv//8yr///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKv//+rb//////////////////////////////Ho///Pr///zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//9O1///Yvv//2L7//9i+///Yvv//2L7//9i+
+ ///Yvv//2L7//9i+///Yvv//2L///9nA///bw///3cf//+HO///n1v//7eH///Tt///69////v7/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////j0P//zKn//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8+v
+ ///y6f//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///+/f//7eD//9rB///Ttv//07X//9i+///p2v//+/n/////////////////////////////////////
+ ///q2///zKv//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mq///6tv/////
+ ////////////////////////8ej//8+v///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKn//8up///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up
+ ///Lqf//y6n//8yq///NrP//0LH//9e8///hzf//7+T///r3////////////////////////////////
+ /////////////////////////////////////////////////////////v3//97I///Lqf//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqf//0bP///bw////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////Pr///jz///38v//+/n/////
+ /////////////////////////////////////////////+rb///Mq///zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yr///q2//////////////////////////////x6P//z6///8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqf//y6n//8yp
+ ///Orv//173//+jZ///59f//////////////////////////////////////////////////////////
+ ///////////////////8+///2sH//8up///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yp
+ ///Ut///+fT/////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////6tv//8yr///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKv//+rb
+ //////////////////////////////Ho///Pr///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Lqf//zav//9e9///u4v///v3/////
+ //////////////////////////////////////////////////////////////v4///Xvf//y6n//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9a7///69///////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////q2///zKv//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mq///6tv/////////////////////////////8ej//8+v
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//y6n//8+v///k0v//+/n///////////////////////////////78///9
+ 9/////3/////////////////+vb//9W6///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Lqf//2L7///v5////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////+rb///Mq///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yr
+ ///q2//////////////////////////////x6P//z6///8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKn//82r
+ ///gzP//+/j/////////////////////////++7///fa///55P///PP////9///////59f//1Lj//8up
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8up///Zv////Pr/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////6tv//8yr///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKv//+rb//////////////////////////////Ho
+ ///Pr///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//82r///j0P///fv///////////////78///4
+ 4P//9tT///bV///32P//+eL///3x//n0/P/Ut///zKn//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//y6n//9nA///8+v//////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////q2///zKv//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mq///6tv/////////////////////////////8ej//8+v///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//86u///r3f///////////////PD///bX///21f//9tX///bV///21f//99f/+e7j/9S2
+ +//Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Lqf//2b////z6////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////+rb///Mq///zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yr///q2///////////////////////////
+ ///x6P//z6///8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqf//y6n//8up
+ ///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//zKn//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9S4///38f/////9///5
+ 4v//9tX///bV///21f//9tX///bV///31f/57dn/1Lf4/8up///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8up///Yvv//+/n/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////6tv//8yr///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKv//+rb//////////////////////////////Ho///Pr///zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//9e9///hzf//4cz//+HM///hzP//4cz//+HM///hzP//4Mz//+DL
+ ///dx///2sH//9W6///Rsv//zaz//8up///Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//+TS///++/L///fX///21f//9tX///bV///21f//9tX///fV//rv
+ 2f/WuPf/y6n//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9a7///69///////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////q2///zKv//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mq///6tv/////////////////////
+ ////////8ej//8+v///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//6Nn/////
+ /////v///v7///7+///+/v///v7///7+///+/v///v7///79///8+///+vb///Tt///r3v//3sj//9Gy
+ ///Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Lqf//1Lf+//ft
+ 5f//99X///bV///21f//9tX///bV///21f//9tX/+/DY/9i79f/Lqf//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Lqf//1Lf///n1////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////+rb///Mq///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yr///q2//////////////////////////////x6P//z6///8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///o2f//////////////////////////////////////////
+ ///////////////////////////////////9/P//8+v//93G///NrP//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Nq/7/6tfm///31f//9tX///bV///21f//9tX///bV///2
+ 1f/98tf/28Dz/8up///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yp///Rs///9vD/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////6tv//8yr
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKv//+rb////////////////
+ //////////////Ho///Pr///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//+jZ
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////+/n//+LP///NrP//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8up
+ ///exPD//fTW///21f//9tX///bV///21f//9tX///bV//701v/exvD/y6n//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8+v///y6f7/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////q2///zKv//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mq///6tv/////////////////////////////8ej//8+v///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//6Nn/////////////////////////////////////
+ ////////////////////////////////////////////////////////+/n//93G///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9W3+P/57dr///fV///21f//9tX///bV///2
+ 1f//9tX///bV/+TN7P/Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zaz+/+zc
+ 7////fD///77////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////////+rb
+ ///Mq///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yr///q2///////////
+ ///////////////////x6P//z6///8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///o2f//////////////////////////////////////////////////////////////////////////
+ ////////////////////////8+r//9Gy///Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//0K/8//Pk3///99T///bV///21f//9tX///bV///21f//99X/6tbm/8yr///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//5c/q///21///+N////vu///++v//////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////7+///59f//9Oz///Pr///49P///v7/////
+ ////////////////////////////////////////6tv//8yr///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKv//+rb//////////////////////////////Ho///Pr///zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//+jZ////////////////////////////////
+ ///////////////////////////////////////////////////////////////////9+///3MX//8up
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///NrP7/7dvk///31P//9tX///bV///2
+ 1f//9tX///bV///31P/x4eH/z679/8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8up
+ ///cwvL//fPW///21P//9tb///je///77P///vn/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///7+P//5dT//9W4///QsP//z7D//9S3///l1P//+/j/////////////////////////////////////
+ ///q2///zKv//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mq///6tv/////
+ ////////////////////////8ej//8+v///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//6Nn/////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////n1///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///o1Oj///fV///21f//9tX///bV///21f//9tX///fV//fq2//TtPn/zKn//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKn//9S2+f/47Nv///fV///21f//9tX///bV///3
+ 3P//+un///33/////v//////////////////////////////////////////////////////////////
+ /////////////////////////////////////////fz//+LP///Nq///y6n//8yq///Mqv//y6n//82r
+ ///hzf///Pr//////////////////////////////////+rb///Mq///zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yr///q2//////////////////////////////x6P//z6///8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///o2f//////////////////////////
+ /////////////////////////////////////////////////////////////////////////////+3i
+ ///NrP//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKn//+XP6///9tX///bV///2
+ 1f//9tX///bV///21f//9tX//PLX/9q/8//Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zq39/+7d4///99T///bV///21f//9tX///bV///21f//99r///rn///99f////7/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///t4f//z6///8yp///Mqv//zKr//8yq///Mqv//zKr//86t///s3///////////////////////////
+ ////////6tv//8yr///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKv//+rb
+ //////////////////////////////Ho///Pr///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//+jZ////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////8Of//86u///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqf//48zs///21f//9tX///bV///21f//9tX///bV///21f//9tX/5M7r/8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqf//4cnu//711v//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///fZ///55f///fT////9////////////////////////////////////
+ ////////////////////////////////////////+vb//9i+///Lqf//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//y6n//9vD///8+//////////////////////////////q2///zKv//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mq///6tv/////////////////////////////8ej//8+v
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//6Nn/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///x5///zq7//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8up///iy+3///bV///2
+ 1f//9tX///bV///21f//9tX///bV///31P/w4OH/z679/8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yp///Utfn/9+rc///31f//9tX///bV///21f//9tX///bV///21f//9tX///bV///3
+ 2P//+eP///zy///+/P//////////////////////////////////////////////////////////////
+ ///p2v//zaz//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqf//1Lf///j0////////////////
+ /////////////+rb///Mq///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yr
+ ///q2//////////////////////////////x6P//z6///8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///o2f//////////////////////////////////////////////////////////
+ /////////////////////////////////////////////+7j///Orf//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKn//+PN7P//9tX///bV///21f//9tX///bV///21f//9tX///fV//ru
+ 2f/Wufb/y6n//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yr///n0un///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tf///nh///87////vv/////////
+ ////////////////////////////////////////+PT//9a7///Lqf//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yp///StP//9/L/////////////////////////////6tv//8yr///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKv//+rb//////////////////////////////Ho
+ ///Pr///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//+jZ////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////6Nn//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//5tHq///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV/+TO6//Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//y6n//9W3+P/36tz///fV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bW///43///++3///76///////////////////////////////////+
+ ///m1f//zav//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9S4///59f//////////
+ ///////////////////q2///zKv//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mq///6tv/////////////////////////////8ej//8+v///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//6Nn/////////////////////////////////////////////////////
+ //////////////////////////////////////////////79///fyf//y6n//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yr///q1+b///fU///21f//9tX///bV///21f//9tX///bV///2
+ 1f//99X/8+Xf/9Gx+//Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//+LL
+ 7f/+9Nb///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1v//+N3///vr///++P//////////////////////8+z//9K0///Mqf//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Lqf//2cD///z6/////////////////////////////+rb///Mq///zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yr///q2///////////////////////////
+ ///x6P//z6///8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///o2f//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////9vH//9O2///Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zq39//Df
+ 4v//99T///bV///21f//9tX///bV///21f//9tX///bV///21f/989f/3sXw/8up///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//z6/8/+3b5P//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///fb///66f///ff////+//r3
+ ///bw///zKn//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yp///j0P////7/////
+ ////////////////////////6tv//8yr///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKv//+rb//////////////////////////////Ho///Pr///zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//+jZ////////////////////////////////////////////////
+ //////////////////////////////////////////////7+///k0v//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yp///Ssvr/9ujc///31f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///31f/x4eH/0LD8/8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqf//07X5//Li4P//99X///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///42v/99un/4s/8/82r///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//z67///Dm///////////////////////////////////q2///zKv//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mq///6tv/////////////////////
+ ////////8ej//8+v///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//6Nn/////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////7+T//9Gy///Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9m9
+ 9f/88dj///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV//3z1//fx+//zKn//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqf//1bf4//Hh4f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//99X//PLX/+XP
+ 6v/Orf7/zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8up///Zv///+/j/////
+ /////////////////////////////+rb///Mq///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yr///q2//////////////////////////////x6P//z6///8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///o2f//////////////////////////////////////////
+ /////////////////////////////////////////Pn//+ve///Ttf//zKn//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//5M7r///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///fV//Tm3v/TtPn/zKn//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqf//0rT6/+rX5v/88tf///fU///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///fV//nt2v/hye7/zqz+/8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zq3//+ve////////////////////////////////////////6tv//8yr
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKv//+rb////////////////
+ //////////////Ho///Pr///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//+na
+ /////////////////////////////////////////////////////////v7///38///7+P//9e7//+rc
+ ///awv//zq7//8yp///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//9Cv
+ /P/y4uD///fU///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV/+jU
+ 6P/NrP7/zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqf//zq39/93D
+ 8f/x4OH//PHY///21f//99T///fV///31f//99X///fV///31f//99T///bV//vw2P/t2+T/2Lz1/8yr
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8up///awv//+/j/////
+ ///////////////////////////////////q2///zKv//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mq///6tv/////////////////////////////8ej//8+v///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//28P//+fX///n1///59f//+fX///n1///59f//+fX
+ ///n1v//5tX//+TS///hzf//3MX//9e8///Rsv//zav//8up///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Lqf//3MHy//zy1///9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX/+/HY/97E8f/Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKn//8+v/P/av/T/5tHp//Df4v/16N3/+Ozb//nt
+ 2v/469v/9efd/+/e4v/lz+r/2Lz1/86t/f/Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqf//0bL///Ho/////////////////////////////////////////////+rb
+ ///Mq///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yr///q2///////////
+ ///////////////////x6P//z6///8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKn//8up///Lqf//y6n//8yp
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8+u
+ /f/v3uL///fV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//99X/9+rc/9e79v/Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8up///Mqv//zq39/9Gx+//Ttfn/1Lb5/9O0+f/Rsfv/zq39/8yq///Lqf//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//82r/v/m0/P//vz4////
+ ////////////////////////////////////////6tv//8yr///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKv//+rb//////////////////////////////Lp///Pr///zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//38fv//3z1///9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//99X/8+Tf/9S3+P/Lqf//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKn//8yp
+ ///Mqf//zKn//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//38bw//vx2f//+Nv///ro///99v////7/////////////////////////
+ ///q2///zKv//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mq///6tv/////
+ ////////////////////////8+z//9Cw///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//y6n//9a5
+ 9//26dz///fV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX/8eHh/9S2+P/Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//9zC8v/57dr///fV///2
+ 1f//9tX///fa///65v///fT////9/////////////////+rb///Mq///zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yr///q2//////////////////////////////38f//0rT//8yp
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8up///Ttfn/8eHg///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX/8uLg/9a5
+ 9//Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//82r///exPH/+e3a///31f//9tX///bV///21f//9tX///bV///32P//+eT///zy///+
+ /P//////6tv//8yr///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKv//+rb
+ //////////////////////////////v5///Zv///y6n//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Lqf//1Lb4//Dg
+ 4f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX/9efd/9vA8//Nq///zKn//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8up///Prv3/48zs//vv2f//99X///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//99f///nh///98P/q2/z/zKv//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mq///6tv//////////////////////////////////+bV
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Lqf//zav+/9q/8//z5d7///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//99X/+u/Z/+XP6//Rsfv/y6n//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yp
+ ///Mqv//1bf4/+za5P/989b///fV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tT///fW/+rX6//Mq///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yr
+ ///q2///////////////////////////////////9/L//9a7///Lqf//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yp///Lqf//zav+/9W3+P/n0+n/+u/Z///3
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//99X//vXW//Hi4P/cwvL/z679/8up
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yp///Mqf//0bH7/+LK7f/36dz///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//99T/6tbm/8yr///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKv//+rb////////////////////////////////
+ ////////8ur//9i+///NrP//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up
+ ///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8up///Lqf//y6n//8yq
+ ///Orf7/0rP6/9vA8//p1ef/+Ovb///21f//99X///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///fV//zx2P/u3eP/3MLy/9Cw/P/Mqv//y6n//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8up///Mqv//0bL7/9/H
+ 7//y4+D//vTW///31f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///31P/q1uf/zKv//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mq///6tv/////////////////////////////////////////////+fb//+ve///fyf//2L7//9W6
+ ///Vuf//1bn//9W5///Vuf//1bn//9W5///Vuf//1bn//9W5///Vuf//1bn//9W5///Vuf//1bn//9W5
+ ///Vuf//1bn//9a7///Xvf//2sH//93G///hzv//59X1/+7d4//26dz//PLX///21f//99X///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///3
+ 1f/88tf/8+Pf/+TO6//YvPX/0LD8/82r/v/Mqf//y6n//8up///Lqf//zKn//8yp///Mqf//y6n//8up
+ ///Lqf//zKn//82r/v/Rsfv/2b30/+bR6v/05t7//fTW///31f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///fU/+rW5//Mq///zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yr///q2///////////////////////////
+ //////////////////////////////79///8+f//+vb///n2///59v//+fb///n2///59v//+fb///n2
+ ///59v//+fb///n2///59v//+fb///n2///59v//+fb///n2///69v//+vf///v5///8+v///fz////+
+ /f//+uP///fU///31f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//99T///bV//vw2P/05d7/69jm/+PM
+ 7P/cwvL/2Lz1/9W4+P/Utfn/07X5/9S1+f/VuPf/2Lz1/93D8f/jzOz/69nl//Tm3v/78dj///bV///3
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//99T/6tbn/8yr///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKv//+rb////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////30///32P//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///31P//99T///bV//3z1v/78dj/+u7Z//ns2v/47Nv/+eza//ru
+ 2f/88dj//fTW///21f//99T///fU///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///31P/q1uf/zKv//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mq///6tv/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /v//+eX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//99X///fV///31f//99X///fV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///fU/+rW5//Mq///zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yr///q2///////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////32///32f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//99T/6tbn/8yr
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq//7Mqv//zKr//8yq///Mqv//zKv//+nb////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /v//+uf///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///31f/p1uf/zKr//8yq///Mqv//zKr//8yq///Mqv/+zKr/+cyq
+ ///Mqv//zKr//8yq///Mqv//6Nj/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////33///32v//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///fV/+jT
+ 6P/Mqv//zKr//8yq///Mqv//zKr//8yq//nMqv/vzKr//8yq///Mqv//zKr//8yp///l0///////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////+un///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX/5M/r/8yp///Mqv//zKr//8yq///Mqv//zKr/78yq
+ /9zMqv//zKr//8yq///Mqv//y6n//+DL///+/v//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////75///33P//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV//71
+ 1v/fx+//y6n//8yq///Mqv//zKr//8yq///Mqv/bzKr/vcyq///Mqv//zKr//8yq///Lqf//2cD///z6
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////++z///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX//PHY/9m99P/Lqf//zKr//8yq///Mqv//zKr//8yq
+ /7zMqv+TzKr//syq///Mqv//zKr//8yp///Stf//9/H/////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////76///43v//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///3
+ 1f/36tz/0rT6/8yp///Mqv//zKr//8yq///Mqv/+zKr/ksyq/2LMqv/2zKr//8yq///Mqv//zKr//86t
+ ///u4v//////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////++7///bW///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///fU/+7c4//OrP7/zKr//8yq///Mqv//zKr//8yq
+ //bMqv9izKr/M8yq/+HMqv//zKr//8yq///Mqv//zKn//+HN///+/v//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////77///43///9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f/+9db/4cnu/8yp///Mqv//zKr//8yq///Mqv//zKr/4cyq/zPMqv8QzKr/t8yq///Mqv//zKr//8yq
+ ///Mqf//1Lj///jz////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////PD///bX///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///fV//jr2//Utvj/zKn//8yq///Mqv//zKr//8yq
+ ///Mqv+2zKr/EMyq/wDMqv94zKr//syq///Mqv//zKr//8yq///Nq///6dv/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////78///54f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX/6dXn/82r/v/Mqv//zKr//8yq///Mqv//zKr//syq/3fMqv8AzKr/AMyq/zXMqv/mzKr//8yq
+ ///Mqv//zKr//8up///Xvf//+fb/////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////PL///fX///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///fV//nu2v/Xu/b/y6n//8yq///Mqv//zKr//8yq
+ ///Mqv/lzKr/Ncyq/wDMqv8AzKr/Csyq/6jMqv//zKr//8yq///Mqv//zKr//82r///o2P//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////9///55P//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX/6NPo/82r/v/Mqv//zKr//8yq///Mqv//zKr//8yq/6fMqv8KzKr/AMyq/wDMqv8AzKr/UMyq
+ //LMqv//zKr//8yq///Mqv//zKn//9O2///17v//////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////fT///fY///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///fV//Xm3v/Ttfn/zKn//8yq///Mqv//zKr//8yq
+ ///Mqv/yzKr/UMyq/wDMqv8AzKr/AMyq/wDMqv8PzKr/scyq///Mqv//zKr//8yq///Mqv//zKn//9zF
+ ///7+P//////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////+///65v//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///3
+ 1f/78Nj/3MLy/8yq///Mqv//zKr//8yq///Mqv//zKr//8yq/7HMqv8PzKr/AMyq/wDMqv8AzKr/AMyq
+ /wDMqv9LzKr/7cyq///Mqv//zKr//8yq///Mqv//zaz//+TS///9/P//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////fb///fa///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX//fPW/+TO6//Nq/7/zKr//8yq///Mqv//zKr//8yq
+ ///Mqv/szKr/Ssyq/wDMqv8AzKr/AMyq/wDMqv8AzKr/AMyq/wjMqv+VzKr//8yq///Mqv//zKr//8yq
+ ///Mqv//z67//+jZ///+/f//////////////////////////////////////////////////////////
+ ///////////////////////////////////////////+///66P//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV//70
+ 1v/o1Oj/z679/8yq///Mqv//zKr//8yq///Mqv//zKr//8yq/5XMqv8IzKr/AMyq/wDKrP8AAAAAAMyq
+ /wDMqv8AzKr/AMyq/yjMqv/NzKr//8yq///Mqv//zKr//8yq///Mqf//z6///+jZ///9/P//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////fj///fb///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///31f/99Nb/6NTo/8+v/P/Mqf//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv/NzKr/KMyq/wDMqv8AzKr/AAAAAAAAAAAAzKr/AMyq/wDMqv8AzKr/AMyq/1LMqv/qzKr//8yq
+ ///Mqv//zKr//8yq///Mqf//z67//+TS///7+P//////////////////////////////////////////
+ ///////////////////////////////////////////////76v//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//99X/+/DY/+TO
+ 6//Prv3/zKn//8yq///Mqv//zKr//8yq///Mqv//zKr/6syq/1LMqv8AzKr/AMyq/wDMqv8AAAAAAAAA
+ AAAAAAAAzKr/AMyq/wDMqv8AzKr/BMyq/3jMqv/3zKr//8yq///Mqv//zKr//8yq///Mqv//zaz//9zF
+ ///17v//////////////////////////////////////////////////////////////////////////
+ /////vn///jc///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//99X///bV//Xm3v/cwvH/zav+/8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ //fMqv94zKr/BMyq/wDMqv8AzKr/AAAAAAAAAAAAAAAAAAAAAADJrv8AzKr/AMyq/wDMqv8AzKr/Dcyq
+ /5DMqv/7zKr//8yq///Mqv//zKr//8yq///Mqv//zKn//9O2///o2P//+fb/////////////////////
+ ///////////////////////////////////////////////77f//9tb///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//99X///bV//nu2v/o0+j/07X5/8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv/7zKr/kMyq/w3Mqv8AzKr/AMyq/wDPr/8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAADMqv8A/5v/AMyq/wDMqv8AzKr/E8yq/5fMqv/7zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKn//82r///Xvf//6dv///jz///+/v//////////////////////////////////////////
+ /////vv///je///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///2
+ 1f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///21f//9tX///bV///3
+ 1f//99T//vXW//jr2//p1ef/17v2/82r/v/Mqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr/+8yq
+ /5fMqv8TzKr/AMyq/wDMuf8AzKr/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMqv8AzKr/AMyq
+ /wDMqv8AzKr/E8yq/4/Mqv/3zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8up///Nq///1Lj//+HN
+ ///u4v//9/H///z6///+/v/////////////////////////87v//99b///fU///31P//99T///fU///3
+ 1P//99T///fU///31P//99T///fU///31P//99T///fU///31P//99T///fU///31P//99T///fU///3
+ 1P//99T///fU///31P//99T///fU///31P//99T///fU///31P//99T///fU///31P//99T///fU///3
+ 1P//99T///fU///31P//99T///fU///31P//99T///fU///31P//99T///fU///31P//99T///fU///3
+ 1P//99T///fU///31P//99T///fU///31P//99T///fU///31P//99T///fU///31P//99T///fU///3
+ 1P//99T///fU///31f//99X///bV//711v/88dj/9+rc/+7c4//hye7/1Lb4/82r/v/Lqf//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq//fMqv+QzKr/E8yq/wDMqv8Azar/AMyq/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMqv8AzKv/AMyq/wDMqv8AzKr/Dcyq/3jMqv/qzKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqf//zKn//86t///Stf//2cD//+DL///l0///6Nj//+nb
+ ///q2/7/6tjv/+rW5v/q1uf/6tbn/+rW5//q1uf/6tbn/+rW5//q1uf/6tbn/+rW5//q1uf/6tbn/+rW
+ 5//q1uf/6tbn/+rW5//q1uf/6tbn/+rW5//q1uf/6tbn/+rW5//q1uf/6tbn/+rW5//q1uf/6tbn/+rW
+ 5//q1uf/6tbn/+rW5//q1uf/6tbn/+rW5//q1uf/6tbn/+rW5//q1uf/6tbn/+rW5//q1uf/6tbn/+rW
+ 5//q1uf/6tbn/+rW5//q1uf/6tbn/+rW5//q1uf/6tbn/+rW5//q1uf/6tbn/+rW5//q1uf/6tbn/+rW
+ 5//q1uf/6tbn/+rW5//q1uf/6tbn/+rW5//q1uf/6tbn/+rW5//q1uf/6dbn/+jT6P/lz+v/38fv/9m9
+ 9P/TtPr/zq3+/8yp///Lqf//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv/qzKr/eMyq
+ /w3Mqv8AzKr/AMyq/wDMqf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADMqv8AzKr/AMyq/wDMqv8AzKr/BMyq/1LMqv/NzKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yp///Lqf//y6n//8yp///Mqv//zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr
+ ///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr
+ ///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr
+ ///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr
+ ///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr///Mq///zKv//8yr
+ ///Mq///zKv//8yr///Mq///zKr//8yp///Lqf//y6n//8yp///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr/zcyq/1PMqv8EzKr/AMyq/wDMqv8AzKv/AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMqv8A8d3/AMyq/wDMqv8AzKr/AMyq
+ /yfMqv+VzKr/7Myq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr/7cyq/5bMqv8ozKr/AMyq
+ /wDMqv8A0q7/AMyq/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADMqv8AzKr/AMyq/wDMqv8AzKr/AMyq/wjMqv9KzKr/scyq//LMqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr/8syq/7HMqv9LzKr/CMyq/wDMqv8AzKr/AMyq/wDMqv8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMqv8AzKr/AMyq
+ /wDMqv8AzKr/AMyq/wDMqv8PzKr/UMyq/6fMqv/lzKr//syq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv/+zKr/5syq/6jMqv9RzKr/EMyq/wDMqv8Ay6r/AMyq
+ /wDMqv8Aya7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzKr/AMyq/wDMqv8AzKr/AMyq/wDMqv8AzKr/Csyq
+ /zXMqv94zKr/tsyq/+HMqv/2zKr//syq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//syq//bMqv/hzKr/t82r
+ /3nMq/82zKr/Csyq/wDMqv8AzKr/AMyq/wDMqv8AzKr/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAMqs/wDMqv8AzKr/AM2q/wDMqv8AzKr/AMyq/wDMqv8QzKr/M8yq/2LMqv+SzKr/vcyq
+ /9zMqv/vzav+/Myq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq
+ ///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//8yq///Mqv//zKr//syq
+ //nMqv/vzKr/3Myq/73Mqv+TzKr/Y8yq/zPMqv8QxqL/AMyq/wDMqv8AzKr/AMyq/wDMqv8AzKr/AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/+AAAAAAAAAAA
+ AAAAAB///+AAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAD//gAAAAAA
+ AAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAD+AA
+ AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAA
+ AAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA
+ AAHAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfwAAAAAAAAAAAA
+ AAAAAAAP+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAAAD/+AAAAAAAAAAAAAAAAAAB//wAAAAAA
+ AAAAAAAAAAAA//+AAAAAAAAAAAAAAAAAAf//4AAAAAAAAAAAAAAAAAf///gAAAAAAAAAAAAAAAAf/4lQ
+ TkcNChoKAAAADUlIRFIAAAEAAAABAAgGAAAAXHKoZgAAAAFvck5UAc+id5oAADP0SURBVHja7Z1pjCxZ
+ Vpi/GxG5Z9Zer5a3db/u6dcz08xMzwxmX/yDwTIGBGJ62iCZRRgsEDJeQCCEf9hgLGwjLGzJGBuzmunu
+ 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
+
+
+
\ No newline at end of file
diff --git a/PC3Player/PC3Player/PC3Player.csproj b/PC3Player/PC3Player/PC3Player.csproj
new file mode 100644
index 0000000..f0b2d04
--- /dev/null
+++ b/PC3Player/PC3Player/PC3Player.csproj
@@ -0,0 +1,21 @@
+
+
+
+ WinExe
+ net8.0-windows
+ enable
+ true
+ enable
+ icon.ico
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PC3Player/PC3Player/PC3Player.csproj.user b/PC3Player/PC3Player/PC3Player.csproj.user
new file mode 100644
index 0000000..d5594ae
--- /dev/null
+++ b/PC3Player/PC3Player/PC3Player.csproj.user
@@ -0,0 +1,17 @@
+
+
+
+ <_LastSelectedProfileId>C:\Users\Persephone\source\repos\PC3Player\PC3Player\Properties\PublishProfiles\FolderProfile.pubxml
+
+
+
+ Form
+
+
+ Form
+
+
+ Form
+
+
+
\ No newline at end of file
diff --git a/PC3Player/PC3Player/Program.cs b/PC3Player/PC3Player/Program.cs
new file mode 100644
index 0000000..e19890b
--- /dev/null
+++ b/PC3Player/PC3Player/Program.cs
@@ -0,0 +1,17 @@
+namespace PC3Player
+{
+ internal static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ // To customize application configuration such as set high DPI settings or default font,
+ // see https://aka.ms/applicationconfiguration.
+ ApplicationConfiguration.Initialize();
+ Application.Run(new MainForm());
+ }
+ }
+}
\ No newline at end of file
diff --git a/PC3Player/PC3Player/Properties/PublishProfiles/FolderProfile.pubxml b/PC3Player/PC3Player/Properties/PublishProfiles/FolderProfile.pubxml
new file mode 100644
index 0000000..6af5f01
--- /dev/null
+++ b/PC3Player/PC3Player/Properties/PublishProfiles/FolderProfile.pubxml
@@ -0,0 +1,13 @@
+
+
+
+
+ Release
+ Any CPU
+ bin\Release\net8.0-windows\publish\
+ FileSystem
+ <_TargetId>Folder
+ net8.0-windows
+ false
+
+
\ No newline at end of file
diff --git a/PC3Player/PC3Player/Properties/PublishProfiles/FolderProfile.pubxml.user b/PC3Player/PC3Player/Properties/PublishProfiles/FolderProfile.pubxml.user
new file mode 100644
index 0000000..0694e5c
--- /dev/null
+++ b/PC3Player/PC3Player/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -0,0 +1,8 @@
+
+
+
+
+ True|2025-07-08T03:32:00.3108399Z||;True|2025-07-07T16:13:43.3420483-07:00||;
+
+
+
\ No newline at end of file
diff --git a/PC3Player/PC3Player/SerialPortSelector.Designer.cs b/PC3Player/PC3Player/SerialPortSelector.Designer.cs
new file mode 100644
index 0000000..a14d3be
--- /dev/null
+++ b/PC3Player/PC3Player/SerialPortSelector.Designer.cs
@@ -0,0 +1,114 @@
+namespace PC3Player
+{
+ partial class SerialPortSelector
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ label1 = new Label();
+ PortDropDown = new ComboBox();
+ CancelButton = new Button();
+ OKButton = new Button();
+ panel1 = new Panel();
+ panel1.SuspendLayout();
+ SuspendLayout();
+ //
+ // label1
+ //
+ label1.AutoSize = true;
+ label1.Location = new Point(12, 15);
+ label1.Name = "label1";
+ label1.Size = new Size(29, 15);
+ label1.TabIndex = 0;
+ label1.Text = "Port";
+ //
+ // PortDropDown
+ //
+ PortDropDown.DropDownStyle = ComboBoxStyle.DropDownList;
+ PortDropDown.FormattingEnabled = true;
+ PortDropDown.Location = new Point(47, 12);
+ PortDropDown.Name = "PortDropDown";
+ PortDropDown.Size = new Size(191, 23);
+ PortDropDown.TabIndex = 1;
+ //
+ // CancelButton
+ //
+ CancelButton.DialogResult = DialogResult.Cancel;
+ CancelButton.Location = new Point(82, 13);
+ CancelButton.Name = "CancelButton";
+ CancelButton.Size = new Size(75, 25);
+ CancelButton.TabIndex = 2;
+ CancelButton.Text = "Cancel";
+ CancelButton.UseVisualStyleBackColor = true;
+ //
+ // OKButton
+ //
+ OKButton.DialogResult = DialogResult.OK;
+ OKButton.Location = new Point(163, 13);
+ OKButton.Name = "OKButton";
+ OKButton.Size = new Size(75, 25);
+ OKButton.TabIndex = 3;
+ OKButton.Text = "OK";
+ OKButton.UseVisualStyleBackColor = true;
+ OKButton.Click += OKButton_Click;
+ //
+ // panel1
+ //
+ panel1.BackColor = SystemColors.MenuBar;
+ panel1.Controls.Add(OKButton);
+ panel1.Controls.Add(CancelButton);
+ panel1.Location = new Point(0, 50);
+ panel1.Name = "panel1";
+ panel1.Size = new Size(250, 50);
+ panel1.TabIndex = 4;
+ //
+ // SerialPortSelector
+ //
+ AcceptButton = OKButton;
+ AutoScaleDimensions = new SizeF(7F, 15F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(250, 100);
+ Controls.Add(panel1);
+ Controls.Add(PortDropDown);
+ Controls.Add(label1);
+ FormBorderStyle = FormBorderStyle.FixedDialog;
+ Name = "SerialPortSelector";
+ Text = "Select a Serial Port";
+ Load += SerialPortSelector_Load;
+ panel1.ResumeLayout(false);
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private Label label1;
+ private ComboBox PortDropDown;
+ private Button CancelButton;
+ private Button OKButton;
+ private Panel panel1;
+ }
+}
\ No newline at end of file
diff --git a/PC3Player/PC3Player/SerialPortSelector.cs b/PC3Player/PC3Player/SerialPortSelector.cs
new file mode 100644
index 0000000..ea4bc91
--- /dev/null
+++ b/PC3Player/PC3Player/SerialPortSelector.cs
@@ -0,0 +1,24 @@
+using System.IO.Ports;
+
+namespace PC3Player
+{
+ public partial class SerialPortSelector : Form
+ {
+ public string PortName { get; set; }
+ public SerialPortSelector()
+ {
+ InitializeComponent();
+ }
+
+ private void SerialPortSelector_Load(object sender, EventArgs e)
+ {
+ PortDropDown.Items.Clear();
+ foreach (string port in SerialPort.GetPortNames()) PortDropDown.Items.Add(port);
+ }
+
+ private void OKButton_Click(object sender, EventArgs e)
+ {
+ PortName = (string)PortDropDown.SelectedItem;
+ }
+ }
+}
diff --git a/PC3Player/PC3Player/SerialPortSelector.resx b/PC3Player/PC3Player/SerialPortSelector.resx
new file mode 100644
index 0000000..4f24d55
--- /dev/null
+++ b/PC3Player/PC3Player/SerialPortSelector.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/PC3Player/PC3Player/icon.ico b/PC3Player/PC3Player/icon.ico
new file mode 100644
index 0000000..4514321
Binary files /dev/null and b/PC3Player/PC3Player/icon.ico differ
diff --git a/README.md b/README.md
index c5b91a8..3573266 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,3 @@
-# PinkConnection2
+# PinkConnection
-Software for use with PinkConnection2 Animatronic Controllers
\ No newline at end of file
+Software for use with PinkConnection Animatronic Controllers
diff --git a/PC2Converter/PC2Converter.Gtk/Program.cs b/USTConverter/USTConverter.Gtk/Program.cs
similarity index 81%
rename from PC2Converter/PC2Converter.Gtk/Program.cs
rename to USTConverter/USTConverter.Gtk/Program.cs
index 3297df7..1d1b0b0 100644
--- a/PC2Converter/PC2Converter.Gtk/Program.cs
+++ b/USTConverter/USTConverter.Gtk/Program.cs
@@ -1,7 +1,7 @@
using System;
using Eto.Forms;
-namespace PC2Converter.Gtk
+namespace USTConverter.Gtk
{
class Program
{
diff --git a/PC2Converter/PC2Converter.Gtk/PC2Converter.Gtk.csproj b/USTConverter/USTConverter.Gtk/USTConverter.Gtk.csproj
similarity index 83%
rename from PC2Converter/PC2Converter.Gtk/PC2Converter.Gtk.csproj
rename to USTConverter/USTConverter.Gtk/USTConverter.Gtk.csproj
index 7e86dbd..3832d00 100644
--- a/PC2Converter/PC2Converter.Gtk/PC2Converter.Gtk.csproj
+++ b/USTConverter/USTConverter.Gtk/USTConverter.Gtk.csproj
@@ -7,7 +7,7 @@
-
+
diff --git a/PC2Player/PC2Player.Mac/Icon.icns b/USTConverter/USTConverter.Mac/Icon.icns
similarity index 100%
rename from PC2Player/PC2Player.Mac/Icon.icns
rename to USTConverter/USTConverter.Mac/Icon.icns
diff --git a/PC2Converter/PC2Converter.Mac/Info.plist b/USTConverter/USTConverter.Mac/Info.plist
similarity index 81%
rename from PC2Converter/PC2Converter.Mac/Info.plist
rename to USTConverter/USTConverter.Mac/Info.plist
index 6157797..667bce4 100644
--- a/PC2Converter/PC2Converter.Mac/Info.plist
+++ b/USTConverter/USTConverter.Mac/Info.plist
@@ -3,11 +3,11 @@
CFBundleName
- PC2Converter
+ USTConverter
CFBundleIdentifier
- com.example.PC2Converter
+ me.kawaiizenbo.USTConverter
CFBundleShortVersionString
- 1.0
+ 1.3
LSMinimumSystemVersion
10.15
CFBundleDevelopmentRegion
diff --git a/PC2Converter/PC2Converter.Mac/Program.cs b/USTConverter/USTConverter.Mac/Program.cs
similarity index 81%
rename from PC2Converter/PC2Converter.Mac/Program.cs
rename to USTConverter/USTConverter.Mac/Program.cs
index 973dc3d..089435e 100644
--- a/PC2Converter/PC2Converter.Mac/Program.cs
+++ b/USTConverter/USTConverter.Mac/Program.cs
@@ -1,7 +1,7 @@
using System;
using Eto.Forms;
-namespace PC2Converter.Mac
+namespace USTConverter.Mac
{
class Program
{
diff --git a/PC2Converter/PC2Converter.Mac/PC2Converter.Mac.csproj b/USTConverter/USTConverter.Mac/USTConverter.Mac.csproj
similarity index 84%
rename from PC2Converter/PC2Converter.Mac/PC2Converter.Mac.csproj
rename to USTConverter/USTConverter.Mac/USTConverter.Mac.csproj
index 437ecec..2f87570 100644
--- a/PC2Converter/PC2Converter.Mac/PC2Converter.Mac.csproj
+++ b/USTConverter/USTConverter.Mac/USTConverter.Mac.csproj
@@ -8,7 +8,7 @@
-
+
diff --git a/PC2Converter/PC2Converter.Wpf/Program.cs b/USTConverter/USTConverter.Wpf/Program.cs
similarity index 81%
rename from PC2Converter/PC2Converter.Wpf/Program.cs
rename to USTConverter/USTConverter.Wpf/Program.cs
index 8a370b0..df54590 100644
--- a/PC2Converter/PC2Converter.Wpf/Program.cs
+++ b/USTConverter/USTConverter.Wpf/Program.cs
@@ -1,7 +1,7 @@
using System;
using Eto.Forms;
-namespace PC2Converter.Wpf
+namespace USTConverter.Wpf
{
class Program
{
diff --git a/PC2Converter/PC2Converter.Wpf/PC2Converter.Wpf.csproj b/USTConverter/USTConverter.Wpf/USTConverter.Wpf.csproj
similarity index 83%
rename from PC2Converter/PC2Converter.Wpf/PC2Converter.Wpf.csproj
rename to USTConverter/USTConverter.Wpf/USTConverter.Wpf.csproj
index 32ab58c..89efd4b 100644
--- a/PC2Converter/PC2Converter.Wpf/PC2Converter.Wpf.csproj
+++ b/USTConverter/USTConverter.Wpf/USTConverter.Wpf.csproj
@@ -7,7 +7,7 @@
-
+
diff --git a/USTConverter/USTConverter/MainForm.cs b/USTConverter/USTConverter/MainForm.cs
new file mode 100644
index 0000000..66a1bd5
--- /dev/null
+++ b/USTConverter/USTConverter/MainForm.cs
@@ -0,0 +1,360 @@
+using System.Collections;
+using System.Diagnostics;
+using System.IO;
+using System.Numerics;
+
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace USTConverter
+{
+ public partial class MainForm : Form
+ {
+ DropDown InputTypeSelector = new DropDown();
+ DropDown OutputTypeSelector = new DropDown();
+ TextBox FilePathTextBox = new TextBox();
+ Button BrowseFileButton = new Button { Text = "Browse", Width = 100 };
+ Button ConvertButton = new Button { Text = "Convert", Width = 100 };
+ CheckBox CompressAudioCheckBox = new CheckBox { Text = "Compress Audio" };
+
+ string[] InputTypes = {
+ "RSHW File (RR Engine)", "CSHW File (RR Engine)", "SSHW File (RR Engine)"/*,
+ "3ST File (APS)", "ROA/R12/C&R File (APS)"*/
+ };
+
+ string[] RAE3stOutputTypes = { "UST (Rock-afire Explosion/3-Stage)" , "UST (Cyberamics Rosetta)" };
+ string[] CyberOutputTypes = { "UST (Cyberamics)" };
+ string[] StudioCOutputTypes = { "UST (Studio C)" };
+
+
+ int[] CyberBitMap = {
+ 1, 2, 3, 4, 8, 5, 6, 7,
+ 65, 66, 67, 68, 72, 69, 70, 71,
+ 49, 50, 51, 56, 53, 54, 55, 52,
+ 17, 18, 19, 20, 24, 21, 22, 23,
+ 33, 34, 35, 40, 37, 38, 39, 36,
+ 9, 46, 62, 10, 74, 75, 76, 77, 78,
+ 104, 102, 109, 107, 100, 123, 41,
+ 27, 28, 29, 30, 25, 26, 57, 58,
+ 120, 116, 127, 118, 117, 119,
+ 114, 113, 115,
+ 110, 108, 101, 106, 111,
+ 103, 105, 125, 121, 126, 99, 124, 122, 97, 98
+ };
+
+ int[] CyberBitMapRosetta = {
+ 1, 6, 7, 8, 4, 5, 2, 19,
+ 185, 178, 179, 180, 183, 184, 181, 169,
+ 45, 54, 55, 43, 44, 41, 58, 59,
+ 166, 156, 157, 158, 156, 157, 151, 163,
+ 30, 25, 21, 28, 29, 26, 31, 35,
+ 0, 0, 0, 49, 0, 0, 0, 0, 0,
+ 88, 86, 85, 82, 84, 81, 0,
+ 93, 94, 91, 92, 91, 92, 0, 0,
+ 229, 228, 226, 224, 223, 221,
+ 235, 232, 234,
+ 67, 68, 71, 72, 73,
+ 220, 244, 245, 225, 77, 241, 240, 87, 222, 0
+ };
+
+ int[] RAE3stBitMap = {
+ 1, 9, 10, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 17, 18, 19, 14, 15, 16, 20, 36, 37,
+ 185, 176, 177, 181, 182, 183, 184, 178, 179, 180, 173, 175, 174, 168, 170, 169, 186, 187, 188,
+ 45, 41, 42, 43, 44, 54, 55, 51, 52, 53, 57, 59, 58, 60, 61, 62,
+ 166, 151, 152, 153, 156, 157, 158, 161, 162, 163, 164, 154, 155, 159, 160, 165,
+ 30, 23, 24, 26, 27, 28, 29, 25, 21, 22, 33, 35, 34, 31, 32, 63, 64,
+ 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 189, 190, 194, 211, 212, 213,
+ 167, 191, 192, 193, 171, 172, 48,
+ 39, 38, 47, 46, 49, 50,
+ 88, 86, 85, 82, 242, 84, 83, 81, 238, 239, 240, 87,
+ 93, 94, 91, 92, 89, 90,
+ 229, 228, 227, 226, 224, 223, 221, 219, 218, 217, 216, 222,
+ 235, 232, 231, 234, 236, 237, 233, 242, 243,
+ 67, 68, 69, 66, 71, 72, 73,
+ 78, 77, 76, 79, 80,
+ 220, 244, 245, 225, 230, 241
+ };
+
+ int[] StudioCBitMap = {
+ 21, 28, 25, 24, 26, 27, 29, 30, 31, 18, 19, 23, 22, 20, 6, 7, 11, 8, 9, 10, 1, 2, 17, 3, 4, 5, 12, 16, 15, 13, 14, 32,
+ 33, 36, 34, 35, 40, 160, 161,
+ 177, 178,
+ 44, 45,
+ 151, 154, 152, 153, 155, 157, 156, 181, 180, 182,
+ 172, 174, 173, 171,
+ 166, 165, 164,
+ 159, 163, 167, 168, 176, 169, 170, 162, 179
+ };
+
+ int[] CyberRosettaInvertedBits = { 2, 181, 41, 59, 58, 151, 163, 26, 35, 31 };
+ int[] RAE3stAPSDescrambleTable = { 10, 11, 0, 1, 2, 3, 4, 12, 13, 5, 6, 7, 8, 9, 14, 15};
+
+ bool Rosetta = false;
+ const int USTVersion = 2;
+
+ public MainForm()
+ {
+ Title = "UST Showtape Converter";
+ Size = new Size(500, 300);
+ Maximizable = false;
+ Resizable = false;
+
+ BrowseFileButton.Command = new Command((sender, e) => { Event_BrowseFileButton(); });
+ ConvertButton.Command = new Command((sender, e) => { Event_ConvertFileButton(); });
+
+ InputTypeSelector.SelectedValueChanged += (sender, e) => Event_ChangeInputType();
+
+ foreach (string s in InputTypes)
+ {
+ InputTypeSelector.Items.Add(s);
+ }
+
+ Content = BuildLayout();
+ }
+
+ DynamicLayout BuildLayout()
+ {
+ DynamicLayout layout = new DynamicLayout { DefaultSpacing = new Size(10, 10), DefaultPadding = new Padding(5, 5, 5, 5) };
+
+ layout.BeginVertical();
+ layout.BeginHorizontal();
+ layout.Add(new Label { Text = "Input Format" });
+ layout.EndHorizontal();
+
+ layout.BeginHorizontal();
+ layout.Add(InputTypeSelector, true);
+ layout.EndHorizontal();
+
+ layout.BeginHorizontal();
+ layout.Add(new Label { Text = "Output Type" });
+ layout.EndHorizontal();
+
+ layout.BeginHorizontal();
+ layout.Add(OutputTypeSelector, true);
+ layout.EndHorizontal();
+ layout.EndVertical();
+
+ layout.BeginVertical();
+ layout.BeginHorizontal();
+ layout.Add(new Label { Text = "File to convert" });
+ layout.EndHorizontal();
+
+ layout.BeginHorizontal();
+ layout.Add(FilePathTextBox, true);
+ layout.Add(BrowseFileButton);
+ layout.EndHorizontal();
+ layout.EndVertical();
+
+ layout.BeginVertical();
+ layout.BeginHorizontal();
+ layout.Add(null, true);
+ layout.Add(CompressAudioCheckBox);
+ layout.Add(ConvertButton);
+ layout.EndHorizontal();
+ layout.EndVertical();
+
+ layout.BeginVertical();
+ layout.Add(null, true);
+ layout.EndVertical();
+
+ return layout;
+ }
+
+ string MakeHeader(string showName, string outputType)
+ {
+ string headerOut = $"UST,{USTVersion.ToString()},{showName.Replace(",", "_").Replace(";", "_")},";
+ switch (outputType)
+ {
+ case "UST (Rock-afire Explosion/3-Stage)":
+ headerOut += "Rockafire Explosion/3-Stage;";
+ break;
+ case "UST (Cyberamics Rosetta)":
+ headerOut += "Cyberamics;";
+ break;
+ case "UST (Cyberamics)":
+ headerOut += "Cyberamics;";
+ break;
+ case "UST (Studio C)":
+ headerOut += "Studio C;";
+ break;
+ }
+ return headerOut;
+ }
+
+ void Event_ChangeInputType()
+ {
+ switch(InputTypeSelector.SelectedIndex)
+ {
+ case 0:
+ OutputTypeSelector.Items.Clear();
+ foreach (string s in RAE3stOutputTypes)
+ {
+ OutputTypeSelector.Items.Add(s);
+ }
+ break;
+ case 1:
+ OutputTypeSelector.Items.Clear();
+ foreach (string s in CyberOutputTypes)
+ {
+ OutputTypeSelector.Items.Add(s);
+ }
+ break;
+ case 2:
+ OutputTypeSelector.Items.Clear();
+ foreach (string s in StudioCOutputTypes)
+ {
+ OutputTypeSelector.Items.Add(s);
+ }
+ break;
+ }
+ }
+
+ void Event_BrowseFileButton()
+ {
+ OpenFileDialog fileDialog = new OpenFileDialog();
+ string[] showFiles = { ".rshw", ".cshw", ".sshw" };
+ string[] allFiles = { ".*" };
+ fileDialog.Filters.Add(new FileFilter("Show Files (.rshw, .cshw, .sshw)", showFiles));
+ fileDialog.Filters.Add(new FileFilter("All Files", allFiles));
+ fileDialog.Title = "Select Show File.";
+ fileDialog.ShowDialog(this);
+ if (File.Exists(fileDialog.FileName)) FilePathTextBox.Text = fileDialog.FileName;
+ }
+
+ void Event_ConvertFileButton()
+ {
+ // safeties
+ if (InputTypeSelector.SelectedIndex == -1)
+ {
+ MessageBox.Show("Fatal: You must select an input type.");
+ return;
+ }
+ if (OutputTypeSelector.SelectedIndex == -1)
+ {
+ MessageBox.Show("Fatal: You must select an output type.");
+ return;
+ }
+ if (FilePathTextBox.Text.Trim() == "")
+ {
+ MessageBox.Show("Fatal: You must select an input file.");
+ return;
+ }
+ if (!File.Exists(FilePathTextBox.Text.Trim()))
+ {
+ MessageBox.Show("Fatal: Specified input file does not exist.");
+ return;
+ }
+
+ SaveFileDialog fileDialog = new SaveFileDialog();
+ fileDialog.Filters.Add(new FileFilter("UST Files (.ust)", new string[]{".ust"}));
+ fileDialog.Title = "Select Output File.";
+ fileDialog.ShowDialog(this);
+ if (fileDialog.FileName.Trim() == "") return;
+ string outFilePath = fileDialog.FileName;
+
+ // now its actually time to start doing some shit
+ string inputType = InputTypeSelector.SelectedKey;
+ string outputType = OutputTypeSelector.SelectedKey;
+ string filePath = FilePathTextBox.Text.Trim();
+ if (inputType == "RSHW File (RR Engine)" || inputType == "CSHW File (RR Engine)" || inputType == "SSHW File (RR Engine)")
+ {
+ // at some point there should be a warning displayed if the input type does not match the file extension but i dont feel like doing that right now
+
+ // rshw time
+ RSHWFile file = RSHWLoader.Load(filePath);
+ if (file.signalData == null)
+ {
+ MessageBox.Show("Fatal: This file contains no signal data.");
+ return;
+ }
+ if (file.audioData == null)
+ {
+ MessageBox.Show("Fatal: This file contains no audio data.");
+ 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);
+ }
+ }
+
+ // pick which target bits to use and how many bytes the output should be
+ int[] targetBits = { 0 };
+ switch (outputType)
+ {
+ case "UST (Rock-afire Explosion/3-Stage)":
+ targetBits = RAE3stBitMap;
+ break;
+ case "UST (Cyberamics Rosetta)":
+ targetBits = CyberBitMapRosetta;
+ Rosetta = true;
+ break;
+ case "UST (Cyberamics)":
+ targetBits = CyberBitMap;
+ break;
+ case "UST (Studio C)":
+ targetBits = StudioCBitMap;
+ break;
+ }
+
+ List writeOut = new List();
+ foreach (BitArray bits in rshwBits)
+ {
+ BigInteger frameByte = 0;
+ for (int i = 0; i < targetBits.Length; i++)
+ {
+ if (Rosetta && CyberRosettaInvertedBits.Contains(targetBits[i]))
+ {
+ if (!bits.Get(targetBits[i])) frameByte += BigInteger.Pow(2, i);
+ }
+ else { if (bits.Get(targetBits[i])) frameByte += BigInteger.Pow(2, i); }
+ }
+ writeOut.Add(frameByte.ToString($"X{(64).ToString()}"));
+ }
+ writeOut[0] = (0).ToString($"X{(64).ToString()}");
+
+ byte[] audioOut = file.audioData;
+ if ((bool)CompressAudioCheckBox.Checked)
+ {
+ if (File.Exists("tmp.mp3")) File.Delete("tmp.mp3");
+ File.WriteAllBytes("tmp.wav", audioOut);
+ Process ffmpegProcess = new Process();
+ ffmpegProcess.StartInfo.FileName = "ffmpeg";
+ ffmpegProcess.StartInfo.Arguments = "-i tmp.wav -c:a mp3 -b:a 128k tmp.mp3";
+ ffmpegProcess.Start();
+ ffmpegProcess.WaitForExit();
+ audioOut = File.ReadAllBytes("tmp.mp3");
+ File.Delete("tmp.wav");
+ File.Delete("tmp.mp3");
+ }
+
+ File.WriteAllText(outFilePath, MakeHeader(Path.GetFileNameWithoutExtension(outFilePath), outputType)+String.Join(",", writeOut.ToArray())+";"+Convert.ToBase64String(audioOut));
+ }
+ MessageBox.Show("Conversion complete!");
+ }
+
+ int RRtoAPSBit(int rrBit) // aps lower drawer starts at 129 instead of 151
+ {
+ int outAPSBit = rrBit;
+ if (rrBit > 150) outAPSBit = rrBit - 22;
+ return outAPSBit;
+ }
+ }
+}
diff --git a/PC2Converter/PC2Converter/RSHWFile.cs b/USTConverter/USTConverter/RSHWFile.cs
similarity index 97%
rename from PC2Converter/PC2Converter/RSHWFile.cs
rename to USTConverter/USTConverter/RSHWFile.cs
index d155ddf..8e09a5f 100644
--- a/PC2Converter/PC2Converter/RSHWFile.cs
+++ b/USTConverter/USTConverter/RSHWFile.cs
@@ -1,4 +1,3 @@
-using System.IO;
using System.Reflection;
using System.Runtime.Serialization.Formatters.Binary;
diff --git a/PC2Converter/PC2Converter/PC2Converter.csproj b/USTConverter/USTConverter/USTConverter.csproj
similarity index 100%
rename from PC2Converter/PC2Converter/PC2Converter.csproj
rename to USTConverter/USTConverter/USTConverter.csproj