commit 7c622bff30a9971df62d7655defde70efaf9b649 Author: personne Date: Thu Mar 6 12:19:35 2025 +0100 depot git diff --git a/README b/README new file mode 100644 index 0000000..e69de29 diff --git a/arduino.ino/arduino/arduino.ino b/arduino.ino/arduino/arduino.ino new file mode 100644 index 0000000..68e5ed4 --- /dev/null +++ b/arduino.ino/arduino/arduino.ino @@ -0,0 +1,69 @@ +#include +#include +#include +#include + +// #define SAMPLE_BUFFER_SIZE 512 +// short sampleBuffer[SAMPLE_BUFFER_SIZE]; +// volatile int samplesRead = 0; +// static const char channels = 1; +// static const int frequency = 16000; + +// Ultrasonic instructions +byte triggerPin = 11; +byte echoPin = 12; + +void setup() { + Serial.begin(9600); + while (!Serial); + + if (!HS300x.begin()) { + Serial.println("Failed to initialize humidity temperature sensor!"); + while (1); + } + // if (!PDM.begin(channels, frequency)) { + // Serial.println("Failed to start PDM!"); + // while (1); + // } + // PDM.onReceive(onPDMdata); + HCSR04.begin(triggerPin, echoPin); +} + +void loop() +{ + // int volume = getVolume(); + float temperature = HS300x.readTemperature(); + Serial.print("Heat: "); + Serial.println(temperature); + + double* distances = HCSR04.measureDistanceCm(); + Serial.print("Distance: "); + Serial.println(distances[0]); + // Serial.print(volume); + delay(2500); +} + +// int getVolume() +// { +// int volume = 0; +// int sum = 0; + +// Serial.print("non"); +// if (samplesRead) { +// Serial.print("yes"); +// for (int i = 0; i < samplesRead; i++) { +// sum += abs(sampleBuffer[i]); +// } +// volume = sum / samplesRead; +// samplesRead = 0; +// } + +// return (volume); +// } + +// void onPDMdata() +// { +// int bytesAvailable = PDM.available(); +// PDM.read(sampleBuffer, bytesAvailable); +// samplesRead = bytesAvailable / 2; +// } \ No newline at end of file diff --git a/assets/barre/barre1.PNG b/assets/barre/barre1.PNG new file mode 100644 index 0000000..43806f3 Binary files /dev/null and b/assets/barre/barre1.PNG differ diff --git a/assets/barre/barre2.PNG b/assets/barre/barre2.PNG new file mode 100644 index 0000000..5a1821b Binary files /dev/null and b/assets/barre/barre2.PNG differ diff --git a/assets/barre/barre3.PNG b/assets/barre/barre3.PNG new file mode 100644 index 0000000..2fdf8fa Binary files /dev/null and b/assets/barre/barre3.PNG differ diff --git a/assets/barre/barre4.PNG b/assets/barre/barre4.PNG new file mode 100644 index 0000000..7d13abe Binary files /dev/null and b/assets/barre/barre4.PNG differ diff --git a/assets/barre/barre5.PNG b/assets/barre/barre5.PNG new file mode 100644 index 0000000..1590532 Binary files /dev/null and b/assets/barre/barre5.PNG differ diff --git a/assets/barre/barre6.PNG b/assets/barre/barre6.PNG new file mode 100644 index 0000000..e1aad39 Binary files /dev/null and b/assets/barre/barre6.PNG differ diff --git a/assets/barre/barre7.PNG b/assets/barre/barre7.PNG new file mode 100644 index 0000000..02ae195 Binary files /dev/null and b/assets/barre/barre7.PNG differ diff --git a/assets/barre/barre8.PNG b/assets/barre/barre8.PNG new file mode 100644 index 0000000..05396d7 Binary files /dev/null and b/assets/barre/barre8.PNG differ diff --git a/assets/barre/barre9.PNG b/assets/barre/barre9.PNG new file mode 100644 index 0000000..f5f2e1f Binary files /dev/null and b/assets/barre/barre9.PNG differ diff --git a/assets/barre/barreMax1.PNG b/assets/barre/barreMax1.PNG new file mode 100644 index 0000000..fc829d6 Binary files /dev/null and b/assets/barre/barreMax1.PNG differ diff --git a/assets/barre/barreMax2.PNG b/assets/barre/barreMax2.PNG new file mode 100644 index 0000000..39ff2e3 Binary files /dev/null and b/assets/barre/barreMax2.PNG differ diff --git a/assets/cybergirl.mtl b/assets/cybergirl.mtl new file mode 100644 index 0000000..7bbbb71 --- /dev/null +++ b/assets/cybergirl.mtl @@ -0,0 +1,9 @@ +# picocad material +newmtl cybergirl_mtl +ka 1.000000 1.000000 1.000000 +kd 1.000000 1.000000 1.000000 +ks 0.000000 0.000000 0.000000 +tr 1.000000 +illum 1 +ns 0.000000 +map_kd cybergirl_tex.png diff --git a/assets/cybergirl.obj b/assets/cybergirl.obj new file mode 100644 index 0000000..535a060 --- /dev/null +++ b/assets/cybergirl.obj @@ -0,0 +1,1115 @@ +# picocad model +mtllib cybergirl.mtl +o cybergirl +v 1.25 -0.25 1 +v 1.25 -0.2498 -0.7504 +v 0 -0.2497 -1.2502 +v -1.25 -0.2498 -0.7504 +v -1.25 -0.25 1 +v 0 -0.25 1.5 +v 1.25 1.5004 0.9998 +v 1.25 1.5 -0.75 +v 0 1.5004 -1.2498 +v -1.25 1.5 -0.75 +v -1.25 1.5004 0.9998 +v 0 1.5015 1.4995 +v 0.75 -0.7499 0.7502 +v 0.75 -0.7501 -0.4986 +v 0 -0.7503 -0.7488 +v -0.75 -0.7501 -0.4986 +v -0.75 -0.7499 0.7502 +v 0 -0.7492 1.0011 +v 1.7504 0.25 -0.75 +v 1.7504 0.25 1 +v 1.7498 0.396 1.2068 +v 1.7497 1.1042 1.2068 +v 1.7495 1.25 1 +v 1.7496 1.25 -0.75 +v 1.7498 1.1043 -0.9566 +v 1.75 0.3958 -0.9566 +v 1.0004 0.25 -0.75 +v 1.0004 0.25 1 +v 1 0.3956 1.2067 +v 1 1.1042 1.2066 +v 0.9996 1.25 1 +v 0.9996 1.25 -0.75 +v 1 1.104 -0.9568 +v 1.0003 0.3958 -0.9568 +v 1.2499 1.0003 -0.9997 +v -0.2499 0.9997 -1.0001 +v -0.2499 0.5 -1 +v 0.2504 0.75 -1 +v 1.2498 0.75 -1 +v 1.2499 0.9997 -0.75 +v -0.2499 0.9997 -0.75 +v -0.2499 0.5004 -0.75 +v 0.2503 0.75 -0.75 +v 1.2498 0.75 -0.75 +v 1.2499 1.0003 1.0003 +v -0.2499 0.9997 0.9999 +v -0.2499 0.5 1 +v 0.2504 0.75 1 +v 1.2498 0.75 1 +v 1.2499 0.9997 1.25 +v -0.2499 0.9997 1.25 +v -0.2499 0.5004 1.25 +v 0.2503 0.75 1.25 +v 1.2498 0.75 1.25 +v 1.5 1.5 -0.75 +v 1.5 1.4999 1.0002 +v 0 1.75 1.7498 +v -1.5 1.4999 1.0002 +v -1.5 1.5 -0.75 +v 0 1.4999 -1.5022 +v 1.5 1.2495 -0.75 +v 1.5 1.2502 0.9999 +v 0 1.2485 1.7502 +v -1.5 1.2502 0.9999 +v -1.5 1.25 -0.75 +v 0 1.2484 -1.4997 +v 0.75 2.2501 -0.5027 +v 0.75 2.2499 0.7491 +v 0 2.251 0.9973 +v -0.75 2.2499 0.7491 +v -0.75 2.2501 -0.5027 +v 0 2.2492 -0.75 +v 1.5 1.25 -0.75 +v 1.5 1.25 1 +v 0 1.25 1.75 +v -1.5 1.25 1 +v -1.5 1.25 -0.75 +v 0 1.25 -1.5 +v 1.5 0.75 -0.75 +v 1.5 0.75 1 +v 0 0.75 1.75 +v -1.5 0.75 1 +v -1.5 -0.25 -0.75 +v 0 0.75 -1.5 +v 1.5 0.25 1 +v 1.5 0.5 -0.75 +v 0 -0.25 -1.5 +v -0.75 0.25 -0.75 +v -1.5 -0.25 1 +v 0 0 1.75 +v -0.25 2.0003 -1.2503 +v -0.5 2 -1.5 +v -1 2 -1.5 +v -1.25 2.0003 -1.2503 +v -1.25 2.0002 -0.7498 +v -1 2 -0.5 +v -0.5 2 -0.5 +v -0.25 2.0002 -0.7498 +v -0.25 2.5 -1.25 +v -0.5 2.5002 -1.5 +v -1 2.5002 -1.5 +v -1.25 2.5 -1.25 +v -1.25 2.5 -0.7501 +v -1 2.5002 -0.5001 +v -0.5 2.5002 -0.5001 +v -0.25 2.5 -0.7501 +v -0.5 1.7501 -1.25 +v -0.5 1.7501 -1.25 +v -1 1.7501 -1.25 +v -1 1.7501 -1.25 +v -1 1.75 -0.7503 +v -1 1.75 -0.7503 +v -0.5 1.75 -0.7503 +v -0.5 1.75 -0.7503 +v -0.5 2.75 -0.75 +v -0.5 2.7502 -0.75 +v -1 2.7502 -0.75 +v -1 2.75 -0.75 +v -1 2.7499 -1.25 +v -1 2.75 -1.25 +v -0.5 2.75 -1.25 +v -0.5 2.7499 -1.25 +v -0.25 2.0003 0.9997 +v -0.5 2 0.75 +v -1 2 0.75 +v -1.25 2.0003 0.9997 +v -1.25 2.0002 1.5002 +v -1 2 1.75 +v -0.5 2 1.75 +v -0.25 2.0002 1.5002 +v -0.25 2.5 1 +v -0.5 2.5002 0.75 +v -1 2.5002 0.75 +v -1.25 2.5 1 +v -1.25 2.5 1.4999 +v -1 2.5002 1.7499 +v -0.5 2.5002 1.7499 +v -0.25 2.5 1.4999 +v -0.5 1.7501 1 +v -0.5 1.7501 1 +v -1 1.7501 1 +v -1 1.7501 1 +v -1 1.75 1.4997 +v -1 1.75 1.4997 +v -0.5 1.75 1.4997 +v -0.5 1.75 1.4997 +v -0.5 2.75 1.5 +v -0.5 2.7502 1.5 +v -1 2.7502 1.5 +v -1 2.75 1.5 +v -1 2.7499 1 +v -1 2.75 1 +v -0.5 2.75 1 +v -0.5 2.7499 1 +v -0.2502 2.25 1.5 +v -0.25 0.75 1.75 +v -0.25 0.75 1.75 +v -0.2502 2.0002 1.5 +v -0.2502 2 -1.25 +v -0.25 0.75 -1.5 +v -0.25 0.75 -1.5 +v -0.2502 2.25 -1.25 +v 0.0002 2.25 1.5 +v -0.0001 0.75 1.75 +v -0.0001 0.75 1.75 +v 0.0002 2.0002 1.5 +v 0.0002 2 -1.25 +v -0.0001 0.75 -1.5 +v -0.0001 0.75 -1.5 +v 0.0002 2.25 -1.25 +v 0.25 0.7502 -1.7499 +v 0 0.9998 -1.7502 +v -0.25 0.9998 -1.7502 +v -0.5 0.7502 -1.7499 +v -0.5 0.4998 -1.7499 +v -0.25 0.2502 -1.7502 +v 0 0.25 -1.75 +v 0.25 0.4998 -1.7499 +v 0.25 0.7502 -1.5001 +v 0 0.9998 -1.4998 +v -0.25 0.9998 -1.4998 +v -0.5 0.7502 -1.5001 +v -0.5 0.4998 -1.5001 +v -0.25 0.2502 -1.4998 +v 0 0.2502 -1.4998 +v 0.25 0.4998 -1.5001 +v 0.25 0.7502 1.75 +v 0 0.9998 1.7498 +v -0.25 0.9998 1.7498 +v -0.5 0.7502 1.75 +v -0.5 0.4998 1.75 +v -0.25 0.2502 1.7498 +v 0 0.25 1.75 +v 0.25 0.4998 1.75 +v 0.25 0.7502 1.9999 +v 0 0.9998 2.0002 +v -0.25 0.9998 2.0002 +v -0.5 0.7502 1.9999 +v -0.5 0.4998 1.9999 +v -0.25 0.2502 2.0002 +v 0 0.2502 2.0002 +v 0.25 0.4998 1.9999 + +vt 0.6563 0.9688 +vt 0.6563 0.9063 +vt 0.5938 0.9063 +vt 0.5938 0.9688 +vt 0.6563 0.9688 +vt 0.6563 0.9063 +vt 0.5938 0.9063 +vt 0.5938 0.9688 +vt 0.6563 0.9688 +vt 0.6563 0.9063 +vt 0.5938 0.9063 +vt 0.5938 0.9688 +vt 0.5938 0.9063 +vt 0.5938 0.9688 +vt 0.6563 0.9688 +vt 0.6563 0.9063 +vt 0.6563 0.9688 +vt 0.6563 0.9063 +vt 0.5938 0.9063 +vt 0.5938 0.9688 +vt 0.5 0.6094 +vt 0.5 0.875 +vt 0.8438 0.875 +vt 0.8438 0.6094 +vt 0.8281 0.625 +vt 0.8438 0.6094 +vt 0.5 0.6094 +vt 0.5 0.625 +vt 0.5938 0.9844 +vt 0.6563 0.9844 +vt 0.6563 0.9219 +vt 0.5938 0.9219 +vt 0.5938 0.9844 +vt 0.6563 0.9844 +vt 0.6563 0.9219 +vt 0.5938 0.9219 +vt 0.5938 0.9844 +vt 0.6563 0.9844 +vt 0.6563 0.9219 +vt 0.5938 0.9219 +vt 0.5938 0.9844 +vt 0.6563 0.9844 +vt 0.6563 0.9219 +vt 0.5938 0.9219 +vt 0.5938 0.9844 +vt 0.6563 0.9844 +vt 0.6563 0.9219 +vt 0.5938 0.9219 +vt 0.5938 0.9844 +vt 0.6563 0.9844 +vt 0.6875 0.9375 +vt 0.6563 0.8906 +vt 0.5938 0.8906 +vt 0.5625 0.9375 +vt 0.4688 0.8125 +vt 0.0313 0.8125 +vt 0 0.8438 +vt 0 0.9688 +vt 0.0313 1 +vt 0.4531 1 +vt 0.5 0.9688 +vt 0.5 0.8594 +vt 0.6875 0.9688 +vt 0.7188 1 +vt 0.7813 1 +vt 0.8125 0.9688 +vt 0.8125 0.9063 +vt 0.7813 0.875 +vt 0.7188 0.875 +vt 0.6875 0.9063 +vt 0.4375 0.7813 +vt 0.4375 0.7188 +vt 0.375 0.7188 +vt 0.375 0.7813 +vt 0.4219 0.7969 +vt 0.4219 0.7344 +vt 0.3594 0.7344 +vt 0.3594 0.7969 +vt 0.2656 0.6719 +vt 0.2031 0.6719 +vt 0.2031 0.7969 +vt 0.2656 0.7969 +vt 0.4063 0.7813 +vt 0.4063 0.7188 +vt 0.3438 0.7188 +vt 0.3438 0.7813 +vt 0.4375 0.7656 +vt 0.4375 0.7031 +vt 0.375 0.7031 +vt 0.375 0.7656 +vt 0.4219 0.7656 +vt 0.4219 0.7031 +vt 0.3594 0.7031 +vt 0.3594 0.7656 +vt 0.2656 0.7188 +vt 0.2031 0.7188 +vt 0.2031 0.8438 +vt 0.2656 0.8438 +vt 0.4375 0.8281 +vt 0.4375 0.7656 +vt 0.375 0.7656 +vt 0.375 0.8281 +vt 0.1563 0.7656 +vt 0.2031 0.7969 +vt 0.25 0.7656 +vt 0.2344 0.7031 +vt 0.1719 0.7031 +vt 0.5469 0.9688 +vt 0.5313 0.9063 +vt 0.4688 0.9063 +vt 0.4531 0.9688 +vt 0.5 1 +vt 0.4688 0.9063 +vt 0.4688 0.9688 +vt 0.5313 0.9688 +vt 0.5313 0.9063 +vt 0.4688 0.9063 +vt 0.4688 0.9688 +vt 0.5313 0.9688 +vt 0.5313 0.9063 +vt 0.4688 0.9063 +vt 0.4688 0.9688 +vt 0.5313 0.9688 +vt 0.5313 0.9063 +vt 0.5313 0.9688 +vt 0.5313 0.9063 +vt 0.4688 0.9063 +vt 0.4688 0.9688 +vt 0.4688 0.9063 +vt 0.4688 0.9688 +vt 0.5313 0.9688 +vt 0.5313 0.9063 +vt 0.4688 0.9063 +vt 0.4531 0.9688 +vt 0.5 1 +vt 0.5469 0.9688 +vt 0.5313 0.9063 +vt 0.2188 0.8125 +vt 0.2656 0.7813 +vt 0.25 0.7188 +vt 0.1875 0.7188 +vt 0.1719 0.7813 +vt 0.4688 0.9063 +vt 0.4688 0.9688 +vt 0.5313 0.9688 +vt 0.5313 0.9063 +vt 0.4688 0.9063 +vt 0.4688 0.9688 +vt 0.5313 0.9688 +vt 0.5313 0.9063 +vt 0.4688 0.9063 +vt 0.4688 0.9688 +vt 0.5313 0.9688 +vt 0.5313 0.9063 +vt 0.5313 0.9688 +vt 0.5313 0.9063 +vt 0.4688 0.9063 +vt 0.4688 0.9688 +vt 0.4688 0.9063 +vt 0.4688 0.9688 +vt 0.5313 0.9688 +vt 0.5313 0.9063 +vt 0.4844 0.3594 +vt 0.5156 0.4219 +vt 0.6563 0.4219 +vt 0.6719 0.3594 +vt 0.6094 0.4531 +vt 0.6094 0.3906 +vt 0.5469 0.3906 +vt 0.5469 0.4531 +vt 1 0.2031 +vt 1 0.1406 +vt -0.0156 0.1406 +vt -0.0156 0.2031 +vt 0.1563 0.1875 +vt 0.1563 0.25 +vt 0.5 0.25 +vt 0.5 0.1875 +vt 0.7656 0.2656 +vt 0.7656 0.3906 +vt 0.8281 0.3906 +vt 0.8281 0.2656 +vt 0.9688 0.4531 +vt 0.9844 0.2813 +vt 0.2969 0.2813 +vt 0.2969 0.4688 +vt 0.7969 0.4688 +vt 0.7813 0.3594 +vt 0.2344 0.2656 +vt 0.2188 0.4688 +vt 0.2969 0.2813 +vt 0.7344 0.3594 +vt 0.3594 0.1094 +vt 0.2344 0.0938 +vt 0.875 0.9531 +vt 0.9375 0.9531 +vt 0.9375 0.8906 +vt 0.875 0.8906 +vt 1.0156 0.4688 +vt 1 0.0625 +vt 0.2188 0.0625 +vt 0.2188 0.4688 +vt 0.25 0.4688 +vt 0.9844 0.4688 +vt 0.9531 0.0781 +vt 0.2813 0.1406 +vt 0.4063 0.1875 +vt 0.6875 0.1875 +vt 0.6875 0.0625 +vt 0.4063 0.0625 +vt 0.3281 0.4688 +vt 0.9688 0.4688 +vt 0.9688 0.1406 +vt 0.3906 0.1563 +vt 0.3281 0.1406 +vt 0.2813 0.1563 +vt 0.5938 0.9844 +vt 0.6563 0.9844 +vt 0.6875 0.9375 +vt 0.6563 0.8906 +vt 0.5938 0.8906 +vt 0.5625 0.9375 +vt 1.0156 0.1719 +vt 1 0.0781 +vt 0.6094 0.0781 +vt 0.5781 0.1563 +vt 0.4063 0.4063 +vt 0.4063 0.4688 +vt 0.9063 0.4688 +vt 0.875 0.4063 +vt 1 0.2188 +vt 1 0.0625 +vt 0 0.0781 +vt 0 0.2188 +vt 0.6875 0.0938 +vt 0.5625 0.2188 +vt 0.9688 0.2031 +vt 0.9531 0.0781 +vt 0.7031 0.2656 +vt 0.7031 0.3281 +vt 0.8906 0.3281 +vt 0.8906 0.2656 +vt 0.8594 0.3594 +vt 0.8594 0.2969 +vt 0.7344 0.2969 +vt 0.7344 0.3594 +vt 0.5938 1 +vt 0.6563 1 +vt 0.6563 0.9375 +vt 0.5938 0.9375 +vt 0.5938 1 +vt 0.6563 1 +vt 0.6563 0.9375 +vt 0.5938 0.9375 +vt 0.75 0.4688 +vt 0.7188 0.2656 +vt 0.2344 0.2344 +vt 0.2344 0.4688 +vt 0.4063 0.2031 +vt 0.4063 0.4063 +vt 0.7656 0.4063 +vt 0.7656 0.2031 +vt 0.5938 1 +vt 0.6563 1 +vt 0.6875 0.9375 +vt 0.6563 0.875 +vt 0.5938 0.875 +vt 0.5625 0.9375 +vt 0.8125 0.3594 +vt 0.8125 0.2969 +vt 0.75 0.2969 +vt 0.75 0.3594 +vt 0.9063 0.9375 +vt 0.9063 0.875 +vt 0.8438 0.875 +vt 0.8438 0.9375 +vt 0.9063 0.9531 +vt 0.9063 0.8906 +vt 0.8438 0.8906 +vt 0.8438 0.9531 +vt 0.3906 0.2344 +vt 0.3906 0.1719 +vt 0.3281 0.1094 +vt 0.3281 0.2344 +vt 0.9375 0.9531 +vt 0.9375 0.8906 +vt 0.875 0.8906 +vt 0.875 0.9531 +vt 0.8281 0.375 +vt 0.8281 0.3125 +vt 0.7656 0.3125 +vt 0.7656 0.375 +vt 0.7031 0.4219 +vt 0.7031 0.2656 +vt 0.6406 0.2656 +vt 0.6406 0.4063 +vt 0.9375 0.9063 +vt 0.9375 0.8438 +vt 0.875 0.8438 +vt 0.875 0.9063 +vt 0.8594 0.9688 +vt 0.9219 0.9688 +vt 0.9219 0.9063 +vt 0.8594 0.9063 +vt 0.875 0.9375 +vt 0.9375 0.9375 +vt 0.9375 0.875 +vt 0.875 0.875 +vt 0.8906 0.9375 +vt 0.9531 0.9375 +vt 0.9531 0.875 +vt 0.8906 0.875 +vt 0.875 0.9219 +vt 0.9375 0.9219 +vt 0.9375 0.8594 +vt 0.875 0.8594 +vt 0.875 1 +vt 0.9375 1 +vt 0.9375 0.9375 +vt 0.875 0.9375 +vt 0.7188 1 +vt 0.7813 1 +vt 0.7813 0.9375 +vt 0.7188 0.9375 +vt 0.7188 1 +vt 0.7813 1 +vt 0.7813 0.9375 +vt 0.7188 0.9375 +vt 0.9063 0.8906 +vt 0.9688 0.8906 +vt 0.9375 0.8438 +vt 0.9063 0.8281 +vt 0.9063 0.9063 +vt 0.9688 0.9063 +vt 1 0.875 +vt 1 0.8125 +vt 0.9688 0.7813 +vt 0.9063 0.7813 +vt 0.875 0.8125 +vt 0.875 0.875 +vt 0.875 0.8906 +vt 0.9375 0.8906 +vt 0.9375 0.8281 +vt 0.875 0.8281 +vt 0.875 0.9375 +vt 0.9375 0.9375 +vt 0.9375 0.875 +vt 0.875 0.875 +vt 0.8906 0.8906 +vt 0.9531 0.8906 +vt 0.9531 0.8281 +vt 0.8906 0.8281 +vt 0.75 0.3594 +vt 0.8125 0.3594 +vt 0.8125 0.2969 +vt 0.75 0.2969 +vt 0.8438 0.9531 +vt 0.9063 0.9531 +vt 0.9063 0.8906 +vt 0.8438 0.8906 +vt 0.8906 0.9219 +vt 0.9531 0.9219 +vt 0.9531 0.8594 +vt 0.8906 0.8594 +vt 0.75 0.375 +vt 0.8125 0.375 +vt 0.8125 0.3125 +vt 0.75 0.3125 +vt 0.875 0.9063 +vt 0.9375 0.9063 +vt 0.9375 0.8438 +vt 0.875 0.8438 +vt 0.3281 0.2188 +vt 0.3594 0.25 +vt 0.4219 0.25 +vt 0.4531 0.2188 +vt 0.4531 0.1563 +vt 0.4219 0.125 +vt 0.3594 0.125 +vt 0.3281 0.1563 +vt 0.9531 0.9219 +vt 0.9531 0.8594 +vt 0.8906 0.8594 +vt 0.8906 0.9219 +vt 0.9531 0.9219 +vt 0.9531 0.8594 +vt 0.8906 0.8594 +vt 0.8906 0.9219 +vt 0.9375 0.9531 +vt 0.9375 0.8906 +vt 0.875 0.8906 +vt 0.875 0.9531 +vt 0.9219 0.9375 +vt 0.9219 0.875 +vt 0.8594 0.875 +vt 0.8594 0.9375 +vt 0.625 0.2813 +vt 0.625 0.3438 +vt 0.6875 0.3438 +vt 0.6875 0.2813 +vt 0.7031 0.4375 +vt 0.7031 0.375 +vt 0.6406 0.375 +vt 0.6406 0.4375 +vt 0.9375 0.9375 +vt 0.9375 0.875 +vt 0.875 0.875 +vt 0.875 0.9375 +vt 0.8281 0.3438 +vt 0.8281 0.2813 +vt 0.7656 0.2813 +vt 0.7656 0.3438 +vt 0.7188 1 +vt 0.7813 1 +vt 0.7813 0.9375 +vt 0.7188 0.9375 +vt 0.7188 1 +vt 0.7813 1 +vt 0.7813 0.9375 +vt 0.7188 0.9375 +vt 0.8438 0.9844 +vt 0.9063 0.9844 +vt 0.9063 0.9219 +vt 0.8438 0.9219 +vt 0.4844 0.1875 +vt 0.5469 0.1875 +vt 0.5469 0.125 +vt 0.4844 0.125 +vt 0.125 0.4688 +vt 0.1875 0.4688 +vt 0.1875 0.4063 +vt 0.125 0.4063 +vt 0.5938 0.1563 +vt 0.6563 0.1563 +vt 0.6563 0.0938 +vt 0.5938 0.0938 +vt 0.9063 0.9531 +vt 0.9688 0.9531 +vt 0.9688 0.8906 +vt 0.9063 0.8906 +vt 0.9063 0.9531 +vt 0.9688 0.9531 +vt 0.9688 0.8906 +vt 0.9063 0.8906 +vt 0.9063 0.9844 +vt 0.9688 0.9844 +vt 1 0.9531 +vt 1 0.8906 +vt 0.9688 0.8594 +vt 0.9063 0.8594 +vt 0.875 0.8906 +vt 0.875 0.9531 +vt 0.8906 0.9063 +vt 0.9531 0.9063 +vt 0.9531 0.8438 +vt 0.8906 0.8438 +vt 0.625 0.375 +vt 0.6875 0.375 +vt 0.6875 0.3125 +vt 0.625 0.3125 +vt 0.8906 0.875 +vt 0.9531 0.875 +vt 0.9531 0.8125 +vt 0.8906 0.8125 +vt 0.375 0.25 +vt 0.4375 0.25 +vt 0.4375 0.1875 +vt 0.375 0.1875 +vt 0.5469 0.4531 +vt 0.6094 0.4531 +vt 0.6094 0.3906 +vt 0.5469 0.3906 +vt 0.8594 0.9219 +vt 0.9219 0.9219 +vt 0.9219 0.8594 +vt 0.8594 0.8594 +vt 0.0313 0.4063 +vt 0.0938 0.4063 +vt 0.0938 0.3438 +vt 0.0313 0.3438 +vt 0.5781 0.4531 +vt 0.5781 0.3906 +vt 0.5156 0.3906 +vt 0.5156 0.4531 +vt 0.7344 0.3594 +vt 0.7656 0.3906 +vt 0.8281 0.3906 +vt 0.8594 0.3594 +vt 0.8594 0.2969 +vt 0.8281 0.2656 +vt 0.7656 0.2656 +vt 0.7344 0.2969 +vt 0.8125 0.5156 +vt 0.8125 0.4844 +vt 0.5 0.4844 +vt 0.5 0.5156 +vt 0.7813 0.9688 +vt 0.7813 0.9063 +vt 0.7188 0.9063 +vt 0.7188 0.9688 +vt 0.7813 0.9688 +vt 0.7813 0.9063 +vt 0.7188 0.9063 +vt 0.7188 0.9688 +vt 0.7813 0.9688 +vt 0.7813 0.9063 +vt 0.7188 0.9063 +vt 0.7188 0.9688 +vt 0.7813 0.9688 +vt 0.7813 0.9063 +vt 0.7188 0.9063 +vt 0.7188 0.9688 +vt 0.7813 0.9688 +vt 0.7813 0.9063 +vt 0.7188 0.9063 +vt 0.7188 0.9688 +vt 0.8438 0.5156 +vt 0.8438 0.4844 +vt 0.5 0.4844 +vt 0.5 0.5156 +vt 0.7969 0.5156 +vt 0.7969 0.4844 +vt 0.5 0.4844 +vt 0.5 0.5156 +vt 0.0781 0.6406 +vt 0.125 0.6406 +vt 0.1719 0.5938 +vt 0.1719 0.5625 +vt 0.125 0.5 +vt 0.0781 0.5 +vt 0.0313 0.5625 +vt 0.0313 0.5938 +vt 0.6875 0.9688 +vt 0.7188 1 +vt 0.7813 1 +vt 0.8125 0.9688 +vt 0.8125 0.9063 +vt 0.7813 0.875 +vt 0.7188 0.875 +vt 0.6875 0.9063 +vt 0.4219 0.6406 +vt 0.4219 0.5781 +vt 0.3594 0.5781 +vt 0.3594 0.6406 +vt 0.4063 0.625 +vt 0.4063 0.5625 +vt 0.3438 0.5625 +vt 0.3438 0.625 +vt 0.4219 0.6406 +vt 0.4219 0.5781 +vt 0.3594 0.5781 +vt 0.3594 0.6406 +vt 0.3906 0.6563 +vt 0.3906 0.5938 +vt 0.3281 0.5938 +vt 0.3281 0.6563 +vt 0.4375 0.6719 +vt 0.4375 0.6094 +vt 0.375 0.6094 +vt 0.375 0.6719 +vt 0.3906 0.6563 +vt 0.3906 0.5938 +vt 0.3281 0.5938 +vt 0.3281 0.6563 +vt 0.4063 0.6719 +vt 0.4063 0.6094 +vt 0.3438 0.6094 +vt 0.3438 0.6719 +vt 0.3906 0.6406 +vt 0.3906 0.5781 +vt 0.3281 0.5781 +vt 0.3281 0.6406 +vt 0.7188 1 +vt 0.7813 1 +vt 0.8125 0.9688 +vt 0.8125 0.9063 +vt 0.7813 0.875 +vt 0.7188 0.875 +vt 0.6875 0.9063 +vt 0.6875 0.9688 +vt 0.0156 0.6094 +vt 0.0781 0.6563 +vt 0.1094 0.6563 +vt 0.1719 0.5938 +vt 0.1719 0.5625 +vt 0.125 0.5 +vt 0.0625 0.5 +vt 0.0156 0.5469 +vt 0.3906 0.625 +vt 0.3906 0.5625 +vt 0.3281 0.5625 +vt 0.3281 0.625 +vt 0.3906 0.625 +vt 0.3906 0.5625 +vt 0.3281 0.5625 +vt 0.3281 0.625 +vt 0.4219 0.6094 +vt 0.4219 0.5469 +vt 0.3594 0.5469 +vt 0.3594 0.6094 +vt 0.4063 0.6406 +vt 0.4063 0.5781 +vt 0.3438 0.5781 +vt 0.3438 0.6406 +vt 0.4219 0.6563 +vt 0.4219 0.5938 +vt 0.3594 0.5938 +vt 0.3594 0.6563 +vt 0.3438 0.6406 +vt 0.3438 0.5781 +vt 0.2813 0.5781 +vt 0.2813 0.6406 +vt 0.3906 0.6563 +vt 0.3906 0.5938 +vt 0.3281 0.5938 +vt 0.3281 0.6563 +vt 0.375 0.625 +vt 0.375 0.5625 +vt 0.3125 0.5625 +vt 0.3125 0.625 + +vn 0.3713 0.0002 0.9285 +vn -0.3713 0.0002 0.9285 +vn -1 0 0 +vn -0.3712 0.0002 -0.9286 +vn 0.3714 0.0002 -0.9285 +vn 1 0 0 +vn 0.707 -0.7072 -0 +vn 0.248 -0.6217 0.7429 +vn -0.2296 -0.6888 0.6877 +vn -0.7074 -0.7069 -0 +vn -0.2483 -0.6202 -0.7441 +vn 0.2296 -0.688 -0.6884 +vn -0.0009 -1 -0.0002 +vn 1 0.0027 0 +vn -1 -0.0003 -0.0003 +vn 0 -1 0 +vn 0 -0.8169 -0.5768 +vn -0.0001 0 -1 +vn -0.0001 0.8173 -0.5763 +vn 0 1 0 +vn 0 0.8172 0.5764 +vn 0.0002 0 1 +vn 0.0001 -0.817 0.5767 +vn 0.0002 0.0011 1 +vn 0 0 -1 +vn -1 0 0 +vn 0.447 -0.8945 -0.0015 +vn 0 -1 0 +vn 1 -0.0004 0 +vn -0.0004 1 -0.0024 +vn 0.0002 0.0011 1 +vn 0 0 -1 +vn -1 0 0 +vn 0.447 -0.8945 -0.0015 +vn 0 -1 0 +vn 1 -0.0004 0 +vn -0.0004 1 -0.0024 +vn 0.4469 -0.0011 -0.8946 +vn -0.4471 0.0007 -0.8945 +vn -1 0 0 +vn -0.4471 -0.0089 0.8945 +vn 0.4483 -0.0089 0.8939 +vn 1 0 0 +vn 0.7072 0.707 -0 +vn 0.2662 0.5347 -0.802 +vn -0.1815 0.8186 -0.545 +vn -0.7071 0.7071 -0 +vn -0.2649 0.5304 0.8053 +vn 0.2259 0.6902 0.6875 +vn -0.0012 1 -0.0002 +vn 0 1 0 +vn 0.4472 0 -0.8944 +vn -0.4472 0 -0.8944 +vn -1 0 0 +vn -0.4472 0 0.8944 +vn 0.4472 0 0.8944 +vn 0.4472 0 0.8944 +vn -0.7071 0 0.7071 +vn 0.5547 -0.832 0 +vn -0.4472 0 -0.8944 +vn 0.4472 0 -0.8944 +vn 0.0938 -0.9856 0.1408 +vn 0.7067 0.0004 0.7075 +vn 0 0 1 +vn -0.7067 0 0.7075 +vn -1 0 0 +vn -0.7068 0.0004 -0.7074 +vn 0 0.0002 -1 +vn 0.7068 0.0001 -0.7074 +vn 1 0 0 +vn 0.5773 -0.5775 0.5773 +vn 0 -0.7072 0.707 +vn -0.5773 -0.5775 0.5772 +vn -0.7074 -0.7068 0.0001 +vn -0.5771 -0.5778 -0.5771 +vn 0 -0.7076 -0.7067 +vn 0.5771 -0.5778 -0.5771 +vn 0.7074 -0.7068 0.0001 +vn 0 -1 0.0002 +vn 0.5776 0.5774 -0.5771 +vn 0 0.707 -0.7072 +vn -0.5778 0.577 -0.5773 +vn -0.7071 0.7071 0.0001 +vn -0.5774 0.5777 0.577 +vn 0 0.7074 0.7068 +vn 0.5775 0.5775 0.577 +vn 0.707 0.7072 0.0001 +vn 0.0004 1 0.0002 +vn 0.7067 0.0004 0.7075 +vn 0 0 1 +vn -0.7067 0 0.7075 +vn -1 0 0 +vn -0.7068 0.0004 -0.7074 +vn 0 0.0002 -1 +vn 0.7068 0.0001 -0.7074 +vn 1 0 0 +vn 0.5773 -0.5775 0.5773 +vn 0 -0.7072 0.707 +vn -0.5773 -0.5775 0.5772 +vn -0.7074 -0.7068 0.0001 +vn -0.5771 -0.5778 -0.5771 +vn 0 -0.7076 -0.7067 +vn 0.5771 -0.5778 -0.5771 +vn 0.7074 -0.7068 0.0001 +vn 0 -1 0.0002 +vn 0.5776 0.5774 -0.5771 +vn 0 0.707 -0.7072 +vn -0.5778 0.577 -0.5773 +vn -0.7071 0.7071 0.0001 +vn -0.5774 0.5777 0.577 +vn 0 0.7074 0.7068 +vn 0.5775 0.5775 0.577 +vn 0.707 0.7072 0.0001 +vn 0.0004 1 0.0002 +vn 0 0.1644 -0.9864 +vn 0 0.1644 -0.9864 +vn 0 -0.1961 0.9806 +vn 0 -1 -0 +vn 0 -0.1961 -0.9806 +vn 0 -0.1961 -0.9806 +vn 0 0.1644 0.9864 +vn 0 1 0 +vn 0.0012 0 1 +vn 0.0012 0 -1 +vn 0.7065 0.7077 0 +vn 0 1 0 +vn -0.7065 0.7077 0 +vn -1 0 0 +vn -0.7065 -0.7077 0 +vn -0.0009 -1 0 +vn 0.7068 -0.7074 -0.0006 +vn 1 0 0 +vn 0.0008 0 1 +vn 0.0012 0 -1 +vn 0.7065 0.7077 0 +vn 0 1 0 +vn -0.7065 0.7077 0 +vn -1 0 0 +vn -0.7065 -0.7077 0 +vn -0.0009 -1 0 +vn 0.7068 -0.7074 -0.0006 +vn 1 0 0 + +usemtl cybergirl_mtl +s off +f 3/4/1 9/3/1 8/2/1 2/1/1 +f 4/8/2 10/7/2 9/6/2 3/5/2 +f 5/12/3 11/11/3 10/10/3 4/9/3 +f 11/16/4 5/15/4 6/14/4 12/13/4 +f 1/20/5 7/19/5 12/18/5 6/17/5 +f 2/24/6 8/23/6 7/22/6 1/21/6 +f 14/28/7 2/27/7 1/26/7 13/25/7 +f 15/32/8 3/31/8 2/30/8 14/29/8 +f 16/36/9 4/35/9 3/34/9 15/33/9 +f 17/40/10 5/39/10 4/38/10 16/37/10 +f 18/44/11 6/43/11 5/42/11 17/41/11 +f 13/48/12 1/47/12 6/46/12 18/45/12 +f 18/54/13 17/53/13 16/52/13 15/51/13 14/50/13 13/49/13 +f 26/62/14 25/61/14 24/60/14 23/59/14 22/58/14 21/57/14 20/56/14 19/55/14 +f 27/70/15 28/69/15 29/68/15 30/67/15 31/66/15 32/65/15 33/64/15 34/63/15 +f 20/74/16 28/73/16 27/72/16 19/71/16 +f 21/78/17 29/77/17 28/76/17 20/75/17 +f 22/82/18 30/81/18 29/80/18 21/79/18 +f 23/86/19 31/85/19 30/84/19 22/83/19 +f 24/90/20 32/89/20 31/88/20 23/87/20 +f 25/94/21 33/93/21 32/92/21 24/91/21 +f 26/98/22 34/97/22 33/96/22 25/95/22 +f 19/102/23 27/101/23 34/100/23 26/99/23 +f 39/107/24 38/106/24 37/105/24 36/104/24 35/103/24 +f 42/112/25 43/111/25 44/110/25 40/109/25 41/108/25 +f 37/116/26 42/115/26 41/114/26 36/113/26 +f 38/120/27 43/119/27 42/118/27 37/117/27 +f 39/124/28 44/123/28 43/122/28 38/121/28 +f 44/128/29 39/127/29 35/126/29 40/125/29 +f 36/132/30 41/131/30 40/130/30 35/129/30 +f 49/137/31 48/136/31 47/135/31 46/134/31 45/133/31 +f 52/142/32 53/141/32 54/140/32 50/139/32 51/138/32 +f 47/146/33 52/145/33 51/144/33 46/143/33 +f 48/150/34 53/149/34 52/148/34 47/147/34 +f 49/154/35 54/153/35 53/152/35 48/151/35 +f 54/158/36 49/157/36 45/156/36 50/155/36 +f 46/162/37 51/161/37 50/160/37 45/159/37 +f 57/166/38 63/165/38 62/164/38 56/163/38 +f 58/170/39 64/169/39 63/168/39 57/167/39 +f 59/174/40 65/173/40 64/172/40 58/171/40 +f 65/178/41 59/177/41 60/176/41 66/175/41 +f 55/182/42 61/181/42 66/180/42 60/179/42 +f 56/186/43 62/185/43 61/184/43 55/183/43 +f 68/190/44 56/189/44 55/188/44 67/187/44 +f 69/194/45 57/193/45 56/192/45 68/191/45 +f 70/198/46 58/197/46 57/196/46 69/195/46 +f 71/202/47 59/201/47 58/200/47 70/199/47 +f 72/206/48 60/205/48 59/204/48 71/203/48 +f 67/210/49 55/209/49 60/208/49 72/207/49 +f 72/216/50 71/215/50 70/214/50 69/213/50 68/212/50 67/211/50 +f 78/222/51 77/221/51 76/220/51 75/219/51 74/218/51 73/217/51 +f 75/226/52 81/225/52 80/224/52 74/223/52 +f 76/230/53 82/229/53 81/228/53 75/227/53 +f 77/234/54 83/233/54 82/232/54 76/231/54 +f 83/238/55 77/237/55 78/236/55 84/235/55 +f 73/242/56 79/241/56 84/240/56 78/239/56 +f 87/246/57 84/245/57 79/244/57 86/243/57 +f 88/250/58 83/249/58 84/248/58 87/247/58 +f 89/254/59 82/253/59 83/252/59 88/251/59 +f 90/258/60 81/257/60 82/256/60 89/255/60 +f 85/262/61 80/261/61 81/260/61 90/259/61 +f 90/268/62 89/267/62 88/266/62 87/265/62 86/264/62 85/263/62 +f 92/272/63 100/271/63 99/270/63 91/269/63 +f 93/276/64 101/275/64 100/274/64 92/273/64 +f 94/280/65 102/279/65 101/278/65 93/277/65 +f 95/284/66 103/283/66 102/282/66 94/281/66 +f 96/288/67 104/287/67 103/286/67 95/285/67 +f 97/292/68 105/291/68 104/290/68 96/289/68 +f 98/296/69 106/295/69 105/294/69 97/293/69 +f 91/300/70 99/299/70 106/298/70 98/297/70 +f 108/304/71 92/303/71 91/302/71 107/301/71 +f 109/308/72 93/307/72 92/306/72 108/305/72 +f 110/312/73 94/311/73 93/310/73 109/309/73 +f 111/316/74 95/315/74 94/314/74 110/313/74 +f 112/320/75 96/319/75 95/318/75 111/317/75 +f 113/324/76 97/323/76 96/322/76 112/321/76 +f 114/328/77 98/327/77 97/326/77 113/325/77 +f 107/332/78 91/331/78 98/330/78 114/329/78 +f 114/340/79 113/339/79 112/338/79 111/337/79 110/336/79 109/335/79 108/334/79 107/333/79 +f 116/344/80 105/343/80 106/342/80 115/341/80 +f 117/348/81 104/347/81 105/346/81 116/345/81 +f 118/352/82 103/351/82 104/350/82 117/349/82 +f 119/356/83 102/355/83 103/354/83 118/353/83 +f 120/360/84 101/359/84 102/358/84 119/357/84 +f 121/364/85 100/363/85 101/362/85 120/361/85 +f 122/368/86 99/367/86 100/366/86 121/365/86 +f 115/372/87 106/371/87 99/370/87 122/369/87 +f 122/380/88 121/379/88 120/378/88 119/377/88 118/376/88 117/375/88 116/374/88 115/373/88 +f 124/384/89 132/383/89 131/382/89 123/381/89 +f 125/388/90 133/387/90 132/386/90 124/385/90 +f 126/392/91 134/391/91 133/390/91 125/389/91 +f 127/396/92 135/395/92 134/394/92 126/393/92 +f 128/400/93 136/399/93 135/398/93 127/397/93 +f 129/404/94 137/403/94 136/402/94 128/401/94 +f 130/408/95 138/407/95 137/406/95 129/405/95 +f 123/412/96 131/411/96 138/410/96 130/409/96 +f 140/416/97 124/415/97 123/414/97 139/413/97 +f 141/420/98 125/419/98 124/418/98 140/417/98 +f 142/424/99 126/423/99 125/422/99 141/421/99 +f 143/428/100 127/427/100 126/426/100 142/425/100 +f 144/432/101 128/431/101 127/430/101 143/429/101 +f 145/436/102 129/435/102 128/434/102 144/433/102 +f 146/440/103 130/439/103 129/438/103 145/437/103 +f 139/444/104 123/443/104 130/442/104 146/441/104 +f 146/452/105 145/451/105 144/450/105 143/449/105 142/448/105 141/447/105 140/446/105 139/445/105 +f 148/456/106 137/455/106 138/454/106 147/453/106 +f 149/460/107 136/459/107 137/458/107 148/457/107 +f 150/464/108 135/463/108 136/462/108 149/461/108 +f 151/468/109 134/467/109 135/466/109 150/465/109 +f 152/472/110 133/471/110 134/470/110 151/469/110 +f 153/476/111 132/475/111 133/474/111 152/473/111 +f 154/480/112 131/479/112 132/478/112 153/477/112 +f 147/484/113 138/483/113 131/482/113 154/481/113 +f 154/492/114 153/491/114 152/490/114 151/489/114 150/488/114 149/487/114 148/486/114 147/485/114 +f 156/496/115 164/495/115 163/494/115 155/493/115 +f 157/500/116 165/499/116 164/498/116 156/497/116 +f 158/504/117 166/503/117 165/502/117 157/501/117 +f 159/508/118 167/507/118 166/506/118 158/505/118 +f 160/512/119 168/511/119 167/510/119 159/509/119 +f 161/516/120 169/515/120 168/514/120 160/513/120 +f 162/520/121 170/519/121 169/518/121 161/517/121 +f 155/524/122 163/523/122 170/522/122 162/521/122 +f 178/532/123 177/531/123 176/530/123 175/529/123 174/528/123 173/527/123 172/526/123 171/525/123 +f 179/540/124 180/539/124 181/538/124 182/537/124 183/536/124 184/535/124 185/534/124 186/533/124 +f 172/544/125 180/543/125 179/542/125 171/541/125 +f 173/548/126 181/547/126 180/546/126 172/545/126 +f 174/552/127 182/551/127 181/550/127 173/549/127 +f 175/556/128 183/555/128 182/554/128 174/553/128 +f 176/560/129 184/559/129 183/558/129 175/557/129 +f 177/564/130 185/563/130 184/562/130 176/561/130 +f 178/568/131 186/567/131 185/566/131 177/565/131 +f 171/572/132 179/571/132 186/570/132 178/569/132 +f 194/580/133 193/579/133 192/578/133 191/577/133 190/576/133 189/575/133 188/574/133 187/573/133 +f 195/588/134 196/587/134 197/586/134 198/585/134 199/584/134 200/583/134 201/582/134 202/581/134 +f 188/592/135 196/591/135 195/590/135 187/589/135 +f 189/596/136 197/595/136 196/594/136 188/593/136 +f 190/600/137 198/599/137 197/598/137 189/597/137 +f 191/604/138 199/603/138 198/602/138 190/601/138 +f 192/608/139 200/607/139 199/606/139 191/605/139 +f 193/612/140 201/611/140 200/610/140 192/609/140 +f 194/616/141 202/615/141 201/614/141 193/613/141 +f 187/620/142 195/619/142 202/618/142 194/617/142 + diff --git a/assets/cybergirl_3.gif b/assets/cybergirl_3.gif new file mode 100644 index 0000000..63c08e5 Binary files /dev/null and b/assets/cybergirl_3.gif differ diff --git a/assets/cybergirl_anim/((1.PNG b/assets/cybergirl_anim/((1.PNG new file mode 100644 index 0000000..12807f2 Binary files /dev/null and b/assets/cybergirl_anim/((1.PNG differ diff --git a/assets/cybergirl_anim/((2.PNG b/assets/cybergirl_anim/((2.PNG new file mode 100644 index 0000000..2b27b1d Binary files /dev/null and b/assets/cybergirl_anim/((2.PNG differ diff --git a/assets/cybergirl_anim/((3.PNG b/assets/cybergirl_anim/((3.PNG new file mode 100644 index 0000000..877fc12 Binary files /dev/null and b/assets/cybergirl_anim/((3.PNG differ diff --git a/assets/cybergirl_anim/^^1.PNG b/assets/cybergirl_anim/^^1.PNG new file mode 100644 index 0000000..13b54cb Binary files /dev/null and b/assets/cybergirl_anim/^^1.PNG differ diff --git a/assets/cybergirl_anim/^^2.PNG b/assets/cybergirl_anim/^^2.PNG new file mode 100644 index 0000000..510b362 Binary files /dev/null and b/assets/cybergirl_anim/^^2.PNG differ diff --git a/assets/cybergirl_anim/^^3.PNG b/assets/cybergirl_anim/^^3.PNG new file mode 100644 index 0000000..41655cd Binary files /dev/null and b/assets/cybergirl_anim/^^3.PNG differ diff --git a/assets/cybergirl_anim/bombe1.PNG b/assets/cybergirl_anim/bombe1.PNG new file mode 100644 index 0000000..e9dcfc5 Binary files /dev/null and b/assets/cybergirl_anim/bombe1.PNG differ diff --git a/assets/cybergirl_anim/bombe2.PNG b/assets/cybergirl_anim/bombe2.PNG new file mode 100644 index 0000000..82b9467 Binary files /dev/null and b/assets/cybergirl_anim/bombe2.PNG differ diff --git a/assets/cybergirl_anim/bombe3.PNG b/assets/cybergirl_anim/bombe3.PNG new file mode 100644 index 0000000..07a6698 Binary files /dev/null and b/assets/cybergirl_anim/bombe3.PNG differ diff --git a/assets/cybergirl_anim/etoile1.PNG b/assets/cybergirl_anim/etoile1.PNG new file mode 100644 index 0000000..c26840a Binary files /dev/null and b/assets/cybergirl_anim/etoile1.PNG differ diff --git a/assets/cybergirl_anim/etoile2.PNG b/assets/cybergirl_anim/etoile2.PNG new file mode 100644 index 0000000..52e870e Binary files /dev/null and b/assets/cybergirl_anim/etoile2.PNG differ diff --git a/assets/cybergirl_anim/grr1.PNG b/assets/cybergirl_anim/grr1.PNG new file mode 100644 index 0000000..03a1a95 Binary files /dev/null and b/assets/cybergirl_anim/grr1.PNG differ diff --git a/assets/cybergirl_anim/grr2.PNG b/assets/cybergirl_anim/grr2.PNG new file mode 100644 index 0000000..54f4849 Binary files /dev/null and b/assets/cybergirl_anim/grr2.PNG differ diff --git a/assets/cybergirl_anim/grr3.PNG b/assets/cybergirl_anim/grr3.PNG new file mode 100644 index 0000000..4f733f7 Binary files /dev/null and b/assets/cybergirl_anim/grr3.PNG differ diff --git a/assets/cybergirl_anim/png/((1.png b/assets/cybergirl_anim/png/((1.png new file mode 100644 index 0000000..09e73e2 Binary files /dev/null and b/assets/cybergirl_anim/png/((1.png differ diff --git a/assets/cybergirl_anim/png/((2.png b/assets/cybergirl_anim/png/((2.png new file mode 100644 index 0000000..0bcd92b Binary files /dev/null and b/assets/cybergirl_anim/png/((2.png differ diff --git a/assets/cybergirl_anim/png/((3.png b/assets/cybergirl_anim/png/((3.png new file mode 100644 index 0000000..45b2054 Binary files /dev/null and b/assets/cybergirl_anim/png/((3.png differ diff --git a/assets/cybergirl_anim/png/^^1.png b/assets/cybergirl_anim/png/^^1.png new file mode 100644 index 0000000..3e35dc0 Binary files /dev/null and b/assets/cybergirl_anim/png/^^1.png differ diff --git a/assets/cybergirl_anim/png/^^2.png b/assets/cybergirl_anim/png/^^2.png new file mode 100644 index 0000000..f5db1e2 Binary files /dev/null and b/assets/cybergirl_anim/png/^^2.png differ diff --git a/assets/cybergirl_anim/png/^^3.png b/assets/cybergirl_anim/png/^^3.png new file mode 100644 index 0000000..8bea68a Binary files /dev/null and b/assets/cybergirl_anim/png/^^3.png differ diff --git a/assets/cybergirl_anim/png/bombe1.png b/assets/cybergirl_anim/png/bombe1.png new file mode 100644 index 0000000..74fd5ea Binary files /dev/null and b/assets/cybergirl_anim/png/bombe1.png differ diff --git a/assets/cybergirl_anim/png/bombe2.png b/assets/cybergirl_anim/png/bombe2.png new file mode 100644 index 0000000..e443b09 Binary files /dev/null and b/assets/cybergirl_anim/png/bombe2.png differ diff --git a/assets/cybergirl_anim/png/bombe3.png b/assets/cybergirl_anim/png/bombe3.png new file mode 100644 index 0000000..df02222 Binary files /dev/null and b/assets/cybergirl_anim/png/bombe3.png differ diff --git a/assets/cybergirl_anim/png/etoile1.png b/assets/cybergirl_anim/png/etoile1.png new file mode 100644 index 0000000..1126bd1 Binary files /dev/null and b/assets/cybergirl_anim/png/etoile1.png differ diff --git a/assets/cybergirl_anim/png/etoile2.png b/assets/cybergirl_anim/png/etoile2.png new file mode 100644 index 0000000..b576482 Binary files /dev/null and b/assets/cybergirl_anim/png/etoile2.png differ diff --git a/assets/cybergirl_anim/png/grr1.png b/assets/cybergirl_anim/png/grr1.png new file mode 100644 index 0000000..b70f965 Binary files /dev/null and b/assets/cybergirl_anim/png/grr1.png differ diff --git a/assets/cybergirl_anim/png/grr2.png b/assets/cybergirl_anim/png/grr2.png new file mode 100644 index 0000000..49fd590 Binary files /dev/null and b/assets/cybergirl_anim/png/grr2.png differ diff --git a/assets/cybergirl_anim/png/grr3.png b/assets/cybergirl_anim/png/grr3.png new file mode 100644 index 0000000..352ff3a Binary files /dev/null and b/assets/cybergirl_anim/png/grr3.png differ diff --git a/assets/cybergirl_anim/png/pute1.png b/assets/cybergirl_anim/png/pute1.png new file mode 100644 index 0000000..de68e39 Binary files /dev/null and b/assets/cybergirl_anim/png/pute1.png differ diff --git a/assets/cybergirl_anim/png/pute2.png b/assets/cybergirl_anim/png/pute2.png new file mode 100644 index 0000000..32a898d Binary files /dev/null and b/assets/cybergirl_anim/png/pute2.png differ diff --git a/assets/cybergirl_anim/png/xx1.png b/assets/cybergirl_anim/png/xx1.png new file mode 100644 index 0000000..9e5d3e8 Binary files /dev/null and b/assets/cybergirl_anim/png/xx1.png differ diff --git a/assets/cybergirl_anim/png/xx2.png b/assets/cybergirl_anim/png/xx2.png new file mode 100644 index 0000000..eafc484 Binary files /dev/null and b/assets/cybergirl_anim/png/xx2.png differ diff --git a/assets/cybergirl_anim/png/xx3.png b/assets/cybergirl_anim/png/xx3.png new file mode 100644 index 0000000..804c5db Binary files /dev/null and b/assets/cybergirl_anim/png/xx3.png differ diff --git a/assets/cybergirl_anim/png/xx4.png b/assets/cybergirl_anim/png/xx4.png new file mode 100644 index 0000000..743bd25 Binary files /dev/null and b/assets/cybergirl_anim/png/xx4.png differ diff --git a/assets/cybergirl_anim/png/xx5.png b/assets/cybergirl_anim/png/xx5.png new file mode 100644 index 0000000..a299eb5 Binary files /dev/null and b/assets/cybergirl_anim/png/xx5.png differ diff --git a/assets/cybergirl_anim/pute1.PNG b/assets/cybergirl_anim/pute1.PNG new file mode 100644 index 0000000..8f98761 Binary files /dev/null and b/assets/cybergirl_anim/pute1.PNG differ diff --git a/assets/cybergirl_anim/pute2.PNG b/assets/cybergirl_anim/pute2.PNG new file mode 100644 index 0000000..5823c97 Binary files /dev/null and b/assets/cybergirl_anim/pute2.PNG differ diff --git a/assets/cybergirl_anim/xx1.PNG b/assets/cybergirl_anim/xx1.PNG new file mode 100644 index 0000000..fdef17e Binary files /dev/null and b/assets/cybergirl_anim/xx1.PNG differ diff --git a/assets/cybergirl_anim/xx2.PNG b/assets/cybergirl_anim/xx2.PNG new file mode 100644 index 0000000..9c3a431 Binary files /dev/null and b/assets/cybergirl_anim/xx2.PNG differ diff --git a/assets/cybergirl_anim/xx3.PNG b/assets/cybergirl_anim/xx3.PNG new file mode 100644 index 0000000..e70b81b Binary files /dev/null and b/assets/cybergirl_anim/xx3.PNG differ diff --git a/assets/cybergirl_anim/xx4.PNG b/assets/cybergirl_anim/xx4.PNG new file mode 100644 index 0000000..b1ad245 Binary files /dev/null and b/assets/cybergirl_anim/xx4.PNG differ diff --git a/assets/cybergirl_anim/xx5.PNG b/assets/cybergirl_anim/xx5.PNG new file mode 100644 index 0000000..8d80c2c Binary files /dev/null and b/assets/cybergirl_anim/xx5.PNG differ diff --git a/assets/cybergirl_tex.png b/assets/cybergirl_tex.png new file mode 100644 index 0000000..c1a6616 Binary files /dev/null and b/assets/cybergirl_tex.png differ diff --git a/assets/front.js b/assets/front.js new file mode 100644 index 0000000..e0f8283 --- /dev/null +++ b/assets/front.js @@ -0,0 +1,323 @@ + + + +const socket = io(); + +let barreStress = document.getElementById('barreStress') +let stress = 0; +let maxInterval1; +let maxInterval2; + +// ________________________________________________________________________________________ + + +function test() { + setInterval(() => { + stress+=10; + console.log(stress); + testBarre(); + }, 1000); +} + +function teste(){ + setInterval(() => { + stress=0; + }, 15000); +} + +function animBarreMax() { + clearInterval(maxInterval1); + clearInterval(maxInterval2); + + maxInterval1 = setInterval(() => { + barreStress.style.backgroundImage = 'url("barre/barreMax1.PNG")'; + }, 250); + + maxInterval2 = setInterval(() => { + barreStress.style.backgroundImage = 'url("barre/barreMax2.PNG")'; + }, 500); +} + + +function stopAnimBarreMax() { + clearInterval(maxInterval1); + clearInterval(maxInterval2); +} + + +function testBarre() { + if (stress < 100) { + stopAnimBarreMax(); + } + + if (stress <= 10) { + barreStress.style.backgroundImage = 'url("barre/barre1.PNG")'; + } else if (stress <= 20) { + barreStress.style.backgroundImage = 'url("barre/barre2.PNG")'; + } else if (stress <= 30) { + barreStress.style.backgroundImage = 'url("barre/barre3.PNG")'; + } else if (stress <= 40) { + barreStress.style.backgroundImage = 'url("barre/barre4.PNG")'; + } else if (stress <= 50) { + barreStress.style.backgroundImage = 'url("barre/barre5.PNG")'; + } else if (stress <= 60) { + barreStress.style.backgroundImage = 'url("barre/barre6.PNG")'; + } else if (stress <= 70) { + barreStress.style.backgroundImage = 'url("barre/barre7.PNG")'; + } else if (stress <= 80) { + barreStress.style.backgroundImage = 'url("barre/barre8.PNG")'; + } else if (stress <= 90) { + barreStress.style.backgroundImage = 'url("barre/barre9.PNG")'; + } else if (stress >= 100) { + animBarreMax(); + } +} + +// ________________________________________________________________________________________ + + +function addNoise() { + const canvas = document.createElement('canvas'); + const ctx = canvas.getContext('2d'); + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + const imageData = ctx.createImageData(canvas.width, canvas.height); + const data = imageData.data; + + for (let i = 0; i < data.length; i += 4) { + const value = Math.random() * 255; + data[i] = data[i + 1] = data[i + 2] = value; + data[i + 3] = 255; // alpha + } + + ctx.putImageData(imageData, 0, 0); + document.body.style.backgroundImage = `url(${canvas.toDataURL()})`; +} + + +// ________________________________________________________________________________________ + + +function lireTexte() { + // Récupérer le texte à lire depuis l'élément HTML avec l'ID 'texte' + const Texte = document.getElementById('texte'); + const texteToSpeak = Texte ? Texte.innerText : "Texte par défaut"; + + // Appeler l'API backend pour lire le texte + fetch(`/speak?text=${encodeURIComponent(texteToSpeak)}`) + .then(reponse => { + if (!reponse.ok) { + throw new Error('Erreur réseau lors de l\'appel de l\'API'); + } + return reponse.text(); + }) + .then(data => { + console.log(data); // Affiche la réponse du serveur + }) + .catch(error => { + console.error('Erreur :', error); + }); +} + + +// ________________________________________________________________________________________ + +let envoyerQuestion = document.getElementById("envoyerQuestion"); + + +function doubleRandomWord(question) { + let words = question.split(' '); + if (words.length === 0) return question; + + let randomIndex = Math.floor(Math.random() * words.length); + words.splice(randomIndex, 0, words[randomIndex]); + + return words.join(' '); +} + + +function addInsulte(question) { + let listeInsulte = [ + 'PUTE', + 'BITE', + 'CON', + 'CONNARD', + 'SALOPE', + 'MERDE', + 'PUTAIN' + ]; + let Insulte = listeInsulte[Math.floor(Math.random() * listeInsulte.length)]; + + let words = question.split(' '); + let randomIndex = Math.floor(Math.random() * (words.length + 1)); + words.splice(randomIndex, 0, Insulte); + + return words.join(' '); +} + +function submitQuestion (){ + let question = document.getElementById('questionInput').value; + if (question.trim() !== '') { + + // Modifier la question + // question = doubleRandomWord(question); + // question = addInsulte(question); + + // Envoyer la question au serveur via socket.io ou une requête HTTP + socket.emit('question', question); + + // Afficher la question dans le conteneur de réponses + const reponseContainer = document.getElementById('reponseContainer'); + const questionElement = document.createElement('div'); + questionElement.textContent = `Question: ${question}`; + reponseContainer.appendChild(questionElement); + + // Vider le champ de saisie + document.getElementById('questionInput').value = ''; + } +}; + + +// ________________________________________________________________________________________ + + +// // Créez une scène, une caméra et un rendu +// const scene = new THREE.Scene(); +// const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); +// const renderer = new THREE.WebGLRenderer(); +// renderer.setSize(window.innerWidth, window.innerHeight); +// document.body.appendChild(renderer.domElement); + +// // Ajoutez des lumières +// const light = new THREE.HemisphereLight(0xffffbb, 0x080820, 1); +// scene.add(light); + +// // Chargez le modèle .obj +// const objLoader = new THREE.OBJLoader(); +// objLoader.load( +// 'cybergirl.obj', // Remplacez par le chemin de votre fichier .obj +// (object) => { +// scene.add(object); +// object.position.set(0, 0, 0); // Ajustez la position si nécessaire +// }, +// (xhr) => { +// console.log((xhr.loaded / xhr.total * 100) + '% loaded'); +// }, +// (error) => { +// console.error('Une erreur est survenue lors du chargement du modèle:', error); +// } +// ); + + +// const mtlLoader = new THREE.MTLLoader(); +// mtlLoader.load('cybergirl.mtl', (materials) => { +// materials.preload(); + +// const objLoader = new THREE.OBJLoader(); +// objLoader.setMaterials(materials); +// objLoader.load('cybergirl.obj',(object) => { +// scene.add(object); +// object.position.set(0, 0, 0); // Ajustez la position si nécessaire +// }, +// (xhr) => { +// console.log((xhr.loaded / xhr.total * 100) + '% loaded'); +// }, +// (error) => { +// console.error('Une erreur est survenue lors du chargement du modèle:', error); +// } +// ); +// }); + + +// // Positionnez la caméra +// camera.position.z = 5; + + +// // Fonction de rendu +// function animate() { +// requestAnimationFrame(animate); +// renderer.render(scene, camera); +// } +// animate(); + + + +// ________________________________________________________________________________________ + + +let intervalEcoute; +let intervalEcoute1; +let intervalEcoute2; + +let tete = document.getElementById('tete'); +let tetegif =document.getElementById('teteGif') +let parle = -1; + +function animAttente() { + tete.style.display='none'; + tetegif.style.display='block'; +} + +function Ecoute() { + tete.style.display='block'; + tetegif.style.display='none'; +} + + +function animEcoute() { + tete.style.display='block'; + tetegif.style.display='none'; + clearInterval(intervalEcoute1); + clearInterval(intervalEcoute2); + + intervalEcoute = setInterval(() => { + if (parle <= 0) { + + intervalEcoute1 = setInterval(() => { + clearInterval(intervalEcoute1); + tete.style.backgroundImage='url("cybergirl_anim/png/^^1.png")'; + console.log('1'); + + intervalEcoute2 = setInterval(() => { + clearInterval(intervalEcoute2); + tete.style.backgroundImage='url("cybergirl_anim/png/^^2.png")'; + console.log('2'); + + }, 1000); + }, 1000); + } else { + console.log('stop'); + clearInterval(intervalEcoute); + } + }, 2000); +} + + +function animParle() { + parle = 0; +} + + +function animInsulte() { + +} + + +// ________________________________________________________________________________________ + + + +envoyerQuestion.addEventListener("click",submitQuestion); +document.addEventListener("keydown", function(event) { + if (event.key === "Enter") { + submitQuestion(); + } +}); + +barreStress.addEventListener("click", lireTexte); +questionInput.addEventListener("click",animEcoute); +addNoise(); +teste(); +test(); + + diff --git a/assets/micropuce_0.gif b/assets/micropuce_0.gif new file mode 100644 index 0000000..47c81e3 Binary files /dev/null and b/assets/micropuce_0.gif differ diff --git a/assets/micropuce_1.gif b/assets/micropuce_1.gif new file mode 100644 index 0000000..6dcc331 Binary files /dev/null and b/assets/micropuce_1.gif differ diff --git a/assets/micropuce_2.gif b/assets/micropuce_2.gif new file mode 100644 index 0000000..10f2f61 Binary files /dev/null and b/assets/micropuce_2.gif differ diff --git a/assets/socket.io.min.js b/assets/socket.io.min.js new file mode 100644 index 0000000..c72110d --- /dev/null +++ b/assets/socket.io.min.js @@ -0,0 +1,7 @@ +/*! + * Socket.IO v4.8.1 + * (c) 2014-2024 Guillermo Rauch + * Released under the MIT License. + */ +!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(t="undefined"!=typeof globalThis?globalThis:t||self).io=n()}(this,(function(){"use strict";function t(t,n){(null==n||n>t.length)&&(n=t.length);for(var i=0,r=Array(n);i=n.length?{done:!0}:{done:!1,value:n[e++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,u=!0,h=!1;return{s:function(){r=r.call(n)},n:function(){var t=r.next();return u=t.done,t},e:function(t){h=!0,s=t},f:function(){try{u||null==r.return||r.return()}finally{if(h)throw s}}}}function e(){return e=Object.assign?Object.assign.bind():function(t){for(var n=1;n1?{type:l[i],data:t.substring(1)}:{type:l[i]}:d},N=function(t,n){if(B){var i=function(t){var n,i,r,e,o,s=.75*t.length,u=t.length,h=0;"="===t[t.length-1]&&(s--,"="===t[t.length-2]&&s--);var f=new ArrayBuffer(s),c=new Uint8Array(f);for(n=0;n>4,c[h++]=(15&r)<<4|e>>2,c[h++]=(3&e)<<6|63&o;return f}(t);return C(i,n)}return{base64:!0,data:t}},C=function(t,n){return"blob"===n?t instanceof Blob?t:new Blob([t]):t instanceof ArrayBuffer?t:t.buffer},T=String.fromCharCode(30);function U(){return new TransformStream({transform:function(t,n){!function(t,n){y&&t.data instanceof Blob?t.data.arrayBuffer().then(k).then(n):b&&(t.data instanceof ArrayBuffer||w(t.data))?n(k(t.data)):g(t,!1,(function(t){p||(p=new TextEncoder),n(p.encode(t))}))}(t,(function(i){var r,e=i.length;if(e<126)r=new Uint8Array(1),new DataView(r.buffer).setUint8(0,e);else if(e<65536){r=new Uint8Array(3);var o=new DataView(r.buffer);o.setUint8(0,126),o.setUint16(1,e)}else{r=new Uint8Array(9);var s=new DataView(r.buffer);s.setUint8(0,127),s.setBigUint64(1,BigInt(e))}t.data&&"string"!=typeof t.data&&(r[0]|=128),n.enqueue(r),n.enqueue(i)}))}})}function M(t){return t.reduce((function(t,n){return t+n.length}),0)}function x(t,n){if(t[0].length===n)return t.shift();for(var i=new Uint8Array(n),r=0,e=0;e1?n-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:{};return t+"://"+this.i()+this.o()+this.opts.path+this.u(n)},i.i=function(){var t=this.opts.hostname;return-1===t.indexOf(":")?t:"["+t+"]"},i.o=function(){return this.opts.port&&(this.opts.secure&&Number(443!==this.opts.port)||!this.opts.secure&&80!==Number(this.opts.port))?":"+this.opts.port:""},i.u=function(t){var n=function(t){var n="";for(var i in t)t.hasOwnProperty(i)&&(n.length&&(n+="&"),n+=encodeURIComponent(i)+"="+encodeURIComponent(t[i]));return n}(t);return n.length?"?"+n:""},n}(I),X=function(t){function n(){var n;return(n=t.apply(this,arguments)||this).h=!1,n}s(n,t);var r=n.prototype;return r.doOpen=function(){this.v()},r.pause=function(t){var n=this;this.readyState="pausing";var i=function(){n.readyState="paused",t()};if(this.h||!this.writable){var r=0;this.h&&(r++,this.once("pollComplete",(function(){--r||i()}))),this.writable||(r++,this.once("drain",(function(){--r||i()})))}else i()},r.v=function(){this.h=!0,this.doPoll(),this.emitReserved("poll")},r.onData=function(t){var n=this;(function(t,n){for(var i=t.split(T),r=[],e=0;e0&&void 0!==arguments[0]?arguments[0]:{};return e(t,{xd:this.xd},this.opts),new Y(tt,this.uri(),t)},n}(K);function tt(t){var n=t.xdomain;try{if("undefined"!=typeof XMLHttpRequest&&(!n||z))return new XMLHttpRequest}catch(t){}if(!n)try{return new(L[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(t){}}var nt="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase(),it=function(t){function n(){return t.apply(this,arguments)||this}s(n,t);var r=n.prototype;return r.doOpen=function(){var t=this.uri(),n=this.opts.protocols,i=nt?{}:_(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(i.headers=this.opts.extraHeaders);try{this.ws=this.createSocket(t,n,i)}catch(t){return this.emitReserved("error",t)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()},r.addEventListeners=function(){var t=this;this.ws.onopen=function(){t.opts.autoUnref&&t.ws.C.unref(),t.onOpen()},this.ws.onclose=function(n){return t.onClose({description:"websocket connection closed",context:n})},this.ws.onmessage=function(n){return t.onData(n.data)},this.ws.onerror=function(n){return t.onError("websocket error",n)}},r.write=function(t){var n=this;this.writable=!1;for(var i=function(){var i=t[r],e=r===t.length-1;g(i,n.supportsBinary,(function(t){try{n.doWrite(i,t)}catch(t){}e&&R((function(){n.writable=!0,n.emitReserved("drain")}),n.setTimeoutFn)}))},r=0;rMath.pow(2,21)-1){u.enqueue(d);break}e=v*Math.pow(2,32)+a.getUint32(4),r=3}else{if(M(i)t){u.enqueue(d);break}}}})}(Number.MAX_SAFE_INTEGER,t.socket.binaryType),r=n.readable.pipeThrough(i).getReader(),e=U();e.readable.pipeTo(n.writable),t.U=e.writable.getWriter();!function n(){r.read().then((function(i){var r=i.done,e=i.value;r||(t.onPacket(e),n())})).catch((function(t){}))}();var o={type:"open"};t.query.sid&&(o.data='{"sid":"'.concat(t.query.sid,'"}')),t.U.write(o).then((function(){return t.onOpen()}))}))}))},r.write=function(t){var n=this;this.writable=!1;for(var i=function(){var i=t[r],e=r===t.length-1;n.U.write(i).then((function(){e&&R((function(){n.writable=!0,n.emitReserved("drain")}),n.setTimeoutFn)}))},r=0;r8e3)throw"URI too long";var n=t,i=t.indexOf("["),r=t.indexOf("]");-1!=i&&-1!=r&&(t=t.substring(0,i)+t.substring(i,r).replace(/:/g,";")+t.substring(r,t.length));for(var e,o,s=ut.exec(t||""),u={},h=14;h--;)u[ht[h]]=s[h]||"";return-1!=i&&-1!=r&&(u.source=n,u.host=u.host.substring(1,u.host.length-1).replace(/;/g,":"),u.authority=u.authority.replace("[","").replace("]","").replace(/;/g,":"),u.ipv6uri=!0),u.pathNames=function(t,n){var i=/\/{2,9}/g,r=n.replace(i,"/").split("/");"/"!=n.slice(0,1)&&0!==n.length||r.splice(0,1);"/"==n.slice(-1)&&r.splice(r.length-1,1);return r}(0,u.path),u.queryKey=(e=u.query,o={},e.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,(function(t,n,i){n&&(o[n]=i)})),o),u}var ct="function"==typeof addEventListener&&"function"==typeof removeEventListener,at=[];ct&&addEventListener("offline",(function(){at.forEach((function(t){return t()}))}),!1);var vt=function(t){function n(n,i){var r;if((r=t.call(this)||this).binaryType="arraybuffer",r.writeBuffer=[],r.M=0,r.I=-1,r.R=-1,r.L=-1,r._=1/0,n&&"object"===c(n)&&(i=n,n=null),n){var o=ft(n);i.hostname=o.host,i.secure="https"===o.protocol||"wss"===o.protocol,i.port=o.port,o.query&&(i.query=o.query)}else i.host&&(i.hostname=ft(i.host).host);return $(r,i),r.secure=null!=i.secure?i.secure:"undefined"!=typeof location&&"https:"===location.protocol,i.hostname&&!i.port&&(i.port=r.secure?"443":"80"),r.hostname=i.hostname||("undefined"!=typeof location?location.hostname:"localhost"),r.port=i.port||("undefined"!=typeof location&&location.port?location.port:r.secure?"443":"80"),r.transports=[],r.D={},i.transports.forEach((function(t){var n=t.prototype.name;r.transports.push(n),r.D[n]=t})),r.opts=e({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},i),r.opts.path=r.opts.path.replace(/\/$/,"")+(r.opts.addTrailingSlash?"/":""),"string"==typeof r.opts.query&&(r.opts.query=function(t){for(var n={},i=t.split("&"),r=0,e=i.length;r1))return this.writeBuffer;for(var t,n=1,i=0;i=57344?i+=3:(r++,i+=4);return i}(t):Math.ceil(1.33*(t.byteLength||t.size))),i>0&&n>this.L)return this.writeBuffer.slice(0,i);n+=2}return this.writeBuffer},i.W=function(){var t=this;if(!this._)return!0;var n=Date.now()>this._;return n&&(this._=0,R((function(){t.F("ping timeout")}),this.setTimeoutFn)),n},i.write=function(t,n,i){return this.J("message",t,n,i),this},i.send=function(t,n,i){return this.J("message",t,n,i),this},i.J=function(t,n,i,r){if("function"==typeof n&&(r=n,n=void 0),"function"==typeof i&&(r=i,i=null),"closing"!==this.readyState&&"closed"!==this.readyState){(i=i||{}).compress=!1!==i.compress;var e={type:t,data:n,options:i};this.emitReserved("packetCreate",e),this.writeBuffer.push(e),r&&this.once("flush",r),this.flush()}},i.close=function(){var t=this,n=function(){t.F("forced close"),t.transport.close()},i=function i(){t.off("upgrade",i),t.off("upgradeError",i),n()},r=function(){t.once("upgrade",i),t.once("upgradeError",i)};return"opening"!==this.readyState&&"open"!==this.readyState||(this.readyState="closing",this.writeBuffer.length?this.once("drain",(function(){t.upgrading?r():n()})):this.upgrading?r():n()),this},i.B=function(t){if(n.priorWebsocketSuccess=!1,this.opts.tryAllTransports&&this.transports.length>1&&"opening"===this.readyState)return this.transports.shift(),this.q();this.emitReserved("error",t),this.F("transport error",t)},i.F=function(t,n){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState){if(this.clearTimeoutFn(this.Y),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),ct&&(this.P&&removeEventListener("beforeunload",this.P,!1),this.$)){var i=at.indexOf(this.$);-1!==i&&at.splice(i,1)}this.readyState="closed",this.id=null,this.emitReserved("close",t,n),this.writeBuffer=[],this.M=0}},n}(I);vt.protocol=4;var lt=function(t){function n(){var n;return(n=t.apply(this,arguments)||this).Z=[],n}s(n,t);var i=n.prototype;return i.onOpen=function(){if(t.prototype.onOpen.call(this),"open"===this.readyState&&this.opts.upgrade)for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},r="object"===c(n)?n:i;return(!r.transports||r.transports&&"string"==typeof r.transports[0])&&(r.transports=(r.transports||["polling","websocket","webtransport"]).map((function(t){return st[t]})).filter((function(t){return!!t}))),t.call(this,n,r)||this}return s(n,t),n}(lt);pt.protocol;var dt="function"==typeof ArrayBuffer,yt=function(t){return"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(t):t.buffer instanceof ArrayBuffer},bt=Object.prototype.toString,wt="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===bt.call(Blob),gt="function"==typeof File||"undefined"!=typeof File&&"[object FileConstructor]"===bt.call(File);function mt(t){return dt&&(t instanceof ArrayBuffer||yt(t))||wt&&t instanceof Blob||gt&&t instanceof File}function kt(t,n){if(!t||"object"!==c(t))return!1;if(Array.isArray(t)){for(var i=0,r=t.length;i=0&&t.num1?e-1:0),s=1;s1?i-1:0),e=1;ei.l.retries&&(i.it.shift(),n&&n(t));else if(i.it.shift(),n){for(var e=arguments.length,o=new Array(e>1?e-1:0),s=1;s0&&void 0!==arguments[0]&&arguments[0];if(this.connected&&0!==this.it.length){var n=this.it[0];n.pending&&!t||(n.pending=!0,n.tryCount++,this.flags=n.flags,this.emit.apply(this,n.args))}},o.packet=function(t){t.nsp=this.nsp,this.io.ct(t)},o.onopen=function(){var t=this;"function"==typeof this.auth?this.auth((function(n){t.vt(n)})):this.vt(this.auth)},o.vt=function(t){this.packet({type:Bt.CONNECT,data:this.lt?e({pid:this.lt,offset:this.dt},t):t})},o.onerror=function(t){this.connected||this.emitReserved("connect_error",t)},o.onclose=function(t,n){this.connected=!1,delete this.id,this.emitReserved("disconnect",t,n),this.yt()},o.yt=function(){var t=this;Object.keys(this.acks).forEach((function(n){if(!t.sendBuffer.some((function(t){return String(t.id)===n}))){var i=t.acks[n];delete t.acks[n],i.withError&&i.call(t,new Error("socket has been disconnected"))}}))},o.onpacket=function(t){if(t.nsp===this.nsp)switch(t.type){case Bt.CONNECT:t.data&&t.data.sid?this.onconnect(t.data.sid,t.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case Bt.EVENT:case Bt.BINARY_EVENT:this.onevent(t);break;case Bt.ACK:case Bt.BINARY_ACK:this.onack(t);break;case Bt.DISCONNECT:this.ondisconnect();break;case Bt.CONNECT_ERROR:this.destroy();var n=new Error(t.data.message);n.data=t.data.data,this.emitReserved("connect_error",n)}},o.onevent=function(t){var n=t.data||[];null!=t.id&&n.push(this.ack(t.id)),this.connected?this.emitEvent(n):this.receiveBuffer.push(Object.freeze(n))},o.emitEvent=function(n){if(this.bt&&this.bt.length){var i,e=r(this.bt.slice());try{for(e.s();!(i=e.n()).done;){i.value.apply(this,n)}}catch(t){e.e(t)}finally{e.f()}}t.prototype.emit.apply(this,n),this.lt&&n.length&&"string"==typeof n[n.length-1]&&(this.dt=n[n.length-1])},o.ack=function(t){var n=this,i=!1;return function(){if(!i){i=!0;for(var r=arguments.length,e=new Array(r),o=0;o0&&t.jitter<=1?t.jitter:0,this.attempts=0}_t.prototype.duration=function(){var t=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var n=Math.random(),i=Math.floor(n*this.jitter*t);t=1&Math.floor(10*n)?t+i:t-i}return 0|Math.min(t,this.max)},_t.prototype.reset=function(){this.attempts=0},_t.prototype.setMin=function(t){this.ms=t},_t.prototype.setMax=function(t){this.max=t},_t.prototype.setJitter=function(t){this.jitter=t};var Dt=function(t){function n(n,i){var r,e;(r=t.call(this)||this).nsps={},r.subs=[],n&&"object"===c(n)&&(i=n,n=void 0),(i=i||{}).path=i.path||"/socket.io",r.opts=i,$(r,i),r.reconnection(!1!==i.reconnection),r.reconnectionAttempts(i.reconnectionAttempts||1/0),r.reconnectionDelay(i.reconnectionDelay||1e3),r.reconnectionDelayMax(i.reconnectionDelayMax||5e3),r.randomizationFactor(null!==(e=i.randomizationFactor)&&void 0!==e?e:.5),r.backoff=new _t({min:r.reconnectionDelay(),max:r.reconnectionDelayMax(),jitter:r.randomizationFactor()}),r.timeout(null==i.timeout?2e4:i.timeout),r.st="closed",r.uri=n;var o=i.parser||xt;return r.encoder=new o.Encoder,r.decoder=new o.Decoder,r.et=!1!==i.autoConnect,r.et&&r.open(),r}s(n,t);var i=n.prototype;return i.reconnection=function(t){return arguments.length?(this.kt=!!t,t||(this.skipReconnect=!0),this):this.kt},i.reconnectionAttempts=function(t){return void 0===t?this.At:(this.At=t,this)},i.reconnectionDelay=function(t){var n;return void 0===t?this.jt:(this.jt=t,null===(n=this.backoff)||void 0===n||n.setMin(t),this)},i.randomizationFactor=function(t){var n;return void 0===t?this.Et:(this.Et=t,null===(n=this.backoff)||void 0===n||n.setJitter(t),this)},i.reconnectionDelayMax=function(t){var n;return void 0===t?this.Ot:(this.Ot=t,null===(n=this.backoff)||void 0===n||n.setMax(t),this)},i.timeout=function(t){return arguments.length?(this.Bt=t,this):this.Bt},i.maybeReconnectOnOpen=function(){!this.ot&&this.kt&&0===this.backoff.attempts&&this.reconnect()},i.open=function(t){var n=this;if(~this.st.indexOf("open"))return this;this.engine=new pt(this.uri,this.opts);var i=this.engine,r=this;this.st="opening",this.skipReconnect=!1;var e=It(i,"open",(function(){r.onopen(),t&&t()})),o=function(i){n.cleanup(),n.st="closed",n.emitReserved("error",i),t?t(i):n.maybeReconnectOnOpen()},s=It(i,"error",o);if(!1!==this.Bt){var u=this.Bt,h=this.setTimeoutFn((function(){e(),o(new Error("timeout")),i.close()}),u);this.opts.autoUnref&&h.unref(),this.subs.push((function(){n.clearTimeoutFn(h)}))}return this.subs.push(e),this.subs.push(s),this},i.connect=function(t){return this.open(t)},i.onopen=function(){this.cleanup(),this.st="open",this.emitReserved("open");var t=this.engine;this.subs.push(It(t,"ping",this.onping.bind(this)),It(t,"data",this.ondata.bind(this)),It(t,"error",this.onerror.bind(this)),It(t,"close",this.onclose.bind(this)),It(this.decoder,"decoded",this.ondecoded.bind(this)))},i.onping=function(){this.emitReserved("ping")},i.ondata=function(t){try{this.decoder.add(t)}catch(t){this.onclose("parse error",t)}},i.ondecoded=function(t){var n=this;R((function(){n.emitReserved("packet",t)}),this.setTimeoutFn)},i.onerror=function(t){this.emitReserved("error",t)},i.socket=function(t,n){var i=this.nsps[t];return i?this.et&&!i.active&&i.connect():(i=new Lt(this,t,n),this.nsps[t]=i),i},i.wt=function(t){for(var n=0,i=Object.keys(this.nsps);n=this.At)this.backoff.reset(),this.emitReserved("reconnect_failed"),this.ot=!1;else{var i=this.backoff.duration();this.ot=!0;var r=this.setTimeoutFn((function(){n.skipReconnect||(t.emitReserved("reconnect_attempt",n.backoff.attempts),n.skipReconnect||n.open((function(i){i?(n.ot=!1,n.reconnect(),t.emitReserved("reconnect_error",i)):n.onreconnect()})))}),i);this.opts.autoUnref&&r.unref(),this.subs.push((function(){t.clearTimeoutFn(r)}))}},i.onreconnect=function(){var t=this.backoff.attempts;this.ot=!1,this.backoff.reset(),this.emitReserved("reconnect",t)},n}(I),Pt={};function $t(t,n){"object"===c(t)&&(n=t,t=void 0);var i,r=function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2?arguments[2]:void 0,r=t;i=i||"undefined"!=typeof location&&location,null==t&&(t=i.protocol+"//"+i.host),"string"==typeof t&&("/"===t.charAt(0)&&(t="/"===t.charAt(1)?i.protocol+t:i.host+t),/^(https?|wss?):\/\//.test(t)||(t=void 0!==i?i.protocol+"//"+t:"https://"+t),r=ft(t)),r.port||(/^(http|ws)$/.test(r.protocol)?r.port="80":/^(http|ws)s$/.test(r.protocol)&&(r.port="443")),r.path=r.path||"/";var e=-1!==r.host.indexOf(":")?"["+r.host+"]":r.host;return r.id=r.protocol+"://"+e+":"+r.port+n,r.href=r.protocol+"://"+e+(i&&i.port===r.port?"":":"+r.port),r}(t,(n=n||{}).path||"/socket.io"),e=r.source,o=r.id,s=r.path,u=Pt[o]&&s in Pt[o].nsps;return n.forceNew||n["force new connection"]||!1===n.multiplex||u?i=new Dt(e,n):(Pt[o]||(Pt[o]=new Dt(e,n)),i=Pt[o]),r.query&&!n.query&&(n.query=r.queryKey),i.socket(r.path,n)}return e($t,{Manager:Dt,Socket:Lt,io:$t,connect:$t}),$t})); +//# sourceMappingURL=socket.io.min.js.map diff --git a/assets/style.css b/assets/style.css new file mode 100644 index 0000000..52265e4 --- /dev/null +++ b/assets/style.css @@ -0,0 +1,87 @@ + + +@keyframes flicker { + 0%, 100% { opacity: 1; } + 50% { opacity: 0.9; } +} + + +body{ + margin: 0; + border: 0; + background-color: #1d2b53; + /* filter: sepia(0.5) grayscale(0.3) contrast(1.2); */ + animation: flicker 0.15s infinite; +} + +#fond{ + position: fixed; + background-color: #1d2b53; + width: 100%; + height: 100%; + margin-left: 0; + margin-top: 0; +} + +#teteGif{ + position: fixed; + margin-left: 22.5%; + margin-top: -5%; + width: 55%; + height: 105%; + background-image: url("cybergirl_3.gif"); + background-size: 98%; + background-repeat: no-repeat; +} + + +#tete{ + position: fixed; + border: 0; + display: none; + margin-left: 22.5%; + margin-top: -5%; + width: 55%; + height: 105%; + background-size: 110%; + background-repeat: no-repeat; +} + + +#barreStress{ + position: fixed; + margin-top: 2%; + margin-left: 2%; + width: 300px; + height: 85px; + background-image: url("barre/barre1.PNG"); + background-size: 100%; +} + + +#questionInput{ + /* background-color: #FF77A8; */ + position: fixed; + width: 50%; + bottom: 10%; + margin-left: 25%; +} + +#envoyerQuestion{ + background-color: #7E2553; + position: fixed; + width: 10%; + bottom: 5%; + margin-left: 45%; + border-radius: 15px; +} + + +#reponseContainer{ + position: fixed; + width: 10%; + height: 100%; + right: 0; +} + + diff --git a/client.py b/client.py new file mode 100644 index 0000000..1b93ef5 --- /dev/null +++ b/client.py @@ -0,0 +1,21 @@ +import socket + +ip = '127.0.0.1' +port = 5000 + +def start_client(): + client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + client_socket.connect((ip, port)) + + while True: + message = input("Entrez un message pour le serveur: ") + + client_socket.send(message.encode()) + response = client_socket.recv(1024).decode() + if (response.lower() == "exit"): + break + print(response) + + client_socket.close() + +start_client() diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..15303c5 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1476 @@ +{ + "name": "express", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "express", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "express": "^4.21.2", + "pug": "^3.0.3", + "socket.io": "^4.8.1" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", + "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.9" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", + "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "license": "MIT" + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "22.13.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.5.tgz", + "integrity": "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "license": "MIT" + }, + "node_modules/assert-never": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", + "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", + "license": "MIT" + }, + "node_modules/babel-walk": { + "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.9.6" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "license": "MIT", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", + "license": "MIT", + "dependencies": { + "is-regex": "^1.0.3" + } + }, + "node_modules/constantinople": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", + "license": "MIT" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/engine.io": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz", + "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==", + "license": "MIT", + "dependencies": { + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.7.2", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", + "license": "MIT" + }, + "node_modules/jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", + "license": "MIT", + "dependencies": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "license": "MIT", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pug": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.3.tgz", + "integrity": "sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g==", + "license": "MIT", + "dependencies": { + "pug-code-gen": "^3.0.3", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.1", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.1", + "pug-strip-comments": "^2.0.0" + } + }, + "node_modules/pug-attrs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" + } + }, + "node_modules/pug-code-gen": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.3.tgz", + "integrity": "sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw==", + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.1.0", + "pug-runtime": "^3.0.1", + "void-elements": "^3.1.0", + "with": "^7.0.0" + } + }, + "node_modules/pug-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", + "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", + "license": "MIT" + }, + "node_modules/pug-filters": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "jstransformer": "1.0.0", + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" + } + }, + "node_modules/pug-lexer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", + "license": "MIT", + "dependencies": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-linker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-load": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0", + "token-stream": "1.0.0" + } + }, + "node_modules/pug-runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", + "license": "MIT" + }, + "node_modules/pug-strip-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/socket.io": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", + "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.6.0", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "license": "MIT", + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.17.1" + } + }, + "node_modules/socket.io-adapter/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-adapter/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-parser/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/token-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", + "license": "MIT" + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "license": "MIT" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/with": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..af2c6f9 --- /dev/null +++ b/package.json @@ -0,0 +1,24 @@ +{ + "name": "express", + "version": "1.0.0", + "license": "ISC", + "author": "", + "type": "commonjs", + "main": "server.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "node server.js" + }, + "dependencies": { + "express": "^4.21.2", + "pug": "^3.0.3", + "socket.io": "^4.8.1" + }, + "devDependencies": {}, + "repository": { + "type": "git", + "url": "https://gitea.esadhar.fr/emile.robinot/hackaton2025.git" + }, + "keywords": [], + "description": "" +} diff --git a/server.js b/server.js new file mode 100644 index 0000000..dc16ee0 --- /dev/null +++ b/server.js @@ -0,0 +1,86 @@ + +const { io: Client } = require("socket.io-client"); + +const express = require('express'); +// const { createServer } = require('node:http'); +// const { http } = require('node:http'); +const http = require('node:http'); +const { Server } = require('socket.io'); + +const app = express(); +const server = http.createServer(app); +const io = new Server(server); + + +const port = 3000 + + + +app.set('view engine', 'pug') +app.use(express.static('assets')) + +app.get('/', (req, res) => { + // res.send('Hello World!') + res.render('index', { title: 'SGT', message: 'bonjour, je suis lucie et j`ai le syndorme de PUTe de la tourette!' }) +}) + + +// app.get('/speak', (req, res) => { +// const text = req.query.text || message; +// const command = `espeak "${text}"`; + +// exec(command, (error, stdout, stderr) => { +// if (error) { +// console.error(`Erreur lors de l'exécution de la commande : ${error}`); +// return res.status(500).send('Erreur lors de la lecture du texte.'); +// } +// res.send(`Texte lu : ${text}`); +// }); +// }); + + +io.on('connection', (socket) => { + console.log('Un utilisateur s\'est connecté'); + + let stress = 0.1; + setInterval(() => { + stress += 0.1; + socket.emit('stress', stress); + console.log(stress); + }, 2000); + + // Écoute les questions envoyées par le client + socket.on('question', (question) => { + console.log(`Question reçue: ${question}`); + + const options = { + host: 'localhost', + port: 5000, + path: '/', + }; + + // Sending the request + const req = http.request(options, (res) => { + let data = '' + + res.on('data', (chunk) => { + data += chunk; + console.log('on data', data); + }); + + // Ending the response + res.on('end', () => { + console.log('Body:', JSON.parse(data)) + }); + + }).on("error", (err) => { + console.log("Error: ", err) + }).end() + }); + +}); + +server.listen(port, () => { + console.log(`Example app listening on port ${port}`) +}) + diff --git a/serveur.py b/serveur.py new file mode 100644 index 0000000..4470e8e --- /dev/null +++ b/serveur.py @@ -0,0 +1,71 @@ +import socket +import ollama +import serial +import time +import threading + +ip = '127.0.0.1' +port = 5000 + +usbPort = '/dev/ttyACM0' +baud_rate = 9600 +stopFlag = False + +instruction = "Ne fait pas de long paragraphe répond simplement" + +def send_message(client_socket, message): + client_socket.send(message.encode()) + +def connect_arduino(): + count = 0 + + ser = serial.Serial(usbPort, baud_rate) + while not ser.isOpen(): + if (count == 5): + count = 0 + print("Serial port still trying to open...") + time.sleep(1) + count += 1 + return (ser) + +def arduino_thread(thread_name, ser): + global stopFlag + + while not stopFlag: + if ser.in_waiting > 0: + data = ser.readline().decode('utf-8').strip() + print("Arduino data:", data) + +def start_server(): + global stopFlag + + server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + server_socket.bind((ip, port)) + server_socket.listen(1) + + print("Server ready!") + + ser = connect_arduino() + client_socket, client_address = server_socket.accept() + thread1 = threading.Thread(target=arduino_thread, args=("Thread1", ser)) + thread1.start() + while (1): + message = client_socket.recv(1024).decode() + + if (message == "exit"): + send_message(client_socket, "exit") + break + message = message + instruction + response = ollama.chat(model='mistral', messages=[ + { + 'role': 'user', + 'content': message, + }, + ]) + send_message(client_socket, response['message']['content']) + stopFlag = True + print("closed server.") + thread1.join() + client_socket.close() + +start_server() diff --git a/views/index.pug b/views/index.pug new file mode 100644 index 0000000..38bd45a --- /dev/null +++ b/views/index.pug @@ -0,0 +1,26 @@ + +html + head + title= title + link(rel="stylesheet", href="style.css") + script(src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js") + script(src="https://cdn.rawgit.com/mrdoob/three.js/r128/examples/js/loaders/OBJLoader.js") + script(src="https://cdn.rawgit.com/mrdoob/three.js/r128/examples/js/loaders/MTLLoader.js") + + + body + div(id='fond') + div(id='tete') + div(id='teteGif') + div(id='barreStress') + + + + div + textarea(id='questionInput', placeholder='Posez votre question ici...') + button(id='envoyerQuestion') Poser la question + + div(id='reponseContainer') + + script(src="socket.io.min.js") + script(src="front.js")