Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Save/Fundamental, 07.06.2026 19-11-12, Abyss.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
eyJ2ZXJzaW9uIjoidjAuMi45IiwiZmlsZU5hbWUiOiJGdW5kYW1lbnRhbCwgW2RhdGVELk0uWV0gW3RpbWVILU0tU10sIFtzdGFnZV0iLCJzdGFnZSI6eyJjdXJyZW50Ijo2LCJhY3RpdmUiOjYsInJlc2V0cyI6NSwidGltZSI6MTQwNzE4LjE0NjgzNzIzODQzLCJwZWFrIjpbNzA4ODE3LjY5MDQ1NzgzOTMsMTcuNDk5OTk5OTk5OTk5NzE2XSwicGVha2VkQXQiOjEwMy43Nzk5OTk5OTk5OTY0OSwiaW5wdXQiOlszLDAsNjAwLDMwMF19LCJkaXNjaGFyZ2UiOnsiZW5lcmd5IjozOTg0OTEsImN1cnJlbnQiOjMzfSwidmFwb3JpemF0aW9uIjp7ImNsb3VkcyI6Mi4wMzA5NTMwNzE0NTMxNjYzZSszNSwiaW5wdXQiOlsyLDBdfSwiYWNjcmV0aW9uIjp7InJhbmsiOjd9LCJjb2xsYXBzZSI6eyJtYXNzIjowLjAxMjM1LCJzdGFycyI6Wzc4LDAsMF0sImlucHV0IjpbMiwxMDAwMDAwXSwicG9pbnRzIjpbMC4wNzYsMC4xOCwwLjIzLDAuMywwLjgsMS4zLDEwLDQwXSwiaGlnaGVzdCI6Mjl9LCJtZXJnZSI6eyJyZXdhcmRzIjpbMCwwLDAsMF0sImNsYWltZWQiOlswLDBdLCJyZXNldHMiOjEsImlucHV0IjpbMjAsMzBdLCJzaW5jZSI6MC4wNH0sImRhcmtuZXNzIjp7ImFjdGl2ZSI6ZmFsc2UsInRpZXIiOjAsImVuZXJneSI6MCwiZmx1aWQiOjAsImlucHV0IjoxLjV9LCJpbmZsYXRpb24iOnsibG9hZG91dHMiOltbIjB6IixbMCwwLDQsMywyLDIsMSwxLDEsMCwxLDEsMiwyLDYsMF1dLFsiMXN0IixbMCwwLDEsMSwxLDIsMiw2XV0sWyIybmQiLFswLDAsMSwxLDEsMiwyLDIsNl1dLFsiM3JkIixbMCwwLDEsMSwxLDIsMiwyLDIsMyw2XV0sWyI0dGgiLFswLDAsMSwxLDEsMiwyLDIsMiwzLDQsNiw2XV0sWyI1dGgiLFswLDAsMSwxLDEsMSwyLDIsMiwyLDIsMyw0LDYsNl1dLFsiNnRoIixbMCwwLDEsMSwxLDEsMSwyLDIsMiwyLDIsMiwzLDQsNiw2XV0sWyI3dGgiLFswLDAsMSwxLDEsMSwxLDEsMiwyLDIsMiwyLDIsMywzLDQsNiw2XV1dLCJ2YWN1dW0iOnRydWUsInJlc2V0cyI6MSwiZW5kcyI6WzI3LDMsMF0sInRpbWUiOjYxNDYyOTAuMjQxMTc2NjI1LCJhZ2UiOjYyODgxNDkuNzU0ODAyNTg1LCJwZWFrIjpbMCwwXX0sInRpbWUiOnsidXBkYXRlZCI6MTc4MDgzNDI3MjQxMiwic3RhcnRlZCI6MTc2ODM5NTc2OTQ0NywiZXhjZXNzIjoxNCwiZXhwb3J0IjpbMCwwLDAsMjQuMzE5OTk5OTk5OTk5OTk3XSwib2ZmbGluZSI6MCwib25saW5lIjoyNzM1MzMyMTk1MCwiZW5kIjo2NDUyLjg0MDAwMDA0ODAxLCJ1bml2ZXJzZSI6NjQ1Mi44NDAwMDAwNDgwMSwidmFjdXVtIjo2MjEzLjc2MDAwMDA0Mjc5MSwic3RhZ2UiOjEyMy4wNTk5OTk5OTk5OTI2Nn0sImJ1aWxkaW5ncyI6W1tdLFt7ImN1cnJlbnQiOiI0Ljk4OTY3ODE0NTg2NzQxZTM0IiwidG90YWwiOiI0Ljk4OTY3ODE0NjAwMDIxZTM0IiwidHJ1ZVRvdGFsIjoiOS40NDY0MjI4NTk3MjQ2ZTc2In0seyJjdXJyZW50IjoiMy45NDYyMDUwNzcyNzQwNmUxNjEiLCJ0b3RhbCI6IjMuOTQ2MjA1MDc3Mjc0MDZlMTYxIiwidHJ1ZVRvdGFsIjoiNy40NjYzOTExOTExOTQyOGUxMDM1IiwidHJ1ZSI6MTMwMX0seyJjdXJyZW50IjoiMS42NjYyNjUwMjc1MjE1NmU5MCIsInRvdGFsIjoiMS42NjYyNjUwMjc1MjE1NmU5MCIsInRydWVUb3RhbCI6IjEuODg4Mzg5OTE5NTI0NTJlNTc1IiwidHJ1ZSI6MTQ0Mn0seyJjdXJyZW50IjoiMy40NzE3ODIwODk5NjM5OWUzOCIsInRvdGFsIjoiMy40NzE3ODIwODk5NjM5OWUzOCIsInRydWVUb3RhbCI6IjEuNjc0MTA3NjY1OTI5MTVlMzA1IiwidHJ1ZSI6NjQwfSx7ImN1cnJlbnQiOiIzLjllMSIsInRvdGFsIjoiMy45ZTEiLCJ0cnVlVG90YWwiOiIxLjA3MDY4Mjg0OTUxMjE4ZTE0NyIsInRydWUiOjM5fSx7ImN1cnJlbnQiOiIwIiwidG90YWwiOiIwIiwidHJ1ZVRvdGFsIjoiNi43NDQ4Mjc0ODMxOTAyMWU1NSIsInRydWUiOjB9XSxbeyJjdXJyZW50IjoiMCIsInRvdGFsIjoiMCIsInRydWVUb3RhbCI6IjAifSx7ImN1cnJlbnQiOiIxLjI4MTUxMDk0MjgxNjk3ZTYwIiwidG90YWwiOiIxLjI4MTUxMDk0MjgxNjk3ZTYwIiwidHJ1ZVRvdGFsIjoiMS4xMjM2MzEyNDY1ODIyNmU3NiIsInRydWUiOjB9LHsiY3VycmVudCI6IjQuMTQ2ZTMiLCJ0b3RhbCI6IjQuMThlMiIsInRydWVUb3RhbCI6IjguNDI5M2U0IiwidHJ1ZSI6NDE4fSx7ImN1cnJlbnQiOiI5LjMyZTIiLCJ0b3RhbCI6IjIuOWUyIiwidHJ1ZVRvdGFsIjoiNi4zMjY0ZTQiLCJ0cnVlIjoyOTB9LHsiY3VycmVudCI6IjIuMTRlMiIsInRvdGFsIjoiMS4zMWUyIiwidHJ1ZVRvdGFsIjoiMy44MzY0ZTQiLCJ0cnVlIjoxMzF9LHsiY3VycmVudCI6IjguM2UxIiwidG90YWwiOiI4LjNlMSIsInRydWVUb3RhbCI6IjMuMDgzZTQiLCJ0cnVlIjo4M30seyJjdXJyZW50IjoiMS42ZTEiLCJ0b3RhbCI6IjEuNmUxIiwidHJ1ZVRvdGFsIjoiNy4xMzdlMyIsInRydWUiOjE2fV0sW3siY3VycmVudCI6IjguODk0OTA5MjIzNjk0MDRlMSIsInRvdGFsIjoiOC44OTQ5MDkyMjM5MzA3OGUxIiwidHJ1ZVRvdGFsIjoiOS43NjE4NTY2NzM5MmUtMzYifSx7ImN1cnJlbnQiOiIyLjM2ODc5ODk1NzY0OTE3ZTQiLCJ0b3RhbCI6IjIuMzY4Nzk4OTU3NjQ5MTdlNCIsInRydWVUb3RhbCI6IjIuOTgyMjEwMzQxOTk2MzhlMzYiLCJ0cnVlIjoyMzB9LHsiY3VycmVudCI6IjQuMWUxIiwidG90YWwiOiI0LjFlMSIsInRydWVUb3RhbCI6IjEuNDE0MTY3MzMwNjU2ODJlMTQiLCJ0cnVlIjo0MX0seyJjdXJyZW50IjoiMCIsInRvdGFsIjoiMCIsInRydWVUb3RhbCI6IjIuNjMyOWU0IiwidHJ1ZSI6MH0seyJjdXJyZW50IjoiMCIsInRvdGFsIjoiMCIsInRydWVUb3RhbCI6IjYuMDM4ZTMiLCJ0cnVlIjowfSx7ImN1cnJlbnQiOiIwIiwidG90YWwiOiIwIiwidHJ1ZVRvdGFsIjoiMy4yNzdlMyIsInRydWUiOjB9XSxbeyJjdXJyZW50IjoiMi4wNTMxMjM2MDk1NTY2OGUxNSIsInRvdGFsIjoiMS45MDk5NzQ1Nzg1NjE3N2UxNiIsInRydWVUb3RhbCI6IjEuNTQ5NzAwODU5NDE2MjdlMTk1In0seyJjdXJyZW50IjoiMS41OWUyIiwidG90YWwiOiIxLjU5ZTIiLCJ0cnVlVG90YWwiOiIxLjIxNzkyOTk4NTY5NjMxZTI5IiwidHJ1ZSI6MTU5fSx7ImN1cnJlbnQiOiI0LjdlMSIsInRvdGFsIjoiNC43ZTEiLCJ0cnVlVG90YWwiOiIzLjA0NDgyNDk2NDI0MDgyZTI4IiwidHJ1ZSI6NDd9LHsiY3VycmVudCI6IjAiLCJ0b3RhbCI6IjAiLCJ0cnVlVG90YWwiOiI3LjYxMjA2MjQxMDQyNjI4ZTI3IiwidHJ1ZSI6MH0seyJjdXJyZW50IjoiMCIsInRvdGFsIjoiMCIsInRydWVUb3RhbCI6IjEuOTAzMDE1NjAyNjA2NDFlMjciLCJ0cnVlIjowfSx7ImN1cnJlbnQiOiIwIiwidG90YWwiOiIwIiwidHJ1ZVRvdGFsIjoiNC43NTc1MzkwMDU1ODcyOWUyNiIsInRydWUiOjB9XSxbeyJjdXJyZW50IjoiMCIsInRvdGFsIjoiMCIsInRydWVUb3RhbCI6IjAifSx7ImN1cnJlbnQiOiIwIiwidG90YWwiOiIwIiwidHJ1ZVRvdGFsIjoiMS41NDA1ZTQiLCJ0cnVlIjowfSx7ImN1cnJlbnQiOiIwIiwidG90YWwiOiIwIiwidHJ1ZVRvdGFsIjoiMS40NjI4ZTQiLCJ0cnVlIjowfSx7ImN1cnJlbnQiOiI2LjllMSIsInRvdGFsIjoiNi45ZTEiLCJ0cnVlVG90YWwiOiI2LjllMSIsInRydWUiOjMyfV0sW3siY3VycmVudCI6IjUuNjI5NzcyNDY2OTA0NjdlNSIsInRvdGFsIjoiNS42Mjk3NzI0NjY5MDQ2N2U1IiwidHJ1ZVRvdGFsIjoiNS42Mjk3NzI0NjY5MDQ2N2U1In0seyJjdXJyZW50IjoiMCIsInRvdGFsIjoiMCIsInRydWVUb3RhbCI6IjAiLCJ0cnVlIjowfV1dLCJ2ZXJzZXMiOlt7InRydWUiOjAsIm90aGVyIjpbMCwwLDBdLCJjdXJyZW50Ijo4LCJoaWdoZXN0Ijo4LCJsb3dlc3QiOls1LDI1NSwyNTVdLCJ0b3RhbCI6MTYzfSx7InRydWUiOjAsImN1cnJlbnQiOjAsInRvdGFsIjowfV0sInN0cmFuZ2UiOlt7ImN1cnJlbnQiOjE0OTIyNzk3LjI4NzU0NjEwNiwidG90YWwiOjQ0NjEyNzAyLjI4NzU0NjF9LHsiY3VycmVudCI6MTE3NzMzLjEwNzg1MTM1MTg0LCJ0b3RhbCI6MTE3NzMzLjEwNzg1MTM1MTg0fV0sImNvc21vbiI6W3siY3VycmVudCI6MCwidG90YWwiOjEyfSx7ImN1cnJlbnQiOjMyLjU0MDE1MzQ0NTE4MDQ2NSwidG90YWwiOjU4NS41NDAxNTM0NDUxODA2fV0sInVwZ3JhZGVzIjpbW10sWzEsMSwxLDEsMSwxLDEsMSwxLDEsMF0sWzEsMSwxLDEsMSwxLDEsMSwwXSxbMSwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSxbMSwxLDEsMSwxLDBdLFswLDAsMCwxLDAsMCwwXSxbMCwwXV0sInJlc2VhcmNoZXMiOltbXSxbNSw0LDgsMiw0LDNdLFs4LDgsNyw1LDMsMiwwXSxbOCwzLDAsMCwwLDAsMCwwLDBdLFs5LDIsMSwxLDAsMF0sWzAsMCwwLDAsMF0sWzAsMCwwLDBdXSwicmVzZWFyY2hlc0V4dHJhIjpbW10sWzEsNCwyLDQsMSwwXSxbNSwzLDEsMywwXSxbOSwwLDAsMCwxLDBdLFszLDEsMCwwLDBdLFsxLDAsMCwwLDAsMF0sWzAsMCwwLDAsMF1dLCJyZXNlYXJjaGVzQXV0byI6WzMsMiw0XSwiQVNSIjpbMCw1LDYsNSw1LDMsMF0sImVsZW1lbnRzIjpbMSwxLDEsMSwxLDEsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDEsMCwwLDAsMCwwLDAsMF0sInN0cmFuZ2VuZXNzIjpbW10sWzEwLDgsNCw2LDIsMSwxLDIsMiwxXSxbOCwxMiwzLDYsMiwxLDEsNiwzLDFdLFsxMiw4LDMsMSwyLDEsMywxLDYsMV0sWzEyLDgsMywyLDIsMSwyLDEsNywzXSxbOCw4LDYsMSwxLDEsMSwxLDEsMSwxXSxbMCwwLDAsMCwwXV0sIm1pbGVzdG9uZXMiOltbXSxbMzAsMTVdLFsxOCwyMV0sWzE1LDhdLFsxNywxMl0sWzE1LDZdXSwidHJlZSI6W1syLDIsMiwxLDEsMCwwXSxbMTIsMTYsMiwwLDQsMyw0LDAsM11dLCJjaGFsbGVuZ2VzIjp7ImFjdGl2ZSI6bnVsbCwidm9pZCI6WzAsMywzLDUsNSwxXSwic3VwZXJ2b2lkIjpbMCwzLDEsNSwwLDBdLCJzdXBlcnZvaWRNYXgiOlswLDMsMSw1LDAsMF0sInN0YWJpbGl0eSI6Mn0sInRvZ2dsZXMiOnsibm9ybWFsIjpbZmFsc2UsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLGZhbHNlXSwiY29uZmlybSI6WyJTYWZlIiwiU2FmZSIsIlNhZmUiLCJTYWZlIiwiU2FmZSIsIlNhZmUiLCJTYWZlIiwiU2FmZSJdLCJob3ZlciI6W3RydWUsZmFsc2UsZmFsc2VdLCJtYXgiOlt0cnVlLGZhbHNlLGZhbHNlXSwiYXV0byI6W3RydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsZmFsc2UsdHJ1ZV0sImJ1aWxkaW5ncyI6W1tdLFtmYWxzZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWVdLFtmYWxzZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZV0sW2ZhbHNlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZV0sW2ZhbHNlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZV0sW2ZhbHNlLHRydWUsdHJ1ZSx0cnVlXSxbZmFsc2UsdHJ1ZV1dLCJ2ZXJzZXMiOlt0cnVlLGZhbHNlXSwic2hvcCI6eyJpbnB1dCI6MCwid2FpdCI6WzIsMSwxLDEsMSwxLDFdfSwic3VwZXJ2b2lkIjpmYWxzZX0sImhpc3RvcnkiOnsic3RhZ2UiOnsiYmVzdCI6WzMxOS42MTk5OTk5OTk5OTkyNywxMzQxNjE2OC41MDk3NzMxMzEsNDc1NTkuOTYxOTYwOTY5NDUsNDk4MjAzLjU1NzE4Nzg1MDEsMTkuNTk5OTk5OTk5OTk5NjddLCJsaXN0IjpbWzMxOS42MTk5OTk5OTk5OTkyNywxMzQxNjE2OC41MDk3NzMxMzEsNDc1NTkuOTYxOTYwOTY5NDUsNDk4MjAzLjU1NzE4Nzg1MDEsMTkuNTk5OTk5OTk5OTk5NjddLFszNjYuNzM5OTk5OTk5OTU2NCw2Mzk3ODUwLjQyMTQyNDU3NiwyMjYxMy4xODM5Mjk0MTI5NSw3NDA5OC43NzAwMjQ1ODM1MSw2Ni43MjAwMDAwMDAwMDM4Nl0sWzYzMi42Nzk5OTk5OTk3MTQ2LDYwOTgxNC4wOTc1NDM3MzQ2LDAsMTU5OC4zNDA5NjQ3MzEwNjY4LDMzMi42NTk5OTk5OTk5ODc0XSxbNzcyLjI3OTk5OTk5OTU4NzYsMTMzMTY1LjEwMDg4NjY0ODkzLDAsMjI2LjgyMzg4Mjk0MjE5NzA2LDQ3Mi4yNTk5OTk5OTk4NjA0NF0sWzM5OS4zNTk5OTk5OTk5MjY3NCwxODgzLjA1MzIyNTEyODMxMzcsMCwxMy43MDY1MDY4NDE2NDE4NDUsOTkuMzM5OTk5OTk5OTk3MzddXSwiaW5wdXQiOlsyMCwxMDBdfSwiZW5kIjp7ImJlc3QiOlsxMDkzNTQuMjgwMDA0MzA0MTUsMzAuMzk5OTk5OTk5OTk5OTk1LDEsMC4wMDA0NDgzNDI4MDY4MDAzNTk1NSwzMjgzMi4wMjAwMDA2MTIxNl0sImxpc3QiOltbMTA5MzU0LjI4MDAwNDMwNDE1LDMwLjM5OTk5OTk5OTk5OTk5NSwxLDAuMDAwNDQ4MzQyODA2ODAwMzU5NTUsMzI4MzIuMDIwMDAwNjEyMTZdLFs3NTczNDIuNDQwNDAxMjUzNSwyNy42NTU5OTk5OTk5OTk5OTUsMCwwLjAwMDQ1MTA1OTk5MDk3MDIzNzc1LDMyNjM0LjI0MDAwMDYxOTQ5XSxbMTUzMDY3LjA1OTk5NzIwNjEsMzAuODg5OTk5OTk5OTk5OTk3LDEsMC4wMDA0MDY4MzY1NzMyMzQ2NjE5LDI2MDY0LjUyMDAwMDQ3NjA4OF0sWzE1MTcxNC40Nzk5OTc5MTQ2NiwyMC44OTQsMCwwLjAwMDQwODE3ODY2MjQ1NjgxODA2LDI1OTc4LjgyMDAwMDQ3NDIxOF0sWzE2NTI1NS43Nzk5OTA4MjA4LDIwLjg5NCwwLDAuMDAwNDAzODQ5NjY5Njg1NDcyNTcsNzMyOS40NjAwMDAwNjcxNDRdLFsxODQzMjEuOTk5OTgwODMyNiwyMC44OTQsMCwwLjAwMDM4NDI5Nzc5OTYzMTY4MDIzLDc3MDIuMzYwMDAwMDc1Mjg0XSxbMjcwMjIyLjU1OTk0NzU4NzgsMjAuODk0LDAsMC4wMDAzNjQwMjIwOTM5Nzg0NzM2LDI5MTMwLjEwMDAwMDU0MzAwM10sWzM2MzQyMC45ODAwMzQzODU2LDIwLjg5NCwwLDAuMDAwMTQ0Nzg0MDEzNjUxMDM3NCw5NDg5OS45ODAwMDEzNTk0Ml0sWzM1NTI4MS40NDAwMjY4MDUwNCwyMC44OTQsMCwwLjAwMDI0MTg5OTYzMTI2MzA2MzIzLDEyMjM2LjQ4MDAwMDE3NDI1M10sWzQxNDgxOS40ODAwODIyNTQxNiwyMC44OTQsMCwwLjAwMDE4ODM3NTYwNzI1ODg4NjgsNzI5MzkuMzc5OTk2ODg1NDZdLFs3NDQ1MjIuNTQwMzkyMDIwNywyMC44OTQsMCwwLjAwMDA3Mjk4NDc5MTEyNTEyMDc1LDE4ODI1OC4zOTk5Nzg3NzA0NF0sWzExMzI3OC40NDAwMDUxMDM2LDcuODYsMCwwLjAwMDA5OTU0OTM3MzE2ODk5MDY4LDI0MTA4LjY0MDAwMDQzMzM5NV0sWzI1MjExMi4zMTk5NDUzMTkzNSwxMi41NDk5OTk5OTk5OTk5OTksMCwwLjAwMDEyNDQwNTY4NTcxMTU1Njg4LDgxMTg1Ljk5OTk5ODU2NTUyXSxbMjE2NTA0NS44MDE3MTIyNzksMTkuMiwxLDAuMDAwMDkwOTUyMTU1Mzc0OTMzNDksMjYzODcuNTAwMDAwNDgzMTM4XSxbMjA0MDUzLjU3OTk3MDQ5NTgzLDkuMzk5OTk5OTk5OTk5OTk5LDAsMC4wMDAwOTMzMjI2ODQxNzY0NDk3NywyNTcxNy4yMjAwMDA0Njg1MDddLFs5NzMyOS4yMDUwMDE4NTM4NCw4LDAsMC4wMDAxMTEwODU2MDI1NjMzODk0NSwyMTYwNC45NjAwMDAzNzg3NDVdLFsxNTM5NjAuNDc5OTk2NzM4MDUsOCwwLDAuMDAwMDcyODYyNzA2NzIyNjM0MjksNTIxNTIuODc5OTk3NTE5NDVdLFsxMDIxNzEuOTIwMDAyODQwOTEsNi42LDAsMC4wMDAwNzg5NzA4NTE4NTcwOTY0OCwzMDM5MC45NjAwMDA1NzA1MjVdLFsxMzQxMzguNTIwMDA3MTIyMTYsOCwwLDAuMDAwMDY2NzcxMzk1MDMzNDUxLDc3ODc3LjY1OTk5Nzg5MTUyXSxbODUxMzkuNjM5OTk5MzcwOTgsMy44LDAsMC4wMDAwNDQ2MzU3MjU0OTUzMTcxNDQsODUxMzMuNTk5OTk5MzY5NzVdXSwiaW5wdXQiOlsyMCwxMDBdfX0sInByb2dyZXNzIjp7Im1haW4iOjI1LCJlbGVtZW50IjpbMjgsMzVdLCJyZXN1bHRzIjoyLCJ2b2lkIjpbMCwzLDMsNiw1LDJdLCJ1bml2ZXJzZXMiOlswLDddfSwiY2xvbmUiOnt9fQ==
5 changes: 5 additions & 0 deletions Source_TS/Hotkeys.ts
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,11 @@ export const offlineWarp = () => {
void simulateOffline(60_000, true);
};

export const timeWarp = (milliseconds: number) => {
if (global.offline.active) { return; }
void simulateOffline(milliseconds, true);
};

const changeTab = (direction: 'left' | 'right') => {
const tabs = global.tabs.list;
let index = tabs.indexOf(global.tabs.current);
Expand Down
50 changes: 49 additions & 1 deletion Source_TS/Main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { player, global, updatePlayer, prepareVacuum, fillMissingValues, vacuumS
import { getUpgradeDescription, switchTab, numbersUpdate, visualUpdate, format, getChallengeDescription, stageUpdate, updateCollapsePoints, getChallengeRewards } from './Update';
import { assignBuildingsProduction, buyBuilding, buyStrangeness, buyStrangenessMax, buyUpgrades, buyVerse, calculateTreeCost, collapseResetUser, dischargeResetUser, endResetUser, enterExitChallengeUser, inflationRefund, mergeResetUser, nucleationResetUser, rankResetUser, setActiveStage, stageResetUser, switchStage, timeUpdate, toggleChallengeType, vaporizationResetUser } from './Stage';
import { Alert, Prompt, setTheme, changeFontSize, changeFormat, specialHTML, replayEvent, Confirm, preventImageUnload, Notify, MDStrangenessPage, globalSave, toggleSpecial, saveGlobalSettings, openHotkeys, openVersionInfo, errorNotify, enableApril, enableLightness, resetMinSizes } from './Special';
import { assignHotkeys, buyAll, createAll, detectHotkey, detectShift, handleTouchHotkeys, hotkeys, offlineWarp, strangenessAll, toggleAll, toggleShift } from './Hotkeys';
import { assignHotkeys, buyAll, createAll, detectHotkey, detectShift, handleTouchHotkeys, hotkeys, offlineWarp, timeWarp, strangenessAll, toggleAll, toggleShift } from './Hotkeys';
import { checkUpgrade, stageResetType } from './Check';
import type { hotkeysList } from './Types';
import Overlimit from './Limit';
Expand Down Expand Up @@ -2013,6 +2013,54 @@ try { //Start everything
button.addEventListener('touchstart', () => repeatFunction(offlineWarp));
if (PC) { button.addEventListener('mousedown', () => repeatFunction(offlineWarp)); }
}
const makeMovableTimeWarpWindow = () => {
const container = getId('timeWarpContainer');
const handle = getId('timeWarpHandle');
let startX = 0;
let startY = 0;
let startLeft = 0;
let startTop = 0;

const clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);
const updatePosition = (x: number, y: number) => {
const width = container.getBoundingClientRect().width;
const height = container.getBoundingClientRect().height;
const maxX = document.documentElement.clientWidth - width;
const maxY = document.documentElement.clientHeight - height;
container.style.left = `${clamp(x, 0, maxX)}px`;
container.style.top = `${clamp(y, 0, maxY)}px`;
container.style.right = 'auto';
container.style.bottom = 'auto';
};

handle.addEventListener('pointerdown', (event: PointerEvent) => {
if (event.button !== 0) { return; }
startX = event.clientX;
startY = event.clientY;
const rect = container.getBoundingClientRect();
startLeft = rect.left;
startTop = rect.top;
handle.setPointerCapture(event.pointerId);
container.classList.add('dragging');

const move = (moveEvent: PointerEvent) => {
updatePosition(startLeft + moveEvent.clientX - startX, startTop + moveEvent.clientY - startY);
};

const end = () => {
container.classList.remove('dragging');
document.removeEventListener('pointermove', move);
document.removeEventListener('pointerup', end);
};

document.addEventListener('pointermove', move);
document.addEventListener('pointerup', end, { once: true });
});
};
makeMovableTimeWarpWindow();
getId('timeWarp1Min').addEventListener('click', () => timeWarp(60_000));
getId('timeWarp10Min').addEventListener('click', () => timeWarp(600_000));
getId('timeWarp1Hour').addEventListener('click', () => timeWarp(3_600_000));
getId('customFontSize').addEventListener('change', () => changeFontSize());

getId('stageHistorySave').addEventListener('change', () => {
Expand Down
2 changes: 2 additions & 0 deletions Source_TS/Stage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import { format, numbersUpdate, stageUpdate, switchTab, visualUpdate } from './U
export const timeUpdate = (tick: number, timeWarp: null | number = null) => {
const { time, ASR } = player;
if (timeWarp !== null) {
time.export[0] += tick;
time.online += tick - tick % 20;
timeWarp -= tick;
} else {
const currentTime = Date.now();
Expand Down
50 changes: 50 additions & 0 deletions Style.css
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,56 @@ h1, h2, h3, h4, h5, h6 { font-weight: normal; }

#notifications > p:not(:first-of-type) { margin-top: -2px; }

#timeWarpContainer {
position: fixed;
top: 2em;
right: 2em;
width: min(14rem, calc(100vw - 4rem));
display: flex;
flex-direction: column;
gap: 0.5em;
z-index: 20;
pointer-events: auto;
background-color: var(--window-color);
border: 2px solid var(--window-border);
border-radius: 10px;
padding: 0.4em;
}

#timeWarpHandle {
cursor: move;
touch-action: none;
padding: 0.5em 0.7em;
background-color: rgba(255, 255, 255, 0.05);
border-radius: 7px;
color: var(--button-text);
font-size: 0.85em;
text-align: center;
user-select: none;
}

.timeWarpButtons {
display: flex;
flex-direction: column;
gap: 0.5em;
}

.timeWarpButton {
width: 100%;
padding: 0.5em 1em;
background-color: var(--button-color);
border: 2px solid var(--button-border);
color: var(--button-text);
border-radius: 7px;
font-size: 0.84em;
cursor: pointer;
transition: background-color 0.2s;
}

.timeWarpButton:hover {
background-color: var(--button-hover);
}

.hasTitle { cursor: help; }
label { cursor: pointer !important; }
label:has(input[type = "number"], input[type = "text"]) { cursor: text !important; }
Expand Down
8 changes: 8 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,14 @@ <h1 class="biggerWord">Fundamental</h1>
</article>
<article id="notifications" aria-live="polite" role="none"></article>
<aside id="hoverWindow" class="whiteText" style="display: none;" aria-label="Hover text"></aside>
<aside id="timeWarpContainer" class="timeWarpContainer" aria-label="Time warp buttons">
<div id="timeWarpHandle" class="timeWarpHandle" role="button" tabindex="0" aria-label="Drag time warp box">Time Warp</div>
<div class="timeWarpButtons">
<button type="button" id="timeWarp1Min" class="timeWarpButton">+1 min</button>
<button type="button" id="timeWarp10Min" class="timeWarpButton">+10 min</button>
<button type="button" id="timeWarp1Hour" class="timeWarpButton">+1 hour</button>
</div>
</aside>
<main id="body" style="display: none;">
<section id="stageTab" role="none">
<section id="stageSubtabStructures" class="insideTab" aria-label="Current tab">
Expand Down
Loading
Loading